uawdijnntqw1x1x1
IP : 216.73.216.84
Hostname : webm003.cluster107.gra.hosting.ovh.net
Kernel : Linux webm003.cluster107.gra.hosting.ovh.net 5.15.167-ovh-vps-grsec-zfs-classid #1 SMP Tue Sep 17 08:14:20 UTC 2024 x86_64
Disable Function : _dyuweyrj4,_dyuweyrj4r,dl
OS : Linux
PATH:
/
home
/
opticamezl
/
www
/
newok
/
07d6c
/
..
/
assets
/
..
/
plugins
/
user
/
..
/
fields
/
.
/
..
/
..
/
packages.tar
/
/
container/src/Container/ServiceNotFoundException.php000064400000000303151666572060016716 0ustar00<?php namespace YOOtheme\Container; use Psr\Container\NotFoundExceptionInterface; class ServiceNotFoundException extends \InvalidArgumentException implements NotFoundExceptionInterface {} container/src/Container/InvalidArgumentException.php000064400000000305151666572060016734 0ustar00<?php namespace YOOtheme\Container; use Psr\Container\ContainerExceptionInterface; class InvalidArgumentException extends \InvalidArgumentException implements ContainerExceptionInterface {} container/src/Container/BadFunctionCallException.php000064400000001750151666572060016640 0ustar00<?php namespace YOOtheme\Container; use Psr\Container\ContainerExceptionInterface; class BadFunctionCallException extends \BadFunctionCallException implements ContainerExceptionInterface { /** * Creates an exception from given callback. * * @param string|callable|object $callback * @param mixed $code * @param null|mixed $previous * * @return self */ public static function create($callback, $code = 0, $previous = null) { $function = $callback; if (is_object($callback)) { $function = get_class($callback); } elseif (is_array($callback)) { [$class, $method] = $callback; if (is_string($class)) { $function = "{$class}::{$method}"; } else { $function = get_class($class) . "@{$method}"; } } return new self("Function {$function} is not a callable", $code, $previous); } } container/src/Container/ParameterResolver.php000064400000005751151666572060015440 0ustar00<?php namespace YOOtheme\Container; use YOOtheme\Container; use YOOtheme\Reflection; class ParameterResolver { /** * @var Container */ protected $container; /** * Constructor. */ public function __construct(Container $container) { $this->container = $container; } /** * Resolves parameters for given function. * * @param \ReflectionFunctionAbstract $function * @param array $parameters * * @return array */ public function resolve(\ReflectionFunctionAbstract $function, array $parameters = []) { if ($dependencies = $this->resolveDependencies($function, $parameters)) { $parameters = array_merge($dependencies, $parameters); } if ($function->getNumberOfRequiredParameters() > ($count = count($parameters))) { $parameter = $function->getParameters()[$count]; $declaring = $parameter->getDeclaringFunction(); throw new RuntimeException( "Can't resolve {$parameter} for " . Reflection::toString($declaring), ); } return $parameters; } /** * Resolves dependencies for given function. * * @param \ReflectionFunctionAbstract $function * @param array $parameters * * @return array */ protected function resolveDependencies( \ReflectionFunctionAbstract $function, array &$parameters = [] ) { $dependencies = []; foreach ($function->getParameters() as $parameter) { if (array_key_exists($name = "\${$parameter->name}", $parameters)) { $dependencies[] = $parameters[$name] instanceof \Closure ? $parameters[$name]() : $parameters[$name]; unset($parameters[$name]); } elseif ( ($classname = $this->resolveClassname($parameter)) && array_key_exists($classname, $parameters) ) { $dependencies[] = is_string($parameters[$classname]) ? $this->container->get($parameters[$classname]) : $parameters[$classname]; unset($parameters[$classname]); } elseif ( $classname && ($this->container->has($classname) || class_exists($classname)) ) { $dependencies[] = $this->container->get($classname); } else { break; } } return $dependencies; } /** * Resolves classname from parameter type. * * @param \ReflectionParameter $parameter * * @return string|null */ protected function resolveClassname(\ReflectionParameter $parameter) { $type = $parameter->getType(); return $type instanceof \ReflectionNamedType && !$type->isBuiltin() ? $type->getName() : null; } } container/src/Container/RuntimeException.php000064400000000261151666572060015267 0ustar00<?php namespace YOOtheme\Container; use Psr\Container\ContainerExceptionInterface; class RuntimeException extends \RuntimeException implements ContainerExceptionInterface {} container/src/Container/Service.php000064400000006436151666572060013377 0ustar00<?php namespace YOOtheme\Container; use YOOtheme\Container; class Service { /** * @var string */ public $class; /** * @var bool */ public $shared; /** * @var callable|null */ protected $factory; /** * @var array */ protected $arguments = []; /** * Constructor. * * @param string $class * @param bool $shared */ public function __construct($class, $shared = false) { $this->class = $class; $this->shared = $shared; } /** * Sets service class. * * @param string $class * * @return $this */ public function setClass($class) { $this->class = $class; return $this; } /** * Checks if service is shared. * * @return bool */ public function isShared() { return $this->shared; } /** * Sets service as shared. * * @param bool $shared * * @return $this */ public function setShared($shared = true) { $this->shared = (bool) $shared; return $this; } /** * Gets a service factory. * * @return callable */ public function getFactory() { return $this->factory; } /** * Sets a service factory. * * @param callable|string $factory * * @return $this */ public function setFactory($factory) { $this->factory = $factory; return $this; } /** * Sets an argument value. * * @param string $name * @param mixed $value * * @return $this */ public function setArgument($name, $value) { $this->arguments[$name] = $value; return $this; } /** * Gets arguments for given function. * * @return array */ public function getArguments() { return $this->arguments; } /** * Sets an array of arguments. * * @param array $arguments * * @return $this */ public function setArguments(array $arguments) { $this->arguments = $arguments; return $this; } /** * Resolves a new instance. * * @param Container $container * * @throws LogicException * @throws \ReflectionException * * @return object */ public function resolveInstance(Container $container) { return $this->factory ? $container->call($this->factory, $this->arguments) : $this->resolveClass($container); } /** * Resolves an instance from class. * * @param Container $container * * @throws LogicException * @throws \ReflectionException * * @return object */ protected function resolveClass(Container $container) { $class = new \ReflectionClass($this->class); if (!$class->isInstantiable()) { throw new LogicException("Can't instantiate {$this->class}"); } if (!($constructor = $class->getConstructor())) { return $class->newInstance(); } $resolver = new ParameterResolver($container); $arguments = $resolver->resolve($constructor, $this->arguments); return $class->newInstanceArgs($arguments); } } container/src/Container/LogicException.php000064400000000255151666572060014704 0ustar00<?php namespace YOOtheme\Container; use Psr\Container\ContainerExceptionInterface; class LogicException extends \LogicException implements ContainerExceptionInterface {} container/src/Container.php000064400000020575151666572060011777 0ustar00<?php namespace YOOtheme; use Psr\Container\ContainerInterface; use YOOtheme\Container\BadFunctionCallException; use YOOtheme\Container\InvalidArgumentException; use YOOtheme\Container\LogicException; use YOOtheme\Container\ParameterResolver; use YOOtheme\Container\RuntimeException; use YOOtheme\Container\Service; use YOOtheme\Container\ServiceNotFoundException; class Container implements ContainerInterface { /** * @var array */ protected $aliases = []; /** * @var array */ protected $services = []; /** * @var array */ protected $extenders = []; /** * @var array */ protected $instances = []; /** * @var array */ protected $resolving = []; /** * Gets a service. * * @param string $id * @param string ...$ids * * @return mixed */ public function __invoke($id, ...$ids) { return $ids ? array_map([$this, 'get'], [$id, ...$ids]) : $this->get($id); } /** * Gets a service. * * @param string $id * * @return mixed */ public function __get($id) { return $this->get($id); } /** * Checks if service exists. * * @param string $id * * @return bool */ public function __isset($id) { return $this->has($id); } /** * @inheritdoc */ public function has($id): bool { return isset($this->services[$id]) || isset($this->instances[$id]) || $this->isAlias($id); } /** * @inheritdoc */ public function get($id) { return $this->resolve($id); } /** * Sets a service instance. * * @param string $id * @param mixed $instance * * @return mixed */ public function set($id, $instance) { unset($this->aliases[$id]); return $this->instances[$id] = $instance; } /** * Adds a service definition. * * @param string $id * @param string|callable|Service $service * @param bool $shared * * @return Service */ public function add($id, $service = null, $shared = true) { if (is_string($service) || is_null($service)) { $service = new Service($service ?: $id, $shared); } elseif ($service instanceof \Closure) { $service = (new Service($id, $shared))->setFactory($service); } elseif (!$service instanceof Service) { throw new InvalidArgumentException('Service definition must be string or Closure'); } unset($this->instances[$id], $this->aliases[$id]); return $this->services[$id] = $service; } /** * Adds a callback to extend a service. * * @param string $id * @param callable $callback */ public function extend($id, callable $callback) { $id = $this->getAlias($id); if (isset($this->instances[$id])) { $extended = $callback($this->instances[$id], $this); if (isset($extended) && $extended !== $this->instances[$id]) { throw new LogicException( "Extending a resolved service {$id} must return the same instance", ); } } else { $this->extenders[$id][] = $callback; } } /** * Checks if a service is shared. * * @param string $id * * @return bool */ public function isShared($id) { return !empty($this->services[$id]->shared) || isset($this->instances[$id]); } /** * Checks if an alias exists. * * @param string $id * * @return bool */ public function isAlias($id) { return isset($this->aliases[$id]); } /** * Gets an alias. * * @param string $alias * * @throws LogicException * * @return string */ public function getAlias($alias) { if (!isset($this->aliases[$alias])) { return $alias; } if ($this->aliases[$alias] === $alias) { throw new LogicException("[{$alias}] is aliased to itself"); } return $this->getAlias($this->aliases[$alias]); } /** * Sets an alias. * * @param string $id * @param string $alias */ public function setAlias($id, $alias) { $this->aliases[$alias] = $id; } /** * Gets a callback from service@method or service::method syntax. * * @param callable|string $callback * * @return callable|null */ public function callback($callback) { if (is_string($callback)) { if (str_contains($callback, '::')) { [$service, $method] = explode('::', $callback, 2); $callback = [$this->getAlias($service), $method]; } elseif (str_contains($callback, '@')) { [$service, $method] = explode('@', $callback, 2); $callback = [$this->get($service), $method]; } elseif ($this->has($callback) || class_exists($callback)) { $callback = $this->get($callback); } } return is_callable($callback) ? $callback : null; } /** * Calls the callback with given parameters. * * @param callable|string $callback * @param array $parameters * @param bool $resolve * * @throws \Exception * * @return mixed */ public function call($callback, array $parameters = [], $resolve = true) { if (!($callable = $this->callback($callback))) { throw BadFunctionCallException::create($callback); } if ($resolve) { $resolver = new ParameterResolver($this); $function = Reflection::getFunction($callable); $parameters = $resolver->resolve($function, $parameters); } return $callable(...$parameters); } /** * Wraps the callback with optional parameter resolving. * * @param callable|string $callback * @param array $parameters * @param bool $resolve * * @return callable */ public function wrap($callback, array $parameters = [], $resolve = true) { return fn( ...$params ) => $this->call($callback, array_replace($parameters, $params), $resolve); } /** * Resolves a service from the container. * * @param string $id * * @throws \Exception * @throws \ReflectionException * * @return mixed */ public function resolve($id) { $id = $this->getAlias($id); if (isset($this->instances[$id])) { return $this->instances[$id]; } if (isset($this->resolving[$id])) { if ($this->resolving[$id] === true) { throw new RuntimeException( sprintf( 'Circular reference detected %s => %s', join(' => ', array_keys($this->resolving)), $id, ), ); } return $this->instances[$id] = $this->resolving[$id]; } $this->resolving[$id] = true; $instance = $this->resolveService($id); if ($this->isShared($id)) { $this->instances[$id] = $instance; } unset($this->resolving[$id]); return $instance; } /** * Resolves a service instance. * * @param string $id * * @throws \Exception * @throws \ReflectionException * * @return mixed */ protected function resolveService($id) { if (empty($this->services[$id]) && !class_exists($id)) { throw new ServiceNotFoundException("Service '{$id}' not found"); } $service = $this->services[$id] ?? new Service($id); $instance = $service->resolveInstance($this); $this->resolving[$id] = $this->isShared($id) ? $instance : null; foreach ($this->extenders[$id] ?? [] as $extender) { $instance = $extender($instance, $this) ?: $instance; } if (isset($this->instances[$id]) && $this->instances[$id] !== $instance) { throw new LogicException( "Extending a resolved service {$id} must return the same instance", ); } return $instance; } } builder-source/config/customizer.json000064400000006647151666572060014067 0ustar00{ "sources": { "filters": { "before": { "label": "Before", "description": "Add text before the content field." }, "after": { "label": "After", "description": "Add text after the content field." }, "search": { "label": "Search", "description": "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.", "type": "data-list", "options": { "URL Protocol": "/https?:\\/\\//", "Hyphen and Underscore": "/[\\-_]/" } }, "replace": { "label": "Replace", "description": "Enter the replacement string which may contain references. If left empty, the search matches will be removed." }, "limit": { "label": "Content Length", "description": "Limit the content length to a number of characters. All HTML elements will be stripped.", "type": "number", "attrs": { "placeholder": "No limit." } }, "preserve": { "type": "checkbox", "text": "Preserve words" }, "date": { "label": "Date Format", "description": "Select a predefined date format or enter a custom format.", "type": "data-list", "default": "", "options": { "Aug 6, 1999 (M j, Y)": "M j, Y", "August 06, 1999 (F d, Y)": "F d, Y", "08/06/1999 (m/d/Y)": "m/d/Y", "08.06.1999 (m.d.Y)": "m.d.Y", "6 Aug, 1999 (j M, Y)": "j M, Y", "Tuesday, Aug 06 (l, M d)": "l, M d", "15:00 (G:i)": "G:i", "3:00 pm (g:i A)": "g:i a" }, "attrs": { "placeholder": "Default" } } }, "directives": { "slice": { "fields": { "_grid": { "description": "Set the starting point and limit the number of items.", "type": "grid", "width": "1-2", "fields": { "offset": { "label": "Start", "type": "number", "default": 0, "modifier": 1, "attrs": { "min": 1, "required": true } }, "limit": { "label": "Quantity", "type": "limit", "attrs": { "placeholder": "No limit", "min": 0 } } } } } } } } } builder-source/config/builder.json000064400000007517151666572060013306 0ustar00{ "source": { "type": "fields", "fields": { "_source": { "label": "Dynamic Content", "type": "source-select", "description": "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source." }, "_sourceArgs": { "type": "source-query-args" }, "_sourceField": { "label": "Multiple Items Source", "type": "source-field-select", "description": "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.", "show": "yootheme.builder.helpers.Source.showMultipleSelectField(this.builder.path(this.node))" }, "_sourceFieldArgs": { "type": "source-field-args" }, "_sourceFieldDirectives": { "type": "source-field-directives" }, "_sourceCondition": { "type": "fields", "fields": { "_sourceConditionProp": { "label": "Dynamic Condition", "prop": "_condition", "type": "source-prop-select", "description": "Set a condition to display the element or its item depending on the content of a field." }, "_sourceConditionArgs": { "type": "source-prop-filters", "prop": "_condition", "fields": { "_grid": { "type": "grid", "width": "1-2", "fields": { "condition": { "label": "Condition", "type": "select", "default": "!!", "options": { "Is empty": "!", "Is not empty": "!!", "Is equal to": "=", "Is not equal to": "!=", "Contains": "~=", "Does not contain": "!~=", "Less than": "<", "Greater than": ">", "Starts with": "^=", "Does not start with": "!^=", "Ends with": "$=", "Does not end with": "!$=", "Matches a RegExp": "regex" }, "enable": "!show_empty" }, "condition_value": { "label": "Value", "enable": "!show_empty && $match(condition, '=|<|>|regex')" } } }, "show_empty": { "type": "checkbox", "text": "Show element only if dynamic content is empty" } } } }, "show": "yootheme.builder.helpers.Source.getSourceField(this.builder.path(this.node))" } } } } builder-source/src/Source.php000064400000004746151666572060012261 0ustar00<?php namespace YOOtheme\Builder; use YOOtheme\Event; use YOOtheme\GraphQL\Executor\ExecutionResult; use YOOtheme\GraphQL\GraphQL; use YOOtheme\GraphQL\SchemaBuilder; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Utils\Introspection; class Source extends SchemaBuilder { /** * @var Schema|null */ protected $schema; /** * Gets the schema. * * @return Schema */ public function getSchema() { return $this->schema ?: ($this->schema = $this->buildSchema()); } /** * Sets the schema. * * @param Schema $schema * * @return Schema */ public function setSchema(Schema $schema) { return $this->schema = $schema; } /** * Executes a query on schema. * * @param mixed $source * @param mixed $value * @param mixed $context * @param array|null $variables * @param string|null $operation * @param callable $fieldResolver * @param array $validationRules * * @return ExecutionResult */ public function query( $source, $value = null, $context = null, $variables = null, $operation = null, $fieldResolver = null, $validationRules = null ) { if (is_array($source)) { $source = AST::fromArray($source); } return GraphQL::executeQuery( $this->getSchema(), $source, $value, $context, $variables, $operation, $fieldResolver, $validationRules, ); } /** * Executes an introspection on schema. * * @param array $options * * @return ExecutionResult */ public function queryIntrospection(array $options = []) { $metadata = [ 'type' => $this->getType('Object'), 'resolve' => fn($type) => Event::emit( 'source.type.metadata|filter', $type->config['metadata'] ?? null, $type, ), ]; $options += [ '__Type' => compact('metadata'), '__Field' => compact('metadata'), '__Directive' => compact('metadata'), '__InputValue' => compact('metadata'), ]; return GraphQL::executeQuery( $this->getSchema(), Introspection::getIntrospectionQuery($options), ); } } builder-source/src/Source/Type/RequestType.php000064400000006607151666572060015472 0ustar00<?php namespace YOOtheme\Builder\Source\Type; use function YOOtheme\trans; use YOOtheme\Http\Request; class RequestType { /** * @return array */ public static function config() { return [ 'fields' => [ 'url' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('URL'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveUrl', ], ], 'method' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Method'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveMethod', ], ], 'scheme' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Scheme'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveScheme', ], ], 'host' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Host'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveHost', ], ], 'port' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Port'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolvePort', ], ], 'path' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Path'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolvePath', ], ], 'query' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Query'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveQuery', ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Request'), ], ]; } public static function resolveUrl(Request $request) { return (string) $request->getUri(); } public static function resolveMethod(Request $request) { return $request->getMethod(); } public static function resolveScheme(Request $request) { return $request->getUri()->getScheme(); } public static function resolveHost(Request $request) { return $request->getUri()->getHost(); } public static function resolvePort(Request $request) { return $request->getUri()->getPort(); } public static function resolvePath(Request $request) { return $request->getUri()->getPath(); } public static function resolveQuery(Request $request) { return $request->getUri()->getQuery(); } } builder-source/src/Source/Type/SiteType.php000064400000006502151666572060014740 0ustar00<?php namespace YOOtheme\Builder\Source\Type; use YOOtheme\Config; use YOOtheme\Http\Request; use function YOOtheme\app; use function YOOtheme\trans; class SiteType { /** * @return array */ public static function config() { return [ 'fields' => [ 'title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Site Title'), 'filters' => ['limit', 'preserve'], ], ], 'page_title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Page Title'), 'filters' => ['limit', 'preserve'], ], ], 'page_locale' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Page Locale'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolvePageLocale', ], ], 'page_url' => [ 'type' => 'String', 'args' => [ 'query' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Page URL'), 'arguments' => [ 'query' => [ 'label' => trans('Query String'), 'type' => 'checkbox', 'text' => trans('Include query string'), 'default' => false, ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolvePageUrl', ], ], 'is_guest' => [ 'type' => 'Int', 'metadata' => [ 'label' => trans('Guest User'), 'condition' => true, ], ], 'user' => [ 'type' => 'User', 'metadata' => [ 'label' => trans('Current User'), ], ], 'request' => [ 'type' => 'Request', 'metadata' => [ 'label' => trans('Request'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveRequest', ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Site'), ], ]; } public static function resolveRequest() { return app(Request::class); } public static function resolvePageUrl($obj, array $args) { $uri = static::resolveRequest()->getUri(); return $uri->getPath() . ($args['query'] ? "?{$uri->getQuery()}" : ''); } public static function resolvePageLocale() { return app(Config::class)('locale.code'); } } builder-source/src/Source/Listener/LoadBuilderConfig.php000064400000002016151666572060017346 0ustar00<?php namespace YOOtheme\Builder\Source\Listener; use YOOtheme\Builder\BuilderConfig; use YOOtheme\Builder\Source; use YOOtheme\Config; use YOOtheme\GraphQL\SchemaPrinter; class LoadBuilderConfig { public Config $config; public Source $source; public function __construct(Config $config, Source $source) { $this->config = $config; $this->source = $source; } /** * @param BuilderConfig $config */ public function handle($config): void { $dir = $this->config->get('image.cacheDir'); $file = "{$dir}/schema-{$this->config->get('source.id')}.gql"; $result = $this->source->queryIntrospection()->toArray(); $content = SchemaPrinter::doPrint($this->source->getSchema()); // update schema cache if (isset($result['data'])) { file_put_contents($file, $content); } elseif (is_file($file)) { unlink($file); } $config->merge(['schema' => $result['data']['__schema'] ?? $result]); } } builder-source/src/Source/Listener/OrderSourceMetadata.php000064400000000600151666572060017724 0ustar00<?php namespace YOOtheme\Builder\Source\Listener; class OrderSourceMetadata { public static function handle($metadata) { if (!empty($metadata['fields'])) { uasort( $metadata['fields'], fn($fieldA, $fieldB) => ($fieldA['@order'] ?? 0) - ($fieldB['@order'] ?? 0), ); } return $metadata; } } builder-source/src/Source/Listener/LoadSourceSchema.php000064400000002630151666572060017215 0ustar00<?php namespace YOOtheme\Builder\Source\Listener; use YOOtheme\Builder\Source; use YOOtheme\Config; use YOOtheme\Event; use YOOtheme\File; use YOOtheme\GraphQL\Error\Error; use YOOtheme\Http\Request; class LoadSourceSchema { public Config $config; public Request $request; public function __construct(Config $config, Request $request) { $this->config = $config; $this->request = $request; } /** * @param Source $source * @return bool|null */ public function handle($source): ?bool { $dir = $this->config->get('image.cacheDir'); $name = "schema-{$this->config->get('source.id')}"; $file = "{$dir}/{$name}.gql"; try { if ( $this->config->get('app.isSite') && !$this->request->getAttribute('customizer') && is_file($file) && filectime($file) > filectime(__FILE__) ) { // load schema from cache $hash = hash('crc32b', $file); $source->setSchema($source->loadSchema($file, "{$dir}/schema-{$hash}.php")); // stop event return false; } // delete invalid schema cache } catch (Error $e) { Event::emit('source.error', [$e]); File::rename($file, "{$dir}/{$name}.error.gql"); } return null; } } builder-source/src/Source/Listener/LogSourceError.php000064400000002307151666572060016751 0ustar00<?php namespace YOOtheme\Builder\Source\Listener; use YOOtheme\Config; use YOOtheme\GraphQL\Error\DebugFlag; use YOOtheme\GraphQL\Error\FormattedError; use YOOtheme\Metadata; class LogSourceError { public Config $config; public Metadata $metadata; public function __construct(Config $config, Metadata $metadata) { $this->config = $config; $this->metadata = $metadata; } public function handle($errors): void { if ($this->config->get('app.debug') || $this->config->get('app.isCustomizer')) { $this->metadata->set( 'script:graphql-errors', join( "\n", array_map( fn($error) => sprintf( 'console.warn(%s);', json_encode( FormattedError::createFromException( $error, DebugFlag::INCLUDE_DEBUG_MESSAGE, ), ), ), $errors, ), ), ); } } } builder-source/src/Source/Query/Node.php000064400000004217151666572060014244 0ustar00<?php namespace YOOtheme\Builder\Source\Query; class Node implements \JsonSerializable { /** * @var string */ public $kind; /** * @var ?string */ public $name; /** * @var ?string */ public $alias; /** * @var array */ public $children = []; /** * @var array */ public $arguments = []; /** * @var array */ public $directives = []; /** * Constructor. */ public function __construct($kind, $name, array $options = []) { $this->kind = $kind; $this->name = $name; foreach ($options as $key => $value) { $this->$key = $value; } } public function get($name) { foreach ($this->children as $child) { if ($child->name === $name) { return $child; } } return null; } public function query($name = null) { static::assertNode($this, 'Document'); return $this->children[] = new self('Query', $name); } public function field($name, array $arguments = []) { static::assertNode($this, 'Field', 'Query'); return $this->children[] = new self('Field', $name, ['arguments' => $arguments]); } public function directive($name, array $arguments = []) { static::assertNode($this, 'Field'); return $this->directives[] = new self('Directive', $name, ['arguments' => $arguments]); } public function toAST() { return AST::build($this); } public function toHash() { return hash('crc32b', json_encode($this)); } #[\ReturnTypeWillChange] public function jsonSerialize() { return array_values( array_filter([$this->kind, $this->name, $this->arguments, $this->directives]), ); } public static function document() { return new self('Document', null); } protected static function assertNode(self $node, ...$kind) { if (!in_array($node->kind, $kind, true)) { throw new \Exception('Node must be a ' . join(', ', $kind)); } } } builder-source/src/Source/Query/AST.php000064400000007225151666572060014010 0ustar00<?php namespace YOOtheme\Builder\Source\Query; class AST { public static function build(Node $node) { $build = [static::class, $node->kind]; return $build($node); } public static function field(Node $node) { $result = [ 'kind' => 'Field', 'name' => static::name($node->name), 'arguments' => static::arguments($node->arguments), 'directives' => array_map([static::class, 'directive'], $node->directives), ]; if ($node->alias) { $result['alias'] = static::name($node->alias); } if ($node->children) { $result['selectionSet'] = static::selections($node->children); } return $result; } public static function query(Node $node) { $result = [ 'kind' => 'OperationDefinition', 'operation' => 'query', 'selectionSet' => static::selections($node->children), 'variableDefinitions' => [], ]; if ($node->name) { $result['name'] = static::name($node->name); } return $result; } public static function document(Node $node) { return [ 'kind' => 'Document', 'definitions' => array_map([static::class, 'build'], $node->children), ]; } public static function directive(Node $node) { return [ 'kind' => 'Directive', 'name' => static::name($node->name), 'arguments' => static::arguments($node->arguments), ]; } public static function name($name) { return [ 'kind' => 'Name', 'value' => $name, ]; } public static function value($value) { switch (gettype($value)) { case 'NULL': return ['kind' => 'NullValue']; case 'string': return ['kind' => 'StringValue', 'value' => $value]; case 'boolean': return ['kind' => 'BooleanValue', 'value' => $value]; case 'integer': return ['kind' => 'IntValue', 'value' => strval($value)]; case 'double': return ['kind' => 'FloatValue', 'value' => strval($value)]; case 'array': return [ 'kind' => 'ListValue', 'values' => array_map([static::class, 'value'], $value), ]; case 'object': $fields = []; foreach (get_object_vars($value) as $key => $val) { $fields[] = static::objectField($key, $val); } return [ 'kind' => 'ObjectValue', 'fields' => $fields, ]; } } public static function objectField($name, $value) { return [ 'kind' => 'ObjectField', 'name' => static::name($name), 'value' => static::value($value), ]; } public static function arguments(array $arguments) { $result = []; foreach ($arguments as $name => $value) { $result[] = [ 'kind' => 'Argument', 'name' => static::name($name), 'value' => static::value($value), ]; } return $result; } public static function selections(array $selections) { $result = [ 'kind' => 'SelectionSet', 'selections' => [], ]; foreach ($selections as $selection) { $result['selections'][] = static::build($selection); } return $result; } } builder-source/src/Source/SourceQuery.php000064400000004651151666572060014542 0ustar00<?php namespace YOOtheme\Builder\Source; use YOOtheme\Builder\Source\Query\Node; class SourceQuery { public const PARENT = '#parent'; /** * @var Node */ public $document; /** * Constructor. */ public function __construct(?Node $document = null) { $this->document = $document ?? Node::document(); } /** * Creates a source query. * * @param object $node * * @return Node */ public function create($node) { return $this->querySource($node->source, $this->document->query()); } /** * Query source definition. * * @param object $source * @param Node $node * * @return Node */ public function querySource($source, Node $node) { $field = $node; // add query selection if ($source->query->name !== self::PARENT) { $field = $this->queryField($source->query, $field); } // add field selection if (isset($source->query->field)) { $field = $this->queryField($source->query->field, $field); } // add source properties foreach ((array) ($source->props ?? []) as $prop) { if (!str_starts_with($prop->name, '#')) { $this->queryField($prop, $field); } } return $field; } /** * Create nested field nodes. * * @param object $field * @param Node $node * * @return Node */ public function queryField($field, Node $node) { $parts = explode('.', $field->name); $name = array_pop($parts); $arguments = (array) ($field->arguments ?? []); $directives = (array) ($field->directives ?? []); foreach ($parts as $part) { $node = is_null($_node = $node->get($part)) ? $node->field($part) : $_node; } // check if field already exists $nodeExists = $node->get($name); // create node for field $node = $node->field($name, $arguments); // add directives foreach ($directives as $directive) { $node->directive($directive->name, (array) ($directive->arguments ?? [])); } // add alias if ($nodeExists && $nodeExists->toHash() !== ($hash = $node->toHash())) { $node->alias = "{$name}_{$hash}"; $field->name .= "_{$hash}"; } return $node; } } builder-source/src/Source/SourceFilter.php000064400000011167151666572060014662 0ustar00<?php namespace YOOtheme\Builder\Source; use YOOtheme\Arr; use YOOtheme\Str; trait SourceFilter { /** * @var array */ public $filters; /** * Constructor. * * @param array $filters */ public function __construct(array $filters = []) { $this->filters = array_merge( [ 'date' => [$this, 'applyDate'], 'limit' => [$this, 'applyLimit'], 'search' => [$this, 'applySearch'], 'before' => [$this, 'applyBefore'], 'after' => [$this, 'applyAfter'], 'condition' => [$this, 'applyCondition'], ], $filters, ); } /** * Adds a filter. * * @param string $name * @param callable $filter * @param int $offset */ public function addFilter($name, callable $filter, $offset = null) { Arr::splice($this->filters, $offset, 0, [$name => $filter]); } /** * Apply "before" filter. * * @param mixed $value * @param mixed $before * * @return string */ public function applyBefore($value, $before) { return $value != '' ? $before . $value : $value; } /** * Apply "after" filter. * * @param mixed $value * @param mixed $after * * @return string */ public function applyAfter($value, $after) { return $value != '' ? $value . $after : $value; } /** * Apply "limit" filter. * * @param mixed $value * @param mixed $limit * @param array $filters * * @return string */ public function applyLimit($value, $limit, array $filters) { if ($limit) { $value = preg_replace('/\s*<br[^<]*?\/?>\s*/', ' ', $value); $value = Str::limit( strip_tags($value), intval($limit), '…', !($filters['preserve'] ?? false), ); } return $value; } /** * Apply "date" filter. * * @param mixed $value * @param mixed $format * * @return false|string */ public function applyDate($value, $format) { if (!$value) { return $value; } if (is_string($value) && !is_numeric($value)) { $value = strtotime($value); } return date($format ?: 'd/m/Y', intval($value) ?: time()); } /** * Apply "search" filter. * * @param mixed $value * @param mixed $search * @param array $filters * * @return false|string */ public function applySearch($value, $search, array $filters) { $replace = $filters['replace'] ?? ''; if ($search && $search[0] === '/') { return @preg_replace($search, $replace, $value); } return str_replace($search, $replace, $value); } /** * Apply "condition" filter. * * @param mixed $value * @param mixed $operator * @param array $filters * * @return bool */ public function applyCondition($value, $operator, array $filters) { $propertyValue = html_entity_decode($value); $conditionValue = $filters['condition_value'] ?? ''; if ($operator === '!') { return empty($propertyValue); } if ($operator === '!!') { return !empty($propertyValue); } if ($operator === '=') { return $propertyValue == $conditionValue; } if ($operator === '!=') { return $propertyValue != $conditionValue; } if ($operator === '<') { return $propertyValue < $conditionValue; } if ($operator === '>') { return $propertyValue > $conditionValue; } if ($operator === '~=') { return str_contains($propertyValue, $conditionValue); } if ($operator === '!~=') { return !str_contains($propertyValue, $conditionValue); } if ($operator === '^=') { return str_starts_with($propertyValue, $conditionValue); } if ($operator === '!^=') { return !str_starts_with($propertyValue, $conditionValue); } if ($operator === '$=') { return str_ends_with($propertyValue, $conditionValue); } if ($operator === '!$=') { return !str_ends_with($propertyValue, $conditionValue); } if ($operator === 'regex') { return @preg_match($conditionValue, $propertyValue) > 0; } return !!$propertyValue; } } builder-source/src/Source/SourceTransform.php000064400000015527151666572060015414 0ustar00<?php namespace YOOtheme\Builder\Source; use YOOtheme\Arr; use YOOtheme\Builder\Source; use YOOtheme\Config; use YOOtheme\Event; use function YOOtheme\app; class SourceTransform { use SourceFilter; /** * Transform callback "preload". * * @param object $node * @param array $params * * @return void */ public function preload($node, array &$params) { if ($params['context'] !== 'render') { return; } if (empty($node->source->query->name)) { return; } if ($node->source->query->name === SourceQuery::PARENT) { if (!empty($params['source'])) { $params['source']->source->children[] = $node; } if (!empty($node->source->query->field->name)) { $params['source'] = $node; } } else { $params['source'] = $node; } } /** * Transform callback "prerender". * * @param object $node * @param array $params * * @return bool|void */ public function prerender($node, array &$params) { if (isset($node->source->data)) { $params['data'] = $node->source->data; } if (empty($node->source->query->name)) { return; } if ($node->source->query->name === SourceQuery::PARENT) { // Ignore if no field is mapped if (empty($node->source->props) && empty($node->source->children)) { return; } return $this->resolveSource($node, $params); } if ($result = $this->querySource($node, $params)) { $params['data'] = $result['data'] ?? null; return $this->resolveSource($node, $params); } } /** * Create source query. * * @param object $node * * @return ?Query\Node */ public function createQuery($node) { $query = new SourceQuery(); $parent = $query->create($node); $props = !empty($node->source->props); // extend source query foreach ($node->source->children ?? [] as $child) { $props = $this->createChildQuery($query, $parent, $child) || $props; } return $props ? $query->document : null; } /** * Add child queries * * @param SourceQuery $query * @param Query\Node $parent * @param object $node * * @return bool */ protected function createChildQuery($query, $parent, $node) { $p = $query->querySource($node->source, $parent); $props = !empty($node->source->props); foreach ($node->source->children ?? [] as $child) { $props = $this->createChildQuery($query, $p, $child) || $props; } return $props; } /** * Query source data. * * @param object $node * @param array $params * * @return array|void */ public function querySource($node, array $params) { if (!($query = $this->createQuery($node))) { return; } // execute query without validation rules $result = app(Source::class)->query( $query->toAST(), $params, new \ArrayObject(), null, null, null, app(Config::class)->get('app.debug') ? null : [], ); if (!empty($result->errors)) { Event::emit('source.error', $result->errors, $node); } return $result->toArray(); } /** * Map source properties. * * @param object $node * @param array $params * * @return ?object */ public function mapSource($node, array $params) { foreach ($node->source->props ?? [] as $name => $prop) { $value = trim($this->toString(Arr::get($params, "data.{$prop->name}"))); $filters = (array) ($prop->filters ?? []); // apply value filters foreach (array_intersect_key($this->filters, $filters) as $key => $filter) { $value = $filter($value, $filters[$key], $filters, $params); } // check condition value if ($name === '_condition' && $value === false) { return null; } // set filtered value $node->props[$name] = $value; } return $node; } /** * Repeat node for each source item. * * @param object $node * @param array $params * * @return array */ public function repeatSource($node, array $params) { $nodes = []; // clone and map node for each item foreach ($params['data'] as $index => $data) { $data = (array) $data; $data['#index'] = $index; $data['#first'] = $index === 0; $data['#last'] = $index === array_key_last($params['data']); if ($clone = $this->mapSource($this->cloneNode($node), ['data' => $data] + $params)) { $clone->source = (object) ['data' => $data]; $nodes[] = $clone; } } // insert cloned nodes after current node array_splice($params['parent']->children, $params['i'] + 1, 0, $nodes); return $nodes; } /** * Resolve source data. * * @param object $node * @param array $params * * @return bool */ public function resolveSource($node, array &$params) { $name = 'data'; // add query name if ($node->source->query->name !== SourceQuery::PARENT) { $name .= ".{$node->source->query->name}"; } // add field name if (isset($node->source->query->field)) { $name .= ".{$node->source->query->field->name}"; } // get source data $params['data'] = Arr::get($params, $name); if (!empty($node->source->props->_condition->filters->show_empty)) { return !$params['data']; } if ($params['data'] && is_array($params['data'])) { if (!array_is_list($params['data'])) { return (bool) $this->mapSource($node, $params); } $this->repeatSource($node, $params); } return false; } /** * Clone node recursively. * * @param object $node * * @return object */ protected function cloneNode($node) { $clone = clone $node; // recursively clone children if (isset($node->children)) { $clone->children = array_map(fn($child) => $this->cloneNode($child), $node->children); } return $clone; } protected function toString($value) { if (is_scalar($value) || is_callable([$value, '__toString'])) { return (string) $value; } return ''; } } builder-source/src/Source/OptimizeTransform.php000064400000000546151666572060015747 0ustar00<?php namespace YOOtheme\Builder\Source; class OptimizeTransform { /** * Transform callback. * * @param object $node * @param array $params */ public function __invoke($node, array $params) { if (empty($node->source->query) && isset($node->source->props)) { unset($node->source); } } } builder-source/updates.php000064400000000334151666572060011664 0ustar00<?php namespace YOOtheme; return [ '3.0.0-beta.1.2' => function ($node) { if (isset($node->source->query->name) && empty($node->source->query->name)) { unset($node->source); } }, ]; builder-source/bootstrap.php000064400000003305151666572060012235 0ustar00<?php namespace YOOtheme\Builder\Source; use YOOtheme\Application; use YOOtheme\Builder; use YOOtheme\Builder\BuilderConfig; use YOOtheme\Builder\Source; use YOOtheme\Builder\UpdateTransform; use YOOtheme\Event; use YOOtheme\GraphQL\Directive\SliceDirective; use YOOtheme\GraphQL\Plugin\ContainerPlugin; use YOOtheme\GraphQL\Type\ObjectScalarType; return [ 'events' => [ 'source.init' => [Listener\LoadSourceSchema::class => ['@handle', 50]], 'source.error' => [Listener\LogSourceError::class => '@handle'], 'source.type.metadata' => [Listener\OrderSourceMetadata::class => 'handle'], BuilderConfig::class => [Listener\LoadBuilderConfig::class => '@handle'], ], 'config' => [ BuilderConfig::class => __DIR__ . '/config/customizer.json', ], 'extend' => [ Builder::class => function (Builder $builder, $app) { $source = $app(SourceTransform::class); $builder->addTransform('preload', [$source, 'preload']); $builder->addTransform('prerender', [$source, 'prerender'], 2); // Before Placeholder Transform $builder->addTransform('presave', new OptimizeTransform()); }, UpdateTransform::class => function (UpdateTransform $update) { $update->addGlobals(require __DIR__ . '/updates.php'); }, ], 'services' => [ Source::class => function (SliceDirective $slice, ObjectScalarType $objectType) { $source = new Source([new ContainerPlugin(Application::getInstance())]); $source->setType($objectType); $source->setDirective($slice); Event::emit('source.init', $source); return $source; }, ], ]; http-server/bootstrap.php000064400000001366151666572060011601 0ustar00<?php use YOOtheme\BodyMiddleware; use YOOtheme\CsrfMiddleware; use YOOtheme\Router; use YOOtheme\RouterMiddleware; use YOOtheme\Routes; use YOOtheme\UrlResolver; return [ 'events' => [ 'app.request' => [ BodyMiddleware::class => ['parseJson', 10], CsrfMiddleware::class => ['@handle', 10], RouterMiddleware::class => [['@handleRoute', 30], ['@handleStatus', 20]], ], 'app.error' => [RouterMiddleware::class => ['@handleError', 10]], 'url.resolve' => [UrlResolver::class => 'resolve'], ], 'aliases' => [ Routes::class => 'routes', ], 'services' => [ Routes::class => '', Router::class => '', RouterMiddleware::class => '', ], ]; http-server/src/Route.php000064400000004746151666572070011457 0ustar00<?php namespace YOOtheme; class Route { /** * @var string */ protected $name; /** * @var string */ protected $path; /** * @var string|callable */ protected $callable; /** * @var array */ protected $methods = []; /** * @var array */ protected $attributes = []; /** * Constructor. * * @param string $path * @param string|callable $callable * @param string|string[] $methods */ public function __construct($path, $callable, $methods = []) { $this->setPath($path); $this->setMethods($methods); $this->callable = $callable; } /** * Gets the path. * * @return string */ public function getPath() { return $this->path; } /** * Sets the path. * * @param string $path * * @return $this */ public function setPath($path) { $this->path = '/' . trim($path, '/'); return $this; } /** * Gets the callable. * * @return string|callable */ public function getCallable() { return $this->callable; } /** * Gets the methods. * * @return string[] */ public function getMethods() { return $this->methods; } /** * Sets the methods. * * @param string|string[] $methods * * @return $this */ public function setMethods($methods) { $this->methods = array_map('strtoupper', (array) $methods); return $this; } /** * Gets an attribute. * * @param string $name * @param mixed $default * * @return mixed */ public function getAttribute($name, $default = null) { return $this->attributes[$name] ?? $default; } /** * Sets an attribute. * * @param string $name * @param mixed $value * * @return $this */ public function setAttribute($name, $value) { $this->attributes[$name] = $value; return $this; } /** * Gets the attributes. * * @return array */ public function getAttributes() { return $this->attributes; } /** * Sets the attributes. * * @param array $attributes * * @return $this */ public function setAttributes(array $attributes) { $this->attributes = $attributes; return $this; } } http-server/src/RouterMiddleware.php000064400000003254151666572070013630 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\Request; use YOOtheme\Http\Response; class RouterMiddleware { public const FOUND = 1; public const NOT_FOUND = 0; public const METHOD_NOT_ALLOWED = 2; /** * @var Router */ protected $router; /** * Constructor. * * @param Router $router */ public function __construct(Router $router) { $this->router = $router; } /** * Handles the route dispatch. * * @param Request $request * @param callable $next * * @return Response */ public function handleRoute($request, callable $next) { return $next($this->router->dispatch($request)); } /** * Handles the route status. * * @param Request $request * @param callable $next * * @return Response */ public function handleStatus($request, callable $next) { $status = $request->getAttribute('routeStatus'); // Not found if ($status === static::NOT_FOUND) { $request->abort(404); } // Method not allowed if ($status === static::METHOD_NOT_ALLOWED) { $request->abort(405); } return $next($request); } /** * Handles an error. * * @param Response $response * @param \Exception $exception * * @return Response */ public function handleError($response, $exception) { if ($exception instanceof Http\Exception) { return $response->withStatus($exception->getCode(), $exception->getMessage()); } return $response->withStatus(500, $exception->getMessage()); } } http-server/src/UrlResolver.php000064400000000620151666572070012630 0ustar00<?php namespace YOOtheme; class UrlResolver { public static function resolve(Config $config, $path, $parameters, $secure, callable $next) { $root = $config('app.rootDir'); $path = Path::resolveAlias($path); if (Path::isBasePath($root, $path)) { $path = Path::relative($root, $path); } return $next($path, $parameters, $secure); } } http-server/src/Routes.php000064400000011007151666572070011626 0ustar00<?php namespace YOOtheme; class Routes implements \IteratorAggregate { /** * @var Route[] */ protected $index = []; /** * @var Route[] */ protected $routes = []; /** * Adds a route. * * @param string|string[] $method * @param string $path * @param string|callable $handler * @param array $attributes * * @return Route */ public function map($method, $path, $handler, array $attributes = []) { $route = new Route($path, $handler, $method); $route->setAttributes($attributes); if ($this->index) { $this->index = []; } return $this->routes[] = $route; } /** * Adds a GET route. * * @param string|string[] $path * @param string|callable $handler * @param array $attributes * * @return Route */ public function get($path, $handler, array $attributes = []) { return $this->map('GET', $path, $handler, $attributes); } /** * Adds a POST route. * * @param string|string[] $path * @param string|callable $handler * @param array $attributes * * @return Route */ public function post($path, $handler, array $attributes = []) { return $this->map('POST', $path, $handler, $attributes); } /** * Adds a PUT route. * * @param string|string[] $path * @param string|callable $handler * @param array $attributes * * @return Route */ public function put($path, $handler, array $attributes = []) { return $this->map('PUT', $path, $handler, $attributes); } /** * Adds a PATCH route. * * @param string|string[] $path * @param string|callable $handler * @param array $attributes * * @return Route */ public function patch($path, $handler, array $attributes = []) { return $this->map('PATCH', $path, $handler, $attributes); } /** * Adds a DELETE route. * * @param string|string[] $path * @param string|callable $handler * @param array $attributes * * @return Route */ public function delete($path, $handler, array $attributes = []) { return $this->map('DELETE', $path, $handler, $attributes); } /** * Adds a HEAD route. * * @param string|string[] $path * @param string|callable $handler * @param array $attributes * * @return Route */ public function head($path, $handler, array $attributes = []) { return $this->map('HEAD', $path, $handler, $attributes); } /** * Adds a OPTIONS route. * * @param string|string[] $path * @param string|callable $handler * @param array $attributes * * @return Route */ public function options($path, $handler, array $attributes = []) { return $this->map('OPTIONS', $path, $handler, $attributes); } /** * Adds a group of routes. * * @param string $prefix * @param callable $group * * @return self */ public function group($prefix, callable $group) { $routes = new self(); $group($routes); return $this->mount($prefix, $routes); } /** * Mounts a route collection. * * @param string $prefix * @param Routes $routes * * @return $this */ public function mount($prefix, Routes $routes) { $prefix = trim($prefix, '/'); foreach ($routes as $route) { $this->routes[] = $route->setPath($prefix . $route->getPath()); } return $this; } /** * Gets a route by name. * * @param string $name * * @return Route|null */ public function getRoute($name) { $index = $this->getIndex(); return $index[$name] ?? null; } /** * Gets an index of routes. * * @return Route[] */ public function getIndex() { if (!$this->index) { foreach ($this->routes as $index => $route) { $this->index[$route->getAttribute('name', "route_{$index}")] = $route; } } return $this->index; } /** * Implements the IteratorAggregate. * * @return \ArrayIterator */ #[\ReturnTypeWillChange] public function getIterator() { return new \ArrayIterator($this->routes); } } http-server/src/CsrfMiddleware.php000064400000002302151666572070013236 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\Request; use YOOtheme\Http\Response; class CsrfMiddleware { /** * Current token. * * @var string */ protected $token; /** * Verify callable. * * @var callable */ protected $verify; /** * Constructor. * * @param string $token * @param ?callable $verify */ public function __construct($token, ?callable $verify = null) { $this->token = $token; $this->verify = $verify ?: [$this, 'verifyToken']; } /** * Handles CSRF token from request. * * @param Request $request * @param callable $next * * @return Response */ public function handle($request, callable $next) { $csrf = $request->getAttribute('csrf', in_array($request->getMethod(), ['POST', 'DELETE'])); if ($csrf && !($this->verify)($request->getHeaderLine('X-XSRF-Token'))) { $request->abort(401, 'Invalid CSRF token.'); } return $next($request); } /** * Verifies a CSRF token. */ public function verifyToken(string $token): bool { return $this->token === $token; } } http-server/src/BodyMiddleware.php000064400000001060151666572070013236 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\Request; use YOOtheme\Http\Response; class BodyMiddleware { /** * Handles JSON requests. * * @param Request $request * @param callable $next * * @return Response */ public static function parseJson($request, callable $next) { if (stripos($request->getHeaderLine('Content-Type'), 'application/json') === 0) { $request = $request->withParsedBody(json_decode((string) $request->getBody(), true)); } return $next($request); } } http-server/src/HttpClientInterface.php000064400000001613151666572070014246 0ustar00<?php namespace YOOtheme; interface HttpClientInterface { /** * Execute a GET HTTP request. * * @param string $url * @param array $options * * @return mixed */ public function get($url, $options = []); /** * Execute a POST HTTP request. * * @param string $url * @param string $data * @param array $options * * @return mixed */ public function post($url, $data = null, $options = []); /** * Execute a PUT HTTP request. * * @param string $url * @param string $data * @param array $options * * @return mixed */ public function put($url, $data = null, $options = []); /** * Execute a DELETE HTTP request. * * @param string $url * @param array $options * * @return mixed */ public function delete($url, $options = []); } http-server/src/Router.php000064400000003543151666572070011633 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\Request; class Router { /** * @var Routes */ protected $routes; /** * Constructor. * * @param Routes $routes */ public function __construct(Routes $routes) { $this->routes = $routes; } /** * Dispatches router for a request. * * @param Request $request * * @return Request */ public function dispatch(Request $request) { $path = '/' . trim($request->getQueryParam('p', ''), '/'); foreach ($this->routes->getIndex() as $route) { if ($route->getMethods() && !in_array($request->getMethod(), $route->getMethods())) { continue; } if (preg_match($this->getPattern($route), $path, $matches)) { $params = []; foreach ($matches as $key => $value) { if (is_string($key)) { $params[$key] = urldecode($value); } } foreach ($route->getAttributes() as $name => $value) { $request = $request->withAttribute($name, $value); } return $request ->withAttribute('route', $route) ->withAttribute('routeParams', $params) ->withAttribute('routeStatus', 1); } } return $request->withAttribute('routeStatus', 0); } /** * Gets the route regex pattern. * * @param Route $route * * @return string */ protected function getPattern(Route $route) { return '#^' . preg_replace_callback( '#\{(\w+)\}#', fn($matches) => '(?P<' . $matches[1] . '>[^/]+)', $route->getPath(), ) . '$#'; } } application/src/Application.php000064400000007540151666572070012637 0ustar00<?php namespace YOOtheme; use Psr\Http\Message\ResponseInterface; use YOOtheme\Configuration\Configuration; use YOOtheme\Http\Request; use YOOtheme\Http\Response; /** * @property Response $response * @property Request $request */ class Application extends Container { /** * @var Config */ protected $config; /** * @var array */ protected $loaders = []; /** * @var static|null */ protected static $instance; /** * Constructor. * * @param string $cache */ public function __construct($cache = null) { $this->config = new Configuration($cache); $this->set(static::class, $this); $this->setAlias(static::class, 'app'); $this->set(Config::class, $this->config); $this->setAlias(Config::class, 'config'); } /** * Gets global application. * * @param null|mixed $cache * * @return static */ public static function getInstance($cache = null) { return static::$instance ??= new static($cache); } /** * Run application. * * @param bool $send * * @return ResponseInterface */ public function run($send = true) { try { $response = Event::emit('app.request|middleware', [$this, 'handle'], $this->request); } catch (\Exception $exception) { $response = Event::emit('app.error|filter', $this->response, $exception); } return $send ? $response->send() : $response; } /** * Handles a request. * * @param Request $request * * @throws \Exception * * @return Response */ public function handle(Request $request) { $this->set(Request::class, $request); $route = $request->getAttribute('route'); $result = $this->call($route->getCallable()); if ($result instanceof Response) { return $result; } if (is_string($result) || (is_object($result) && method_exists($result, '__toString'))) { return $this->response->write((string) $result); } return $this->response; } /** * Loads a bootstrap file. * * @param string $files * * @return $this */ public function load($files) { $configs = []; foreach (File::glob($files, GLOB_NOSORT) as $file) { $configs = static::loadFile($file, $configs, ['app' => $this]); } if (isset($configs['loaders'])) { $this->loaders = array_merge($this->loaders, ...$configs['loaders']); } foreach (array_intersect_key($this->loaders, $configs) as $name => $loader) { if (is_string($loader) && class_exists($loader)) { $loader = $this->loaders[$name] = $this->resolveLoader($loader); } $loader($this, $configs[$name]); } return $this; } /** * Resolves a service instance. * * @param string $id * * @throws \Exception * @throws \ReflectionException * * @return mixed */ protected function resolveService($id) { return Hook::call([$id, 'app.resolve'], fn($id) => parent::resolveService($id), $id, $this); } /** * Resolves a loader instance. */ protected function resolveLoader(string $loader): callable { return new $loader($this); } /** * Loads a bootstrap config. */ protected static function loadFile(string $file, array $configs, array $parameters = []): array { extract($parameters, EXTR_SKIP); if (!is_array($config = require $file)) { throw new \RuntimeException("Unable to load file '{$file}'"); } foreach ($config as $key => $value) { $configs[$key][] = $value; } return $configs; } } application/src/Application/RouteLoader.php000064400000000743151666572070015062 0ustar00<?php namespace YOOtheme\Application; use YOOtheme\Container; class RouteLoader { /** * Load routes. * * @param Container $container * @param array $configs */ public function __invoke(Container $container, array $configs) { $container->extend('routes', static function ($routes) use ($configs) { foreach (array_merge(...$configs) as $route) { $routes->map(...$route); } }); } } application/src/Application/EventLoader.php000064400000002725151666572070015047 0ustar00<?php namespace YOOtheme\Application; use YOOtheme\Container; use YOOtheme\Event; use YOOtheme\EventDispatcher; class EventLoader { /** * @var EventDispatcher */ protected $dispatcher; /** * Constructor. */ public function __construct() { $this->dispatcher = Event::getDispatcher(); } /** * Load event listeners. */ public function __invoke(Container $container, array $configs) { foreach ($configs as $events) { foreach ($events as $event => $listeners) { foreach ($listeners as $class => $parameters) { $parameters = (array) $parameters; if (is_string($parameters[0])) { $parameters = [$parameters]; } foreach ($parameters as $params) { $this->addListener($container, $event, $class, ...$params); } } } } } /** * Adds a listener. */ public function addListener( Container $container, string $event, string $class, string $method, ...$params ): void { $this->dispatcher->addListener( $event, fn(...$arguments) => $container->call( $method[0] === '@' ? $class . $method : [$class, $method], $arguments, ), ...$params, ); } } application/src/Application/AliasLoader.php000064400000001002151666572070015002 0ustar00<?php namespace YOOtheme\Application; use YOOtheme\Container; class AliasLoader { /** * Load service aliases. * * @param Container $container * @param array $configs */ public function __invoke(Container $container, array $configs) { $config = array_merge_recursive(...$configs); foreach ($config as $id => $aliases) { foreach ((array) $aliases as $alias) { $container->setAlias($id, $alias); } } } } application/src/Application/ConfigLoader.php000064400000004215151666572070015167 0ustar00<?php namespace YOOtheme\Application; use YOOtheme\Config; use YOOtheme\ConfigObject; use YOOtheme\Container; use YOOtheme\Event; use YOOtheme\Hook; class ConfigLoader { /** * @var Config */ protected $config; /** * @var array */ protected $services = []; /** * Constructor. */ public function __construct(Container $container) { $this->config = $container->get(Config::class); Hook::after('app.resolve', [$this, 'loadConfig']); } /** * Load configuration. */ public function __invoke(Container $container, array $configs) { foreach ($configs as $config) { if ($config instanceof \Closure) { $config = $config($this->config, $container); } elseif (is_array($config)) { $config = $this->loadArray($config); } $this->config->add('', (array) $config); } } /** * After resolve service. * * @param mixed $service */ public function loadConfig($service, string $id) { if (!$service instanceof ConfigObject) { return; } foreach ($this->services[$id] ?? [] as $value) { $service->merge(is_string($value) ? static::loadFile($value) : $value); } Event::emit($id, $service); } protected function loadArray(array $config) { foreach ($config as $key => $value) { if (str_contains($key, '\\') && str_ends_with($key, 'Config')) { $this->services[$key][] = $value; unset($config[$key]); } } return $config; } protected static function loadFile(string $file) { $type = pathinfo($file, PATHINFO_EXTENSION); if ($type === 'php') { return require $file; } if ($type === 'ini') { return parse_ini_file($file, true, INI_SCANNER_TYPED); } if ($type === 'json') { return json_decode(file_get_contents($file), true); } throw new \RuntimeException("Unable to load config file '{$file}'"); } } application/src/Application/ExtendLoader.php000064400000000711151666572070015206 0ustar00<?php namespace YOOtheme\Application; use YOOtheme\Container; class ExtendLoader { /** * Load service extenders. * * @param Container $container * @param array $configs */ public function __invoke(Container $container, array $configs) { foreach ($configs as $config) { foreach ($config as $id => $callback) { $container->extend($id, $callback); } } } } application/src/Application/ServiceLoader.php000064400000002123151666572070015356 0ustar00<?php namespace YOOtheme\Application; use YOOtheme\Container; class ServiceLoader { /** * Load services configuration. * * @param Container $container * @param array $configs */ public function __invoke(Container $container, array $configs) { $config = array_merge(...$configs); foreach ($config as $id => $service) { if (is_array($service)) { $definition = $container->add($id); if (isset($service['class'])) { $definition->setClass($service['class']); } if (isset($service['factory'])) { $definition->setFactory($service['factory']); } if (isset($service['arguments'])) { $definition->setArguments($service['arguments']); } if (isset($service['shared'])) { $definition->setShared($service['shared']); } } else { $container->add($id, $service); } } } } application/src/Storage.php000064400000004017151666572070011774 0ustar00<?php namespace YOOtheme; abstract class Storage implements \JsonSerializable { /** * @var array */ protected $values = []; /** * @var bool */ protected $modified = false; /** * Gets a value (shortcut). * * @param string $key * @param mixed $default * * @return mixed */ public function __invoke($key, $default = null) { return Arr::get($this->values, $key, $default); } /** * Checks if a key exists. * * @param string $key * * @return bool */ public function has($key) { return Arr::has($this->values, $key); } /** * Gets a value. * * @param string $key * @param mixed $default * * @return mixed */ public function get($key, $default = null) { return Arr::get($this->values, $key, $default); } /** * Sets a value. * * @param string $key * @param mixed $value * * @return $this */ public function set($key, $value) { Arr::set($this->values, $key, $value); $this->modified = true; return $this; } /** * Deletes a value. * * @param string $key * * @return $this */ public function del($key) { Arr::del($this->values, $key); $this->modified = true; return $this; } /** * Checks if values are modified. * * @return bool */ public function isModified() { return $this->modified; } /** * Gets values which should be serialized to JSON. * * @return array */ #[\ReturnTypeWillChange] public function jsonSerialize() { return $this->values; } /** * Adds values from JSON. * * @param string $json * * @return $this */ protected function addJson($json) { $this->values = Arr::merge($this->values, json_decode($json, true) ?: []); return $this; } } application/bootstrap.php000064400000001553151666572070011620 0ustar00<?php namespace YOOtheme\Application; use YOOtheme\Config; use YOOtheme\Path; use YOOtheme\Url; use YOOtheme\View; return [ 'extend' => [ Config::class => function (Config $config) { $config->addFilter( 'url', fn($value, $file) => Url::to(Path::resolve(dirname($file), $value)), ); }, View::class => function (View $view, $app) { $view->addGlobal('app', $app); $view->addGlobal('config', $app(Config::class)); }, ], 'aliases' => [ View::class => 'view', ], 'loaders' => [ 'services' => ServiceLoader::class, 'aliases' => AliasLoader::class, 'extend' => ExtendLoader::class, 'events' => EventLoader::class, 'routes' => RouteLoader::class, 'config' => ConfigLoader::class, ], ]; application/functions.php000064400000000655151666572070011615 0ustar00<?php namespace YOOtheme; /** * Increase xdebug max nesting level. */ if ($level = ini_get('xdebug.max_nesting_level')) { ini_set('xdebug.max_nesting_level', max((int) $level, 256)); } /** * Gets a service from application. * * @param string $id * @param string ...$ids * * @return mixed */ function app($id = null, ...$ids) { $app = Application::getInstance(); return $id ? $app($id, ...$ids) : $app; } view/src/View.php000064400000016572151666572070007762 0ustar00<?php namespace YOOtheme; use YOOtheme\Theme\ViewHelperInterface; use YOOtheme\View\HtmlElementInterface; use YOOtheme\View\HtmlHelperInterface; /** * @method string builder($node, $params = []) * @mixin ViewHelperInterface * @mixin HtmlHelperInterface * @mixin HtmlElementInterface */ class View implements \ArrayAccess { /** * @var \SplStack */ protected $loader; /** * @var array */ protected $template = []; /** * @var array */ protected $parameters = []; /** * @var array */ protected $filters = []; /** * @var array */ protected $globals = []; /** * @var array */ protected $helpers = []; /** * @var array */ protected $functions = []; /** * @var array */ private $evalParameters; /** * Constructor. * * @param callable $loader */ public function __construct(?callable $loader = null) { $this->loader = new \SplStack(); $this->loader->push([$this, 'evaluate']); if ($loader) { $this->addLoader($loader); } $this->addFunction('e', [$this, 'escape']); } /** * Renders a template (shortcut). * * @param string $name * @param mixed $parameters * * @return string|false */ public function __invoke($name, $parameters = []) { return $this->render($name, $parameters); } /** * Handles dynamic calls to the class. * * @param string $name * @param array $args * * @return mixed */ public function __call($name, $args) { if (!isset($this->functions[($key = strtolower($name))])) { trigger_error( sprintf('Call to undefined method %s::%s()', get_class($this), $name), E_USER_ERROR, ); } return call_user_func_array($this->functions[$key], $args); } /** * Gets the global parameters. * * @return array */ public function getGlobals() { return $this->globals; } /** * Adds a global parameter. * * @param string $name * @param mixed $value * * @return $this */ public function addGlobal($name, $value) { $this->globals[$name] = $value; return $this; } /** * Adds a helper. * * @param string|callable $helper * * @return $this */ public function addHelper($helper) { if (is_callable($helper)) { $helper($this); } elseif (class_exists($helper)) { new $helper($this); } return $this; } /** * Adds a custom function. * * @param string $name * @param callable $callback * * @return View */ public function addFunction($name, callable $callback) { $this->functions[strtolower($name)] = $callback; return $this; } /** * Adds a loader callback. * * @param callable $loader * @param string $filter * * @return $this */ public function addLoader(callable $loader, $filter = null) { if (is_null($filter)) { $next = $this->loader->top(); $this->loader->push(function ($name, array $parameters = []) use ($loader, $next) { return $loader($name, $parameters, $next); }); } else { $this->filters[$filter][] = $loader; } return $this; } /** * Applies multiple functions. * * @param mixed $value * @param string $functions * * @return string */ public function apply($value, $functions) { $functions = explode('|', strtolower($functions)); return array_reduce( $functions, fn($value, $function) => call_user_func([$this, $function], $value), $value, ); } /** * Converts special characters to HTML entities. * * @param string $value * @param string $functions * * @return string */ public function escape($value, $functions = '') { $value = strval($value); if ($functions) { $value = $this->apply($value, $functions); } return htmlspecialchars($value, ENT_COMPAT, 'UTF-8'); } /** * Renders a template. * * @param string $name * @param array|callable $parameters * * @return string|callable|false */ public function render($name, $parameters = []) { if (is_callable($parameters)) { return fn() => $this->render( $name, call_user_func_array($parameters, func_get_args()) ?: [], ); } $next = $this->loader->top(); foreach ($this->filters as $filter => $loaders) { if (!Str::is($filter, $name)) { continue; } foreach ($loaders as $loader) { $next = fn($name, array $parameters = []) => $loader($name, $parameters, $next); } } return $next( $name, array_replace(end($this->parameters) ?: $this->globals, $parameters, [ '_root' => empty($this->template), ]), ); } /** * Renders current template. * * @param mixed $parameters * * @return string|false */ public function self($parameters = []) { return $this->render(end($this->template), $parameters); } /** * Evaluates a template. * * @param string $template * @param array $parameters * * @return string|false */ public function evaluate($template, array $parameters = []) { $this->template[] = $template; $this->parameters[] = $this->evalParameters = $parameters; unset($template, $parameters); extract($this->evalParameters, EXTR_SKIP); unset($this->evalParameters); $__file = end($this->template); $__dir = dirname($__file); if (is_file($__file)) { ob_start(); require $__file; $result = ob_get_clean(); } array_pop($this->template); array_pop($this->parameters); return $result ?? false; } /** * Checks if a helper is registered. * * @param string $name * * @return bool */ #[\ReturnTypeWillChange] public function offsetExists($name) { return isset($this->helpers[$name]); } /** * Gets a helper. * * @param string $name * * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet($name) { if (!$this->offsetExists($name)) { throw new \InvalidArgumentException(sprintf('Undefined helper "%s"', $name)); } return $this->helpers[$name]; } /** * Sets a helper. * * @param string $name * @param object $helper */ #[\ReturnTypeWillChange] public function offsetSet($name, $helper) { $this->helpers[$name] = $helper; } /** * Removes a helper. * * @param string $name */ #[\ReturnTypeWillChange] public function offsetUnset($name) { throw new \LogicException(sprintf('You can\'t remove a helper "%s"', $name)); } } view/src/View/HtmlHelperInterface.php000064400000002045151666572070013635 0ustar00<?php namespace YOOtheme\View; interface HtmlHelperInterface { /** * Creates an element. * * @param string $name * @param array $attrs * @param mixed $contents * * @return HtmlElement */ public function el($name, array $attrs = [], $contents = false); /** * Renders a link tag. * * @param string $title * @param string $url * @param array $attrs * * @return string */ public function link($title, $url = null, array $attrs = []); /** * Renders an image tag. * * @param array|string $url * @param array $attrs * * @return string */ public function image($url, array $attrs = []); /** * Renders a form tag. * * @param array $tags * @param array $attrs * * @return string */ public function form($tags, array $attrs = []); /** * Renders tag attributes. * * @param array $attrs * * @return string */ public function attrs(array $attrs); } view/src/View/FileLoader.php000064400000000636151666572070011762 0ustar00<?php namespace YOOtheme\View; use YOOtheme\File; class FileLoader { protected array $resolvedPaths = []; public function __invoke($name, $parameters, $next) { if (!str_ends_with(strtolower($name), '.php')) { $name .= '.php'; } $this->resolvedPaths[$name] ??= File::find($name); return $next($this->resolvedPaths[$name] ?: $name, $parameters); } } view/src/View/SectionHelper.php000064400000004272151666572070012520 0ustar00<?php namespace YOOtheme\View; use YOOtheme\View; class SectionHelper { /** * @var array */ protected $sections = []; /** * @var array */ protected $openSections = []; /** * Constructor. * * @param View $view */ public function __construct(View $view) { $view['sections'] = $this; $view->addFunction('section', [$this, 'get']); } /** * Gets a section. * * @param string $name * @param string|false $default * * @return string|false */ public function get($name, $default = false) { if (empty($this->sections[$name])) { return $default; } return array_reduce($this->sections[$name], function ($result, $content) { if (is_callable($content)) { $result = $content($result); } elseif (is_string($content)) { $result .= $content; } return $result; }); } /** * Sets a section value. * * @param string $name * @param string|callable $content */ public function set($name, $content) { $this->sections[$name] = [$content]; } /** * Adds a section value by appending it. * * @param string $name * @param string|callable $content */ public function add($name, $content) { $this->sections[$name][] = $content; } /** * Checks if a section exists. * * @param string $name * * @return bool */ public function exists($name) { return isset($this->sections[$name]); } /** * Starts a new section. * * @param string $name */ public function start($name) { if (ob_start()) { $this->openSections[] = $name; } } /** * Stops a section. * * @throws \LogicException */ public function stop() { if (!($name = array_pop($this->openSections))) { throw new \LogicException('Cannot stop a section without first starting one.'); } $this->sections[$name] = [ob_get_clean()]; } } view/src/View/HtmlHelper.php000064400000006620151666572070012017 0ustar00<?php namespace YOOtheme\View; use YOOtheme\View; class HtmlHelper implements HtmlHelperInterface { /** * @var callable[][] */ public $transforms = []; /** * Constructor. * * @param View $view */ public function __construct(View $view) { $view['html'] = $this; $view->addFunction('el', [$this, 'el']); $view->addFunction('link', [$this, 'link']); $view->addFunction('image', [$this, 'image']); $view->addFunction('form', [$this, 'form']); $view->addFunction('attrs', [$this, 'attrs']); $view->addFunction('expr', [HtmlElement::class, 'expr']); $view->addFunction('tag', [HtmlElement::class, 'tag']); } /** * @inheritdoc */ public function el($name, array $attrs = [], $contents = false) { return new HtmlElement($name, $attrs, $contents, [$this, 'applyTransform']); } /** * @inheritdoc */ public function link($title, $url = null, array $attrs = []) { return "<a{$this->attrs(['href' => $url], $attrs)}>{$title}</a>"; } /** * @inheritdoc */ public function image($url, array $attrs = []) { $url = (array) $url; $path = array_shift($url); $params = $url ? '#' . http_build_query( array_map(fn($value) => is_array($value) ? implode(',', $value) : $value, $url), '', '&', ) : ''; if (empty($attrs['alt'])) { $attrs['alt'] = true; } return "<img{$this->attrs(['src' => $path . $params], $attrs)}>"; } /** * @inheritdoc */ public function form($tags, array $attrs = []) { return HtmlElement::tag( 'form', $attrs, array_map( fn($tag) => HtmlElement::tag($tag['tag'], array_diff_key($tag, ['tag' => null])), $tags, ), ); } /** * @inheritdoc */ public function attrs(array $attrs) { $params = []; if (count($args = func_get_args()) > 1) { $attrs = call_user_func_array('array_merge_recursive', $args); } if (isset($attrs[':params'])) { $params = $attrs[':params']; unset($attrs[':params']); } return HtmlElement::attrs($attrs, $params); } /** * Adds a component. * * @param string $name * @param callable $component */ public function addComponent($name, callable $component) { $this->addTransform($name, $component); } /** * Adds a transform. * * @param string $name * @param callable $transform */ public function addTransform($name, callable $transform) { $this->transforms[$name][] = $transform; } /** * Applies transform callbacks. * * @param HtmlElement $element * @param array $params * * @return string|void */ public function applyTransform(HtmlElement $element, array $params = []) { if (empty($this->transforms[$element->name])) { return; } foreach ($this->transforms[$element->name] as $transform) { if ($result = call_user_func($transform, $element, $params)) { return $result; } } } } view/src/View/HtmlElementInterface.php000064400000001120151666572070014000 0ustar00<?php namespace YOOtheme\View; interface HtmlElementInterface { /** * Renders element tag. * * @param string $name * @param array $attrs * @param false|string|string[] $contents * @param array $params * * @return string */ public static function tag($name, $attrs = null, $contents = null, array $params = []); /** * Evaluate expression attribute. * * @param array $expressions * @param array $params * * @return string|null */ public static function expr($expressions, array $params = []); } view/src/View/StrHelper.php000064400000002333151666572070011660 0ustar00<?php namespace YOOtheme\View; use YOOtheme\Str; use YOOtheme\View; class StrHelper extends Str { /** * Constructor. * * @param View $view */ public function __construct(View $view) { $functions = [ // native 'trim' => 'trim', 'json' => 'json_encode', 'nl2br' => 'nl2br', 'striptags' => 'strip_tags', // date 'date' => [$this, 'date'], // string util 'limit' => [$this, 'limit'], 'words' => [$this, 'words'], 'upper' => [$this, 'upper'], 'lower' => [$this, 'lower'], 'title' => [$this, 'titleCase'], ]; foreach ($functions as $name => $function) { $view->addFunction($name, $function); } } /** * Formats a date. * * @param mixed $date * @param string $format * * @return string */ public function date($date, $format = 'F j, Y H:i') { if (is_string($date)) { $date = strtotime($date); } elseif ($date instanceof \DateTime) { $date = $date->getTimestamp(); } return date($format, $date); } } view/src/View/HtmlElement.php000064400000020173151666572070012170 0ustar00<?php namespace YOOtheme\View; use YOOtheme\Arr; class HtmlElement implements HtmlElementInterface { /** * @var string */ public $name; /** * @var array */ public $attrs; /** * @var mixed */ public $contents; /** * @var callable|null */ protected $transform; /** * Constructor. * * @param string $name * @param array $attrs * @param mixed $contents * @param callable|null $transform */ public function __construct( $name, array $attrs = [], $contents = '', ?callable $transform = null ) { $this->name = $name; $this->attrs = $attrs; $this->contents = $contents; $this->transform = $transform; } /** * Renders element shortcut. * * @see render() */ public function __toString() { return $this->render(); } /** * Render element shortcut. * * @param array $params * @param null|mixed $attrs * @param null|mixed $contents * @param null|mixed $name * * @return string * * @see render() */ public function __invoke(array $params = [], $attrs = null, $contents = null, $name = null) { return $this->render($params, $attrs, $contents, $name); } /** * Renders the element tag. * * @param array $params * @param array $attrs * @param string $contents * @param string $name * * @return string */ public function render(array $params = [], $attrs = null, $contents = null, $name = null) { $element = isset($attrs) ? $this->copy($attrs, $contents, $name) : $this; if (($transform = $this->transform) && ($result = $transform($element, $params))) { return $result; } return self::tag($element->name, $element->attrs, $element->contents, $params); } /** * Renders element closing tag. * * @return string */ public function end() { return self::isSelfClosing($this->name) ? '' : "</{$this->name}>"; } /** * Adds an attribute. * * @param string|array $name * @param mixed|null $value * * @return $this */ public function attr($name, $value = null) { $attrs = is_array($name) ? $name : [$name => $value]; $this->attrs = Arr::merge($this->attrs, $attrs); return $this; } /** * Copy instance. * * @param array|string $attrs * @param string $contents * @param string $name * * @return static */ public function copy($attrs = null, $contents = null, $name = null) { $clone = clone $this; if (is_array($attrs)) { $clone->attr($attrs); } elseif (isset($attrs)) { $contents = $attrs; } if (isset($name)) { $clone->name = $name; } if (isset($contents)) { $clone->contents = $contents; } return $clone; } /** * @inheritdoc */ public static function tag($name, $attrs = null, $contents = null, array $params = []) { $tag = $contents === false || self::isSelfClosing($name); if (is_array($attrs)) { $attrs = self::attrs($attrs, $params); } if (is_array($contents)) { $contents = join($contents); } return $tag ? "<{$name}{$attrs}>" : "<{$name}{$attrs}>{$contents}</{$name}>"; } /** * Renders tag attributes. * * @param array $attrs * @param array $params * * @return string */ public static function attrs(array $attrs, array $params = []) { $output = []; foreach ($attrs as $key => $value) { if (is_array($value)) { $value = self::expr($value, $params); } if (empty($value) && !is_numeric($value)) { continue; } if (is_numeric($key)) { $output[] = $value; } elseif ($value === true) { $output[] = $key; } elseif ($value !== '') { $output[] = sprintf( '%s="%s"', $key, htmlspecialchars($value, ENT_COMPAT, 'UTF-8', false), ); } } return $output ? ' ' . implode(' ', $output) : ''; } /** * @inheritdoc */ public static function expr($expressions, array $params = []) { $output = []; if (func_num_args() > 2) { $params = call_user_func_array('array_replace', array_slice(func_get_args(), 1)); } foreach ((array) $expressions as $expression => $condition) { if (!$condition) { continue; } if (is_int($expression)) { $expression = $condition; } if ( $expression = self::evaluateExpression( $expression, array_replace($params, (array) $condition), ) ) { $output[] = $expression; } } return $output ? join(' ', $output) : null; } /** * Checks if tag name is self-closing. * * @param string $name * * @return bool */ public static function isSelfClosing($name) { static $tags; if (is_null($tags)) { $tags = array_flip([ 'area', 'base', 'br', 'col', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'menuitem', 'meta', 'param', 'source', 'track', 'wbr', ]); } return isset($tags[strtolower($name)]); } /** * Parse expression string. * * @param string $expression * * @return array */ protected static function parseExpression($expression) { static $expressions; if (isset($expressions[$expression])) { return $expressions[$expression]; } $optionals = []; // match all optionals $output = preg_replace_callback( '/\[((?:[^\[\]]+|(?R))*)\]/', function ($matches) use (&$optionals) { return '%' . array_push($optionals, $matches[1]) . '$s'; }, $expression, ); // match all parameters preg_match_all( '/\{\s*(@?)(!?)(\w+)\s*(?::\s*([^{}]*(?:\{(?-1)\}[^{}]*)*))?\}/', $output, $parameters, PREG_SET_ORDER, ); return $expressions[$expression] = [$output, $parameters, $optionals]; } /** * Evaluate expression string. * * @param string $expression * @param array $params * * @return string */ protected static function evaluateExpression($expression, array $params = []) { if (!str_contains($expression, '{')) { return trim($expression); } [$output, $parameters, $optionals] = self::parseExpression($expression); foreach ($parameters as $match) { [$parameter, $empty, $negate, $name] = $match; $regex = isset($match[4]) ? "/^({$match[4]})$/" : ''; $value = $params[$name] ?? ''; $result = $regex ? preg_match($regex, $value) : $value || (is_string($value) && $value !== ''); if ($result xor $negate) { $output = str_replace($parameter, $empty ? '' : $value, $output); } else { return ''; } } if ($optionals) { $args = [$output]; foreach ($optionals as $match) { $args[] = self::evaluateExpression($match, $params); } $output = call_user_func_array('sprintf', $args); } return trim($output); } } view/bootstrap.php000064400000001004151666572070010256 0ustar00<?php namespace YOOtheme; use YOOtheme\View\FileLoader; use YOOtheme\View\HtmlHelper; use YOOtheme\View\SectionHelper; use YOOtheme\View\StrHelper; return [ 'services' => [ View::class => function (FileLoader $loader) { $view = new View($loader); $view->addGlobal('view', $view); $view->addHelper(StrHelper::class); $view->addHelper(HtmlHelper::class); $view->addHelper(SectionHelper::class); return $view; }, ], ]; graphql/src/Directive/BindDirective.php000064400000002752151666572070014160 0ustar00<?php namespace YOOtheme\GraphQL\Directive; use YOOtheme\Container; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\Type; class BindDirective extends Directive { /** * @var Container */ protected $container; /** * Constructor. * * @param Container $container */ public function __construct(Container $container) { parent::__construct([ 'name' => 'bind', 'args' => [ [ 'name' => 'id', 'type' => Type::string(), ], [ 'name' => 'class', 'type' => Type::string(), ], [ 'name' => 'args', 'type' => Type::string(), ], ], 'locations' => ['OBJECT', 'ENUM_VALUE', 'FIELD_DEFINITION'], ]); $this->container = $container; } /** * Register service on container. * * @param array $params */ public function __invoke(array $params) { if (!$this->container->has($params['id'])) { $service = $this->container->add($params['id']); if (isset($params['class'])) { $service->setClass($params['class']); } if (isset($params['args'])) { $service->setArguments(json_decode($params['args'], true)); } } } } graphql/src/Directive/SliceDirective.php000064400000002514151666572070014337 0ustar00<?php namespace YOOtheme\GraphQL\Directive; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\Type; class SliceDirective extends Directive { /** * Constructor. */ public function __construct() { parent::__construct([ 'name' => 'slice', 'args' => [ [ 'name' => 'offset', 'type' => Type::int(), ], [ 'name' => 'limit', 'type' => Type::int(), ], ], 'locations' => ['FIELD', 'FRAGMENT_SPREAD', 'INLINE_FRAGMENT'], ]); } /** * Directive callback. * * @param array $params * * @return \Closure */ public function __invoke(array $params) { return function ($root, $args, $context, $info, callable $next) use ($params) { $offset = $params['offset'] ?? 0; $limit = $params['limit'] ?? null; $value = $next($root, $args, $context, $info); // TODO 2.4 no need to check for $offset && $limit ? if (is_array($value) && ($offset || $limit)) { return array_slice($value, (int) $offset, (int) $limit ?: null); } return $value; }; } } graphql/src/Directive/CallDirective.php000064400000003117151666572070014153 0ustar00<?php namespace YOOtheme\GraphQL\Directive; use YOOtheme\Container; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Utils\Middleware; class CallDirective extends Directive { /** * @var Container */ protected $container; /** * Constructor. * * @param Container $container */ public function __construct(Container $container) { parent::__construct([ 'name' => 'call', 'args' => [ [ 'name' => 'func', 'type' => Type::string(), ], [ 'name' => 'args', 'type' => Type::string(), ], ], 'locations' => ['ENUM_VALUE', 'FIELD_DEFINITION'], ]); $this->container = $container; } /** * Resolve value from function callback. * * @param array $params * @param Middleware $resolver * * @return \Closure|void */ public function __invoke(array $params, Middleware $resolver) { // override default resolver $resolver->setHandler($this->container->callback($params['func'])); // merge additional arguments if (isset($params['args']) && is_array($arguments = json_decode($params['args'], true))) { return fn($value, $args, $context, $info, $next) => $next( $value, $args + $arguments, $context, $info, ); } } } graphql/src/Utils/ASTHelper.php000064400000006565151666572070012424 0ustar00<?php namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\InputObjectField; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\ObjectType; class ASTHelper extends AST { public static function objectType(ObjectType $type) { $node = [ 'kind' => 'ObjectTypeDefinition', 'name' => [ 'kind' => 'Name', 'value' => $type->name, ], 'fields' => [], 'interfaces' => [], 'directives' => [], ]; if (isset($type->config['directives'])) { foreach ($type->config['directives'] as $config) { $node['directives'][] = static::directive($config); } } foreach ($type->getFields() as $field) { $field->astNode = static::field($field); } return static::fromArray($node); } public static function inputType(InputObjectType $type) { $node = [ 'kind' => 'InputObjectTypeDefinition', 'name' => [ 'kind' => 'Name', 'value' => $type->name, ], 'fields' => [], 'directives' => [], ]; foreach ($type->config['directives'] ?? [] as $config) { $node['directives'][] = static::directive($config); } foreach ($type->getFields() as $field) { $field->astNode = static::inputField($field); } return static::fromArray($node); } public static function field(FieldDefinition $field) { $node = [ 'kind' => 'FieldDefinition', 'name' => [ 'kind' => 'Name', 'value' => $field->name, ], 'arguments' => [], 'directives' => [], ]; foreach ($field->config['directives'] ?? [] as $config) { $node['directives'][] = static::directive($config); } return static::fromArray($node); } public static function inputField(InputObjectField $field) { $node = [ 'kind' => 'InputValueDefinition', 'name' => [ 'kind' => 'Name', 'value' => $field->name, ], 'directives' => [], ]; foreach ($field->config['directives'] ?? [] as $config) { $node['directives'][] = static::directive($config); } return static::fromArray($node); } public static function directive(array $config) { $directive = [ 'kind' => 'Directive', 'name' => [ 'kind' => 'Name', 'value' => $config['name'], ], ]; foreach ($config['args'] ?? [] as $name => $value) { $directive['arguments'][] = static::argument($name, $value); } return static::fromArray($directive); } public static function argument($name, $value) { $argument = [ 'kind' => 'Argument', 'name' => [ 'kind' => 'Name', 'value' => $name, ], 'value' => [ 'kind' => 'StringValue', 'value' => $value, ], ]; return static::fromArray($argument); } } graphql/src/Utils/Introspection.php000064400000005764151666572070013475 0ustar00<?php namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Introspection as BaseIntrospection; class Introspection extends BaseIntrospection { public static function getIntrospectionQuery(array $options = []): string { $value = fn($val) => is_callable($val) ? $val() : $val; $options += ['defaults' => ['description']]; $fields = []; foreach (static::getTypes() as $name => $type) { if (isset($options[$name]) && $type instanceof ObjectType) { $type->config['fields'] = $value($type->config['fields']) + $options[$name]; $fields[$name] = join( ' ', array_merge($options['defaults'], array_keys($options[$name])), ); } else { $fields[$name] = join(' ', $options['defaults']); } } return <<<EOD query IntrospectionQuery { __schema { queryType { name } mutationType { name } subscriptionType { name } types { ...FullType } directives { name {$fields['__Directive']} locations args { ...InputValue } } } } fragment FullType on __Type { kind name {$fields['__Type']} fields(includeDeprecated: true) { name {$fields['__Field']} args { ...InputValue } type { ...TypeRef } } inputFields { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name {$fields['__EnumValue']} } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name {$fields['__InputValue']} type { ...TypeRef } defaultValue } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } } EOD; } } graphql/src/Utils/Middleware.php000064400000002732151666572070012702 0ustar00<?php namespace YOOtheme\GraphQL\Utils; class Middleware { /** * @var callable|null */ protected $handler; /** * @var array */ protected $stack = []; /** * Constructor. * * @param callable $handler */ public function __construct(?callable $handler = null) { $this->handler = $handler; } /** * Invokes the next middleware handler. * * @param mixed ...$arguments * * @return mixed */ public function __invoke(...$arguments) { if ($this->stack) { $arguments[] = $this; } $handler = array_shift($this->stack) ?: $this->handler; return $handler(...$arguments); } /** * Returns true if handler exists. */ public function hasHandler() { return isset($this->handler); } /** * Sets the middleware handler. * * @param callable $handler */ public function setHandler(callable $handler) { $this->handler = $handler; } /** * Unshift a middleware to the bottom of the stack. * * @param callable $middleware */ public function unshift(callable $middleware) { array_unshift($this->stack, $middleware); } /** * Push a middleware to the top of the stack. * * @param callable $middleware */ public function push(callable $middleware) { $this->stack[] = $middleware; } } graphql/src/Plugin/ContainerPlugin.php000064400000006477151666572070014076 0ustar00<?php namespace YOOtheme\GraphQL\Plugin; use YOOtheme\Container; use YOOtheme\GraphQL\Directive\BindDirective; use YOOtheme\GraphQL\Directive\CallDirective; use YOOtheme\GraphQL\SchemaBuilder; use YOOtheme\GraphQL\Type\Definition\Type; class ContainerPlugin { /** * @var Container */ protected $container; /** * Constructor. * * @param Container $container */ public function __construct(Container $container) { $this->container = $container; } /** * Register directives. * * @param SchemaBuilder $schema */ public function onLoad(SchemaBuilder $schema) { $schema->setDirective(new BindDirective($this->container)); $schema->setDirective(new CallDirective($this->container)); } /** * Add directives on type. * * @param Type $type */ public function onLoadType(Type $type) { if ( property_exists($type, 'config') && ($extensions = $type->config['extensions'] ?? []) && ($directives = $this->getDirectives($extensions)) ) { $type->config['directives'] = array_merge( $type->config['directives'] ?? [], $directives, ); } } /** * Add directives on field. * * @param Type $type * @param array $field * * @return array */ public function onLoadField(Type $type, array $field) { $extensions = $field['extensions'] ?? []; if ($extensions && ($directives = $this->getDirectives($extensions))) { if (!isset($field['directives'])) { $field['directives'] = []; } $field['directives'] = array_merge($field['directives'], $directives); } return $field; } /** * Get directives. * * @param array $extensions * * @return array */ protected function getDirectives(array $extensions) { $directives = []; if (isset($extensions['bind'])) { foreach ($extensions['bind'] as $id => $params) { $directives[] = $this->bindDirective($id, $params); } } if (isset($extensions['call'])) { $directives[] = $this->callDirective($extensions['call']); } return $directives; } /** * Get @bind directive. * * @param string $id * @param string|array $params * * @return array */ protected function bindDirective($id, $params) { if (is_string($params)) { $params = ['class' => $params]; } if (isset($params['args'])) { $params['args'] = json_encode($params['args']); } return [ 'name' => 'bind', 'args' => array_filter(compact('id') + $params), ]; } /** * Get @call directive. * * @param string|array $params * * @return array */ protected function callDirective($params) { if (is_string($params)) { $params = ['func' => $params]; } if (isset($params['args'])) { $params['args'] = json_encode($params['args']); } return [ 'name' => 'call', 'args' => $params, ]; } } graphql/src/SchemaBuilder.php000064400000030523151666572070012233 0ustar00<?php namespace YOOtheme\GraphQL; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Executor; use YOOtheme\GraphQL\Executor\Values; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\Parser; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\ResolveInfo; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\ASTHelper; use YOOtheme\GraphQL\Utils\BuildSchema; use YOOtheme\GraphQL\Utils\Middleware; class SchemaBuilder { /** * @var callable[][] */ protected $hooks = []; /** * @var Type[] */ protected $types = []; /** * @var Type[] */ protected $loadedTypes = []; /** * @var array */ protected $directives = []; /** * Constructor. * * @param array $plugins */ public function __construct(array $plugins = []) { $this->hooks = [ 'onLoad' => [], 'onLoadType' => [], 'onLoadField' => [], ]; foreach ($plugins as $plugin) { $this->loadPlugin($plugin); } /** @phpstan-ignore-next-line */ foreach ($this->hooks['onLoad'] as $hook) { $hook($this); } } /** * @param string $file * @param string $cache * * @return Schema */ public function loadSchema($file, $cache = null) { $isCached = is_file($cache) && filectime($cache) > filectime($file); $document = $isCached ? ASTHelper::fromArray(require $cache) : Parser::parse(file_get_contents($file), ['noLocation' => true]); $result = BuildSchema::build( $document, fn(array $config) => ['resolveField' => [$this, 'resolveField']] + $config, ['assumeValid' => $isCached, 'assumeValidSDL' => $isCached], ); if (!$isCached && $cache) { file_put_contents( $cache, "<?php\n\nreturn {$this->exportValue(ASTHelper::toArray($document))};", ); } return $result; } /** * @param array $config * * @return Schema */ public function buildSchema(array $config = []) { $config = array_replace_recursive( [ 'query' => 'Query', 'mutation' => 'Mutation', 'subscription' => 'Subscription', 'directives' => $this->directives, 'typeLoader' => [$this, 'getType'], ], $config, ); if (is_string($config['query'])) { $config['query'] = $this->getType($config['query']); } if (is_string($config['mutation'])) { $config['mutation'] = $this->getType($config['mutation']); } if (is_string($config['subscription'])) { $config['subscription'] = $this->getType($config['subscription']); } return new Schema($config); } /** * @param array $config * * @return string */ public function printSchema(array $config = []) { return SchemaPrinter::doPrint($this->buildSchema($config)); } /** * @param string $name * * @return Directive */ public function getDirective($name) { return $this->directives[$name] ?? null; } /** * @param Directive $directive */ public function setDirective(Directive $directive) { $this->directives[$directive->name] = $directive; } /** * @param string $name * * @return bool */ public function hasType($name) { return isset($this->types[$name]); } /** * @param string $name * * @return Type|void */ public function getType($name) { if (empty($this->loadedTypes)) { $this->loadedTypes = Type::getStandardTypes(); } if (isset($this->loadedTypes[$name])) { return $this->loadedTypes[$name]; } if (isset($this->types[$name])) { return $this->loadType($this->loadedTypes[$name] = $this->types[$name]); } } /** * @param Type $type */ public function setType(Type $type) { /** @var NamedType $type */ $this->types[$type->name] = $type; } /** * @param array|callable $config * * @return ObjectType */ public function queryType($config = []) { return $this->objectType('Query', $config); } /** * @param string $name * @param array|callable $config * * @return InputObjectType */ public function inputType($name, $config = []) { $type = $this->types[$name] ?? new InputObjectType([ 'name' => $name, 'fields' => [], ]); if (!$type instanceof InputObjectType) { throw new InvariantViolation("Type '{$name}' must be an InputObjectType."); } return $this->types[$name] = $this->extendType($type, $config); } /** * @param string $name * @param array|callable $config * * @return ObjectType */ public function objectType($name, $config = []) { $type = $this->types[$name] ?? new ObjectType([ 'name' => $name, 'fields' => [], 'resolveField' => [$this, 'resolveField'], ]); if (!$type instanceof ObjectType) { throw new InvariantViolation("Type '{$name}' must be an ObjectType."); } return $this->types[$name] = $this->extendType($type, $config); } /** * @template T of Type * @param T $type * @param array|callable $config * @return T */ public function extendType(Type $type, $config = []) { if (is_callable($config)) { $config = $config($type, $this); } if (is_array($config) && property_exists($type, 'config')) { $type->config = array_replace_recursive($type->config, $config); } return $type; } /** * @template T of Type * @param T $type * @return T */ public function loadType(Type $type) { foreach ($this->hooks['onLoadType'] as $hook) { $hook($type, $this); } if (isset($type->config['description']) && property_exists($type, 'description')) { $type->description = $type->config['description']; } if (isset($type->config['resolveField']) && $type instanceof ObjectType) { $type->resolveFieldFn = $type->config['resolveField']; } if (isset($type->config['fields'])) { $type->config['fields'] = $this->loadFields($type, $type->config['fields']); } if ($type instanceof ObjectType) { $type->astNode = ASTHelper::objectType($type); } elseif ($type instanceof InputObjectType) { $type->astNode = ASTHelper::inputType($type); } return $type; } /** * @param mixed $value * @param mixed $args * @param mixed $context * @param ResolveInfo $info * * @return mixed */ public function resolveField($value, $args, $context, ResolveInfo $info) { $resolver = new Middleware([Executor::class, 'defaultFieldResolver']); foreach ($this->resolveDirectives($info) as $directiveNode) { $directiveDef = $this->getDirective($directiveNode->name->value); if (is_callable($directiveDef)) { $directive = $directiveDef( Values::getArgumentValues($directiveDef, $directiveNode, $info->variableValues), $resolver, ); if (is_callable($directive)) { $resolver->push($directive); } } } return $resolver($value, $args, $context, $info); } /** * @return NodeList<DirectiveNode> */ public function resolveDirectives(ResolveInfo $info) { $nodes = new NodeList([]); $field = $info->parentType->getField($info->fieldName); // type directives if (isset($info->parentType->astNode->directives)) { $nodes = $nodes->merge($info->parentType->astNode->directives); } // field directives if (isset($field->astNode->directives)) { $nodes = $nodes->merge($field->astNode->directives); } // query field directives foreach ($info->fieldNodes as $node) { if ($info->fieldName === $node->name->value) { return $nodes->merge($node->directives); } } return $nodes; } /** * @param Type $type * @param array $field * * @return array */ protected function loadField(Type $type, array $field) { $field += ['type' => null]; if (is_string($field['type'])) { $field['type'] = $this->getType($field['type']); } if (is_array($field['type'])) { $field['type'] = $this->loadModifiers($field['type']); } if (empty($field['type'])) { /** @var NamedType $type */ throw new InvariantViolation( "Field '{$field['name']}' on '{$type->name}' does not have a Type.", ); } return $field; } /** * @param Type $type * @param array $fields * * @return array */ protected function loadFields(Type $type, array $fields) { $result = []; foreach ($fields as $name => $field) { $field = $this->loadField( $type, $field + [ 'name' => lcfirst($name), 'args' => [], ], ); foreach ($field['args'] as $key => $arg) { $field['args'][$key] = $this->loadField($type, $arg); } foreach ($this->hooks['onLoadField'] as $hook) { $field = $hook($type, $field, $this); } $result[$name] = $field; } return $result; } /** * @param array $type * * @return Type|array */ protected function loadModifiers(array $type) { if (isset($type['nonNull'])) { if (is_string($type['nonNull'])) { $nonNull = $this->getType($type['nonNull']); } elseif (is_array($type['nonNull'])) { $nonNull = $this->loadModifiers($type['nonNull']); } $type = Type::nonNull($nonNull ?? Type::string()); } elseif (isset($type['listOf'])) { if (is_string($type['listOf'])) { $listOf = $this->getType($type['listOf']); } elseif (is_array($type['listOf'])) { $listOf = $this->loadModifiers($type['listOf']); } $type = Type::listOf($listOf ?? Type::string()); } return $type; } /** * @param mixed $plugin */ protected function loadPlugin($plugin) { foreach ($this->hooks as $method => &$hooks) { $hook = [$plugin, $method]; if (is_callable($hook)) { $hooks[] = $hook; } } } /** * Export a parsable string representation of a value. * * @param mixed $value * @param int $indent * * @return string */ protected function exportValue($value, $indent = 0) { if (is_array($value)) { $array = []; $assoc = array_values($value) !== $value; $indention = str_repeat(' ', $indent); $indentlast = $assoc ? "\n" . $indention : ''; foreach ($value as $key => $val) { $array[] = ($assoc ? "\n " . $indention . var_export($key, true) . ' => ' : '') . $this->exportValue($val, $indent + 1); } return '[' . join(', ', $array) . $indentlast . ']'; } return var_export($value, true); } } graphql/src/SchemaPrinter.php000064400000006355151666572070012276 0ustar00<?php namespace YOOtheme\GraphQL; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\SchemaPrinter as BasePrinter; use YOOtheme\GraphQL\Utils\Utils; use function array_keys; use function array_map; use function array_values; use function compact; use function count; use function implode; use function sprintf; /** * Given an instance of Schema, prints it in GraphQL type language. */ class SchemaPrinter extends BasePrinter { /** * @inheritdoc */ public static function doPrint(Schema $schema, array $options = []): string { return parent::doPrint($schema, $options + compact('schema')); } /** * @inheritdoc */ public static function printIntrospectionSchema(Schema $schema, array $options = []): string { return parent::printIntrospectionSchema($schema, $options + compact('schema')); } /** * @inheritdoc */ protected static function printObject(ObjectType $type, array $options): string { $interfaces = $type->getInterfaces(); $implementedInterfaces = count($interfaces) > 0 ? ' implements ' . implode( ' & ', array_map( fn(InterfaceType $interface): string => $interface->name, $interfaces, ), ) : ''; return static::printDescription($options, $type) . sprintf( "type %s%s%s {\n%s\n}", $type->name, $implementedInterfaces, static::printDirectives($type, $options), static::printFields($options, $type), ); } /** * @inheritdoc */ protected static function printFields(array $options, $type): string { $fields = array_values($type->getFields()); return implode( "\n", array_map( fn($f, $i) => static::printDescription($options, $f, ' ', !$i) . ' ' . $f->name . static::printArgs($options, $f->args, ' ') . ': ' . $f->getType() . static::printDirectives($f, $options) . static::printDeprecated($f), $fields, array_keys($fields), ), ); } protected static function printDirectives($fieldOrType, array $options): string { $directives = []; if (isset($fieldOrType->astNode->directives)) { foreach ($fieldOrType->astNode->directives as $directive) { if (!$options['schema']->getDirective($directive->name->value)) { throw new Error( 'Unknown directive: ' . Utils::printSafe($directive->name->value) . '.', ); } $directives[] = Printer::doPrint($directive); } } return $directives ? ' ' . implode(' ', $directives) : ''; } } graphql/src/Type/ObjectScalarType.php000064400000001656151666572070013650 0ustar00<?php namespace YOOtheme\GraphQL\Type; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Type\Definition\ScalarType; class ObjectScalarType extends ScalarType { /** * @param array $config */ public function __construct(array $config = []) { parent::__construct($config + ['name' => 'Object']); } /** * @param mixed $value * * @return mixed */ public function serialize($value) { return $value; } /** * @param mixed $value * * @return array|null */ public function parseValue($value) { return is_array($value) ? $value : null; } /** * @param Node $valueNode * @param null|array $variables */ public function parseLiteral($valueNode, ?array $variables = null) { throw new Error("Query error: Can't parse Object literal"); } } graphql/lib/GraphQL.php000064400000020412151666572070010775 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\ExecutionResult; use YOOtheme\GraphQL\Executor\Executor; use YOOtheme\GraphQL\Executor\Promise\Adapter\SyncPromiseAdapter; use YOOtheme\GraphQL\Executor\Promise\Promise; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\Parser; use YOOtheme\GraphQL\Language\Source; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Schema as SchemaType; use YOOtheme\GraphQL\Validator\DocumentValidator; use YOOtheme\GraphQL\Validator\Rules\QueryComplexity; use YOOtheme\GraphQL\Validator\Rules\ValidationRule; /** * This is the primary facade for fulfilling GraphQL operations. * See [related documentation](executing-queries.md). * * @phpstan-import-type ArgsMapper from Executor * @phpstan-import-type FieldResolver from Executor * * @see \GraphQL\Tests\GraphQLTest */ class GraphQL { /** * Executes graphql query. * * More sophisticated GraphQL servers, such as those which persist queries, * may wish to separate the validation and execution phases to a static time * tooling step, and a server runtime step. * * Available options: * * schema: * The GraphQL type system to use when validating and executing a query. * source: * A GraphQL language formatted string representing the requested operation. * rootValue: * The value provided as the first argument to resolver functions on the top * level type (e.g. the query object type). * contextValue: * The context value is provided as an argument to resolver functions after * field arguments. It is used to pass shared information useful at any point * during executing this query, for example the currently logged in user and * connections to databases or other services. * If the passed object implements the `ScopedContext` interface, * its `clone()` method will be called before passing the context down to a field. * This allows passing information to child fields in the query tree without affecting sibling or parent fields. * variableValues: * A mapping of variable name to runtime value to use for all variables * defined in the requestString. * operationName: * The name of the operation to use if requestString contains multiple * possible operations. Can be omitted if requestString contains only * one operation. * fieldResolver: * A resolver function to use when one is not provided by the schema. * If not provided, the default field resolver is used (which looks for a * value on the source value with the field's name). * validationRules: * A set of rules for query validation step. Default value is all available rules. * Empty array would allow to skip query validation (may be convenient for persisted * queries which are validated before persisting and assumed valid during execution) * * @param string|DocumentNode $source * @param mixed $rootValue * @param mixed $contextValue * @param array<string, mixed>|null $variableValues * @param array<ValidationRule>|null $validationRules * * @api * * @throws \Exception * @throws InvariantViolation */ public static function executeQuery( SchemaType $schema, $source, $rootValue = null, $contextValue = null, ?array $variableValues = null, ?string $operationName = null, ?callable $fieldResolver = null, ?array $validationRules = null ): ExecutionResult { $promiseAdapter = new SyncPromiseAdapter(); $promise = self::promiseToExecute( $promiseAdapter, $schema, $source, $rootValue, $contextValue, $variableValues, $operationName, $fieldResolver, $validationRules ); return $promiseAdapter->wait($promise); } /** * Same as executeQuery(), but requires PromiseAdapter and always returns a Promise. * Useful for Async PHP platforms. * * @param string|DocumentNode $source * @param mixed $rootValue * @param mixed $context * @param array<string, mixed>|null $variableValues * @param array<ValidationRule>|null $validationRules Defaults to using all available rules * * @api * * @throws \Exception */ public static function promiseToExecute( PromiseAdapter $promiseAdapter, SchemaType $schema, $source, $rootValue = null, $context = null, ?array $variableValues = null, ?string $operationName = null, ?callable $fieldResolver = null, ?array $validationRules = null ): Promise { try { $documentNode = $source instanceof DocumentNode ? $source : Parser::parse(new Source($source, 'GraphQL')); if ($validationRules === null) { $queryComplexity = DocumentValidator::getRule(QueryComplexity::class); assert($queryComplexity instanceof QueryComplexity, 'should not register a different rule for QueryComplexity'); $queryComplexity->setRawVariableValues($variableValues); } else { foreach ($validationRules as $rule) { if ($rule instanceof QueryComplexity) { $rule->setRawVariableValues($variableValues); } } } $validationErrors = DocumentValidator::validate($schema, $documentNode, $validationRules); if ($validationErrors !== []) { return $promiseAdapter->createFulfilled( new ExecutionResult(null, $validationErrors) ); } return Executor::promiseToExecute( $promiseAdapter, $schema, $documentNode, $rootValue, $context, $variableValues, $operationName, $fieldResolver ); } catch (Error $e) { return $promiseAdapter->createFulfilled( new ExecutionResult(null, [$e]) ); } } /** * Returns directives defined in GraphQL spec. * * @throws InvariantViolation * * @return array<string, Directive> * * @api */ public static function getStandardDirectives(): array { return Directive::getInternalDirectives(); } /** * Returns types defined in GraphQL spec. * * @throws InvariantViolation * * @return array<string, ScalarType> * * @api */ public static function getStandardTypes(): array { return Type::getStandardTypes(); } /** * Replaces standard types with types from this list (matching by name). * * Standard types not listed here remain untouched. * * @param array<string, ScalarType> $types * * @api * * @throws InvariantViolation */ public static function overrideStandardTypes(array $types): void { Type::overrideStandardTypes($types); } /** * Returns standard validation rules implementing GraphQL spec. * * @return array<class-string<ValidationRule>, ValidationRule> * * @api */ public static function getStandardValidationRules(): array { return DocumentValidator::defaultRules(); } /** * Set default resolver implementation. * * @phpstan-param FieldResolver $fn * * @api */ public static function setDefaultFieldResolver(callable $fn): void { Executor::setDefaultFieldResolver($fn); } /** * Set default args mapper implementation. * * @phpstan-param ArgsMapper $fn * * @api */ public static function setDefaultArgsMapper(callable $fn): void { Executor::setDefaultArgsMapper($fn); } } graphql/lib/Validator/DocumentValidator.php000064400000027767151666572070015074 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\TypeInfo; use YOOtheme\GraphQL\Validator\Rules\DisableIntrospection; use YOOtheme\GraphQL\Validator\Rules\ExecutableDefinitions; use YOOtheme\GraphQL\Validator\Rules\FieldsOnCorrectType; use YOOtheme\GraphQL\Validator\Rules\FragmentsOnCompositeTypes; use YOOtheme\GraphQL\Validator\Rules\KnownArgumentNames; use YOOtheme\GraphQL\Validator\Rules\KnownArgumentNamesOnDirectives; use YOOtheme\GraphQL\Validator\Rules\KnownDirectives; use YOOtheme\GraphQL\Validator\Rules\KnownFragmentNames; use YOOtheme\GraphQL\Validator\Rules\KnownTypeNames; use YOOtheme\GraphQL\Validator\Rules\LoneAnonymousOperation; use YOOtheme\GraphQL\Validator\Rules\LoneSchemaDefinition; use YOOtheme\GraphQL\Validator\Rules\NoFragmentCycles; use YOOtheme\GraphQL\Validator\Rules\NoUndefinedVariables; use YOOtheme\GraphQL\Validator\Rules\NoUnusedFragments; use YOOtheme\GraphQL\Validator\Rules\NoUnusedVariables; use YOOtheme\GraphQL\Validator\Rules\OneOfInputObjectsRule; use YOOtheme\GraphQL\Validator\Rules\OverlappingFieldsCanBeMerged; use YOOtheme\GraphQL\Validator\Rules\PossibleFragmentSpreads; use YOOtheme\GraphQL\Validator\Rules\PossibleTypeExtensions; use YOOtheme\GraphQL\Validator\Rules\ProvidedRequiredArguments; use YOOtheme\GraphQL\Validator\Rules\ProvidedRequiredArgumentsOnDirectives; use YOOtheme\GraphQL\Validator\Rules\QueryComplexity; use YOOtheme\GraphQL\Validator\Rules\QueryDepth; use YOOtheme\GraphQL\Validator\Rules\QuerySecurityRule; use YOOtheme\GraphQL\Validator\Rules\ScalarLeafs; use YOOtheme\GraphQL\Validator\Rules\SingleFieldSubscription; use YOOtheme\GraphQL\Validator\Rules\UniqueArgumentDefinitionNames; use YOOtheme\GraphQL\Validator\Rules\UniqueArgumentNames; use YOOtheme\GraphQL\Validator\Rules\UniqueDirectiveNames; use YOOtheme\GraphQL\Validator\Rules\UniqueDirectivesPerLocation; use YOOtheme\GraphQL\Validator\Rules\UniqueEnumValueNames; use YOOtheme\GraphQL\Validator\Rules\UniqueFieldDefinitionNames; use YOOtheme\GraphQL\Validator\Rules\UniqueFragmentNames; use YOOtheme\GraphQL\Validator\Rules\UniqueInputFieldNames; use YOOtheme\GraphQL\Validator\Rules\UniqueOperationNames; use YOOtheme\GraphQL\Validator\Rules\UniqueOperationTypes; use YOOtheme\GraphQL\Validator\Rules\UniqueTypeNames; use YOOtheme\GraphQL\Validator\Rules\UniqueVariableNames; use YOOtheme\GraphQL\Validator\Rules\ValidationRule; use YOOtheme\GraphQL\Validator\Rules\ValuesOfCorrectType; use YOOtheme\GraphQL\Validator\Rules\VariablesAreInputTypes; use YOOtheme\GraphQL\Validator\Rules\VariablesInAllowedPosition; /** * Implements the "Validation" section of the spec. * * Validation runs synchronously, returning an array of encountered errors, or * an empty array if no errors were encountered and the document is valid. * * A list of specific validation rules may be provided. If not provided, the * default list of rules defined by the GraphQL specification will be used. * * Each validation rule is an instance of GraphQL\Validator\Rules\ValidationRule * which returns a visitor (see the [GraphQL\Language\Visitor API](class-reference.md#graphqllanguagevisitor)). * * Visitor methods are expected to return an instance of [GraphQL\Error\Error](class-reference.md#graphqlerrorerror), * or array of such instances when invalid. * * Optionally a custom TypeInfo instance may be provided. If not provided, one * will be created from the provided schema. */ class DocumentValidator { /** @var array<string, ValidationRule> */ private static array $rules = []; /** @var array<class-string<ValidationRule>, ValidationRule> */ private static array $defaultRules; /** @var array<class-string<QuerySecurityRule>, QuerySecurityRule> */ private static array $securityRules; /** @var array<class-string<ValidationRule>, ValidationRule> */ private static array $sdlRules; private static bool $initRules = false; /** * Validate a GraphQL query against a schema. * * @param array<ValidationRule>|null $rules Defaults to using all available rules * * @throws \Exception * * @return list<Error> * * @api */ public static function validate( Schema $schema, DocumentNode $ast, ?array $rules = null, ?TypeInfo $typeInfo = null ): array { $rules ??= static::allRules(); if ($rules === []) { return []; } $typeInfo ??= new TypeInfo($schema); $context = new QueryValidationContext($schema, $ast, $typeInfo); $visitors = []; foreach ($rules as $rule) { $visitors[] = $rule->getVisitor($context); } Visitor::visit( $ast, Visitor::visitWithTypeInfo( $typeInfo, Visitor::visitInParallel($visitors) ) ); return $context->getErrors(); } /** * Returns all global validation rules. * * @throws \InvalidArgumentException * * @return array<string, ValidationRule> * * @api */ public static function allRules(): array { if (! self::$initRules) { self::$rules = array_merge( static::defaultRules(), self::securityRules(), self::$rules ); self::$initRules = true; } return self::$rules; } /** @return array<class-string<ValidationRule>, ValidationRule> */ public static function defaultRules(): array { return self::$defaultRules ??= [ ExecutableDefinitions::class => new ExecutableDefinitions(), UniqueOperationNames::class => new UniqueOperationNames(), LoneAnonymousOperation::class => new LoneAnonymousOperation(), SingleFieldSubscription::class => new SingleFieldSubscription(), KnownTypeNames::class => new KnownTypeNames(), FragmentsOnCompositeTypes::class => new FragmentsOnCompositeTypes(), VariablesAreInputTypes::class => new VariablesAreInputTypes(), ScalarLeafs::class => new ScalarLeafs(), FieldsOnCorrectType::class => new FieldsOnCorrectType(), UniqueFragmentNames::class => new UniqueFragmentNames(), KnownFragmentNames::class => new KnownFragmentNames(), NoUnusedFragments::class => new NoUnusedFragments(), PossibleFragmentSpreads::class => new PossibleFragmentSpreads(), NoFragmentCycles::class => new NoFragmentCycles(), UniqueVariableNames::class => new UniqueVariableNames(), NoUndefinedVariables::class => new NoUndefinedVariables(), NoUnusedVariables::class => new NoUnusedVariables(), KnownDirectives::class => new KnownDirectives(), UniqueDirectivesPerLocation::class => new UniqueDirectivesPerLocation(), KnownArgumentNames::class => new KnownArgumentNames(), UniqueArgumentNames::class => new UniqueArgumentNames(), ValuesOfCorrectType::class => new ValuesOfCorrectType(), ProvidedRequiredArguments::class => new ProvidedRequiredArguments(), VariablesInAllowedPosition::class => new VariablesInAllowedPosition(), OverlappingFieldsCanBeMerged::class => new OverlappingFieldsCanBeMerged(), UniqueInputFieldNames::class => new UniqueInputFieldNames(), OneOfInputObjectsRule::class => new OneOfInputObjectsRule(), ]; } /** * @deprecated just add rules via @see DocumentValidator::addRule() * * @throws \InvalidArgumentException * * @return array<class-string<QuerySecurityRule>, QuerySecurityRule> */ public static function securityRules(): array { return self::$securityRules ??= [ DisableIntrospection::class => new DisableIntrospection(DisableIntrospection::DISABLED), QueryDepth::class => new QueryDepth(QueryDepth::DISABLED), QueryComplexity::class => new QueryComplexity(QueryComplexity::DISABLED), ]; } /** @return array<class-string<ValidationRule>, ValidationRule> */ public static function sdlRules(): array { return self::$sdlRules ??= [ LoneSchemaDefinition::class => new LoneSchemaDefinition(), UniqueOperationTypes::class => new UniqueOperationTypes(), UniqueTypeNames::class => new UniqueTypeNames(), UniqueEnumValueNames::class => new UniqueEnumValueNames(), UniqueFieldDefinitionNames::class => new UniqueFieldDefinitionNames(), UniqueArgumentDefinitionNames::class => new UniqueArgumentDefinitionNames(), UniqueDirectiveNames::class => new UniqueDirectiveNames(), KnownTypeNames::class => new KnownTypeNames(), KnownDirectives::class => new KnownDirectives(), UniqueDirectivesPerLocation::class => new UniqueDirectivesPerLocation(), PossibleTypeExtensions::class => new PossibleTypeExtensions(), KnownArgumentNamesOnDirectives::class => new KnownArgumentNamesOnDirectives(), UniqueArgumentNames::class => new UniqueArgumentNames(), UniqueInputFieldNames::class => new UniqueInputFieldNames(), ProvidedRequiredArgumentsOnDirectives::class => new ProvidedRequiredArgumentsOnDirectives(), ]; } /** * Returns global validation rule by name. * * Standard rules are named by class name, so example usage for such rules: * * @example DocumentValidator::getRule(GraphQL\Validator\Rules\QueryComplexity::class); * * @api * * @throws \InvalidArgumentException */ public static function getRule(string $name): ?ValidationRule { return static::allRules()[$name] ?? null; } /** * Add rule to list of global validation rules. * * @api */ public static function addRule(ValidationRule $rule): void { self::$rules[$rule->getName()] = $rule; } /** * Remove rule from list of global validation rules. * * @api */ public static function removeRule(ValidationRule $rule): void { unset(self::$rules[$rule->getName()]); } /** * Validate a GraphQL document defined through schema definition language. * * @param array<ValidationRule>|null $rules * * @throws \Exception * * @return list<Error> */ public static function validateSDL( DocumentNode $documentAST, ?Schema $schemaToExtend = null, ?array $rules = null ): array { $rules ??= self::sdlRules(); if ($rules === []) { return []; } $context = new SDLValidationContext($documentAST, $schemaToExtend); $visitors = []; foreach ($rules as $rule) { $visitors[] = $rule->getSDLVisitor($context); } Visitor::visit( $documentAST, Visitor::visitInParallel($visitors) ); return $context->getErrors(); } /** * @throws \Exception * @throws Error */ public static function assertValidSDL(DocumentNode $documentAST): void { $errors = self::validateSDL($documentAST); if ($errors !== []) { throw new Error(self::combineErrorMessages($errors)); } } /** * @throws \Exception * @throws Error */ public static function assertValidSDLExtension(DocumentNode $documentAST, Schema $schema): void { $errors = self::validateSDL($documentAST, $schema); if ($errors !== []) { throw new Error(self::combineErrorMessages($errors)); } } /** @param array<Error> $errors */ private static function combineErrorMessages(array $errors): string { $messages = []; foreach ($errors as $error) { $messages[] = $error->getMessage(); } return implode("\n\n", $messages); } } graphql/lib/Validator/QueryValidationContext.php000064400000021012151666572070016106 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\HasSelectionSet; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\VariableNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\CompositeType; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\InputType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\TypeInfo; /** * An instance of this class is passed as the "this" context to all validators, * allowing access to commonly useful contextual information from within a * validation rule. * * @phpstan-type VariableUsage array{node: VariableNode, type: (Type&InputType)|null, defaultValue: mixed} */ class QueryValidationContext implements ValidationContext { protected Schema $schema; protected DocumentNode $ast; /** @var list<Error> */ protected array $errors = []; private TypeInfo $typeInfo; /** @var array<string, FragmentDefinitionNode> */ private array $fragments; /** @var \SplObjectStorage<HasSelectionSet, array<int, FragmentSpreadNode>> */ private \SplObjectStorage $fragmentSpreads; /** @var \SplObjectStorage<OperationDefinitionNode, array<int, FragmentDefinitionNode>> */ private \SplObjectStorage $recursivelyReferencedFragments; /** @var \SplObjectStorage<HasSelectionSet, array<int, VariableUsage>> */ private \SplObjectStorage $variableUsages; /** @var \SplObjectStorage<HasSelectionSet, array<int, VariableUsage>> */ private \SplObjectStorage $recursiveVariableUsages; public function __construct(Schema $schema, DocumentNode $ast, TypeInfo $typeInfo) { $this->schema = $schema; $this->ast = $ast; $this->typeInfo = $typeInfo; $this->fragmentSpreads = new \SplObjectStorage(); $this->recursivelyReferencedFragments = new \SplObjectStorage(); $this->variableUsages = new \SplObjectStorage(); $this->recursiveVariableUsages = new \SplObjectStorage(); } public function reportError(Error $error): void { $this->errors[] = $error; } /** @return list<Error> */ public function getErrors(): array { return $this->errors; } public function getDocument(): DocumentNode { return $this->ast; } public function getSchema(): Schema { return $this->schema; } /** * @throws \Exception * * @phpstan-return array<int, VariableUsage> */ public function getRecursiveVariableUsages(OperationDefinitionNode $operation): array { $usages = $this->recursiveVariableUsages[$operation] ?? null; if ($usages === null) { $usages = $this->getVariableUsages($operation); $fragments = $this->getRecursivelyReferencedFragments($operation); $allUsages = [$usages]; foreach ($fragments as $fragment) { $allUsages[] = $this->getVariableUsages($fragment); } $usages = array_merge(...$allUsages); $this->recursiveVariableUsages[$operation] = $usages; } return $usages; } /** * @param HasSelectionSet&Node $node * * @throws \Exception * * @phpstan-return array<int, VariableUsage> */ private function getVariableUsages(HasSelectionSet $node): array { if (! isset($this->variableUsages[$node])) { $usages = []; $typeInfo = new TypeInfo($this->schema); Visitor::visit( $node, Visitor::visitWithTypeInfo( $typeInfo, [ NodeKind::VARIABLE_DEFINITION => static fn () => Visitor::skipNode(), NodeKind::VARIABLE => static function (VariableNode $variable) use (&$usages, $typeInfo): void { $usages[] = [ 'node' => $variable, 'type' => $typeInfo->getInputType(), 'defaultValue' => $typeInfo->getDefaultValue(), ]; }, ] ) ); return $this->variableUsages[$node] = $usages; } return $this->variableUsages[$node]; } /** @return array<int, FragmentDefinitionNode> */ public function getRecursivelyReferencedFragments(OperationDefinitionNode $operation): array { $fragments = $this->recursivelyReferencedFragments[$operation] ?? null; if ($fragments === null) { $fragments = []; $collectedNames = []; $nodesToVisit = [$operation]; while ($nodesToVisit !== []) { $node = array_pop($nodesToVisit); $spreads = $this->getFragmentSpreads($node); foreach ($spreads as $spread) { $fragName = $spread->name->value; if ($collectedNames[$fragName] ?? false) { continue; } $collectedNames[$fragName] = true; $fragment = $this->getFragment($fragName); if ($fragment === null) { continue; } $fragments[] = $fragment; $nodesToVisit[] = $fragment; } } $this->recursivelyReferencedFragments[$operation] = $fragments; } return $fragments; } /** * @param OperationDefinitionNode|FragmentDefinitionNode $node * * @return array<int, FragmentSpreadNode> */ public function getFragmentSpreads(HasSelectionSet $node): array { $spreads = $this->fragmentSpreads[$node] ?? null; if ($spreads === null) { $spreads = []; $setsToVisit = [$node->getSelectionSet()]; while ($setsToVisit !== []) { $set = array_pop($setsToVisit); foreach ($set->selections as $selection) { if ($selection instanceof FragmentSpreadNode) { $spreads[] = $selection; } else { assert($selection instanceof FieldNode || $selection instanceof InlineFragmentNode); $selectionSet = $selection->selectionSet; if ($selectionSet !== null) { $setsToVisit[] = $selectionSet; } } } } $this->fragmentSpreads[$node] = $spreads; } return $spreads; } public function getFragment(string $name): ?FragmentDefinitionNode { if (! isset($this->fragments)) { $fragments = []; foreach ($this->getDocument()->definitions as $statement) { if ($statement instanceof FragmentDefinitionNode) { $fragments[$statement->name->value] = $statement; } } $this->fragments = $fragments; } return $this->fragments[$name] ?? null; } public function getType(): ?Type { return $this->typeInfo->getType(); } /** @return (CompositeType&Type)|null */ public function getParentType(): ?CompositeType { return $this->typeInfo->getParentType(); } /** @return (Type&InputType)|null */ public function getInputType(): ?InputType { return $this->typeInfo->getInputType(); } /** @return (Type&InputType)|null */ public function getParentInputType(): ?InputType { return $this->typeInfo->getParentInputType(); } public function getFieldDef(): ?FieldDefinition { return $this->typeInfo->getFieldDef(); } public function getDirective(): ?Directive { return $this->typeInfo->getDirective(); } public function getArgument(): ?Argument { return $this->typeInfo->getArgument(); } } graphql/lib/Validator/ValidationContext.php000064400000000666151666572070015074 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Type\Schema; interface ValidationContext { public function reportError(Error $error): void; /** @return list<Error> */ public function getErrors(): array; public function getDocument(): DocumentNode; public function getSchema(): ?Schema; } graphql/lib/Validator/Rules/ValuesOfCorrectType.php000064400000016652151666572070016441 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\BooleanValueNode; use YOOtheme\GraphQL\Language\AST\EnumValueNode; use YOOtheme\GraphQL\Language\AST\FloatValueNode; use YOOtheme\GraphQL\Language\AST\IntValueNode; use YOOtheme\GraphQL\Language\AST\ListValueNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NullValueNode; use YOOtheme\GraphQL\Language\AST\ObjectFieldNode; use YOOtheme\GraphQL\Language\AST\ObjectValueNode; use YOOtheme\GraphQL\Language\AST\StringValueNode; use YOOtheme\GraphQL\Language\AST\ValueNode; use YOOtheme\GraphQL\Language\AST\VariableNode; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\LeafType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * Value literals of correct type. * * A GraphQL document is only valid if all value literals are of the type * expected at their position. */ class ValuesOfCorrectType extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::NULL => static function (NullValueNode $node) use ($context): void { $type = $context->getInputType(); if ($type instanceof NonNull) { $typeStr = Utils::printSafe($type); $nodeStr = Printer::doPrint($node); $context->reportError( new Error( "Expected value of type \"{$typeStr}\", found {$nodeStr}.", $node ) ); } }, NodeKind::LST => function (ListValueNode $node) use ($context): ?VisitorOperation { // Note: TypeInfo will traverse into a list's item type, so look to the // parent input type to check if it is a list. $parentType = $context->getParentInputType(); $type = $parentType === null ? null : Type::getNullableType($parentType); if (! $type instanceof ListOfType) { $this->isValidValueNode($context, $node); return Visitor::skipNode(); } return null; }, NodeKind::OBJECT => function (ObjectValueNode $node) use ($context): ?VisitorOperation { $type = Type::getNamedType($context->getInputType()); if (! $type instanceof InputObjectType) { $this->isValidValueNode($context, $node); return Visitor::skipNode(); } // Ensure every required field exists. $inputFields = $type->getFields(); $fieldNodeMap = []; foreach ($node->fields as $field) { $fieldNodeMap[$field->name->value] = $field; } foreach ($inputFields as $inputFieldName => $fieldDef) { if (! isset($fieldNodeMap[$inputFieldName]) && $fieldDef->isRequired()) { $fieldType = Utils::printSafe($fieldDef->getType()); $context->reportError( new Error( "Field {$type->name}.{$inputFieldName} of required type {$fieldType} was not provided.", $node ) ); } } return null; }, NodeKind::OBJECT_FIELD => static function (ObjectFieldNode $node) use ($context): void { $parentType = Type::getNamedType($context->getParentInputType()); if (! $parentType instanceof InputObjectType) { return; } if ($context->getInputType() !== null) { return; } $suggestions = Utils::suggestionList( $node->name->value, array_keys($parentType->getFields()) ); $didYouMean = $suggestions === [] ? null : ' Did you mean ' . Utils::quotedOrList($suggestions) . '?'; $context->reportError( new Error( "Field \"{$node->name->value}\" is not defined by type \"{$parentType->name}\".{$didYouMean}", $node ) ); }, NodeKind::ENUM => function (EnumValueNode $node) use ($context): void { $this->isValidValueNode($context, $node); }, NodeKind::INT => function (IntValueNode $node) use ($context): void { $this->isValidValueNode($context, $node); }, NodeKind::FLOAT => function (FloatValueNode $node) use ($context): void { $this->isValidValueNode($context, $node); }, NodeKind::STRING => function (StringValueNode $node) use ($context): void { $this->isValidValueNode($context, $node); }, NodeKind::BOOLEAN => function (BooleanValueNode $node) use ($context): void { $this->isValidValueNode($context, $node); }, ]; } /** * @param VariableNode|NullValueNode|IntValueNode|FloatValueNode|StringValueNode|BooleanValueNode|EnumValueNode|ListValueNode|ObjectValueNode $node * * @throws \JsonException */ protected function isValidValueNode(QueryValidationContext $context, ValueNode $node): void { // Report any error at the full type expected by the location. $locationType = $context->getInputType(); if ($locationType === null) { return; } $type = Type::getNamedType($locationType); if (! $type instanceof LeafType) { $typeStr = Utils::printSafe($type); $nodeStr = Printer::doPrint($node); $context->reportError( new Error( "Expected value of type \"{$typeStr}\", found {$nodeStr}.", $node ) ); return; } // Scalars determine if a literal value is valid via parseLiteral() which // may throw to indicate failure. try { $type->parseLiteral($node); } catch (\Throwable $error) { if ($error instanceof Error) { $context->reportError($error); } else { $typeStr = Utils::printSafe($type); $nodeStr = Printer::doPrint($node); $context->reportError( new Error( "Expected value of type \"{$typeStr}\", found {$nodeStr}; {$error->getMessage()}", $node, null, [], null, $error // Ensure a reference to the original error is maintained. ) ); } } } } graphql/lib/Validator/Rules/ScalarLeafs.php000064400000003315151666572070014701 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Validator\QueryValidationContext; class ScalarLeafs extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::FIELD => static function (FieldNode $node) use ($context): void { $type = $context->getType(); if ($type === null) { return; } if (Type::isLeafType(Type::getNamedType($type))) { if ($node->selectionSet !== null) { $context->reportError(new Error( static::noSubselectionAllowedMessage($node->name->value, $type->toString()), [$node->selectionSet] )); } } elseif ($node->selectionSet === null) { $context->reportError(new Error( static::requiredSubselectionMessage($node->name->value, $type->toString()), [$node] )); } }, ]; } public static function noSubselectionAllowedMessage(string $field, string $type): string { return "Field \"{$field}\" of type \"{$type}\" must not have a sub selection."; } public static function requiredSubselectionMessage(string $field, string $type): string { return "Field \"{$field}\" of type \"{$type}\" must have a sub selection."; } } graphql/lib/Validator/Rules/QueryComplexity.php000064400000022235151666572070015706 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Values; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\SelectionNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * @phpstan-import-type ASTAndDefs from QuerySecurityRule */ class QueryComplexity extends QuerySecurityRule { protected int $maxQueryComplexity; protected int $queryComplexity; /** @var array<string, mixed> */ protected array $rawVariableValues = []; /** @var NodeList<VariableDefinitionNode> */ protected NodeList $variableDefs; /** @phpstan-var ASTAndDefs */ protected \ArrayObject $fieldNodeAndDefs; protected QueryValidationContext $context; /** @throws \InvalidArgumentException */ public function __construct(int $maxQueryComplexity) { $this->setMaxQueryComplexity($maxQueryComplexity); } public function getVisitor(QueryValidationContext $context): array { $this->queryComplexity = 0; $this->context = $context; $this->variableDefs = new NodeList([]); $this->fieldNodeAndDefs = new \ArrayObject(); return $this->invokeIfNeeded( $context, [ NodeKind::SELECTION_SET => function (SelectionSetNode $selectionSet) use ($context): void { $this->fieldNodeAndDefs = $this->collectFieldASTsAndDefs( $context, $context->getParentType(), $selectionSet, null, $this->fieldNodeAndDefs ); }, NodeKind::VARIABLE_DEFINITION => function ($def): VisitorOperation { $this->variableDefs[] = $def; return Visitor::skipNode(); }, NodeKind::OPERATION_DEFINITION => [ 'leave' => function (OperationDefinitionNode $operationDefinition) use ($context): void { $errors = $context->getErrors(); if ($errors !== []) { return; } if ($this->maxQueryComplexity === self::DISABLED) { return; } $this->queryComplexity = $this->fieldComplexity($operationDefinition->selectionSet); if ($this->queryComplexity <= $this->maxQueryComplexity) { return; } $context->reportError( new Error(static::maxQueryComplexityErrorMessage( $this->maxQueryComplexity, $this->queryComplexity )) ); }, ], ] ); } /** @throws \Exception */ protected function fieldComplexity(SelectionSetNode $selectionSet): int { $complexity = 0; foreach ($selectionSet->selections as $selection) { $complexity += $this->nodeComplexity($selection); } return $complexity; } /** @throws \Exception */ protected function nodeComplexity(SelectionNode $node): int { switch (true) { case $node instanceof FieldNode: if ($this->directiveExcludesField($node)) { return 0; } $childrenComplexity = isset($node->selectionSet) ? $this->fieldComplexity($node->selectionSet) : 0; $fieldDef = $this->fieldDefinition($node); if ($fieldDef instanceof FieldDefinition && $fieldDef->complexityFn !== null) { $fieldArguments = $this->buildFieldArguments($node); return ($fieldDef->complexityFn)($childrenComplexity, $fieldArguments); } return $childrenComplexity + 1; case $node instanceof InlineFragmentNode: return $this->fieldComplexity($node->selectionSet); case $node instanceof FragmentSpreadNode: $fragment = $this->getFragment($node); if ($fragment !== null) { return $this->fieldComplexity($fragment->selectionSet); } } return 0; } protected function fieldDefinition(FieldNode $field): ?FieldDefinition { foreach ($this->fieldNodeAndDefs[$this->getFieldName($field)] ?? [] as [$node, $def]) { if ($node === $field) { return $def; } } return null; } /** * Will the given field be executed at all, given the directives placed upon it? * * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation */ protected function directiveExcludesField(FieldNode $node): bool { foreach ($node->directives as $directiveNode) { if ($directiveNode->name->value === Directive::DEPRECATED_NAME) { return false; } [$errors, $variableValues] = Values::getVariableValues( $this->context->getSchema(), $this->variableDefs, $this->getRawVariableValues() ); if ($errors !== null && $errors !== []) { throw new Error(implode("\n\n", array_map(static fn (Error $error): string => $error->getMessage(), $errors))); } if ($directiveNode->name->value === Directive::INCLUDE_NAME) { $includeArguments = Values::getArgumentValues( Directive::includeDirective(), $directiveNode, $variableValues ); assert(is_bool($includeArguments['if']), 'ensured by query validation'); return ! $includeArguments['if']; } if ($directiveNode->name->value === Directive::SKIP_NAME) { $skipArguments = Values::getArgumentValues( Directive::skipDirective(), $directiveNode, $variableValues ); assert(is_bool($skipArguments['if']), 'ensured by query validation'); return $skipArguments['if']; } } return false; } /** @return array<string, mixed> */ public function getRawVariableValues(): array { return $this->rawVariableValues; } /** @param array<string, mixed>|null $rawVariableValues */ public function setRawVariableValues(?array $rawVariableValues = null): void { $this->rawVariableValues = $rawVariableValues ?? []; } /** * @throws \Exception * @throws Error * * @return array<string, mixed> */ protected function buildFieldArguments(FieldNode $node): array { $rawVariableValues = $this->getRawVariableValues(); $fieldDef = $this->fieldDefinition($node); /** @var array<string, mixed> $args */ $args = []; if ($fieldDef instanceof FieldDefinition) { [$errors, $variableValues] = Values::getVariableValues( $this->context->getSchema(), $this->variableDefs, $rawVariableValues ); if (is_array($errors) && $errors !== []) { throw new Error(implode("\n\n", array_map(static fn ($error) => $error->getMessage(), $errors))); } $args = Values::getArgumentValues($fieldDef, $node, $variableValues); } return $args; } public function getMaxQueryComplexity(): int { return $this->maxQueryComplexity; } public function getQueryComplexity(): int { return $this->queryComplexity; } /** * Set max query complexity. If equal to 0 no check is done. Must be greater or equal to 0. * * @throws \InvalidArgumentException */ public function setMaxQueryComplexity(int $maxQueryComplexity): void { $this->checkIfGreaterOrEqualToZero('maxQueryComplexity', $maxQueryComplexity); $this->maxQueryComplexity = $maxQueryComplexity; } public static function maxQueryComplexityErrorMessage(int $max, int $count): string { return "Max query complexity should be {$max} but got {$count}."; } protected function isEnabled(): bool { return $this->maxQueryComplexity !== self::DISABLED; } } graphql/lib/Validator/Rules/UniqueInputFieldNames.php000064400000004750151666572070016743 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\ObjectFieldNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; use YOOtheme\GraphQL\Validator\SDLValidationContext; use YOOtheme\GraphQL\Validator\ValidationContext; /** * @phpstan-import-type VisitorArray from Visitor */ class UniqueInputFieldNames extends ValidationRule { /** @var array<string, NameNode> */ protected array $knownNames; /** @var array<array<string, NameNode>> */ protected array $knownNameStack; public function getVisitor(QueryValidationContext $context): array { return $this->getASTVisitor($context); } public function getSDLVisitor(SDLValidationContext $context): array { return $this->getASTVisitor($context); } /** @phpstan-return VisitorArray */ public function getASTVisitor(ValidationContext $context): array { $this->knownNames = []; $this->knownNameStack = []; return [ NodeKind::OBJECT => [ 'enter' => function (): void { $this->knownNameStack[] = $this->knownNames; $this->knownNames = []; }, 'leave' => function (): void { $knownNames = array_pop($this->knownNameStack); assert(is_array($knownNames), 'should not happen if the visitor works correctly'); $this->knownNames = $knownNames; }, ], NodeKind::OBJECT_FIELD => function (ObjectFieldNode $node) use ($context): VisitorOperation { $fieldName = $node->name->value; if (isset($this->knownNames[$fieldName])) { $context->reportError(new Error( static::duplicateInputFieldMessage($fieldName), [$this->knownNames[$fieldName], $node->name] )); } else { $this->knownNames[$fieldName] = $node->name; } return Visitor::skipNode(); }, ]; } public static function duplicateInputFieldMessage(string $fieldName): string { return "There can be only one input field named \"{$fieldName}\"."; } } graphql/lib/Validator/Rules/LoneSchemaDefinition.php000064400000003456151666572070016556 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Validator\SDLValidationContext; /** * Lone schema definition. * * A GraphQL document is only valid if it contains only one schema definition. */ class LoneSchemaDefinition extends ValidationRule { public static function schemaDefinitionNotAloneMessage(): string { return 'Must provide only one schema definition.'; } public static function canNotDefineSchemaWithinExtensionMessage(): string { return 'Cannot define a new schema within a schema extension.'; } public function getSDLVisitor(SDLValidationContext $context): array { $oldSchema = $context->getSchema(); $alreadyDefined = $oldSchema === null ? false : ( $oldSchema->astNode !== null || $oldSchema->getQueryType() !== null || $oldSchema->getMutationType() !== null || $oldSchema->getSubscriptionType() !== null ); $schemaDefinitionsCount = 0; return [ NodeKind::SCHEMA_DEFINITION => static function (SchemaDefinitionNode $node) use ($alreadyDefined, $context, &$schemaDefinitionsCount): void { if ($alreadyDefined) { $context->reportError(new Error(static::canNotDefineSchemaWithinExtensionMessage(), $node)); return; } if ($schemaDefinitionsCount > 0) { $context->reportError(new Error(static::schemaDefinitionNotAloneMessage(), $node)); } ++$schemaDefinitionsCount; }, ]; } } graphql/lib/Validator/Rules/QueryDepth.php000064400000010223151666572070014607 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Validator\QueryValidationContext; class QueryDepth extends QuerySecurityRule { /** @var array<string, bool> Fragment names which are already calculated in recursion */ protected array $calculatedFragments = []; protected int $maxQueryDepth; /** @throws \InvalidArgumentException */ public function __construct(int $maxQueryDepth) { $this->setMaxQueryDepth($maxQueryDepth); } public function getVisitor(QueryValidationContext $context): array { return $this->invokeIfNeeded( $context, [ NodeKind::OPERATION_DEFINITION => [ 'leave' => function (OperationDefinitionNode $operationDefinition) use ($context): void { $maxDepth = $this->fieldDepth($operationDefinition); if ($maxDepth <= $this->maxQueryDepth) { return; } $context->reportError( new Error(static::maxQueryDepthErrorMessage($this->maxQueryDepth, $maxDepth)) ); }, ], ] ); } /** @param OperationDefinitionNode|FieldNode|InlineFragmentNode|FragmentDefinitionNode $node */ protected function fieldDepth(Node $node, int $depth = 0, int $maxDepth = 0): int { if ($node->selectionSet instanceof SelectionSetNode) { foreach ($node->selectionSet->selections as $childNode) { $maxDepth = $this->nodeDepth($childNode, $depth, $maxDepth); } } return $maxDepth; } protected function nodeDepth(Node $node, int $depth = 0, int $maxDepth = 0): int { switch (true) { case $node instanceof FieldNode: // node has children? if ($node->selectionSet !== null) { // update maxDepth if needed if ($depth > $maxDepth) { $maxDepth = $depth; } $maxDepth = $this->fieldDepth($node, $depth + 1, $maxDepth); } break; case $node instanceof InlineFragmentNode: $maxDepth = $this->fieldDepth($node, $depth, $maxDepth); break; case $node instanceof FragmentSpreadNode: $fragment = $this->getFragment($node); if ($fragment !== null) { $name = $fragment->name->value; if (isset($this->calculatedFragments[$name])) { return $this->maxQueryDepth + 1; } $this->calculatedFragments[$name] = true; $maxDepth = $this->fieldDepth($fragment, $depth, $maxDepth); unset($this->calculatedFragments[$name]); } break; } return $maxDepth; } public function getMaxQueryDepth(): int { return $this->maxQueryDepth; } /** * Set max query depth. If equal to 0 no check is done. Must be greater or equal to 0. * * @throws \InvalidArgumentException */ public function setMaxQueryDepth(int $maxQueryDepth): void { $this->checkIfGreaterOrEqualToZero('maxQueryDepth', $maxQueryDepth); $this->maxQueryDepth = $maxQueryDepth; } public static function maxQueryDepthErrorMessage(int $max, int $count): string { return "Max query depth should be {$max} but got {$count}."; } protected function isEnabled(): bool { return $this->maxQueryDepth !== self::DISABLED; } } graphql/lib/Validator/Rules/ProvidedRequiredArgumentsOnDirectives.php000064400000010475151666572070022210 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NonNullTypeNode; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Validator\QueryValidationContext; use YOOtheme\GraphQL\Validator\SDLValidationContext; use YOOtheme\GraphQL\Validator\ValidationContext; /** * Provided required arguments on directives. * * A directive is only valid if all required (non-null without a * default value) field arguments have been provided. * * @phpstan-import-type VisitorArray from Visitor */ class ProvidedRequiredArgumentsOnDirectives extends ValidationRule { public static function missingDirectiveArgMessage(string $directiveName, string $argName, string $type): string { return "Directive \"@{$directiveName}\" argument \"{$argName}\" of type \"{$type}\" is required but not provided."; } /** @throws \Exception */ public function getSDLVisitor(SDLValidationContext $context): array { return $this->getASTVisitor($context); } /** @throws \Exception */ public function getVisitor(QueryValidationContext $context): array { return $this->getASTVisitor($context); } /** * @throws \Exception * @throws \InvalidArgumentException * @throws \ReflectionException * @throws Error * @throws InvariantViolation * * @phpstan-return VisitorArray */ public function getASTVisitor(ValidationContext $context): array { $requiredArgsMap = []; $schema = $context->getSchema(); $definedDirectives = $schema === null ? Directive::getInternalDirectives() : $schema->getDirectives(); foreach ($definedDirectives as $directive) { $directiveArgs = []; foreach ($directive->args as $arg) { if ($arg->isRequired()) { $directiveArgs[$arg->name] = $arg; } } $requiredArgsMap[$directive->name] = $directiveArgs; } $astDefinition = $context->getDocument()->definitions; foreach ($astDefinition as $def) { if ($def instanceof DirectiveDefinitionNode) { $arguments = $def->arguments; $requiredArgs = []; foreach ($arguments as $argument) { if ($argument->type instanceof NonNullTypeNode && ! isset($argument->defaultValue)) { $requiredArgs[$argument->name->value] = $argument; } } $requiredArgsMap[$def->name->value] = $requiredArgs; } } return [ NodeKind::DIRECTIVE => [ // Validate on leave to allow for deeper errors to appear first. 'leave' => static function (DirectiveNode $directiveNode) use ($requiredArgsMap, $context): ?string { $directiveName = $directiveNode->name->value; $requiredArgs = $requiredArgsMap[$directiveName] ?? null; if ($requiredArgs === null || $requiredArgs === []) { return null; } $argNodeMap = []; foreach ($directiveNode->arguments as $arg) { $argNodeMap[$arg->name->value] = $arg; } foreach ($requiredArgs as $argName => $arg) { if (! isset($argNodeMap[$argName])) { $argType = $arg instanceof Argument ? $arg->getType()->toString() : Printer::doPrint($arg->type); $context->reportError( new Error(static::missingDirectiveArgMessage($directiveName, $argName, $argType), [$directiveNode]) ); } } return null; }, ], ]; } } graphql/lib/Validator/Rules/OneOfInputObjectsRule.php000064400000006334151666572070016715 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\ObjectValueNode; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * OneOf Input Objects validation rule. * * Validates that OneOf Input Objects have exactly one non-null field provided. */ class OneOfInputObjectsRule extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::OBJECT => static function (ObjectValueNode $node) use ($context): void { $type = $context->getInputType(); if ($type === null) { return; } $namedType = Type::getNamedType($type); if (! ($namedType instanceof InputObjectType) || ! $namedType->isOneOf() ) { return; } $providedFields = []; $nullFields = []; foreach ($node->fields as $fieldNode) { $fieldName = $fieldNode->name->value; $providedFields[] = $fieldName; // Check if the field value is explicitly null if ($fieldNode->value->kind === NodeKind::NULL) { $nullFields[] = $fieldName; } } $fieldCount = count($providedFields); if ($fieldCount === 0) { $context->reportError(new Error( static::oneOfInputObjectExpectedExactlyOneFieldMessage($namedType->name), [$node] )); return; } if ($fieldCount > 1) { $context->reportError(new Error( static::oneOfInputObjectExpectedExactlyOneFieldMessage($namedType->name, $fieldCount), [$node] )); return; } // At this point, $fieldCount === 1 if (count($nullFields) > 0) { // Exactly one field provided, but it's null $context->reportError(new Error( static::oneOfInputObjectFieldValueMustNotBeNullMessage($namedType->name, $nullFields[0]), [$node] )); } }, ]; } public static function oneOfInputObjectExpectedExactlyOneFieldMessage(string $typeName, ?int $providedCount = null): string { if ($providedCount === null) { return "OneOf input object '{$typeName}' must specify exactly one field."; } return "OneOf input object '{$typeName}' must specify exactly one field, but {$providedCount} fields were provided."; } public static function oneOfInputObjectFieldValueMustNotBeNullMessage(string $typeName, string $fieldName): string { return "OneOf input object '{$typeName}' field '{$fieldName}' must be non-null."; } } graphql/lib/Validator/Rules/FieldsOnCorrectType.php000064400000012332151666572070016407 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Type\Definition\HasFieldsType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Validator\QueryValidationContext; class FieldsOnCorrectType extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::FIELD => function (FieldNode $node) use ($context): void { $fieldDef = $context->getFieldDef(); if ($fieldDef !== null && $fieldDef->isVisible()) { return; } $type = $context->getParentType(); if (! $type instanceof NamedType) { return; } // This isn't valid. Let's find suggestions, if any. $schema = $context->getSchema(); $fieldName = $node->name->value; // First determine if there are any suggested types to condition on. $suggestedTypeNames = $this->getSuggestedTypeNames($schema, $type, $fieldName); // If there are no suggested types, then perhaps this was a typo? $suggestedFieldNames = $suggestedTypeNames === [] ? $this->getSuggestedFieldNames($type, $fieldName) : []; // Report an error, including helpful suggestions. $context->reportError(new Error( static::undefinedFieldMessage( $node->name->value, $type->name, $suggestedTypeNames, $suggestedFieldNames ), [$node] )); }, ]; } /** * Go through all implementations of a type, as well as the interfaces * that it implements. If any of those types include the provided field, * suggest them, sorted by how often the type is referenced, starting * with interfaces. * * @throws InvariantViolation * * @return array<int, string> */ protected function getSuggestedTypeNames(Schema $schema, Type $type, string $fieldName): array { if (Type::isAbstractType($type)) { $suggestedObjectTypes = []; $interfaceUsageCount = []; foreach ($schema->getPossibleTypes($type) as $possibleType) { if (! $possibleType->hasField($fieldName)) { continue; } // This object type defines this field. $suggestedObjectTypes[] = $possibleType->name; foreach ($possibleType->getInterfaces() as $possibleInterface) { if (! $possibleInterface->hasField($fieldName)) { continue; } // This interface type defines this field. $interfaceUsageCount[$possibleInterface->name] = isset($interfaceUsageCount[$possibleInterface->name]) ? $interfaceUsageCount[$possibleInterface->name] + 1 : 0; } } // Suggest interface types based on how common they are. arsort($interfaceUsageCount); $suggestedInterfaceTypes = array_keys($interfaceUsageCount); // Suggest both interface and object types. return array_merge($suggestedInterfaceTypes, $suggestedObjectTypes); } // Otherwise, must be an Object type, which does not have suggested types. return []; } /** * For the field name provided, determine if there are any similar field names * that may be the result of a typo. * * @throws InvariantViolation * * @return array<int, string> */ protected function getSuggestedFieldNames(Type $type, string $fieldName): array { if ($type instanceof HasFieldsType) { return Utils::suggestionList( $fieldName, $type->getFieldNames() ); } // Otherwise, must be a Union type, which does not define fields. return []; } /** * @param array<string> $suggestedTypeNames * @param array<string> $suggestedFieldNames */ public static function undefinedFieldMessage( string $fieldName, string $type, array $suggestedTypeNames, array $suggestedFieldNames ): string { $message = "Cannot query field \"{$fieldName}\" on type \"{$type}\"."; if ($suggestedTypeNames !== []) { $suggestions = Utils::quotedOrList($suggestedTypeNames); $message .= " Did you mean to use an inline fragment on {$suggestions}?"; } elseif ($suggestedFieldNames !== []) { $suggestions = Utils::quotedOrList($suggestedFieldNames); $message .= " Did you mean {$suggestions}?"; } return $message; } } graphql/lib/Validator/Rules/PossibleTypeExtensions.php000064400000014524151666572070017227 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\TypeDefinitionNode; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Validator\SDLValidationContext; /** * Possible type extensions. * * A type extension is only valid if the type is defined and has the same kind. */ class PossibleTypeExtensions extends ValidationRule { public function getSDLVisitor(SDLValidationContext $context): array { $schema = $context->getSchema(); /** @var array<string, TypeDefinitionNode&Node> $definedTypes */ $definedTypes = []; foreach ($context->getDocument()->definitions as $def) { if ($def instanceof TypeDefinitionNode) { $name = $def->getName()->value; $definedTypes[$name] = $def; } } $checkTypeExtension = static function ($node) use ($context, $schema, &$definedTypes): ?VisitorOperation { $typeName = $node->name->value; $defNode = $definedTypes[$typeName] ?? null; $existingType = $schema !== null ? $schema->getType($typeName) : null; $expectedKind = null; if ($defNode !== null) { $expectedKind = self::defKindToExtKind($defNode->kind); } elseif ($existingType !== null) { $expectedKind = self::typeToExtKind($existingType); } if ($expectedKind !== null) { if ($expectedKind !== $node->kind) { $kindStr = self::extensionKindToTypeName($node->kind); $context->reportError( new Error( "Cannot extend non-{$kindStr} type \"{$typeName}\".", $defNode !== null ? [$defNode, $node] : $node, ), ); } } else { $existingTypesMap = $schema !== null ? $schema->getTypeMap() : []; $allTypeNames = [ ...array_keys($definedTypes), ...array_keys($existingTypesMap), ]; $suggestedTypes = Utils::suggestionList($typeName, $allTypeNames); $didYouMean = $suggestedTypes === [] ? '' : ' Did you mean ' . Utils::quotedOrList($suggestedTypes) . '?'; $context->reportError( new Error( "Cannot extend type \"{$typeName}\" because it is not defined.{$didYouMean}", $node->name, ), ); } return null; }; return [ NodeKind::SCALAR_TYPE_EXTENSION => $checkTypeExtension, NodeKind::OBJECT_TYPE_EXTENSION => $checkTypeExtension, NodeKind::INTERFACE_TYPE_EXTENSION => $checkTypeExtension, NodeKind::UNION_TYPE_EXTENSION => $checkTypeExtension, NodeKind::ENUM_TYPE_EXTENSION => $checkTypeExtension, NodeKind::INPUT_OBJECT_TYPE_EXTENSION => $checkTypeExtension, ]; } /** @throws InvariantViolation */ private static function defKindToExtKind(string $kind): string { switch ($kind) { case NodeKind::SCALAR_TYPE_DEFINITION: return NodeKind::SCALAR_TYPE_EXTENSION; case NodeKind::OBJECT_TYPE_DEFINITION: return NodeKind::OBJECT_TYPE_EXTENSION; case NodeKind::INTERFACE_TYPE_DEFINITION: return NodeKind::INTERFACE_TYPE_EXTENSION; case NodeKind::UNION_TYPE_DEFINITION: return NodeKind::UNION_TYPE_EXTENSION; case NodeKind::ENUM_TYPE_DEFINITION: return NodeKind::ENUM_TYPE_EXTENSION; case NodeKind::INPUT_OBJECT_TYPE_DEFINITION: return NodeKind::INPUT_OBJECT_TYPE_EXTENSION; default: throw new InvariantViolation("Unexpected definition kind: {$kind}."); } } /** @throws InvariantViolation */ private static function typeToExtKind(NamedType $type): string { switch (true) { case $type instanceof ScalarType: return NodeKind::SCALAR_TYPE_EXTENSION; case $type instanceof ObjectType: return NodeKind::OBJECT_TYPE_EXTENSION; case $type instanceof InterfaceType: return NodeKind::INTERFACE_TYPE_EXTENSION; case $type instanceof UnionType: return NodeKind::UNION_TYPE_EXTENSION; case $type instanceof EnumType: return NodeKind::ENUM_TYPE_EXTENSION; case $type instanceof InputObjectType: return NodeKind::INPUT_OBJECT_TYPE_EXTENSION; default: $unexpectedType = Utils::printSafe($type); throw new InvariantViolation("Unexpected type: {$unexpectedType}."); } } /** @throws InvariantViolation */ private static function extensionKindToTypeName(string $kind): string { switch ($kind) { case NodeKind::SCALAR_TYPE_EXTENSION: return 'scalar'; case NodeKind::OBJECT_TYPE_EXTENSION: return 'object'; case NodeKind::INTERFACE_TYPE_EXTENSION: return 'interface'; case NodeKind::UNION_TYPE_EXTENSION: return 'union'; case NodeKind::ENUM_TYPE_EXTENSION: return 'enum'; case NodeKind::INPUT_OBJECT_TYPE_EXTENSION: return 'input object'; default: throw new InvariantViolation("Unexpected extension kind: {$kind}."); } } } graphql/lib/Validator/Rules/UniqueTypeNames.php000064400000004273151666572070015621 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\SDLValidationContext; /** * Unique type names. * * A GraphQL document is only valid if all defined types have unique names. */ class UniqueTypeNames extends ValidationRule { public function getSDLVisitor(SDLValidationContext $context): array { $schema = $context->getSchema(); /** @var array<string, NameNode> $knownTypeNames */ $knownTypeNames = []; $checkTypeName = static function ($node) use ($context, $schema, &$knownTypeNames): ?VisitorOperation { $typeName = $node->name->value; if ($schema !== null && $schema->getType($typeName) !== null) { $context->reportError( new Error( "Type \"{$typeName}\" already exists in the schema. It cannot also be defined in this type definition.", $node->name, ), ); return null; } if (array_key_exists($typeName, $knownTypeNames)) { $context->reportError( new Error( "There can be only one type named \"{$typeName}\".", [ $knownTypeNames[$typeName], $node->name, ] ), ); } else { $knownTypeNames[$typeName] = $node->name; } return Visitor::skipNode(); }; return [ NodeKind::SCALAR_TYPE_DEFINITION => $checkTypeName, NodeKind::OBJECT_TYPE_DEFINITION => $checkTypeName, NodeKind::INTERFACE_TYPE_DEFINITION => $checkTypeName, NodeKind::UNION_TYPE_DEFINITION => $checkTypeName, NodeKind::ENUM_TYPE_DEFINITION => $checkTypeName, NodeKind::INPUT_OBJECT_TYPE_DEFINITION => $checkTypeName, ]; } } graphql/lib/Validator/Rules/UniqueOperationNames.php000064400000003344151666572070016636 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; class UniqueOperationNames extends ValidationRule { /** @var array<string, NameNode> */ protected array $knownOperationNames; public function getVisitor(QueryValidationContext $context): array { $this->knownOperationNames = []; return [ NodeKind::OPERATION_DEFINITION => function (OperationDefinitionNode $node) use ($context): VisitorOperation { $operationName = $node->name; if ($operationName !== null) { if (! isset($this->knownOperationNames[$operationName->value])) { $this->knownOperationNames[$operationName->value] = $operationName; } else { $context->reportError(new Error( static::duplicateOperationNameMessage($operationName->value), [$this->knownOperationNames[$operationName->value], $operationName] )); } } return Visitor::skipNode(); }, NodeKind::FRAGMENT_DEFINITION => static fn (): VisitorOperation => Visitor::skipNode(), ]; } public static function duplicateOperationNameMessage(string $operationName): string { return "There can be only one operation named \"{$operationName}\"."; } } graphql/lib/Validator/Rules/UniqueDirectivesPerLocation.php000064400000006267151666572070020162 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Validator\QueryValidationContext; use YOOtheme\GraphQL\Validator\SDLValidationContext; use YOOtheme\GraphQL\Validator\ValidationContext; /** * Unique directive names per location. * * A GraphQL document is only valid if all non-repeatable directives at * a given location are uniquely named. * * @phpstan-import-type VisitorArray from Visitor */ class UniqueDirectivesPerLocation extends ValidationRule { /** @throws InvariantViolation */ public function getVisitor(QueryValidationContext $context): array { return $this->getASTVisitor($context); } /** @throws InvariantViolation */ public function getSDLVisitor(SDLValidationContext $context): array { return $this->getASTVisitor($context); } /** * @throws InvariantViolation * * @phpstan-return VisitorArray */ public function getASTVisitor(ValidationContext $context): array { /** @var array<string, true> $uniqueDirectiveMap */ $uniqueDirectiveMap = []; $schema = $context->getSchema(); $definedDirectives = $schema !== null ? $schema->getDirectives() : Directive::getInternalDirectives(); foreach ($definedDirectives as $directive) { if (! $directive->isRepeatable) { $uniqueDirectiveMap[$directive->name] = true; } } $astDefinitions = $context->getDocument()->definitions; foreach ($astDefinitions as $definition) { if ($definition instanceof DirectiveDefinitionNode && ! $definition->repeatable ) { $uniqueDirectiveMap[$definition->name->value] = true; } } return [ 'enter' => static function (Node $node) use ($uniqueDirectiveMap, $context): void { if (! property_exists($node, 'directives')) { return; } $knownDirectives = []; foreach ($node->directives as $directive) { $directiveName = $directive->name->value; if (isset($uniqueDirectiveMap[$directiveName])) { if (isset($knownDirectives[$directiveName])) { $context->reportError(new Error( static::duplicateDirectiveMessage($directiveName), [$knownDirectives[$directiveName], $directive] )); } else { $knownDirectives[$directiveName] = $directive; } } } }, ]; } public static function duplicateDirectiveMessage(string $directiveName): string { return "The directive \"{$directiveName}\" can only be used once at this location."; } } graphql/lib/Validator/Rules/FragmentsOnCompositeTypes.php000064400000004365151666572070017662 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Validator\QueryValidationContext; class FragmentsOnCompositeTypes extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::INLINE_FRAGMENT => static function (InlineFragmentNode $node) use ($context): void { if ($node->typeCondition === null) { return; } $type = AST::typeFromAST([$context->getSchema(), 'getType'], $node->typeCondition); if ($type === null || Type::isCompositeType($type)) { return; } $context->reportError(new Error( static::inlineFragmentOnNonCompositeErrorMessage($type->toString()), [$node->typeCondition] )); }, NodeKind::FRAGMENT_DEFINITION => static function (FragmentDefinitionNode $node) use ($context): void { $type = AST::typeFromAST([$context->getSchema(), 'getType'], $node->typeCondition); if ($type === null || Type::isCompositeType($type)) { return; } $context->reportError(new Error( static::fragmentOnNonCompositeErrorMessage( $node->name->value, Printer::doPrint($node->typeCondition) ), [$node->typeCondition] )); }, ]; } public static function inlineFragmentOnNonCompositeErrorMessage(string $type): string { return "Fragment cannot condition on non composite type \"{$type}\"."; } public static function fragmentOnNonCompositeErrorMessage(string $fragName, string $type): string { return "Fragment \"{$fragName}\" cannot condition on non composite type \"{$type}\"."; } } graphql/lib/Validator/Rules/NoUndefinedVariables.php000064400000004545151666572070016556 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * A GraphQL operation is only valid if all variables encountered, both directly * and via fragment spreads, are defined by that operation. */ class NoUndefinedVariables extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { /** @var array<string, true> $variableNameDefined */ $variableNameDefined = []; return [ NodeKind::OPERATION_DEFINITION => [ 'enter' => static function () use (&$variableNameDefined): void { $variableNameDefined = []; }, 'leave' => static function (OperationDefinitionNode $operation) use (&$variableNameDefined, $context): void { $usages = $context->getRecursiveVariableUsages($operation); foreach ($usages as $usage) { $node = $usage['node']; $varName = $node->name->value; if (! isset($variableNameDefined[$varName])) { $context->reportError(new Error( static::undefinedVarMessage( $varName, $operation->name !== null ? $operation->name->value : null ), [$node, $operation] )); } } }, ], NodeKind::VARIABLE_DEFINITION => static function (VariableDefinitionNode $def) use (&$variableNameDefined): void { $variableNameDefined[$def->variable->name->value] = true; }, ]; } public static function undefinedVarMessage(string $varName, ?string $opName): string { return $opName === null ? "Variable \"\${$varName}\" is not defined by operation \"{$opName}\"." : "Variable \"\${$varName}\" is not defined."; } } graphql/lib/Validator/Rules/ProvidedRequiredArguments.php000064400000004047151666572070017667 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; class ProvidedRequiredArguments extends ValidationRule { /** @throws \Exception */ public function getVisitor(QueryValidationContext $context): array { $providedRequiredArgumentsOnDirectives = new ProvidedRequiredArgumentsOnDirectives(); return $providedRequiredArgumentsOnDirectives->getVisitor($context) + [ NodeKind::FIELD => [ 'leave' => static function (FieldNode $fieldNode) use ($context): ?VisitorOperation { $fieldDef = $context->getFieldDef(); if ($fieldDef === null) { return Visitor::skipNode(); } $argNodes = $fieldNode->arguments; $argNodeMap = []; foreach ($argNodes as $argNode) { $argNodeMap[$argNode->name->value] = $argNode; } foreach ($fieldDef->args as $argDef) { $argNode = $argNodeMap[$argDef->name] ?? null; if ($argNode === null && $argDef->isRequired()) { $context->reportError(new Error( static::missingFieldArgMessage($fieldNode->name->value, $argDef->name, $argDef->getType()->toString()), [$fieldNode] )); } } return null; }, ], ]; } public static function missingFieldArgMessage(string $fieldName, string $argName, string $type): string { return "Field \"{$fieldName}\" argument \"{$argName}\" of type \"{$type}\" is required but not provided."; } } graphql/lib/Validator/Rules/NoUnusedVariables.php000064400000004331151666572070016111 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Validator\QueryValidationContext; class NoUnusedVariables extends ValidationRule { /** @var array<int, VariableDefinitionNode> */ protected array $variableDefs; public function getVisitor(QueryValidationContext $context): array { $this->variableDefs = []; return [ NodeKind::OPERATION_DEFINITION => [ 'enter' => function (): void { $this->variableDefs = []; }, 'leave' => function (OperationDefinitionNode $operation) use ($context): void { $variableNameUsed = []; $usages = $context->getRecursiveVariableUsages($operation); $opName = $operation->name !== null ? $operation->name->value : null; foreach ($usages as $usage) { $node = $usage['node']; $variableNameUsed[$node->name->value] = true; } foreach ($this->variableDefs as $variableDef) { $variableName = $variableDef->variable->name->value; if (! isset($variableNameUsed[$variableName])) { $context->reportError(new Error( static::unusedVariableMessage($variableName, $opName), [$variableDef] )); } } }, ], NodeKind::VARIABLE_DEFINITION => function ($def): void { $this->variableDefs[] = $def; }, ]; } public static function unusedVariableMessage(string $varName, ?string $opName = null): string { return $opName !== null ? "Variable \"\${$varName}\" is never used in operation \"{$opName}\"." : "Variable \"\${$varName}\" is never used."; } } graphql/lib/Validator/Rules/DisableIntrospection.php000064400000002701151666572070016643 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Validator\QueryValidationContext; class DisableIntrospection extends QuerySecurityRule { public const ENABLED = 1; protected int $isEnabled; public function __construct(int $enabled) { $this->setEnabled($enabled); } public function setEnabled(int $enabled): void { $this->isEnabled = $enabled; } public function getVisitor(QueryValidationContext $context): array { return $this->invokeIfNeeded( $context, [ NodeKind::FIELD => static function (FieldNode $node) use ($context): void { if ($node->name->value !== '__type' && $node->name->value !== '__schema') { return; } $context->reportError(new Error( static::introspectionDisabledMessage(), [$node] )); }, ] ); } public static function introspectionDisabledMessage(): string { return 'GraphQL introspection is not allowed, but the query contained __schema or __type'; } protected function isEnabled(): bool { return $this->isEnabled !== self::DISABLED; } } graphql/lib/Validator/Rules/UniqueArgumentNames.php000064400000004055151666572070016460 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\ArgumentNode; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; use YOOtheme\GraphQL\Validator\SDLValidationContext; use YOOtheme\GraphQL\Validator\ValidationContext; /** * @phpstan-import-type VisitorArray from Visitor */ class UniqueArgumentNames extends ValidationRule { /** @var array<string, NameNode> */ protected array $knownArgNames; public function getSDLVisitor(SDLValidationContext $context): array { return $this->getASTVisitor($context); } public function getVisitor(QueryValidationContext $context): array { return $this->getASTVisitor($context); } /** @phpstan-return VisitorArray */ public function getASTVisitor(ValidationContext $context): array { $this->knownArgNames = []; return [ NodeKind::FIELD => function (): void { $this->knownArgNames = []; }, NodeKind::DIRECTIVE => function (): void { $this->knownArgNames = []; }, NodeKind::ARGUMENT => function (ArgumentNode $node) use ($context): VisitorOperation { $argName = $node->name->value; if (isset($this->knownArgNames[$argName])) { $context->reportError(new Error( static::duplicateArgMessage($argName), [$this->knownArgNames[$argName], $node->name] )); } else { $this->knownArgNames[$argName] = $node->name; } return Visitor::skipNode(); }, ]; } public static function duplicateArgMessage(string $argName): string { return "There can be only one argument named \"{$argName}\"."; } } graphql/lib/Validator/Rules/KnownArgumentNames.php000064400000004770151666572070016312 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\ArgumentNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * Known argument names. * * A GraphQL field is only valid if all supplied arguments are defined by * that field. */ class KnownArgumentNames extends ValidationRule { /** @throws InvariantViolation */ public function getVisitor(QueryValidationContext $context): array { $knownArgumentNamesOnDirectives = new KnownArgumentNamesOnDirectives(); return $knownArgumentNamesOnDirectives->getVisitor($context) + [ NodeKind::ARGUMENT => static function (ArgumentNode $node) use ($context): void { $argDef = $context->getArgument(); if ($argDef !== null) { return; } $fieldDef = $context->getFieldDef(); if ($fieldDef === null) { return; } $parentType = $context->getParentType(); if (! $parentType instanceof NamedType) { return; } $context->reportError(new Error( static::unknownArgMessage( $node->name->value, $fieldDef->name, $parentType->name, Utils::suggestionList( $node->name->value, array_map( static fn (Argument $arg): string => $arg->name, $fieldDef->args ) ) ), [$node] )); }, ]; } /** @param array<string> $suggestedArgs */ public static function unknownArgMessage(string $argName, string $fieldName, string $typeName, array $suggestedArgs): string { $message = "Unknown argument \"{$argName}\" on field \"{$fieldName}\" of type \"{$typeName}\"."; if ($suggestedArgs !== []) { $suggestions = Utils::quotedOrList($suggestedArgs); $message .= " Did you mean {$suggestions}?"; } return $message; } } graphql/lib/Validator/Rules/QuerySecurityRule.php000064400000015032151666572070016205 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\HasFieldsType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * @see Visitor, FieldDefinition * * @phpstan-import-type VisitorArray from Visitor * * @phpstan-type ASTAndDefs \ArrayObject<string, \ArrayObject<int, array{FieldNode, FieldDefinition|null}>> */ abstract class QuerySecurityRule extends ValidationRule { public const DISABLED = 0; /** @var array<string, FragmentDefinitionNode> */ protected array $fragments = []; /** @throws \InvalidArgumentException */ protected function checkIfGreaterOrEqualToZero(string $name, int $value): void { if ($value < 0) { throw new \InvalidArgumentException("\${$name} argument must be greater or equal to 0."); } } protected function getFragment(FragmentSpreadNode $fragmentSpread): ?FragmentDefinitionNode { return $this->fragments[$fragmentSpread->name->value] ?? null; } /** @return array<string, FragmentDefinitionNode> */ protected function getFragments(): array { return $this->fragments; } /** * @phpstan-param VisitorArray $validators * * @phpstan-return VisitorArray */ protected function invokeIfNeeded(QueryValidationContext $context, array $validators): array { if (! $this->isEnabled()) { return []; } $this->gatherFragmentDefinition($context); return $validators; } abstract protected function isEnabled(): bool; protected function gatherFragmentDefinition(QueryValidationContext $context): void { // Gather all the fragment definition. // Importantly this does not include inline fragments. $definitions = $context->getDocument()->definitions; foreach ($definitions as $node) { if ($node instanceof FragmentDefinitionNode) { $this->fragments[$node->name->value] = $node; } } } /** * Given a selectionSet, adds all fields in that selection to * the passed in map of fields, and returns it at the end. * * Note: This is not the same as execution's collectFields because at static * time we do not know what object type will be used, so we unconditionally * spread in all fragments. * * @see \GraphQL\Validator\Rules\OverlappingFieldsCanBeMerged * * @param \ArrayObject<string, true>|null $visitedFragmentNames * * @phpstan-param ASTAndDefs|null $astAndDefs * * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation * * @phpstan-return ASTAndDefs */ protected function collectFieldASTsAndDefs( QueryValidationContext $context, ?Type $parentType, SelectionSetNode $selectionSet, ?\ArrayObject $visitedFragmentNames = null, ?\ArrayObject $astAndDefs = null ): \ArrayObject { $visitedFragmentNames ??= new \ArrayObject(); $astAndDefs ??= new \ArrayObject(); foreach ($selectionSet->selections as $selection) { if ($selection instanceof FieldNode) { $fieldName = $selection->name->value; $fieldDef = null; if ($parentType instanceof HasFieldsType) { $schemaMetaFieldDef = Introspection::schemaMetaFieldDef(); $typeMetaFieldDef = Introspection::typeMetaFieldDef(); $typeNameMetaFieldDef = Introspection::typeNameMetaFieldDef(); $queryType = $context->getSchema()->getQueryType(); if ($fieldName === $schemaMetaFieldDef->name && $queryType === $parentType) { $fieldDef = $schemaMetaFieldDef; } elseif ($fieldName === $typeMetaFieldDef->name && $queryType === $parentType) { $fieldDef = $typeMetaFieldDef; } elseif ($fieldName === $typeNameMetaFieldDef->name) { $fieldDef = $typeNameMetaFieldDef; } elseif ($parentType->hasField($fieldName)) { $fieldDef = $parentType->getField($fieldName); } } $responseName = $this->getFieldName($selection); $responseContext = $astAndDefs[$responseName] ??= new \ArrayObject(); $responseContext[] = [$selection, $fieldDef]; } elseif ($selection instanceof InlineFragmentNode) { $typeCondition = $selection->typeCondition; $fragmentParentType = $typeCondition === null ? $parentType : AST::typeFromAST([$context->getSchema(), 'getType'], $typeCondition); $astAndDefs = $this->collectFieldASTsAndDefs( $context, $fragmentParentType, $selection->selectionSet, $visitedFragmentNames, $astAndDefs ); } elseif ($selection instanceof FragmentSpreadNode) { $fragName = $selection->name->value; if (isset($visitedFragmentNames[$fragName])) { continue; } $visitedFragmentNames[$fragName] = true; $fragment = $context->getFragment($fragName); if ($fragment === null) { continue; } $astAndDefs = $this->collectFieldASTsAndDefs( $context, AST::typeFromAST([$context->getSchema(), 'getType'], $fragment->typeCondition), $fragment->selectionSet, $visitedFragmentNames, $astAndDefs ); } } return $astAndDefs; } protected function getFieldName(FieldNode $node): string { $fieldName = $node->name->value; return $node->alias === null ? $fieldName : $node->alias->value; } } graphql/lib/Validator/Rules/UniqueOperationTypes.php000064400000004674151666572070016706 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\SDLValidationContext; /** * Unique operation types. * * A GraphQL document is only valid if it has only one type per operation. */ class UniqueOperationTypes extends ValidationRule { public function getSDLVisitor(SDLValidationContext $context): array { $schema = $context->getSchema(); $definedOperationTypes = []; $existingOperationTypes = $schema !== null ? [ 'query' => $schema->getQueryType(), 'mutation' => $schema->getMutationType(), 'subscription' => $schema->getSubscriptionType(), ] : []; /** * @param SchemaDefinitionNode|SchemaExtensionNode $node */ $checkOperationTypes = static function ($node) use ($context, &$definedOperationTypes, $existingOperationTypes): VisitorOperation { foreach ($node->operationTypes as $operationType) { $operation = $operationType->operation; $alreadyDefinedOperationType = $definedOperationTypes[$operation] ?? null; if (isset($existingOperationTypes[$operation])) { $context->reportError( new Error( "Type for {$operation} already defined in the schema. It cannot be redefined.", $operationType, ), ); } elseif ($alreadyDefinedOperationType !== null) { $context->reportError( new Error( "There can be only one {$operation} type in schema.", [$alreadyDefinedOperationType, $operationType], ), ); } else { $definedOperationTypes[$operation] = $operationType; } } return Visitor::skipNode(); }; return [ NodeKind::SCHEMA_DEFINITION => $checkOperationTypes, NodeKind::SCHEMA_EXTENSION => $checkOperationTypes, ]; } } graphql/lib/Validator/Rules/KnownArgumentNamesOnDirectives.php000064400000007323151666572070020626 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Validator\QueryValidationContext; use YOOtheme\GraphQL\Validator\SDLValidationContext; use YOOtheme\GraphQL\Validator\ValidationContext; /** * Known argument names on directives. * * A GraphQL directive is only valid if all supplied arguments are defined by * that field. * * @phpstan-import-type VisitorArray from Visitor */ class KnownArgumentNamesOnDirectives extends ValidationRule { /** @param array<string> $suggestedArgs */ public static function unknownDirectiveArgMessage(string $argName, string $directiveName, array $suggestedArgs): string { $message = "Unknown argument \"{$argName}\" on directive \"@{$directiveName}\"."; if (isset($suggestedArgs[0])) { $suggestions = Utils::quotedOrList($suggestedArgs); $message .= " Did you mean {$suggestions}?"; } return $message; } /** @throws InvariantViolation */ public function getSDLVisitor(SDLValidationContext $context): array { return $this->getASTVisitor($context); } /** @throws InvariantViolation */ public function getVisitor(QueryValidationContext $context): array { return $this->getASTVisitor($context); } /** * @throws InvariantViolation * * @phpstan-return VisitorArray */ public function getASTVisitor(ValidationContext $context): array { $directiveArgs = []; $schema = $context->getSchema(); $definedDirectives = $schema !== null ? $schema->getDirectives() : Directive::getInternalDirectives(); foreach ($definedDirectives as $directive) { $directiveArgs[$directive->name] = array_map( static fn (Argument $arg): string => $arg->name, $directive->args ); } $astDefinitions = $context->getDocument()->definitions; foreach ($astDefinitions as $def) { if ($def instanceof DirectiveDefinitionNode) { $argNames = []; foreach ($def->arguments as $arg) { $argNames[] = $arg->name->value; } $directiveArgs[$def->name->value] = $argNames; } } return [ NodeKind::DIRECTIVE => static function (DirectiveNode $directiveNode) use ($directiveArgs, $context): VisitorOperation { $directiveName = $directiveNode->name->value; if (! isset($directiveArgs[$directiveName])) { return Visitor::skipNode(); } $knownArgs = $directiveArgs[$directiveName]; foreach ($directiveNode->arguments as $argNode) { $argName = $argNode->name->value; if (! in_array($argName, $knownArgs, true)) { $suggestions = Utils::suggestionList($argName, $knownArgs); $context->reportError(new Error( static::unknownDirectiveArgMessage($argName, $directiveName, $suggestions), [$argNode] )); } } return Visitor::skipNode(); }, ]; } } graphql/lib/Validator/Rules/UniqueEnumValueNames.php000064400000004754151666572070016605 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\EnumValueNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Validator\SDLValidationContext; class UniqueEnumValueNames extends ValidationRule { public function getSDLVisitor(SDLValidationContext $context): array { /** @var array<string, array<string, EnumValueNode>> $knownValueNames */ $knownValueNames = []; /** * @param EnumTypeDefinitionNode|EnumTypeExtensionNode $enum */ $checkValueUniqueness = static function ($enum) use ($context, &$knownValueNames): VisitorOperation { $typeName = $enum->name->value; $schema = $context->getSchema(); $existingType = $schema !== null ? $schema->getType($typeName) : null; $valueNodes = $enum->values; if (! isset($knownValueNames[$typeName])) { $knownValueNames[$typeName] = []; } $valueNames = &$knownValueNames[$typeName]; foreach ($valueNodes as $valueDef) { $valueNameNode = $valueDef->name; $valueName = $valueNameNode->value; if ($existingType instanceof EnumType && $existingType->getValue($valueName) !== null) { $context->reportError(new Error( "Enum value \"{$typeName}.{$valueName}\" already exists in the schema. It cannot also be defined in this type extension.", $valueNameNode )); } elseif (isset($valueNames[$valueName])) { $context->reportError(new Error( "Enum value \"{$typeName}.{$valueName}\" can only be defined once.", [$valueNames[$valueName], $valueNameNode] )); } else { $valueNames[$valueName] = $valueNameNode; } } return Visitor::skipNode(); }; return [ NodeKind::ENUM_TYPE_DEFINITION => $checkValueUniqueness, NodeKind::ENUM_TYPE_EXTENSION => $checkValueUniqueness, ]; } } graphql/lib/Validator/Rules/CustomValidationRule.php000064400000001772151666572070016643 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\ValidationContext; /** * @see Node, VisitorOperation * * @phpstan-type NodeVisitorFnResult VisitorOperation|mixed|null * @phpstan-type VisitorFnResult array<string, callable(Node): NodeVisitorFnResult>|array<string, array<string, callable(Node): NodeVisitorFnResult>> * @phpstan-type VisitorFn callable(ValidationContext): VisitorFnResult */ class CustomValidationRule extends ValidationRule { /** * @var callable * * @phpstan-var VisitorFn */ protected $visitorFn; /** @phpstan-param VisitorFn $visitorFn */ public function __construct(string $name, callable $visitorFn) { $this->name = $name; $this->visitorFn = $visitorFn; } public function getVisitor(ValidationContext $context): array { return ($this->visitorFn)($context); } } graphql/lib/Validator/Rules/KnownDirectives.php000064400000020126151666572070015636 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\EnumValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\FieldDefinitionNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Language\DirectiveLocation; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Validator\QueryValidationContext; use YOOtheme\GraphQL\Validator\SDLValidationContext; use YOOtheme\GraphQL\Validator\ValidationContext; /** * @phpstan-import-type VisitorArray from Visitor */ class KnownDirectives extends ValidationRule { /** @throws InvariantViolation */ public function getVisitor(QueryValidationContext $context): array { return $this->getASTVisitor($context); } /** @throws InvariantViolation */ public function getSDLVisitor(SDLValidationContext $context): array { return $this->getASTVisitor($context); } /** * @throws InvariantViolation * * @phpstan-return VisitorArray */ public function getASTVisitor(ValidationContext $context): array { $locationsMap = []; $schema = $context->getSchema(); $definedDirectives = $schema === null ? Directive::getInternalDirectives() : $schema->getDirectives(); foreach ($definedDirectives as $directive) { $locationsMap[$directive->name] = $directive->locations; } $astDefinition = $context->getDocument()->definitions; foreach ($astDefinition as $def) { if ($def instanceof DirectiveDefinitionNode) { $locationNames = []; foreach ($def->locations as $location) { $locationNames[] = $location->value; } $locationsMap[$def->name->value] = $locationNames; } } return [ NodeKind::DIRECTIVE => function ( DirectiveNode $node, $key, $parent, $path, $ancestors ) use ( $context, $locationsMap ): void { $name = $node->name->value; $locations = $locationsMap[$name] ?? null; if ($locations === null) { $context->reportError(new Error( static::unknownDirectiveMessage($name), [$node] )); return; } $candidateLocation = $this->getDirectiveLocationForASTPath($ancestors); if ($candidateLocation === '' || in_array($candidateLocation, $locations, true)) { return; } $context->reportError( new Error( static::misplacedDirectiveMessage($name, $candidateLocation), [$node] ) ); }, ]; } public static function unknownDirectiveMessage(string $directiveName): string { return "Unknown directive \"@{$directiveName}\"."; } /** * @param array<Node|NodeList<Node>> $ancestors * * @throws \Exception */ protected function getDirectiveLocationForASTPath(array $ancestors): string { $appliedTo = $ancestors[count($ancestors) - 1]; switch (true) { case $appliedTo instanceof OperationDefinitionNode: switch ($appliedTo->operation) { case 'query': return DirectiveLocation::QUERY; case 'mutation': return DirectiveLocation::MUTATION; case 'subscription': return DirectiveLocation::SUBSCRIPTION; } // no break, since all possible cases were handled case $appliedTo instanceof FieldNode: return DirectiveLocation::FIELD; case $appliedTo instanceof FragmentSpreadNode: return DirectiveLocation::FRAGMENT_SPREAD; case $appliedTo instanceof InlineFragmentNode: return DirectiveLocation::INLINE_FRAGMENT; case $appliedTo instanceof FragmentDefinitionNode: return DirectiveLocation::FRAGMENT_DEFINITION; case $appliedTo instanceof VariableDefinitionNode: return DirectiveLocation::VARIABLE_DEFINITION; case $appliedTo instanceof SchemaDefinitionNode: case $appliedTo instanceof SchemaExtensionNode: return DirectiveLocation::SCHEMA; case $appliedTo instanceof ScalarTypeDefinitionNode: case $appliedTo instanceof ScalarTypeExtensionNode: return DirectiveLocation::SCALAR; case $appliedTo instanceof ObjectTypeDefinitionNode: case $appliedTo instanceof ObjectTypeExtensionNode: return DirectiveLocation::OBJECT; case $appliedTo instanceof FieldDefinitionNode: return DirectiveLocation::FIELD_DEFINITION; case $appliedTo instanceof InterfaceTypeDefinitionNode: case $appliedTo instanceof InterfaceTypeExtensionNode: return DirectiveLocation::IFACE; case $appliedTo instanceof UnionTypeDefinitionNode: case $appliedTo instanceof UnionTypeExtensionNode: return DirectiveLocation::UNION; case $appliedTo instanceof EnumTypeDefinitionNode: case $appliedTo instanceof EnumTypeExtensionNode: return DirectiveLocation::ENUM; case $appliedTo instanceof EnumValueDefinitionNode: return DirectiveLocation::ENUM_VALUE; case $appliedTo instanceof InputObjectTypeDefinitionNode: case $appliedTo instanceof InputObjectTypeExtensionNode: return DirectiveLocation::INPUT_OBJECT; case $appliedTo instanceof InputValueDefinitionNode: $parentNode = $ancestors[count($ancestors) - 3]; return $parentNode instanceof InputObjectTypeDefinitionNode ? DirectiveLocation::INPUT_FIELD_DEFINITION : DirectiveLocation::ARGUMENT_DEFINITION; default: $unknownLocation = get_class($appliedTo); throw new \Exception("Unknown directive location: {$unknownLocation}."); } } public static function misplacedDirectiveMessage(string $directiveName, string $location): string { return "Directive \"{$directiveName}\" may not be used on \"{$location}\"."; } } graphql/lib/Validator/Rules/VariablesAreInputTypes.php000064400000002631151666572070017126 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Validator\QueryValidationContext; class VariablesAreInputTypes extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::VARIABLE_DEFINITION => static function (VariableDefinitionNode $node) use ($context): void { $type = AST::typeFromAST([$context->getSchema(), 'getType'], $node->type); // If the variable type is not an input type, return an error. if ($type === null || Type::isInputType($type)) { return; } $variableName = $node->variable->name->value; $context->reportError(new Error( static::nonInputTypeOnVarMessage($variableName, Printer::doPrint($node->type)), [$node->type] )); }, ]; } public static function nonInputTypeOnVarMessage(string $variableName, string $typeName): string { return "Variable \"\${$variableName}\" cannot be non-input type \"{$typeName}\"."; } } graphql/lib/Validator/Rules/LoneAnonymousOperation.php000064400000003155151666572070017212 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * Lone anonymous operation. * * A GraphQL document is only valid if when it contains an anonymous operation * (the query shorthand) that it contains only that one operation definition. */ class LoneAnonymousOperation extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { $operationCount = 0; return [ NodeKind::DOCUMENT => static function (DocumentNode $node) use (&$operationCount): void { $operationCount = 0; foreach ($node->definitions as $definition) { if ($definition instanceof OperationDefinitionNode) { ++$operationCount; } } }, NodeKind::OPERATION_DEFINITION => static function (OperationDefinitionNode $node) use (&$operationCount, $context): void { if ($node->name !== null || $operationCount <= 1) { return; } $context->reportError( new Error(static::anonOperationNotAloneMessage(), [$node]) ); }, ]; } public static function anonOperationNotAloneMessage(): string { return 'This anonymous operation must be the only defined operation.'; } } graphql/lib/Validator/Rules/UniqueVariableNames.php000064400000002767151666572070016433 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Validator\QueryValidationContext; class UniqueVariableNames extends ValidationRule { /** @var array<string, NameNode> */ protected array $knownVariableNames; public function getVisitor(QueryValidationContext $context): array { $this->knownVariableNames = []; return [ NodeKind::OPERATION_DEFINITION => function (): void { $this->knownVariableNames = []; }, NodeKind::VARIABLE_DEFINITION => function (VariableDefinitionNode $node) use ($context): void { $variableName = $node->variable->name->value; if (! isset($this->knownVariableNames[$variableName])) { $this->knownVariableNames[$variableName] = $node->variable->name; } else { $context->reportError(new Error( static::duplicateVariableMessage($variableName), [$this->knownVariableNames[$variableName], $node->variable->name] )); } }, ]; } public static function duplicateVariableMessage(string $variableName): string { return "There can be only one variable named \"{$variableName}\"."; } } graphql/lib/Validator/Rules/ValidationRule.php000064400000001612151666572070015441 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Validator\QueryValidationContext; use YOOtheme\GraphQL\Validator\SDLValidationContext; /** * @phpstan-import-type VisitorArray from Visitor */ abstract class ValidationRule { protected string $name; public function getName(): string { return $this->name ?? static::class; } /** * Returns structure suitable for @see \GraphQL\Language\Visitor. * * @phpstan-return VisitorArray */ public function getVisitor(QueryValidationContext $context): array { return []; } /** * Returns structure suitable for @see \GraphQL\Language\Visitor. * * @phpstan-return VisitorArray */ public function getSDLVisitor(SDLValidationContext $context): array { return []; } } graphql/lib/Validator/Rules/NoFragmentCycles.php000064400000006547151666572070015736 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; class NoFragmentCycles extends ValidationRule { /** @var array<string, bool> */ protected array $visitedFrags; /** @var array<int, FragmentSpreadNode> */ protected array $spreadPath; /** @var array<string, int|null> */ protected array $spreadPathIndexByName; public function getVisitor(QueryValidationContext $context): array { // Tracks already visited fragments to maintain O(N) and to ensure that cycles // are not redundantly reported. $this->visitedFrags = []; // Array of AST nodes used to produce meaningful errors $this->spreadPath = []; // Position in the spread path $this->spreadPathIndexByName = []; return [ NodeKind::OPERATION_DEFINITION => static fn (): VisitorOperation => Visitor::skipNode(), NodeKind::FRAGMENT_DEFINITION => function (FragmentDefinitionNode $node) use ($context): VisitorOperation { $this->detectCycleRecursive($node, $context); return Visitor::skipNode(); }, ]; } protected function detectCycleRecursive(FragmentDefinitionNode $fragment, QueryValidationContext $context): void { if (isset($this->visitedFrags[$fragment->name->value])) { return; } $fragmentName = $fragment->name->value; $this->visitedFrags[$fragmentName] = true; $spreadNodes = $context->getFragmentSpreads($fragment); if ($spreadNodes === []) { return; } $this->spreadPathIndexByName[$fragmentName] = count($this->spreadPath); foreach ($spreadNodes as $spreadNode) { $spreadName = $spreadNode->name->value; $cycleIndex = $this->spreadPathIndexByName[$spreadName] ?? null; $this->spreadPath[] = $spreadNode; if ($cycleIndex === null) { $spreadFragment = $context->getFragment($spreadName); if ($spreadFragment !== null) { $this->detectCycleRecursive($spreadFragment, $context); } } else { $cyclePath = array_slice($this->spreadPath, $cycleIndex); $fragmentNames = []; foreach (array_slice($cyclePath, 0, -1) as $frag) { $fragmentNames[] = $frag->name->value; } $context->reportError(new Error( static::cycleErrorMessage($spreadName, $fragmentNames), $cyclePath )); } array_pop($this->spreadPath); } $this->spreadPathIndexByName[$fragmentName] = null; } /** @param array<string> $spreadNames */ public static function cycleErrorMessage(string $fragName, array $spreadNames = []): string { $via = $spreadNames === [] ? '' : ' via ' . implode(', ', $spreadNames); return "Cannot spread fragment \"{$fragName}\" within itself{$via}."; } } graphql/lib/Validator/Rules/ExecutableDefinitions.php000064400000004231151666572070016774 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\ExecutableDefinitionNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Language\AST\TypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeExtensionNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * Executable definitions. * * A GraphQL document is only valid for execution if all definitions are either * operation or fragment definitions. */ class ExecutableDefinitions extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::DOCUMENT => static function (DocumentNode $node) use ($context): VisitorOperation { foreach ($node->definitions as $definition) { if (! $definition instanceof ExecutableDefinitionNode) { if ($definition instanceof SchemaDefinitionNode || $definition instanceof SchemaExtensionNode) { $defName = 'schema'; } else { assert( $definition instanceof TypeDefinitionNode || $definition instanceof TypeExtensionNode, 'only other option' ); $defName = "\"{$definition->getName()->value}\""; } $context->reportError(new Error( static::nonExecutableDefinitionMessage($defName), [$definition] )); } } return Visitor::skipNode(); }, ]; } public static function nonExecutableDefinitionMessage(string $defName): string { return "The {$defName} definition is not executable."; } } graphql/lib/Validator/Rules/UniqueFieldDefinitionNames.php000064400000007631151666572070017735 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\InputObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Validator\SDLValidationContext; /** * Unique field definition names. * * A GraphQL complex type is only valid if all its fields are uniquely named. */ class UniqueFieldDefinitionNames extends ValidationRule { public function getSDLVisitor(SDLValidationContext $context): array { $schema = $context->getSchema(); /** @var array<string, array<int, NameNode>> $knownFieldNames */ $knownFieldNames = []; $checkFieldUniqueness = static function ($node) use ($context, $schema, &$knownFieldNames): VisitorOperation { assert( $node instanceof InputObjectTypeDefinitionNode || $node instanceof InputObjectTypeExtensionNode || $node instanceof InterfaceTypeDefinitionNode || $node instanceof InterfaceTypeExtensionNode || $node instanceof ObjectTypeDefinitionNode || $node instanceof ObjectTypeExtensionNode ); $typeName = $node->name->value; $knownFieldNames[$typeName] ??= []; $fieldNames = &$knownFieldNames[$typeName]; foreach ($node->fields as $fieldDef) { $fieldName = $fieldDef->name->value; $existingType = $schema !== null ? $schema->getType($typeName) : null; if (self::hasField($existingType, $fieldName)) { $context->reportError( new Error( "Field \"{$typeName}.{$fieldName}\" already exists in the schema. It cannot also be defined in this type extension.", $fieldDef->name, ), ); } elseif (isset($fieldNames[$fieldName])) { $context->reportError( new Error( "Field \"{$typeName}.{$fieldName}\" can only be defined once.", [$fieldNames[$fieldName], $fieldDef->name], ), ); } else { $fieldNames[$fieldName] = $fieldDef->name; } } return Visitor::skipNode(); }; return [ NodeKind::INPUT_OBJECT_TYPE_DEFINITION => $checkFieldUniqueness, NodeKind::INPUT_OBJECT_TYPE_EXTENSION => $checkFieldUniqueness, NodeKind::INTERFACE_TYPE_DEFINITION => $checkFieldUniqueness, NodeKind::INTERFACE_TYPE_EXTENSION => $checkFieldUniqueness, NodeKind::OBJECT_TYPE_DEFINITION => $checkFieldUniqueness, NodeKind::OBJECT_TYPE_EXTENSION => $checkFieldUniqueness, ]; } /** @throws InvariantViolation */ private static function hasField(?NamedType $type, string $fieldName): bool { if ($type instanceof ObjectType || $type instanceof InterfaceType || $type instanceof InputObjectType) { return $type->hasField($fieldName); } return false; } } graphql/lib/Validator/Rules/SingleFieldSubscription.php000064400000003041151666572070017307 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; class SingleFieldSubscription extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::OPERATION_DEFINITION => static function (OperationDefinitionNode $node) use ($context): VisitorOperation { if ($node->operation === 'subscription') { $selections = $node->selectionSet->selections; if (count($selections) > 1) { $offendingSelections = $selections->splice(1, count($selections)); $context->reportError(new Error( static::multipleFieldsInOperation($node->name->value ?? null), $offendingSelections )); } } return Visitor::skipNode(); }, ]; } public static function multipleFieldsInOperation(?string $operationName): string { if ($operationName === null) { return 'Anonymous Subscription must select only one top level field.'; } return "Subscription \"{$operationName}\" must select only one top level field."; } } graphql/lib/Validator/Rules/OverlappingFieldsCanBeMerged.php000064400000076566151666572070020175 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\ArgumentNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Utils\PairSet; use YOOtheme\GraphQL\Validator\QueryValidationContext; /** * ReasonOrReasons is recursive, but PHPStan does not support that. * * @phpstan-type ReasonOrReasons string|array<array{string, string|array<mixed>}> * @phpstan-type Conflict array{array{string, ReasonOrReasons}, array<int, FieldNode>, array<int, FieldNode>} * @phpstan-type FieldInfo array{Type|null, FieldNode, FieldDefinition|null} * @phpstan-type FieldMap array<string, array<int, FieldInfo>> */ class OverlappingFieldsCanBeMerged extends ValidationRule { /** * A memoization for when two fragments are compared "between" each other for * conflicts. Two fragments may be compared many times, so memoizing this can * dramatically improve the performance of this validator. */ protected PairSet $comparedFragmentPairs; /** * A cache for the "field map" and list of fragment names found in any given * selection set. Selection sets may be asked for this information multiple * times, so this improves the performance of this validator. * * @phpstan-var \SplObjectStorage<SelectionSetNode, array{FieldMap, array<int, string>}> */ protected \SplObjectStorage $cachedFieldsAndFragmentNames; public function getVisitor(QueryValidationContext $context): array { $this->comparedFragmentPairs = new PairSet(); $this->cachedFieldsAndFragmentNames = new \SplObjectStorage(); return [ NodeKind::SELECTION_SET => function (SelectionSetNode $selectionSet) use ($context): void { $conflicts = $this->findConflictsWithinSelectionSet( $context, $context->getParentType(), $selectionSet ); foreach ($conflicts as $conflict) { [[$responseName, $reason], $fields1, $fields2] = $conflict; $context->reportError(new Error( static::fieldsConflictMessage($responseName, $reason), array_merge($fields1, $fields2) )); } }, ]; } /** * Find all conflicts found "within" a selection set, including those found * via spreading in fragments. Called when visiting each SelectionSet in the * GraphQL Document. * * @throws \Exception * * @phpstan-return array<int, Conflict> */ protected function findConflictsWithinSelectionSet( QueryValidationContext $context, ?Type $parentType, SelectionSetNode $selectionSet ): array { [$fieldMap, $fragmentNames] = $this->getFieldsAndFragmentNames( $context, $parentType, $selectionSet ); $conflicts = []; // (A) Find all conflicts "within" the fields of this selection set. // Note: this is the *only place* `collectConflictsWithin` is called. $this->collectConflictsWithin( $context, $conflicts, $fieldMap ); $fragmentNamesLength = count($fragmentNames); if ($fragmentNamesLength !== 0) { // (B) Then collect conflicts between these fields and those represented by // each spread fragment name found. $comparedFragments = []; for ($i = 0; $i < $fragmentNamesLength; ++$i) { $this->collectConflictsBetweenFieldsAndFragment( $context, $conflicts, $comparedFragments, false, $fieldMap, $fragmentNames[$i] ); // (C) Then compare this fragment with all other fragments found in this // selection set to collect conflicts between fragments spread together. // This compares each item in the list of fragment names to every other item // in that same list (except for itself). for ($j = $i + 1; $j < $fragmentNamesLength; ++$j) { $this->collectConflictsBetweenFragments( $context, $conflicts, false, $fragmentNames[$i], $fragmentNames[$j] ); } } } return $conflicts; } /** * Given a selection set, return the collection of fields (a mapping of response * name to field ASTs and definitions) as well as a list of fragment names * referenced via fragment spreads. * * @throws \Exception * * @return array{FieldMap, array<int, string>} */ protected function getFieldsAndFragmentNames( QueryValidationContext $context, ?Type $parentType, SelectionSetNode $selectionSet ): array { if (! isset($this->cachedFieldsAndFragmentNames[$selectionSet])) { /** @phpstan-var FieldMap $astAndDefs */ $astAndDefs = []; /** @var array<string, bool> $fragmentNames */ $fragmentNames = []; $this->internalCollectFieldsAndFragmentNames( $context, $parentType, $selectionSet, $astAndDefs, $fragmentNames ); return $this->cachedFieldsAndFragmentNames[$selectionSet] = [$astAndDefs, array_keys($fragmentNames)]; } return $this->cachedFieldsAndFragmentNames[$selectionSet]; } /** * Algorithm:. * * Conflicts occur when two fields exist in a query which will produce the same * response name, but represent differing values, thus creating a conflict. * The algorithm below finds all conflicts via making a series of comparisons * between fields. In order to compare as few fields as possible, this makes * a series of comparisons "within" sets of fields and "between" sets of fields. * * Given any selection set, a collection produces both a set of fields by * also including all inline fragments, as well as a list of fragments * referenced by fragment spreads. * * A) Each selection set represented in the document first compares "within" its * collected set of fields, finding any conflicts between every pair of * overlapping fields. * Note: This is the *only time* that a the fields "within" a set are compared * to each other. After this only fields "between" sets are compared. * * B) Also, if any fragment is referenced in a selection set, then a * comparison is made "between" the original set of fields and the * referenced fragment. * * C) Also, if multiple fragments are referenced, then comparisons * are made "between" each referenced fragment. * * D) When comparing "between" a set of fields and a referenced fragment, first * a comparison is made between each field in the original set of fields and * each field in the the referenced set of fields. * * E) Also, if any fragment is referenced in the referenced selection set, * then a comparison is made "between" the original set of fields and the * referenced fragment (recursively referring to step D). * * F) When comparing "between" two fragments, first a comparison is made between * each field in the first referenced set of fields and each field in the the * second referenced set of fields. * * G) Also, any fragments referenced by the first must be compared to the * second, and any fragments referenced by the second must be compared to the * first (recursively referring to step F). * * H) When comparing two fields, if both have selection sets, then a comparison * is made "between" both selection sets, first comparing the set of fields in * the first selection set with the set of fields in the second. * * I) Also, if any fragment is referenced in either selection set, then a * comparison is made "between" the other set of fields and the * referenced fragment. * * J) Also, if two fragments are referenced in both selection sets, then a * comparison is made "between" the two fragments. */ /** * Given a reference to a fragment, return the represented collection of fields * as well as a list of nested fragment names referenced via fragment spreads. * * @param array<string, bool> $fragmentNames * * @phpstan-param FieldMap $astAndDefs * * @throws \Exception */ protected function internalCollectFieldsAndFragmentNames( QueryValidationContext $context, ?Type $parentType, SelectionSetNode $selectionSet, array &$astAndDefs, array &$fragmentNames ): void { foreach ($selectionSet->selections as $selection) { switch (true) { case $selection instanceof FieldNode: $fieldName = $selection->name->value; $fieldDef = null; if ( ($parentType instanceof ObjectType || $parentType instanceof InterfaceType) && $parentType->hasField($fieldName) ) { $fieldDef = $parentType->getField($fieldName); } $responseName = $selection->alias->value ?? $fieldName; $astAndDefs[$responseName] ??= []; $astAndDefs[$responseName][] = [$parentType, $selection, $fieldDef]; break; case $selection instanceof FragmentSpreadNode: $fragmentNames[$selection->name->value] = true; break; case $selection instanceof InlineFragmentNode: $typeCondition = $selection->typeCondition; $inlineFragmentType = $typeCondition === null ? $parentType : AST::typeFromAST([$context->getSchema(), 'getType'], $typeCondition); $this->internalCollectFieldsAndFragmentNames( $context, $inlineFragmentType, $selection->selectionSet, $astAndDefs, $fragmentNames ); break; } } } /** * Collect all Conflicts "within" one collection of fields. * * @param array<int, Conflict> $conflicts * * @phpstan-param FieldMap $fieldMap * * @throws \Exception */ protected function collectConflictsWithin( QueryValidationContext $context, array &$conflicts, array $fieldMap ): void { // A field map is a keyed collection, where each key represents a response // name and the value at that key is a list of all fields which provide that // response name. For every response name, if there are multiple fields, they // must be compared to find a potential conflict. foreach ($fieldMap as $responseName => $fields) { // This compares every field in the list to every other field in this list // (except to itself). If the list only has one item, nothing needs to // be compared. $fieldsLength = count($fields); if ($fieldsLength <= 1) { continue; } for ($i = 0; $i < $fieldsLength; ++$i) { for ($j = $i + 1; $j < $fieldsLength; ++$j) { $conflict = $this->findConflict( $context, false, // within one collection is never mutually exclusive $responseName, $fields[$i], $fields[$j] ); if ($conflict !== null) { $conflicts[] = $conflict; } } } } } /** * Determines if there is a conflict between two particular fields, including * comparing their sub-fields. * * @param array{Type|null, FieldNode, FieldDefinition|null} $field1 * @param array{Type|null, FieldNode, FieldDefinition|null} $field2 * * @throws \Exception * * @phpstan-return Conflict|null */ protected function findConflict( QueryValidationContext $context, bool $parentFieldsAreMutuallyExclusive, string $responseName, array $field1, array $field2 ): ?array { [$parentType1, $ast1, $def1] = $field1; [$parentType2, $ast2, $def2] = $field2; // If it is known that two fields could not possibly apply at the same // time, due to the parent types, then it is safe to permit them to diverge // in aliased field or arguments used as they will not present any ambiguity // by differing. // It is known that two parent types could never overlap if they are // different Object types. Interface or Union types might overlap - if not // in the current state of the schema, then perhaps in some future version, // thus may not safely diverge. $areMutuallyExclusive = $parentFieldsAreMutuallyExclusive || ( $parentType1 !== $parentType2 && $parentType1 instanceof ObjectType && $parentType2 instanceof ObjectType ); // The return type for each field. $type1 = $def1 === null ? null : $def1->getType(); $type2 = $def2 === null ? null : $def2->getType(); if (! $areMutuallyExclusive) { // Two aliases must refer to the same field. $name1 = $ast1->name->value; $name2 = $ast2->name->value; if ($name1 !== $name2) { return [ [$responseName, "{$name1} and {$name2} are different fields"], [$ast1], [$ast2], ]; } if (! $this->sameArguments($ast1->arguments, $ast2->arguments)) { return [ [$responseName, 'they have differing arguments'], [$ast1], [$ast2], ]; } } if ( $type1 !== null && $type2 !== null && $this->doTypesConflict($type1, $type2) ) { return [ [$responseName, "they return conflicting types {$type1} and {$type2}"], [$ast1], [$ast2], ]; } // Collect and compare sub-fields. Use the same "visited fragment names" list // for both collections so fields in a fragment reference are never // compared to themselves. $selectionSet1 = $ast1->selectionSet; $selectionSet2 = $ast2->selectionSet; if ($selectionSet1 !== null && $selectionSet2 !== null) { $conflicts = $this->findConflictsBetweenSubSelectionSets( $context, $areMutuallyExclusive, Type::getNamedType($type1), $selectionSet1, Type::getNamedType($type2), $selectionSet2 ); return $this->subfieldConflicts( $conflicts, $responseName, $ast1, $ast2 ); } return null; } /** * @param NodeList<ArgumentNode> $arguments1 keep * @param NodeList<ArgumentNode> $arguments2 keep * * @throws \JsonException */ protected function sameArguments(NodeList $arguments1, NodeList $arguments2): bool { if (count($arguments1) !== count($arguments2)) { return false; } foreach ($arguments1 as $argument1) { $argument2 = null; foreach ($arguments2 as $argument) { if ($argument->name->value === $argument1->name->value) { $argument2 = $argument; break; } } if ($argument2 === null) { return false; } if (! $this->sameValue($argument1->value, $argument2->value)) { return false; } } return true; } /** @throws \JsonException */ protected function sameValue(Node $value1, Node $value2): bool { return Printer::doPrint($value1) === Printer::doPrint($value2); } /** * Two types conflict if both types could not apply to a value simultaneously. * * Composite types are ignored as their individual field types will be compared * later recursively. However, List and Non-Null types must match. */ protected function doTypesConflict(Type $type1, Type $type2): bool { if ($type1 instanceof ListOfType) { return $type2 instanceof ListOfType ? $this->doTypesConflict($type1->getWrappedType(), $type2->getWrappedType()) : true; } if ($type2 instanceof ListOfType) { return true; } if ($type1 instanceof NonNull) { return $type2 instanceof NonNull ? $this->doTypesConflict($type1->getWrappedType(), $type2->getWrappedType()) : true; } if ($type2 instanceof NonNull) { return true; } if (Type::isLeafType($type1) || Type::isLeafType($type2)) { return $type1 !== $type2; } return false; } /** * Find all conflicts found between two selection sets, including those found * via spreading in fragments. Called when determining if conflicts exist * between the sub-fields of two overlapping fields. * * @throws \Exception * * @return array<int, Conflict> */ protected function findConflictsBetweenSubSelectionSets( QueryValidationContext $context, bool $areMutuallyExclusive, ?Type $parentType1, SelectionSetNode $selectionSet1, ?Type $parentType2, SelectionSetNode $selectionSet2 ): array { $conflicts = []; [$fieldMap1, $fragmentNames1] = $this->getFieldsAndFragmentNames( $context, $parentType1, $selectionSet1 ); [$fieldMap2, $fragmentNames2] = $this->getFieldsAndFragmentNames( $context, $parentType2, $selectionSet2 ); // (H) First, collect all conflicts between these two collections of field. $this->collectConflictsBetween( $context, $conflicts, $areMutuallyExclusive, $fieldMap1, $fieldMap2 ); // (I) Then collect conflicts between the first collection of fields and // those referenced by each fragment name associated with the second. $fragmentNames2Length = count($fragmentNames2); if ($fragmentNames2Length !== 0) { $comparedFragments = []; for ($j = 0; $j < $fragmentNames2Length; ++$j) { $this->collectConflictsBetweenFieldsAndFragment( $context, $conflicts, $comparedFragments, $areMutuallyExclusive, $fieldMap1, $fragmentNames2[$j] ); } } // (I) Then collect conflicts between the second collection of fields and // those referenced by each fragment name associated with the first. $fragmentNames1Length = count($fragmentNames1); if ($fragmentNames1Length !== 0) { $comparedFragments = []; for ($i = 0; $i < $fragmentNames1Length; ++$i) { $this->collectConflictsBetweenFieldsAndFragment( $context, $conflicts, $comparedFragments, $areMutuallyExclusive, $fieldMap2, $fragmentNames1[$i] ); } } // (J) Also collect conflicts between any fragment names by the first and // fragment names by the second. This compares each item in the first set of // names to each item in the second set of names. for ($i = 0; $i < $fragmentNames1Length; ++$i) { for ($j = 0; $j < $fragmentNames2Length; ++$j) { $this->collectConflictsBetweenFragments( $context, $conflicts, $areMutuallyExclusive, $fragmentNames1[$i], $fragmentNames2[$j] ); } } return $conflicts; } /** * Collect all Conflicts between two collections of fields. This is similar to, * but different from the `collectConflictsWithin` function above. This check * assumes that `collectConflictsWithin` has already been called on each * provided collection of fields. This is true because this validator traverses * each individual selection set. * * @phpstan-param array<int, Conflict> $conflicts * @phpstan-param FieldMap $fieldMap1 * @phpstan-param FieldMap $fieldMap2 * * @throws \Exception */ protected function collectConflictsBetween( QueryValidationContext $context, array &$conflicts, bool $parentFieldsAreMutuallyExclusive, array $fieldMap1, array $fieldMap2 ): void { // A field map is a keyed collection, where each key represents a response // name and the value at that key is a list of all fields which provide that // response name. For any response name which appears in both provided field // maps, each field from the first field map must be compared to every field // in the second field map to find potential conflicts. foreach ($fieldMap1 as $responseName => $fields1) { if (! isset($fieldMap2[$responseName])) { continue; } $fields2 = $fieldMap2[$responseName]; $fields1Length = count($fields1); $fields2Length = count($fields2); for ($i = 0; $i < $fields1Length; ++$i) { for ($j = 0; $j < $fields2Length; ++$j) { $conflict = $this->findConflict( $context, $parentFieldsAreMutuallyExclusive, $responseName, $fields1[$i], $fields2[$j] ); if ($conflict !== null) { $conflicts[] = $conflict; } } } } } /** * Collect all conflicts found between a set of fields and a fragment reference * including via spreading in any nested fragments. * * @param array<string, true> $comparedFragments * * @phpstan-param array<int, Conflict> $conflicts * @phpstan-param FieldMap $fieldMap * * @throws \Exception */ protected function collectConflictsBetweenFieldsAndFragment( QueryValidationContext $context, array &$conflicts, array &$comparedFragments, bool $areMutuallyExclusive, array $fieldMap, string $fragmentName ): void { if (isset($comparedFragments[$fragmentName])) { return; } $comparedFragments[$fragmentName] = true; $fragment = $context->getFragment($fragmentName); if ($fragment === null) { return; } [$fieldMap2, $fragmentNames2] = $this->getReferencedFieldsAndFragmentNames( $context, $fragment ); if ($fieldMap === $fieldMap2) { return; } // (D) First collect any conflicts between the provided collection of fields // and the collection of fields represented by the given fragment. $this->collectConflictsBetween( $context, $conflicts, $areMutuallyExclusive, $fieldMap, $fieldMap2 ); // (E) Then collect any conflicts between the provided collection of fields // and any fragment names found in the given fragment. $fragmentNames2Length = count($fragmentNames2); for ($i = 0; $i < $fragmentNames2Length; ++$i) { $this->collectConflictsBetweenFieldsAndFragment( $context, $conflicts, $comparedFragments, $areMutuallyExclusive, $fieldMap, $fragmentNames2[$i] ); } } /** * Given a reference to a fragment, return the represented collection of fields * as well as a list of nested fragment names referenced via fragment spreads. * * @throws \Exception * * @phpstan-return array{FieldMap, array<int, string>} */ protected function getReferencedFieldsAndFragmentNames( QueryValidationContext $context, FragmentDefinitionNode $fragment ): array { // Short-circuit building a type from the AST if possible. if (isset($this->cachedFieldsAndFragmentNames[$fragment->selectionSet])) { return $this->cachedFieldsAndFragmentNames[$fragment->selectionSet]; } $fragmentType = AST::typeFromAST([$context->getSchema(), 'getType'], $fragment->typeCondition); return $this->getFieldsAndFragmentNames( $context, $fragmentType, $fragment->selectionSet ); } /** * Collect all conflicts found between two fragments, including via spreading in * any nested fragments. * * @phpstan-param array<int, Conflict> $conflicts * * @throws \Exception */ protected function collectConflictsBetweenFragments( QueryValidationContext $context, array &$conflicts, bool $areMutuallyExclusive, string $fragmentName1, string $fragmentName2 ): void { // No need to compare a fragment to itself. if ($fragmentName1 === $fragmentName2) { return; } // Memoize so two fragments are not compared for conflicts more than once. if ( $this->comparedFragmentPairs->has( $fragmentName1, $fragmentName2, $areMutuallyExclusive ) ) { return; } $this->comparedFragmentPairs->add( $fragmentName1, $fragmentName2, $areMutuallyExclusive ); $fragment1 = $context->getFragment($fragmentName1); $fragment2 = $context->getFragment($fragmentName2); if ($fragment1 === null || $fragment2 === null) { return; } [$fieldMap1, $fragmentNames1] = $this->getReferencedFieldsAndFragmentNames( $context, $fragment1 ); [$fieldMap2, $fragmentNames2] = $this->getReferencedFieldsAndFragmentNames( $context, $fragment2 ); // (F) First, collect all conflicts between these two collections of fields // (not including any nested fragments). $this->collectConflictsBetween( $context, $conflicts, $areMutuallyExclusive, $fieldMap1, $fieldMap2 ); // (G) Then collect conflicts between the first fragment and any nested // fragments spread in the second fragment. $fragmentNames2Length = count($fragmentNames2); for ($j = 0; $j < $fragmentNames2Length; ++$j) { $this->collectConflictsBetweenFragments( $context, $conflicts, $areMutuallyExclusive, $fragmentName1, $fragmentNames2[$j] ); } // (G) Then collect conflicts between the second fragment and any nested // fragments spread in the first fragment. $fragmentNames1Length = count($fragmentNames1); for ($i = 0; $i < $fragmentNames1Length; ++$i) { $this->collectConflictsBetweenFragments( $context, $conflicts, $areMutuallyExclusive, $fragmentNames1[$i], $fragmentName2 ); } } /** * Merge Conflicts between two sub-fields into a single Conflict. * * @phpstan-param array<int, Conflict> $conflicts * * @phpstan-return Conflict|null */ protected function subfieldConflicts( array $conflicts, string $responseName, FieldNode $ast1, FieldNode $ast2 ): ?array { if ($conflicts === []) { return null; } $reasons = []; foreach ($conflicts as $conflict) { $reasons[] = $conflict[0]; } $fields1 = [$ast1]; foreach ($conflicts as $conflict) { foreach ($conflict[1] as $field) { $fields1[] = $field; } } $fields2 = [$ast2]; foreach ($conflicts as $conflict) { foreach ($conflict[2] as $field) { $fields2[] = $field; } } return [ [ $responseName, $reasons, ], $fields1, $fields2, ]; } /** * @param string|array $reasonOrReasons * * @phpstan-param ReasonOrReasons $reasonOrReasons */ public static function fieldsConflictMessage(string $responseName, $reasonOrReasons): string { $reasonMessage = static::reasonMessage($reasonOrReasons); return "Fields \"{$responseName}\" conflict because {$reasonMessage}. Use different aliases on the fields to fetch both if this was intentional."; } /** * @param string|array $reasonOrReasons * * @phpstan-param ReasonOrReasons $reasonOrReasons */ public static function reasonMessage($reasonOrReasons): string { if (is_array($reasonOrReasons)) { $reasons = array_map( static function (array $reason): string { [$responseName, $subReason] = $reason; $reasonMessage = static::reasonMessage($subReason); return "subfields \"{$responseName}\" conflict because {$reasonMessage}"; }, $reasonOrReasons ); return implode(' and ', $reasons); } return $reasonOrReasons; } } graphql/lib/Validator/Rules/KnownTypeNames.php000064400000006753151666572070015454 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NamedTypeNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\TypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeSystemDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeSystemExtensionNode; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Validator\QueryValidationContext; use YOOtheme\GraphQL\Validator\SDLValidationContext; use YOOtheme\GraphQL\Validator\ValidationContext; /** * Known type names. * * A GraphQL document is only valid if referenced types (specifically * variable definitions and fragment conditions) are defined by the type schema. * * @phpstan-import-type VisitorArray from \GraphQL\Language\Visitor */ class KnownTypeNames extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return $this->getASTVisitor($context); } public function getSDLVisitor(SDLValidationContext $context): array { return $this->getASTVisitor($context); } /** @phpstan-return VisitorArray */ public function getASTVisitor(ValidationContext $context): array { /** @var array<int, string> $definedTypes */ $definedTypes = []; foreach ($context->getDocument()->definitions as $def) { if ($def instanceof TypeDefinitionNode) { $definedTypes[] = $def->getName()->value; } } return [ NodeKind::NAMED_TYPE => static function (NamedTypeNode $node, $_1, $parent, $_2, $ancestors) use ($context, $definedTypes): void { $typeName = $node->name->value; $schema = $context->getSchema(); if (in_array($typeName, $definedTypes, true)) { return; } if ($schema !== null && $schema->hasType($typeName)) { return; } $definitionNode = $ancestors[2] ?? $parent; $isSDL = $definitionNode instanceof TypeSystemDefinitionNode || $definitionNode instanceof TypeSystemExtensionNode; if ($isSDL && in_array($typeName, Type::BUILT_IN_TYPE_NAMES, true)) { return; } $existingTypesMap = $schema !== null ? $schema->getTypeMap() : []; $typeNames = [ ...array_keys($existingTypesMap), ...$definedTypes, ]; $context->reportError(new Error( static::unknownTypeMessage( $typeName, Utils::suggestionList( $typeName, $isSDL ? [...Type::BUILT_IN_TYPE_NAMES, ...$typeNames] : $typeNames ) ), [$node] )); }, ]; } /** @param array<string> $suggestedTypes */ public static function unknownTypeMessage(string $type, array $suggestedTypes): string { $message = "Unknown type \"{$type}\"."; if ($suggestedTypes !== []) { $suggestionList = Utils::quotedOrList($suggestedTypes); $message .= " Did you mean {$suggestionList}?"; } return $message; } } graphql/lib/Validator/Rules/NoUnusedFragments.php000064400000004375151666572070016137 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; class NoUnusedFragments extends ValidationRule { /** @var array<int, OperationDefinitionNode> */ protected array $operationDefs; /** @var array<int, FragmentDefinitionNode> */ protected array $fragmentDefs; public function getVisitor(QueryValidationContext $context): array { $this->operationDefs = []; $this->fragmentDefs = []; return [ NodeKind::OPERATION_DEFINITION => function ($node): VisitorOperation { $this->operationDefs[] = $node; return Visitor::skipNode(); }, NodeKind::FRAGMENT_DEFINITION => function (FragmentDefinitionNode $def): VisitorOperation { $this->fragmentDefs[] = $def; return Visitor::skipNode(); }, NodeKind::DOCUMENT => [ 'leave' => function () use ($context): void { $fragmentNameUsed = []; foreach ($this->operationDefs as $operation) { foreach ($context->getRecursivelyReferencedFragments($operation) as $fragment) { $fragmentNameUsed[$fragment->name->value] = true; } } foreach ($this->fragmentDefs as $fragmentDef) { $fragName = $fragmentDef->name->value; if (! isset($fragmentNameUsed[$fragName])) { $context->reportError(new Error( static::unusedFragMessage($fragName), [$fragmentDef] )); } } }, ], ]; } public static function unusedFragMessage(string $fragName): string { return "Fragment \"{$fragName}\" is never used."; } } graphql/lib/Validator/Rules/KnownFragmentNames.php000064400000002054151666572070016264 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Validator\QueryValidationContext; class KnownFragmentNames extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::FRAGMENT_SPREAD => static function (FragmentSpreadNode $node) use ($context): void { $fragmentName = $node->name->value; $fragment = $context->getFragment($fragmentName); if ($fragment !== null) { return; } $context->reportError(new Error( static::unknownFragmentMessage($fragmentName), [$node->name] )); }, ]; } public static function unknownFragmentMessage(string $fragName): string { return "Unknown fragment \"{$fragName}\"."; } } graphql/lib/Validator/Rules/UniqueArgumentDefinitionNames.php000064400000005636151666572070020477 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\SDLValidationContext; /** * Unique argument definition names. * * A GraphQL Object or Interface type is only valid if all its fields have uniquely named arguments. * A GraphQL Directive is only valid if all its arguments are uniquely named. */ class UniqueArgumentDefinitionNames extends ValidationRule { public function getSDLVisitor(SDLValidationContext $context): array { $checkArgUniquenessPerField = static function ($node) use ($context): VisitorOperation { assert( $node instanceof InterfaceTypeDefinitionNode || $node instanceof InterfaceTypeExtensionNode || $node instanceof ObjectTypeDefinitionNode || $node instanceof ObjectTypeExtensionNode ); foreach ($node->fields as $fieldDef) { self::checkArgUniqueness("{$node->name->value}.{$fieldDef->name->value}", $fieldDef->arguments, $context); } return Visitor::skipNode(); }; return [ NodeKind::DIRECTIVE_DEFINITION => static fn (DirectiveDefinitionNode $node): VisitorOperation => self::checkArgUniqueness("@{$node->name->value}", $node->arguments, $context), NodeKind::INTERFACE_TYPE_DEFINITION => $checkArgUniquenessPerField, NodeKind::INTERFACE_TYPE_EXTENSION => $checkArgUniquenessPerField, NodeKind::OBJECT_TYPE_DEFINITION => $checkArgUniquenessPerField, NodeKind::OBJECT_TYPE_EXTENSION => $checkArgUniquenessPerField, ]; } /** @param NodeList<InputValueDefinitionNode> $arguments */ private static function checkArgUniqueness(string $parentName, NodeList $arguments, SDLValidationContext $context): VisitorOperation { $seenArgs = []; foreach ($arguments as $argument) { $seenArgs[$argument->name->value][] = $argument; } foreach ($seenArgs as $argName => $argNodes) { if (count($argNodes) > 1) { $context->reportError( new Error( "Argument \"{$parentName}({$argName}:)\" can only be defined once.", $argNodes, ), ); } } return Visitor::skipNode(); } } graphql/lib/Validator/Rules/PossibleFragmentSpreads.php000064400000014575151666572070017321 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Type\Definition\AbstractType; use YOOtheme\GraphQL\Type\Definition\CompositeType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Validator\QueryValidationContext; class PossibleFragmentSpreads extends ValidationRule { public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::INLINE_FRAGMENT => function (InlineFragmentNode $node) use ($context): void { $fragType = $context->getType(); $parentType = $context->getParentType(); if ( ! $fragType instanceof CompositeType || ! $parentType instanceof CompositeType || $this->doTypesOverlap($context->getSchema(), $fragType, $parentType) ) { return; } $context->reportError(new Error( static::typeIncompatibleAnonSpreadMessage($parentType->toString(), $fragType->toString()), [$node] )); }, NodeKind::FRAGMENT_SPREAD => function (FragmentSpreadNode $node) use ($context): void { $fragName = $node->name->value; $fragType = $this->getFragmentType($context, $fragName); $parentType = $context->getParentType(); if ( $fragType === null || $parentType === null || $this->doTypesOverlap($context->getSchema(), $fragType, $parentType) ) { return; } $context->reportError(new Error( static::typeIncompatibleSpreadMessage($fragName, $parentType->toString(), $fragType->toString()), [$node] )); }, ]; } /** * @param CompositeType&Type $fragType * @param CompositeType&Type $parentType * * @throws InvariantViolation */ protected function doTypesOverlap(Schema $schema, CompositeType $fragType, CompositeType $parentType): bool { // Checking in the order of the most frequently used scenarios: // Parent type === fragment type if ($parentType === $fragType) { return true; } // Parent type is interface or union, fragment type is object type if ($parentType instanceof AbstractType && $fragType instanceof ObjectType) { return $schema->isSubType($parentType, $fragType); } // Parent type is object type, fragment type is interface (or rather rare - union) if ($parentType instanceof ObjectType && $fragType instanceof AbstractType) { return $schema->isSubType($fragType, $parentType); } // Both are object types: if ($parentType instanceof ObjectType && $fragType instanceof ObjectType) { return $parentType === $fragType; } // Both are interfaces // This case may be assumed valid only when implementations of two interfaces intersect // But we don't have information about all implementations at runtime // (getting this information via $schema->getPossibleTypes() requires scanning through whole schema // which is very costly to do at each request due to PHP "shared nothing" architecture) // // So in this case we just make it pass - invalid fragment spreads will be simply ignored during execution // See also https://github.com/webonyx/graphql-php/issues/69#issuecomment-283954602 if ($parentType instanceof InterfaceType && $fragType instanceof InterfaceType) { return true; // Note that there is one case when we do have information about all implementations: // When schema descriptor is defined ($schema->hasDescriptor()) // BUT we must avoid situation when some query that worked in development had suddenly stopped // working in production. So staying consistent and always validate. } // Interface within union if ($parentType instanceof UnionType && $fragType instanceof InterfaceType) { foreach ($parentType->getTypes() as $type) { if ($type->implementsInterface($fragType)) { return true; } } } if ($parentType instanceof InterfaceType && $fragType instanceof UnionType) { foreach ($fragType->getTypes() as $type) { if ($type->implementsInterface($parentType)) { return true; } } } if ($parentType instanceof UnionType && $fragType instanceof UnionType) { foreach ($fragType->getTypes() as $type) { if ($parentType->isPossibleType($type)) { return true; } } } return false; } public static function typeIncompatibleAnonSpreadMessage(string $parentType, string $fragType): string { return "Fragment cannot be spread here as objects of type \"{$parentType}\" can never be of type \"{$fragType}\"."; } /** * @throws \Exception * * @return (CompositeType&Type)|null */ protected function getFragmentType(QueryValidationContext $context, string $name): ?Type { $frag = $context->getFragment($name); if ($frag === null) { return null; } $type = AST::typeFromAST([$context->getSchema(), 'getType'], $frag->typeCondition); return $type instanceof CompositeType ? $type : null; } public static function typeIncompatibleSpreadMessage(string $fragName, string $parentType, string $fragType): string { return "Fragment \"{$fragName}\" cannot be spread here as objects of type \"{$parentType}\" can never be of type \"{$fragType}\"."; } } graphql/lib/Validator/Rules/UniqueDirectiveNames.php000064400000003762151666572070016620 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\SDLValidationContext; /** * Unique directive names. * * A GraphQL document is only valid if all defined directives have unique names. */ class UniqueDirectiveNames extends ValidationRule { public function getSDLVisitor(SDLValidationContext $context): array { $schema = $context->getSchema(); /** @var array<string, NameNode> $knownDirectiveNames */ $knownDirectiveNames = []; return [ NodeKind::DIRECTIVE_DEFINITION => static function ($node) use ($context, $schema, &$knownDirectiveNames): ?VisitorOperation { $directiveName = $node->name->value; if ($schema !== null && $schema->getDirective($directiveName) !== null) { $context->reportError( new Error( 'Directive "@' . $directiveName . '" already exists in the schema. It cannot be redefined.', $node->name, ), ); return null; } if (isset($knownDirectiveNames[$directiveName])) { $context->reportError( new Error( 'There can be only one directive named "@' . $directiveName . '".', [ $knownDirectiveNames[$directiveName], $node->name, ] ), ); } else { $knownDirectiveNames[$directiveName] = $node->name; } return Visitor::skipNode(); }, ]; } } graphql/lib/Validator/Rules/VariablesInAllowedPosition.php000064400000011350151666572070017753 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NullValueNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\ValueNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Utils\TypeComparators; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Validator\QueryValidationContext; class VariablesInAllowedPosition extends ValidationRule { /** * A map from variable names to their definition nodes. * * @var array<string, VariableDefinitionNode> */ protected array $varDefMap; public function getVisitor(QueryValidationContext $context): array { return [ NodeKind::OPERATION_DEFINITION => [ 'enter' => function (): void { $this->varDefMap = []; }, 'leave' => function (OperationDefinitionNode $operation) use ($context): void { $usages = $context->getRecursiveVariableUsages($operation); foreach ($usages as $usage) { $node = $usage['node']; $type = $usage['type']; $defaultValue = $usage['defaultValue']; $varName = $node->name->value; $varDef = $this->varDefMap[$varName] ?? null; if ($varDef === null || $type === null) { continue; } // A var type is allowed if it is the same or more strict (e.g. is // a subtype of) than the expected type. It can be more strict if // the variable type is non-null when the expected type is nullable. // If both are list types, the variable item type can be more strict // than the expected item type (contravariant). $schema = $context->getSchema(); $varType = AST::typeFromAST([$schema, 'getType'], $varDef->type); if ($varType !== null && ! $this->allowedVariableUsage($schema, $varType, $varDef->defaultValue, $type, $defaultValue)) { $context->reportError(new Error( static::badVarPosMessage($varName, $varType->toString(), $type->toString()), [$varDef, $node] )); } } }, ], NodeKind::VARIABLE_DEFINITION => function (VariableDefinitionNode $varDefNode): void { $this->varDefMap[$varDefNode->variable->name->value] = $varDefNode; }, ]; } /** * A var type is allowed if it is the same or more strict than the expected * type. It can be more strict if the variable type is non-null when the * expected type is nullable. If both are list types, the variable item type can * be more strict than the expected item type. */ public static function badVarPosMessage(string $varName, string $varType, string $expectedType): string { return "Variable \"\${$varName}\" of type \"{$varType}\" used in position expecting type \"{$expectedType}\"."; } /** * Returns true if the variable is allowed in the location it was found, * which includes considering if default values exist for either the variable * or the location at which it is located. * * @param ValueNode|null $varDefaultValue * @param mixed $locationDefaultValue * * @throws InvariantViolation */ protected function allowedVariableUsage(Schema $schema, Type $varType, $varDefaultValue, Type $locationType, $locationDefaultValue): bool { if ($locationType instanceof NonNull && ! $varType instanceof NonNull) { $hasNonNullVariableDefaultValue = $varDefaultValue !== null && ! $varDefaultValue instanceof NullValueNode; $hasLocationDefaultValue = Utils::undefined() !== $locationDefaultValue; if (! $hasNonNullVariableDefaultValue && ! $hasLocationDefaultValue) { return false; } $nullableLocationType = $locationType->getWrappedType(); return TypeComparators::isTypeSubTypeOf($schema, $varType, $nullableLocationType); } return TypeComparators::isTypeSubTypeOf($schema, $varType, $locationType); } } graphql/lib/Validator/Rules/UniqueFragmentNames.php000064400000003115151666572070016435 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator\Rules; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\Visitor; use YOOtheme\GraphQL\Language\VisitorOperation; use YOOtheme\GraphQL\Validator\QueryValidationContext; class UniqueFragmentNames extends ValidationRule { /** @var array<string, NameNode> */ protected array $knownFragmentNames; public function getVisitor(QueryValidationContext $context): array { $this->knownFragmentNames = []; return [ NodeKind::OPERATION_DEFINITION => static fn (): VisitorOperation => Visitor::skipNode(), NodeKind::FRAGMENT_DEFINITION => function (FragmentDefinitionNode $node) use ($context): VisitorOperation { $fragmentName = $node->name->value; if (! isset($this->knownFragmentNames[$fragmentName])) { $this->knownFragmentNames[$fragmentName] = $node->name; } else { $context->reportError(new Error( static::duplicateFragmentNameMessage($fragmentName), [$this->knownFragmentNames[$fragmentName], $node->name] )); } return Visitor::skipNode(); }, ]; } public static function duplicateFragmentNameMessage(string $fragName): string { return "There can be only one fragment named \"{$fragName}\"."; } } graphql/lib/Validator/SDLValidationContext.php000064400000001546151666572070015435 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Validator; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Type\Schema; class SDLValidationContext implements ValidationContext { protected DocumentNode $ast; protected ?Schema $schema; /** @var list<Error> */ protected array $errors = []; public function __construct(DocumentNode $ast, ?Schema $schema) { $this->ast = $ast; $this->schema = $schema; } public function reportError(Error $error): void { $this->errors[] = $error; } public function getErrors(): array { return $this->errors; } public function getDocument(): DocumentNode { return $this->ast; } public function getSchema(): ?Schema { return $this->schema; } } graphql/lib/Executor/ScopedContext.php000064400000000644151666572070014064 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor; /** * When the object passed as `$contextValue` to GraphQL execution implements this, * its `clone()` method will be called before passing the context down to a field. * This allows passing information to child fields in the query tree without affecting sibling or parent fields. */ interface ScopedContext { public function clone(): self; } graphql/lib/Executor/ExecutorImplementation.php000064400000000451151666572070016002 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor; use YOOtheme\GraphQL\Executor\Promise\Promise; interface ExecutorImplementation { /** Returns promise of {@link ExecutionResult}. Promise should always resolve, never reject. */ public function doExecute(): Promise; } graphql/lib/Executor/ReferenceExecutor.php000064400000144323151666572070014722 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Error\Warning; use YOOtheme\GraphQL\Executor\Promise\Promise; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\SelectionNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Type\Definition\AbstractType; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\LeafType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\OutputType; use YOOtheme\GraphQL\Type\Definition\ResolveInfo; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Type\SchemaValidationContext; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-import-type FieldResolver from Executor * @phpstan-import-type Path from ResolveInfo * @phpstan-import-type ArgsMapper from Executor * * @phpstan-type Fields \ArrayObject<string, \ArrayObject<int, FieldNode>> */ class ReferenceExecutor implements ExecutorImplementation { protected static \stdClass $UNDEFINED; protected ExecutionContext $exeContext; /** * @var \SplObjectStorage< * ObjectType, * \SplObjectStorage< * \ArrayObject<int, FieldNode>, * \ArrayObject< * string, * \ArrayObject<int, FieldNode> * > * > * > */ protected \SplObjectStorage $subFieldCache; /** * @var \SplObjectStorage< * FieldDefinition, * \SplObjectStorage<FieldNode, mixed> * > */ protected \SplObjectStorage $fieldArgsCache; protected FieldDefinition $schemaMetaFieldDef; protected FieldDefinition $typeMetaFieldDef; protected FieldDefinition $typeNameMetaFieldDef; protected function __construct(ExecutionContext $context) { if (! isset(static::$UNDEFINED)) { static::$UNDEFINED = Utils::undefined(); } $this->exeContext = $context; $this->subFieldCache = new \SplObjectStorage(); $this->fieldArgsCache = new \SplObjectStorage(); } /** * @param mixed $rootValue * @param mixed $contextValue * @param array<string, mixed> $variableValues * * @phpstan-param FieldResolver $fieldResolver * @phpstan-param ArgsMapper $argsMapper * * @throws \Exception */ public static function create( PromiseAdapter $promiseAdapter, Schema $schema, DocumentNode $documentNode, $rootValue, $contextValue, array $variableValues, ?string $operationName, callable $fieldResolver, ?callable $argsMapper = null // TODO make non-optional in next major release ): ExecutorImplementation { $exeContext = static::buildExecutionContext( $schema, $documentNode, $rootValue, $contextValue, $variableValues, $operationName, $fieldResolver, $argsMapper ?? Executor::getDefaultArgsMapper(), $promiseAdapter, ); if (is_array($exeContext)) { return new class($promiseAdapter->createFulfilled(new ExecutionResult(null, $exeContext))) implements ExecutorImplementation { private Promise $result; public function __construct(Promise $result) { $this->result = $result; } public function doExecute(): Promise { return $this->result; } }; } return new static($exeContext); } /** * Constructs an ExecutionContext object from the arguments passed to execute, * which we will pass throughout the other execution methods. * * @param mixed $rootValue * @param mixed $contextValue * @param array<string, mixed> $rawVariableValues * * @phpstan-param FieldResolver $fieldResolver * * @throws \Exception * * @return ExecutionContext|list<Error> */ protected static function buildExecutionContext( Schema $schema, DocumentNode $documentNode, $rootValue, $contextValue, array $rawVariableValues, ?string $operationName, callable $fieldResolver, callable $argsMapper, PromiseAdapter $promiseAdapter ) { /** @var list<Error> $errors */ $errors = []; /** @var array<string, FragmentDefinitionNode> $fragments */ $fragments = []; /** @var OperationDefinitionNode|null $operation */ $operation = null; /** @var bool $hasMultipleAssumedOperations */ $hasMultipleAssumedOperations = false; foreach ($documentNode->definitions as $definition) { switch (true) { case $definition instanceof OperationDefinitionNode: if ($operationName === null && $operation !== null) { $hasMultipleAssumedOperations = true; } if ( $operationName === null || (isset($definition->name) && $definition->name->value === $operationName) ) { $operation = $definition; } break; case $definition instanceof FragmentDefinitionNode: $fragments[$definition->name->value] = $definition; break; } } if ($operation === null) { $message = $operationName === null ? 'Must provide an operation.' : "Unknown operation named \"{$operationName}\"."; $errors[] = new Error($message); } elseif ($hasMultipleAssumedOperations) { $errors[] = new Error( 'Must provide operation name if query contains multiple operations.' ); } $variableValues = null; if ($operation !== null) { [$coercionErrors, $coercedVariableValues] = Values::getVariableValues( $schema, $operation->variableDefinitions, $rawVariableValues ); if ($coercionErrors === null) { $variableValues = $coercedVariableValues; } else { $errors = array_merge($errors, $coercionErrors); } } if ($errors !== []) { return $errors; } assert($operation instanceof OperationDefinitionNode, 'Has operation if no errors.'); assert(is_array($variableValues), 'Has variables if no errors.'); return new ExecutionContext( $schema, $fragments, $rootValue, $contextValue, $operation, $variableValues, $errors, $fieldResolver, $argsMapper, $promiseAdapter ); } /** * @throws \Exception * @throws Error */ public function doExecute(): Promise { // Return a Promise that will eventually resolve to the data described by // the "Response" section of the GraphQL specification. // // If errors are encountered while executing a GraphQL field, only that // field and its descendants will be omitted, and sibling fields will still // be executed. An execution which encounters errors will still result in a // resolved Promise. $data = $this->executeOperation($this->exeContext->operation, $this->exeContext->rootValue); $result = $this->buildResponse($data); // Note: we deviate here from the reference implementation a bit by always returning promise // But for the "sync" case it is always fulfilled $promise = $this->getPromise($result); if ($promise !== null) { return $promise; } return $this->exeContext->promiseAdapter->createFulfilled($result); } /** * @param mixed $data * * @return ExecutionResult|Promise */ protected function buildResponse($data) { if ($data instanceof Promise) { return $data->then(fn ($resolved) => $this->buildResponse($resolved)); } $promiseAdapter = $this->exeContext->promiseAdapter; if ($promiseAdapter->isThenable($data)) { return $promiseAdapter->convertThenable($data) ->then(fn ($resolved) => $this->buildResponse($resolved)); } if ($data !== null) { $data = (array) $data; } return new ExecutionResult($data, $this->exeContext->errors); } /** * Implements the "Evaluating operations" section of the spec. * * @param mixed $rootValue * * @throws \Exception * * @return array<mixed>|Promise|\stdClass|null */ protected function executeOperation(OperationDefinitionNode $operation, $rootValue) { $type = $this->getOperationRootType($this->exeContext->schema, $operation); $fields = $this->collectFields($type, $operation->selectionSet, new \ArrayObject(), new \ArrayObject()); $path = []; $unaliasedPath = []; // Errors from sub-fields of a NonNull type may propagate to the top level, // at which point we still log the error and null the parent field, which // in this case is the entire response. // // Similar to completeValueCatchingError. try { $result = $operation->operation === 'mutation' ? $this->executeFieldsSerially($type, $rootValue, $path, $unaliasedPath, $fields, $this->exeContext->contextValue) : $this->executeFields($type, $rootValue, $path, $unaliasedPath, $fields, $this->exeContext->contextValue); $promise = $this->getPromise($result); if ($promise !== null) { return $promise->then(null, [$this, 'onError']); } return $result; } catch (Error $error) { $this->exeContext->addError($error); return null; } } /** @param mixed $error */ public function onError($error): ?Promise { if ($error instanceof Error) { $this->exeContext->addError($error); return $this->exeContext->promiseAdapter->createFulfilled(null); } return null; } /** * Extracts the root type of the operation from the schema. * * @throws \Exception * @throws Error */ protected function getOperationRootType(Schema $schema, OperationDefinitionNode $operation): ObjectType { switch ($operation->operation) { case 'query': $queryType = $schema->getQueryType(); if ($queryType === null) { throw new Error('Schema does not define the required query root type.', [$operation]); } return $queryType; case 'mutation': $mutationType = $schema->getMutationType(); if ($mutationType === null) { throw new Error('Schema is not configured for mutations.', [$operation]); } return $mutationType; case 'subscription': $subscriptionType = $schema->getSubscriptionType(); if ($subscriptionType === null) { throw new Error('Schema is not configured for subscriptions.', [$operation]); } return $subscriptionType; default: throw new Error('Can only execute queries, mutations and subscriptions.', [$operation]); } } /** * Given a selectionSet, adds all fields in that selection to * the passed in map of fields, and returns it at the end. * * CollectFields requires the "runtime type" of an object. For a field which * returns an Interface or Union type, the "runtime type" will be the actual * Object type returned by that field. * * @param \ArrayObject<string, true> $visitedFragmentNames * * @phpstan-param Fields $fields * * @throws \Exception * @throws Error * * @phpstan-return Fields */ protected function collectFields( ObjectType $runtimeType, SelectionSetNode $selectionSet, \ArrayObject $fields, \ArrayObject $visitedFragmentNames ): \ArrayObject { $exeContext = $this->exeContext; foreach ($selectionSet->selections as $selection) { switch (true) { case $selection instanceof FieldNode: if (! $this->shouldIncludeNode($selection)) { break; } $name = static::getFieldEntryKey($selection); $fields[$name] ??= new \ArrayObject(); $fields[$name][] = $selection; break; case $selection instanceof InlineFragmentNode: if ( ! $this->shouldIncludeNode($selection) || ! $this->doesFragmentConditionMatch($selection, $runtimeType) ) { break; } $this->collectFields( $runtimeType, $selection->selectionSet, $fields, $visitedFragmentNames ); break; case $selection instanceof FragmentSpreadNode: $fragName = $selection->name->value; if (isset($visitedFragmentNames[$fragName]) || ! $this->shouldIncludeNode($selection)) { break; } $visitedFragmentNames[$fragName] = true; if (! isset($exeContext->fragments[$fragName])) { break; } $fragment = $exeContext->fragments[$fragName]; if (! $this->doesFragmentConditionMatch($fragment, $runtimeType)) { break; } $this->collectFields( $runtimeType, $fragment->selectionSet, $fields, $visitedFragmentNames ); break; } } return $fields; } /** * Determines if a field should be included based on the @include and @skip * directives, where @skip has higher precedence than @include. * * @param FragmentSpreadNode|FieldNode|InlineFragmentNode $node * * @throws \Exception * @throws Error */ protected function shouldIncludeNode(SelectionNode $node): bool { $variableValues = $this->exeContext->variableValues; $skip = Values::getDirectiveValues( Directive::skipDirective(), $node, $variableValues ); if (isset($skip['if']) && $skip['if'] === true) { return false; } $include = Values::getDirectiveValues( Directive::includeDirective(), $node, $variableValues ); return ! isset($include['if']) || $include['if'] !== false; } /** Implements the logic to compute the key of a given fields entry. */ protected static function getFieldEntryKey(FieldNode $node): string { return $node->alias->value ?? $node->name->value; } /** * Determines if a fragment is applicable to the given type. * * @param FragmentDefinitionNode|InlineFragmentNode $fragment * * @throws \Exception */ protected function doesFragmentConditionMatch(Node $fragment, ObjectType $type): bool { $typeConditionNode = $fragment->typeCondition; if ($typeConditionNode === null) { return true; } $conditionalType = AST::typeFromAST([$this->exeContext->schema, 'getType'], $typeConditionNode); if ($conditionalType === $type) { return true; } if ($conditionalType instanceof AbstractType) { return $this->exeContext->schema->isSubType($conditionalType, $type); } return false; } /** * Implements the "Evaluating selection sets" section of the spec for "write" mode. * * @param mixed $rootValue * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param mixed $contextValue * * @phpstan-param Fields $fields * * @return array<mixed>|Promise|\stdClass */ protected function executeFieldsSerially(ObjectType $parentType, $rootValue, array $path, array $unaliasedPath, \ArrayObject $fields, $contextValue) { $result = $this->promiseReduce( array_keys($fields->getArrayCopy()), function ($results, $responseName) use ($contextValue, $path, $unaliasedPath, $parentType, $rootValue, $fields) { $fieldNodes = $fields[$responseName]; assert($fieldNodes instanceof \ArrayObject, 'The keys of $fields populate $responseName'); $result = $this->resolveField( $parentType, $rootValue, $fieldNodes, $responseName, $path, $unaliasedPath, $this->maybeScopeContext($contextValue) ); if ($result === static::$UNDEFINED) { return $results; } $promise = $this->getPromise($result); if ($promise !== null) { return $promise->then(static function ($resolvedResult) use ($responseName, $results): array { $results[$responseName] = $resolvedResult; return $results; }); } $results[$responseName] = $result; return $results; }, [] ); $promise = $this->getPromise($result); if ($promise !== null) { return $result->then( static fn ($resolvedResults) => static::fixResultsIfEmptyArray($resolvedResults) ); } return static::fixResultsIfEmptyArray($result); } /** * Resolves the field on the given root value. * * In particular, this figures out the value that the field returns * by calling its resolve function, then calls completeValue to complete promises, * serialize scalars, or execute the sub-selection-set for objects. * * @param mixed $rootValue * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param mixed $contextValue * @param \ArrayObject<int, FieldNode> $fieldNodes * * @phpstan-param Path $path * @phpstan-param Path $unaliasedPath * * @throws Error * @throws InvariantViolation * * @return array<mixed>|\Throwable|mixed|null */ protected function resolveField( ObjectType $parentType, $rootValue, \ArrayObject $fieldNodes, string $responseName, array $path, array $unaliasedPath, $contextValue ) { $exeContext = $this->exeContext; $fieldNode = $fieldNodes[0]; assert($fieldNode instanceof FieldNode, '$fieldNodes is non-empty'); $fieldName = $fieldNode->name->value; $fieldDef = $this->getFieldDef($exeContext->schema, $parentType, $fieldName); if ($fieldDef === null || ! $fieldDef->isVisible()) { return static::$UNDEFINED; } $path[] = $responseName; $unaliasedPath[] = $fieldName; $returnType = $fieldDef->getType(); // The resolve function's optional 3rd argument is a context value that // is provided to every resolve function within an execution. It is commonly // used to represent an authenticated user, or request-specific caches. // The resolve function's optional 4th argument is a collection of // information about the current execution state. $info = new ResolveInfo( $fieldDef, $fieldNodes, $parentType, $path, $exeContext->schema, $exeContext->fragments, $exeContext->rootValue, $exeContext->operation, $exeContext->variableValues, $unaliasedPath ); $resolveFn = $fieldDef->resolveFn ?? $parentType->resolveFieldFn ?? $this->exeContext->fieldResolver; $argsMapper = $fieldDef->argsMapper ?? $parentType->argsMapper ?? $this->exeContext->argsMapper; // Get the resolve function, regardless of if its result is normal // or abrupt (error). $result = $this->resolveFieldValueOrError( $fieldDef, $fieldNode, $resolveFn, $argsMapper, $rootValue, $info, $contextValue ); return $this->completeValueCatchingError( $returnType, $fieldNodes, $info, $path, $unaliasedPath, $result, $contextValue ); } /** * This method looks up the field on the given type definition. * * It has special casing for the two introspection fields, __schema * and __typename. __typename is special because it can always be * queried as a field, even in situations where no other fields * are allowed, like on a Union. __schema could get automatically * added to the query type, but that would require mutating type * definitions, which would cause issues. * * @throws InvariantViolation */ protected function getFieldDef(Schema $schema, ObjectType $parentType, string $fieldName): ?FieldDefinition { $this->schemaMetaFieldDef ??= Introspection::schemaMetaFieldDef(); $this->typeMetaFieldDef ??= Introspection::typeMetaFieldDef(); $this->typeNameMetaFieldDef ??= Introspection::typeNameMetaFieldDef(); $queryType = $schema->getQueryType(); if ($fieldName === $this->schemaMetaFieldDef->name && $queryType === $parentType ) { return $this->schemaMetaFieldDef; } if ($fieldName === $this->typeMetaFieldDef->name && $queryType === $parentType ) { return $this->typeMetaFieldDef; } if ($fieldName === $this->typeNameMetaFieldDef->name) { return $this->typeNameMetaFieldDef; } return $parentType->findField($fieldName); } /** * Isolates the "ReturnOrAbrupt" behavior to not de-opt the `resolveField` function. * Returns the result of resolveFn or the abrupt-return Error object. * * @param mixed $rootValue * @param mixed $contextValue * * @phpstan-param FieldResolver $resolveFn * * @return \Throwable|Promise|mixed */ protected function resolveFieldValueOrError( FieldDefinition $fieldDef, FieldNode $fieldNode, callable $resolveFn, callable $argsMapper, $rootValue, ResolveInfo $info, $contextValue ) { try { // Build a map of arguments from the field.arguments AST, using the // variables scope to fulfill any variable references. // @phpstan-ignore-next-line generics of SplObjectStorage are not inferred from empty instantiation $this->fieldArgsCache[$fieldDef] ??= new \SplObjectStorage(); $args = $this->fieldArgsCache[$fieldDef][$fieldNode] ??= $argsMapper(Values::getArgumentValues( $fieldDef, $fieldNode, $this->exeContext->variableValues ), $fieldDef, $fieldNode, $contextValue); return $resolveFn($rootValue, $args, $contextValue, $info); } catch (\Throwable $error) { return $error; } } /** * This is a small wrapper around completeValue which detects and logs errors * in the execution context. * * @param \ArrayObject<int, FieldNode> $fieldNodes * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param mixed $contextValue * @param mixed $result * * @phpstan-param Path $path * @phpstan-param Path $unaliasedPath * * @throws Error * * @return array<mixed>|Promise|\stdClass|null */ protected function completeValueCatchingError( Type $returnType, \ArrayObject $fieldNodes, ResolveInfo $info, array $path, array $unaliasedPath, $result, $contextValue ) { // Otherwise, error protection is applied, logging the error and resolving // a null value for this field if one is encountered. try { $promise = $this->getPromise($result); if ($promise !== null) { $completed = $promise->then(fn (&$resolved) => $this->completeValue($returnType, $fieldNodes, $info, $path, $unaliasedPath, $resolved, $contextValue)); } else { $completed = $this->completeValue($returnType, $fieldNodes, $info, $path, $unaliasedPath, $result, $contextValue); } $promise = $this->getPromise($completed); if ($promise !== null) { return $promise->then(null, function ($error) use ($fieldNodes, $path, $unaliasedPath, $returnType): void { $this->handleFieldError($error, $fieldNodes, $path, $unaliasedPath, $returnType); }); } return $completed; } catch (\Throwable $err) { $this->handleFieldError($err, $fieldNodes, $path, $unaliasedPath, $returnType); return null; } } /** * @param mixed $rawError * @param \ArrayObject<int, FieldNode> $fieldNodes * @param list<string|int> $path * @param list<string|int> $unaliasedPath * * @throws Error */ protected function handleFieldError($rawError, \ArrayObject $fieldNodes, array $path, array $unaliasedPath, Type $returnType): void { $error = Error::createLocatedError( $rawError, $fieldNodes, $path, $unaliasedPath ); // If the field type is non-nullable, then it is resolved without any // protection from errors, however it still properly locates the error. if ($returnType instanceof NonNull) { throw $error; } // Otherwise, error protection is applied, logging the error and resolving // a null value for this field if one is encountered. $this->exeContext->addError($error); } /** * Implements the instructions for completeValue as defined in the * "Field entries" section of the spec. * * If the field type is Non-Null, then this recursively completes the value * for the inner type. It throws a field error if that completion returns null, * as per the "Nullability" section of the spec. * * If the field type is a List, then this recursively completes the value * for the inner type on each item in the list. * * If the field type is a Scalar or Enum, ensures the completed value is a legal * value of the type by calling the `serialize` method of GraphQL type * definition. * * If the field is an abstract type, determine the runtime type of the value * and then complete based on that type. * * Otherwise, the field type expects a sub-selection set, and will complete the * value by evaluating all sub-selections. * * @param \ArrayObject<int, FieldNode> $fieldNodes * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param mixed $result * @param mixed $contextValue * * @throws \Throwable * @throws Error * * @return array<mixed>|mixed|Promise|null */ protected function completeValue( Type $returnType, \ArrayObject $fieldNodes, ResolveInfo $info, array $path, array $unaliasedPath, &$result, $contextValue ) { // If result is an Error, throw a located error. if ($result instanceof \Throwable) { throw $result; } // If field type is NonNull, complete for inner type, and throw field error // if result is null. if ($returnType instanceof NonNull) { $completed = $this->completeValue( $returnType->getWrappedType(), $fieldNodes, $info, $path, $unaliasedPath, $result, $contextValue ); if ($completed === null) { throw new InvariantViolation("Cannot return null for non-nullable field \"{$info->parentType}.{$info->fieldName}\"."); } return $completed; } if ($result === null) { return null; } // If field type is List, complete each item in the list with the inner type if ($returnType instanceof ListOfType) { if (! is_iterable($result)) { $resultType = gettype($result); throw new InvariantViolation("Expected field {$info->parentType}.{$info->fieldName} to return iterable, but got: {$resultType}."); } return $this->completeListValue($returnType, $fieldNodes, $info, $path, $unaliasedPath, $result, $contextValue); } assert($returnType instanceof NamedType, 'Wrapping types should return early'); // Account for invalid schema definition when typeLoader returns different // instance than `resolveType` or $field->getType() or $arg->getType() assert( $returnType === $this->exeContext->schema->getType($returnType->name), SchemaValidationContext::duplicateType($this->exeContext->schema, "{$info->parentType}.{$info->fieldName}", $returnType->name) ); if ($returnType instanceof LeafType) { return $this->completeLeafValue($returnType, $result); } if ($returnType instanceof AbstractType) { return $this->completeAbstractValue($returnType, $fieldNodes, $info, $path, $unaliasedPath, $result, $contextValue); } // Field type must be and Object, Interface or Union and expect sub-selections. if ($returnType instanceof ObjectType) { return $this->completeObjectValue($returnType, $fieldNodes, $info, $path, $unaliasedPath, $result, $contextValue); } $safeReturnType = Utils::printSafe($returnType); throw new \RuntimeException("Cannot complete value of unexpected type {$safeReturnType}."); } /** @param mixed $value */ protected function isPromise($value): bool { return $value instanceof Promise || $this->exeContext->promiseAdapter->isThenable($value); } /** * Only returns the value if it acts like a Promise, i.e. has a "then" function, * otherwise returns null. * * @param mixed $value */ protected function getPromise($value): ?Promise { if ($value === null || $value instanceof Promise) { return $value; } $promiseAdapter = $this->exeContext->promiseAdapter; if ($promiseAdapter->isThenable($value)) { return $promiseAdapter->convertThenable($value); } return null; } /** * Similar to array_reduce(), however the reducing callback may return * a Promise, in which case reduction will continue after each promise resolves. * * If the callback does not return a Promise, then this function will also not * return a Promise. * * @param array<mixed> $values * @param Promise|mixed|null $initialValue * * @return Promise|mixed|null */ protected function promiseReduce(array $values, callable $callback, $initialValue) { return array_reduce( $values, function ($previous, $value) use ($callback) { $promise = $this->getPromise($previous); if ($promise !== null) { return $promise->then(static fn ($resolved) => $callback($resolved, $value)); } return $callback($previous, $value); }, $initialValue ); } /** * Complete a list value by completing each item in the list with the inner type. * * @param ListOfType<Type&OutputType> $returnType * @param \ArrayObject<int, FieldNode> $fieldNodes * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param iterable<mixed> $results * @param mixed $contextValue * * @throws Error * * @return array<mixed>|Promise|\stdClass */ protected function completeListValue( ListOfType $returnType, \ArrayObject $fieldNodes, ResolveInfo $info, array $path, array $unaliasedPath, iterable &$results, $contextValue ) { $itemType = $returnType->getWrappedType(); $i = 0; $containsPromise = false; $completedItems = []; foreach ($results as $item) { $itemPath = [...$path, $i]; $info->path = $itemPath; $itemUnaliasedPath = [...$unaliasedPath, $i]; $info->unaliasedPath = $itemUnaliasedPath; ++$i; $completedItem = $this->completeValueCatchingError($itemType, $fieldNodes, $info, $itemPath, $itemUnaliasedPath, $item, $contextValue); if (! $containsPromise && $this->getPromise($completedItem) !== null) { $containsPromise = true; } $completedItems[] = $completedItem; } return $containsPromise ? $this->exeContext->promiseAdapter->all($completedItems) : $completedItems; } /** * Complete a Scalar or Enum by serializing to a valid value, throwing if serialization is not possible. * * @param mixed $result * * @throws \Exception * * @return mixed */ protected function completeLeafValue(LeafType $returnType, &$result) { try { return $returnType->serialize($result); } catch (\Throwable $error) { $safeReturnType = Utils::printSafe($returnType); $safeResult = Utils::printSafe($result); throw new InvariantViolation("Expected a value of type {$safeReturnType} but received: {$safeResult}. {$error->getMessage()}", 0, $error); } } /** * Complete a value of an abstract type by determining the runtime object type * of that value, then complete the value for that type. * * @param AbstractType&Type $returnType * @param \ArrayObject<int, FieldNode> $fieldNodes * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param array<mixed> $result * @param mixed $contextValue * * @throws \Exception * @throws Error * @throws InvariantViolation * * @return array<mixed>|Promise|\stdClass */ protected function completeAbstractValue( AbstractType $returnType, \ArrayObject $fieldNodes, ResolveInfo $info, array $path, array $unaliasedPath, &$result, $contextValue ) { $typeCandidate = $returnType->resolveType($result, $contextValue, $info); if ($typeCandidate === null) { $runtimeType = static::defaultTypeResolver($result, $contextValue, $info, $returnType); } elseif (! is_string($typeCandidate) && is_callable($typeCandidate)) { $runtimeType = $typeCandidate(); } else { $runtimeType = $typeCandidate; } $promise = $this->getPromise($runtimeType); if ($promise !== null) { return $promise->then(fn ($resolvedRuntimeType) => $this->completeObjectValue( $this->ensureValidRuntimeType( $resolvedRuntimeType, $returnType, $info, $result ), $fieldNodes, $info, $path, $unaliasedPath, $result, $contextValue )); } return $this->completeObjectValue( $this->ensureValidRuntimeType( $runtimeType, $returnType, $info, $result ), $fieldNodes, $info, $path, $unaliasedPath, $result, $contextValue ); } /** * If a resolveType function is not given, then a default resolve behavior is * used which attempts two strategies:. * * First, See if the provided value has a `__typename` field defined, if so, use * that value as name of the resolved type. * * Otherwise, test each possible type for the abstract type by calling * isTypeOf for the object being coerced, returning the first type that matches. * * @param mixed|null $value * @param mixed|null $contextValue * @param AbstractType&Type $abstractType * * @throws InvariantViolation * * @return Promise|Type|string|null */ protected function defaultTypeResolver($value, $contextValue, ResolveInfo $info, AbstractType $abstractType) { $typename = Utils::extractKey($value, '__typename'); if (is_string($typename)) { return $typename; } if ($abstractType instanceof InterfaceType && isset($info->schema->getConfig()->typeLoader)) { $safeValue = Utils::printSafe($value); Warning::warnOnce( "GraphQL Interface Type `{$abstractType->name}` returned `null` from its `resolveType` function for value: {$safeValue}. Switching to slow resolution method using `isTypeOf` of all possible implementations. It requires full schema scan and degrades query performance significantly. Make sure your `resolveType` function always returns a valid implementation or throws.", Warning::WARNING_FULL_SCHEMA_SCAN ); } $possibleTypes = $info->schema->getPossibleTypes($abstractType); $promisedIsTypeOfResults = []; foreach ($possibleTypes as $index => $type) { $isTypeOfResult = $type->isTypeOf($value, $contextValue, $info); if ($isTypeOfResult === null) { continue; } $promise = $this->getPromise($isTypeOfResult); if ($promise !== null) { $promisedIsTypeOfResults[$index] = $promise; } elseif ($isTypeOfResult === true) { return $type; } } if ($promisedIsTypeOfResults !== []) { return $this->exeContext->promiseAdapter ->all($promisedIsTypeOfResults) ->then(static function ($isTypeOfResults) use ($possibleTypes): ?ObjectType { foreach ($isTypeOfResults as $index => $result) { if ($result) { return $possibleTypes[$index]; } } return null; }); } return null; } /** * Complete an Object value by executing all sub-selections. * * @param \ArrayObject<int, FieldNode> $fieldNodes * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param mixed $result * @param mixed $contextValue * * @throws \Exception * @throws Error * * @return array<mixed>|Promise|\stdClass */ protected function completeObjectValue( ObjectType $returnType, \ArrayObject $fieldNodes, ResolveInfo $info, array $path, array $unaliasedPath, &$result, $contextValue ) { // If there is an isTypeOf predicate function, call it with the // current result. If isTypeOf returns false, then raise an error rather // than continuing execution. $isTypeOf = $returnType->isTypeOf($result, $contextValue, $info); if ($isTypeOf !== null) { $promise = $this->getPromise($isTypeOf); if ($promise !== null) { return $promise->then(function ($isTypeOfResult) use ( $contextValue, $returnType, $fieldNodes, $path, $unaliasedPath, &$result ) { if (! $isTypeOfResult) { throw $this->invalidReturnTypeError($returnType, $result, $fieldNodes); } return $this->collectAndExecuteSubfields( $returnType, $fieldNodes, $path, $unaliasedPath, $result, $contextValue ); }); } assert(is_bool($isTypeOf), 'Promise would return early'); if (! $isTypeOf) { throw $this->invalidReturnTypeError($returnType, $result, $fieldNodes); } } return $this->collectAndExecuteSubfields( $returnType, $fieldNodes, $path, $unaliasedPath, $result, $contextValue ); } /** * @param \ArrayObject<int, FieldNode> $fieldNodes * @param array<mixed> $result */ protected function invalidReturnTypeError( ObjectType $returnType, $result, \ArrayObject $fieldNodes ): Error { $safeResult = Utils::printSafe($result); return new Error( "Expected value of type \"{$returnType->name}\" but got: {$safeResult}.", $fieldNodes ); } /** * @param \ArrayObject<int, FieldNode> $fieldNodes * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param mixed $result * @param mixed $contextValue * * @throws \Exception * @throws Error * * @return array<mixed>|Promise|\stdClass */ protected function collectAndExecuteSubfields( ObjectType $returnType, \ArrayObject $fieldNodes, array $path, array $unaliasedPath, &$result, $contextValue ) { $subFieldNodes = $this->collectSubFields($returnType, $fieldNodes); return $this->executeFields($returnType, $result, $path, $unaliasedPath, $subFieldNodes, $contextValue); } /** * A memoized collection of relevant subfields with regard to the return * type. Memoizing ensures the subfields are not repeatedly calculated, which * saves overhead when resolving lists of values. * * @param \ArrayObject<int, FieldNode> $fieldNodes * * @throws \Exception * @throws Error * * @phpstan-return Fields */ protected function collectSubFields(ObjectType $returnType, \ArrayObject $fieldNodes): \ArrayObject { // @phpstan-ignore-next-line generics of SplObjectStorage are not inferred from empty instantiation $returnTypeCache = $this->subFieldCache[$returnType] ??= new \SplObjectStorage(); if (! isset($returnTypeCache[$fieldNodes])) { // Collect sub-fields to execute to complete this value. $subFieldNodes = new \ArrayObject(); $visitedFragmentNames = new \ArrayObject(); foreach ($fieldNodes as $fieldNode) { if (isset($fieldNode->selectionSet)) { $subFieldNodes = $this->collectFields( $returnType, $fieldNode->selectionSet, $subFieldNodes, $visitedFragmentNames ); } } $returnTypeCache[$fieldNodes] = $subFieldNodes; } return $returnTypeCache[$fieldNodes]; } /** * Implements the "Evaluating selection sets" section of the spec for "read" mode. * * @param mixed $rootValue * @param list<string|int> $path * @param list<string|int> $unaliasedPath * @param mixed $contextValue * * @phpstan-param Fields $fields * * @throws Error * @throws InvariantViolation * * @return Promise|\stdClass|array<mixed> */ protected function executeFields(ObjectType $parentType, $rootValue, array $path, array $unaliasedPath, \ArrayObject $fields, $contextValue) { $containsPromise = false; $results = []; foreach ($fields as $responseName => $fieldNodes) { $result = $this->resolveField( $parentType, $rootValue, $fieldNodes, $responseName, $path, $unaliasedPath, $this->maybeScopeContext($contextValue) ); if ($result === static::$UNDEFINED) { continue; } if (! $containsPromise && $this->isPromise($result)) { $containsPromise = true; } $results[$responseName] = $result; } // If there are no promises, we can just return the object if (! $containsPromise) { return static::fixResultsIfEmptyArray($results); } // Otherwise, results is a map from field name to the result of resolving that // field, which is possibly a promise. Return a promise that will return this // same map, but with any promises replaced with the values they resolved to. return $this->promiseForAssocArray($results); } /** * Differentiate empty objects from empty lists. * * @see https://github.com/webonyx/graphql-php/issues/59 * * @param array<mixed>|mixed $results * * @return array<mixed>|\stdClass|mixed */ protected static function fixResultsIfEmptyArray($results) { if ($results === []) { return new \stdClass(); } return $results; } /** * Transform an associative array with Promises to a Promise which resolves to an * associative array where all Promises were resolved. * * @param array<string, Promise|mixed> $assoc */ protected function promiseForAssocArray(array $assoc): Promise { $keys = array_keys($assoc); $valuesAndPromises = array_values($assoc); $promise = $this->exeContext->promiseAdapter->all($valuesAndPromises); return $promise->then(static function ($values) use ($keys) { $resolvedResults = []; foreach ($values as $i => $value) { $resolvedResults[$keys[$i]] = $value; } return static::fixResultsIfEmptyArray($resolvedResults); }); } /** * @param mixed $runtimeTypeOrName * @param AbstractType&Type $returnType * @param mixed $result * * @throws InvariantViolation */ protected function ensureValidRuntimeType( $runtimeTypeOrName, AbstractType $returnType, ResolveInfo $info, &$result ): ObjectType { $runtimeType = is_string($runtimeTypeOrName) ? $this->exeContext->schema->getType($runtimeTypeOrName) : $runtimeTypeOrName; if (! $runtimeType instanceof ObjectType) { $safeResult = Utils::printSafe($result); $notObjectType = Utils::printSafe($runtimeType); throw new InvariantViolation("Abstract type {$returnType} must resolve to an Object type at runtime for field {$info->parentType}.{$info->fieldName} with value {$safeResult}, received \"{$notObjectType}\". Either the {$returnType} type should provide a \"resolveType\" function or each possible type should provide an \"isTypeOf\" function."); } if (! $this->exeContext->schema->isSubType($returnType, $runtimeType)) { throw new InvariantViolation("Runtime Object type \"{$runtimeType}\" is not a possible type for \"{$returnType}\"."); } assert( $this->exeContext->schema->getType($runtimeType->name) !== null, "Schema does not contain type \"{$runtimeType}\". This can happen when an object type is only referenced indirectly through abstract types and never directly through fields.List the type in the option \"types\" during schema construction, see https://webonyx.github.io/graphql-php/schema-definition/#configuration-options." ); assert( $runtimeType === $this->exeContext->schema->getType($runtimeType->name), "Schema must contain unique named types but contains multiple types named \"{$runtimeType}\". Make sure that `resolveType` function of abstract type \"{$returnType}\" returns the same type instance as referenced anywhere else within the schema (see https://webonyx.github.io/graphql-php/type-definitions/#type-registry)." ); return $runtimeType; } /** * @param mixed $contextValue * * @return mixed */ private function maybeScopeContext($contextValue) { if ($contextValue instanceof ScopedContext) { return $contextValue->clone(); } return $contextValue; } } graphql/lib/Executor/ExecutionContext.php000064400000004550151666572070014612 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Type\Schema; /** * Data that must be available at all points during query execution. * * Namely, schema of the type system that is currently executing, * and the fragments defined in the query document. * * @phpstan-import-type FieldResolver from Executor * @phpstan-import-type ArgsMapper from Executor */ class ExecutionContext { public Schema $schema; /** @var array<string, FragmentDefinitionNode> */ public array $fragments; /** @var mixed */ public $rootValue; /** @var mixed */ public $contextValue; public OperationDefinitionNode $operation; /** @var array<string, mixed> */ public array $variableValues; /** * @var callable * * @phpstan-var FieldResolver */ public $fieldResolver; /** * @var callable * * @phpstan-var ArgsMapper */ public $argsMapper; /** @var list<Error> */ public array $errors; public PromiseAdapter $promiseAdapter; /** * @param array<string, FragmentDefinitionNode> $fragments * @param mixed $rootValue * @param mixed $contextValue * @param array<string, mixed> $variableValues * @param list<Error> $errors * * @phpstan-param FieldResolver $fieldResolver */ public function __construct( Schema $schema, array $fragments, $rootValue, $contextValue, OperationDefinitionNode $operation, array $variableValues, array $errors, callable $fieldResolver, callable $argsMapper, PromiseAdapter $promiseAdapter ) { $this->schema = $schema; $this->fragments = $fragments; $this->rootValue = $rootValue; $this->contextValue = $contextValue; $this->operation = $operation; $this->variableValues = $variableValues; $this->errors = $errors; $this->fieldResolver = $fieldResolver; $this->argsMapper = $argsMapper; $this->promiseAdapter = $promiseAdapter; } public function addError(Error $error): void { $this->errors[] = $error; } } graphql/lib/Executor/ExecutionResult.php000064400000012267151666572070014450 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor; use YOOtheme\GraphQL\Error\DebugFlag; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\FormattedError; /** * Returned after [query execution](executing-queries.md). * Represents both - result of successful execution and of a failed one * (with errors collected in `errors` prop). * * Could be converted to [spec-compliant](https://facebook.github.io/graphql/#sec-Response-Format) * serializable array using `toArray()`. * * @phpstan-type SerializableError array{ * message: string, * locations?: array<int, array{line: int, column: int}>, * path?: array<int, int|string>, * extensions?: array<string, mixed> * } * @phpstan-type SerializableErrors list<SerializableError> * @phpstan-type SerializableResult array{ * data?: array<string, mixed>, * errors?: SerializableErrors, * extensions?: array<string, mixed> * } * @phpstan-type ErrorFormatter callable(\Throwable): SerializableError * @phpstan-type ErrorsHandler callable(list<Error> $errors, ErrorFormatter $formatter): SerializableErrors * * @see \GraphQL\Tests\Executor\ExecutionResultTest */ class ExecutionResult implements \JsonSerializable { /** * Data collected from resolvers during query execution. * * @api * * @var array<string, mixed>|null */ public ?array $data = null; /** * Errors registered during query execution. * * If an error was caused by exception thrown in resolver, $error->getPrevious() would * contain original exception. * * @api * * @var list<Error> */ public array $errors = []; /** * User-defined serializable array of extensions included in serialized result. * * @api * * @var array<string, mixed>|null */ public ?array $extensions = null; /** * @var callable|null * * @phpstan-var ErrorFormatter|null */ private $errorFormatter; /** * @var callable|null * * @phpstan-var ErrorsHandler|null */ private $errorsHandler; /** * @param array<string, mixed>|null $data * @param list<Error> $errors * @param array<string, mixed> $extensions */ public function __construct(?array $data = null, array $errors = [], array $extensions = []) { $this->data = $data; $this->errors = $errors; $this->extensions = $extensions; } /** * Define custom error formatting (must conform to http://facebook.github.io/graphql/#sec-Errors). * * Expected signature is: function (GraphQL\Error\Error $error): array * * Default formatter is "GraphQL\Error\FormattedError::createFromException" * * Expected returned value must be an array: * array( * 'message' => 'errorMessage', * // ... other keys * ); * * @phpstan-param ErrorFormatter|null $errorFormatter * * @api */ public function setErrorFormatter(?callable $errorFormatter): self { $this->errorFormatter = $errorFormatter; return $this; } /** * Define custom logic for error handling (filtering, logging, etc). * * Expected handler signature is: * fn (array $errors, callable $formatter): array * * Default handler is: * fn (array $errors, callable $formatter): array => array_map($formatter, $errors) * * @phpstan-param ErrorsHandler|null $errorsHandler * * @api */ public function setErrorsHandler(?callable $errorsHandler): self { $this->errorsHandler = $errorsHandler; return $this; } /** @phpstan-return SerializableResult */ #[\ReturnTypeWillChange] public function jsonSerialize(): array { return $this->toArray(); } /** * Converts GraphQL query result to spec-compliant serializable array using provided * errors handler and formatter. * * If debug argument is passed, output of error formatter is enriched which debugging information * ("debugMessage", "trace" keys depending on flags). * * $debug argument must sum of flags from @see \GraphQL\Error\DebugFlag * * @phpstan-return SerializableResult * * @api */ public function toArray(int $debug = DebugFlag::NONE): array { $result = []; if ($this->errors !== []) { $errorsHandler = $this->errorsHandler ?? static fn (array $errors, callable $formatter): array => array_map($formatter, $errors); /** @phpstan-var SerializableErrors */ $handledErrors = $errorsHandler( $this->errors, FormattedError::prepareFormatter($this->errorFormatter, $debug) ); // While we know that there were errors initially, they might have been discarded if ($handledErrors !== []) { $result['errors'] = $handledErrors; } } if ($this->data !== null) { $result['data'] = $this->data; } if ($this->extensions !== null && $this->extensions !== []) { $result['extensions'] = $this->extensions; } return $result; } } graphql/lib/Executor/Values.php000064400000031723151666572100012535 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\ArgumentNode; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\EnumValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\FieldDefinitionNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\NullValueNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Language\AST\VariableNode; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Utils\Value; /** * @see ArgumentNode - force IDE import * * @phpstan-import-type ArgumentNodeValue from ArgumentNode * * @see \GraphQL\Tests\Executor\ValuesTest */ class Values { /** * Prepares an object map of variables of the correct type based on the provided * variable definitions and arbitrary input. If the input cannot be coerced * to match the variable definitions, an Error will be thrown. * * @param NodeList<VariableDefinitionNode> $varDefNodes * @param array<string, mixed> $rawVariableValues * * @throws \Exception * * @return array{array<int, Error>, null}|array{null, array<string, mixed>} */ public static function getVariableValues(Schema $schema, NodeList $varDefNodes, array $rawVariableValues): array { $errors = []; $coercedValues = []; foreach ($varDefNodes as $varDefNode) { $varName = $varDefNode->variable->name->value; $varType = AST::typeFromAST([$schema, 'getType'], $varDefNode->type); if (! Type::isInputType($varType)) { // Must use input types for variables. This should be caught during // validation, however is checked again here for safety. $typeStr = Printer::doPrint($varDefNode->type); $errors[] = new Error( "Variable \"\${$varName}\" expected value of type \"{$typeStr}\" which cannot be used as an input type.", [$varDefNode->type] ); } else { $hasValue = array_key_exists($varName, $rawVariableValues); $value = $hasValue ? $rawVariableValues[$varName] : Utils::undefined(); if (! $hasValue && ($varDefNode->defaultValue !== null)) { // If no value was provided to a variable with a default value, // use the default value. $coercedValues[$varName] = AST::valueFromAST($varDefNode->defaultValue, $varType); } elseif ((! $hasValue || $value === null) && ($varType instanceof NonNull)) { // If no value or a nullish value was provided to a variable with a // non-null type (required), produce an error. $safeVarType = Utils::printSafe($varType); $message = $hasValue ? "Variable \"\${$varName}\" of non-null type \"{$safeVarType}\" must not be null." : "Variable \"\${$varName}\" of required type \"{$safeVarType}\" was not provided."; $errors[] = new Error($message, [$varDefNode]); } elseif ($hasValue) { if ($value === null) { // If the explicit value `null` was provided, an entry in the coerced // values must exist as the value `null`. $coercedValues[$varName] = null; } else { // Otherwise, a non-null value was provided, coerce it to the expected // type or report an error if coercion fails. $coerced = Value::coerceInputValue($value, $varType); $coercionErrors = $coerced['errors']; if ($coercionErrors !== null) { foreach ($coercionErrors as $coercionError) { $invalidValue = $coercionError->printInvalidValue(); $inputPath = $coercionError->printInputPath(); $pathMessage = $inputPath !== null ? " at \"{$varName}{$inputPath}\"" : ''; $errors[] = new Error( "Variable \"\${$varName}\" got invalid value {$invalidValue}{$pathMessage}; {$coercionError->getMessage()}", $varDefNode, $coercionError->getSource(), $coercionError->getPositions(), $coercionError->getPath(), $coercionError, $coercionError->getExtensions() ); } } else { $coercedValues[$varName] = $coerced['value']; } } } } } return $errors === [] ? [null, $coercedValues] : [$errors, null]; } /** * Prepares an object map of argument values given a directive definition * and an AST node which may contain directives. Optionally also accepts a map * of variable values. * * If the directive does not exist on the node, returns undefined. * * @param EnumTypeDefinitionNode|EnumTypeExtensionNode|EnumValueDefinitionNode|FieldDefinitionNode|FieldNode|FragmentDefinitionNode|FragmentSpreadNode|InlineFragmentNode|InputObjectTypeDefinitionNode|InputObjectTypeExtensionNode|InputValueDefinitionNode|InterfaceTypeDefinitionNode|InterfaceTypeExtensionNode|ObjectTypeDefinitionNode|ObjectTypeExtensionNode|OperationDefinitionNode|ScalarTypeDefinitionNode|ScalarTypeExtensionNode|SchemaExtensionNode|UnionTypeDefinitionNode|UnionTypeExtensionNode|VariableDefinitionNode $node * @param array<string, mixed>|null $variableValues * * @throws \Exception * @throws Error * * @return array<string, mixed>|null */ public static function getDirectiveValues(Directive $directiveDef, Node $node, ?array $variableValues = null): ?array { $directiveDefName = $directiveDef->name; foreach ($node->directives as $directive) { if ($directive->name->value === $directiveDefName) { return self::getArgumentValues($directiveDef, $directive, $variableValues); } } return null; } /** * Prepares an object map of argument values given a list of argument * definitions and list of argument AST nodes. * * @param FieldDefinition|Directive $def * @param FieldNode|DirectiveNode $node * @param array<string, mixed>|null $variableValues * * @throws \Exception * @throws Error * * @return array<string, mixed> */ public static function getArgumentValues($def, Node $node, ?array $variableValues = null): array { if ($def->args === []) { return []; } /** @var array<string, ArgumentNodeValue> $argumentValueMap */ $argumentValueMap = []; // Might not be defined when an AST from JS is used if (isset($node->arguments)) { foreach ($node->arguments as $argumentNode) { $argumentValueMap[$argumentNode->name->value] = $argumentNode->value; } } return static::getArgumentValuesForMap($def, $argumentValueMap, $variableValues, $node); } /** * @param FieldDefinition|Directive $def * @param array<string, ArgumentNodeValue> $argumentValueMap * @param array<string, mixed>|null $variableValues * * @throws \Exception * @throws Error * * @return array<string, mixed> */ public static function getArgumentValuesForMap($def, array $argumentValueMap, ?array $variableValues = null, ?Node $referenceNode = null): array { /** @var array<string, mixed> $coercedValues */ $coercedValues = []; foreach ($def->args as $argumentDefinition) { $name = $argumentDefinition->name; $argType = $argumentDefinition->getType(); $argumentValueNode = $argumentValueMap[$name] ?? null; if ($argumentValueNode instanceof VariableNode) { $variableName = $argumentValueNode->name->value; $hasValue = $variableValues !== null && array_key_exists($variableName, $variableValues); $isNull = $hasValue && $variableValues[$variableName] === null; } else { $hasValue = $argumentValueNode !== null; $isNull = $argumentValueNode instanceof NullValueNode; } if (! $hasValue && $argumentDefinition->defaultValueExists()) { // If no argument was provided where the definition has a default value, // use the default value. $coercedValues[$name] = $argumentDefinition->defaultValue; } elseif ((! $hasValue || $isNull) && ($argType instanceof NonNull)) { // If no argument or a null value was provided to an argument with a // non-null type (required), produce a field error. $safeArgType = Utils::printSafe($argType); if ($isNull) { throw new Error("Argument \"{$name}\" of non-null type \"{$safeArgType}\" must not be null.", $referenceNode); } if ($argumentValueNode instanceof VariableNode) { throw new Error("Argument \"{$name}\" of required type \"{$safeArgType}\" was provided the variable \"\${$argumentValueNode->name->value}\" which was not provided a runtime value.", [$argumentValueNode]); } throw new Error("Argument \"{$name}\" of required type \"{$safeArgType}\" was not provided.", $referenceNode); } elseif ($hasValue) { assert($argumentValueNode instanceof Node); if ($argumentValueNode instanceof NullValueNode) { // If the explicit value `null` was provided, an entry in the coerced // values must exist as the value `null`. $coercedValues[$name] = null; } elseif ($argumentValueNode instanceof VariableNode) { $variableName = $argumentValueNode->name->value; // Note: This does no further checking that this variable is correct. // This assumes that this query has been validated and the variable // usage here is of the correct type. $coercedValues[$name] = $variableValues[$variableName] ?? null; } else { $coercedValue = AST::valueFromAST($argumentValueNode, $argType, $variableValues); if (Utils::undefined() === $coercedValue) { // Note: ValuesOfCorrectType validation should catch this before // execution. This is a runtime check to ensure execution does not // continue with an invalid argument value. $invalidValue = Printer::doPrint($argumentValueNode); throw new Error("Argument \"{$name}\" has invalid value {$invalidValue}.", [$argumentValueNode]); } $coercedValues[$name] = $coercedValue; } } } return $coercedValues; } } graphql/lib/Executor/Executor.php000064400000015053151666572100013072 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Promise\Adapter\SyncPromiseAdapter; use YOOtheme\GraphQL\Executor\Promise\Promise; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\ResolveInfo; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\Utils; /** * Implements the "Evaluating requests" section of the GraphQL specification. * * @phpstan-type ArgsMapper callable(array<string, mixed>, FieldDefinition, FieldNode, mixed): mixed * @phpstan-type FieldResolver callable(mixed, array<string, mixed>, mixed, ResolveInfo): mixed * @phpstan-type ImplementationFactory callable(PromiseAdapter, Schema, DocumentNode, mixed, mixed, array<mixed>, ?string, callable, callable): ExecutorImplementation * * @see \GraphQL\Tests\Executor\ExecutorTest */ class Executor { /** * @var callable * * @phpstan-var FieldResolver */ private static $defaultFieldResolver = [self::class, 'defaultFieldResolver']; /** * @var callable * * @phpstan-var ArgsMapper */ private static $defaultArgsMapper = [self::class, 'defaultArgsMapper']; private static ?PromiseAdapter $defaultPromiseAdapter; /** * @var callable * * @phpstan-var ImplementationFactory */ private static $implementationFactory = [ReferenceExecutor::class, 'create']; /** @phpstan-return FieldResolver */ public static function getDefaultFieldResolver(): callable { return self::$defaultFieldResolver; } /** * Set a custom default resolve function. * * @phpstan-param FieldResolver $fieldResolver */ public static function setDefaultFieldResolver(callable $fieldResolver): void { self::$defaultFieldResolver = $fieldResolver; } /** @phpstan-return ArgsMapper */ public static function getDefaultArgsMapper(): callable { return self::$defaultArgsMapper; } /** @phpstan-param ArgsMapper $argsMapper */ public static function setDefaultArgsMapper(callable $argsMapper): void { self::$defaultArgsMapper = $argsMapper; } public static function getDefaultPromiseAdapter(): PromiseAdapter { return self::$defaultPromiseAdapter ??= new SyncPromiseAdapter(); } /** Set a custom default promise adapter. */ public static function setDefaultPromiseAdapter(?PromiseAdapter $defaultPromiseAdapter = null): void { self::$defaultPromiseAdapter = $defaultPromiseAdapter; } /** @phpstan-return ImplementationFactory */ public static function getImplementationFactory(): callable { return self::$implementationFactory; } /** * Set a custom executor implementation factory. * * @phpstan-param ImplementationFactory $implementationFactory */ public static function setImplementationFactory(callable $implementationFactory): void { self::$implementationFactory = $implementationFactory; } /** * Executes DocumentNode against given $schema. * * Always returns ExecutionResult and never throws. * All errors which occur during operation execution are collected in `$result->errors`. * * @param mixed $rootValue * @param mixed $contextValue * @param array<string, mixed>|null $variableValues * * @phpstan-param FieldResolver|null $fieldResolver * * @api * * @throws InvariantViolation */ public static function execute( Schema $schema, DocumentNode $documentNode, $rootValue = null, $contextValue = null, ?array $variableValues = null, ?string $operationName = null, ?callable $fieldResolver = null ): ExecutionResult { $promiseAdapter = new SyncPromiseAdapter(); $result = static::promiseToExecute( $promiseAdapter, $schema, $documentNode, $rootValue, $contextValue, $variableValues, $operationName, $fieldResolver ); return $promiseAdapter->wait($result); } /** * Same as execute(), but requires promise adapter and returns a promise which is always * fulfilled with an instance of ExecutionResult and never rejected. * * Useful for async PHP platforms. * * @param mixed $rootValue * @param mixed $contextValue * @param array<string, mixed>|null $variableValues * * @phpstan-param FieldResolver|null $fieldResolver * @phpstan-param ArgsMapper|null $argsMapper * * @api */ public static function promiseToExecute( PromiseAdapter $promiseAdapter, Schema $schema, DocumentNode $documentNode, $rootValue = null, $contextValue = null, ?array $variableValues = null, ?string $operationName = null, ?callable $fieldResolver = null, ?callable $argsMapper = null ): Promise { $executor = (self::$implementationFactory)( $promiseAdapter, $schema, $documentNode, $rootValue, $contextValue, $variableValues ?? [], $operationName, $fieldResolver ?? self::$defaultFieldResolver, $argsMapper ?? self::$defaultArgsMapper, ); return $executor->doExecute(); } /** * If a resolve function is not given, then a default resolve behavior is used * which takes the property of the root value of the same name as the field * and returns it as the result, or if it's a function, returns the result * of calling that function while passing along args and context. * * @param mixed $objectLikeValue * @param array<string, mixed> $args * @param mixed $contextValue * * @return mixed */ public static function defaultFieldResolver($objectLikeValue, array $args, $contextValue, ResolveInfo $info) { $property = Utils::extractKey($objectLikeValue, $info->fieldName); return $property instanceof \Closure ? $property($objectLikeValue, $args, $contextValue, $info) : $property; } /** * @template T of array<string, mixed> * * @param T $args * * @return T */ public static function defaultArgsMapper(array $args): array { return $args; } } graphql/lib/Executor/Promise/Adapter/ReactPromiseAdapter.php000064400000004600151666572100020164 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor\Promise\Adapter; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Promise\Promise; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use React\Promise\Promise as ReactPromise; use React\Promise\PromiseInterface as ReactPromiseInterface; use function React\Promise\all; use function React\Promise\reject; use function React\Promise\resolve; class ReactPromiseAdapter implements PromiseAdapter { public function isThenable($value): bool { return $value instanceof ReactPromiseInterface; } /** @throws InvariantViolation */ public function convertThenable($thenable): Promise { return new Promise($thenable, $this); } /** @throws InvariantViolation */ public function then(Promise $promise, ?callable $onFulfilled = null, ?callable $onRejected = null): Promise { $adoptedPromise = $promise->adoptedPromise; assert($adoptedPromise instanceof ReactPromiseInterface); return new Promise($adoptedPromise->then($onFulfilled, $onRejected), $this); } /** @throws InvariantViolation */ public function create(callable $resolver): Promise { $promise = new ReactPromise($resolver); return new Promise($promise, $this); } /** @throws InvariantViolation */ public function createFulfilled($value = null): Promise { $promise = resolve($value); return new Promise($promise, $this); } /** @throws InvariantViolation */ public function createRejected(\Throwable $reason): Promise { $promise = reject($reason); return new Promise($promise, $this); } /** @throws InvariantViolation */ public function all(iterable $promisesOrValues): Promise { foreach ($promisesOrValues as &$promiseOrValue) { if ($promiseOrValue instanceof Promise) { $promiseOrValue = $promiseOrValue->adoptedPromise; } } $promisesOrValuesArray = is_array($promisesOrValues) ? $promisesOrValues : iterator_to_array($promisesOrValues); $promise = all($promisesOrValuesArray)->then(static fn ($values): array => array_map( static fn ($key) => $values[$key], array_keys($promisesOrValuesArray), )); return new Promise($promise, $this); } } graphql/lib/Executor/Promise/Adapter/AmpPromiseAdapter.php000064400000010747151666572100017654 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor\Promise\Adapter; use Amp\Deferred; use Amp\Failure; use Amp\Promise as AmpPromise; use Amp\Success; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Promise\Promise; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use function Amp\Promise\all; class AmpPromiseAdapter implements PromiseAdapter { public function isThenable($value): bool { return $value instanceof AmpPromise; } /** @throws InvariantViolation */ public function convertThenable($thenable): Promise { return new Promise($thenable, $this); } /** @throws InvariantViolation */ public function then(Promise $promise, ?callable $onFulfilled = null, ?callable $onRejected = null): Promise { $deferred = new Deferred(); $onResolve = static function (?\Throwable $reason, $value) use ($onFulfilled, $onRejected, $deferred): void { if ($reason === null && $onFulfilled !== null) { self::resolveWithCallable($deferred, $onFulfilled, $value); } elseif ($reason === null) { $deferred->resolve($value); } elseif ($onRejected !== null) { self::resolveWithCallable($deferred, $onRejected, $reason); } else { $deferred->fail($reason); } }; $adoptedPromise = $promise->adoptedPromise; assert($adoptedPromise instanceof AmpPromise); $adoptedPromise->onResolve($onResolve); return new Promise($deferred->promise(), $this); } /** @throws InvariantViolation */ public function create(callable $resolver): Promise { $deferred = new Deferred(); $resolver( static function ($value) use ($deferred): void { $deferred->resolve($value); }, static function (\Throwable $exception) use ($deferred): void { $deferred->fail($exception); } ); return new Promise($deferred->promise(), $this); } /** * @throws \Error * @throws InvariantViolation */ public function createFulfilled($value = null): Promise { $promise = new Success($value); return new Promise($promise, $this); } /** @throws InvariantViolation */ public function createRejected(\Throwable $reason): Promise { $promise = new Failure($reason); return new Promise($promise, $this); } /** * @throws \Error * @throws InvariantViolation */ public function all(iterable $promisesOrValues): Promise { /** @var array<AmpPromise<mixed>> $promises */ $promises = []; foreach ($promisesOrValues as $key => $item) { if ($item instanceof Promise) { $ampPromise = $item->adoptedPromise; assert($ampPromise instanceof AmpPromise); $promises[$key] = $ampPromise; } elseif ($item instanceof AmpPromise) { $promises[$key] = $item; } } $deferred = new Deferred(); all($promises)->onResolve(static function (?\Throwable $reason, ?array $values) use ($promisesOrValues, $deferred): void { if ($reason === null) { assert(is_array($values), 'Either $reason or $values must be passed'); $promisesOrValuesArray = is_array($promisesOrValues) ? $promisesOrValues : iterator_to_array($promisesOrValues); $resolvedValues = array_replace($promisesOrValuesArray, $values); $deferred->resolve($resolvedValues); return; } $deferred->fail($reason); }); return new Promise($deferred->promise(), $this); } /** * @template TArgument * @template TResult of AmpPromise<mixed> * * @param Deferred<TResult> $deferred * @param callable(TArgument): TResult $callback * @param TArgument $argument */ private static function resolveWithCallable(Deferred $deferred, callable $callback, $argument): void { try { $result = $callback($argument); } catch (\Throwable $exception) { $deferred->fail($exception); return; } if ($result instanceof Promise) { /** @var TResult $result */ $result = $result->adoptedPromise; } $deferred->resolve($result); } } graphql/lib/Executor/Promise/Adapter/SyncPromiseAdapter.php000064400000011265151666572100020047 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor\Promise\Adapter; use YOOtheme\GraphQL\Deferred; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Promise\Promise; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use YOOtheme\GraphQL\Utils\Utils; /** * Allows changing order of field resolution even in sync environments * (by leveraging queue of deferreds and promises). */ class SyncPromiseAdapter implements PromiseAdapter { public function isThenable($value): bool { return $value instanceof SyncPromise; } /** @throws InvariantViolation */ public function convertThenable($thenable): Promise { if (! $thenable instanceof SyncPromise) { // End-users should always use Deferred (and don't use SyncPromise directly) $deferred = Deferred::class; $safeThenable = Utils::printSafe($thenable); throw new InvariantViolation("Expected instance of {$deferred}, got {$safeThenable}"); } return new Promise($thenable, $this); } /** @throws InvariantViolation */ public function then(Promise $promise, ?callable $onFulfilled = null, ?callable $onRejected = null): Promise { $adoptedPromise = $promise->adoptedPromise; assert($adoptedPromise instanceof SyncPromise); return new Promise($adoptedPromise->then($onFulfilled, $onRejected), $this); } /** * @throws \Exception * @throws InvariantViolation */ public function create(callable $resolver): Promise { $promise = new SyncPromise(); try { $resolver( [$promise, 'resolve'], [$promise, 'reject'] ); } catch (\Throwable $e) { $promise->reject($e); } return new Promise($promise, $this); } /** * @throws \Exception * @throws InvariantViolation */ public function createFulfilled($value = null): Promise { $promise = new SyncPromise(); return new Promise($promise->resolve($value), $this); } /** * @throws \Exception * @throws InvariantViolation */ public function createRejected(\Throwable $reason): Promise { $promise = new SyncPromise(); return new Promise($promise->reject($reason), $this); } /** * @throws \Exception * @throws InvariantViolation */ public function all(iterable $promisesOrValues): Promise { $all = new SyncPromise(); $total = is_array($promisesOrValues) ? count($promisesOrValues) : iterator_count($promisesOrValues); $count = 0; $result = []; $resolveAllWhenFinished = function () use (&$count, &$total, $all, &$result): void { if ($count === $total) { $all->resolve($result); } }; foreach ($promisesOrValues as $index => $promiseOrValue) { if ($promiseOrValue instanceof Promise) { $result[$index] = null; $promiseOrValue->then( static function ($value) use (&$result, $index, &$count, &$resolveAllWhenFinished): void { $result[$index] = $value; ++$count; $resolveAllWhenFinished(); }, [$all, 'reject'] ); } else { $result[$index] = $promiseOrValue; ++$count; } } $resolveAllWhenFinished(); return new Promise($all, $this); } /** * Synchronously wait when promise completes. * * @throws InvariantViolation * * @return mixed */ public function wait(Promise $promise) { $this->beforeWait($promise); $taskQueue = SyncPromise::getQueue(); $syncPromise = $promise->adoptedPromise; assert($syncPromise instanceof SyncPromise); while ( $syncPromise->state === SyncPromise::PENDING && ! $taskQueue->isEmpty() ) { SyncPromise::runQueue(); $this->onWait($promise); } if ($syncPromise->state === SyncPromise::FULFILLED) { return $syncPromise->result; } if ($syncPromise->state === SyncPromise::REJECTED) { throw $syncPromise->result; } throw new InvariantViolation('Could not resolve promise'); } /** Execute just before starting to run promise completion. */ protected function beforeWait(Promise $promise): void {} /** Execute while running promise completion. */ protected function onWait(Promise $promise): void {} } graphql/lib/Executor/Promise/Adapter/SyncPromise.php000064400000014315151666572100016545 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor\Promise\Adapter; use YOOtheme\GraphQL\Error\InvariantViolation; /** * Simplistic (yet full-featured) implementation of Promises A+ spec for regular PHP `sync` mode * (using queue to defer promises execution). * * Library users are not supposed to use SyncPromise class in their resolvers. * Instead, they should use @see \GraphQL\Deferred which enforces `$executor` callback in the constructor. * * Root SyncPromise without explicit `$executor` will never resolve (actually throw while trying). * The whole point of Deferred is to ensure it never happens and that any resolver creates * at least one $executor to start the promise chain. * * @phpstan-type Executor callable(): mixed */ class SyncPromise { public const PENDING = 'pending'; public const FULFILLED = 'fulfilled'; public const REJECTED = 'rejected'; public string $state = self::PENDING; /** @var mixed */ public $result; /** * Promises created in `then` method of this promise and awaiting resolution of this promise. * * @var array< * int, * array{ * self, * (callable(mixed): mixed)|null, * (callable(\Throwable): mixed)|null * } * > */ protected array $waiting = []; public static function runQueue(): void { $q = self::getQueue(); while (! $q->isEmpty()) { $task = $q->dequeue(); $task(); } } /** @param Executor|null $executor */ public function __construct(?callable $executor = null) { if ($executor === null) { return; } self::getQueue()->enqueue(function () use ($executor): void { try { $this->resolve($executor()); } catch (\Throwable $e) { $this->reject($e); } }); } /** * @param mixed $value * * @throws \Exception */ public function resolve($value): self { switch ($this->state) { case self::PENDING: if ($value === $this) { throw new \Exception('Cannot resolve promise with self'); } if (is_object($value) && method_exists($value, 'then')) { $value->then( function ($resolvedValue): void { $this->resolve($resolvedValue); }, function ($reason): void { $this->reject($reason); } ); return $this; } $this->state = self::FULFILLED; $this->result = $value; $this->enqueueWaitingPromises(); break; case self::FULFILLED: if ($this->result !== $value) { throw new \Exception('Cannot change value of fulfilled promise'); } break; case self::REJECTED: throw new \Exception('Cannot resolve rejected promise'); } return $this; } /** * @throws \Exception * * @return $this */ public function reject(\Throwable $reason): self { switch ($this->state) { case self::PENDING: $this->state = self::REJECTED; $this->result = $reason; $this->enqueueWaitingPromises(); break; case self::REJECTED: if ($reason !== $this->result) { throw new \Exception('Cannot change rejection reason'); } break; case self::FULFILLED: throw new \Exception('Cannot reject fulfilled promise'); } return $this; } /** @throws InvariantViolation */ private function enqueueWaitingPromises(): void { if ($this->state === self::PENDING) { throw new InvariantViolation('Cannot enqueue derived promises when parent is still pending'); } foreach ($this->waiting as $descriptor) { self::getQueue()->enqueue(function () use ($descriptor): void { [$promise, $onFulfilled, $onRejected] = $descriptor; if ($this->state === self::FULFILLED) { try { $promise->resolve($onFulfilled === null ? $this->result : $onFulfilled($this->result)); } catch (\Throwable $e) { $promise->reject($e); } } elseif ($this->state === self::REJECTED) { try { if ($onRejected === null) { $promise->reject($this->result); } else { $promise->resolve($onRejected($this->result)); } } catch (\Throwable $e) { $promise->reject($e); } } }); } $this->waiting = []; } /** @return \SplQueue<callable(): void> */ public static function getQueue(): \SplQueue { static $queue; return $queue ??= new \SplQueue(); } /** * @param (callable(mixed): mixed)|null $onFulfilled * @param (callable(\Throwable): mixed)|null $onRejected * * @throws InvariantViolation */ public function then(?callable $onFulfilled = null, ?callable $onRejected = null): self { if ($this->state === self::REJECTED && $onRejected === null) { return $this; } if ($this->state === self::FULFILLED && $onFulfilled === null) { return $this; } $tmp = new self(); $this->waiting[] = [$tmp, $onFulfilled, $onRejected]; if ($this->state !== self::PENDING) { $this->enqueueWaitingPromises(); } return $tmp; } /** * @param callable(\Throwable): mixed $onRejected * * @throws InvariantViolation */ public function catch(callable $onRejected): self { return $this->then(null, $onRejected); } } graphql/lib/Executor/Promise/PromiseAdapter.php000064400000003727151666572100015636 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor\Promise; /** * Provides a means for integration of async PHP platforms ([related docs](data-fetching.md#async-php)). */ interface PromiseAdapter { /** * Is the value a promise or a deferred of the underlying platform? * * @param mixed $value * * @api */ public function isThenable($value): bool; /** * Converts thenable of the underlying platform into GraphQL\Executor\Promise\Promise instance. * * @param mixed $thenable * * @api */ public function convertThenable($thenable): Promise; /** * Accepts our Promise wrapper, extracts adopted promise out of it and executes actual `then` logic described * in Promises/A+ specs. Then returns new wrapped instance of GraphQL\Executor\Promise\Promise. * * @api */ public function then(Promise $promise, ?callable $onFulfilled = null, ?callable $onRejected = null): Promise; /** * Creates a Promise from the given resolver callable. * * @param callable(callable $resolve, callable $reject): void $resolver * * @api */ public function create(callable $resolver): Promise; /** * Creates a fulfilled Promise for a value if the value is not a promise. * * @param mixed $value * * @api */ public function createFulfilled($value = null): Promise; /** * Creates a rejected promise for a reason if the reason is not a promise. * * If the provided reason is a promise, then it is returned as-is. * * @api */ public function createRejected(\Throwable $reason): Promise; /** * Given an iterable of promises (or values), returns a promise that is fulfilled when all the * items in the iterable are fulfilled. * * @param iterable<Promise|mixed> $promisesOrValues * * @api */ public function all(iterable $promisesOrValues): Promise; } graphql/lib/Executor/Promise/Promise.php000064400000002112151666572100014320 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Executor\Promise; use Amp\Promise as AmpPromise; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Promise\Adapter\SyncPromise; use React\Promise\PromiseInterface as ReactPromise; /** * Convenience wrapper for promises represented by Promise Adapter. */ class Promise { /** @var SyncPromise|ReactPromise<mixed>|AmpPromise<mixed> */ public $adoptedPromise; private PromiseAdapter $adapter; /** * @param mixed $adoptedPromise * * @throws InvariantViolation */ public function __construct($adoptedPromise, PromiseAdapter $adapter) { if ($adoptedPromise instanceof self) { throw new InvariantViolation('Expecting promise from adapted system, got ' . self::class); } $this->adoptedPromise = $adoptedPromise; $this->adapter = $adapter; } public function then(?callable $onFulfilled = null, ?callable $onRejected = null): Promise { return $this->adapter->then($this, $onFulfilled, $onRejected); } } graphql/lib/Server/RequestError.php000064400000000370151666572100013402 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server; use YOOtheme\GraphQL\Error\ClientAware; class RequestError extends \Exception implements ClientAware { public function isClientSafe(): bool { return true; } } graphql/lib/Server/OperationParams.php000064400000006732151666572100014054 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server; /** * Structure representing parsed HTTP parameters for GraphQL operation. * * The properties in this class are not strictly typed, as this class * is only meant to serve as an intermediary representation which is * not yet validated. */ class OperationParams { /** * Id of the query (when using persisted queries). * * Valid aliases (case-insensitive): * - id * - queryId * - documentId * * @api * * @var mixed should be string|null */ public $queryId; /** * A document containing GraphQL operations and fragments to execute. * * @api * * @var mixed should be string|null */ public $query; /** * The name of the operation in the document to execute. * * @api * * @var mixed should be string|null */ public $operation; /** * Values for any variables defined by the operation. * * @api * * @var mixed should be array<string, mixed> */ public $variables; /** * Reserved for implementors to extend the protocol however they see fit. * * @api * * @var mixed should be array<string, mixed> */ public $extensions; /** * Executed in read-only context (e.g. via HTTP GET request)? * * @api */ public bool $readOnly; /** * The raw params used to construct this instance. * * @api * * @var array<string, mixed> */ public array $originalInput; /** * Creates an instance from given array. * * @param array<string, mixed> $params * * @api */ public static function create(array $params, bool $readonly = false): OperationParams { $instance = new static(); $params = array_change_key_case($params, \CASE_LOWER); $instance->originalInput = $params; $params += [ 'query' => null, 'queryid' => null, 'documentid' => null, // alias to queryid 'id' => null, // alias to queryid 'operationname' => null, 'variables' => null, 'extensions' => null, ]; foreach ($params as &$value) { if ($value === '') { $value = null; } } $instance->query = $params['query']; $instance->queryId = $params['queryid'] ?? $params['documentid'] ?? $params['id']; $instance->operation = $params['operationname']; $instance->variables = static::decodeIfJSON($params['variables']); $instance->extensions = static::decodeIfJSON($params['extensions']); $instance->readOnly = $readonly; // Apollo server/client compatibility if ( isset($instance->extensions['persistedQuery']['sha256Hash']) && $instance->queryId === null ) { $instance->queryId = $instance->extensions['persistedQuery']['sha256Hash']; } return $instance; } /** * Decodes the value if it is JSON, otherwise returns it unchanged. * * @param mixed $value * * @return mixed */ protected static function decodeIfJSON($value) { if (! is_string($value)) { return $value; } $decoded = json_decode($value, true); if (json_last_error() === \JSON_ERROR_NONE) { return $decoded; } return $value; } } graphql/lib/Server/Exception/InvalidQueryParameter.php000064400000000255151666572100017155 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class InvalidQueryParameter extends RequestError {} graphql/lib/Server/Exception/CannotReadBody.php000064400000000246151666572100015534 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class CannotReadBody extends RequestError {} graphql/lib/Server/Exception/UnexpectedContentType.php000064400000000255151666572100017201 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class UnexpectedContentType extends RequestError {} graphql/lib/Server/Exception/CannotParseJsonBody.php000064400000000253151666572100016563 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class CannotParseJsonBody extends RequestError {} graphql/lib/Server/Exception/InvalidOperationParameter.php000064400000000261151666572100020005 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class InvalidOperationParameter extends RequestError {} graphql/lib/Server/Exception/CannotParseVariables.php000064400000000254151666572100016745 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class CannotParseVariables extends RequestError {} graphql/lib/Server/Exception/FailedToDetermineOperationType.php000064400000000266151666572100020751 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class FailedToDetermineOperationType extends RequestError {} graphql/lib/Server/Exception/MissingContentTypeHeader.php000064400000000260151666572100017613 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class MissingContentTypeHeader extends RequestError {} graphql/lib/Server/Exception/MissingQueryOrQueryIdParameter.php000064400000000266151666572100021006 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class MissingQueryOrQueryIdParameter extends RequestError {} graphql/lib/Server/Exception/PersistedQueriesAreNotSupported.php000064400000000267151666572100021222 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class PersistedQueriesAreNotSupported extends RequestError {} graphql/lib/Server/Exception/HttpMethodNotSupported.php000064400000000256151666572100017350 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class HttpMethodNotSupported extends RequestError {} graphql/lib/Server/Exception/BatchedQueriesAreNotSupported.php000064400000000265151666572100020610 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class BatchedQueriesAreNotSupported extends RequestError {} graphql/lib/Server/Exception/GetMethodSupportsOnlyQueryOperation.php000064400000000273151666572100022111 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class GetMethodSupportsOnlyQueryOperation extends RequestError {} graphql/lib/Server/Exception/InvalidQueryIdParameter.php000064400000000257151666572100017434 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server\Exception; use YOOtheme\GraphQL\Server\RequestError; class InvalidQueryIdParameter extends RequestError {} graphql/lib/Server/Helper.php000064400000046074151666572100012172 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\FormattedError; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\ExecutionResult; use YOOtheme\GraphQL\Executor\Executor; use YOOtheme\GraphQL\Executor\Promise\Adapter\SyncPromiseAdapter; use YOOtheme\GraphQL\Executor\Promise\Promise; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use YOOtheme\GraphQL\GraphQL; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\Parser; use YOOtheme\GraphQL\Server\Exception\BatchedQueriesAreNotSupported; use YOOtheme\GraphQL\Server\Exception\CannotParseJsonBody; use YOOtheme\GraphQL\Server\Exception\CannotParseVariables; use YOOtheme\GraphQL\Server\Exception\CannotReadBody; use YOOtheme\GraphQL\Server\Exception\FailedToDetermineOperationType; use YOOtheme\GraphQL\Server\Exception\GetMethodSupportsOnlyQueryOperation; use YOOtheme\GraphQL\Server\Exception\HttpMethodNotSupported; use YOOtheme\GraphQL\Server\Exception\InvalidOperationParameter; use YOOtheme\GraphQL\Server\Exception\InvalidQueryIdParameter; use YOOtheme\GraphQL\Server\Exception\InvalidQueryParameter; use YOOtheme\GraphQL\Server\Exception\MissingContentTypeHeader; use YOOtheme\GraphQL\Server\Exception\MissingQueryOrQueryIdParameter; use YOOtheme\GraphQL\Server\Exception\PersistedQueriesAreNotSupported; use YOOtheme\GraphQL\Server\Exception\UnexpectedContentType; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Utils\Utils; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\StreamInterface; /** * Contains functionality that could be re-used by various server implementations. * * @see \GraphQL\Tests\Server\HelperTest */ class Helper { /** * Parses HTTP request using PHP globals and returns GraphQL OperationParams * contained in this request. For batched requests it returns an array of OperationParams. * * This function does not check validity of these params * (validation is performed separately in validateOperationParams() method). * * If $readRawBodyFn argument is not provided - will attempt to read raw request body * from `php://input` stream. * * Internally it normalizes input to $method, $bodyParams and $queryParams and * calls `parseRequestParams()` to produce actual return value. * * For PSR-7 request parsing use `parsePsrRequest()` instead. * * @throws RequestError * * @return OperationParams|array<int, OperationParams> * * @api */ public function parseHttpRequest(?callable $readRawBodyFn = null) { $method = $_SERVER['REQUEST_METHOD'] ?? null; $bodyParams = []; $urlParams = $_GET; if ($method === 'POST') { $contentType = $_SERVER['CONTENT_TYPE'] ?? null; if ($contentType === null) { throw new MissingContentTypeHeader('Missing "Content-Type" header'); } if (stripos($contentType, 'application/graphql') !== false) { $rawBody = $readRawBodyFn === null ? $this->readRawBody() : $readRawBodyFn(); $bodyParams = ['query' => $rawBody]; } elseif (stripos($contentType, 'application/json') !== false) { $rawBody = $readRawBodyFn === null ? $this->readRawBody() : $readRawBodyFn(); $bodyParams = $this->decodeJson($rawBody); $this->assertJsonObjectOrArray($bodyParams); } elseif (stripos($contentType, 'application/x-www-form-urlencoded') !== false) { $bodyParams = $_POST; } elseif (stripos($contentType, 'multipart/form-data') !== false) { $bodyParams = $_POST; } else { throw new UnexpectedContentType('Unexpected content type: ' . Utils::printSafeJson($contentType)); } } return $this->parseRequestParams($method, $bodyParams, $urlParams); } /** * Parses normalized request params and returns instance of OperationParams * or array of OperationParams in case of batch operation. * * Returned value is a suitable input for `executeOperation` or `executeBatch` (if array) * * @param array<mixed> $bodyParams * @param array<mixed> $queryParams * * @throws RequestError * * @return OperationParams|array<int, OperationParams> * * @api */ public function parseRequestParams(string $method, array $bodyParams, array $queryParams) { if ($method === 'GET') { return OperationParams::create($queryParams, true); } if ($method === 'POST') { if (isset($bodyParams[0])) { $operations = []; foreach ($bodyParams as $entry) { $operations[] = OperationParams::create($entry); } return $operations; } return OperationParams::create($bodyParams); } throw new HttpMethodNotSupported("HTTP Method \"{$method}\" is not supported"); } /** * Checks validity of OperationParams extracted from HTTP request and returns an array of errors * if params are invalid (or empty array when params are valid). * * @return list<RequestError> * * @api */ public function validateOperationParams(OperationParams $params): array { $errors = []; $query = $params->query ?? ''; $queryId = $params->queryId ?? ''; if ($query === '' && $queryId === '') { $errors[] = new MissingQueryOrQueryIdParameter('GraphQL Request must include at least one of those two parameters: "query" or "queryId"'); } if (! is_string($query)) { $errors[] = new InvalidQueryParameter( 'GraphQL Request parameter "query" must be string, but got ' . Utils::printSafeJson($params->query) ); } if (! is_string($queryId)) { $errors[] = new InvalidQueryIdParameter( 'GraphQL Request parameter "queryId" must be string, but got ' . Utils::printSafeJson($params->queryId) ); } if ($params->operation !== null && ! is_string($params->operation)) { $errors[] = new InvalidOperationParameter( 'GraphQL Request parameter "operation" must be string, but got ' . Utils::printSafeJson($params->operation) ); } if ($params->variables !== null && (! is_array($params->variables) || isset($params->variables[0]))) { $errors[] = new CannotParseVariables( 'GraphQL Request parameter "variables" must be object or JSON string parsed to object, but got ' . Utils::printSafeJson($params->originalInput['variables']) ); } return $errors; } /** * Executes GraphQL operation with given server configuration and returns execution result * (or promise when promise adapter is different from SyncPromiseAdapter). * * @throws \Exception * @throws InvariantViolation * * @return ExecutionResult|Promise * * @api */ public function executeOperation(ServerConfig $config, OperationParams $op) { $promiseAdapter = $config->getPromiseAdapter() ?? Executor::getDefaultPromiseAdapter(); $result = $this->promiseToExecuteOperation($promiseAdapter, $config, $op); if ($promiseAdapter instanceof SyncPromiseAdapter) { $result = $promiseAdapter->wait($result); } return $result; } /** * Executes batched GraphQL operations with shared promise queue * (thus, effectively batching deferreds|promises of all queries at once). * * @param array<OperationParams> $operations * * @throws \Exception * @throws InvariantViolation * * @return array<int, ExecutionResult>|Promise * * @api */ public function executeBatch(ServerConfig $config, array $operations) { $promiseAdapter = $config->getPromiseAdapter() ?? Executor::getDefaultPromiseAdapter(); $result = []; foreach ($operations as $operation) { $result[] = $this->promiseToExecuteOperation($promiseAdapter, $config, $operation, true); } $result = $promiseAdapter->all($result); // Wait for promised results when using sync promises if ($promiseAdapter instanceof SyncPromiseAdapter) { $result = $promiseAdapter->wait($result); } return $result; } /** * @throws \Exception * @throws InvariantViolation */ protected function promiseToExecuteOperation( PromiseAdapter $promiseAdapter, ServerConfig $config, OperationParams $op, bool $isBatch = false ): Promise { try { if ($config->getSchema() === null) { throw new InvariantViolation('Schema is required for the server'); } if ($isBatch && ! $config->getQueryBatching()) { throw new BatchedQueriesAreNotSupported('Batched queries are not supported by this server'); } $errors = $this->validateOperationParams($op); if ($errors !== []) { $locatedErrors = array_map( [Error::class, 'createLocatedError'], $errors ); return $promiseAdapter->createFulfilled( new ExecutionResult(null, $locatedErrors) ); } $doc = $op->queryId !== null ? $this->loadPersistedQuery($config, $op) : $op->query; if (! $doc instanceof DocumentNode) { $doc = Parser::parse($doc); } $operationAST = AST::getOperationAST($doc, $op->operation); if ($operationAST === null) { throw new FailedToDetermineOperationType('Failed to determine operation type'); } $operationType = $operationAST->operation; if ($operationType !== 'query' && $op->readOnly) { throw new GetMethodSupportsOnlyQueryOperation('GET supports only query operation'); } $result = GraphQL::promiseToExecute( $promiseAdapter, $config->getSchema(), $doc, $this->resolveRootValue($config, $op, $doc, $operationType), $this->resolveContextValue($config, $op, $doc, $operationType), $op->variables, $op->operation, $config->getFieldResolver(), $this->resolveValidationRules($config, $op, $doc, $operationType) ); } catch (RequestError $e) { $result = $promiseAdapter->createFulfilled( new ExecutionResult(null, [Error::createLocatedError($e)]) ); } catch (Error $e) { $result = $promiseAdapter->createFulfilled( new ExecutionResult(null, [$e]) ); } $applyErrorHandling = static function (ExecutionResult $result) use ($config): ExecutionResult { $result->setErrorsHandler($config->getErrorsHandler()); $result->setErrorFormatter( FormattedError::prepareFormatter( $config->getErrorFormatter(), $config->getDebugFlag() ) ); return $result; }; return $result->then($applyErrorHandling); } /** * @throws RequestError * * @return mixed */ protected function loadPersistedQuery(ServerConfig $config, OperationParams $operationParams) { $loader = $config->getPersistedQueryLoader(); if ($loader === null) { throw new PersistedQueriesAreNotSupported('Persisted queries are not supported by this server'); } $source = $loader($operationParams->queryId, $operationParams); // @phpstan-ignore-next-line Necessary until PHP gains function types if (! is_string($source) && ! $source instanceof DocumentNode) { $documentNode = DocumentNode::class; $safeSource = Utils::printSafe($source); throw new InvariantViolation("Persisted query loader must return query string or instance of {$documentNode} but got: {$safeSource}"); } return $source; } /** @return array<mixed>|null */ protected function resolveValidationRules( ServerConfig $config, OperationParams $params, DocumentNode $doc, string $operationType ): ?array { $validationRules = $config->getValidationRules(); if (is_callable($validationRules)) { $validationRules = $validationRules($params, $doc, $operationType); } // @phpstan-ignore-next-line unless PHP gains function types, we have to check this at runtime if ($validationRules !== null && ! is_array($validationRules)) { $safeValidationRules = Utils::printSafe($validationRules); throw new InvariantViolation("Expecting validation rules to be array or callable returning array, but got: {$safeValidationRules}"); } return $validationRules; } /** @return mixed */ protected function resolveRootValue( ServerConfig $config, OperationParams $params, DocumentNode $doc, string $operationType ) { $rootValue = $config->getRootValue(); if (is_callable($rootValue)) { $rootValue = $rootValue($params, $doc, $operationType); } return $rootValue; } /** @return mixed user defined */ protected function resolveContextValue( ServerConfig $config, OperationParams $params, DocumentNode $doc, string $operationType ) { $context = $config->getContext(); if (is_callable($context)) { $context = $context($params, $doc, $operationType); } return $context; } /** * Send response using standard PHP `header()` and `echo`. * * @param Promise|ExecutionResult|array<ExecutionResult> $result * * @api * * @throws \JsonException */ public function sendResponse($result): void { if ($result instanceof Promise) { $result->then(function ($actualResult): void { $this->emitResponse($actualResult); }); } else { $this->emitResponse($result); } } /** * @param array<mixed>|\JsonSerializable $jsonSerializable * * @throws \JsonException */ protected function emitResponse($jsonSerializable): void { header('Content-Type: application/json;charset=utf-8'); echo json_encode($jsonSerializable, JSON_UNESCAPED_UNICODE | JSON_THROW_ON_ERROR); } /** @throws RequestError */ protected function readRawBody(): string { $body = file_get_contents('php://input'); if ($body === false) { throw new CannotReadBody('Cannot not read body.'); } return $body; } /** * Converts PSR-7 request to OperationParams or an array thereof. * * @throws RequestError * * @return OperationParams|array<OperationParams> * * @api */ public function parsePsrRequest(RequestInterface $request) { if ($request->getMethod() === 'GET') { $bodyParams = []; } else { $contentType = $request->getHeader('content-type'); if (! isset($contentType[0])) { throw new MissingContentTypeHeader('Missing "Content-Type" header'); } if (stripos($contentType[0], 'application/graphql') !== false) { $bodyParams = ['query' => (string) $request->getBody()]; } elseif (stripos($contentType[0], 'application/json') !== false) { $bodyParams = $request instanceof ServerRequestInterface ? $request->getParsedBody() : $this->decodeJson((string) $request->getBody()); $this->assertJsonObjectOrArray($bodyParams); } else { if ($request instanceof ServerRequestInterface) { $bodyParams = $request->getParsedBody(); } $bodyParams ??= $this->decodeContent((string) $request->getBody()); } } parse_str(html_entity_decode($request->getUri()->getQuery()), $queryParams); return $this->parseRequestParams( $request->getMethod(), $bodyParams, $queryParams ); } /** * @throws RequestError * * @return mixed */ protected function decodeJson(string $rawBody) { $bodyParams = json_decode($rawBody, true); if (json_last_error() !== \JSON_ERROR_NONE) { throw new CannotParseJsonBody('Expected JSON object or array for "application/json" request, but failed to parse because: ' . json_last_error_msg()); } return $bodyParams; } /** @return array<mixed> */ protected function decodeContent(string $rawBody): array { parse_str($rawBody, $bodyParams); return $bodyParams; } /** * @param mixed $bodyParams * * @throws RequestError */ protected function assertJsonObjectOrArray($bodyParams): void { if (! is_array($bodyParams)) { $notArray = Utils::printSafeJson($bodyParams); throw new CannotParseJsonBody("Expected JSON object or array for \"application/json\" request, got: {$notArray}"); } } /** * Converts query execution result to PSR-7 response. * * @param Promise|ExecutionResult|array<ExecutionResult> $result * * @throws \InvalidArgumentException * @throws \JsonException * @throws \RuntimeException * * @return Promise|ResponseInterface * * @api */ public function toPsrResponse($result, ResponseInterface $response, StreamInterface $writableBodyStream) { if ($result instanceof Promise) { return $result->then( fn ($actualResult): ResponseInterface => $this->doConvertToPsrResponse($actualResult, $response, $writableBodyStream) ); } return $this->doConvertToPsrResponse($result, $response, $writableBodyStream); } /** * @param ExecutionResult|array<ExecutionResult> $result * * @throws \InvalidArgumentException * @throws \JsonException * @throws \RuntimeException */ protected function doConvertToPsrResponse($result, ResponseInterface $response, StreamInterface $writableBodyStream): ResponseInterface { $writableBodyStream->write(json_encode($result, JSON_THROW_ON_ERROR)); return $response ->withHeader('Content-Type', 'application/json') ->withBody($writableBodyStream); } } graphql/lib/Server/StandardServer.php000064400000012103151666572100013664 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\ExecutionResult; use YOOtheme\GraphQL\Executor\Promise\Promise; use YOOtheme\GraphQL\Utils\Utils; use Psr\Http\Message\RequestInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\StreamInterface; /** * GraphQL server compatible with both: [express-graphql](https://github.com/graphql/express-graphql) * and [Apollo Server](https://github.com/apollographql/graphql-server). * Usage Example:. * * $server = new StandardServer([ * 'schema' => $mySchema * ]); * $server->handleRequest(); * * Or using [ServerConfig](class-reference.md#graphqlserverserverconfig) instance: * * $config = GraphQL\Server\ServerConfig::create() * ->setSchema($mySchema) * ->setContext($myContext); * * $server = new GraphQL\Server\StandardServer($config); * $server->handleRequest(); * * See [dedicated section in docs](executing-queries.md#using-server) for details. * * @see \GraphQL\Tests\Server\StandardServerTest */ class StandardServer { protected ServerConfig $config; protected Helper $helper; /** * @param ServerConfig|array<string, mixed> $config * * @api * * @throws InvariantViolation */ public function __construct($config) { if (is_array($config)) { $config = ServerConfig::create($config); } // @phpstan-ignore-next-line necessary until we can use proper union types if (! $config instanceof ServerConfig) { $safeConfig = Utils::printSafe($config); throw new InvariantViolation("Expecting valid server config, but got {$safeConfig}"); } $this->config = $config; $this->helper = new Helper(); } /** * Parses HTTP request, executes and emits response (using standard PHP `header` function and `echo`). * * When $parsedBody is not set, it uses PHP globals to parse a request. * It is possible to implement request parsing elsewhere (e.g. using framework Request instance) * and then pass it to the server. * * See `executeRequest()` if you prefer to emit the response yourself * (e.g. using the Response object of some framework). * * @param OperationParams|array<OperationParams> $parsedBody * * @api * * @throws \Exception * @throws InvariantViolation * @throws RequestError */ public function handleRequest($parsedBody = null): void { $result = $this->executeRequest($parsedBody); $this->helper->sendResponse($result); } /** * Executes a GraphQL operation and returns an execution result * (or promise when promise adapter is different from SyncPromiseAdapter). * * When $parsedBody is not set, it uses PHP globals to parse a request. * It is possible to implement request parsing elsewhere (e.g. using framework Request instance) * and then pass it to the server. * * PSR-7 compatible method executePsrRequest() does exactly this. * * @param OperationParams|array<OperationParams> $parsedBody * * @throws \Exception * @throws InvariantViolation * @throws RequestError * * @return ExecutionResult|array<int, ExecutionResult>|Promise * * @api */ public function executeRequest($parsedBody = null) { if ($parsedBody === null) { $parsedBody = $this->helper->parseHttpRequest(); } if (is_array($parsedBody)) { return $this->helper->executeBatch($this->config, $parsedBody); } return $this->helper->executeOperation($this->config, $parsedBody); } /** * Executes PSR-7 request and fulfills PSR-7 response. * * See `executePsrRequest()` if you prefer to create response yourself * (e.g. using specific JsonResponse instance of some framework). * * @throws \Exception * @throws \InvalidArgumentException * @throws \JsonException * @throws \RuntimeException * @throws InvariantViolation * @throws RequestError * * @return ResponseInterface|Promise * * @api */ public function processPsrRequest( RequestInterface $request, ResponseInterface $response, StreamInterface $writableBodyStream ) { $result = $this->executePsrRequest($request); return $this->helper->toPsrResponse($result, $response, $writableBodyStream); } /** * Executes GraphQL operation and returns execution result * (or promise when promise adapter is different from SyncPromiseAdapter). * * @throws \Exception * @throws \JsonException * @throws InvariantViolation * @throws RequestError * * @return ExecutionResult|array<int, ExecutionResult>|Promise * * @api */ public function executePsrRequest(RequestInterface $request) { $parsedBody = $this->helper->parsePsrRequest($request); return $this->executeRequest($parsedBody); } } graphql/lib/Server/ServerConfig.php000064400000021234151666572100013336 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Server; use YOOtheme\GraphQL\Error\DebugFlag; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\ExecutionResult; use YOOtheme\GraphQL\Executor\Promise\PromiseAdapter; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\Utils; use YOOtheme\GraphQL\Validator\Rules\ValidationRule; /** * Server configuration class. * Could be passed directly to server constructor. List of options accepted by **create** method is * [described in docs](executing-queries.md#server-configuration-options). * * Usage example: * * $config = GraphQL\Server\ServerConfig::create() * ->setSchema($mySchema) * ->setContext($myContext); * * $server = new GraphQL\Server\StandardServer($config); * * @see ExecutionResult * * @phpstan-type PersistedQueryLoader callable(string $queryId, OperationParams $operation): (string|DocumentNode) * @phpstan-type RootValueResolver callable(OperationParams $operation, DocumentNode $doc, string $operationType): mixed * @phpstan-type ValidationRulesOption array<ValidationRule>|null|callable(OperationParams $operation, DocumentNode $doc, string $operationType): array<ValidationRule> * * @phpstan-import-type ErrorsHandler from ExecutionResult * @phpstan-import-type ErrorFormatter from ExecutionResult * * @see \GraphQL\Tests\Server\ServerConfigTest */ class ServerConfig { /** * Converts an array of options to instance of ServerConfig * (or just returns empty config when array is not passed). * * @param array<string, mixed> $config * * @api * * @throws InvariantViolation */ public static function create(array $config = []): self { $instance = new static(); foreach ($config as $key => $value) { switch ($key) { case 'schema': $instance->setSchema($value); break; case 'rootValue': $instance->setRootValue($value); break; case 'context': $instance->setContext($value); break; case 'fieldResolver': $instance->setFieldResolver($value); break; case 'validationRules': $instance->setValidationRules($value); break; case 'queryBatching': $instance->setQueryBatching($value); break; case 'debugFlag': $instance->setDebugFlag($value); break; case 'persistedQueryLoader': $instance->setPersistedQueryLoader($value); break; case 'errorFormatter': $instance->setErrorFormatter($value); break; case 'errorsHandler': $instance->setErrorsHandler($value); break; case 'promiseAdapter': $instance->setPromiseAdapter($value); break; default: throw new InvariantViolation("Unknown server config option: {$key}"); } } return $instance; } private ?Schema $schema = null; /** @var mixed|callable(self, OperationParams, DocumentNode): mixed|null */ private $context; /** * @var mixed|callable * * @phpstan-var mixed|RootValueResolver */ private $rootValue; /** * @var callable|null * * @phpstan-var ErrorFormatter|null */ private $errorFormatter; /** * @var callable|null * * @phpstan-var ErrorsHandler|null */ private $errorsHandler; private int $debugFlag = DebugFlag::NONE; private bool $queryBatching = false; /** * @var array<ValidationRule>|callable|null * * @phpstan-var ValidationRulesOption */ private $validationRules; /** @var callable|null */ private $fieldResolver; private ?PromiseAdapter $promiseAdapter = null; /** * @var callable|null * * @phpstan-var PersistedQueryLoader|null */ private $persistedQueryLoader; /** @api */ public function setSchema(Schema $schema): self { $this->schema = $schema; return $this; } /** * @param mixed|callable $context * * @api */ public function setContext($context): self { $this->context = $context; return $this; } /** * @param mixed|callable $rootValue * * @phpstan-param mixed|RootValueResolver $rootValue * * @api */ public function setRootValue($rootValue): self { $this->rootValue = $rootValue; return $this; } /** * @phpstan-param ErrorFormatter $errorFormatter * * @api */ public function setErrorFormatter(callable $errorFormatter): self { $this->errorFormatter = $errorFormatter; return $this; } /** * @phpstan-param ErrorsHandler $handler * * @api */ public function setErrorsHandler(callable $handler): self { $this->errorsHandler = $handler; return $this; } /** * Set validation rules for this server. * * @param array<ValidationRule>|callable|null $validationRules * * @phpstan-param ValidationRulesOption $validationRules * * @api */ public function setValidationRules($validationRules): self { // @phpstan-ignore-next-line necessary until we can use proper union types if (! is_array($validationRules) && ! is_callable($validationRules) && $validationRules !== null) { $invalidValidationRules = Utils::printSafe($validationRules); throw new InvariantViolation("Server config expects array of validation rules or callable returning such array, but got {$invalidValidationRules}"); } $this->validationRules = $validationRules; return $this; } /** @api */ public function setFieldResolver(callable $fieldResolver): self { $this->fieldResolver = $fieldResolver; return $this; } /** * @phpstan-param PersistedQueryLoader|null $persistedQueryLoader * * @api */ public function setPersistedQueryLoader(?callable $persistedQueryLoader): self { $this->persistedQueryLoader = $persistedQueryLoader; return $this; } /** * Set response debug flags. * * @see \GraphQL\Error\DebugFlag class for a list of all available flags * * @api */ public function setDebugFlag(int $debugFlag = DebugFlag::INCLUDE_DEBUG_MESSAGE): self { $this->debugFlag = $debugFlag; return $this; } /** * Allow batching queries (disabled by default). * * @api */ public function setQueryBatching(bool $enableBatching): self { $this->queryBatching = $enableBatching; return $this; } /** @api */ public function setPromiseAdapter(PromiseAdapter $promiseAdapter): self { $this->promiseAdapter = $promiseAdapter; return $this; } /** @return mixed|callable */ public function getContext() { return $this->context; } /** * @return mixed|callable * * @phpstan-return mixed|RootValueResolver */ public function getRootValue() { return $this->rootValue; } public function getSchema(): ?Schema { return $this->schema; } /** @phpstan-return ErrorFormatter|null */ public function getErrorFormatter(): ?callable { return $this->errorFormatter; } /** @phpstan-return ErrorsHandler|null */ public function getErrorsHandler(): ?callable { return $this->errorsHandler; } public function getPromiseAdapter(): ?PromiseAdapter { return $this->promiseAdapter; } /** * @return array<ValidationRule>|callable|null * * @phpstan-return ValidationRulesOption */ public function getValidationRules() { return $this->validationRules; } public function getFieldResolver(): ?callable { return $this->fieldResolver; } /** @phpstan-return PersistedQueryLoader|null */ public function getPersistedQueryLoader(): ?callable { return $this->persistedQueryLoader; } public function getDebugFlag(): int { return $this->debugFlag; } public function getQueryBatching(): bool { return $this->queryBatching; } } graphql/lib/Deferred.php000064400000000771151666572100011217 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL; use YOOtheme\GraphQL\Executor\Promise\Adapter\SyncPromise; /** * @phpstan-import-type Executor from SyncPromise */ class Deferred extends SyncPromise { /** @param Executor $executor */ public static function create(callable $executor): self { return new self($executor); } /** @param Executor $executor */ public function __construct(callable $executor) { parent::__construct($executor); } } graphql/lib/Language/Token.php000064400000005022151666572100012274 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; /** * Represents a range of characters represented by a lexical token * within a Source. * * @see \GraphQL\Tests\Language\TokenTest */ class Token { // Each kind of token. public const SOF = '<SOF>'; public const EOF = '<EOF>'; public const BANG = '!'; public const DOLLAR = '$'; public const AMP = '&'; public const PAREN_L = '('; public const PAREN_R = ')'; public const SPREAD = '...'; public const COLON = ':'; public const EQUALS = '='; public const AT = '@'; public const BRACKET_L = '['; public const BRACKET_R = ']'; public const BRACE_L = '{'; public const PIPE = '|'; public const BRACE_R = '}'; public const NAME = 'Name'; public const INT = 'Int'; public const FLOAT = 'Float'; public const STRING = 'String'; public const BLOCK_STRING = 'BlockString'; public const COMMENT = 'Comment'; /** The kind of Token (see one of constants above). */ public string $kind; /** The character offset at which this Node begins. */ public int $start; /** The character offset at which this Node ends. */ public int $end; /** The 1-indexed line number on which this Token appears. */ public int $line; /** The 1-indexed column number at which this Token begins. */ public int $column; public ?string $value; /** * Tokens exist as nodes in a double-linked-list amongst all tokens * including ignored tokens. <SOF> is always the first node and <EOF> * the last. */ public ?Token $prev; public ?Token $next = null; public function __construct(string $kind, int $start, int $end, int $line, int $column, ?Token $previous = null, ?string $value = null) { $this->kind = $kind; $this->start = $start; $this->end = $end; $this->line = $line; $this->column = $column; $this->prev = $previous; $this->value = $value; } public function getDescription(): string { return $this->kind . ($this->value === null ? '' : " \"{$this->value}\""); } /** * @return array{ * kind: string, * value: string|null, * line: int, * column: int, * } */ public function toArray(): array { return [ 'kind' => $this->kind, 'value' => $this->value, 'line' => $this->line, 'column' => $this->column, ]; } } graphql/lib/Language/BlockString.php000064400000012046151666572100013441 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; use YOOtheme\GraphQL\Utils\Utils; /** * @see \GraphQL\Tests\Language\BlockStringTest */ class BlockString { /** * Produces the value of a block string from its parsed raw value, similar to * CoffeeScript's block string, Python's docstring trim or Ruby's strip_heredoc. * * This implements the GraphQL spec's BlockStringValue() static algorithm. */ public static function dedentBlockStringLines(string $rawString): string { $lines = Utils::splitLines($rawString); // Remove common indentation from all lines but first. $commonIndent = self::getIndentation($rawString); $linesLength = count($lines); if ($commonIndent > 0) { for ($i = 1; $i < $linesLength; ++$i) { $lines[$i] = mb_substr($lines[$i], $commonIndent); } } // Remove leading and trailing blank lines. $startLine = 0; while ($startLine < $linesLength && self::isBlank($lines[$startLine])) { ++$startLine; } $endLine = $linesLength; while ($endLine > $startLine && self::isBlank($lines[$endLine - 1])) { --$endLine; } // Return a string of the lines joined with U+000A. return implode("\n", array_slice($lines, $startLine, $endLine - $startLine)); } private static function isBlank(string $str): bool { $strLength = mb_strlen($str); for ($i = 0; $i < $strLength; ++$i) { if ($str[$i] !== ' ' && $str[$i] !== '\t') { return false; } } return true; } public static function getIndentation(string $value): int { $isFirstLine = true; $isEmptyLine = true; $indent = 0; $commonIndent = null; $valueLength = mb_strlen($value); for ($i = 0; $i < $valueLength; ++$i) { switch (Utils::charCodeAt($value, $i)) { case 13: // \r if (Utils::charCodeAt($value, $i + 1) === 10) { ++$i; // skip \r\n as one symbol } // falls through // no break case 10: // \n $isFirstLine = false; $isEmptyLine = true; $indent = 0; break; case 9: // \t case 32: // <space> ++$indent; break; default: if ( $isEmptyLine && ! $isFirstLine && ($commonIndent === null || $indent < $commonIndent) ) { $commonIndent = $indent; } $isEmptyLine = false; } } return $commonIndent ?? 0; } /** * Print a block string in the indented block form by adding a leading and * trailing blank line. However, if a block string starts with whitespace and is * a single-line, adding a leading blank line would strip that whitespace. */ public static function print(string $value): string { $escapedValue = str_replace('"""', '\\"""', $value); // Expand a block string's raw value into independent lines. $lines = Utils::splitLines($escapedValue); $isSingleLine = count($lines) === 1; // If common indentation is found we can fix some of those cases by adding leading new line $forceLeadingNewLine = count($lines) > 1; foreach ($lines as $i => $line) { if ($i === 0) { continue; } if ($line !== '' && preg_match('/^\s/', $line) !== 1) { $forceLeadingNewLine = false; } } // Trailing triple quotes just looks confusing but doesn't force trailing new line $hasTrailingTripleQuotes = preg_match('/\\\\"""$/', $escapedValue) === 1; // Trailing quote (single or double) or slash forces trailing new line $hasTrailingQuote = preg_match('/"$/', $value) === 1 && ! $hasTrailingTripleQuotes; $hasTrailingSlash = preg_match('/\\\\$/', $value) === 1; $forceTrailingNewline = $hasTrailingQuote || $hasTrailingSlash; // add leading and trailing new lines only if it improves readability $printAsMultipleLines = ! $isSingleLine || mb_strlen($value) > 70 || $forceTrailingNewline || $forceLeadingNewLine || $hasTrailingTripleQuotes; $result = ''; // Format a multi-line block quote to account for leading space. $skipLeadingNewLine = $isSingleLine && preg_match('/^\s/', $value) === 1; if (($printAsMultipleLines && ! $skipLeadingNewLine) || $forceLeadingNewLine) { $result .= "\n"; } $result .= $escapedValue; if ($printAsMultipleLines) { $result .= "\n"; } return '"""' . $result . '"""'; } } graphql/lib/Language/VisitorSkipNode.php000064400000000176151666572100014315 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; final class VisitorSkipNode extends VisitorOperation {} graphql/lib/Language/Visitor.php000064400000043422151666572100012661 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Utils\TypeInfo; use YOOtheme\GraphQL\Utils\Utils; /** * Utility for efficient AST traversal and modification. * * `visit()` will walk through an AST using a depth first traversal, calling * the visitor's enter function at each node in the traversal, and calling the * leave function after visiting that node and all of its child nodes. * * By returning different values from the `enter` and `leave` functions, the * behavior of the visitor can be altered. * - no return (`void`) or return `null`: no action * - `Visitor::skipNode()`: skips over the subtree at the current node of the AST * - `Visitor::stop()`: stop the Visitor completely * - `Visitor::removeNode()`: remove the current node * - return any other value: replace this node with the returned value * * When using `visit()` to edit an AST, the original AST will not be modified, and * a new version of the AST with the changes applied will be returned from the * visit function. * * $editedAST = Visitor::visit($ast, [ * 'enter' => function (Node $node, $key, $parent, array $path, array $ancestors) { * // ... * }, * 'leave' => function (Node $node, $key, $parent, array $path, array $ancestors) { * // ... * } * ]); * * Alternatively to providing `enter` and `leave` functions, a visitor can * instead provide functions named the same as the [kinds of AST nodes](class-reference.md#graphqllanguageastnodekind), * or enter/leave visitors at a named key, leading to four permutations of * visitor API: * * 1. Named visitors triggered when entering a node a specific kind. * * Visitor::visit($ast, [ * NodeKind::OBJECT_TYPE_DEFINITION => function (ObjectTypeDefinitionNode $node) { * // enter the "ObjectTypeDefinition" node * } * ]); * * 2. Named visitors that trigger upon entering and leaving a node of * a specific kind. * * Visitor::visit($ast, [ * NodeKind::OBJECT_TYPE_DEFINITION => [ * 'enter' => function (ObjectTypeDefinitionNode $node) { * // enter the "ObjectTypeDefinition" node * } * 'leave' => function (ObjectTypeDefinitionNode $node) { * // leave the "ObjectTypeDefinition" node * } * ] * ]); * * 3. Generic visitors that trigger upon entering and leaving any node. * * Visitor::visit($ast, [ * 'enter' => function (Node $node) { * // enter any node * }, * 'leave' => function (Node $node) { * // leave any node * } * ]); * * 4. Parallel visitors for entering and leaving nodes of a specific kind. * * Visitor::visit($ast, [ * 'enter' => [ * NodeKind::OBJECT_TYPE_DEFINITION => function (ObjectTypeDefinitionNode $node) { * // enter the "ObjectTypeDefinition" node * } * }, * 'leave' => [ * NodeKind::OBJECT_TYPE_DEFINITION => function (ObjectTypeDefinitionNode $node) { * // leave the "ObjectTypeDefinition" node * } * ] * ]); * * @phpstan-type NodeVisitor callable(Node): (VisitorOperation|Node|NodeList<Node>|null|false|void) * @phpstan-type VisitorArray array<string, NodeVisitor>|array<string, array<string, NodeVisitor>> * * @see \GraphQL\Tests\Language\VisitorTest */ class Visitor { public const VISITOR_KEYS = [ NodeKind::NAME => [], NodeKind::DOCUMENT => ['definitions'], NodeKind::OPERATION_DEFINITION => ['name', 'variableDefinitions', 'directives', 'selectionSet'], NodeKind::VARIABLE_DEFINITION => ['variable', 'type', 'defaultValue', 'directives'], NodeKind::VARIABLE => ['name'], NodeKind::SELECTION_SET => ['selections'], NodeKind::FIELD => ['alias', 'name', 'arguments', 'directives', 'selectionSet'], NodeKind::ARGUMENT => ['name', 'value'], NodeKind::FRAGMENT_SPREAD => ['name', 'directives'], NodeKind::INLINE_FRAGMENT => ['typeCondition', 'directives', 'selectionSet'], NodeKind::FRAGMENT_DEFINITION => [ 'name', // Note: fragment variable definitions are experimental and may be changed // or removed in the future. 'variableDefinitions', 'typeCondition', 'directives', 'selectionSet', ], NodeKind::INT => [], NodeKind::FLOAT => [], NodeKind::STRING => [], NodeKind::BOOLEAN => [], NodeKind::NULL => [], NodeKind::ENUM => [], NodeKind::LST => ['values'], NodeKind::OBJECT => ['fields'], NodeKind::OBJECT_FIELD => ['name', 'value'], NodeKind::DIRECTIVE => ['name', 'arguments'], NodeKind::NAMED_TYPE => ['name'], NodeKind::LIST_TYPE => ['type'], NodeKind::NON_NULL_TYPE => ['type'], NodeKind::SCHEMA_DEFINITION => ['directives', 'operationTypes'], NodeKind::OPERATION_TYPE_DEFINITION => ['type'], NodeKind::SCALAR_TYPE_DEFINITION => ['description', 'name', 'directives'], NodeKind::OBJECT_TYPE_DEFINITION => ['description', 'name', 'interfaces', 'directives', 'fields'], NodeKind::FIELD_DEFINITION => ['description', 'name', 'arguments', 'type', 'directives'], NodeKind::INPUT_VALUE_DEFINITION => ['description', 'name', 'type', 'defaultValue', 'directives'], NodeKind::INTERFACE_TYPE_DEFINITION => ['description', 'name', 'interfaces', 'directives', 'fields'], NodeKind::UNION_TYPE_DEFINITION => ['description', 'name', 'directives', 'types'], NodeKind::ENUM_TYPE_DEFINITION => ['description', 'name', 'directives', 'values'], NodeKind::ENUM_VALUE_DEFINITION => ['description', 'name', 'directives'], NodeKind::INPUT_OBJECT_TYPE_DEFINITION => ['description', 'name', 'directives', 'fields'], NodeKind::SCALAR_TYPE_EXTENSION => ['name', 'directives'], NodeKind::OBJECT_TYPE_EXTENSION => ['name', 'interfaces', 'directives', 'fields'], NodeKind::INTERFACE_TYPE_EXTENSION => ['name', 'interfaces', 'directives', 'fields'], NodeKind::UNION_TYPE_EXTENSION => ['name', 'directives', 'types'], NodeKind::ENUM_TYPE_EXTENSION => ['name', 'directives', 'values'], NodeKind::INPUT_OBJECT_TYPE_EXTENSION => ['name', 'directives', 'fields'], NodeKind::DIRECTIVE_DEFINITION => ['description', 'name', 'arguments', 'locations'], NodeKind::SCHEMA_EXTENSION => ['directives', 'operationTypes'], ]; /** * Visit the AST (see class description for details). * * @param NodeList<Node>|Node $root * @param VisitorArray $visitor * @param array<string, mixed>|null $keyMap * * @throws \Exception * * @return mixed * * @api */ public static function visit(object $root, array $visitor, ?array $keyMap = null) { $visitorKeys = $keyMap ?? self::VISITOR_KEYS; /** * @var list<array{ * inList: bool, * index: int, * keys: Node|NodeList|mixed, * edits: array<int, array{mixed, mixed}>, * }> $stack */ $stack = []; $inList = $root instanceof NodeList; $keys = [$root]; $index = -1; $edits = []; $parent = null; $path = []; $ancestors = []; do { ++$index; $isLeaving = $index === count($keys); $key = null; $node = null; $isEdited = $isLeaving && $edits !== []; if ($isLeaving) { $key = $ancestors === [] ? null : $path[count($path) - 1]; $node = $parent; $parent = array_pop($ancestors); if ($isEdited) { if ($node instanceof Node || $node instanceof NodeList) { $node = $node->cloneDeep(); } $editOffset = 0; foreach ($edits as [$editKey, $editValue]) { if ($inList) { $editKey -= $editOffset; } if ($inList && $editValue === null) { assert($node instanceof NodeList, 'Follows from $inList'); $node->splice($editKey, 1); ++$editOffset; } elseif ($node instanceof NodeList) { if ($editValue instanceof NodeList) { $node->splice($editKey, 1, $editValue); $editOffset -= count($editValue) - 1; } elseif ($editValue instanceof Node) { $node[$editKey] = $editValue; } else { $notNodeOrNodeList = Utils::printSafe($editValue); throw new \Exception("Can only add Node or NodeList to NodeList, got: {$notNodeOrNodeList}."); } } else { $node->{$editKey} = $editValue; } } } // @phpstan-ignore-next-line the stack is guaranteed to be non-empty at this point [ 'index' => $index, 'keys' => $keys, 'edits' => $edits, 'inList' => $inList, ] = array_pop($stack); } elseif ($parent === null) { $node = $root; } else { $key = $inList ? $index : $keys[$index]; $node = $parent instanceof NodeList ? $parent[$key] : $parent->{$key}; if ($node === null) { continue; } $path[] = $key; } $result = null; if (! $node instanceof NodeList) { if (! ($node instanceof Node)) { $notNode = Utils::printSafe($node); throw new \Exception("Invalid AST Node: {$notNode}."); } $visitFn = self::extractVisitFn($visitor, $node->kind, $isLeaving); if ($visitFn !== null) { $result = $visitFn($node, $key, $parent, $path, $ancestors); if ($result !== null) { if ($result instanceof VisitorStop) { break; } if ($result instanceof VisitorSkipNode) { if (! $isLeaving) { array_pop($path); } continue; } $editValue = $result instanceof VisitorRemoveNode ? null : $result; $edits[] = [$key, $editValue]; if (! $isLeaving) { if (! ($editValue instanceof Node)) { array_pop($path); continue; } $node = $editValue; } } } } if ($result === null && $isEdited) { $edits[] = [$key, $node]; } if ($isLeaving) { array_pop($path); } else { $stack[] = [ 'inList' => $inList, 'index' => $index, 'keys' => $keys, 'edits' => $edits, ]; $inList = $node instanceof NodeList; $keys = ($inList ? $node : $visitorKeys[$node->kind]) ?? []; $index = -1; $edits = []; if ($parent !== null) { $ancestors[] = $parent; } $parent = $node; } } while ($stack !== []); return $edits === [] ? $root : $edits[0][1]; } /** * Returns marker for stopping. * * @api */ public static function stop(): VisitorStop { static $stop; return $stop ??= new VisitorStop(); } /** * Returns marker for skipping the subtree at the current node. * * @api */ public static function skipNode(): VisitorSkipNode { static $skipNode; return $skipNode ??= new VisitorSkipNode(); } /** * Returns marker for removing the current node. * * @api */ public static function removeNode(): VisitorRemoveNode { static $removeNode; return $removeNode ??= new VisitorRemoveNode(); } /** * Combines the given visitors to run in parallel. * * @phpstan-param array<int, VisitorArray> $visitors * * @return VisitorArray */ public static function visitInParallel(array $visitors): array { $visitorsCount = count($visitors); $skipping = new \SplFixedArray($visitorsCount); return [ 'enter' => static function (Node $node) use ($visitors, $skipping, $visitorsCount) { for ($i = 0; $i < $visitorsCount; ++$i) { if ($skipping[$i] !== null) { continue; } $fn = self::extractVisitFn( $visitors[$i], $node->kind, false ); if ($fn === null) { continue; } $result = $fn(...func_get_args()); if ($result instanceof VisitorSkipNode) { $skipping[$i] = $node; } elseif ($result instanceof VisitorStop) { $skipping[$i] = $result; } elseif ($result instanceof VisitorRemoveNode) { return $result; } elseif ($result !== null) { return $result; } } return null; }, 'leave' => static function (Node $node) use ($visitors, $skipping, $visitorsCount) { for ($i = 0; $i < $visitorsCount; ++$i) { if ($skipping[$i] === null) { $fn = self::extractVisitFn( $visitors[$i], $node->kind, true ); if ($fn !== null) { $result = $fn(...func_get_args()); if ($result instanceof VisitorStop) { $skipping[$i] = $result; } elseif ($result instanceof VisitorRemoveNode) { return $result; } elseif ($result !== null) { return $result; } } } elseif ($skipping[$i] === $node) { $skipping[$i] = null; } } return null; }, ]; } /** * Creates a new visitor that updates TypeInfo and delegates to the given visitor. * * @phpstan-param VisitorArray $visitor * * @phpstan-return VisitorArray */ public static function visitWithTypeInfo(TypeInfo $typeInfo, array $visitor): array { return [ 'enter' => static function (Node $node) use ($typeInfo, $visitor) { $typeInfo->enter($node); $fn = self::extractVisitFn($visitor, $node->kind, false); if ($fn === null) { return null; } $result = $fn(...func_get_args()); if ($result === null) { return null; } $typeInfo->leave($node); if ($result instanceof Node) { $typeInfo->enter($result); } return $result; }, 'leave' => static function (Node $node) use ($typeInfo, $visitor) { $fn = self::extractVisitFn($visitor, $node->kind, true); $result = $fn !== null ? $fn(...func_get_args()) : null; $typeInfo->leave($node); return $result; }, ]; } /** * @phpstan-param VisitorArray $visitor * * @return (callable(Node $node, string|int|null $key, Node|NodeList<Node>|null $parent, array<int, int|string> $path, array<int, Node|NodeList<Node>> $ancestors): (VisitorOperation|Node|null))|(callable(Node): (VisitorOperation|Node|NodeList<Node>|void|false|null))|null */ protected static function extractVisitFn(array $visitor, string $kind, bool $isLeaving): ?callable { $kindVisitor = $visitor[$kind] ?? null; if (is_array($kindVisitor)) { return $isLeaving ? $kindVisitor['leave'] ?? null : $kindVisitor['enter'] ?? null; } if ($kindVisitor !== null && ! $isLeaving) { return $kindVisitor; } $specificVisitor = $isLeaving ? $visitor['leave'] ?? null : $visitor['enter'] ?? null; if (is_array($specificVisitor)) { return $specificVisitor[$kind] ?? null; } return $specificVisitor; } } graphql/lib/Language/Lexer.php000064400000057031151666572100012302 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; use YOOtheme\GraphQL\Error\SyntaxError; use YOOtheme\GraphQL\Utils\Utils; /** * A lexer is a stateful stream generator, it returns the next token in the Source when advanced. * Assuming the source is valid, the final returned token will be EOF, * after which the lexer will repeatedly return the same EOF token whenever called. * * Algorithm is O(N) both on memory and time. * * @phpstan-import-type ParserOptions from Parser * * @see \GraphQL\Tests\Language\LexerTest */ class Lexer { // https://spec.graphql.org/October2021/#sec-Punctuators private const TOKEN_BANG = 33; private const TOKEN_DOLLAR = 36; private const TOKEN_AMP = 38; private const TOKEN_PAREN_L = 40; private const TOKEN_PAREN_R = 41; private const TOKEN_DOT = 46; private const TOKEN_COLON = 58; private const TOKEN_EQUALS = 61; private const TOKEN_AT = 64; private const TOKEN_BRACKET_L = 91; private const TOKEN_BRACKET_R = 93; private const TOKEN_BRACE_L = 123; private const TOKEN_PIPE = 124; private const TOKEN_BRACE_R = 125; public Source $source; /** @phpstan-var ParserOptions */ public array $options; /** The previously focused non-ignored token. */ public Token $lastToken; /** The currently focused non-ignored token. */ public Token $token; /** The (1-indexed) line containing the current token. */ public int $line = 1; /** The character offset at which the current line begins. */ public int $lineStart = 0; /** Current cursor position for UTF8 encoding of the source. */ private int $position = 0; /** Current cursor position for ASCII representation of the source. */ private int $byteStreamPosition = 0; /** @phpstan-param ParserOptions $options */ public function __construct(Source $source, array $options = []) { $startOfFileToken = new Token(Token::SOF, 0, 0, 0, 0, null); $this->source = $source; $this->options = $options; $this->lastToken = $startOfFileToken; $this->token = $startOfFileToken; } /** * @throws \JsonException * @throws SyntaxError */ public function advance(): Token { $this->lastToken = $this->token; return $this->token = $this->lookahead(); } /** * @throws \JsonException * @throws SyntaxError */ public function lookahead(): Token { $token = $this->token; if ($token->kind !== Token::EOF) { do { $token = $token->next ?? ($token->next = $this->readToken($token)); } while ($token->kind === Token::COMMENT); } return $token; } /** * @throws \JsonException * @throws SyntaxError */ private function readToken(Token $prev): Token { $bodyLength = $this->source->length; $this->positionAfterWhitespace(); $position = $this->position; $line = $this->line; $col = 1 + $position - $this->lineStart; if ($position >= $bodyLength) { return new Token(Token::EOF, $bodyLength, $bodyLength, $line, $col, $prev); } // Read next char and advance string cursor: [, $code, $bytes] = $this->readChar(true); switch ($code) { case self::TOKEN_BANG: // ! return new Token(Token::BANG, $position, $position + 1, $line, $col, $prev); case 35: // # $this->moveStringCursor(-1, -1 * $bytes); return $this->readComment($line, $col, $prev); case self::TOKEN_DOLLAR: // $ return new Token(Token::DOLLAR, $position, $position + 1, $line, $col, $prev); case self::TOKEN_AMP: // & return new Token(Token::AMP, $position, $position + 1, $line, $col, $prev); case self::TOKEN_PAREN_L: // ( return new Token(Token::PAREN_L, $position, $position + 1, $line, $col, $prev); case self::TOKEN_PAREN_R: // ) return new Token(Token::PAREN_R, $position, $position + 1, $line, $col, $prev); case self::TOKEN_DOT: // . [, $charCode1] = $this->readChar(true); [, $charCode2] = $this->readChar(true); if ($charCode1 === self::TOKEN_DOT && $charCode2 === self::TOKEN_DOT) { return new Token(Token::SPREAD, $position, $position + 3, $line, $col, $prev); } break; case self::TOKEN_COLON: // : return new Token(Token::COLON, $position, $position + 1, $line, $col, $prev); case self::TOKEN_EQUALS: // = return new Token(Token::EQUALS, $position, $position + 1, $line, $col, $prev); case self::TOKEN_AT: // @ return new Token(Token::AT, $position, $position + 1, $line, $col, $prev); case self::TOKEN_BRACKET_L: // [ return new Token(Token::BRACKET_L, $position, $position + 1, $line, $col, $prev); case self::TOKEN_BRACKET_R: // ] return new Token(Token::BRACKET_R, $position, $position + 1, $line, $col, $prev); case self::TOKEN_BRACE_L: // { return new Token(Token::BRACE_L, $position, $position + 1, $line, $col, $prev); case self::TOKEN_PIPE: // | return new Token(Token::PIPE, $position, $position + 1, $line, $col, $prev); case self::TOKEN_BRACE_R: // } return new Token(Token::BRACE_R, $position, $position + 1, $line, $col, $prev); // A-Z case 65: case 66: case 67: case 68: case 69: case 70: case 71: case 72: case 73: case 74: case 75: case 76: case 77: case 78: case 79: case 80: case 81: case 82: case 83: case 84: case 85: case 86: case 87: case 88: case 89: case 90: // _ case 95: // a-z case 97: case 98: case 99: case 100: case 101: case 102: case 103: case 104: case 105: case 106: case 107: case 108: case 109: case 110: case 111: case 112: case 113: case 114: case 115: case 116: case 117: case 118: case 119: case 120: case 121: case 122: return $this->moveStringCursor(-1, -1 * $bytes) ->readName($line, $col, $prev); // - case 45: // 0-9 case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: return $this->moveStringCursor(-1, -1 * $bytes) ->readNumber($line, $col, $prev); // " case 34: [, $nextCode] = $this->readChar(); [, $nextNextCode] = $this->moveStringCursor(1, 1) ->readChar(); if ($nextCode === 34 && $nextNextCode === 34) { return $this->moveStringCursor(-2, (-1 * $bytes) - 1) ->readBlockString($line, $col, $prev); } return $this->moveStringCursor(-2, (-1 * $bytes) - 1) ->readString($line, $col, $prev); } throw new SyntaxError($this->source, $position, $this->unexpectedCharacterMessage($code)); } /** @throws \JsonException */ private function unexpectedCharacterMessage(?int $code): string { // SourceCharacter if ($code < 0x0020 && $code !== 0x0009 && $code !== 0x000A && $code !== 0x000D) { return 'Cannot contain the invalid character ' . Utils::printCharCode($code); } if ($code === 39) { return 'Unexpected single quote character (\'), did you mean to use a double quote (")?'; } return 'Cannot parse the unexpected character ' . Utils::printCharCode($code) . '.'; } /** * Reads an alphanumeric + underscore name from the source. * * [_A-Za-z][_0-9A-Za-z]* */ private function readName(int $line, int $col, Token $prev): Token { $value = ''; $start = $this->position; [$char, $code] = $this->readChar(); while ( $code !== null && ( $code === 95 // _ || ($code >= 48 && $code <= 57) // 0-9 || ($code >= 65 && $code <= 90) // A-Z || ($code >= 97 && $code <= 122) // a-z ) ) { $value .= $char; [$char, $code] = $this->moveStringCursor(1, 1)->readChar(); } return new Token( Token::NAME, $start, $this->position, $line, $col, $prev, $value ); } /** * Reads a number token from the source file, either a float * or an int depending on whether a decimal point appears. * * Int: -?(0|[1-9][0-9]*) * Float: -?(0|[1-9][0-9]*)(\.[0-9]+)?((E|e)(+|-)?[0-9]+)? * * @throws \JsonException * @throws SyntaxError */ private function readNumber(int $line, int $col, Token $prev): Token { $value = ''; $start = $this->position; [$char, $code] = $this->readChar(); $isFloat = false; if ($code === 45) { // - $value .= $char; [$char, $code] = $this->moveStringCursor(1, 1)->readChar(); } // guard against leading zero's if ($code === 48) { // 0 $value .= $char; [$char, $code] = $this->moveStringCursor(1, 1)->readChar(); if ($code >= 48 && $code <= 57) { throw new SyntaxError($this->source, $this->position, 'Invalid number, unexpected digit after 0: ' . Utils::printCharCode($code)); } } else { $value .= $this->readDigits(); [$char, $code] = $this->readChar(); } if ($code === 46) { // . $isFloat = true; $this->moveStringCursor(1, 1); $value .= $char; $value .= $this->readDigits(); [$char, $code] = $this->readChar(); } if ($code === 69 || $code === 101) { // E e $isFloat = true; $value .= $char; [$char, $code] = $this->moveStringCursor(1, 1)->readChar(); if ($code === 43 || $code === 45) { // + - $value .= $char; $this->moveStringCursor(1, 1); } $value .= $this->readDigits(); } return new Token( $isFloat ? Token::FLOAT : Token::INT, $start, $this->position, $line, $col, $prev, $value ); } /** * Returns string with all digits + changes current string cursor position to point to the first char after digits. * * @throws \JsonException * @throws SyntaxError */ private function readDigits(): string { [$char, $code] = $this->readChar(); if ($code >= 48 && $code <= 57) { // 0 - 9 $value = ''; do { $value .= $char; [$char, $code] = $this->moveStringCursor(1, 1)->readChar(); } while ($code >= 48 && $code <= 57); // 0 - 9 return $value; } if ($this->position > $this->source->length - 1) { $code = null; } throw new SyntaxError($this->source, $this->position, 'Invalid number, expected digit but got: ' . Utils::printCharCode($code)); } /** * @throws \JsonException * @throws SyntaxError */ private function readString(int $line, int $col, Token $prev): Token { $start = $this->position; // Skip leading quote and read first string char: [$char, $code, $bytes] = $this->moveStringCursor(1, 1) ->readChar(); $chunk = ''; $value = ''; while ( $code !== null && $code !== 10 && $code !== 13 // not LineTerminator ) { if ($code === 34) { // Closing Quote (") $value .= $chunk; // Skip quote $this->moveStringCursor(1, 1); return new Token( Token::STRING, $start, $this->position, $line, $col, $prev, $value ); } $this->assertValidStringCharacterCode($code, $this->position); $this->moveStringCursor(1, $bytes); if ($code === 92) { // \ $value .= $chunk; [, $code] = $this->readChar(true); switch ($code) { case 34: $value .= '"'; break; case 47: $value .= '/'; break; case 92: $value .= '\\'; break; case 98: $value .= chr(8); // \b (backspace) break; case 102: $value .= "\f"; break; case 110: $value .= "\n"; break; case 114: $value .= "\r"; break; case 116: $value .= "\t"; break; case 117: $position = $this->position; [$hex] = $this->readChars(4); if (preg_match('/[0-9a-fA-F]{4}/', $hex) !== 1) { throw new SyntaxError($this->source, $position - 1, "Invalid character escape sequence: \\u{$hex}"); } $code = hexdec($hex); assert(is_int($code), 'Since only a single char is read'); // UTF-16 surrogate pair detection and handling. $highOrderByte = $code >> 8; if ($highOrderByte >= 0xD8 && $highOrderByte <= 0xDF) { [$utf16Continuation] = $this->readChars(6); if (preg_match('/^\\\u[0-9a-fA-F]{4}$/', $utf16Continuation) !== 1) { throw new SyntaxError($this->source, $this->position - 5, 'Invalid UTF-16 trailing surrogate: ' . $utf16Continuation); } $surrogatePairHex = $hex . substr($utf16Continuation, 2, 4); $value .= mb_convert_encoding(pack('H*', $surrogatePairHex), 'UTF-8', 'UTF-16'); break; } $this->assertValidStringCharacterCode($code, $position - 2); $value .= Utils::chr($code); break; // null means EOF, will delegate to general handling of unterminated strings case null: continue 2; default: $chr = Utils::chr($code); throw new SyntaxError($this->source, $this->position - 1, "Invalid character escape sequence: \\{$chr}"); } $chunk = ''; } else { $chunk .= $char; } [$char, $code, $bytes] = $this->readChar(); } throw new SyntaxError($this->source, $this->position, 'Unterminated string.'); } /** * Reads a block string token from the source file. * * """("?"?(\\"""|\\(?!=""")|[^"\\]))*""" * * @throws \JsonException * @throws SyntaxError */ private function readBlockString(int $line, int $col, Token $prev): Token { $start = $this->position; // Skip leading quotes and read first string char: [$char, $code, $bytes] = $this->moveStringCursor(3, 3)->readChar(); $chunk = ''; $value = ''; while ($code !== null) { // Closing Triple-Quote (""") if ($code === 34) { // Move 2 quotes [, $nextCode] = $this->moveStringCursor(1, 1)->readChar(); [, $nextNextCode] = $this->moveStringCursor(1, 1)->readChar(); if ($nextCode === 34 && $nextNextCode === 34) { $value .= $chunk; $this->moveStringCursor(1, 1); return new Token( Token::BLOCK_STRING, $start, $this->position, $line, $col, $prev, BlockString::dedentBlockStringLines($value) ); } // move cursor back to before the first quote $this->moveStringCursor(-2, -2); } $this->assertValidBlockStringCharacterCode($code, $this->position); $this->moveStringCursor(1, $bytes); [, $nextCode] = $this->readChar(); [, $nextNextCode] = $this->moveStringCursor(1, 1)->readChar(); [, $nextNextNextCode] = $this->moveStringCursor(1, 1)->readChar(); // Escape Triple-Quote (\""") if ( $code === 92 && $nextCode === 34 && $nextNextCode === 34 && $nextNextNextCode === 34 ) { $this->moveStringCursor(1, 1); $value .= $chunk . '"""'; $chunk = ''; } else { // move cursor back to before the first quote $this->moveStringCursor(-2, -2); if ($code === 10) { // new line ++$this->line; $this->lineStart = $this->position; } $chunk .= $char; } [$char, $code, $bytes] = $this->readChar(); } throw new SyntaxError($this->source, $this->position, 'Unterminated string.'); } /** * @throws \JsonException * @throws SyntaxError */ private function assertValidStringCharacterCode(int $code, int $position): void { // SourceCharacter if ($code < 0x0020 && $code !== 0x0009) { $char = Utils::printCharCode($code); throw new SyntaxError($this->source, $position, "Invalid character within String: {$char}"); } } /** * @throws \JsonException * @throws SyntaxError */ private function assertValidBlockStringCharacterCode(int $code, int $position): void { // SourceCharacter if ($code < 0x0020 && $code !== 0x0009 && $code !== 0x000A && $code !== 0x000D) { $char = Utils::printCharCode($code); throw new SyntaxError($this->source, $position, "Invalid character within String: {$char}"); } } /** * Reads from body starting at startPosition until it finds a non-whitespace * or commented character, then places cursor to the position of that character. */ private function positionAfterWhitespace(): void { while ($this->position < $this->source->length) { [, $code, $bytes] = $this->readChar(); // Skip whitespace // tab | space | comma | BOM if ($code === 9 || $code === 32 || $code === 44 || $code === 0xFEFF) { $this->moveStringCursor(1, $bytes); } elseif ($code === 10) { // new line $this->moveStringCursor(1, $bytes); ++$this->line; $this->lineStart = $this->position; } elseif ($code === 13) { // carriage return [, $nextCode, $nextBytes] = $this->moveStringCursor(1, $bytes)->readChar(); if ($nextCode === 10) { // lf after cr $this->moveStringCursor(1, $nextBytes); } ++$this->line; $this->lineStart = $this->position; } else { break; } } } /** * Reads a comment token from the source file. * * #[\u0009\u0020-\uFFFF]* */ private function readComment(int $line, int $col, Token $prev): Token { $start = $this->position; $value = ''; $bytes = 1; do { [$char, $code, $bytes] = $this->moveStringCursor(1, $bytes)->readChar(); $value .= $char; } while ( $code !== null // SourceCharacter but not LineTerminator && ($code > 0x001F || $code === 0x0009) ); return new Token( Token::COMMENT, $start, $this->position, $line, $col, $prev, $value ); } /** * Reads next UTF8Character from the byte stream, starting from $byteStreamPosition. * * @return array{string, int|null, int} */ private function readChar(bool $advance = false, ?int $byteStreamPosition = null): array { if ($byteStreamPosition === null) { $byteStreamPosition = $this->byteStreamPosition; } $code = null; $utf8char = ''; $bytes = 0; $positionOffset = 0; if (isset($this->source->body[$byteStreamPosition])) { $ord = ord($this->source->body[$byteStreamPosition]); if ($ord < 128) { $bytes = 1; } elseif ($ord < 224) { $bytes = 2; } elseif ($ord < 240) { $bytes = 3; } else { $bytes = 4; } for ($pos = $byteStreamPosition; $pos < $byteStreamPosition + $bytes; ++$pos) { $utf8char .= $this->source->body[$pos]; } $positionOffset = 1; $code = $bytes === 1 ? $ord : Utils::ord($utf8char); } if ($advance) { $this->moveStringCursor($positionOffset, $bytes); } return [$utf8char, $code, $bytes]; } /** * Reads next $numberOfChars UTF8 characters from the byte stream. * * @return array{string, int} */ private function readChars(int $charCount): array { $result = ''; $totalBytes = 0; $byteOffset = $this->byteStreamPosition; for ($i = 0; $i < $charCount; ++$i) { [$char, $code, $bytes] = $this->readChar(false, $byteOffset); $totalBytes += $bytes; $byteOffset += $bytes; $result .= $char; } $this->moveStringCursor($charCount, $totalBytes); return [$result, $totalBytes]; } /** Moves internal string cursor position. */ private function moveStringCursor(int $positionOffset, int $byteStreamOffset): self { $this->position += $positionOffset; $this->byteStreamPosition += $byteStreamOffset; return $this; } } graphql/lib/Language/Printer.php000064400000047073151666572100012653 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; use YOOtheme\GraphQL\Language\AST\ArgumentNode; use YOOtheme\GraphQL\Language\AST\BooleanValueNode; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\EnumValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumValueNode; use YOOtheme\GraphQL\Language\AST\FieldDefinitionNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FloatValueNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\IntValueNode; use YOOtheme\GraphQL\Language\AST\ListTypeNode; use YOOtheme\GraphQL\Language\AST\ListValueNode; use YOOtheme\GraphQL\Language\AST\NamedTypeNode; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\NonNullTypeNode; use YOOtheme\GraphQL\Language\AST\NullValueNode; use YOOtheme\GraphQL\Language\AST\ObjectFieldNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\ObjectValueNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\OperationTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Language\AST\StringValueNode; use YOOtheme\GraphQL\Language\AST\UnionTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Language\AST\VariableNode; /** * Prints AST to string. Capable of printing GraphQL queries and Type definition language. * Useful for pretty-printing queries or printing back AST for logging, documentation, etc. * * Usage example: * * ```php * $query = 'query myQuery {someField}'; * $ast = GraphQL\Language\Parser::parse($query); * $printed = GraphQL\Language\Printer::doPrint($ast); * ``` * * @see \GraphQL\Tests\Language\PrinterTest */ class Printer { /** * Converts the AST of a GraphQL node to a string. * * Handles both executable definitions and schema definitions. * * @throws \JsonException * * @api */ public static function doPrint(Node $ast): string { return static::p($ast); } /** @throws \JsonException */ protected static function p(?Node $node): string { if ($node === null) { return ''; } switch (true) { case $node instanceof ArgumentNode: case $node instanceof ObjectFieldNode: return static::p($node->name) . ': ' . static::p($node->value); case $node instanceof BooleanValueNode: return $node->value ? 'true' : 'false'; case $node instanceof DirectiveDefinitionNode: $argStrings = []; foreach ($node->arguments as $arg) { $argStrings[] = static::p($arg); } $noIndent = true; foreach ($argStrings as $argString) { if (strpos($argString, "\n") !== false) { $noIndent = false; break; } } return static::addDescription($node->description, 'directive @' . static::p($node->name) . ($noIndent ? static::wrap('(', static::join($argStrings, ', '), ')') : static::wrap("(\n", static::indent(static::join($argStrings, "\n")), "\n")) . ($node->repeatable ? ' repeatable' : '') . ' on ' . static::printList($node->locations, ' | ')); case $node instanceof DirectiveNode: return '@' . static::p($node->name) . static::wrap('(', static::printList($node->arguments, ', '), ')'); case $node instanceof DocumentNode: return static::printList($node->definitions, "\n\n") . "\n"; case $node instanceof EnumTypeDefinitionNode: return static::addDescription($node->description, static::join( [ 'enum', static::p($node->name), static::printList($node->directives, ' '), static::printListBlock($node->values), ], ' ' )); case $node instanceof EnumTypeExtensionNode: return static::join( [ 'extend enum', static::p($node->name), static::printList($node->directives, ' '), static::printListBlock($node->values), ], ' ' ); case $node instanceof EnumValueDefinitionNode: return static::addDescription( $node->description, static::join([static::p($node->name), static::printList($node->directives, ' ')], ' ') ); case $node instanceof EnumValueNode: case $node instanceof FloatValueNode: case $node instanceof IntValueNode: case $node instanceof NameNode: return $node->value; case $node instanceof FieldDefinitionNode: $argStrings = []; foreach ($node->arguments as $item) { $argStrings[] = static::p($item); } $noIndent = true; foreach ($argStrings as $argString) { if (strpos($argString, "\n") !== false) { $noIndent = false; break; } } return static::addDescription( $node->description, static::p($node->name) . ($noIndent ? static::wrap('(', static::join($argStrings, ', '), ')') : static::wrap("(\n", static::indent(static::join($argStrings, "\n")), "\n)")) . ': ' . static::p($node->type) . static::wrap(' ', static::printList($node->directives, ' ')) ); case $node instanceof FieldNode: $prefix = static::wrap('', $node->alias->value ?? null, ': ') . static::p($node->name); $argsLine = $prefix . static::wrap( '(', static::printList($node->arguments, ', '), ')' ); if (strlen($argsLine) > 80) { $argsLine = $prefix . static::wrap( "(\n", static::indent( static::printList($node->arguments, "\n") ), "\n)" ); } return static::join( [ $argsLine, static::printList($node->directives, ' '), static::p($node->selectionSet), ], ' ' ); case $node instanceof FragmentDefinitionNode: // Note: fragment variable definitions are experimental and may be changed or removed in the future. return 'fragment ' . static::p($node->name) . static::wrap( '(', static::printList($node->variableDefinitions ?? new NodeList([]), ', '), ')' ) . ' on ' . static::p($node->typeCondition->name) . ' ' . static::wrap( '', static::printList($node->directives, ' '), ' ' ) . static::p($node->selectionSet); case $node instanceof FragmentSpreadNode: return '...' . static::p($node->name) . static::wrap(' ', static::printList($node->directives, ' ')); case $node instanceof InlineFragmentNode: return static::join( [ '...', static::wrap('on ', static::p($node->typeCondition->name ?? null)), static::printList($node->directives, ' '), static::p($node->selectionSet), ], ' ' ); case $node instanceof InputObjectTypeDefinitionNode: return static::addDescription($node->description, static::join( [ 'input', static::p($node->name), static::printList($node->directives, ' '), static::printListBlock($node->fields), ], ' ' )); case $node instanceof InputObjectTypeExtensionNode: return static::join( [ 'extend input', static::p($node->name), static::printList($node->directives, ' '), static::printListBlock($node->fields), ], ' ' ); case $node instanceof InputValueDefinitionNode: return static::addDescription($node->description, static::join( [ static::p($node->name) . ': ' . static::p($node->type), static::wrap('= ', static::p($node->defaultValue)), static::printList($node->directives, ' '), ], ' ' )); case $node instanceof InterfaceTypeDefinitionNode: return static::addDescription($node->description, static::join( [ 'interface', static::p($node->name), static::wrap('implements ', static::printList($node->interfaces, ' & ')), static::printList($node->directives, ' '), static::printListBlock($node->fields), ], ' ' )); case $node instanceof InterfaceTypeExtensionNode: return static::join( [ 'extend interface', static::p($node->name), static::wrap('implements ', static::printList($node->interfaces, ' & ')), static::printList($node->directives, ' '), static::printListBlock($node->fields), ], ' ' ); case $node instanceof ListTypeNode: return '[' . static::p($node->type) . ']'; case $node instanceof ListValueNode: return '[' . static::printList($node->values, ', ') . ']'; case $node instanceof NamedTypeNode: return static::p($node->name); case $node instanceof NonNullTypeNode: return static::p($node->type) . '!'; case $node instanceof NullValueNode: return 'null'; case $node instanceof ObjectTypeDefinitionNode: return static::addDescription($node->description, static::join( [ 'type', static::p($node->name), static::wrap('implements ', static::printList($node->interfaces, ' & ')), static::printList($node->directives, ' '), static::printListBlock($node->fields), ], ' ' )); case $node instanceof ObjectTypeExtensionNode: return static::join( [ 'extend type', static::p($node->name), static::wrap('implements ', static::printList($node->interfaces, ' & ')), static::printList($node->directives, ' '), static::printListBlock($node->fields), ], ' ' ); case $node instanceof ObjectValueNode: return '{ ' . static::printList($node->fields, ', ') . ' }'; case $node instanceof OperationDefinitionNode: $op = $node->operation; $name = static::p($node->name); $varDefs = static::wrap('(', static::printList($node->variableDefinitions, ', '), ')'); $directives = static::printList($node->directives, ' '); $selectionSet = static::p($node->selectionSet); // Anonymous queries with no directives or variable definitions can use // the query short form. return $name === '' && $directives === '' && $varDefs === '' && $op === 'query' ? $selectionSet : static::join([$op, static::join([$name, $varDefs]), $directives, $selectionSet], ' '); case $node instanceof OperationTypeDefinitionNode: return $node->operation . ': ' . static::p($node->type); case $node instanceof ScalarTypeDefinitionNode: return static::addDescription($node->description, static::join([ 'scalar', static::p($node->name), static::printList($node->directives, ' '), ], ' ')); case $node instanceof ScalarTypeExtensionNode: return static::join( [ 'extend scalar', static::p($node->name), static::printList($node->directives, ' '), ], ' ' ); case $node instanceof SchemaDefinitionNode: return static::join( [ 'schema', static::printList($node->directives, ' '), static::printListBlock($node->operationTypes), ], ' ' ); case $node instanceof SchemaExtensionNode: return static::join( [ 'extend schema', static::printList($node->directives, ' '), static::printListBlock($node->operationTypes), ], ' ' ); case $node instanceof SelectionSetNode: return static::printListBlock($node->selections); case $node instanceof StringValueNode: if ($node->block) { return BlockString::print($node->value); } return json_encode($node->value, JSON_THROW_ON_ERROR | JSON_UNESCAPED_SLASHES); case $node instanceof UnionTypeDefinitionNode: $typesStr = static::printList($node->types, ' | '); return static::addDescription($node->description, static::join( [ 'union', static::p($node->name), static::printList($node->directives, ' '), $typesStr !== '' ? "= {$typesStr}" : '', ], ' ' )); case $node instanceof UnionTypeExtensionNode: $typesStr = static::printList($node->types, ' | '); return static::join( [ 'extend union', static::p($node->name), static::printList($node->directives, ' '), $typesStr !== '' ? "= {$typesStr}" : '', ], ' ' ); case $node instanceof VariableDefinitionNode: return '$' . static::p($node->variable->name) . ': ' . static::p($node->type) . static::wrap(' = ', static::p($node->defaultValue)) . static::wrap(' ', static::printList($node->directives, ' ')); case $node instanceof VariableNode: return '$' . static::p($node->name); } return ''; } /** * @template TNode of Node * * @param NodeList<TNode> $list * * @throws \JsonException */ protected static function printList(NodeList $list, string $separator = ''): string { $parts = []; foreach ($list as $item) { $parts[] = static::p($item); } return static::join($parts, $separator); } /** * Print each item on its own line, wrapped in an indented "{ }" block. * * @template TNode of Node * * @param NodeList<TNode> $list * * @throws \JsonException */ protected static function printListBlock(NodeList $list): string { if (count($list) === 0) { return ''; } $parts = []; foreach ($list as $item) { $parts[] = static::p($item); } return "{\n" . static::indent(static::join($parts, "\n")) . "\n}"; } /** @throws \JsonException */ protected static function addDescription(?StringValueNode $description, string $body): string { return static::join([static::p($description), $body], "\n"); } /** * If maybeString is not null or empty, then wrap with start and end, otherwise * print an empty string. */ protected static function wrap(string $start, ?string $maybeString, string $end = ''): string { if ($maybeString === null || $maybeString === '') { return ''; } return $start . $maybeString . $end; } protected static function indent(string $string): string { if ($string === '') { return ''; } return ' ' . str_replace("\n", "\n ", $string); } /** @param array<string|null> $parts */ protected static function join(array $parts, string $separator = ''): string { return implode($separator, array_filter($parts, static fn (?string $part) => $part !== '' && $part !== null)); } } graphql/lib/Language/Parser.php000064400000170350151666572100012457 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; use YOOtheme\GraphQL\Error\SyntaxError; use YOOtheme\GraphQL\Language\AST\ArgumentNode; use YOOtheme\GraphQL\Language\AST\BooleanValueNode; use YOOtheme\GraphQL\Language\AST\DefinitionNode; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\EnumValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumValueNode; use YOOtheme\GraphQL\Language\AST\ExecutableDefinitionNode; use YOOtheme\GraphQL\Language\AST\FieldDefinitionNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FloatValueNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\IntValueNode; use YOOtheme\GraphQL\Language\AST\ListTypeNode; use YOOtheme\GraphQL\Language\AST\ListValueNode; use YOOtheme\GraphQL\Language\AST\Location; use YOOtheme\GraphQL\Language\AST\NamedTypeNode; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\NonNullTypeNode; use YOOtheme\GraphQL\Language\AST\NullValueNode; use YOOtheme\GraphQL\Language\AST\ObjectFieldNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\ObjectValueNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\OperationTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Language\AST\SelectionNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Language\AST\StringValueNode; use YOOtheme\GraphQL\Language\AST\TypeExtensionNode; use YOOtheme\GraphQL\Language\AST\TypeNode; use YOOtheme\GraphQL\Language\AST\TypeSystemDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeSystemExtensionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\ValueNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Language\AST\VariableNode; /** * Parses string containing GraphQL query language or [schema definition language](schema-definition-language.md) to Abstract Syntax Tree. * * @phpstan-type ParserOptions array{ * noLocation?: bool, * allowLegacySDLEmptyFields?: bool, * allowLegacySDLImplementsInterfaces?: bool, * experimentalFragmentVariables?: bool * } * * noLocation: * (By default, the parser creates AST nodes that know the location * in the source that they correspond to. This configuration flag * disables that behavior for performance or testing.) * * allowLegacySDLEmptyFields: * If enabled, the parser will parse empty fields sets in the Schema * Definition Language. Otherwise, the parser will follow the current * specification. * * This option is provided to ease adoption of the final SDL specification * and will be removed in a future major release. * * allowLegacySDLImplementsInterfaces: * If enabled, the parser will parse implemented interfaces with no `&` * character between each interface. Otherwise, the parser will follow the * current specification. * * This option is provided to ease adoption of the final SDL specification * and will be removed in a future major release. * * experimentalFragmentVariables: * (If enabled, the parser will understand and parse variable definitions * contained in a fragment definition. They'll be represented in the * `variableDefinitions` field of the FragmentDefinitionNode. * * The syntax is identical to normal, query-defined variables. For example: * * fragment A($var: Boolean = false) on T { * ... * } * * Note: this feature is experimental and may change or be removed in the * future.) * Those magic functions allow partial parsing: * * @method static NameNode name(Source|string $source, ParserOptions $options = []) * @method static ExecutableDefinitionNode|TypeSystemDefinitionNode definition(Source|string $source, ParserOptions $options = []) * @method static ExecutableDefinitionNode executableDefinition(Source|string $source, ParserOptions $options = []) * @method static OperationDefinitionNode operationDefinition(Source|string $source, ParserOptions $options = []) * @method static string operationType(Source|string $source, ParserOptions $options = []) * @method static NodeList<VariableDefinitionNode> variableDefinitions(Source|string $source, ParserOptions $options = []) * @method static VariableDefinitionNode variableDefinition(Source|string $source, ParserOptions $options = []) * @method static VariableNode variable(Source|string $source, ParserOptions $options = []) * @method static SelectionSetNode selectionSet(Source|string $source, ParserOptions $options = []) * @method static mixed selection(Source|string $source, ParserOptions $options = []) * @method static FieldNode field(Source|string $source, ParserOptions $options = []) * @method static NodeList<ArgumentNode> arguments(Source|string $source, ParserOptions $options = []) * @method static NodeList<ArgumentNode> constArguments(Source|string $source, ParserOptions $options = []) * @method static ArgumentNode argument(Source|string $source, ParserOptions $options = []) * @method static ArgumentNode constArgument(Source|string $source, ParserOptions $options = []) * @method static FragmentSpreadNode|InlineFragmentNode fragment(Source|string $source, ParserOptions $options = []) * @method static FragmentDefinitionNode fragmentDefinition(Source|string $source, ParserOptions $options = []) * @method static NameNode fragmentName(Source|string $source, ParserOptions $options = []) * @method static BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|ListValueNode|NullValueNode|ObjectValueNode|StringValueNode|VariableNode valueLiteral(Source|string $source, ParserOptions $options = []) * @method static BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|ListValueNode|NullValueNode|ObjectValueNode|StringValueNode constValueLiteral(Source|string $source, ParserOptions $options = []) * @method static StringValueNode stringLiteral(Source|string $source, ParserOptions $options = []) * @method static BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|StringValueNode constValue(Source|string $source, ParserOptions $options = []) * @method static BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|ListValueNode|ObjectValueNode|StringValueNode|VariableNode variableValue(Source|string $source, ParserOptions $options = []) * @method static ListValueNode array(Source|string $source, ParserOptions $options = []) * @method static ListValueNode constArray(Source|string $source, ParserOptions $options = []) * @method static ObjectValueNode object(Source|string $source, ParserOptions $options = []) * @method static ObjectValueNode constObject(Source|string $source, ParserOptions $options = []) * @method static ObjectFieldNode objectField(Source|string $source, ParserOptions $options = []) * @method static ObjectFieldNode constObjectField(Source|string $source, ParserOptions $options = []) * @method static NodeList<DirectiveNode> directives(Source|string $source, ParserOptions $options = []) * @method static NodeList<DirectiveNode> constDirectives(Source|string $source, ParserOptions $options = []) * @method static DirectiveNode directive(Source|string $source, ParserOptions $options = []) * @method static DirectiveNode constDirective(Source|string $source, ParserOptions $options = []) * @method static ListTypeNode|NamedTypeNode|NonNullTypeNode typeReference(Source|string $source, ParserOptions $options = []) * @method static NamedTypeNode namedType(Source|string $source, ParserOptions $options = []) * @method static TypeSystemDefinitionNode typeSystemDefinition(Source|string $source, ParserOptions $options = []) * @method static StringValueNode|null description(Source|string $source, ParserOptions $options = []) * @method static SchemaDefinitionNode schemaDefinition(Source|string $source, ParserOptions $options = []) * @method static OperationTypeDefinitionNode operationTypeDefinition(Source|string $source, ParserOptions $options = []) * @method static ScalarTypeDefinitionNode scalarTypeDefinition(Source|string $source, ParserOptions $options = []) * @method static ObjectTypeDefinitionNode objectTypeDefinition(Source|string $source, ParserOptions $options = []) * @method static NodeList<NamedTypeNode> implementsInterfaces(Source|string $source, ParserOptions $options = []) * @method static NodeList<FieldDefinitionNode> fieldsDefinition(Source|string $source, ParserOptions $options = []) * @method static FieldDefinitionNode fieldDefinition(Source|string $source, ParserOptions $options = []) * @method static NodeList<InputValueDefinitionNode> argumentsDefinition(Source|string $source, ParserOptions $options = []) * @method static InputValueDefinitionNode inputValueDefinition(Source|string $source, ParserOptions $options = []) * @method static InterfaceTypeDefinitionNode interfaceTypeDefinition(Source|string $source, ParserOptions $options = []) * @method static UnionTypeDefinitionNode unionTypeDefinition(Source|string $source, ParserOptions $options = []) * @method static NodeList<NamedTypeNode> unionMemberTypes(Source|string $source, ParserOptions $options = []) * @method static EnumTypeDefinitionNode enumTypeDefinition(Source|string $source, ParserOptions $options = []) * @method static NodeList<EnumValueDefinitionNode> enumValuesDefinition(Source|string $source, ParserOptions $options = []) * @method static EnumValueDefinitionNode enumValueDefinition(Source|string $source, ParserOptions $options = []) * @method static InputObjectTypeDefinitionNode inputObjectTypeDefinition(Source|string $source, ParserOptions $options = []) * @method static NodeList<InputValueDefinitionNode> inputFieldsDefinition(Source|string $source, ParserOptions $options = []) * @method static TypeExtensionNode typeExtension(Source|string $source, ParserOptions $options = []) * @method static SchemaExtensionNode schemaTypeExtension(Source|string $source, ParserOptions $options = []) * @method static ScalarTypeExtensionNode scalarTypeExtension(Source|string $source, ParserOptions $options = []) * @method static ObjectTypeExtensionNode objectTypeExtension(Source|string $source, ParserOptions $options = []) * @method static InterfaceTypeExtensionNode interfaceTypeExtension(Source|string $source, ParserOptions $options = []) * @method static UnionTypeExtensionNode unionTypeExtension(Source|string $source, ParserOptions $options = []) * @method static EnumTypeExtensionNode enumTypeExtension(Source|string $source, ParserOptions $options = []) * @method static InputObjectTypeExtensionNode inputObjectTypeExtension(Source|string $source, ParserOptions $options = []) * @method static DirectiveDefinitionNode directiveDefinition(Source|string $source, ParserOptions $options = []) * @method static NodeList<NameNode> directiveLocations(Source|string $source, ParserOptions $options = []) * @method static NameNode directiveLocation(Source|string $source, ParserOptions $options = []) * * @see \GraphQL\Tests\Language\ParserTest */ class Parser { /** * Given a GraphQL source, parses it into a `GraphQL\Language\AST\DocumentNode`. * * Throws `GraphQL\Error\SyntaxError` if a syntax error is encountered. * * @param Source|string $source * * @phpstan-param ParserOptions $options * * @api * * @throws \JsonException * @throws SyntaxError */ public static function parse($source, array $options = []): DocumentNode { return (new self($source, $options))->parseDocument(); } /** * Given a string containing a GraphQL value (ex. `[42]`), parse the AST for that value. * * Throws `GraphQL\Error\SyntaxError` if a syntax error is encountered. * * This is useful within tools that operate upon GraphQL Values directly and * in isolation of complete GraphQL documents. * * Consider providing the results to the utility function: `GraphQL\Utils\AST::valueFromAST()`. * * @param Source|string $source * * @phpstan-param ParserOptions $options * * @throws \JsonException * @throws SyntaxError * * @return BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|ListValueNode|NullValueNode|ObjectValueNode|StringValueNode|VariableNode * * @api */ public static function parseValue($source, array $options = []) { $parser = new Parser($source, $options); $parser->expect(Token::SOF); $value = $parser->parseValueLiteral(false); $parser->expect(Token::EOF); return $value; } /** * Given a string containing a GraphQL Type (ex. `[Int!]`), parse the AST for that type. * * Throws `GraphQL\Error\SyntaxError` if a syntax error is encountered. * * This is useful within tools that operate upon GraphQL Types directly and * in isolation of complete GraphQL documents. * * Consider providing the results to the utility function: `GraphQL\Utils\AST::typeFromAST()`. * * @param Source|string $source * * @phpstan-param ParserOptions $options * * @throws \JsonException * @throws SyntaxError * * @return ListTypeNode|NamedTypeNode|NonNullTypeNode * * @api */ public static function parseType($source, array $options = []) { $parser = new Parser($source, $options); $parser->expect(Token::SOF); $type = $parser->parseTypeReference(); $parser->expect(Token::EOF); return $type; } /** * Parse partial source by delegating calls to the internal parseX methods. * * @phpstan-param array{string, ParserOptions} $arguments * * @throws \JsonException * @throws SyntaxError * * @return Node|NodeList<Node> */ public static function __callStatic(string $name, array $arguments) { $parser = new Parser(...$arguments); $parser->expect(Token::SOF); switch ($name) { case 'arguments': $parsed = $parser->parseArguments(false); break; case 'valueLiteral': $parsed = $parser->parseValueLiteral(false); break; case 'array': $parsed = $parser->parseArray(false); break; case 'object': $parsed = $parser->parseObject(false); break; case 'objectField': $parsed = $parser->parseObjectField(false); break; case 'directives': $parsed = $parser->parseDirectives(false); break; case 'directive': $parsed = $parser->parseDirective(false); break; case 'constArguments': $parsed = $parser->parseArguments(true); break; case 'constValueLiteral': $parsed = $parser->parseValueLiteral(true); break; case 'constArray': $parsed = $parser->parseArray(true); break; case 'constObject': $parsed = $parser->parseObject(true); break; case 'constObjectField': $parsed = $parser->parseObjectField(true); break; case 'constDirectives': $parsed = $parser->parseDirectives(true); break; case 'constDirective': $parsed = $parser->parseDirective(true); break; default: $parsed = $parser->{'parse' . $name}(); } $parser->expect(Token::EOF); return $parsed; } private Lexer $lexer; /** * @param Source|string $source * * @phpstan-param ParserOptions $options */ public function __construct($source, array $options = []) { $sourceObj = $source instanceof Source ? $source : new Source($source); $this->lexer = new Lexer($sourceObj, $options); } /** * Returns a location object, used to identify the place in * the source that created a given parsed object. */ private function loc(Token $startToken): ?Location { if (! ($this->lexer->options['noLocation'] ?? false)) { return new Location($startToken, $this->lexer->lastToken, $this->lexer->source); } return null; } /** Determines if the next token is of a given kind. */ private function peek(string $kind): bool { return $this->lexer->token->kind === $kind; } /** * If the next token is of the given kind, return true after advancing * the parser. Otherwise, do not change the parser state and return false. * * @throws \JsonException * @throws SyntaxError */ private function skip(string $kind): bool { $match = $this->lexer->token->kind === $kind; if ($match) { $this->lexer->advance(); } return $match; } /** * If the next token is of the given kind, return that token after advancing * the parser. Otherwise, do not change the parser state and return false. * * @throws \JsonException * @throws SyntaxError */ private function expect(string $kind): Token { $token = $this->lexer->token; if ($token->kind === $kind) { $this->lexer->advance(); return $token; } throw new SyntaxError($this->lexer->source, $token->start, "Expected {$kind}, found {$token->getDescription()}"); } /** * If the next token is a keyword with the given value, advance the lexer. * Otherwise, throw an error. * * @throws \JsonException * @throws SyntaxError */ private function expectKeyword(string $value): void { $token = $this->lexer->token; if ($token->kind !== Token::NAME || $token->value !== $value) { throw new SyntaxError($this->lexer->source, $token->start, "Expected \"{$value}\", found {$token->getDescription()}"); } $this->lexer->advance(); } /** * If the next token is a given keyword, return "true" after advancing * the lexer. Otherwise, do not change the parser state and return "false". * * @throws \JsonException * @throws SyntaxError */ private function expectOptionalKeyword(string $value): bool { $token = $this->lexer->token; if ($token->kind === Token::NAME && $token->value === $value) { $this->lexer->advance(); return true; } return false; } private function unexpected(?Token $atToken = null): SyntaxError { $token = $atToken ?? $this->lexer->token; return new SyntaxError($this->lexer->source, $token->start, 'Unexpected ' . $token->getDescription()); } /** * Returns a possibly empty list of parse nodes, determined by * the parseFn. This list begins with a lex token of openKind * and ends with a lex token of closeKind. Advances the parser * to the next lex token after the closing token. * * @throws \JsonException * @throws SyntaxError * * @return NodeList<Node> */ private function any(string $openKind, callable $parseFn, string $closeKind): NodeList { $this->expect($openKind); $nodes = []; while (! $this->skip($closeKind)) { $nodes[] = $parseFn($this); } return new NodeList($nodes); } /** * Returns a non-empty list of parse nodes, determined by * the parseFn. This list begins with a lex token of openKind * and ends with a lex token of closeKind. Advances the parser * to the next lex token after the closing token. * * @template TNode of Node * * @param callable(self): TNode $parseFn * * @throws \JsonException * @throws SyntaxError * * @return NodeList<TNode> */ private function many(string $openKind, callable $parseFn, string $closeKind): NodeList { $this->expect($openKind); $nodes = [$parseFn($this)]; while (! $this->skip($closeKind)) { $nodes[] = $parseFn($this); } return new NodeList($nodes); } /** * Converts a name lex token into a name parse node. * * @throws \JsonException * @throws SyntaxError */ private function parseName(): NameNode { $token = $this->expect(Token::NAME); return new NameNode([ 'value' => $token->value, 'loc' => $this->loc($token), ]); } /** * Implements the parsing rules in the Document section. * * @throws \JsonException * @throws SyntaxError */ private function parseDocument(): DocumentNode { $start = $this->lexer->token; return new DocumentNode([ 'definitions' => $this->many( Token::SOF, fn (): DefinitionNode => $this->parseDefinition(), Token::EOF ), 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError * * @return DefinitionNode&Node */ private function parseDefinition(): DefinitionNode { if ($this->peek(Token::NAME)) { switch ($this->lexer->token->value) { case 'query': case 'mutation': case 'subscription': case 'fragment': return $this->parseExecutableDefinition(); // Note: The schema definition language is an experimental addition. case 'schema': case 'scalar': case 'type': case 'interface': case 'union': case 'enum': case 'input': case 'directive': // Note: The schema definition language is an experimental addition. return $this->parseTypeSystemDefinition(); case 'extend': return $this->parseTypeSystemExtension(); } } elseif ($this->peek(Token::BRACE_L)) { return $this->parseExecutableDefinition(); } elseif ($this->peekDescription()) { // Note: The schema definition language is an experimental addition. return $this->parseTypeSystemDefinition(); } throw $this->unexpected(); } /** * @throws \JsonException * @throws SyntaxError * * @return ExecutableDefinitionNode&Node */ private function parseExecutableDefinition(): ExecutableDefinitionNode { if ($this->peek(Token::NAME)) { switch ($this->lexer->token->value) { case 'query': case 'mutation': case 'subscription': return $this->parseOperationDefinition(); case 'fragment': return $this->parseFragmentDefinition(); } } elseif ($this->peek(Token::BRACE_L)) { return $this->parseOperationDefinition(); } throw $this->unexpected(); } // Implements the parsing rules in the Operations section. /** * @throws \JsonException * @throws SyntaxError */ private function parseOperationDefinition(): OperationDefinitionNode { $start = $this->lexer->token; if ($this->peek(Token::BRACE_L)) { return new OperationDefinitionNode([ 'name' => null, 'operation' => 'query', 'variableDefinitions' => new NodeList([]), 'directives' => new NodeList([]), 'selectionSet' => $this->parseSelectionSet(), 'loc' => $this->loc($start), ]); } $operation = $this->parseOperationType(); $name = null; if ($this->peek(Token::NAME)) { $name = $this->parseName(); } return new OperationDefinitionNode([ 'name' => $name, 'operation' => $operation, 'variableDefinitions' => $this->parseVariableDefinitions(), 'directives' => $this->parseDirectives(false), 'selectionSet' => $this->parseSelectionSet(), 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseOperationType(): string { $operationToken = $this->expect(Token::NAME); switch ($operationToken->value) { case 'query': return 'query'; case 'mutation': return 'mutation'; case 'subscription': return 'subscription'; } throw $this->unexpected($operationToken); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<VariableDefinitionNode> */ private function parseVariableDefinitions(): NodeList { return $this->peek(Token::PAREN_L) ? $this->many( Token::PAREN_L, fn (): VariableDefinitionNode => $this->parseVariableDefinition(), Token::PAREN_R ) : new NodeList([]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseVariableDefinition(): VariableDefinitionNode { $start = $this->lexer->token; $var = $this->parseVariable(); $this->expect(Token::COLON); $type = $this->parseTypeReference(); return new VariableDefinitionNode([ 'variable' => $var, 'type' => $type, 'defaultValue' => $this->skip(Token::EQUALS) ? $this->parseValueLiteral(true) : null, 'directives' => $this->parseDirectives(true), 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseVariable(): VariableNode { $start = $this->lexer->token; $this->expect(Token::DOLLAR); return new VariableNode([ 'name' => $this->parseName(), 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseSelectionSet(): SelectionSetNode { $start = $this->lexer->token; return new SelectionSetNode( [ 'selections' => $this->many( Token::BRACE_L, fn (): SelectionNode => $this->parseSelection(), Token::BRACE_R ), 'loc' => $this->loc($start), ] ); } /** * @throws \JsonException * @throws SyntaxError * * @return SelectionNode&Node */ private function parseSelection(): SelectionNode { return $this->peek(Token::SPREAD) ? $this->parseFragment() : $this->parseField(); } /** * @throws \JsonException * @throws SyntaxError */ private function parseField(): FieldNode { $start = $this->lexer->token; $nameOrAlias = $this->parseName(); if ($this->skip(Token::COLON)) { $alias = $nameOrAlias; $name = $this->parseName(); } else { $alias = null; $name = $nameOrAlias; } return new FieldNode([ 'name' => $name, 'alias' => $alias, 'arguments' => $this->parseArguments(false), 'directives' => $this->parseDirectives(false), 'selectionSet' => $this->peek(Token::BRACE_L) ? $this->parseSelectionSet() : null, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<ArgumentNode> */ private function parseArguments(bool $isConst): NodeList { $parseFn = $isConst ? fn (): ArgumentNode => $this->parseConstArgument() : fn (): ArgumentNode => $this->parseArgument(); return $this->peek(Token::PAREN_L) ? $this->many(Token::PAREN_L, $parseFn, Token::PAREN_R) : new NodeList([]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseArgument(): ArgumentNode { $start = $this->lexer->token; $name = $this->parseName(); $this->expect(Token::COLON); $value = $this->parseValueLiteral(false); return new ArgumentNode([ 'name' => $name, 'value' => $value, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseConstArgument(): ArgumentNode { $start = $this->lexer->token; $name = $this->parseName(); $this->expect(Token::COLON); $value = $this->parseConstValue(); return new ArgumentNode([ 'name' => $name, 'value' => $value, 'loc' => $this->loc($start), ]); } // Implements the parsing rules in the Fragments section. /** * @throws \JsonException * @throws SyntaxError * * @return FragmentSpreadNode|InlineFragmentNode */ private function parseFragment(): SelectionNode { $start = $this->lexer->token; $this->expect(Token::SPREAD); $hasTypeCondition = $this->expectOptionalKeyword('on'); if (! $hasTypeCondition && $this->peek(Token::NAME)) { return new FragmentSpreadNode([ 'name' => $this->parseFragmentName(), 'directives' => $this->parseDirectives(false), 'loc' => $this->loc($start), ]); } return new InlineFragmentNode([ 'typeCondition' => $hasTypeCondition ? $this->parseNamedType() : null, 'directives' => $this->parseDirectives(false), 'selectionSet' => $this->parseSelectionSet(), 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseFragmentDefinition(): FragmentDefinitionNode { $start = $this->lexer->token; $this->expectKeyword('fragment'); $name = $this->parseFragmentName(); // Experimental support for defining variables within fragments changes // the grammar of FragmentDefinition: // - fragment FragmentName VariableDefinitions? on TypeCondition Directives? SelectionSet $variableDefinitions = isset($this->lexer->options['experimentalFragmentVariables']) ? $this->parseVariableDefinitions() : null; $this->expectKeyword('on'); $typeCondition = $this->parseNamedType(); return new FragmentDefinitionNode([ 'name' => $name, 'variableDefinitions' => $variableDefinitions, 'typeCondition' => $typeCondition, 'directives' => $this->parseDirectives(false), 'selectionSet' => $this->parseSelectionSet(), 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseFragmentName(): NameNode { if ($this->lexer->token->value === 'on') { throw $this->unexpected(); } return $this->parseName(); } // Implements the parsing rules in the Values section. /** * Value[Const] : * - [~Const] Variable * - IntValue * - FloatValue * - StringValue * - BooleanValue * - NullValue * - EnumValue * - ListValue[?Const] * - ObjectValue[?Const]. * * BooleanValue : one of `true` `false` * * NullValue : `null` * * EnumValue : Name but not `true`, `false` or `null` * * @throws \JsonException * @throws SyntaxError * * @return BooleanValueNode|EnumValueNode|FloatValueNode|IntValueNode|StringValueNode|VariableNode|ListValueNode|ObjectValueNode|NullValueNode */ private function parseValueLiteral(bool $isConst): ValueNode { $token = $this->lexer->token; switch ($token->kind) { case Token::BRACKET_L: return $this->parseArray($isConst); case Token::BRACE_L: return $this->parseObject($isConst); case Token::INT: $this->lexer->advance(); return new IntValueNode([ 'value' => $token->value, 'loc' => $this->loc($token), ]); case Token::FLOAT: $this->lexer->advance(); return new FloatValueNode([ 'value' => $token->value, 'loc' => $this->loc($token), ]); case Token::STRING: case Token::BLOCK_STRING: return $this->parseStringLiteral(); case Token::NAME: if ($token->value === 'true' || $token->value === 'false') { $this->lexer->advance(); return new BooleanValueNode([ 'value' => $token->value === 'true', 'loc' => $this->loc($token), ]); } if ($token->value === 'null') { $this->lexer->advance(); return new NullValueNode([ 'loc' => $this->loc($token), ]); } $this->lexer->advance(); return new EnumValueNode([ 'value' => $token->value, 'loc' => $this->loc($token), ]); case Token::DOLLAR: if (! $isConst) { return $this->parseVariable(); } break; } throw $this->unexpected(); } /** * @throws \JsonException * @throws SyntaxError */ private function parseStringLiteral(): StringValueNode { $token = $this->lexer->token; $this->lexer->advance(); return new StringValueNode([ 'value' => $token->value, 'block' => $token->kind === Token::BLOCK_STRING, 'loc' => $this->loc($token), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseConstValue(): ValueNode { return $this->parseValueLiteral(true); } /** * @throws \JsonException * @throws SyntaxError */ private function parseVariableValue(): ValueNode { return $this->parseValueLiteral(false); } /** * @throws \JsonException * @throws SyntaxError */ private function parseArray(bool $isConst): ListValueNode { $start = $this->lexer->token; $parseFn = $isConst ? fn (): ValueNode => $this->parseConstValue() : fn (): ValueNode => $this->parseVariableValue(); return new ListValueNode([ 'values' => $this->any(Token::BRACKET_L, $parseFn, Token::BRACKET_R), 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseObject(bool $isConst): ObjectValueNode { $start = $this->lexer->token; $this->expect(Token::BRACE_L); $fields = []; while (! $this->skip(Token::BRACE_R)) { $fields[] = $this->parseObjectField($isConst); } return new ObjectValueNode([ 'fields' => new NodeList($fields), 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseObjectField(bool $isConst): ObjectFieldNode { $start = $this->lexer->token; $name = $this->parseName(); $this->expect(Token::COLON); return new ObjectFieldNode([ 'name' => $name, 'value' => $this->parseValueLiteral($isConst), 'loc' => $this->loc($start), ]); } // Implements the parsing rules in the Directives section. /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<DirectiveNode> */ private function parseDirectives(bool $isConst): NodeList { $directives = []; while ($this->peek(Token::AT)) { $directives[] = $this->parseDirective($isConst); } return new NodeList($directives); } /** * @throws \JsonException * @throws SyntaxError */ private function parseDirective(bool $isConst): DirectiveNode { $start = $this->lexer->token; $this->expect(Token::AT); return new DirectiveNode([ 'name' => $this->parseName(), 'arguments' => $this->parseArguments($isConst), 'loc' => $this->loc($start), ]); } // Implements the parsing rules in the Types section. /** * Handles the Type: TypeName, ListType, and NonNullType parsing rules. * * @throws \JsonException * @throws SyntaxError * * @return ListTypeNode|NamedTypeNode|NonNullTypeNode */ private function parseTypeReference(): TypeNode { $start = $this->lexer->token; if ($this->skip(Token::BRACKET_L)) { $type = $this->parseTypeReference(); $this->expect(Token::BRACKET_R); $type = new ListTypeNode([ 'type' => $type, 'loc' => $this->loc($start), ]); } else { $type = $this->parseNamedType(); } if ($this->skip(Token::BANG)) { return new NonNullTypeNode([ 'type' => $type, 'loc' => $this->loc($start), ]); } return $type; } /** * @throws \JsonException * @throws SyntaxError */ private function parseNamedType(): NamedTypeNode { $start = $this->lexer->token; return new NamedTypeNode([ 'name' => $this->parseName(), 'loc' => $this->loc($start), ]); } // Implements the parsing rules in the Type Definition section. /** * @throws \JsonException * @throws SyntaxError * * @return TypeSystemDefinitionNode&Node */ private function parseTypeSystemDefinition(): TypeSystemDefinitionNode { // Many definitions begin with a description and require a lookahead. $keywordToken = $this->peekDescription() ? $this->lexer->lookahead() : $this->lexer->token; if ($keywordToken->kind === Token::NAME) { switch ($keywordToken->value) { case 'schema': return $this->parseSchemaDefinition(); case 'scalar': return $this->parseScalarTypeDefinition(); case 'type': return $this->parseObjectTypeDefinition(); case 'interface': return $this->parseInterfaceTypeDefinition(); case 'union': return $this->parseUnionTypeDefinition(); case 'enum': return $this->parseEnumTypeDefinition(); case 'input': return $this->parseInputObjectTypeDefinition(); case 'directive': return $this->parseDirectiveDefinition(); } } throw $this->unexpected($keywordToken); } private function peekDescription(): bool { return $this->peek(Token::STRING) || $this->peek(Token::BLOCK_STRING); } /** * @throws \JsonException * @throws SyntaxError */ private function parseDescription(): ?StringValueNode { if ($this->peekDescription()) { return $this->parseStringLiteral(); } return null; } /** * @throws \JsonException * @throws SyntaxError */ private function parseSchemaDefinition(): SchemaDefinitionNode { $start = $this->lexer->token; $this->expectKeyword('schema'); $directives = $this->parseDirectives(true); $operationTypes = $this->many( Token::BRACE_L, fn (): OperationTypeDefinitionNode => $this->parseOperationTypeDefinition(), Token::BRACE_R ); return new SchemaDefinitionNode([ 'directives' => $directives, 'operationTypes' => $operationTypes, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseOperationTypeDefinition(): OperationTypeDefinitionNode { $start = $this->lexer->token; $operation = $this->parseOperationType(); $this->expect(Token::COLON); $type = $this->parseNamedType(); return new OperationTypeDefinitionNode([ 'operation' => $operation, 'type' => $type, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseScalarTypeDefinition(): ScalarTypeDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $this->expectKeyword('scalar'); $name = $this->parseName(); $directives = $this->parseDirectives(true); return new ScalarTypeDefinitionNode([ 'name' => $name, 'directives' => $directives, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseObjectTypeDefinition(): ObjectTypeDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $this->expectKeyword('type'); $name = $this->parseName(); $interfaces = $this->parseImplementsInterfaces(); $directives = $this->parseDirectives(true); $fields = $this->parseFieldsDefinition(); return new ObjectTypeDefinitionNode([ 'name' => $name, 'interfaces' => $interfaces, 'directives' => $directives, 'fields' => $fields, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<NamedTypeNode> */ private function parseImplementsInterfaces(): NodeList { $types = []; if ($this->expectOptionalKeyword('implements')) { // Optional leading ampersand $this->skip(Token::AMP); do { $types[] = $this->parseNamedType(); } while ( $this->skip(Token::AMP) // Legacy support for the SDL? || (($this->lexer->options['allowLegacySDLImplementsInterfaces'] ?? false) && $this->peek(Token::NAME)) ); } return new NodeList($types); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<FieldDefinitionNode> */ private function parseFieldsDefinition(): NodeList { // Legacy support for the SDL? if ( ($this->lexer->options['allowLegacySDLEmptyFields'] ?? false) && $this->peek(Token::BRACE_L) && $this->lexer->lookahead()->kind === Token::BRACE_R ) { $this->lexer->advance(); $this->lexer->advance(); /** @phpstan-var NodeList<FieldDefinitionNode> $nodeList */ $nodeList = new NodeList([]); } else { /** @phpstan-var NodeList<FieldDefinitionNode> $nodeList */ $nodeList = $this->peek(Token::BRACE_L) ? $this->many( Token::BRACE_L, fn (): FieldDefinitionNode => $this->parseFieldDefinition(), Token::BRACE_R ) : new NodeList([]); } return $nodeList; } /** * @throws \JsonException * @throws SyntaxError */ private function parseFieldDefinition(): FieldDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $name = $this->parseName(); $args = $this->parseArgumentsDefinition(); $this->expect(Token::COLON); $type = $this->parseTypeReference(); $directives = $this->parseDirectives(true); return new FieldDefinitionNode([ 'name' => $name, 'arguments' => $args, 'type' => $type, 'directives' => $directives, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<InputValueDefinitionNode> */ private function parseArgumentsDefinition(): NodeList { return $this->peek(Token::PAREN_L) ? $this->many( Token::PAREN_L, fn (): InputValueDefinitionNode => $this->parseInputValueDefinition(), Token::PAREN_R ) : new NodeList([]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseInputValueDefinition(): InputValueDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $name = $this->parseName(); $this->expect(Token::COLON); $type = $this->parseTypeReference(); $defaultValue = null; if ($this->skip(Token::EQUALS)) { $defaultValue = $this->parseConstValue(); } $directives = $this->parseDirectives(true); return new InputValueDefinitionNode([ 'name' => $name, 'type' => $type, 'defaultValue' => $defaultValue, 'directives' => $directives, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseInterfaceTypeDefinition(): InterfaceTypeDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $this->expectKeyword('interface'); $name = $this->parseName(); $interfaces = $this->parseImplementsInterfaces(); $directives = $this->parseDirectives(true); $fields = $this->parseFieldsDefinition(); return new InterfaceTypeDefinitionNode([ 'name' => $name, 'directives' => $directives, 'interfaces' => $interfaces, 'fields' => $fields, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * UnionTypeDefinition : * - Description? union Name Directives[Const]? UnionMemberTypes? * * @throws \JsonException * @throws SyntaxError */ private function parseUnionTypeDefinition(): UnionTypeDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $this->expectKeyword('union'); $name = $this->parseName(); $directives = $this->parseDirectives(true); $types = $this->parseUnionMemberTypes(); return new UnionTypeDefinitionNode([ 'name' => $name, 'directives' => $directives, 'types' => $types, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<NamedTypeNode> */ private function parseUnionMemberTypes(): NodeList { $types = []; if ($this->skip(Token::EQUALS)) { // Optional leading pipe $this->skip(Token::PIPE); do { $types[] = $this->parseNamedType(); } while ($this->skip(Token::PIPE)); } return new NodeList($types); } /** * @throws \JsonException * @throws SyntaxError */ private function parseEnumTypeDefinition(): EnumTypeDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $this->expectKeyword('enum'); $name = $this->parseName(); $directives = $this->parseDirectives(true); $values = $this->parseEnumValuesDefinition(); return new EnumTypeDefinitionNode([ 'name' => $name, 'directives' => $directives, 'values' => $values, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<EnumValueDefinitionNode> */ private function parseEnumValuesDefinition(): NodeList { return $this->peek(Token::BRACE_L) ? $this->many( Token::BRACE_L, fn (): EnumValueDefinitionNode => $this->parseEnumValueDefinition(), Token::BRACE_R ) : new NodeList([]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseEnumValueDefinition(): EnumValueDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $name = $this->parseName(); $directives = $this->parseDirectives(true); return new EnumValueDefinitionNode([ 'name' => $name, 'directives' => $directives, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseInputObjectTypeDefinition(): InputObjectTypeDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $this->expectKeyword('input'); $name = $this->parseName(); $directives = $this->parseDirectives(true); $fields = $this->parseInputFieldsDefinition(); return new InputObjectTypeDefinitionNode([ 'name' => $name, 'directives' => $directives, 'fields' => $fields, 'loc' => $this->loc($start), 'description' => $description, ]); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<InputValueDefinitionNode> */ private function parseInputFieldsDefinition(): NodeList { return $this->peek(Token::BRACE_L) ? $this->many( Token::BRACE_L, fn (): InputValueDefinitionNode => $this->parseInputValueDefinition(), Token::BRACE_R ) : new NodeList([]); } /** * @throws \JsonException * @throws SyntaxError * * @return TypeSystemExtensionNode&Node */ private function parseTypeSystemExtension(): TypeSystemExtensionNode { $keywordToken = $this->lexer->lookahead(); if ($keywordToken->kind === Token::NAME) { switch ($keywordToken->value) { case 'schema': return $this->parseSchemaTypeExtension(); case 'scalar': return $this->parseScalarTypeExtension(); case 'type': return $this->parseObjectTypeExtension(); case 'interface': return $this->parseInterfaceTypeExtension(); case 'union': return $this->parseUnionTypeExtension(); case 'enum': return $this->parseEnumTypeExtension(); case 'input': return $this->parseInputObjectTypeExtension(); } } throw $this->unexpected($keywordToken); } /** * @throws \JsonException * @throws SyntaxError */ private function parseSchemaTypeExtension(): SchemaExtensionNode { $start = $this->lexer->token; $this->expectKeyword('extend'); $this->expectKeyword('schema'); $directives = $this->parseDirectives(true); $operationTypes = $this->peek(Token::BRACE_L) ? $this->many( Token::BRACE_L, fn (): OperationTypeDefinitionNode => $this->parseOperationTypeDefinition(), Token::BRACE_R ) : new NodeList([]); if (count($directives) === 0 && count($operationTypes) === 0) { $this->unexpected(); } return new SchemaExtensionNode([ 'directives' => $directives, 'operationTypes' => $operationTypes, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseScalarTypeExtension(): ScalarTypeExtensionNode { $start = $this->lexer->token; $this->expectKeyword('extend'); $this->expectKeyword('scalar'); $name = $this->parseName(); $directives = $this->parseDirectives(true); if (count($directives) === 0) { throw $this->unexpected(); } return new ScalarTypeExtensionNode([ 'name' => $name, 'directives' => $directives, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseObjectTypeExtension(): ObjectTypeExtensionNode { $start = $this->lexer->token; $this->expectKeyword('extend'); $this->expectKeyword('type'); $name = $this->parseName(); $interfaces = $this->parseImplementsInterfaces(); $directives = $this->parseDirectives(true); $fields = $this->parseFieldsDefinition(); if ( count($interfaces) === 0 && count($directives) === 0 && count($fields) === 0 ) { throw $this->unexpected(); } return new ObjectTypeExtensionNode([ 'name' => $name, 'interfaces' => $interfaces, 'directives' => $directives, 'fields' => $fields, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseInterfaceTypeExtension(): InterfaceTypeExtensionNode { $start = $this->lexer->token; $this->expectKeyword('extend'); $this->expectKeyword('interface'); $name = $this->parseName(); $interfaces = $this->parseImplementsInterfaces(); $directives = $this->parseDirectives(true); $fields = $this->parseFieldsDefinition(); if ( count($interfaces) === 0 && count($directives) === 0 && count($fields) === 0 ) { throw $this->unexpected(); } return new InterfaceTypeExtensionNode([ 'name' => $name, 'directives' => $directives, 'interfaces' => $interfaces, 'fields' => $fields, 'loc' => $this->loc($start), ]); } /** * UnionTypeExtension : * - extend union Name Directives[Const]? UnionMemberTypes * - extend union Name Directives[Const]. * * @throws \JsonException * @throws SyntaxError */ private function parseUnionTypeExtension(): UnionTypeExtensionNode { $start = $this->lexer->token; $this->expectKeyword('extend'); $this->expectKeyword('union'); $name = $this->parseName(); $directives = $this->parseDirectives(true); $types = $this->parseUnionMemberTypes(); if (count($directives) === 0 && count($types) === 0) { throw $this->unexpected(); } return new UnionTypeExtensionNode([ 'name' => $name, 'directives' => $directives, 'types' => $types, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseEnumTypeExtension(): EnumTypeExtensionNode { $start = $this->lexer->token; $this->expectKeyword('extend'); $this->expectKeyword('enum'); $name = $this->parseName(); $directives = $this->parseDirectives(true); $values = $this->parseEnumValuesDefinition(); if ( count($directives) === 0 && count($values) === 0 ) { throw $this->unexpected(); } return new EnumTypeExtensionNode([ 'name' => $name, 'directives' => $directives, 'values' => $values, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError */ private function parseInputObjectTypeExtension(): InputObjectTypeExtensionNode { $start = $this->lexer->token; $this->expectKeyword('extend'); $this->expectKeyword('input'); $name = $this->parseName(); $directives = $this->parseDirectives(true); $fields = $this->parseInputFieldsDefinition(); if ( count($directives) === 0 && count($fields) === 0 ) { throw $this->unexpected(); } return new InputObjectTypeExtensionNode([ 'name' => $name, 'directives' => $directives, 'fields' => $fields, 'loc' => $this->loc($start), ]); } /** * DirectiveDefinition : * - Description? directive @ Name ArgumentsDefinition? `repeatable`? on DirectiveLocations. * * @throws \JsonException * @throws SyntaxError */ private function parseDirectiveDefinition(): DirectiveDefinitionNode { $start = $this->lexer->token; $description = $this->parseDescription(); $this->expectKeyword('directive'); $this->expect(Token::AT); $name = $this->parseName(); $args = $this->parseArgumentsDefinition(); $repeatable = $this->expectOptionalKeyword('repeatable'); $this->expectKeyword('on'); $locations = $this->parseDirectiveLocations(); return new DirectiveDefinitionNode([ 'name' => $name, 'description' => $description, 'arguments' => $args, 'repeatable' => $repeatable, 'locations' => $locations, 'loc' => $this->loc($start), ]); } /** * @throws \JsonException * @throws SyntaxError * * @return NodeList<NameNode> */ private function parseDirectiveLocations(): NodeList { // Optional leading pipe $this->skip(Token::PIPE); $locations = []; do { $locations[] = $this->parseDirectiveLocation(); } while ($this->skip(Token::PIPE)); return new NodeList($locations); } /** * @throws \JsonException * @throws SyntaxError */ private function parseDirectiveLocation(): NameNode { $start = $this->lexer->token; $name = $this->parseName(); if (DirectiveLocation::has($name->value)) { return $name; } throw $this->unexpected($start); } } graphql/lib/Language/SourceLocation.php000064400000001450151666572100014146 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; class SourceLocation implements \JsonSerializable { public int $line; public int $column; public function __construct(int $line, int $col) { $this->line = $line; $this->column = $col; } /** @return array{line: int, column: int} */ public function toArray(): array { return [ 'line' => $this->line, 'column' => $this->column, ]; } /** @return array{line: int, column: int} */ public function toSerializableArray(): array { return $this->toArray(); } /** @return array{line: int, column: int} */ #[\ReturnTypeWillChange] public function jsonSerialize(): array { return $this->toArray(); } } graphql/lib/Language/DirectiveLocation.php000064400000004305151666572100014626 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; /** * Enumeration of available directive locations. */ class DirectiveLocation { public const QUERY = 'QUERY'; public const MUTATION = 'MUTATION'; public const SUBSCRIPTION = 'SUBSCRIPTION'; public const FIELD = 'FIELD'; public const FRAGMENT_DEFINITION = 'FRAGMENT_DEFINITION'; public const FRAGMENT_SPREAD = 'FRAGMENT_SPREAD'; public const INLINE_FRAGMENT = 'INLINE_FRAGMENT'; public const VARIABLE_DEFINITION = 'VARIABLE_DEFINITION'; public const EXECUTABLE_LOCATIONS = [ self::QUERY => self::QUERY, self::MUTATION => self::MUTATION, self::SUBSCRIPTION => self::SUBSCRIPTION, self::FIELD => self::FIELD, self::FRAGMENT_DEFINITION => self::FRAGMENT_DEFINITION, self::FRAGMENT_SPREAD => self::FRAGMENT_SPREAD, self::INLINE_FRAGMENT => self::INLINE_FRAGMENT, self::VARIABLE_DEFINITION => self::VARIABLE_DEFINITION, ]; public const SCHEMA = 'SCHEMA'; public const SCALAR = 'SCALAR'; public const OBJECT = 'OBJECT'; public const FIELD_DEFINITION = 'FIELD_DEFINITION'; public const ARGUMENT_DEFINITION = 'ARGUMENT_DEFINITION'; public const IFACE = 'INTERFACE'; public const UNION = 'UNION'; public const ENUM = 'ENUM'; public const ENUM_VALUE = 'ENUM_VALUE'; public const INPUT_OBJECT = 'INPUT_OBJECT'; public const INPUT_FIELD_DEFINITION = 'INPUT_FIELD_DEFINITION'; public const TYPE_SYSTEM_LOCATIONS = [ self::SCHEMA => self::SCHEMA, self::SCALAR => self::SCALAR, self::OBJECT => self::OBJECT, self::FIELD_DEFINITION => self::FIELD_DEFINITION, self::ARGUMENT_DEFINITION => self::ARGUMENT_DEFINITION, self::IFACE => self::IFACE, self::UNION => self::UNION, self::ENUM => self::ENUM, self::ENUM_VALUE => self::ENUM_VALUE, self::INPUT_OBJECT => self::INPUT_OBJECT, self::INPUT_FIELD_DEFINITION => self::INPUT_FIELD_DEFINITION, ]; public const LOCATIONS = self::EXECUTABLE_LOCATIONS + self::TYPE_SYSTEM_LOCATIONS; public static function has(string $name): bool { return isset(self::LOCATIONS[$name]); } } graphql/lib/Language/AST/ObjectFieldNode.php000064400000000561151666572100014626 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class ObjectFieldNode extends Node { public string $kind = NodeKind::OBJECT_FIELD; public NameNode $name; /** @var VariableNode|NullValueNode|IntValueNode|FloatValueNode|StringValueNode|BooleanValueNode|EnumValueNode|ListValueNode|ObjectValueNode */ public ValueNode $value; } graphql/lib/Language/AST/InputValueDefinitionNode.php000064400000001153151666572100016557 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class InputValueDefinitionNode extends Node { public string $kind = NodeKind::INPUT_VALUE_DEFINITION; public NameNode $name; /** @var NamedTypeNode|ListTypeNode|NonNullTypeNode */ public TypeNode $type; /** @var VariableNode|NullValueNode|IntValueNode|FloatValueNode|StringValueNode|BooleanValueNode|EnumValueNode|ListValueNode|ObjectValueNode|null */ public ?ValueNode $defaultValue = null; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public ?StringValueNode $description = null; } graphql/lib/Language/AST/ScalarTypeExtensionNode.php000064400000000610151666572100016413 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class ScalarTypeExtensionNode extends Node implements TypeExtensionNode { public string $kind = NodeKind::SCALAR_TYPE_EXTENSION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/FragmentSpreadNode.php000064400000000666151666572100015364 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class FragmentSpreadNode extends Node implements SelectionNode { public string $kind = NodeKind::FRAGMENT_SPREAD; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); } } graphql/lib/Language/AST/InterfaceTypeExtensionNode.php000064400000001044151666572100017110 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class InterfaceTypeExtensionNode extends Node implements TypeExtensionNode { public string $kind = NodeKind::INTERFACE_TYPE_EXTENSION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<NamedTypeNode> */ public NodeList $interfaces; /** @var NodeList<FieldDefinitionNode> */ public NodeList $fields; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/BooleanValueNode.php000064400000000315151666572100015025 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class BooleanValueNode extends Node implements ValueNode { public string $kind = NodeKind::BOOLEAN; public bool $value; } graphql/lib/Language/AST/TypeDefinitionNode.php000064400000000626151666572100015410 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type TypeDefinitionNode = ScalarTypeDefinitionNode * | ObjectTypeDefinitionNode * | InterfaceTypeDefinitionNode * | UnionTypeDefinitionNode * | EnumTypeDefinitionNode * | InputObjectTypeDefinitionNode. */ interface TypeDefinitionNode extends TypeSystemDefinitionNode { public function getName(): NameNode; } graphql/lib/Language/AST/EnumTypeDefinitionNode.php000064400000001227151666572100016233 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class EnumTypeDefinitionNode extends Node implements TypeDefinitionNode { public string $kind = NodeKind::ENUM_TYPE_DEFINITION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<EnumValueDefinitionNode> */ public NodeList $values; public ?StringValueNode $description = null; public function getName(): NameNode { return $this->name; } public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); } } graphql/lib/Language/AST/InlineFragmentNode.php000064400000000770151666572100015360 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class InlineFragmentNode extends Node implements SelectionNode { public string $kind = NodeKind::INLINE_FRAGMENT; public ?NamedTypeNode $typeCondition = null; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public SelectionSetNode $selectionSet; public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); } } graphql/lib/Language/AST/TypeExtensionNode.php000064400000000623151666572100015271 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type TypeExtensionNode = * | ScalarTypeExtensionNode * | ObjectTypeExtensionNode * | InterfaceTypeExtensionNode * | UnionTypeExtensionNode * | EnumTypeExtensionNode * | InputObjectTypeExtensionNode;. */ interface TypeExtensionNode extends TypeSystemExtensionNode { public function getName(): NameNode; } graphql/lib/Language/AST/NonNullTypeNode.php000064400000000377151666572100014710 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class NonNullTypeNode extends Node implements TypeNode { public string $kind = NodeKind::NON_NULL_TYPE; /** @var NamedTypeNode|ListTypeNode */ public TypeNode $type; } graphql/lib/Language/AST/ListTypeNode.php000064400000000410151666572100014222 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class ListTypeNode extends Node implements TypeNode { public string $kind = NodeKind::LIST_TYPE; /** @var NamedTypeNode|ListTypeNode|NonNullTypeNode */ public TypeNode $type; } graphql/lib/Language/AST/ExecutableDefinitionNode.php000064400000000370151666572100016544 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type ExecutableDefinitionNode = * | OperationDefinitionNode * | FragmentDefinitionNode;. */ interface ExecutableDefinitionNode extends DefinitionNode {} graphql/lib/Language/AST/DirectiveDefinitionNode.php000064400000001150151666572100016376 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class DirectiveDefinitionNode extends Node implements TypeSystemDefinitionNode { public string $kind = NodeKind::DIRECTIVE_DEFINITION; public NameNode $name; public ?StringValueNode $description = null; /** @var NodeList<InputValueDefinitionNode> */ public NodeList $arguments; public bool $repeatable; /** @var NodeList<NameNode> */ public NodeList $locations; public function __construct(array $vars) { parent::__construct($vars); $this->arguments ??= new NodeList([]); } } graphql/lib/Language/AST/DirectiveNode.php000064400000000617151666572100014374 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class DirectiveNode extends Node { public string $kind = NodeKind::DIRECTIVE; public NameNode $name; /** @var NodeList<ArgumentNode> */ public NodeList $arguments; public function __construct(array $vars) { parent::__construct($vars); $this->arguments ??= new NodeList([]); } } graphql/lib/Language/AST/FragmentDefinitionNode.php000064400000001764151666572100016236 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class FragmentDefinitionNode extends Node implements ExecutableDefinitionNode, HasSelectionSet { public string $kind = NodeKind::FRAGMENT_DEFINITION; public NameNode $name; /** * Note: fragment variable definitions are experimental and may be changed * or removed in the future. * * Thus, this property is the single exception where this is not always a NodeList but may be null. * * @var NodeList<VariableDefinitionNode>|null */ public ?NodeList $variableDefinitions = null; public NamedTypeNode $typeCondition; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public SelectionSetNode $selectionSet; public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); } public function getSelectionSet(): SelectionSetNode { return $this->selectionSet; } } graphql/lib/Language/AST/EnumValueNode.php000064400000000311151666572100014346 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class EnumValueNode extends Node implements ValueNode { public string $kind = NodeKind::ENUM; public string $value; } graphql/lib/Language/AST/InputObjectTypeExtensionNode.php000064400000000744151666572100017444 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class InputObjectTypeExtensionNode extends Node implements TypeExtensionNode { public string $kind = NodeKind::INPUT_OBJECT_TYPE_EXTENSION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<InputValueDefinitionNode> */ public NodeList $fields; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/ScalarTypeDefinitionNode.php000064400000000675151666572100016542 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class ScalarTypeDefinitionNode extends Node implements TypeDefinitionNode { public string $kind = NodeKind::SCALAR_TYPE_DEFINITION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public ?StringValueNode $description = null; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/UnionTypeExtensionNode.php000064400000000713151666572100016302 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class UnionTypeExtensionNode extends Node implements TypeExtensionNode { public string $kind = NodeKind::UNION_TYPE_EXTENSION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<NamedTypeNode> */ public NodeList $types; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/ObjectValueNode.php000064400000000372151666572100014657 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class ObjectValueNode extends Node implements ValueNode { public string $kind = NodeKind::OBJECT; /** @var NodeList<ObjectFieldNode> */ public NodeList $fields; } graphql/lib/Language/AST/OperationDefinitionNode.php000064400000001624151666572100016426 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * @phpstan-type OperationType 'query'|'mutation'|'subscription' */ class OperationDefinitionNode extends Node implements ExecutableDefinitionNode, HasSelectionSet { public string $kind = NodeKind::OPERATION_DEFINITION; public ?NameNode $name = null; /** @var OperationType */ public string $operation; /** @var NodeList<VariableDefinitionNode> */ public NodeList $variableDefinitions; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public SelectionSetNode $selectionSet; public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); $this->variableDefinitions ??= new NodeList([]); } public function getSelectionSet(): SelectionSetNode { return $this->selectionSet; } } graphql/lib/Language/AST/NodeList.php000064400000007560151666572100013375 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Utils\AST; /** * @template T of Node * * @phpstan-implements \ArrayAccess<array-key, T> * @phpstan-implements \IteratorAggregate<array-key, T> */ class NodeList implements \ArrayAccess, \IteratorAggregate, \Countable { /** * @var array<Node|array> * * @phpstan-var array<T|array<string, mixed>> */ private array $nodes; /** * @param array<Node|array> $nodes * * @phpstan-param array<T|array<string, mixed>> $nodes */ public function __construct(array $nodes) { $this->nodes = $nodes; } /** @param int|string $offset */ #[\ReturnTypeWillChange] public function offsetExists($offset): bool { return isset($this->nodes[$offset]); } /** * @param int|string $offset * * @phpstan-return T */ #[\ReturnTypeWillChange] public function offsetGet($offset): Node { $item = $this->nodes[$offset]; if (is_array($item)) { // @phpstan-ignore-next-line not really possible to express the correctness of this in PHP return $this->nodes[$offset] = AST::fromArray($item); } return $item; } /** * @param int|string|null $offset * @param Node|array<string, mixed> $value * * @phpstan-param T|array<string, mixed> $value * * @throws \JsonException * @throws InvariantViolation */ #[\ReturnTypeWillChange] public function offsetSet($offset, $value): void { if (is_array($value)) { /** @phpstan-var T $value */ $value = AST::fromArray($value); } // Happens when a Node is pushed via []= if ($offset === null) { $this->nodes[] = $value; return; } $this->nodes[$offset] = $value; } /** @param int|string $offset */ #[\ReturnTypeWillChange] public function offsetUnset($offset): void { unset($this->nodes[$offset]); } public function getIterator(): \Traversable { foreach ($this->nodes as $key => $_) { yield $key => $this->offsetGet($key); } } public function count(): int { return count($this->nodes); } /** * Remove a portion of the NodeList and replace it with something else. * * @param T|iterable<T>|null $replacement * * @phpstan-return NodeList<T> the NodeList with the extracted elements */ public function splice(int $offset, int $length, $replacement = null): NodeList { if (is_iterable($replacement) && ! is_array($replacement)) { $replacement = iterator_to_array($replacement); } return new NodeList( array_splice($this->nodes, $offset, $length, $replacement) ); } /** * @phpstan-param iterable<array-key, T> $list * * @phpstan-return NodeList<T> */ public function merge(iterable $list): NodeList { if (! is_array($list)) { $list = iterator_to_array($list); } return new NodeList(array_merge($this->nodes, $list)); } /** Resets the keys of the stored nodes to contiguous numeric indexes. */ public function reindex(): void { $this->nodes = array_values($this->nodes); } /** * Returns a clone of this instance and all its children, except Location $loc. * * @throws \JsonException * @throws InvariantViolation * * @return static<T> */ public function cloneDeep(): self { /** @var array<T> $empty */ $empty = []; $cloned = new static($empty); foreach ($this->getIterator() as $key => $node) { $cloned[$key] = $node->cloneDeep(); } return $cloned; } } graphql/lib/Language/AST/DocumentNode.php000064400000000355151666572100014233 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class DocumentNode extends Node { public string $kind = NodeKind::DOCUMENT; /** @var NodeList<DefinitionNode&Node> */ public NodeList $definitions; } graphql/lib/Language/AST/SelectionNode.php000064400000000301151666572100014371 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type SelectionNode = FieldNode | FragmentSpreadNode | InlineFragmentNode. */ interface SelectionNode {} graphql/lib/Language/AST/NodeKind.php000064400000012572151666572100013346 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * Holds constants of possible AST nodes. */ class NodeKind { // constants from language/kinds.js: public const NAME = 'Name'; // Document public const DOCUMENT = 'Document'; public const OPERATION_DEFINITION = 'OperationDefinition'; public const VARIABLE_DEFINITION = 'VariableDefinition'; public const VARIABLE = 'Variable'; public const SELECTION_SET = 'SelectionSet'; public const FIELD = 'Field'; public const ARGUMENT = 'Argument'; // Fragments public const FRAGMENT_SPREAD = 'FragmentSpread'; public const INLINE_FRAGMENT = 'InlineFragment'; public const FRAGMENT_DEFINITION = 'FragmentDefinition'; // Values public const INT = 'IntValue'; public const FLOAT = 'FloatValue'; public const STRING = 'StringValue'; public const BOOLEAN = 'BooleanValue'; public const ENUM = 'EnumValue'; public const NULL = 'NullValue'; public const LST = 'ListValue'; public const OBJECT = 'ObjectValue'; public const OBJECT_FIELD = 'ObjectField'; // Directives public const DIRECTIVE = 'Directive'; // Types public const NAMED_TYPE = 'NamedType'; public const LIST_TYPE = 'ListType'; public const NON_NULL_TYPE = 'NonNullType'; // Type System Definitions public const SCHEMA_DEFINITION = 'SchemaDefinition'; public const OPERATION_TYPE_DEFINITION = 'OperationTypeDefinition'; // Type Definitions public const SCALAR_TYPE_DEFINITION = 'ScalarTypeDefinition'; public const OBJECT_TYPE_DEFINITION = 'ObjectTypeDefinition'; public const FIELD_DEFINITION = 'FieldDefinition'; public const INPUT_VALUE_DEFINITION = 'InputValueDefinition'; public const INTERFACE_TYPE_DEFINITION = 'InterfaceTypeDefinition'; public const UNION_TYPE_DEFINITION = 'UnionTypeDefinition'; public const ENUM_TYPE_DEFINITION = 'EnumTypeDefinition'; public const ENUM_VALUE_DEFINITION = 'EnumValueDefinition'; public const INPUT_OBJECT_TYPE_DEFINITION = 'InputObjectTypeDefinition'; // Type Extensions public const SCALAR_TYPE_EXTENSION = 'ScalarTypeExtension'; public const OBJECT_TYPE_EXTENSION = 'ObjectTypeExtension'; public const INTERFACE_TYPE_EXTENSION = 'InterfaceTypeExtension'; public const UNION_TYPE_EXTENSION = 'UnionTypeExtension'; public const ENUM_TYPE_EXTENSION = 'EnumTypeExtension'; public const INPUT_OBJECT_TYPE_EXTENSION = 'InputObjectTypeExtension'; // Directive Definitions public const DIRECTIVE_DEFINITION = 'DirectiveDefinition'; // Type System Extensions public const SCHEMA_EXTENSION = 'SchemaExtension'; public const CLASS_MAP = [ self::NAME => NameNode::class, // Document self::DOCUMENT => DocumentNode::class, self::OPERATION_DEFINITION => OperationDefinitionNode::class, self::VARIABLE_DEFINITION => VariableDefinitionNode::class, self::VARIABLE => VariableNode::class, self::SELECTION_SET => SelectionSetNode::class, self::FIELD => FieldNode::class, self::ARGUMENT => ArgumentNode::class, // Fragments self::FRAGMENT_SPREAD => FragmentSpreadNode::class, self::INLINE_FRAGMENT => InlineFragmentNode::class, self::FRAGMENT_DEFINITION => FragmentDefinitionNode::class, // Values self::INT => IntValueNode::class, self::FLOAT => FloatValueNode::class, self::STRING => StringValueNode::class, self::BOOLEAN => BooleanValueNode::class, self::ENUM => EnumValueNode::class, self::NULL => NullValueNode::class, self::LST => ListValueNode::class, self::OBJECT => ObjectValueNode::class, self::OBJECT_FIELD => ObjectFieldNode::class, // Directives self::DIRECTIVE => DirectiveNode::class, // Types self::NAMED_TYPE => NamedTypeNode::class, self::LIST_TYPE => ListTypeNode::class, self::NON_NULL_TYPE => NonNullTypeNode::class, // Type System Definitions self::SCHEMA_DEFINITION => SchemaDefinitionNode::class, self::OPERATION_TYPE_DEFINITION => OperationTypeDefinitionNode::class, // Type Definitions self::SCALAR_TYPE_DEFINITION => ScalarTypeDefinitionNode::class, self::OBJECT_TYPE_DEFINITION => ObjectTypeDefinitionNode::class, self::FIELD_DEFINITION => FieldDefinitionNode::class, self::INPUT_VALUE_DEFINITION => InputValueDefinitionNode::class, self::INTERFACE_TYPE_DEFINITION => InterfaceTypeDefinitionNode::class, self::UNION_TYPE_DEFINITION => UnionTypeDefinitionNode::class, self::ENUM_TYPE_DEFINITION => EnumTypeDefinitionNode::class, self::ENUM_VALUE_DEFINITION => EnumValueDefinitionNode::class, self::INPUT_OBJECT_TYPE_DEFINITION => InputObjectTypeDefinitionNode::class, // Type Extensions self::SCALAR_TYPE_EXTENSION => ScalarTypeExtensionNode::class, self::OBJECT_TYPE_EXTENSION => ObjectTypeExtensionNode::class, self::INTERFACE_TYPE_EXTENSION => InterfaceTypeExtensionNode::class, self::UNION_TYPE_EXTENSION => UnionTypeExtensionNode::class, self::ENUM_TYPE_EXTENSION => EnumTypeExtensionNode::class, self::INPUT_OBJECT_TYPE_EXTENSION => InputObjectTypeExtensionNode::class, // Directive Definitions self::DIRECTIVE_DEFINITION => DirectiveDefinitionNode::class, ]; } graphql/lib/Language/AST/ValueNode.php000064400000000461151666572100013527 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type ValueNode = VariableNode * | NullValueNode * | IntValueNode * | FloatValueNode * | StringValueNode * | BooleanValueNode * | EnumValueNode * | ListValueNode * | ObjectValueNode. */ interface ValueNode {} graphql/lib/Language/AST/FloatValueNode.php000064400000000313151666572100014511 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class FloatValueNode extends Node implements ValueNode { public string $kind = NodeKind::FLOAT; public string $value; } graphql/lib/Language/AST/DefinitionNode.php000064400000000357151666572100014547 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type DefinitionNode = * | ExecutableDefinitionNode * | TypeSystemDefinitionNode * | TypeSystemExtensionNode;. */ interface DefinitionNode {} graphql/lib/Language/AST/ObjectTypeExtensionNode.php000064400000001036151666572100016417 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class ObjectTypeExtensionNode extends Node implements TypeExtensionNode { public string $kind = NodeKind::OBJECT_TYPE_EXTENSION; public NameNode $name; /** @var NodeList<NamedTypeNode> */ public NodeList $interfaces; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<FieldDefinitionNode> */ public NodeList $fields; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/NullValueNode.php000064400000000256151666572100014364 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class NullValueNode extends Node implements ValueNode { public string $kind = NodeKind::NULL; } graphql/lib/Language/AST/NameNode.php000064400000000303151666572100013326 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class NameNode extends Node implements TypeNode { public string $kind = NodeKind::NAME; public string $value; } graphql/lib/Language/AST/Node.php000064400000007103151666572100012532 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Utils\Utils; /** * type Node = NameNode * | DocumentNode * | OperationDefinitionNode * | VariableDefinitionNode * | VariableNode * | SelectionSetNode * | FieldNode * | ArgumentNode * | FragmentSpreadNode * | InlineFragmentNode * | FragmentDefinitionNode * | IntValueNode * | FloatValueNode * | StringValueNode * | BooleanValueNode * | EnumValueNode * | ListValueNode * | ObjectValueNode * | ObjectFieldNode * | DirectiveNode * | ListTypeNode * | NonNullTypeNode. * * @see \GraphQL\Tests\Language\AST\NodeTest */ abstract class Node implements \JsonSerializable { public ?Location $loc = null; public string $kind; /** @param array<string, mixed> $vars */ public function __construct(array $vars) { Utils::assign($this, $vars); } /** * Returns a clone of this instance and all its children, except Location $loc. * * @throws \JsonException * @throws InvariantViolation * * @return static */ public function cloneDeep(): self { return static::cloneValue($this); } /** * @template TNode of Node * @template TCloneable of TNode|NodeList<TNode>|Location|string * * @phpstan-param TCloneable $value * * @throws \JsonException * @throws InvariantViolation * * @phpstan-return TCloneable */ protected static function cloneValue($value) { if ($value instanceof self) { $cloned = clone $value; foreach (get_object_vars($cloned) as $prop => $propValue) { $cloned->{$prop} = static::cloneValue($propValue); } return $cloned; } if ($value instanceof NodeList) { /** * @phpstan-var TCloneable * * @phpstan-ignore varTag.nativeType (PHPStan is strict about template types and sees NodeList<TNode> as potentially different from TCloneable) */ return $value->cloneDeep(); } return $value; } /** @throws \JsonException */ public function __toString(): string { return json_encode($this, JSON_THROW_ON_ERROR); } /** * Improves upon the default serialization by: * - excluding null values * - excluding large reference values such as @see Location::$source. * * @return array<string, mixed> */ public function jsonSerialize(): array { return $this->toArray(); } /** @return array<string, mixed> */ public function toArray(): array { return self::recursiveToArray($this); } /** @return array<string, mixed> */ private static function recursiveToArray(Node $node): array { $result = []; foreach (get_object_vars($node) as $prop => $propValue) { if ($propValue === null) { continue; } if ($propValue instanceof NodeList) { $converted = []; foreach ($propValue as $item) { $converted[] = self::recursiveToArray($item); } } elseif ($propValue instanceof Node) { $converted = self::recursiveToArray($propValue); } elseif ($propValue instanceof Location) { $converted = $propValue->toArray(); } else { $converted = $propValue; } $result[$prop] = $converted; } return $result; } } graphql/lib/Language/AST/EnumTypeExtensionNode.php000064400000001142151666572100016113 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class EnumTypeExtensionNode extends Node implements TypeExtensionNode { public string $kind = NodeKind::ENUM_TYPE_EXTENSION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<EnumValueDefinitionNode> */ public NodeList $values; public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); } public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/ObjectTypeDefinitionNode.php000064400000001123151666572100016530 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class ObjectTypeDefinitionNode extends Node implements TypeDefinitionNode { public string $kind = NodeKind::OBJECT_TYPE_DEFINITION; public NameNode $name; /** @var NodeList<NamedTypeNode> */ public NodeList $interfaces; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<FieldDefinitionNode> */ public NodeList $fields; public ?StringValueNode $description = null; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/VariableDefinitionNode.php000064400000001344151666572100016212 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class VariableDefinitionNode extends Node implements DefinitionNode { public string $kind = NodeKind::VARIABLE_DEFINITION; public VariableNode $variable; /** @var NamedTypeNode|ListTypeNode|NonNullTypeNode */ public TypeNode $type; /** @var VariableNode|NullValueNode|IntValueNode|FloatValueNode|StringValueNode|BooleanValueNode|EnumValueNode|ListValueNode|ObjectValueNode|null */ public ?ValueNode $defaultValue = null; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); } } graphql/lib/Language/AST/TypeNode.php000064400000000270151666572100013372 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type TypeNode = NamedTypeNode * | ListTypeNode * | NonNullTypeNode. */ interface TypeNode {} graphql/lib/Language/AST/UnionTypeDefinitionNode.php000064400000001000151666572100016404 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class UnionTypeDefinitionNode extends Node implements TypeDefinitionNode { public string $kind = NodeKind::UNION_TYPE_DEFINITION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<NamedTypeNode> */ public NodeList $types; public ?StringValueNode $description = null; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/NamedTypeNode.php000064400000000317151666572100014341 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class NamedTypeNode extends Node implements TypeNode { public string $kind = NodeKind::NAMED_TYPE; public NameNode $name; } graphql/lib/Language/AST/OperationTypeDefinitionNode.php000064400000000545151666572100017271 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * @phpstan-import-type OperationType from OperationDefinitionNode */ class OperationTypeDefinitionNode extends Node { public string $kind = NodeKind::OPERATION_TYPE_DEFINITION; /** @var OperationType */ public string $operation; public NamedTypeNode $type; } graphql/lib/Language/AST/ListValueNode.php000064400000000364151666572100014365 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class ListValueNode extends Node implements ValueNode { public string $kind = NodeKind::LST; /** @var NodeList<ValueNode&Node> */ public NodeList $values; } graphql/lib/Language/AST/HasSelectionSet.php000064400000000425151666572100014702 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type DefinitionNode = OperationDefinitionNode * | FragmentDefinitionNode. */ interface HasSelectionSet { public function getSelectionSet(): SelectionSetNode; } graphql/lib/Language/AST/InputObjectTypeDefinitionNode.php000064400000001247151666572100017557 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class InputObjectTypeDefinitionNode extends Node implements TypeDefinitionNode { public string $kind = NodeKind::INPUT_OBJECT_TYPE_DEFINITION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<InputValueDefinitionNode> */ public NodeList $fields; public ?StringValueNode $description = null; public function getName(): NameNode { return $this->name; } public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); } } graphql/lib/Language/AST/IntValueNode.php000064400000000307151666572100014201 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class IntValueNode extends Node implements ValueNode { public string $kind = NodeKind::INT; public string $value; } graphql/lib/Language/AST/SelectionSetNode.php000064400000000364151666572100015056 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class SelectionSetNode extends Node { public string $kind = NodeKind::SELECTION_SET; /** @var NodeList<SelectionNode&Node> */ public NodeList $selections; } graphql/lib/Language/AST/InterfaceTypeDefinitionNode.php000064400000001131151666572100017221 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class InterfaceTypeDefinitionNode extends Node implements TypeDefinitionNode { public string $kind = NodeKind::INTERFACE_TYPE_DEFINITION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<NamedTypeNode> */ public NodeList $interfaces; /** @var NodeList<FieldDefinitionNode> */ public NodeList $fields; public ?StringValueNode $description = null; public function getName(): NameNode { return $this->name; } } graphql/lib/Language/AST/Location.php000064400000003031151666572100013411 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; use YOOtheme\GraphQL\Language\Source; use YOOtheme\GraphQL\Language\Token; /** * Contains a range of UTF-8 character offsets and token references that * identify the region of the source from which the AST derived. * * @phpstan-type LocationArray array{start: int, end: int} */ class Location { /** The character offset at which this Node begins. */ public int $start; /** The character offset at which this Node ends. */ public int $end; /** The Token at which this Node begins. */ public ?Token $startToken = null; /** The Token at which this Node ends. */ public ?Token $endToken = null; /** The Source document the AST represents. */ public ?Source $source = null; public static function create(int $start, int $end): self { $tmp = new static(); $tmp->start = $start; $tmp->end = $end; return $tmp; } public function __construct(?Token $startToken = null, ?Token $endToken = null, ?Source $source = null) { $this->startToken = $startToken; $this->endToken = $endToken; $this->source = $source; if ($startToken === null || $endToken === null) { return; } $this->start = $startToken->start; $this->end = $endToken->end; } /** @return LocationArray */ public function toArray(): array { return [ 'start' => $this->start, 'end' => $this->end, ]; } } graphql/lib/Language/AST/TypeSystemDefinitionNode.php000064400000000411151666572100016605 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type TypeSystemDefinitionNode = * | SchemaDefinitionNode * | TypeDefinitionNode * | DirectiveDefinitionNode. */ interface TypeSystemDefinitionNode extends DefinitionNode {} graphql/lib/Language/AST/VariableNode.php000064400000000315151666572100014176 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class VariableNode extends Node implements ValueNode { public string $kind = NodeKind::VARIABLE; public NameNode $name; } graphql/lib/Language/AST/TypeSystemExtensionNode.php000064400000000341151666572100016473 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * export type TypeSystemExtensionNode = SchemaExtensionNode | TypeExtensionNode;. */ interface TypeSystemExtensionNode extends DefinitionNode {} graphql/lib/Language/AST/FieldNode.php000064400000001163151666572100013476 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class FieldNode extends Node implements SelectionNode { public string $kind = NodeKind::FIELD; public NameNode $name; public ?NameNode $alias = null; /** @var NodeList<ArgumentNode> */ public NodeList $arguments; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public ?SelectionSetNode $selectionSet = null; public function __construct(array $vars) { parent::__construct($vars); $this->directives ??= new NodeList([]); $this->arguments ??= new NodeList([]); } } graphql/lib/Language/AST/StringValueNode.php000064400000000356151666572100014721 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class StringValueNode extends Node implements ValueNode { public string $kind = NodeKind::STRING; public string $value; public bool $block = false; } graphql/lib/Language/AST/EnumValueDefinitionNode.php000064400000000514151666572100016364 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class EnumValueDefinitionNode extends Node { public string $kind = NodeKind::ENUM_VALUE_DEFINITION; public NameNode $name; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public ?StringValueNode $description = null; } graphql/lib/Language/AST/SchemaExtensionNode.php000064400000000564151666572100015554 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class SchemaExtensionNode extends Node implements TypeSystemExtensionNode { public string $kind = NodeKind::SCHEMA_EXTENSION; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<OperationTypeDefinitionNode> */ public NodeList $operationTypes; } graphql/lib/Language/AST/ArgumentNode.php000064400000000657151666572100014244 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; /** * @phpstan-type ArgumentNodeValue VariableNode|NullValueNode|IntValueNode|FloatValueNode|StringValueNode|BooleanValueNode|EnumValueNode|ListValueNode|ObjectValueNode */ class ArgumentNode extends Node { public string $kind = NodeKind::ARGUMENT; /** @phpstan-var ArgumentNodeValue */ public ValueNode $value; public NameNode $name; } graphql/lib/Language/AST/SchemaDefinitionNode.php000064400000000567151666572100015673 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class SchemaDefinitionNode extends Node implements TypeSystemDefinitionNode { public string $kind = NodeKind::SCHEMA_DEFINITION; /** @var NodeList<DirectiveNode> */ public NodeList $directives; /** @var NodeList<OperationTypeDefinitionNode> */ public NodeList $operationTypes; } graphql/lib/Language/AST/FieldDefinitionNode.php000064400000000756151666572100015516 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language\AST; class FieldDefinitionNode extends Node { public string $kind = NodeKind::FIELD_DEFINITION; public NameNode $name; /** @var NodeList<InputValueDefinitionNode> */ public NodeList $arguments; /** @var NamedTypeNode|ListTypeNode|NonNullTypeNode */ public TypeNode $type; /** @var NodeList<DirectiveNode> */ public NodeList $directives; public ?StringValueNode $description = null; } graphql/lib/Language/VisitorStop.php000064400000000172151666572100013522 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; final class VisitorStop extends VisitorOperation {} graphql/lib/Language/VisitorOperation.php000064400000000151151666572100014532 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; abstract class VisitorOperation {} graphql/lib/Language/Source.php000064400000003116151666572100012456 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; class Source { public string $body; public int $length; public string $name; public SourceLocation $locationOffset; /** * A representation of source input to GraphQL. * * `name` and `locationOffset` are optional. They are useful for clients who * store GraphQL documents in source files; for example, if the GraphQL input * starts at line 40 in a file named Foo.graphql, it might be useful for name to * be "Foo.graphql" and location to be `{ line: 40, column: 0 }`. * line and column in locationOffset are 1-indexed */ public function __construct(string $body, ?string $name = null, ?SourceLocation $location = null) { $this->body = $body; $this->length = mb_strlen($body, 'UTF-8'); $this->name = $name === '' || $name === null ? 'GraphQL request' : $name; $this->locationOffset = $location ?? new SourceLocation(1, 1); } public function getLocation(int $position): SourceLocation { $line = 1; $column = $position + 1; $utfChars = json_decode('"\u2028\u2029"'); $lineRegexp = '/\r\n|[\n\r' . $utfChars . ']/su'; $matches = []; preg_match_all($lineRegexp, mb_substr($this->body, 0, $position, 'UTF-8'), $matches, \PREG_OFFSET_CAPTURE); foreach ($matches[0] as $match) { ++$line; $column = $position + 1 - ($match[1] + mb_strlen($match[0], 'UTF-8')); } return new SourceLocation($line, $column); } } graphql/lib/Language/VisitorRemoveNode.php000064400000000200151666572100014630 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Language; final class VisitorRemoveNode extends VisitorOperation {} graphql/lib/Type/Introspection.php000064400000104446151666572100013264 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\GraphQL; use YOOtheme\GraphQL\Language\DirectiveLocation; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\EnumValueDefinition; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\InputObjectField; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\ResolveInfo; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Type\Definition\WrappingType; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-type IntrospectionOptions array{ * descriptions?: bool, * directiveIsRepeatable?: bool, * typeIsOneOf?: bool, * } * * Available options: * - descriptions * Include descriptions in the introspection result? * Default: true * - directiveIsRepeatable * Include field `isRepeatable` for directives? * Default: false * - typeIsOneOf * Include field `isOneOf` for types? * Default: false * * @see \GraphQL\Tests\Type\IntrospectionTest */ class Introspection { public const SCHEMA_FIELD_NAME = '__schema'; public const TYPE_FIELD_NAME = '__type'; public const TYPE_NAME_FIELD_NAME = '__typename'; public const SCHEMA_OBJECT_NAME = '__Schema'; public const TYPE_OBJECT_NAME = '__Type'; public const DIRECTIVE_OBJECT_NAME = '__Directive'; public const FIELD_OBJECT_NAME = '__Field'; public const INPUT_VALUE_OBJECT_NAME = '__InputValue'; public const ENUM_VALUE_OBJECT_NAME = '__EnumValue'; public const TYPE_KIND_ENUM_NAME = '__TypeKind'; public const DIRECTIVE_LOCATION_ENUM_NAME = '__DirectiveLocation'; public const TYPE_NAMES = [ self::SCHEMA_OBJECT_NAME, self::TYPE_OBJECT_NAME, self::DIRECTIVE_OBJECT_NAME, self::FIELD_OBJECT_NAME, self::INPUT_VALUE_OBJECT_NAME, self::ENUM_VALUE_OBJECT_NAME, self::TYPE_KIND_ENUM_NAME, self::DIRECTIVE_LOCATION_ENUM_NAME, ]; /** @var array<string, mixed>|null */ protected static ?array $cachedInstances; /** * @param IntrospectionOptions $options * * @api */ public static function getIntrospectionQuery(array $options = []): string { $optionsWithDefaults = array_merge([ 'descriptions' => true, 'directiveIsRepeatable' => false, 'typeIsOneOf' => false, ], $options); $descriptions = $optionsWithDefaults['descriptions'] ? 'description' : ''; $directiveIsRepeatable = $optionsWithDefaults['directiveIsRepeatable'] ? 'isRepeatable' : ''; $typeIsOneOf = $optionsWithDefaults['typeIsOneOf'] ? 'isOneOf' : ''; return <<<GRAPHQL query IntrospectionQuery { __schema { queryType { name } mutationType { name } subscriptionType { name } types { ...FullType } directives { name {$descriptions} args(includeDeprecated: true) { ...InputValue } {$directiveIsRepeatable} locations } } } fragment FullType on __Type { kind name {$descriptions} {$typeIsOneOf} fields(includeDeprecated: true) { name {$descriptions} args(includeDeprecated: true) { ...InputValue } type { ...TypeRef } isDeprecated deprecationReason } inputFields(includeDeprecated: true) { ...InputValue } interfaces { ...TypeRef } enumValues(includeDeprecated: true) { name {$descriptions} isDeprecated deprecationReason } possibleTypes { ...TypeRef } } fragment InputValue on __InputValue { name {$descriptions} type { ...TypeRef } defaultValue isDeprecated deprecationReason } fragment TypeRef on __Type { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name ofType { kind name } } } } } } } } GRAPHQL; } /** * Build an introspection query from a Schema. * * Introspection is useful for utilities that care about type and field * relationships, but do not need to traverse through those relationships. * * This is the inverse of BuildClientSchema::build(). The primary use case is * outside the server context, for instance when doing schema comparisons. * * @param IntrospectionOptions $options * * @throws \Exception * @throws \JsonException * @throws InvariantViolation * * @return array<string, array<mixed>> * * @api */ public static function fromSchema(Schema $schema, array $options = []): array { $optionsWithDefaults = array_merge([ 'directiveIsRepeatable' => true, 'typeIsOneOf' => true, ], $options); $result = GraphQL::executeQuery( $schema, self::getIntrospectionQuery($optionsWithDefaults) ); $data = $result->data; if ($data === null) { $noDataResult = Utils::printSafeJson($result); throw new InvariantViolation("Introspection query returned no data: {$noDataResult}."); } return $data; } /** @param Type&NamedType $type */ public static function isIntrospectionType(NamedType $type): bool { return in_array($type->name, self::TYPE_NAMES, true); } /** @return array<string, Type&NamedType> */ public static function getTypes(): array { return [ self::SCHEMA_OBJECT_NAME => self::_schema(), self::TYPE_OBJECT_NAME => self::_type(), self::DIRECTIVE_OBJECT_NAME => self::_directive(), self::FIELD_OBJECT_NAME => self::_field(), self::INPUT_VALUE_OBJECT_NAME => self::_inputValue(), self::ENUM_VALUE_OBJECT_NAME => self::_enumValue(), self::TYPE_KIND_ENUM_NAME => self::_typeKind(), self::DIRECTIVE_LOCATION_ENUM_NAME => self::_directiveLocation(), ]; } public static function _schema(): ObjectType { return self::$cachedInstances[self::SCHEMA_OBJECT_NAME] ??= new ObjectType([ // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) 'name' => self::SCHEMA_OBJECT_NAME, 'isIntrospection' => true, 'description' => 'A GraphQL Schema defines the capabilities of a GraphQL ' . 'server. It exposes all available types and directives on ' . 'the server, as well as the entry points for query, mutation, and ' . 'subscription operations.', 'fields' => [ 'types' => [ 'description' => 'A list of all types supported by this server.', 'type' => new NonNull(new ListOfType(new NonNull(self::_type()))), 'resolve' => static fn (Schema $schema): array => $schema->getTypeMap(), ], 'queryType' => [ 'description' => 'The type that query operations will be rooted at.', 'type' => new NonNull(self::_type()), 'resolve' => static fn (Schema $schema): ?ObjectType => $schema->getQueryType(), ], 'mutationType' => [ 'description' => 'If this server supports mutation, the type that mutation operations will be rooted at.', 'type' => self::_type(), 'resolve' => static fn (Schema $schema): ?ObjectType => $schema->getMutationType(), ], 'subscriptionType' => [ 'description' => 'If this server support subscription, the type that subscription operations will be rooted at.', 'type' => self::_type(), 'resolve' => static fn (Schema $schema): ?ObjectType => $schema->getSubscriptionType(), ], 'directives' => [ 'description' => 'A list of all directives supported by this server.', 'type' => Type::nonNull(Type::listOf(Type::nonNull(self::_directive()))), 'resolve' => static fn (Schema $schema): array => $schema->getDirectives(), ], ], ]); } public static function _type(): ObjectType { return self::$cachedInstances[self::TYPE_OBJECT_NAME] ??= new ObjectType([ // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) 'name' => self::TYPE_OBJECT_NAME, 'isIntrospection' => true, 'description' => 'The fundamental unit of any GraphQL Schema is the type. There are ' . 'many kinds of types in GraphQL as represented by the `__TypeKind` enum.' . "\n\n" . 'Depending on the kind of a type, certain fields describe ' . 'information about that type. Scalar types provide no information ' . 'beyond a name and description, while Enum types provide their values. ' . 'Object and Interface types provide the fields they describe. Abstract ' . 'types, Union and Interface, provide the Object types possible ' . 'at runtime. List and NonNull types compose other types.', 'fields' => static fn (): array => [ 'kind' => [ 'type' => Type::nonNull(self::_typeKind()), 'resolve' => static function (Type $type): string { switch (true) { case $type instanceof ListOfType: return TypeKind::LIST; case $type instanceof NonNull: return TypeKind::NON_NULL; case $type instanceof ScalarType: return TypeKind::SCALAR; case $type instanceof ObjectType: return TypeKind::OBJECT; case $type instanceof EnumType: return TypeKind::ENUM; case $type instanceof InputObjectType: return TypeKind::INPUT_OBJECT; case $type instanceof InterfaceType: return TypeKind::INTERFACE; case $type instanceof UnionType: return TypeKind::UNION; default: $safeType = Utils::printSafe($type); throw new \Exception("Unknown kind of type: {$safeType}"); } }, ], 'name' => [ 'type' => Type::string(), 'resolve' => static fn (Type $type): ?string => $type instanceof NamedType ? $type->name : null, ], 'description' => [ 'type' => Type::string(), 'resolve' => static fn (Type $type): ?string => $type instanceof NamedType ? $type->description : null, ], 'fields' => [ 'type' => Type::listOf(Type::nonNull(self::_field())), 'args' => [ 'includeDeprecated' => [ 'type' => Type::nonNull(Type::boolean()), 'defaultValue' => false, ], ], 'resolve' => static function (Type $type, $args): ?array { if ($type instanceof ObjectType || $type instanceof InterfaceType) { $fields = $type->getVisibleFields(); if (! $args['includeDeprecated']) { return array_filter( $fields, static fn (FieldDefinition $field): bool => ! $field->isDeprecated() ); } return $fields; } return null; }, ], 'interfaces' => [ 'type' => Type::listOf(Type::nonNull(self::_type())), 'resolve' => static fn ($type): ?array => $type instanceof ObjectType || $type instanceof InterfaceType ? $type->getInterfaces() : null, ], 'possibleTypes' => [ 'type' => Type::listOf(Type::nonNull(self::_type())), 'resolve' => static fn ($type, $args, $context, ResolveInfo $info): ?array => $type instanceof InterfaceType || $type instanceof UnionType ? $info->schema->getPossibleTypes($type) : null, ], 'enumValues' => [ 'type' => Type::listOf(Type::nonNull(self::_enumValue())), 'args' => [ 'includeDeprecated' => [ 'type' => Type::nonNull(Type::boolean()), 'defaultValue' => false, ], ], 'resolve' => static function ($type, $args): ?array { if ($type instanceof EnumType) { $values = $type->getValues(); if (! $args['includeDeprecated']) { return array_filter( $values, static fn (EnumValueDefinition $value): bool => ! $value->isDeprecated() ); } return $values; } return null; }, ], 'inputFields' => [ 'type' => Type::listOf(Type::nonNull(self::_inputValue())), 'args' => [ 'includeDeprecated' => [ 'type' => Type::nonNull(Type::boolean()), 'defaultValue' => false, ], ], 'resolve' => static function ($type, $args): ?array { if ($type instanceof InputObjectType) { $fields = $type->getFields(); if (! $args['includeDeprecated']) { return array_filter( $fields, static fn (InputObjectField $field): bool => ! $field->isDeprecated(), ); } return $fields; } return null; }, ], 'ofType' => [ 'type' => self::_type(), 'resolve' => static fn ($type): ?Type => $type instanceof WrappingType ? $type->getWrappedType() : null, ], 'isOneOf' => [ 'type' => Type::boolean(), 'resolve' => static fn ($type): ?bool => $type instanceof InputObjectType ? $type->isOneOf() : null, ], ], ]); } public static function _typeKind(): EnumType { return self::$cachedInstances[self::TYPE_KIND_ENUM_NAME] ??= new EnumType([ // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) 'name' => self::TYPE_KIND_ENUM_NAME, 'isIntrospection' => true, 'description' => 'An enum describing what kind of type a given `__Type` is.', 'values' => [ 'SCALAR' => [ 'value' => TypeKind::SCALAR, 'description' => 'Indicates this type is a scalar.', ], 'OBJECT' => [ 'value' => TypeKind::OBJECT, 'description' => 'Indicates this type is an object. `fields` and `interfaces` are valid fields.', ], 'INTERFACE' => [ 'value' => TypeKind::INTERFACE, 'description' => 'Indicates this type is an interface. `fields`, `interfaces`, and `possibleTypes` are valid fields.', ], 'UNION' => [ 'value' => TypeKind::UNION, 'description' => 'Indicates this type is a union. `possibleTypes` is a valid field.', ], 'ENUM' => [ 'value' => TypeKind::ENUM, 'description' => 'Indicates this type is an enum. `enumValues` is a valid field.', ], 'INPUT_OBJECT' => [ 'value' => TypeKind::INPUT_OBJECT, 'description' => 'Indicates this type is an input object. `inputFields` is a valid field.', ], 'LIST' => [ 'value' => TypeKind::LIST, 'description' => 'Indicates this type is a list. `ofType` is a valid field.', ], 'NON_NULL' => [ 'value' => TypeKind::NON_NULL, 'description' => 'Indicates this type is a non-null. `ofType` is a valid field.', ], ], ]); } public static function _field(): ObjectType { return self::$cachedInstances[self::FIELD_OBJECT_NAME] ??= new ObjectType([ // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) 'name' => self::FIELD_OBJECT_NAME, 'isIntrospection' => true, 'description' => 'Object and Interface types are described by a list of Fields, each of ' . 'which has a name, potentially a list of arguments, and a return type.', 'fields' => static fn (): array => [ 'name' => [ 'type' => Type::nonNull(Type::string()), 'resolve' => static fn (FieldDefinition $field): string => $field->name, ], 'description' => [ 'type' => Type::string(), 'resolve' => static fn (FieldDefinition $field): ?string => $field->description, ], 'args' => [ 'type' => Type::nonNull(Type::listOf(Type::nonNull(self::_inputValue()))), 'args' => [ 'includeDeprecated' => [ 'type' => Type::nonNull(Type::boolean()), 'defaultValue' => false, ], ], 'resolve' => static function (FieldDefinition $field, $args): array { $values = $field->args; if (! $args['includeDeprecated']) { return array_filter( $values, static fn (Argument $value): bool => ! $value->isDeprecated(), ); } return $values; }, ], 'type' => [ 'type' => Type::nonNull(self::_type()), 'resolve' => static fn (FieldDefinition $field): Type => $field->getType(), ], 'isDeprecated' => [ 'type' => Type::nonNull(Type::boolean()), 'resolve' => static fn (FieldDefinition $field): bool => $field->isDeprecated(), ], 'deprecationReason' => [ 'type' => Type::string(), 'resolve' => static fn (FieldDefinition $field): ?string => $field->deprecationReason, ], ], ]); } public static function _inputValue(): ObjectType { return self::$cachedInstances[self::INPUT_VALUE_OBJECT_NAME] ??= new ObjectType([ // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) 'name' => self::INPUT_VALUE_OBJECT_NAME, 'isIntrospection' => true, 'description' => 'Arguments provided to Fields or Directives and the input fields of an ' . 'InputObject are represented as Input Values which describe their type ' . 'and optionally a default value.', 'fields' => static fn (): array => [ 'name' => [ 'type' => Type::nonNull(Type::string()), /** @param Argument|InputObjectField $inputValue */ 'resolve' => static fn ($inputValue): string => $inputValue->name, ], 'description' => [ 'type' => Type::string(), /** @param Argument|InputObjectField $inputValue */ 'resolve' => static fn ($inputValue): ?string => $inputValue->description, ], 'type' => [ 'type' => Type::nonNull(self::_type()), /** @param Argument|InputObjectField $inputValue */ 'resolve' => static fn ($inputValue): Type => $inputValue->getType(), ], 'defaultValue' => [ 'type' => Type::string(), 'description' => 'A GraphQL-formatted string representing the default value for this input value.', /** @param Argument|InputObjectField $inputValue */ 'resolve' => static function ($inputValue): ?string { if ($inputValue->defaultValueExists()) { $defaultValueAST = AST::astFromValue($inputValue->defaultValue, $inputValue->getType()); if ($defaultValueAST === null) { $inconvertibleDefaultValue = Utils::printSafe($inputValue->defaultValue); throw new InvariantViolation("Unable to convert defaultValue of argument {$inputValue->name} into AST: {$inconvertibleDefaultValue}."); } return Printer::doPrint($defaultValueAST); } return null; }, ], 'isDeprecated' => [ 'type' => Type::nonNull(Type::boolean()), /** @param Argument|InputObjectField $inputValue */ 'resolve' => static fn ($inputValue): bool => $inputValue->isDeprecated(), ], 'deprecationReason' => [ 'type' => Type::string(), /** @param Argument|InputObjectField $inputValue */ 'resolve' => static fn ($inputValue): ?string => $inputValue->deprecationReason, ], ], ]); } public static function _enumValue(): ObjectType { return self::$cachedInstances[self::ENUM_VALUE_OBJECT_NAME] ??= new ObjectType([ // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) 'name' => self::ENUM_VALUE_OBJECT_NAME, 'isIntrospection' => true, 'description' => 'One possible value for a given Enum. Enum values are unique values, not ' . 'a placeholder for a string or numeric value. However an Enum value is ' . 'returned in a JSON response as a string.', 'fields' => [ 'name' => [ 'type' => Type::nonNull(Type::string()), 'resolve' => static fn (EnumValueDefinition $enumValue): string => $enumValue->name, ], 'description' => [ 'type' => Type::string(), 'resolve' => static fn (EnumValueDefinition $enumValue): ?string => $enumValue->description, ], 'isDeprecated' => [ 'type' => Type::nonNull(Type::boolean()), 'resolve' => static fn (EnumValueDefinition $enumValue): bool => $enumValue->isDeprecated(), ], 'deprecationReason' => [ 'type' => Type::string(), 'resolve' => static fn (EnumValueDefinition $enumValue): ?string => $enumValue->deprecationReason, ], ], ]); } public static function _directive(): ObjectType { return self::$cachedInstances[self::DIRECTIVE_OBJECT_NAME] ??= new ObjectType([ // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) 'name' => self::DIRECTIVE_OBJECT_NAME, 'isIntrospection' => true, 'description' => 'A Directive provides a way to describe alternate runtime execution and ' . 'type validation behavior in a GraphQL document.' . "\n\nIn some cases, you need to provide options to alter GraphQL's " . 'execution behavior in ways field arguments will not suffice, such as ' . 'conditionally including or skipping a field. Directives provide this by ' . 'describing additional information to the executor.', 'fields' => [ 'name' => [ 'type' => Type::nonNull(Type::string()), 'resolve' => static fn (Directive $directive): string => $directive->name, ], 'description' => [ 'type' => Type::string(), 'resolve' => static fn (Directive $directive): ?string => $directive->description, ], 'isRepeatable' => [ 'type' => Type::nonNull(Type::boolean()), 'resolve' => static fn (Directive $directive): bool => $directive->isRepeatable, ], 'locations' => [ 'type' => Type::nonNull(Type::listOf(Type::nonNull( self::_directiveLocation() ))), 'resolve' => static fn (Directive $directive): array => $directive->locations, ], 'args' => [ 'type' => Type::nonNull(Type::listOf(Type::nonNull(self::_inputValue()))), 'args' => [ 'includeDeprecated' => [ 'type' => Type::nonNull(Type::boolean()), 'defaultValue' => false, ], ], 'resolve' => static function (Directive $directive, $args): array { $values = $directive->args; if (! $args['includeDeprecated']) { return array_filter( $values, static fn (Argument $value): bool => ! $value->isDeprecated(), ); } return $values; }, ], ], ]); } public static function _directiveLocation(): EnumType { return self::$cachedInstances[self::DIRECTIVE_LOCATION_ENUM_NAME] ??= new EnumType([ // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) 'name' => self::DIRECTIVE_LOCATION_ENUM_NAME, 'isIntrospection' => true, 'description' => 'A Directive can be adjacent to many parts of the GraphQL language, a ' . '__DirectiveLocation describes one such possible adjacencies.', 'values' => [ 'QUERY' => [ 'value' => DirectiveLocation::QUERY, 'description' => 'Location adjacent to a query operation.', ], 'MUTATION' => [ 'value' => DirectiveLocation::MUTATION, 'description' => 'Location adjacent to a mutation operation.', ], 'SUBSCRIPTION' => [ 'value' => DirectiveLocation::SUBSCRIPTION, 'description' => 'Location adjacent to a subscription operation.', ], 'FIELD' => [ 'value' => DirectiveLocation::FIELD, 'description' => 'Location adjacent to a field.', ], 'FRAGMENT_DEFINITION' => [ 'value' => DirectiveLocation::FRAGMENT_DEFINITION, 'description' => 'Location adjacent to a fragment definition.', ], 'FRAGMENT_SPREAD' => [ 'value' => DirectiveLocation::FRAGMENT_SPREAD, 'description' => 'Location adjacent to a fragment spread.', ], 'INLINE_FRAGMENT' => [ 'value' => DirectiveLocation::INLINE_FRAGMENT, 'description' => 'Location adjacent to an inline fragment.', ], 'VARIABLE_DEFINITION' => [ 'value' => DirectiveLocation::VARIABLE_DEFINITION, 'description' => 'Location adjacent to a variable definition.', ], 'SCHEMA' => [ 'value' => DirectiveLocation::SCHEMA, 'description' => 'Location adjacent to a schema definition.', ], 'SCALAR' => [ 'value' => DirectiveLocation::SCALAR, 'description' => 'Location adjacent to a scalar definition.', ], 'OBJECT' => [ 'value' => DirectiveLocation::OBJECT, 'description' => 'Location adjacent to an object type definition.', ], 'FIELD_DEFINITION' => [ 'value' => DirectiveLocation::FIELD_DEFINITION, 'description' => 'Location adjacent to a field definition.', ], 'ARGUMENT_DEFINITION' => [ 'value' => DirectiveLocation::ARGUMENT_DEFINITION, 'description' => 'Location adjacent to an argument definition.', ], 'INTERFACE' => [ 'value' => DirectiveLocation::IFACE, 'description' => 'Location adjacent to an interface definition.', ], 'UNION' => [ 'value' => DirectiveLocation::UNION, 'description' => 'Location adjacent to a union definition.', ], 'ENUM' => [ 'value' => DirectiveLocation::ENUM, 'description' => 'Location adjacent to an enum definition.', ], 'ENUM_VALUE' => [ 'value' => DirectiveLocation::ENUM_VALUE, 'description' => 'Location adjacent to an enum value definition.', ], 'INPUT_OBJECT' => [ 'value' => DirectiveLocation::INPUT_OBJECT, 'description' => 'Location adjacent to an input object type definition.', ], 'INPUT_FIELD_DEFINITION' => [ 'value' => DirectiveLocation::INPUT_FIELD_DEFINITION, 'description' => 'Location adjacent to an input object field definition.', ], ], ]); } public static function schemaMetaFieldDef(): FieldDefinition { return self::$cachedInstances[self::SCHEMA_FIELD_NAME] ??= new FieldDefinition([ 'name' => self::SCHEMA_FIELD_NAME, 'type' => Type::nonNull(self::_schema()), 'description' => 'Access the current type schema of this server.', 'args' => [], 'resolve' => static fn ($source, array $args, $context, ResolveInfo $info): Schema => $info->schema, ]); } public static function typeMetaFieldDef(): FieldDefinition { return self::$cachedInstances[self::TYPE_FIELD_NAME] ??= new FieldDefinition([ 'name' => self::TYPE_FIELD_NAME, 'type' => self::_type(), 'description' => 'Request the type information of a single type.', 'args' => [ [ 'name' => 'name', 'type' => Type::nonNull(Type::string()), ], ], 'resolve' => static fn ($source, array $args, $context, ResolveInfo $info): ?Type => $info->schema->getType($args['name']), ]); } public static function typeNameMetaFieldDef(): FieldDefinition { return self::$cachedInstances[self::TYPE_NAME_FIELD_NAME] ??= new FieldDefinition([ 'name' => self::TYPE_NAME_FIELD_NAME, 'type' => Type::nonNull(Type::string()), 'description' => 'The name of the current Object type at runtime.', 'args' => [], 'resolve' => static fn ($source, array $args, $context, ResolveInfo $info): string => $info->parentType->name, ]); } public static function resetCachedInstances(): void { self::$cachedInstances = null; } } graphql/lib/Type/Validation/InputObjectCircularRefs.php000064400000006570151666572100017250 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Validation; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Type\Definition\InputObjectField; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\SchemaValidationContext; class InputObjectCircularRefs { private SchemaValidationContext $schemaValidationContext; /** * Tracks already visited types to maintain O(N) and to ensure that cycles * are not redundantly reported. * * @var array<string, bool> */ private array $visitedTypes = []; /** @var array<int, InputObjectField> */ private array $fieldPath = []; /** * Position in the type path. * * @var array<string, int> */ private array $fieldPathIndexByTypeName = []; public function __construct(SchemaValidationContext $schemaValidationContext) { $this->schemaValidationContext = $schemaValidationContext; } /** * This does a straight-forward DFS to find cycles. * It does not terminate when a cycle was found but continues to explore * the graph to find all possible cycles. * * @throws InvariantViolation */ public function validate(InputObjectType $inputObj): void { if (isset($this->visitedTypes[$inputObj->name])) { return; } $this->visitedTypes[$inputObj->name] = true; $this->fieldPathIndexByTypeName[$inputObj->name] = count($this->fieldPath); $fieldMap = $inputObj->getFields(); foreach ($fieldMap as $field) { $type = $field->getType(); if ($type instanceof NonNull) { $fieldType = $type->getWrappedType(); // If the type of the field is anything else then a non-nullable input object, // there is no chance of an unbreakable cycle if ($fieldType instanceof InputObjectType) { $this->fieldPath[] = $field; if (! isset($this->fieldPathIndexByTypeName[$fieldType->name])) { $this->validate($fieldType); } else { $cycleIndex = $this->fieldPathIndexByTypeName[$fieldType->name]; $cyclePath = array_slice($this->fieldPath, $cycleIndex); $fieldNames = implode( '.', array_map( static fn (InputObjectField $field): string => $field->name, $cyclePath ) ); $fieldNodes = array_map( static fn (InputObjectField $field): ?InputValueDefinitionNode => $field->astNode, $cyclePath ); $this->schemaValidationContext->reportError( "Cannot reference Input Object \"{$fieldType->name}\" within itself through a series of non-null fields: \"{$fieldNames}\".", $fieldNodes ); } } } array_pop($this->fieldPath); } unset($this->fieldPathIndexByTypeName[$inputObj->name]); } } graphql/lib/Type/SchemaConfig.php000064400000017442151666572100012751 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\Type; /** * Configuration options for schema construction. * * The options accepted by the **create** method are described * in the [schema definition docs](schema-definition.md#configuration-options). * * Usage example: * * $config = SchemaConfig::create() * ->setQuery($myQueryType) * ->setTypeLoader($myTypeLoader); * * $schema = new Schema($config); * * @see Type, NamedType * * @phpstan-type MaybeLazyObjectType ObjectType|(callable(): (ObjectType|null))|null * @phpstan-type TypeLoader callable(string $typeName): ((Type&NamedType)|null) * @phpstan-type Types iterable<Type&NamedType>|(callable(): iterable<Type&NamedType>)|iterable<(callable(): Type&NamedType)>|(callable(): iterable<(callable(): Type&NamedType)>) * @phpstan-type SchemaConfigOptions array{ * query?: MaybeLazyObjectType, * mutation?: MaybeLazyObjectType, * subscription?: MaybeLazyObjectType, * types?: Types|null, * directives?: array<Directive>|null, * typeLoader?: TypeLoader|null, * assumeValid?: bool|null, * astNode?: SchemaDefinitionNode|null, * extensionASTNodes?: array<SchemaExtensionNode>|null, * } */ class SchemaConfig { /** @var MaybeLazyObjectType */ public $query; /** @var MaybeLazyObjectType */ public $mutation; /** @var MaybeLazyObjectType */ public $subscription; /** * @var iterable|callable * * @phpstan-var Types */ public $types = []; /** @var array<Directive>|null */ public ?array $directives = null; /** * @var callable|null * * @phpstan-var TypeLoader|null */ public $typeLoader; public bool $assumeValid = false; public ?SchemaDefinitionNode $astNode = null; /** @var array<SchemaExtensionNode> */ public array $extensionASTNodes = []; /** * Converts an array of options to instance of SchemaConfig * (or just returns empty config when array is not passed). * * @phpstan-param SchemaConfigOptions $options * * @throws InvariantViolation * * @api */ public static function create(array $options = []): self { $config = new static(); if ($options !== []) { if (isset($options['query'])) { $config->setQuery($options['query']); } if (isset($options['mutation'])) { $config->setMutation($options['mutation']); } if (isset($options['subscription'])) { $config->setSubscription($options['subscription']); } if (isset($options['types'])) { $config->setTypes($options['types']); } if (isset($options['directives'])) { $config->setDirectives($options['directives']); } if (isset($options['typeLoader'])) { $config->setTypeLoader($options['typeLoader']); } if (isset($options['assumeValid'])) { $config->setAssumeValid($options['assumeValid']); } if (isset($options['astNode'])) { $config->setAstNode($options['astNode']); } if (isset($options['extensionASTNodes'])) { $config->setExtensionASTNodes($options['extensionASTNodes']); } } return $config; } /** * @return MaybeLazyObjectType * * @api */ public function getQuery() { return $this->query; } /** * @param MaybeLazyObjectType $query * * @throws InvariantViolation * * @api */ public function setQuery($query): self { $this->assertMaybeLazyObjectType($query); $this->query = $query; return $this; } /** * @return MaybeLazyObjectType * * @api */ public function getMutation() { return $this->mutation; } /** * @param MaybeLazyObjectType $mutation * * @throws InvariantViolation * * @api */ public function setMutation($mutation): self { $this->assertMaybeLazyObjectType($mutation); $this->mutation = $mutation; return $this; } /** * @return MaybeLazyObjectType * * @api */ public function getSubscription() { return $this->subscription; } /** * @param MaybeLazyObjectType $subscription * * @throws InvariantViolation * * @api */ public function setSubscription($subscription): self { $this->assertMaybeLazyObjectType($subscription); $this->subscription = $subscription; return $this; } /** * @return array|callable * * @phpstan-return Types * * @api */ public function getTypes() { return $this->types; } /** * @param array|callable $types * * @phpstan-param Types $types * * @api */ public function setTypes($types): self { $this->types = $types; return $this; } /** * @return array<Directive>|null * * @api */ public function getDirectives(): ?array { return $this->directives; } /** * @param array<Directive>|null $directives * * @api */ public function setDirectives(?array $directives): self { $this->directives = $directives; return $this; } /** * @return callable|null $typeLoader * * @phpstan-return TypeLoader|null $typeLoader * * @api */ public function getTypeLoader(): ?callable { return $this->typeLoader; } /** * @phpstan-param TypeLoader|null $typeLoader * * @api */ public function setTypeLoader(?callable $typeLoader): self { $this->typeLoader = $typeLoader; return $this; } public function getAssumeValid(): bool { return $this->assumeValid; } public function setAssumeValid(bool $assumeValid): self { $this->assumeValid = $assumeValid; return $this; } public function getAstNode(): ?SchemaDefinitionNode { return $this->astNode; } public function setAstNode(?SchemaDefinitionNode $astNode): self { $this->astNode = $astNode; return $this; } /** @return array<SchemaExtensionNode> */ public function getExtensionASTNodes(): array { return $this->extensionASTNodes; } /** @param array<SchemaExtensionNode> $extensionASTNodes */ public function setExtensionASTNodes(array $extensionASTNodes): self { $this->extensionASTNodes = $extensionASTNodes; return $this; } /** * @param mixed $maybeLazyObjectType Should be MaybeLazyObjectType * * @throws InvariantViolation */ protected function assertMaybeLazyObjectType($maybeLazyObjectType): void { if ($maybeLazyObjectType instanceof ObjectType || is_callable($maybeLazyObjectType) || is_null($maybeLazyObjectType)) { return; } $notMaybeLazyObjectType = is_object($maybeLazyObjectType) ? get_class($maybeLazyObjectType) : gettype($maybeLazyObjectType); $objectTypeClass = ObjectType::class; throw new InvariantViolation("Expected instanceof {$objectTypeClass}, a callable that returns such an instance, or null, got: {$notMaybeLazyObjectType}."); } } graphql/lib/Type/Definition/UnionType.php000064400000010101151666572100014426 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\UnionTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeExtensionNode; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-import-type ResolveType from AbstractType * * @phpstan-type ObjectTypeReference ObjectType|callable(): ObjectType * @phpstan-type UnionConfig array{ * name?: string|null, * description?: string|null, * types: iterable<ObjectTypeReference>|callable(): iterable<ObjectTypeReference>, * resolveType?: ResolveType|null, * astNode?: UnionTypeDefinitionNode|null, * extensionASTNodes?: array<UnionTypeExtensionNode>|null * } */ class UnionType extends Type implements AbstractType, OutputType, CompositeType, NullableType, NamedType { use NamedTypeImplementation; public ?UnionTypeDefinitionNode $astNode; /** @var array<UnionTypeExtensionNode> */ public array $extensionASTNodes; /** @phpstan-var UnionConfig */ public array $config; /** * Lazily initialized. * * @var array<int, ObjectType> */ private array $types; /** * Lazily initialized. * * @var array<string, bool> */ private array $possibleTypeNames; /** * @phpstan-param UnionConfig $config * * @throws InvariantViolation */ public function __construct(array $config) { $this->name = $config['name'] ?? $this->inferName(); $this->description = $config['description'] ?? $this->description ?? null; $this->astNode = $config['astNode'] ?? null; $this->extensionASTNodes = $config['extensionASTNodes'] ?? []; $this->config = $config; } /** @throws InvariantViolation */ public function isPossibleType(Type $type): bool { if (! $type instanceof ObjectType) { return false; } if (! isset($this->possibleTypeNames)) { $this->possibleTypeNames = []; foreach ($this->getTypes() as $possibleType) { $this->possibleTypeNames[$possibleType->name] = true; } } return isset($this->possibleTypeNames[$type->name]); } /** * @throws InvariantViolation * * @return array<int, ObjectType> */ public function getTypes(): array { if (! isset($this->types)) { $this->types = []; $types = $this->config['types'] ?? null; // @phpstan-ignore nullCoalesce.initializedProperty (unnecessary according to types, but can happen during runtime) if (is_callable($types)) { $types = $types(); } if (! is_iterable($types)) { throw new InvariantViolation("Must provide iterable of types or a callable which returns such an iterable for Union {$this->name}."); } foreach ($types as $type) { $this->types[] = Schema::resolveType($type); } } return $this->types; } public function resolveType($objectValue, $context, ResolveInfo $info) { if (isset($this->config['resolveType'])) { return ($this->config['resolveType'])($objectValue, $context, $info); } return null; } public function assertValid(): void { Utils::assertValidName($this->name); $resolveType = $this->config['resolveType'] ?? null; // @phpstan-ignore-next-line unnecessary according to types, but can happen during runtime if (isset($resolveType) && ! is_callable($resolveType)) { $notCallable = Utils::printSafe($resolveType); throw new InvariantViolation("{$this->name} must provide \"resolveType\" as null or a callable, but got: {$notCallable}."); } } public function astNode(): ?UnionTypeDefinitionNode { return $this->astNode; } /** @return array<UnionTypeExtensionNode> */ public function extensionASTNodes(): array { return $this->extensionASTNodes; } } graphql/lib/Type/Definition/NullableType.php000064400000000460151666572100015103 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; /* export type GraphQLNullableType = | GraphQLScalarType | GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType | GraphQLEnumType | GraphQLInputObjectType | GraphQLList<any>; */ interface NullableType {} graphql/lib/Type/Definition/StringType.php000064400000003411151666572100014612 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\StringValueNode; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Utils\Utils; class StringType extends ScalarType { public string $name = Type::STRING; public ?string $description = 'The `String` scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.'; /** @throws SerializationError */ public function serialize($value): string { $canCast = is_scalar($value) || (is_object($value) && method_exists($value, '__toString')) || $value === null; if (! $canCast) { $notStringable = Utils::printSafe($value); throw new SerializationError("String cannot represent value: {$notStringable}"); } return (string) $value; } /** @throws Error */ public function parseValue($value): string { if (! is_string($value)) { $notString = Utils::printSafeJson($value); throw new Error("String cannot represent a non string value: {$notString}"); } return $value; } /** * @throws \JsonException * @throws Error */ public function parseLiteral(Node $valueNode, ?array $variables = null): string { if ($valueNode instanceof StringValueNode) { return $valueNode->value; } $notString = Printer::doPrint($valueNode); throw new Error("String cannot represent a non string value: {$notString}", $valueNode); } } graphql/lib/Type/Definition/Deprecated.php000064400000000371151666572100014544 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; #[\Attribute(\Attribute::TARGET_ALL)] class Deprecated { public function __construct( public string $reason = Directive::DEFAULT_DEPRECATION_REASON, ) {} } graphql/lib/Type/Definition/UnresolvedFieldDefinition.php000064400000002272151666572100017611 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; /** * @phpstan-import-type UnnamedFieldDefinitionConfig from FieldDefinition * * @phpstan-type DefinitionResolver callable(): (FieldDefinition|(Type&OutputType)|UnnamedFieldDefinitionConfig) */ class UnresolvedFieldDefinition { private string $name; /** * @var callable * * @phpstan-var DefinitionResolver */ private $definitionResolver; /** @param DefinitionResolver $definitionResolver */ public function __construct(string $name, callable $definitionResolver) { $this->name = $name; $this->definitionResolver = $definitionResolver; } public function getName(): string { return $this->name; } public function resolve(): FieldDefinition { $field = ($this->definitionResolver)(); if ($field instanceof FieldDefinition) { return $field; } if ($field instanceof Type) { return new FieldDefinition([ 'name' => $this->name, 'type' => $field, ]); } return new FieldDefinition($field + ['name' => $this->name]); } } graphql/lib/Type/Definition/ResolveInfo.php000064400000040424151666572100014742 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Values; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Type\Schema; /** * Structure containing information useful for field resolution process. * * Passed as 4th argument to every field resolver. See [docs on field resolving (data fetching)](data-fetching.md). * * @phpstan-import-type QueryPlanOptions from QueryPlan * * @phpstan-type Path list<string|int> */ class ResolveInfo { /** * The definition of the field being resolved. * * @api */ public FieldDefinition $fieldDefinition; /** * The name of the field being resolved. * * @api */ public string $fieldName; /** * Expected return type of the field being resolved. * * @api */ public Type $returnType; /** * AST of all nodes referencing this field in the query. * * @api * * @var \ArrayObject<int, FieldNode> */ public \ArrayObject $fieldNodes; /** * Parent type of the field being resolved. * * @api */ public ObjectType $parentType; /** * Path to this field from the very root value. When fields are aliased, the path includes aliases. * * @api * * @var list<string|int> * * @phpstan-var Path */ public array $path; /** * Path to this field from the very root value. This will never include aliases. * * @api * * @var list<string|int> * * @phpstan-var Path */ public array $unaliasedPath; /** * Instance of a schema used for execution. * * @api */ public Schema $schema; /** * AST of all fragments defined in query. * * @api * * @var array<string, FragmentDefinitionNode> */ public array $fragments = []; /** * Root value passed to query execution. * * @api * * @var mixed */ public $rootValue; /** * AST of operation definition node (query, mutation). * * @api */ public OperationDefinitionNode $operation; /** * Array of variables passed to query execution. * * @api * * @var array<string, mixed> */ public array $variableValues = []; /** * @param \ArrayObject<int, FieldNode> $fieldNodes * @param list<string|int> $path * @param array<string, FragmentDefinitionNode> $fragments * @param mixed|null $rootValue * @param array<string, mixed> $variableValues * @param list<string|int> $unaliasedPath * * @phpstan-param Path $path * @phpstan-param Path $unaliasedPath */ public function __construct( FieldDefinition $fieldDefinition, \ArrayObject $fieldNodes, ObjectType $parentType, array $path, Schema $schema, array $fragments, $rootValue, OperationDefinitionNode $operation, array $variableValues, array $unaliasedPath = [] ) { $this->fieldDefinition = $fieldDefinition; $this->fieldName = $fieldDefinition->name; $this->returnType = $fieldDefinition->getType(); $this->fieldNodes = $fieldNodes; $this->parentType = $parentType; $this->path = $path; $this->unaliasedPath = $unaliasedPath; $this->schema = $schema; $this->fragments = $fragments; $this->rootValue = $rootValue; $this->operation = $operation; $this->variableValues = $variableValues; } /** * Returns names of all fields selected in query for `$this->fieldName` up to `$depth` levels. * * Example: * { * root { * id * nested { * nested1 * nested2 { * nested3 * } * } * } * } * * Given this ResolveInfo instance is a part of root field resolution, and $depth === 1, * this method will return: * [ * 'id' => true, * 'nested' => [ * 'nested1' => true, * 'nested2' => true, * ], * ] * * This method does not consider conditional typed fragments. * Use it with care for fields of interface and union types. * * @param int $depth How many levels to include in the output beyond the first * * @return array<string, mixed> * * @api */ public function getFieldSelection(int $depth = 0): array { $fields = []; foreach ($this->fieldNodes as $fieldNode) { $selectionSet = $fieldNode->selectionSet; if ($selectionSet !== null) { $fields = array_merge_recursive( $fields, $this->foldSelectionSet($selectionSet, $depth) ); } } return $fields; } /** * Returns names and args of all fields selected in query for `$this->fieldName` up to `$depth` levels, including aliases. * * The result maps original field names to a map of selections for that field, including aliases. * For each of those selections, you can find the following keys: * - "args" contains the passed arguments for this field/alias (not on an union inline fragment) * - "type" contains the related Type instance found (will be the same for all aliases of a field) * - "selectionSet" contains potential nested fields of this field/alias (only on ObjectType). The structure is recursive from here. * - "unions" contains potential object types contained in an UnionType (only on UnionType). The structure is recursive from here and will go through the selectionSet of the object types. * * Example: * { * root { * id * nested { * nested1(myArg: 1) * nested1Bis: nested1 * } * alias1: nested { * nested1(myArg: 2, mySecondAg: "test") * } * myUnion(myArg: 3) { * ...on Nested { * nested1(myArg: 4) * } * ...on MyCustomObject { * nested3 * } * } * } * } * * Given this ResolveInfo instance is a part of root field resolution, * $depth === 1, * and fields "nested" represents an ObjectType named "Nested", * this method will return: * [ * 'id' => [ * 'id' => [ * 'args' => [], * 'type' => GraphQL\Type\Definition\IntType Object ( ... )), * ], * ], * 'nested' => [ * 'nested' => [ * 'args' => [], * 'type' => GraphQL\Type\Definition\ObjectType Object ( ... )), * 'selectionSet' => [ * 'nested1' => [ * 'nested1' => [ * 'args' => [ * 'myArg' => 1, * ], * 'type' => GraphQL\Type\Definition\StringType Object ( ... )), * ], * 'nested1Bis' => [ * 'args' => [], * 'type' => GraphQL\Type\Definition\StringType Object ( ... )), * ], * ], * ], * ], * ], * 'alias1' => [ * 'alias1' => [ * 'args' => [], * 'type' => GraphQL\Type\Definition\ObjectType Object ( ... )), * 'selectionSet' => [ * 'nested1' => [ * 'nested1' => [ * 'args' => [ * 'myArg' => 2, * 'mySecondAg' => "test", * ], * 'type' => GraphQL\Type\Definition\StringType Object ( ... )), * ], * ], * ], * ], * ], * 'myUnion' => [ * 'myUnion' => [ * 'args' => [ * 'myArg' => 3, * ], * 'type' => GraphQL\Type\Definition\UnionType Object ( ... )), * 'unions' => [ * 'Nested' => [ * 'type' => GraphQL\Type\Definition\ObjectType Object ( ... )), * 'selectionSet' => [ * 'nested1' => [ * 'nested1' => [ * 'args' => [ * 'myArg' => 4, * ], * 'type' => GraphQL\Type\Definition\StringType Object ( ... )), * ], * ], * ], * ], * 'MyCustomObject' => [ * 'type' => GraphQL\Tests\Type\TestClasses\MyCustomType Object ( ... )), * 'selectionSet' => [ * 'nested3' => [ * 'nested3' => [ * 'args' => [], * 'type' => GraphQL\Type\Definition\StringType Object ( ... )), * ], * ], * ], * ], * ], * ], * ], * ] * * @param int $depth How many levels to include in the output beyond the first * * @throws \Exception * @throws Error * @throws InvariantViolation * * @return array<string, mixed> * * @api */ public function getFieldSelectionWithAliases(int $depth = 0): array { $fields = []; foreach ($this->fieldNodes as $fieldNode) { $selectionSet = $fieldNode->selectionSet; if ($selectionSet !== null) { $field = $this->parentType->getField($fieldNode->name->value); $fieldType = $field->getType(); $fields = array_merge_recursive( $fields, $this->foldSelectionWithAlias($selectionSet, $depth, $fieldType) ); } } return $fields; } /** * @param QueryPlanOptions $options * * @throws \Exception * @throws Error * @throws InvariantViolation */ public function lookAhead(array $options = []): QueryPlan { return new QueryPlan( $this->parentType, $this->schema, $this->fieldNodes, $this->variableValues, $this->fragments, $options ); } /** @return array<string, bool> */ private function foldSelectionSet(SelectionSetNode $selectionSet, int $descend): array { /** @var array<string, bool> $fields */ $fields = []; foreach ($selectionSet->selections as $selection) { if ($selection instanceof FieldNode) { $fields[$selection->name->value] = $descend > 0 && $selection->selectionSet !== null ? array_merge_recursive( $fields[$selection->name->value] ?? [], $this->foldSelectionSet($selection->selectionSet, $descend - 1) ) : true; } elseif ($selection instanceof FragmentSpreadNode) { $spreadName = $selection->name->value; $fragment = $this->fragments[$spreadName] ?? null; if ($fragment === null) { continue; } $fields = array_merge_recursive( $this->foldSelectionSet($fragment->selectionSet, $descend), $fields ); } elseif ($selection instanceof InlineFragmentNode) { $fields = array_merge_recursive( $this->foldSelectionSet($selection->selectionSet, $descend), $fields ); } } return $fields; } /** * @throws \Exception * @throws Error * @throws InvariantViolation * * @return array<string> */ private function foldSelectionWithAlias(SelectionSetNode $selectionSet, int $descend, Type $parentType): array { /** @var array<string, bool> $fields */ $fields = []; if ($parentType instanceof WrappingType) { $parentType = $parentType->getInnermostType(); } foreach ($selectionSet->selections as $selection) { if ($selection instanceof FieldNode) { $fieldName = $selection->name->value; $aliasName = $selection->alias->value ?? $fieldName; if ($fieldName === Introspection::TYPE_NAME_FIELD_NAME) { continue; } assert($parentType instanceof HasFieldsType, 'ensured by query validation'); $aliasInfo = &$fields[$fieldName][$aliasName]; $fieldDef = $parentType->getField($fieldName); $aliasInfo['args'] = Values::getArgumentValues($fieldDef, $selection, $this->variableValues); $fieldType = $fieldDef->getType(); $namedFieldType = $fieldType; if ($namedFieldType instanceof WrappingType) { $namedFieldType = $namedFieldType->getInnermostType(); } $aliasInfo['type'] = $namedFieldType; if ($descend <= 0) { continue; } $nestedSelectionSet = $selection->selectionSet; if ($nestedSelectionSet === null) { continue; } if ($namedFieldType instanceof UnionType) { $aliasInfo['unions'] = $this->foldSelectionWithAlias($nestedSelectionSet, $descend, $fieldType); continue; } $aliasInfo['selectionSet'] = $this->foldSelectionWithAlias($nestedSelectionSet, $descend - 1, $fieldType); } elseif ($selection instanceof FragmentSpreadNode) { $spreadName = $selection->name->value; $fragment = $this->fragments[$spreadName] ?? null; if ($fragment === null) { continue; } $fieldType = $this->schema->getType($fragment->typeCondition->name->value); assert($fieldType instanceof Type, 'ensured by query validation'); $fields = array_merge_recursive( $this->foldSelectionWithAlias($fragment->selectionSet, $descend, $fieldType), $fields ); } elseif ($selection instanceof InlineFragmentNode) { $typeCondition = $selection->typeCondition; $fieldType = $typeCondition === null ? $parentType : $this->schema->getType($typeCondition->name->value); assert($fieldType instanceof Type, 'ensured by query validation'); if ($parentType instanceof UnionType) { assert($fieldType instanceof NamedType, 'ensured by query validation'); $fieldTypeInfo = &$fields[$fieldType->name()]; $fieldTypeInfo['type'] = $fieldType; $fieldTypeInfo['selectionSet'] = $this->foldSelectionWithAlias($selection->selectionSet, $descend, $fieldType); continue; } $fields = array_merge_recursive( $this->foldSelectionWithAlias($selection->selectionSet, $descend, $fieldType), $fields ); } } return $fields; } } graphql/lib/Type/Definition/Argument.php000064400000007511151666572100014271 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-type ArgumentType (Type&InputType)|callable(): (Type&InputType) * @phpstan-type UnnamedArgumentConfig array{ * name?: string, * type: ArgumentType, * defaultValue?: mixed, * description?: string|null, * deprecationReason?: string|null, * astNode?: InputValueDefinitionNode|null * } * @phpstan-type ArgumentConfig array{ * name: string, * type: ArgumentType, * defaultValue?: mixed, * description?: string|null, * deprecationReason?: string|null, * astNode?: InputValueDefinitionNode|null * } * @phpstan-type ArgumentListConfig iterable<ArgumentConfig|ArgumentType>|iterable<UnnamedArgumentConfig> */ class Argument { public string $name; /** @var mixed */ public $defaultValue; public ?string $description; public ?string $deprecationReason; /** @var Type&InputType */ private Type $type; public ?InputValueDefinitionNode $astNode; /** @phpstan-var ArgumentConfig */ public array $config; /** @phpstan-param ArgumentConfig $config */ public function __construct(array $config) { $this->name = $config['name']; $this->defaultValue = $config['defaultValue'] ?? null; $this->description = $config['description'] ?? null; $this->deprecationReason = $config['deprecationReason'] ?? null; // Do nothing for type, it is lazy loaded in getType() $this->astNode = $config['astNode'] ?? null; $this->config = $config; } /** * @phpstan-param ArgumentListConfig $config * * @return array<int, self> */ public static function listFromConfig(iterable $config): array { $list = []; foreach ($config as $name => $argConfig) { if (! is_array($argConfig)) { $argConfig = ['type' => $argConfig]; } /** @phpstan-var ArgumentConfig $argConfigWithName */ $argConfigWithName = $argConfig + ['name' => $name]; $list[] = new self($argConfigWithName); } return $list; } /** @return Type&InputType */ public function getType(): Type { if (! isset($this->type)) { $this->type = Schema::resolveType($this->config['type']); } return $this->type; } public function defaultValueExists(): bool { return array_key_exists('defaultValue', $this->config); } public function isRequired(): bool { return $this->getType() instanceof NonNull && ! $this->defaultValueExists(); } public function isDeprecated(): bool { return (bool) $this->deprecationReason; } /** * @param Type&NamedType $parentType * * @throws InvariantViolation */ public function assertValid(FieldDefinition $parentField, Type $parentType): void { $error = Utils::isValidNameError($this->name); if ($error !== null) { throw new InvariantViolation("{$parentType->name}.{$parentField->name}({$this->name}:) {$error->getMessage()}"); } $type = Type::getNamedType($this->getType()); if (! $type instanceof InputType) { $notInputType = Utils::printSafe($this->type); throw new InvariantViolation("{$parentType->name}.{$parentField->name}({$this->name}): argument type must be Input Type but got: {$notInputType}"); } if ($this->isRequired() && $this->isDeprecated()) { throw new InvariantViolation("Required argument {$parentType->name}.{$parentField->name}({$this->name}:) cannot be deprecated."); } } } graphql/lib/Type/Definition/ObjectType.php000064400000012627151666572100014563 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Deferred; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Executor; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Utils\Utils; /** * Object Type Definition. * * Most GraphQL types you define will be object types. * Object types have a name, but most importantly describe their fields. * * Example: * * $AddressType = new ObjectType([ * 'name' => 'Address', * 'fields' => [ * 'street' => GraphQL\Type\Definition\Type::string(), * 'number' => GraphQL\Type\Definition\Type::int(), * 'formatted' => [ * 'type' => GraphQL\Type\Definition\Type::string(), * 'resolve' => fn (AddressModel $address): string => "{$address->number} {$address->street}", * ], * ], * ]); * * When two types need to refer to each other, or a type needs to refer to * itself in a field, you can use a function expression (aka a closure or a * thunk) to supply the fields lazily. * * Example: * * $PersonType = null; * $PersonType = new ObjectType([ * 'name' => 'Person', * 'fields' => fn (): array => [ * 'name' => GraphQL\Type\Definition\Type::string(), * 'bestFriend' => $PersonType, * ], * ]); * * @phpstan-import-type FieldResolver from Executor * @phpstan-import-type ArgsMapper from Executor * * @phpstan-type InterfaceTypeReference InterfaceType|callable(): InterfaceType * @phpstan-type ObjectConfig array{ * name?: string|null, * description?: string|null, * resolveField?: FieldResolver|null, * argsMapper?: ArgsMapper|null, * fields: (callable(): iterable<mixed>)|iterable<mixed>, * interfaces?: iterable<InterfaceTypeReference>|callable(): iterable<InterfaceTypeReference>, * isTypeOf?: (callable(mixed $objectValue, mixed $context, ResolveInfo $resolveInfo): (bool|Deferred|null))|null, * astNode?: ObjectTypeDefinitionNode|null, * extensionASTNodes?: array<ObjectTypeExtensionNode>|null * } */ class ObjectType extends Type implements OutputType, CompositeType, NullableType, HasFieldsType, NamedType, ImplementingType { use HasFieldsTypeImplementation; use NamedTypeImplementation; use ImplementingTypeImplementation; public ?ObjectTypeDefinitionNode $astNode; /** @var array<ObjectTypeExtensionNode> */ public array $extensionASTNodes; /** * @var callable|null * * @phpstan-var FieldResolver|null */ public $resolveFieldFn; /** * @var callable|null * * @phpstan-var ArgsMapper|null */ public $argsMapper; /** @phpstan-var ObjectConfig */ public array $config; /** * @phpstan-param ObjectConfig $config * * @throws InvariantViolation */ public function __construct(array $config) { $this->name = $config['name'] ?? $this->inferName(); $this->description = $config['description'] ?? null; $this->resolveFieldFn = $config['resolveField'] ?? null; $this->argsMapper = $config['argsMapper'] ?? null; $this->astNode = $config['astNode'] ?? null; $this->extensionASTNodes = $config['extensionASTNodes'] ?? []; $this->config = $config; } /** * @param mixed $type * * @throws InvariantViolation */ public static function assertObjectType($type): self { if (! ($type instanceof self)) { $notObjectType = Utils::printSafe($type); throw new InvariantViolation("Expected {$notObjectType} to be a GraphQL Object type."); } return $type; } /** * @param mixed $objectValue The resolved value for the object type * @param mixed $context The context that was passed to GraphQL::execute() * * @return bool|Deferred|null */ public function isTypeOf($objectValue, $context, ResolveInfo $info) { return isset($this->config['isTypeOf']) ? $this->config['isTypeOf']( $objectValue, $context, $info ) : null; } /** * Validates type config and throws if one of the type options is invalid. * Note: this method is shallow, it won't validate object fields and their arguments. * * @throws Error * @throws InvariantViolation */ public function assertValid(): void { Utils::assertValidName($this->name); $isTypeOf = $this->config['isTypeOf'] ?? null; // @phpstan-ignore-next-line unnecessary according to types, but can happen during runtime if (isset($isTypeOf) && ! is_callable($isTypeOf)) { $notCallable = Utils::printSafe($isTypeOf); throw new InvariantViolation("{$this->name} must provide \"isTypeOf\" as null or a callable, but got: {$notCallable}."); } foreach ($this->getFields() as $field) { $field->assertValid($this); } $this->assertValidInterfaces(); } public function astNode(): ?ObjectTypeDefinitionNode { return $this->astNode; } /** @return array<ObjectTypeExtensionNode> */ public function extensionASTNodes(): array { return $this->extensionASTNodes; } } graphql/lib/Type/Definition/WrappingType.php000064400000000630151666572100015133 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; interface WrappingType { /** Return the wrapped type, which may itself be a wrapping type. */ public function getWrappedType(): Type; /** * Return the innermost wrapped type, which is guaranteed to be a named type. * * @return Type&NamedType */ public function getInnermostType(): NamedType; } graphql/lib/Type/Definition/PhpEnumType.php000064400000011131151666572100014716 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Utils\PhpDoc; use YOOtheme\GraphQL\Utils\Utils; /** @phpstan-import-type PartialEnumValueConfig from EnumType */ class PhpEnumType extends EnumType { public const MULTIPLE_DESCRIPTIONS_DISALLOWED = 'Using more than 1 Description attribute is not supported.'; public const MULTIPLE_DEPRECATIONS_DISALLOWED = 'Using more than 1 Deprecated attribute is not supported.'; /** @var class-string<\UnitEnum> */ protected string $enumClass; /** * @param class-string<\UnitEnum> $enumClass The fully qualified class name of a native PHP enum * @param string|null $name The name the enum will have in the schema, defaults to the basename of the given class * @param string|null $description The description the enum will have in the schema, defaults to PHPDoc of the given class * @param array<EnumTypeExtensionNode>|null $extensionASTNodes * * @throws \Exception * @throws \ReflectionException */ public function __construct( string $enumClass, ?string $name = null, ?string $description = null, ?EnumTypeDefinitionNode $astNode = null, ?array $extensionASTNodes = null ) { $this->enumClass = $enumClass; $reflection = new \ReflectionEnum($enumClass); /** * @var array<string, PartialEnumValueConfig> $enumDefinitions */ $enumDefinitions = []; foreach ($reflection->getCases() as $case) { $enumDefinitions[$case->name] = [ 'value' => $case->getValue(), 'description' => $this->extractDescription($case), 'deprecationReason' => $this->deprecationReason($case), ]; } parent::__construct([ 'name' => $name ?? $this->baseName($enumClass), 'values' => $enumDefinitions, 'description' => $description ?? $this->extractDescription($reflection), 'astNode' => $astNode, 'extensionASTNodes' => $extensionASTNodes, ]); } public function serialize($value): string { if ($value instanceof $this->enumClass) { return $value->name; } if (is_a($this->enumClass, \BackedEnum::class, true)) { try { $instance = $this->enumClass::from($value); } catch (\ValueError|\TypeError $_) { $notEnumInstanceOrValue = Utils::printSafe($value); throw new SerializationError("Cannot serialize value as enum: {$notEnumInstanceOrValue}, expected instance or valid value of {$this->enumClass}."); } return $instance->name; } $notEnum = Utils::printSafe($value); throw new SerializationError("Cannot serialize value as enum: {$notEnum}, expected instance of {$this->enumClass}."); } public function parseValue($value) { // Can happen when variable values undergo a serialization cycle before execution if ($value instanceof $this->enumClass) { return $value; } return parent::parseValue($value); } /** @param class-string $class */ protected function baseName(string $class): string { $parts = explode('\\', $class); return end($parts); } /** * @param \ReflectionClassConstant|\ReflectionClass<\UnitEnum> $reflection * * @throws \Exception */ protected function extractDescription(\ReflectionClassConstant|\ReflectionClass $reflection): ?string { $attributes = $reflection->getAttributes(Description::class); if (count($attributes) === 1) { return $attributes[0]->newInstance()->description; } if (count($attributes) > 1) { throw new \Exception(self::MULTIPLE_DESCRIPTIONS_DISALLOWED); } $comment = $reflection->getDocComment(); $unpadded = PhpDoc::unpad($comment); return PhpDoc::unwrap($unpadded); } /** @throws \Exception */ protected function deprecationReason(\ReflectionClassConstant $reflection): ?string { $attributes = $reflection->getAttributes(Deprecated::class); if (count($attributes) === 1) { return $attributes[0]->newInstance()->reason; } if (count($attributes) > 1) { throw new \Exception(self::MULTIPLE_DEPRECATIONS_DISALLOWED); } return null; } } graphql/lib/Type/Definition/HasFieldsTypeImplementation.php000064400000004741151666572100020123 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; /** * @see HasFieldsType */ trait HasFieldsTypeImplementation { /** * Lazily initialized. * * @var array<string, FieldDefinition|UnresolvedFieldDefinition> */ private array $fields; /** @throws InvariantViolation */ private function initializeFields(): void { if (isset($this->fields)) { return; } $this->fields = FieldDefinition::defineFieldMap($this, $this->config['fields']); } /** @throws InvariantViolation */ public function getField(string $name): FieldDefinition { $field = $this->findField($name); if ($field === null) { throw new InvariantViolation("Field \"{$name}\" is not defined for type \"{$this->name}\""); } return $field; } /** @throws InvariantViolation */ public function findField(string $name): ?FieldDefinition { $this->initializeFields(); if (! isset($this->fields[$name])) { return null; } $field = $this->fields[$name]; if ($field instanceof UnresolvedFieldDefinition) { return $this->fields[$name] = $field->resolve(); } return $field; } /** @throws InvariantViolation */ public function hasField(string $name): bool { $this->initializeFields(); return isset($this->fields[$name]); } /** @throws InvariantViolation */ public function getFields(): array { $this->initializeFields(); foreach ($this->fields as $name => $field) { if ($field instanceof UnresolvedFieldDefinition) { $this->fields[$name] = $field->resolve(); } } // @phpstan-ignore-next-line all field definitions are now resolved return $this->fields; } public function getVisibleFields(): array { return array_filter( $this->getFields(), fn (FieldDefinition $fieldDefinition): bool => $fieldDefinition->isVisible() ); } /** @throws InvariantViolation */ public function getFieldNames(): array { $this->initializeFields(); $visibleFieldNames = array_map( fn (FieldDefinition $fieldDefinition): string => $fieldDefinition->getName(), $this->getVisibleFields() ); return array_values($visibleFieldNames); } } graphql/lib/Type/Definition/NonNull.php000064400000002177151666572100014077 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Type\Schema; /** * @phpstan-type WrappedType (NullableType&Type)|callable():(NullableType&Type) */ class NonNull extends Type implements WrappingType, OutputType, InputType { /** * @var Type|callable * * @phpstan-var WrappedType */ private $wrappedType; /** * @param Type|callable $type * * @phpstan-param WrappedType $type */ public function __construct($type) { $this->wrappedType = $type; } public function toString(): string { return $this->getWrappedType()->toString() . '!'; } /** @return NullableType&Type */ public function getWrappedType(): Type { return Schema::resolveType($this->wrappedType); } public function getInnermostType(): NamedType { $type = $this->getWrappedType(); while ($type instanceof WrappingType) { $type = $type->getWrappedType(); } assert($type instanceof NamedType, 'known because we unwrapped all the way down'); return $type; } } graphql/lib/Type/Definition/LeafType.php000064400000002610151666572100014213 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\ValueNode; /* export type GraphQLLeafType = GraphQLScalarType | GraphQLEnumType; */ interface LeafType { /** * Serializes an internal value to include in a response. * * Should throw an exception on invalid values. * * @param mixed $value * * @throws SerializationError * * @return mixed */ public function serialize($value); /** * Parses an externally provided value (query variable) to use as an input. * * Should throw an exception with a client-friendly message on invalid values, @see ClientAware. * * @param mixed $value * * @throws Error * * @return mixed */ public function parseValue($value); /** * Parses an externally provided literal value (hardcoded in GraphQL query) to use as an input. * * Should throw an exception with a client-friendly message on invalid value nodes, @see ClientAware. * * @param ValueNode&Node $valueNode * @param array<string, mixed>|null $variables * * @throws Error * * @return mixed */ public function parseLiteral(Node $valueNode, ?array $variables = null); } graphql/lib/Type/Definition/Type.php000064400000016740151666572100013434 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Utils\Utils; /** * Registry of standard GraphQL types and base class for all other types. */ abstract class Type implements \JsonSerializable { public const INT = 'Int'; public const FLOAT = 'Float'; public const STRING = 'String'; public const BOOLEAN = 'Boolean'; public const ID = 'ID'; public const STANDARD_TYPE_NAMES = [ self::INT, self::FLOAT, self::STRING, self::BOOLEAN, self::ID, ]; public const BUILT_IN_TYPE_NAMES = [ ...self::STANDARD_TYPE_NAMES, ...Introspection::TYPE_NAMES, ]; /** @var array<string, ScalarType>|null */ protected static ?array $standardTypes; /** @var array<string, Type&NamedType>|null */ protected static ?array $builtInTypes; /** * Returns the registered or default standard Int type. * * @api */ public static function int(): ScalarType { return static::$standardTypes[self::INT] ??= new IntType(); // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) } /** * Returns the registered or default standard Float type. * * @api */ public static function float(): ScalarType { return static::$standardTypes[self::FLOAT] ??= new FloatType(); // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) } /** * Returns the registered or default standard String type. * * @api */ public static function string(): ScalarType { return static::$standardTypes[self::STRING] ??= new StringType(); // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) } /** * Returns the registered or default standard Boolean type. * * @api */ public static function boolean(): ScalarType { return static::$standardTypes[self::BOOLEAN] ??= new BooleanType(); // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) } /** * Returns the registered or default standard ID type. * * @api */ public static function id(): ScalarType { return static::$standardTypes[self::ID] ??= new IDType(); // @phpstan-ignore missingType.checkedException (static configuration is known to be correct) } /** * Wraps the given type in a list type. * * @template T of Type * * @param T|callable():T $type * * @return ListOfType<T> * * @api */ public static function listOf($type): ListOfType { return new ListOfType($type); } /** * Wraps the given type in a non-null type. * * @param NonNull|(NullableType&Type)|callable():(NullableType&Type) $type * * @api */ public static function nonNull($type): NonNull { if ($type instanceof NonNull) { return $type; } return new NonNull($type); } /** * Returns all builtin in types including base scalar and introspection types. * * @return array<string, Type&NamedType> */ public static function builtInTypes(): array { return self::$builtInTypes ??= array_merge( Introspection::getTypes(), self::getStandardTypes() ); } /** * Returns all builtin scalar types. * * @return array<string, ScalarType> */ public static function getStandardTypes(): array { return [ self::INT => static::int(), self::FLOAT => static::float(), self::STRING => static::string(), self::BOOLEAN => static::boolean(), self::ID => static::id(), ]; } /** * Allows partially or completely overriding the standard types. * * @param array<ScalarType> $types * * @throws InvariantViolation */ public static function overrideStandardTypes(array $types): void { // Reset caches that might contain instances of standard types static::$builtInTypes = null; Introspection::resetCachedInstances(); Directive::resetCachedInstances(); foreach ($types as $type) { // @phpstan-ignore-next-line generic type is not enforced by PHP if (! $type instanceof ScalarType) { $typeClass = ScalarType::class; $notType = Utils::printSafe($type); throw new InvariantViolation("Expecting instance of {$typeClass}, got {$notType}"); } if (! in_array($type->name, self::STANDARD_TYPE_NAMES, true)) { $standardTypeNames = implode(', ', self::STANDARD_TYPE_NAMES); $notStandardTypeName = Utils::printSafe($type->name); throw new InvariantViolation("Expecting one of the following names for a standard type: {$standardTypeNames}; got {$notStandardTypeName}"); } static::$standardTypes[$type->name] = $type; } } /** * Determines if the given type is an input type. * * @param mixed $type * * @api */ public static function isInputType($type): bool { return self::getNamedType($type) instanceof InputType; } /** * Returns the underlying named type of the given type. * * @return (Type&NamedType)|null * * @phpstan-return ($type is null ? null : Type&NamedType) * * @api */ public static function getNamedType(?Type $type): ?Type { if ($type instanceof WrappingType) { return $type->getInnermostType(); } assert($type === null || $type instanceof NamedType, 'only other option'); return $type; } /** * Determines if the given type is an output type. * * @param mixed $type * * @api */ public static function isOutputType($type): bool { return self::getNamedType($type) instanceof OutputType; } /** * Determines if the given type is a leaf type. * * @param mixed $type * * @api */ public static function isLeafType($type): bool { return $type instanceof LeafType; } /** * Determines if the given type is a composite type. * * @param mixed $type * * @api */ public static function isCompositeType($type): bool { return $type instanceof CompositeType; } /** * Determines if the given type is an abstract type. * * @param mixed $type * * @api */ public static function isAbstractType($type): bool { return $type instanceof AbstractType; } /** * Unwraps a potentially non-null type to return the underlying nullable type. * * @return Type&NullableType * * @api */ public static function getNullableType(Type $type): Type { if ($type instanceof NonNull) { return $type->getWrappedType(); } assert($type instanceof NullableType, 'only other option'); return $type; } abstract public function toString(): string; public function __toString(): string { return $this->toString(); } #[\ReturnTypeWillChange] public function jsonSerialize(): string { return $this->toString(); } } graphql/lib/Type/Definition/FieldDefinition.php000064400000017456151666572100015554 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Executor; use YOOtheme\GraphQL\Language\AST\FieldDefinitionNode; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\Utils; /** * @see Executor * * @phpstan-import-type FieldResolver from Executor * @phpstan-import-type ArgsMapper from Executor * @phpstan-import-type ArgumentListConfig from Argument * * @phpstan-type FieldType (Type&OutputType)|callable(): (Type&OutputType) * @phpstan-type ComplexityFn callable(int, array<string, mixed>): int * @phpstan-type VisibilityFn callable(): bool * @phpstan-type FieldDefinitionConfig array{ * name: string, * type: FieldType, * resolve?: FieldResolver|null, * args?: ArgumentListConfig|null, * argsMapper?: ArgsMapper|null, * description?: string|null, * visible?: VisibilityFn|bool, * deprecationReason?: string|null, * astNode?: FieldDefinitionNode|null, * complexity?: ComplexityFn|null * } * @phpstan-type UnnamedFieldDefinitionConfig array{ * type: FieldType, * resolve?: FieldResolver|null, * args?: ArgumentListConfig|null, * argsMapper?: ArgsMapper|null, * description?: string|null, * visible?: VisibilityFn|bool, * deprecationReason?: string|null, * astNode?: FieldDefinitionNode|null, * complexity?: ComplexityFn|null * } * @phpstan-type FieldsConfig iterable<mixed>|callable(): iterable<mixed> */ /* * TODO check if newer versions of PHPStan can handle the full definition, it currently crashes when it is used * @phpstan-type EagerListEntry FieldDefinitionConfig|(Type&OutputType) * @phpstan-type EagerMapEntry UnnamedFieldDefinitionConfig|FieldDefinition * @phpstan-type FieldsList iterable<EagerListEntry|(callable(): EagerListEntry)> * @phpstan-type FieldsMap iterable<string, EagerMapEntry|(callable(): EagerMapEntry)> * @phpstan-type FieldsIterable FieldsList|FieldsMap * @phpstan-type FieldsConfig FieldsIterable|(callable(): FieldsIterable) */ class FieldDefinition { public string $name; /** @var array<int, Argument> */ public array $args; /** * Callback to transform args to value object. * * @var callable|null * * @phpstan-var ArgsMapper|null */ public $argsMapper; /** * Callback for resolving field value given parent value. * * @var callable|null * * @phpstan-var FieldResolver|null */ public $resolveFn; public ?string $description; /** * @var callable|bool * * @phpstan-var VisibilityFn|bool */ public $visible; public ?string $deprecationReason; public ?FieldDefinitionNode $astNode; /** * @var callable|null * * @phpstan-var ComplexityFn|null */ public $complexityFn; /** * Original field definition config. * * @phpstan-var FieldDefinitionConfig */ public array $config; /** @var Type&OutputType */ private Type $type; /** @param FieldDefinitionConfig $config */ public function __construct(array $config) { $this->name = $config['name']; $this->resolveFn = $config['resolve'] ?? null; $this->args = isset($config['args']) ? Argument::listFromConfig($config['args']) : []; $this->argsMapper = $config['argsMapper'] ?? null; $this->description = $config['description'] ?? null; $this->visible = $config['visible'] ?? true; $this->deprecationReason = $config['deprecationReason'] ?? null; $this->astNode = $config['astNode'] ?? null; $this->complexityFn = $config['complexity'] ?? null; $this->config = $config; } /** * @param ObjectType|InterfaceType $parentType * @param callable|iterable $fields * * @phpstan-param FieldsConfig $fields * * @throws InvariantViolation * * @return array<string, self|UnresolvedFieldDefinition> */ public static function defineFieldMap(Type $parentType, $fields): array { if (is_callable($fields)) { $fields = $fields(); } if (! is_iterable($fields)) { throw new InvariantViolation("{$parentType->name} fields must be an iterable or a callable which returns such an iterable."); } $map = []; foreach ($fields as $maybeName => $field) { if (is_array($field)) { if (! isset($field['name'])) { if (! is_string($maybeName)) { throw new InvariantViolation("{$parentType->name} fields must be an associative array with field names as keys or a function which returns such an array."); } $field['name'] = $maybeName; } // @phpstan-ignore-next-line PHPStan won't let us define the whole type $fieldDef = new self($field); } elseif ($field instanceof self) { $fieldDef = $field; } elseif (is_callable($field)) { if (! is_string($maybeName)) { throw new InvariantViolation("{$parentType->name} lazy fields must be an associative array with field names as keys."); } $fieldDef = new UnresolvedFieldDefinition($maybeName, $field); } elseif ($field instanceof Type) { // @phpstan-ignore-next-line PHPStan won't let us define the whole type $fieldDef = new self([ 'name' => $maybeName, 'type' => $field, ]); } else { $invalidFieldConfig = Utils::printSafe($field); throw new InvariantViolation("{$parentType->name}.{$maybeName} field config must be an array, but got: {$invalidFieldConfig}"); } $map[$fieldDef->getName()] = $fieldDef; } return $map; } public function getArg(string $name): ?Argument { foreach ($this->args as $arg) { if ($arg->name === $name) { return $arg; } } return null; } public function getName(): string { return $this->name; } /** @return Type&OutputType */ public function getType(): Type { return $this->type ??= Schema::resolveType($this->config['type']); } public function isVisible(): bool { if (is_bool($this->visible)) { return $this->visible; } return $this->visible = ($this->visible)(); } public function isDeprecated(): bool { return (bool) $this->deprecationReason; } /** * @param Type&NamedType $parentType * * @throws InvariantViolation */ public function assertValid(Type $parentType): void { $error = Utils::isValidNameError($this->name); if ($error !== null) { throw new InvariantViolation("{$parentType->name}.{$this->name}: {$error->getMessage()}"); } $type = Type::getNamedType($this->getType()); if (! $type instanceof OutputType) { $safeType = Utils::printSafe($this->type); throw new InvariantViolation("{$parentType->name}.{$this->name} field type must be Output Type but got: {$safeType}."); } // @phpstan-ignore-next-line unnecessary according to types, but can happen during runtime if ($this->resolveFn !== null && ! is_callable($this->resolveFn)) { $safeResolveFn = Utils::printSafe($this->resolveFn); throw new InvariantViolation("{$parentType->name}.{$this->name} field resolver must be a function if provided, but got: {$safeResolveFn}."); } foreach ($this->args as $fieldArgument) { $fieldArgument->assertValid($this, $type); } } } graphql/lib/Type/Definition/Description.php000064400000000327151666572100014770 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; #[\Attribute(\Attribute::TARGET_ALL)] class Description { public function __construct( public string $description, ) {} } graphql/lib/Type/Definition/CompositeType.php000064400000000317151666572100015310 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; /* export type GraphQLCompositeType = GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType; */ interface CompositeType {} graphql/lib/Type/Definition/EnumType.php000064400000017671151666572100014265 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\EnumValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumValueNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Utils\MixedStore; use YOOtheme\GraphQL\Utils\Utils; /** * @see EnumValueDefinitionNode * * @phpstan-type PartialEnumValueConfig array{ * name?: string, * value?: mixed, * deprecationReason?: string|null, * description?: string|null, * astNode?: EnumValueDefinitionNode|null * } * @phpstan-type EnumValues iterable<string, PartialEnumValueConfig>|iterable<string, mixed>|iterable<int, string> * @phpstan-type EnumTypeConfig array{ * name?: string|null, * description?: string|null, * values: EnumValues|callable(): EnumValues, * astNode?: EnumTypeDefinitionNode|null, * extensionASTNodes?: array<EnumTypeExtensionNode>|null * } */ class EnumType extends Type implements InputType, OutputType, LeafType, NullableType, NamedType { use NamedTypeImplementation; public ?EnumTypeDefinitionNode $astNode; /** @var array<EnumTypeExtensionNode> */ public array $extensionASTNodes; /** @phpstan-var EnumTypeConfig */ public array $config; /** * Lazily initialized. * * @var array<int, EnumValueDefinition> */ private array $values; /** * Lazily initialized. * * @var MixedStore<EnumValueDefinition> */ private MixedStore $valueLookup; /** @var array<string, EnumValueDefinition> */ private array $nameLookup; /** * @phpstan-param EnumTypeConfig $config * * @throws InvariantViolation */ public function __construct(array $config) { $this->name = $config['name'] ?? $this->inferName(); $this->description = $config['description'] ?? null; $this->astNode = $config['astNode'] ?? null; $this->extensionASTNodes = $config['extensionASTNodes'] ?? []; $this->config = $config; } /** @throws InvariantViolation */ public function getValue(string $name): ?EnumValueDefinition { if (! isset($this->nameLookup)) { $this->initializeNameLookup(); } return $this->nameLookup[$name] ?? null; } /** * @throws InvariantViolation * * @return array<int, EnumValueDefinition> */ public function getValues(): array { if (! isset($this->values)) { $this->values = []; $values = $this->config['values']; if (is_callable($values)) { $values = $values(); } // We are just assuming the config option is set correctly here, validation happens in assertValid() foreach ($values as $name => $value) { if (is_string($name)) { if (is_array($value)) { $value += ['name' => $name, 'value' => $name]; } else { $value = ['name' => $name, 'value' => $value]; } } elseif (is_string($value)) { $value = ['name' => $value, 'value' => $value]; } else { throw new InvariantViolation("{$this->name} values must be an array with value names as keys or values."); } // @phpstan-ignore-next-line assume the config matches $this->values[] = new EnumValueDefinition($value); } } return $this->values; } /** * @throws \InvalidArgumentException * @throws InvariantViolation * @throws SerializationError */ public function serialize($value) { $lookup = $this->getValueLookup(); if (isset($lookup[$value])) { return $lookup[$value]->name; } if ($value instanceof \BackedEnum) { return $value->name; } if ($value instanceof \UnitEnum) { return $value->name; } $safeValue = Utils::printSafe($value); throw new SerializationError("Cannot serialize value as enum: {$safeValue}"); } /** * @throws \InvalidArgumentException * @throws InvariantViolation * * @return MixedStore<EnumValueDefinition> */ private function getValueLookup(): MixedStore { if (! isset($this->valueLookup)) { $this->valueLookup = new MixedStore(); foreach ($this->getValues() as $value) { $this->valueLookup->offsetSet($value->value, $value); } } return $this->valueLookup; } /** * @throws Error * @throws InvariantViolation */ public function parseValue($value) { if (! is_string($value)) { $safeValue = Utils::printSafeJson($value); throw new Error("Enum \"{$this->name}\" cannot represent non-string value: {$safeValue}.{$this->didYouMean($safeValue)}"); } if (! isset($this->nameLookup)) { $this->initializeNameLookup(); } if (! isset($this->nameLookup[$value])) { throw new Error("Value \"{$value}\" does not exist in \"{$this->name}\" enum.{$this->didYouMean($value)}"); } return $this->nameLookup[$value]->value; } /** * @throws \JsonException * @throws Error * @throws InvariantViolation */ public function parseLiteral(Node $valueNode, ?array $variables = null) { if (! $valueNode instanceof EnumValueNode) { $valueStr = Printer::doPrint($valueNode); throw new Error("Enum \"{$this->name}\" cannot represent non-enum value: {$valueStr}.{$this->didYouMean($valueStr)}", $valueNode); } $name = $valueNode->value; if (! isset($this->nameLookup)) { $this->initializeNameLookup(); } if (isset($this->nameLookup[$name])) { return $this->nameLookup[$name]->value; } $valueStr = Printer::doPrint($valueNode); throw new Error("Value \"{$valueStr}\" does not exist in \"{$this->name}\" enum.{$this->didYouMean($valueStr)}", $valueNode); } /** * @throws Error * @throws InvariantViolation */ public function assertValid(): void { Utils::assertValidName($this->name); $values = $this->config['values'] ?? null; // @phpstan-ignore nullCoalesce.initializedProperty (unnecessary according to types, but can happen during runtime) if (! is_iterable($values) && ! is_callable($values)) { $notIterable = Utils::printSafe($values); throw new InvariantViolation("{$this->name} values must be an iterable or callable, got: {$notIterable}"); } $this->getValues(); } /** @throws InvariantViolation */ private function initializeNameLookup(): void { $this->nameLookup = []; foreach ($this->getValues() as $value) { $this->nameLookup[$value->name] = $value; } } /** @throws InvariantViolation */ protected function didYouMean(string $unknownValue): ?string { $suggestions = Utils::suggestionList( $unknownValue, array_map( static fn (EnumValueDefinition $value): string => $value->name, $this->getValues() ) ); return $suggestions === [] ? null : ' Did you mean the enum value ' . Utils::quotedOrList($suggestions) . '?'; } public function astNode(): ?EnumTypeDefinitionNode { return $this->astNode; } /** @return array<EnumTypeExtensionNode> */ public function extensionASTNodes(): array { return $this->extensionASTNodes; } } graphql/lib/Type/Definition/NamedType.php000064400000001777151666572100014405 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\TypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeExtensionNode; /** * export type NamedType = * | ScalarType * | ObjectType * | InterfaceType * | UnionType * | EnumType * | InputObjectType;. * * @property string $name * @property string|null $description * @property (Node&TypeDefinitionNode)|null $astNode * @property array<Node&TypeExtensionNode> $extensionASTNodes */ interface NamedType { /** @throws Error */ public function assertValid(): void; /** Is this type a built-in type? */ public function isBuiltInType(): bool; public function name(): string; public function description(): ?string; /** @return (Node&TypeDefinitionNode)|null */ public function astNode(): ?Node; /** @return array<Node&TypeExtensionNode> */ public function extensionASTNodes(): array; } graphql/lib/Type/Definition/QueryPlan.php000064400000023427151666572100014433 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Values; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\FragmentSpreadNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Type\Schema; /** * @phpstan-type QueryPlanOptions array{ * groupImplementorFields?: bool, * } */ class QueryPlan { /** * Map from type names to a list of fields referenced of that type. * * @var array<string, array<string, true>> */ private array $typeToFields = []; private Schema $schema; /** @var array<string, mixed> */ private array $queryPlan = []; /** @var array<string, mixed> */ private array $variableValues; /** @var array<string, FragmentDefinitionNode> */ private array $fragments; private bool $groupImplementorFields; /** * @param iterable<FieldNode> $fieldNodes * @param array<string, mixed> $variableValues * @param array<string, FragmentDefinitionNode> $fragments * @param QueryPlanOptions $options * * @throws \Exception * @throws Error * @throws InvariantViolation */ public function __construct(ObjectType $parentType, Schema $schema, iterable $fieldNodes, array $variableValues, array $fragments, array $options = []) { $this->schema = $schema; $this->variableValues = $variableValues; $this->fragments = $fragments; $this->groupImplementorFields = $options['groupImplementorFields'] ?? false; $this->analyzeQueryPlan($parentType, $fieldNodes); } /** @return array<string, mixed> */ public function queryPlan(): array { return $this->queryPlan; } /** @return array<int, string> */ public function getReferencedTypes(): array { return array_keys($this->typeToFields); } public function hasType(string $type): bool { return isset($this->typeToFields[$type]); } /** * TODO return array<string, true>. * * @return array<int, string> */ public function getReferencedFields(): array { $allFields = []; foreach ($this->typeToFields as $fields) { foreach ($fields as $field => $_) { $allFields[$field] = true; } } return array_keys($allFields); } public function hasField(string $field): bool { foreach ($this->typeToFields as $fields) { if (array_key_exists($field, $fields)) { return true; } } return false; } /** * TODO return array<string, true>. * * @return array<int, string> */ public function subFields(string $typename): array { return array_keys($this->typeToFields[$typename] ?? []); } /** * @param iterable<FieldNode> $fieldNodes * * @throws \Exception * @throws Error * @throws InvariantViolation */ private function analyzeQueryPlan(ObjectType $parentType, iterable $fieldNodes): void { $queryPlan = []; $implementors = []; foreach ($fieldNodes as $fieldNode) { if ($fieldNode->selectionSet === null) { continue; } $type = Type::getNamedType( $parentType->getField($fieldNode->name->value)->getType() ); $subfields = $this->analyzeSelectionSet($fieldNode->selectionSet, $type, $implementors); $queryPlan = $this->arrayMergeDeep($queryPlan, $subfields); } if ($this->groupImplementorFields) { $this->queryPlan = ['fields' => $queryPlan]; if ($implementors !== []) { $this->queryPlan['implementors'] = $implementors; } } else { $this->queryPlan = $queryPlan; } } /** * @param Type&NamedType $parentType * @param array<string, mixed> $implementors * * @throws \Exception * @throws Error * @throws InvariantViolation * * @return array<mixed> */ private function analyzeSelectionSet(SelectionSetNode $selectionSet, Type $parentType, array &$implementors): array { $fields = []; $implementors = []; foreach ($selectionSet->selections as $selection) { if ($selection instanceof FieldNode) { $fieldName = $selection->name->value; if ($fieldName === Introspection::TYPE_NAME_FIELD_NAME) { continue; } assert($parentType instanceof HasFieldsType, 'ensured by query validation'); $type = $parentType->getField($fieldName); $selectionType = $type->getType(); $subImplementors = []; $nestedSelectionSet = $selection->selectionSet; $subfields = $nestedSelectionSet === null ? [] : $this->analyzeSubFields($selectionType, $nestedSelectionSet, $subImplementors); $fields[$fieldName] = [ 'type' => $selectionType, 'fields' => $subfields, 'args' => Values::getArgumentValues($type, $selection, $this->variableValues), ]; if ($this->groupImplementorFields && $subImplementors !== []) { $fields[$fieldName]['implementors'] = $subImplementors; } } elseif ($selection instanceof FragmentSpreadNode) { $spreadName = $selection->name->value; $fragment = $this->fragments[$spreadName] ?? null; if ($fragment === null) { continue; } $type = $this->schema->getType($fragment->typeCondition->name->value); assert($type instanceof Type, 'ensured by query validation'); $subfields = $this->analyzeSubFields($type, $fragment->selectionSet); $fields = $this->mergeFields($parentType, $type, $fields, $subfields, $implementors); } elseif ($selection instanceof InlineFragmentNode) { $typeCondition = $selection->typeCondition; $type = $typeCondition === null ? $parentType : $this->schema->getType($typeCondition->name->value); assert($type instanceof Type, 'ensured by query validation'); $subfields = $this->analyzeSubFields($type, $selection->selectionSet); $fields = $this->mergeFields($parentType, $type, $fields, $subfields, $implementors); } } $parentTypeName = $parentType->name(); // TODO evaluate if this line is really necessary. // It causes abstract types to appear in getReferencedTypes() even if they do not have any fields directly referencing them. $this->typeToFields[$parentTypeName] ??= []; foreach ($fields as $fieldName => $_) { $this->typeToFields[$parentTypeName][$fieldName] = true; } return $fields; } /** * @param array<string, mixed> $implementors * * @throws \Exception * @throws Error * * @return array<mixed> */ private function analyzeSubFields(Type $type, SelectionSetNode $selectionSet, array &$implementors = []): array { $type = Type::getNamedType($type); return $type instanceof ObjectType || $type instanceof AbstractType ? $this->analyzeSelectionSet($selectionSet, $type, $implementors) : []; } /** * @param Type&NamedType $parentType * @param Type&NamedType $type * @param array<mixed> $fields * @param array<mixed> $subfields * @param array<string, mixed> $implementors * * @return array<mixed> */ private function mergeFields(Type $parentType, Type $type, array $fields, array $subfields, array &$implementors): array { if ($this->groupImplementorFields && $parentType instanceof AbstractType && ! $type instanceof AbstractType) { $name = $type->name; assert(is_string($name)); $implementors[$name] = [ 'type' => $type, 'fields' => $this->arrayMergeDeep( $implementors[$name]['fields'] ?? [], array_diff_key($subfields, $fields) ), ]; $fields = $this->arrayMergeDeep( $fields, array_intersect_key($subfields, $fields) ); } else { $fields = $this->arrayMergeDeep($subfields, $fields); } return $fields; } /** * Merges nested arrays, but handles non array values differently from array_merge_recursive. * While array_merge_recursive tries to merge non-array values, in this implementation they will be overwritten. * * @see https://stackoverflow.com/a/25712428 * * @param array<mixed> $array1 * @param array<mixed> $array2 * * @return array<mixed> */ private function arrayMergeDeep(array $array1, array $array2): array { foreach ($array2 as $key => &$value) { if (is_numeric($key)) { if (! in_array($value, $array1, true)) { $array1[] = $value; } } elseif (is_array($value) && isset($array1[$key]) && is_array($array1[$key])) { $array1[$key] = $this->arrayMergeDeep($array1[$key], $value); } else { $array1[$key] = $value; } } return $array1; } } graphql/lib/Type/Definition/NamedTypeImplementation.php000064400000002604151666572100017301 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; /** @see NamedType */ trait NamedTypeImplementation { public string $name; public ?string $description; public function toString(): string { return $this->name; } /** @throws InvariantViolation */ protected function inferName(): string { if (isset($this->name)) { // @phpstan-ignore-line property might be uninitialized return $this->name; } // If class is extended - infer name from className // QueryType -> Type // SomeOtherType -> SomeOther $reflection = new \ReflectionClass($this); $name = $reflection->getShortName(); if ($reflection->getNamespaceName() !== __NAMESPACE__) { $withoutPrefixType = preg_replace('~Type$~', '', $name); assert(is_string($withoutPrefixType), 'regex is statically known to be correct'); return $withoutPrefixType; } throw new InvariantViolation('Must provide name for Type.'); } public function isBuiltInType(): bool { return in_array($this->name, Type::BUILT_IN_TYPE_NAMES, true); } public function name(): string { return $this->name; } public function description(): ?string { return $this->description; } } graphql/lib/Type/Definition/BooleanType.php000064400000002671151666572100014732 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Language\AST\BooleanValueNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Utils\Utils; class BooleanType extends ScalarType { public string $name = Type::BOOLEAN; public ?string $description = 'The `Boolean` scalar type represents `true` or `false`.'; /** * Serialize the given value to a Boolean. * * The GraphQL spec leaves this up to the implementations, so we just do what * PHP does natively to make this intuitive for developers. */ public function serialize($value): bool { return (bool) $value; } /** @throws Error */ public function parseValue($value): bool { if (is_bool($value)) { return $value; } $notBoolean = Utils::printSafeJson($value); throw new Error("Boolean cannot represent a non boolean value: {$notBoolean}"); } /** * @throws \JsonException * @throws Error */ public function parseLiteral(Node $valueNode, ?array $variables = null): bool { if ($valueNode instanceof BooleanValueNode) { return $valueNode->value; } $notBoolean = Printer::doPrint($valueNode); throw new Error("Boolean cannot represent a non boolean value: {$notBoolean}", $valueNode); } } graphql/lib/Type/Definition/ScalarType.php000064400000004024151666572100014552 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\ScalarTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeExtensionNode; use YOOtheme\GraphQL\Utils\Utils; /** * Scalar Type Definition. * * The leaf values of any request and input values to arguments are * Scalars (or Enums) and are defined with a name and a series of coercion * functions used to ensure validity. * * Example: * * class OddType extends ScalarType * { * public $name = 'Odd', * public function serialize($value) * { * return $value % 2 === 1 ? $value : null; * } * } * * @phpstan-type ScalarConfig array{ * name?: string|null, * description?: string|null, * astNode?: ScalarTypeDefinitionNode|null, * extensionASTNodes?: array<ScalarTypeExtensionNode>|null * } */ abstract class ScalarType extends Type implements OutputType, InputType, LeafType, NullableType, NamedType { use NamedTypeImplementation; public ?ScalarTypeDefinitionNode $astNode; /** @var array<ScalarTypeExtensionNode> */ public array $extensionASTNodes; /** @phpstan-var ScalarConfig */ public array $config; /** * @phpstan-param ScalarConfig $config * * @throws InvariantViolation */ public function __construct(array $config = []) { $this->name = $config['name'] ?? $this->inferName(); $this->description = $config['description'] ?? $this->description ?? null; $this->astNode = $config['astNode'] ?? null; $this->extensionASTNodes = $config['extensionASTNodes'] ?? []; $this->config = $config; } public function assertValid(): void { Utils::assertValidName($this->name); } public function astNode(): ?ScalarTypeDefinitionNode { return $this->astNode; } /** @return array<ScalarTypeExtensionNode> */ public function extensionASTNodes(): array { return $this->extensionASTNodes; } } graphql/lib/Type/Definition/OutputType.php000064400000000356151666572100014651 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; /* GraphQLScalarType | GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType | GraphQLEnumType | GraphQLList | GraphQLNonNull; */ interface OutputType {} graphql/lib/Type/Definition/InputObjectField.php000064400000006551151666572100015704 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-type ArgumentType (Type&InputType)|callable(): (Type&InputType) * @phpstan-type InputObjectFieldConfig array{ * name: string, * type: ArgumentType, * defaultValue?: mixed, * description?: string|null, * deprecationReason?: string|null, * astNode?: InputValueDefinitionNode|null * } * @phpstan-type UnnamedInputObjectFieldConfig array{ * name?: string, * type: ArgumentType, * defaultValue?: mixed, * description?: string|null, * deprecationReason?: string|null, * astNode?: InputValueDefinitionNode|null * } */ class InputObjectField { public string $name; /** @var mixed */ public $defaultValue; public ?string $description; public ?string $deprecationReason; /** @var Type&InputType */ private Type $type; public ?InputValueDefinitionNode $astNode; /** @phpstan-var InputObjectFieldConfig */ public array $config; /** @phpstan-param InputObjectFieldConfig $config */ public function __construct(array $config) { $this->name = $config['name']; $this->defaultValue = $config['defaultValue'] ?? null; $this->description = $config['description'] ?? null; $this->deprecationReason = $config['deprecationReason'] ?? null; // Do nothing for type, it is lazy loaded in getType() $this->astNode = $config['astNode'] ?? null; $this->config = $config; } /** @return Type&InputType */ public function getType(): Type { if (! isset($this->type)) { $this->type = Schema::resolveType($this->config['type']); } return $this->type; } public function defaultValueExists(): bool { return array_key_exists('defaultValue', $this->config); } public function isRequired(): bool { return $this->getType() instanceof NonNull && ! $this->defaultValueExists(); } public function isDeprecated(): bool { return (bool) $this->deprecationReason; } /** * @param Type&NamedType $parentType * * @throws InvariantViolation */ public function assertValid(Type $parentType): void { $error = Utils::isValidNameError($this->name); if ($error !== null) { throw new InvariantViolation("{$parentType->name}.{$this->name}: {$error->getMessage()}"); } $type = Type::getNamedType($this->getType()); if (! $type instanceof InputType) { $notInputType = Utils::printSafe($this->type); throw new InvariantViolation("{$parentType->name}.{$this->name} field type must be Input Type but got: {$notInputType}"); } // @phpstan-ignore-next-line should not happen if used properly if (array_key_exists('resolve', $this->config)) { throw new InvariantViolation("{$parentType->name}.{$this->name} field has a resolve property, but Input Types cannot define resolvers."); } if ($this->isRequired() && $this->isDeprecated()) { throw new InvariantViolation("Required input field {$parentType->name}.{$this->name} cannot be deprecated."); } } } graphql/lib/Type/Definition/IntType.php000064400000005641151666572100014105 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\IntValueNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Utils\Utils; class IntType extends ScalarType { // As per the GraphQL Spec, Integers are only treated as valid when a valid // 32-bit signed integer, providing the broadest support across platforms. // // n.b. JavaScript's integers are safe between -(2^53 - 1) and 2^53 - 1 because // they are internally represented as IEEE 754 doubles. public const MAX_INT = 2147483647; public const MIN_INT = -2147483648; public string $name = Type::INT; public ?string $description = 'The `Int` scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1. '; /** @throws SerializationError */ public function serialize($value): int { // Fast path for 90+% of cases: if (is_int($value) && $value <= self::MAX_INT && $value >= self::MIN_INT) { return $value; } $float = is_numeric($value) || is_bool($value) ? (float) $value : null; if ($float === null || floor($float) !== $float) { $notInt = Utils::printSafe($value); throw new SerializationError("Int cannot represent non-integer value: {$notInt}"); } if ($float > self::MAX_INT || $float < self::MIN_INT) { $outOfRangeInt = Utils::printSafe($value); throw new SerializationError("Int cannot represent non 32-bit signed integer value: {$outOfRangeInt}"); } return (int) $float; } /** @throws Error */ public function parseValue($value): int { $isInt = is_int($value) || (is_float($value) && floor($value) === $value); if (! $isInt) { $notInt = Utils::printSafeJson($value); throw new Error("Int cannot represent non-integer value: {$notInt}"); } if ($value > self::MAX_INT || $value < self::MIN_INT) { $outOfRangeInt = Utils::printSafeJson($value); throw new Error("Int cannot represent non 32-bit signed integer value: {$outOfRangeInt}"); } return (int) $value; } /** * @throws \JsonException * @throws Error */ public function parseLiteral(Node $valueNode, ?array $variables = null): int { if ($valueNode instanceof IntValueNode) { $val = (int) $valueNode->value; if ($valueNode->value === (string) $val && $val >= self::MIN_INT && $val <= self::MAX_INT) { return $val; } } $notInt = Printer::doPrint($valueNode); throw new Error("Int cannot represent non-integer value: {$notInt}", $valueNode); } } graphql/lib/Type/Definition/Directive.php000064400000012716151666572100014430 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\DirectiveLocation; /** * @phpstan-import-type ArgumentListConfig from Argument * * @phpstan-type DirectiveConfig array{ * name: string, * description?: string|null, * args?: ArgumentListConfig|null, * locations: array<string>, * isRepeatable?: bool|null, * astNode?: DirectiveDefinitionNode|null * } */ class Directive { public const DEFAULT_DEPRECATION_REASON = 'No longer supported'; public const INCLUDE_NAME = 'include'; public const IF_ARGUMENT_NAME = 'if'; public const SKIP_NAME = 'skip'; public const DEPRECATED_NAME = 'deprecated'; public const REASON_ARGUMENT_NAME = 'reason'; public const ONE_OF_NAME = 'oneOf'; /** * Lazily initialized. * * @var array<string, Directive>|null */ protected static ?array $internalDirectives = null; public string $name; public ?string $description; /** @var array<int, Argument> */ public array $args; public bool $isRepeatable; /** @var array<string> */ public array $locations; public ?DirectiveDefinitionNode $astNode; /** * @var array<string, mixed> * * @phpstan-var DirectiveConfig */ public array $config; /** * @param array<string, mixed> $config * * @phpstan-param DirectiveConfig $config */ public function __construct(array $config) { $this->name = $config['name']; $this->description = $config['description'] ?? null; $this->args = isset($config['args']) ? Argument::listFromConfig($config['args']) : []; $this->isRepeatable = $config['isRepeatable'] ?? false; $this->locations = $config['locations']; $this->astNode = $config['astNode'] ?? null; $this->config = $config; } /** @return array<string, Directive> */ public static function getInternalDirectives(): array { return [ self::INCLUDE_NAME => self::includeDirective(), self::SKIP_NAME => self::skipDirective(), self::DEPRECATED_NAME => self::deprecatedDirective(), self::ONE_OF_NAME => self::oneOfDirective(), ]; } public static function includeDirective(): Directive { return self::$internalDirectives[self::INCLUDE_NAME] ??= new self([ 'name' => self::INCLUDE_NAME, 'description' => 'Directs the executor to include this field or fragment only when the `if` argument is true.', 'locations' => [ DirectiveLocation::FIELD, DirectiveLocation::FRAGMENT_SPREAD, DirectiveLocation::INLINE_FRAGMENT, ], 'args' => [ self::IF_ARGUMENT_NAME => [ 'type' => Type::nonNull(Type::boolean()), 'description' => 'Included when true.', ], ], ]); } public static function skipDirective(): Directive { return self::$internalDirectives[self::SKIP_NAME] ??= new self([ 'name' => self::SKIP_NAME, 'description' => 'Directs the executor to skip this field or fragment when the `if` argument is true.', 'locations' => [ DirectiveLocation::FIELD, DirectiveLocation::FRAGMENT_SPREAD, DirectiveLocation::INLINE_FRAGMENT, ], 'args' => [ self::IF_ARGUMENT_NAME => [ 'type' => Type::nonNull(Type::boolean()), 'description' => 'Skipped when true.', ], ], ]); } public static function deprecatedDirective(): Directive { return self::$internalDirectives[self::DEPRECATED_NAME] ??= new self([ 'name' => self::DEPRECATED_NAME, 'description' => 'Marks an element of a GraphQL schema as no longer supported.', 'locations' => [ DirectiveLocation::FIELD_DEFINITION, DirectiveLocation::ENUM_VALUE, DirectiveLocation::ARGUMENT_DEFINITION, DirectiveLocation::INPUT_FIELD_DEFINITION, ], 'args' => [ self::REASON_ARGUMENT_NAME => [ 'type' => Type::string(), 'description' => 'Explains why this element was deprecated, usually also including a suggestion for how to access supported similar data. Formatted using the Markdown syntax, as specified by [CommonMark](https://commonmark.org/).', 'defaultValue' => self::DEFAULT_DEPRECATION_REASON, ], ], ]); } public static function oneOfDirective(): Directive { return self::$internalDirectives[self::ONE_OF_NAME] ??= new self([ 'name' => self::ONE_OF_NAME, 'description' => 'Indicates that an Input Object is a OneOf Input Object (and thus requires exactly one of its fields be provided).', 'locations' => [ DirectiveLocation::INPUT_OBJECT, ], 'args' => [], ]); } public static function isSpecifiedDirective(Directive $directive): bool { return array_key_exists($directive->name, self::getInternalDirectives()); } public static function resetCachedInstances(): void { self::$internalDirectives = null; } } graphql/lib/Type/Definition/HasFieldsType.php000064400000001540151666572100015207 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; interface HasFieldsType { /** @throws InvariantViolation */ public function getField(string $name): FieldDefinition; public function hasField(string $name): bool; public function findField(string $name): ?FieldDefinition; /** * @throws InvariantViolation * * @return array<string, FieldDefinition> */ public function getFields(): array; /** * @throws InvariantViolation * * @return array<string, FieldDefinition> */ public function getVisibleFields(): array; /** * Get all field names, including only visible fields. * * @throws InvariantViolation * * @return array<int, string> */ public function getFieldNames(): array; } graphql/lib/Type/Definition/EnumValueDefinition.php000064400000002175151666572100016422 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Language\AST\EnumValueDefinitionNode; /** * @phpstan-type EnumValueConfig array{ * name: string, * value?: mixed, * deprecationReason?: string|null, * description?: string|null, * astNode?: EnumValueDefinitionNode|null * } */ class EnumValueDefinition { public string $name; /** @var mixed */ public $value; public ?string $deprecationReason; public ?string $description; public ?EnumValueDefinitionNode $astNode; /** @phpstan-var EnumValueConfig */ public array $config; /** @phpstan-param EnumValueConfig $config */ public function __construct(array $config) { $this->name = $config['name']; $this->value = $config['value'] ?? null; $this->deprecationReason = $config['deprecationReason'] ?? null; $this->description = $config['description'] ?? null; $this->astNode = $config['astNode'] ?? null; $this->config = $config; } public function isDeprecated(): bool { return (bool) $this->deprecationReason; } } graphql/lib/Type/Definition/InterfaceType.php000064400000006426151666572100015255 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-import-type ResolveType from AbstractType * @phpstan-import-type FieldsConfig from FieldDefinition * * @phpstan-type InterfaceTypeReference InterfaceType|callable(): InterfaceType * @phpstan-type InterfaceConfig array{ * name?: string|null, * description?: string|null, * fields: FieldsConfig, * interfaces?: iterable<InterfaceTypeReference>|callable(): iterable<InterfaceTypeReference>, * resolveType?: ResolveType|null, * astNode?: InterfaceTypeDefinitionNode|null, * extensionASTNodes?: array<InterfaceTypeExtensionNode>|null * } */ class InterfaceType extends Type implements AbstractType, OutputType, CompositeType, NullableType, HasFieldsType, NamedType, ImplementingType { use HasFieldsTypeImplementation; use NamedTypeImplementation; use ImplementingTypeImplementation; public ?InterfaceTypeDefinitionNode $astNode; /** @var array<InterfaceTypeExtensionNode> */ public array $extensionASTNodes; /** @phpstan-var InterfaceConfig */ public array $config; /** * @phpstan-param InterfaceConfig $config * * @throws InvariantViolation */ public function __construct(array $config) { $this->name = $config['name'] ?? $this->inferName(); $this->description = $config['description'] ?? null; $this->astNode = $config['astNode'] ?? null; $this->extensionASTNodes = $config['extensionASTNodes'] ?? []; $this->config = $config; } /** * @param mixed $type * * @throws InvariantViolation */ public static function assertInterfaceType($type): self { if (! ($type instanceof self)) { $notInterfaceType = Utils::printSafe($type); throw new InvariantViolation("Expected {$notInterfaceType} to be a GraphQL Interface type."); } return $type; } public function resolveType($objectValue, $context, ResolveInfo $info) { if (isset($this->config['resolveType'])) { return ($this->config['resolveType'])($objectValue, $context, $info); } return null; } /** * @throws Error * @throws InvariantViolation */ public function assertValid(): void { Utils::assertValidName($this->name); $resolveType = $this->config['resolveType'] ?? null; // @phpstan-ignore-next-line unnecessary according to types, but can happen during runtime if ($resolveType !== null && ! is_callable($resolveType)) { $notCallable = Utils::printSafe($resolveType); throw new InvariantViolation("{$this->name} must provide \"resolveType\" as null or a callable, but got: {$notCallable}."); } $this->assertValidInterfaces(); } public function astNode(): ?InterfaceTypeDefinitionNode { return $this->astNode; } /** @return array<InterfaceTypeExtensionNode> */ public function extensionASTNodes(): array { return $this->extensionASTNodes; } } graphql/lib/Type/Definition/InputObjectType.php000064400000017472151666572100015606 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\InputObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-import-type UnnamedInputObjectFieldConfig from InputObjectField * * @phpstan-type EagerFieldConfig InputObjectField|(Type&InputType)|UnnamedInputObjectFieldConfig * @phpstan-type LazyFieldConfig callable(): EagerFieldConfig * @phpstan-type FieldConfig EagerFieldConfig|LazyFieldConfig * @phpstan-type ParseValueFn callable(array<string, mixed>): mixed * @phpstan-type InputObjectConfig array{ * name?: string|null, * description?: string|null, * isOneOf?: bool|null, * fields: iterable<FieldConfig>|callable(): iterable<FieldConfig>, * parseValue?: ParseValueFn|null, * astNode?: InputObjectTypeDefinitionNode|null, * extensionASTNodes?: array<InputObjectTypeExtensionNode>|null * } */ class InputObjectType extends Type implements InputType, NullableType, NamedType { use NamedTypeImplementation; public bool $isOneOf; /** * Lazily initialized. * * @var array<string, InputObjectField> */ private array $fields; /** @var ParseValueFn|null */ private $parseValue; public ?InputObjectTypeDefinitionNode $astNode; /** @var array<InputObjectTypeExtensionNode> */ public array $extensionASTNodes; /** @phpstan-var InputObjectConfig */ public array $config; /** * @phpstan-param InputObjectConfig $config * * @throws InvariantViolation * @throws InvariantViolation */ public function __construct(array $config) { $this->name = $config['name'] ?? $this->inferName(); $this->description = $config['description'] ?? null; $this->isOneOf = $config['isOneOf'] ?? false; // $this->fields is initialized lazily $this->parseValue = $config['parseValue'] ?? null; $this->astNode = $config['astNode'] ?? null; $this->extensionASTNodes = $config['extensionASTNodes'] ?? []; $this->config = $config; } /** @throws InvariantViolation */ public function getField(string $name): InputObjectField { $field = $this->findField($name); if ($field === null) { throw new InvariantViolation("Field \"{$name}\" is not defined for type \"{$this->name}\""); } return $field; } /** @throws InvariantViolation */ public function findField(string $name): ?InputObjectField { if (! isset($this->fields)) { $this->initializeFields(); } return $this->fields[$name] ?? null; } /** @throws InvariantViolation */ public function hasField(string $name): bool { if (! isset($this->fields)) { $this->initializeFields(); } return isset($this->fields[$name]); } /** Returns true if this is a oneOf input object type. */ public function isOneOf(): bool { return $this->isOneOf; } /** * @throws InvariantViolation * * @return array<string, InputObjectField> */ public function getFields(): array { if (! isset($this->fields)) { $this->initializeFields(); } return $this->fields; } /** @throws InvariantViolation */ protected function initializeFields(): void { $fields = $this->config['fields']; if (is_callable($fields)) { $fields = $fields(); } $this->fields = []; foreach ($fields as $nameOrIndex => $field) { $this->initializeField($nameOrIndex, $field); } } /** * @param string|int $nameOrIndex * * @phpstan-param FieldConfig $field * * @throws InvariantViolation */ protected function initializeField($nameOrIndex, $field): void { if (is_callable($field)) { $field = $field(); } assert($field instanceof Type || is_array($field) || $field instanceof InputObjectField); if ($field instanceof Type) { $field = ['type' => $field]; } assert(is_array($field) || $field instanceof InputObjectField); // @phpstan-ignore-line TODO remove when using actual union types if (is_array($field)) { $field['name'] ??= $nameOrIndex; if (! is_string($field['name'])) { throw new InvariantViolation("{$this->name} fields must be an associative array with field names as keys, an array of arrays with a name attribute, or a callable which returns one of those."); } $field = new InputObjectField($field); // @phpstan-ignore-line array type is wrongly inferred } assert($field instanceof InputObjectField); // @phpstan-ignore-line TODO remove when using actual union types $this->fields[$field->name] = $field; } /** * Parses an externally provided value (query variable) to use as an input. * * Should throw an exception with a client-friendly message on invalid values, @see ClientAware. * * @param array<string, mixed> $value * * @return mixed */ public function parseValue(array $value) { if (isset($this->parseValue)) { return ($this->parseValue)($value); } return $value; } /** * Validates type config and throws if one of the type options is invalid. * Note: this method is shallow, it won't validate object fields and their arguments. * * @throws Error * @throws InvariantViolation */ public function assertValid(): void { Utils::assertValidName($this->name); $fields = $this->config['fields'] ?? null; // @phpstan-ignore nullCoalesce.initializedProperty (unnecessary according to types, but can happen during runtime) if (is_callable($fields)) { $fields = $fields(); } if (! is_iterable($fields)) { $invalidFields = Utils::printSafe($fields); throw new InvariantViolation("{$this->name} fields must be an iterable or a callable which returns an iterable, got: {$invalidFields}."); } $resolvedFields = $this->getFields(); foreach ($resolvedFields as $field) { $field->assertValid($this); } // Additional validation for oneOf input objects if ($this->isOneOf()) { $this->validateOneOfConstraints($resolvedFields); } } /** * Validates that oneOf input object constraints are met. * * @param array<string, InputObjectField> $fields * * @throws InvariantViolation */ private function validateOneOfConstraints(array $fields): void { if (count($fields) === 0) { throw new InvariantViolation("OneOf input object type {$this->name} must define one or more fields."); } foreach ($fields as $fieldName => $field) { $fieldType = $field->getType(); // OneOf fields must be nullable (not wrapped in NonNull) if ($fieldType instanceof NonNull) { throw new InvariantViolation("OneOf input object type {$this->name} field {$fieldName} must be nullable."); } // OneOf fields cannot have default values if ($field->defaultValueExists()) { throw new InvariantViolation("OneOf input object type {$this->name} field {$fieldName} cannot have a default value."); } } } public function astNode(): ?InputObjectTypeDefinitionNode { return $this->astNode; } /** @return array<InputObjectTypeExtensionNode> */ public function extensionASTNodes(): array { return $this->extensionASTNodes; } } graphql/lib/Type/Definition/AbstractType.php000064400000001425151666572100015112 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Deferred; /** * @phpstan-type ResolveTypeReturn ObjectType|string|callable(): (ObjectType|string|null)|Deferred|null * @phpstan-type ResolveType callable(mixed $objectValue, mixed $context, ResolveInfo $resolveInfo): ResolveTypeReturn */ interface AbstractType { /** * Resolves the concrete ObjectType for the given value. * * @param mixed $objectValue The resolved value for the object type * @param mixed $context The context that was passed to GraphQL::execute() * * @return ObjectType|string|callable|Deferred|null * * @phpstan-return ResolveTypeReturn */ public function resolveType($objectValue, $context, ResolveInfo $info); } graphql/lib/Type/Definition/FloatType.php000064400000003635151666572100014421 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\FloatValueNode; use YOOtheme\GraphQL\Language\AST\IntValueNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Utils\Utils; class FloatType extends ScalarType { public string $name = Type::FLOAT; public ?string $description = 'The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](http://en.wikipedia.org/wiki/IEEE_floating_point). '; /** @throws SerializationError */ public function serialize($value): float { $float = is_numeric($value) || is_bool($value) ? (float) $value : null; if ($float === null || ! is_finite($float)) { $notFloat = Utils::printSafe($value); throw new SerializationError("Float cannot represent non numeric value: {$notFloat}"); } return $float; } /** @throws Error */ public function parseValue($value): float { $float = is_float($value) || is_int($value) ? (float) $value : null; if ($float === null || ! is_finite($float)) { $notFloat = Utils::printSafeJson($value); throw new Error("Float cannot represent non numeric value: {$notFloat}"); } return $float; } /** * @throws \JsonException * @throws Error */ public function parseLiteral(Node $valueNode, ?array $variables = null) { if ($valueNode instanceof FloatValueNode || $valueNode instanceof IntValueNode) { return (float) $valueNode->value; } $notFloat = Printer::doPrint($valueNode); throw new Error("Float cannot represent non numeric value: {$notFloat}", $valueNode); } } graphql/lib/Type/Definition/CustomScalarType.php000064400000010472151666572100015751 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\ScalarTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\ValueNode; use YOOtheme\GraphQL\Utils\AST; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-type InputCustomScalarConfig array{ * name?: string|null, * description?: string|null, * serialize?: callable(mixed): mixed, * parseValue: callable(mixed): mixed, * parseLiteral: callable(ValueNode&Node, array<string, mixed>|null): mixed, * astNode?: ScalarTypeDefinitionNode|null, * extensionASTNodes?: array<ScalarTypeExtensionNode>|null * } * @phpstan-type OutputCustomScalarConfig array{ * name?: string|null, * description?: string|null, * serialize: callable(mixed): mixed, * parseValue?: callable(mixed): mixed, * parseLiteral?: callable(ValueNode&Node, array<string, mixed>|null): mixed, * astNode?: ScalarTypeDefinitionNode|null, * extensionASTNodes?: array<ScalarTypeExtensionNode>|null * } * @phpstan-type CustomScalarConfig InputCustomScalarConfig|OutputCustomScalarConfig */ class CustomScalarType extends ScalarType { /** @phpstan-var CustomScalarConfig */ // @phpstan-ignore-next-line specialize type public array $config; /** * @param array<string, mixed> $config * * @phpstan-param CustomScalarConfig $config */ public function __construct(array $config) { parent::__construct($config); } public function serialize($value) { if (isset($this->config['serialize'])) { return $this->config['serialize']($value); } return $value; } public function parseValue($value) { if (isset($this->config['parseValue'])) { return $this->config['parseValue']($value); } return $value; } /** @throws \Exception */ public function parseLiteral(Node $valueNode, ?array $variables = null) { if (isset($this->config['parseLiteral'])) { return $this->config['parseLiteral']($valueNode, $variables); } return AST::valueFromASTUntyped($valueNode, $variables); } /** * @throws Error * @throws InvariantViolation */ public function assertValid(): void { parent::assertValid(); $serialize = $this->config['serialize'] ?? null; $parseValue = $this->config['parseValue'] ?? null; $parseLiteral = $this->config['parseLiteral'] ?? null; $hasSerialize = $serialize !== null; $hasParseValue = $parseValue !== null; $hasParseLiteral = $parseLiteral !== null; $hasParse = $hasParseValue && $hasParseLiteral; if ($hasParseValue !== $hasParseLiteral) { throw new InvariantViolation("{$this->name} must provide both \"parseValue\" and \"parseLiteral\" functions to work as an input type."); } if (! $hasSerialize && ! $hasParse) { throw new InvariantViolation("{$this->name} must provide \"parseValue\" and \"parseLiteral\" functions, \"serialize\" function, or both."); } // @phpstan-ignore-next-line unnecessary according to types, but can happen during runtime if ($hasSerialize && ! is_callable($serialize)) { $notCallable = Utils::printSafe($serialize); throw new InvariantViolation("{$this->name} must provide \"serialize\" as a callable if given, but got: {$notCallable}."); } // @phpstan-ignore-next-line unnecessary according to types, but can happen during runtime if ($hasParseValue && ! is_callable($parseValue)) { $notCallable = Utils::printSafe($parseValue); throw new InvariantViolation("{$this->name} must provide \"parseValue\" as a callable if given, but got: {$notCallable}."); } // @phpstan-ignore-next-line unnecessary according to types, but can happen during runtime if ($hasParseLiteral && ! is_callable($parseLiteral)) { $notCallable = Utils::printSafe($parseLiteral); throw new InvariantViolation("{$this->name} must provide \"parseLiteral\" as a callable if given, but got: {$notCallable}."); } } } graphql/lib/Type/Definition/UnmodifiedType.php000064400000000420151666572100015424 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; /* export type GraphQLUnmodifiedType = GraphQLScalarType | GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType | GraphQLEnumType | GraphQLInputObjectType; */ interface UnmodifiedType {} graphql/lib/Type/Definition/ImplementingType.php000064400000000565151666572100016003 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; /** * export type GraphQLImplementingType = * GraphQLObjectType | * GraphQLInterfaceType;. */ interface ImplementingType { public function implementsInterface(InterfaceType $interfaceType): bool; /** @return array<int, InterfaceType> */ public function getInterfaces(): array; } graphql/lib/Type/Definition/InputType.php000064400000000471151666572100014446 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; /** * export type InputType = * | ScalarType * | EnumType * | InputObjectType * | ListOfType<InputType> * | NonNull< * | ScalarType * | EnumType * | InputObjectType * | ListOfType<InputType>, * >;. */ interface InputType {} graphql/lib/Type/Definition/ListOfType.php000064400000002205151666572100014544 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Type\Schema; /** * @template-covariant OfType of Type */ class ListOfType extends Type implements WrappingType, OutputType, NullableType, InputType { /** * @var Type|callable * * @phpstan-var OfType|callable(): OfType */ private $wrappedType; /** * @param Type|callable $type * * @phpstan-param OfType|callable(): OfType $type */ public function __construct($type) { $this->wrappedType = $type; } public function toString(): string { return '[' . $this->getWrappedType()->toString() . ']'; } /** @phpstan-return OfType */ public function getWrappedType(): Type { return Schema::resolveType($this->wrappedType); } public function getInnermostType(): NamedType { $type = $this->getWrappedType(); while ($type instanceof WrappingType) { $type = $type->getWrappedType(); } assert($type instanceof NamedType, 'known because we unwrapped all the way down'); return $type; } } graphql/lib/Type/Definition/IDType.php000064400000004017151666572100013643 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\IntValueNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\StringValueNode; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Utils\Utils; class IDType extends ScalarType { public string $name = 'ID'; public ?string $description = 'The `ID` scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as `"4"`) or integer (such as `4`) input value will be accepted as an ID.'; /** @throws SerializationError */ public function serialize($value): string { $canCast = is_string($value) || is_int($value) || (is_object($value) && method_exists($value, '__toString')); if (! $canCast) { $notID = Utils::printSafe($value); throw new SerializationError("ID cannot represent a non-string and non-integer value: {$notID}"); } return (string) $value; } /** @throws Error */ public function parseValue($value): string { if (is_string($value) || is_int($value)) { return (string) $value; } $notID = Utils::printSafeJson($value); throw new Error("ID cannot represent a non-string and non-integer value: {$notID}"); } /** * @throws \JsonException * @throws Error */ public function parseLiteral(Node $valueNode, ?array $variables = null): string { if ($valueNode instanceof StringValueNode || $valueNode instanceof IntValueNode) { return $valueNode->value; } $notID = Printer::doPrint($valueNode); throw new Error("ID cannot represent a non-string and non-integer value: {$notID}", $valueNode); } } graphql/lib/Type/Definition/ImplementingTypeImplementation.php000064400000003704151666572100020707 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type\Definition; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Type\Schema; /** * @see ImplementingType */ trait ImplementingTypeImplementation { /** * Lazily initialized. * * @var array<int, InterfaceType> */ private array $interfaces; public function implementsInterface(InterfaceType $interfaceType): bool { if (! isset($this->interfaces)) { $this->initializeInterfaces(); } foreach ($this->interfaces as $interface) { if ($interfaceType->name === $interface->name) { return true; } } return false; } /** @return array<int, InterfaceType> */ public function getInterfaces(): array { if (! isset($this->interfaces)) { $this->initializeInterfaces(); } return $this->interfaces; } private function initializeInterfaces(): void { $this->interfaces = []; if (! isset($this->config['interfaces'])) { return; } $interfaces = $this->config['interfaces']; if (is_callable($interfaces)) { $interfaces = $interfaces(); } foreach ($interfaces as $interface) { $this->interfaces[] = Schema::resolveType($interface); } } /** @throws InvariantViolation */ protected function assertValidInterfaces(): void { if (! isset($this->config['interfaces'])) { return; } $interfaces = $this->config['interfaces']; if (is_callable($interfaces)) { $interfaces = $interfaces(); } // @phpstan-ignore-next-line should not happen if used correctly if (! is_iterable($interfaces)) { throw new InvariantViolation("{$this->name} interfaces must be an iterable or a callable which returns an iterable."); } } } graphql/lib/Type/TypeKind.php000064400000000601151666572100012137 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type; class TypeKind { public const SCALAR = 'SCALAR'; public const OBJECT = 'OBJECT'; public const INTERFACE = 'INTERFACE'; public const UNION = 'UNION'; public const ENUM = 'ENUM'; public const INPUT_OBJECT = 'INPUT_OBJECT'; public const LIST = 'LIST'; public const NON_NULL = 'NON_NULL'; } graphql/lib/Type/SchemaValidationContext.php000064400000077202151666572100015203 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\FieldDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\ListTypeNode; use YOOtheme\GraphQL\Language\AST\NamedTypeNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\NonNullTypeNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Language\AST\TypeNode; use YOOtheme\GraphQL\Language\AST\UnionTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeExtensionNode; use YOOtheme\GraphQL\Language\DirectiveLocation; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\EnumValueDefinition; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\ImplementingType; use YOOtheme\GraphQL\Type\Definition\InputObjectField; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Type\Validation\InputObjectCircularRefs; use YOOtheme\GraphQL\Utils\TypeComparators; use YOOtheme\GraphQL\Utils\Utils; class SchemaValidationContext { /** @var list<Error> */ private array $errors = []; private Schema $schema; private InputObjectCircularRefs $inputObjectCircularRefs; public function __construct(Schema $schema) { $this->schema = $schema; $this->inputObjectCircularRefs = new InputObjectCircularRefs($this); } /** @return list<Error> */ public function getErrors(): array { return $this->errors; } public function validateRootTypes(): void { if ($this->schema->getQueryType() === null) { $this->reportError('Query root type must be provided.', $this->schema->astNode); } // Triggers a type error if wrong $this->schema->getMutationType(); $this->schema->getSubscriptionType(); } /** @param array<Node|null>|Node|null $nodes */ public function reportError(string $message, $nodes = null): void { $nodes = array_filter(is_array($nodes) ? $nodes : [$nodes]); $this->addError(new Error($message, $nodes)); } private function addError(Error $error): void { $this->errors[] = $error; } /** @throws InvariantViolation */ public function validateDirectives(): void { $this->validateDirectiveDefinitions(); // Validate directives that are used on the schema $this->validateDirectivesAtLocation( $this->getDirectives($this->schema), DirectiveLocation::SCHEMA ); } /** @throws InvariantViolation */ public function validateDirectiveDefinitions(): void { $directiveDefinitions = []; $directives = $this->schema->getDirectives(); foreach ($directives as $directive) { // Ensure all directives are in fact GraphQL directives. // @phpstan-ignore-next-line The generic type says this should not happen, but a user may use it wrong nonetheless if (! $directive instanceof Directive) { $notDirective = Utils::printSafe($directive); // @phpstan-ignore-next-line The generic type says this should not happen, but a user may use it wrong nonetheless $nodes = is_object($directive) && property_exists($directive, 'astNode') ? $directive->astNode : null; $this->reportError( "Expected directive but got: {$notDirective}.", $nodes ); continue; } $existingDefinitions = $directiveDefinitions[$directive->name] ?? []; $existingDefinitions[] = $directive; $directiveDefinitions[$directive->name] = $existingDefinitions; // Ensure they are named correctly. $this->validateName($directive); // TODO: Ensure proper locations. $argNames = []; foreach ($directive->args as $arg) { // Ensure they are named correctly. $this->validateName($arg); $argName = $arg->name; if (isset($argNames[$argName])) { $this->reportError( "Argument @{$directive->name}({$argName}:) can only be defined once.", $this->getAllDirectiveArgNodes($directive, $argName) ); continue; } $argNames[$argName] = true; // Ensure the type is an input type. // @phpstan-ignore-next-line necessary until PHP supports union types if (! Type::isInputType($arg->getType())) { $type = Utils::printSafe($arg->getType()); $this->reportError( "The type of @{$directive->name}({$argName}:) must be Input Type but got: {$type}.", $this->getDirectiveArgTypeNode($directive, $argName) ); } } } foreach ($directiveDefinitions as $directiveName => $directiveList) { if (count($directiveList) > 1) { $nodes = []; foreach ($directiveList as $dir) { if (isset($dir->astNode)) { $nodes[] = $dir->astNode; } } $this->reportError( "Directive @{$directiveName} defined multiple times.", $nodes ); } } } /** @param (Type&NamedType)|Directive|FieldDefinition|EnumValueDefinition|InputObjectField|Argument $object */ private function validateName(object $object): void { // Ensure names are valid, however introspection types opt out. $error = Utils::isValidNameError($object->name, $object->astNode); if ( $error === null || ($object instanceof Type && Introspection::isIntrospectionType($object)) ) { return; } $this->addError($error); } /** @return array<int, InputValueDefinitionNode> */ private function getAllDirectiveArgNodes(Directive $directive, string $argName): array { $astNode = $directive->astNode; if ($astNode === null) { return []; } $matchingSubnodes = []; foreach ($astNode->arguments as $subNode) { if ($subNode->name->value === $argName) { $matchingSubnodes[] = $subNode; } } return $matchingSubnodes; } /** @return NamedTypeNode|ListTypeNode|NonNullTypeNode|null */ private function getDirectiveArgTypeNode(Directive $directive, string $argName): ?TypeNode { $argNode = $this->getAllDirectiveArgNodes($directive, $argName)[0] ?? null; return $argNode === null ? null : $argNode->type; } /** @throws InvariantViolation */ public function validateTypes(): void { $typeMap = $this->schema->getTypeMap(); foreach ($typeMap as $type) { // Ensure all provided types are in fact GraphQL type. // @phpstan-ignore-next-line The generic type says this should not happen, but a user may use it wrong nonetheless if (! $type instanceof NamedType) { $notNamedType = Utils::printSafe($type); // @phpstan-ignore-next-line The generic type says this should not happen, but a user may use it wrong nonetheless $node = $type instanceof Type ? $type->astNode : null; $this->reportError("Expected GraphQL named type but got: {$notNamedType}.", $node); continue; } $this->validateName($type); if ($type instanceof ObjectType) { $this->validateFields($type); $this->validateInterfaces($type); $this->validateDirectivesAtLocation($this->getDirectives($type), DirectiveLocation::OBJECT); } elseif ($type instanceof InterfaceType) { $this->validateFields($type); $this->validateInterfaces($type); $this->validateDirectivesAtLocation($this->getDirectives($type), DirectiveLocation::IFACE); } elseif ($type instanceof UnionType) { $this->validateUnionMembers($type); $this->validateDirectivesAtLocation($this->getDirectives($type), DirectiveLocation::UNION); } elseif ($type instanceof EnumType) { $this->validateEnumValues($type); $this->validateDirectivesAtLocation($this->getDirectives($type), DirectiveLocation::ENUM); } elseif ($type instanceof InputObjectType) { $this->validateInputFields($type); $this->validateDirectivesAtLocation($this->getDirectives($type), DirectiveLocation::INPUT_OBJECT); $this->inputObjectCircularRefs->validate($type); } else { assert($type instanceof ScalarType, 'only remaining option'); $this->validateDirectivesAtLocation($this->getDirectives($type), DirectiveLocation::SCALAR); } } } /** * @param NodeList<DirectiveNode> $directives * * @throws InvariantViolation */ private function validateDirectivesAtLocation(NodeList $directives, string $location): void { /** @var array<string, array<int, DirectiveNode>> $potentiallyDuplicateDirectives */ $potentiallyDuplicateDirectives = []; $schema = $this->schema; foreach ($directives as $directiveNode) { $directiveName = $directiveNode->name->value; // Ensure directive used is also defined $schemaDirective = $schema->getDirective($directiveName); if ($schemaDirective === null) { $this->reportError("No directive @{$directiveName} defined.", $directiveNode); continue; } if (! in_array($location, $schemaDirective->locations, true)) { $this->reportError( "Directive @{$directiveName} not allowed at {$location} location.", array_filter([$directiveNode, $schemaDirective->astNode]) ); } if (! $schemaDirective->isRepeatable) { $potentiallyDuplicateDirectives[$directiveName][] = $directiveNode; } } foreach ($potentiallyDuplicateDirectives as $directiveName => $directiveList) { if (count($directiveList) > 1) { $this->reportError("Non-repeatable directive @{$directiveName} used more than once at the same location.", $directiveList); } } } /** * @param ObjectType|InterfaceType $type * * @throws InvariantViolation */ private function validateFields(Type $type): void { $fieldMap = $type->getFields(); if ($fieldMap === []) { $this->reportError( "Type {$type->name} must define one or more fields.", $this->getAllNodes($type) ); } foreach ($fieldMap as $fieldName => $field) { $this->validateName($field); $fieldNodes = $this->getAllFieldNodes($type, $fieldName); if (count($fieldNodes) > 1) { $this->reportError("Field {$type->name}.{$fieldName} can only be defined once.", $fieldNodes); continue; } $fieldType = $field->getType(); // @phpstan-ignore-next-line not statically provable until we can use union types if (! Type::isOutputType($fieldType)) { $safeFieldType = Utils::printSafe($fieldType); $this->reportError( "The type of {$type->name}.{$fieldName} must be Output Type but got: {$safeFieldType}.", $this->getFieldTypeNode($type, $fieldName) ); } $this->validateTypeIsSingleton($fieldType, "{$type->name}.{$fieldName}"); $argNames = []; foreach ($field->args as $arg) { $argName = $arg->name; $argPath = "{$type->name}.{$fieldName}({$argName}:)"; $this->validateName($arg); if (isset($argNames[$argName])) { $this->reportError( "Field argument {$argPath} can only be defined once.", $this->getAllFieldArgNodes($type, $fieldName, $argName) ); } $argNames[$argName] = true; $argType = $arg->getType(); // @phpstan-ignore-next-line the type of $arg->getType() says it is an input type, but it might not always be true if (! Type::isInputType($argType)) { $safeType = Utils::printSafe($argType); $this->reportError( "The type of {$argPath} must be Input Type but got: {$safeType}.", $this->getFieldArgTypeNode($type, $fieldName, $argName) ); } $this->validateTypeIsSingleton($argType, $argPath); if (isset($arg->astNode->directives)) { $this->validateDirectivesAtLocation($arg->astNode->directives, DirectiveLocation::ARGUMENT_DEFINITION); } } if (isset($field->astNode->directives)) { $this->validateDirectivesAtLocation($field->astNode->directives, DirectiveLocation::FIELD_DEFINITION); } } } /** * @param Schema|ObjectType|InterfaceType|UnionType|EnumType|InputObjectType|Directive $obj * * @return list<SchemaDefinitionNode|SchemaExtensionNode>|list<ObjectTypeDefinitionNode|ObjectTypeExtensionNode>|list<InterfaceTypeDefinitionNode|InterfaceTypeExtensionNode>|list<UnionTypeDefinitionNode|UnionTypeExtensionNode>|list< EnumTypeDefinitionNode|EnumTypeExtensionNode>|list<InputObjectTypeDefinitionNode|InputObjectTypeExtensionNode>|list<DirectiveDefinitionNode> */ private function getAllNodes(object $obj): array { $astNode = $obj->astNode; if ($obj instanceof Schema) { $extensionNodes = $obj->extensionASTNodes; } elseif ($obj instanceof Directive) { $extensionNodes = []; } else { $extensionNodes = $obj->extensionASTNodes; } $allNodes = $astNode === null ? [] : [$astNode]; foreach ($extensionNodes as $extensionNode) { $allNodes[] = $extensionNode; } return $allNodes; } /** * @param ObjectType|InterfaceType $type * * @return list<FieldDefinitionNode> */ private function getAllFieldNodes(Type $type, string $fieldName): array { $allNodes = array_filter([$type->astNode, ...$type->extensionASTNodes]); $matchingFieldNodes = []; foreach ($allNodes as $node) { foreach ($node->fields as $field) { if ($field->name->value === $fieldName) { $matchingFieldNodes[] = $field; } } } return $matchingFieldNodes; } /** * @param ObjectType|InterfaceType $type * * @return NamedTypeNode|ListTypeNode|NonNullTypeNode|null */ private function getFieldTypeNode(Type $type, string $fieldName): ?TypeNode { $fieldNode = $this->getFieldNode($type, $fieldName); return $fieldNode === null ? null : $fieldNode->type; } /** @param ObjectType|InterfaceType $type */ private function getFieldNode(Type $type, string $fieldName): ?FieldDefinitionNode { $nodes = $this->getAllFieldNodes($type, $fieldName); return $nodes[0] ?? null; } /** * @param ObjectType|InterfaceType $type * * @return array<int, InputValueDefinitionNode> */ private function getAllFieldArgNodes(Type $type, string $fieldName, string $argName): array { $argNodes = []; $fieldNode = $this->getFieldNode($type, $fieldName); if ($fieldNode !== null) { foreach ($fieldNode->arguments as $node) { if ($node->name->value === $argName) { $argNodes[] = $node; } } } return $argNodes; } /** * @param ObjectType|InterfaceType $type * * @return NamedTypeNode|ListTypeNode|NonNullTypeNode|null */ private function getFieldArgTypeNode(Type $type, string $fieldName, string $argName): ?TypeNode { $fieldArgNode = $this->getFieldArgNode($type, $fieldName, $argName); return $fieldArgNode === null ? null : $fieldArgNode->type; } /** @param ObjectType|InterfaceType $type */ private function getFieldArgNode(Type $type, string $fieldName, string $argName): ?InputValueDefinitionNode { $nodes = $this->getAllFieldArgNodes($type, $fieldName, $argName); return $nodes[0] ?? null; } /** * @param ObjectType|InterfaceType $type * * @throws InvariantViolation */ private function validateInterfaces(ImplementingType $type): void { $ifaceTypeNames = []; foreach ($type->getInterfaces() as $interface) { // @phpstan-ignore-next-line The generic type says this should not happen, but a user may use it wrong nonetheless if (! $interface instanceof InterfaceType) { $notInterface = Utils::printSafe($interface); $this->reportError( "Type {$type->name} must only implement Interface types, it cannot implement {$notInterface}.", $this->getImplementsInterfaceNode($type, $interface) ); continue; } if ($type === $interface) { $this->reportError( "Type {$type->name} cannot implement itself because it would create a circular reference.", $this->getImplementsInterfaceNode($type, $interface) ); continue; } if (isset($ifaceTypeNames[$interface->name])) { $this->reportError( "Type {$type->name} can only implement {$interface->name} once.", $this->getAllImplementsInterfaceNodes($type, $interface) ); continue; } $ifaceTypeNames[$interface->name] = true; $this->validateTypeImplementsAncestors($type, $interface); $this->validateTypeImplementsInterface($type, $interface); } } /** * @param Schema|(Type&NamedType) $object * * @return NodeList<DirectiveNode> */ private function getDirectives(object $object): NodeList { $directives = []; /** * Excluding directiveNode, since $object is not Directive. * * @var SchemaDefinitionNode|SchemaExtensionNode|ObjectTypeDefinitionNode|ObjectTypeExtensionNode|InterfaceTypeDefinitionNode|InterfaceTypeExtensionNode|UnionTypeDefinitionNode|UnionTypeExtensionNode|EnumTypeDefinitionNode|EnumTypeExtensionNode|InputObjectTypeDefinitionNode|InputObjectTypeExtensionNode $node */ // @phpstan-ignore-next-line union types are not pervasive foreach ($this->getAllNodes($object) as $node) { foreach ($node->directives as $directive) { $directives[] = $directive; } } return new NodeList($directives); } /** * @param ObjectType|InterfaceType $type * @param Type&NamedType $shouldBeInterface */ private function getImplementsInterfaceNode(ImplementingType $type, NamedType $shouldBeInterface): ?NamedTypeNode { $nodes = $this->getAllImplementsInterfaceNodes($type, $shouldBeInterface); return $nodes[0] ?? null; } /** * @param ObjectType|InterfaceType $type * @param Type&NamedType $shouldBeInterface * * @return list<NamedTypeNode> */ private function getAllImplementsInterfaceNodes(ImplementingType $type, NamedType $shouldBeInterface): array { $allNodes = array_filter([$type->astNode, ...$type->extensionASTNodes]); $shouldBeInterfaceName = $shouldBeInterface->name; $matchingInterfaceNodes = []; foreach ($allNodes as $node) { foreach ($node->interfaces as $interface) { if ($interface->name->value === $shouldBeInterfaceName) { $matchingInterfaceNodes[] = $interface; } } } return $matchingInterfaceNodes; } /** * @param ObjectType|InterfaceType $type * * @throws InvariantViolation */ private function validateTypeImplementsInterface(ImplementingType $type, InterfaceType $iface): void { $typeFieldMap = $type->getFields(); $ifaceFieldMap = $iface->getFields(); foreach ($ifaceFieldMap as $fieldName => $ifaceField) { $typeField = $typeFieldMap[$fieldName] ?? null; if ($typeField === null) { $this->reportError( "Interface field {$iface->name}.{$fieldName} expected but {$type->name} does not provide it.", array_merge( [$this->getFieldNode($iface, $fieldName)], $this->getAllNodes($type) ) ); continue; } $typeFieldType = $typeField->getType(); $ifaceFieldType = $ifaceField->getType(); if (! TypeComparators::isTypeSubTypeOf($this->schema, $typeFieldType, $ifaceFieldType)) { $this->reportError( "Interface field {$iface->name}.{$fieldName} expects type {$ifaceFieldType} but {$type->name}.{$fieldName} is type {$typeFieldType}.", [ $this->getFieldTypeNode($iface, $fieldName), $this->getFieldTypeNode($type, $fieldName), ] ); } foreach ($ifaceField->args as $ifaceArg) { $argName = $ifaceArg->name; $typeArg = $typeField->getArg($argName); if ($typeArg === null) { $this->reportError( "Interface field argument {$iface->name}.{$fieldName}({$argName}:) expected but {$type->name}.{$fieldName} does not provide it.", [ $this->getFieldArgNode($iface, $fieldName, $argName), $this->getFieldNode($type, $fieldName), ] ); continue; } $ifaceArgType = $ifaceArg->getType(); $typeArgType = $typeArg->getType(); if (! TypeComparators::isEqualType($ifaceArgType, $typeArgType)) { $this->reportError( "Interface field argument {$iface->name}.{$fieldName}({$argName}:) expects type {$ifaceArgType} but {$type->name}.{$fieldName}({$argName}:) is type {$typeArgType}.", [ $this->getFieldArgTypeNode($iface, $fieldName, $argName), $this->getFieldArgTypeNode($type, $fieldName, $argName), ] ); } // TODO: validate default values? } foreach ($typeField->args as $typeArg) { $argName = $typeArg->name; $ifaceArg = $ifaceField->getArg($argName); if ($typeArg->isRequired() && $ifaceArg === null) { $this->reportError( "Object field {$type->name}.{$fieldName} includes required argument {$argName} that is missing from the Interface field {$iface->name}.{$fieldName}.", [ $this->getFieldArgNode($type, $fieldName, $argName), $this->getFieldNode($iface, $fieldName), ] ); } } } } /** @param ObjectType|InterfaceType $type */ private function validateTypeImplementsAncestors(ImplementingType $type, InterfaceType $iface): void { $typeInterfaces = $type->getInterfaces(); foreach ($iface->getInterfaces() as $transitive) { if (! in_array($transitive, $typeInterfaces, true)) { $this->reportError( $transitive === $type ? "Type {$type->name} cannot implement {$iface->name} because it would create a circular reference." : "Type {$type->name} must implement {$transitive->name} because it is implemented by {$iface->name}.", array_merge( $this->getAllImplementsInterfaceNodes($iface, $transitive), $this->getAllImplementsInterfaceNodes($type, $iface) ) ); } } } /** @throws InvariantViolation */ private function validateUnionMembers(UnionType $union): void { $memberTypes = $union->getTypes(); if ($memberTypes === []) { $this->reportError( "Union type {$union->name} must define one or more member types.", $this->getAllNodes($union) ); } $includedTypeNames = []; foreach ($memberTypes as $memberType) { // @phpstan-ignore-next-line The generic type says this should not happen, but a user may use it wrong nonetheless if (! $memberType instanceof ObjectType) { $notObjectType = Utils::printSafe($memberType); $this->reportError( "Union type {$union->name} can only include Object types, it cannot include {$notObjectType}.", $this->getUnionMemberTypeNodes($union, $notObjectType) ); continue; } if (isset($includedTypeNames[$memberType->name])) { $this->reportError( "Union type {$union->name} can only include type {$memberType->name} once.", $this->getUnionMemberTypeNodes($union, $memberType->name) ); continue; } $includedTypeNames[$memberType->name] = true; } } /** @return list<NamedTypeNode> */ private function getUnionMemberTypeNodes(UnionType $union, string $typeName): array { $allNodes = array_filter([$union->astNode, ...$union->extensionASTNodes]); $types = []; foreach ($allNodes as $node) { foreach ($node->types as $type) { if ($type->name->value === $typeName) { $types[] = $type; } } } return $types; } /** @throws InvariantViolation */ private function validateEnumValues(EnumType $enumType): void { $enumValues = $enumType->getValues(); if ($enumValues === []) { $this->reportError( "Enum type {$enumType->name} must define one or more values.", $this->getAllNodes($enumType) ); } foreach ($enumValues as $enumValue) { $valueName = $enumValue->name; // Ensure valid name. $this->validateName($enumValue); if ($valueName === 'true' || $valueName === 'false' || $valueName === 'null') { $this->reportError( "Enum type {$enumType->name} cannot include value: {$valueName}.", $enumValue->astNode ); } // Ensure valid directives if (isset($enumValue->astNode, $enumValue->astNode->directives)) { $this->validateDirectivesAtLocation( $enumValue->astNode->directives, DirectiveLocation::ENUM_VALUE ); } } } /** @throws InvariantViolation */ private function validateInputFields(InputObjectType $inputObj): void { $fieldMap = $inputObj->getFields(); if ($fieldMap === []) { $this->reportError( "Input Object type {$inputObj->name} must define one or more fields.", $this->getAllNodes($inputObj) ); } // Ensure the arguments are valid foreach ($fieldMap as $fieldName => $field) { // Ensure they are named correctly. $this->validateName($field); // TODO: Ensure they are unique per field. // Ensure the type is an input type. $type = $field->getType(); // @phpstan-ignore-next-line The generic type says this should not happen, but a user may use it wrong nonetheless if (! Type::isInputType($type)) { $notInputType = Utils::printSafe($type); $this->reportError( "The type of {$inputObj->name}.{$fieldName} must be Input Type but got: {$notInputType}.", $field->astNode->type ?? null ); } // Ensure valid directives if (isset($field->astNode, $field->astNode->directives)) { $this->validateDirectivesAtLocation( $field->astNode->directives, DirectiveLocation::INPUT_FIELD_DEFINITION ); } } } /** @throws InvariantViolation */ private function validateTypeIsSingleton(Type $type, string $path): void { $schemaConfig = $this->schema->getConfig(); if (! isset($schemaConfig->typeLoader)) { return; } $namedType = Type::getNamedType($type); if ($namedType->isBuiltInType()) { return; } $name = $namedType->name; if ($namedType !== ($schemaConfig->typeLoader)($name)) { throw new InvariantViolation(static::duplicateType($this->schema, $path, $name)); } } public static function duplicateType(Schema $schema, string $path, string $name): string { $hint = isset($schema->getConfig()->typeLoader) ? 'Ensure the type loader returns the same instance. ' : ''; return "Found duplicate type in schema at {$path}: {$name}. {$hint}See https://webonyx.github.io/graphql-php/type-definitions/#type-registry."; } } graphql/lib/Type/Schema.php000064400000041274151666572100011623 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Type; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\GraphQL; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Type\Definition\AbstractType; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\ImplementingType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Utils\InterfaceImplementations; use YOOtheme\GraphQL\Utils\TypeInfo; use YOOtheme\GraphQL\Utils\Utils; /** * Schema Definition (see [schema definition docs](schema-definition.md)). * * A Schema is created by supplying the root types of each type of operation: * query, mutation (optional) and subscription (optional). A schema definition is * then supplied to the validator and executor. Usage Example: * * $schema = new GraphQL\Type\Schema([ * 'query' => $MyAppQueryRootType, * 'mutation' => $MyAppMutationRootType, * ]); * * Or using Schema Config instance: * * $config = GraphQL\Type\SchemaConfig::create() * ->setQuery($MyAppQueryRootType) * ->setMutation($MyAppMutationRootType); * * $schema = new GraphQL\Type\Schema($config); * * @phpstan-import-type SchemaConfigOptions from SchemaConfig * @phpstan-import-type OperationType from OperationDefinitionNode * * @see \GraphQL\Tests\Type\SchemaTest */ class Schema { private SchemaConfig $config; /** * Contains currently resolved schema types. * * @var array<string, Type&NamedType> */ private array $resolvedTypes = []; /** * Lazily initialised. * * @var array<string, InterfaceImplementations> */ private array $implementationsMap; /** True when $resolvedTypes contains all possible schema types. */ private bool $fullyLoaded = false; /** @var array<int, Error> */ private array $validationErrors; public ?SchemaDefinitionNode $astNode; /** @var array<SchemaExtensionNode> */ public array $extensionASTNodes = []; /** * @param SchemaConfig|array<string, mixed> $config * * @phpstan-param SchemaConfig|SchemaConfigOptions $config * * @throws InvariantViolation * * @api */ public function __construct($config) { if (is_array($config)) { $config = SchemaConfig::create($config); } // If this schema was built from a source known to be valid, then it may be // marked with assumeValid to avoid an additional type system validation. if ($config->getAssumeValid()) { $this->validationErrors = []; } $this->astNode = $config->astNode; $this->extensionASTNodes = $config->extensionASTNodes; $this->config = $config; } /** * Returns all types in this schema. * * This operation requires a full schema scan. Do not use in production environment. * * @throws InvariantViolation * * @return array<string, Type&NamedType> Keys represent type names, values are instances of corresponding type definitions * * @api */ public function getTypeMap(): array { if (! $this->fullyLoaded) { $types = $this->config->types; if (is_callable($types)) { $types = $types(); } // Reset order of user provided types, since calls to getType() may have loaded them $this->resolvedTypes = []; foreach ($types as $typeOrLazyType) { /** @var Type|callable(): Type $typeOrLazyType */ $type = self::resolveType($typeOrLazyType); assert($type instanceof NamedType); /** @var string $typeName Necessary assertion for PHPStan + PHP 8.2 */ $typeName = $type->name; assert( ! isset($this->resolvedTypes[$typeName]) || $type === $this->resolvedTypes[$typeName], "Schema must contain unique named types but contains multiple types named \"{$type}\" (see https://webonyx.github.io/graphql-php/type-definitions/#type-registry).", ); $this->resolvedTypes[$typeName] = $type; } // To preserve order of user-provided types, we add first to add them to // the set of "collected" types, so `collectReferencedTypes` ignore them. /** @var array<string, Type&NamedType> $allReferencedTypes */ $allReferencedTypes = []; foreach ($this->resolvedTypes as $type) { // When we ready to process this type, we remove it from "collected" types // and then add it together with all dependent types in the correct position. unset($allReferencedTypes[$type->name]); TypeInfo::extractTypes($type, $allReferencedTypes); } foreach ([$this->getQueryType(), $this->getMutationType(), $this->getSubscriptionType()] as $rootType) { if ($rootType instanceof ObjectType) { TypeInfo::extractTypes($rootType, $allReferencedTypes); } } foreach ($this->getDirectives() as $directive) { // @phpstan-ignore-next-line generics are not strictly enforceable, error will be caught during schema validation if ($directive instanceof Directive) { TypeInfo::extractTypesFromDirectives($directive, $allReferencedTypes); } } TypeInfo::extractTypes(Introspection::_schema(), $allReferencedTypes); $this->resolvedTypes = $allReferencedTypes; $this->fullyLoaded = true; } return $this->resolvedTypes; } /** * Returns a list of directives supported by this schema. * * @throws InvariantViolation * * @return array<Directive> * * @api */ public function getDirectives(): array { return $this->config->directives ?? GraphQL::getStandardDirectives(); } /** @param mixed $typeLoaderReturn could be anything */ public static function typeLoaderNotType($typeLoaderReturn): string { $typeClass = Type::class; $notType = Utils::printSafe($typeLoaderReturn); return "Type loader is expected to return an instanceof {$typeClass}, but it returned {$notType}"; } public static function typeLoaderWrongTypeName(string $expectedTypeName, string $actualTypeName): string { return "Type loader is expected to return type {$expectedTypeName}, but it returned type {$actualTypeName}."; } /** Returns root type by operation name. */ public function getOperationType(string $operation): ?ObjectType { switch ($operation) { case 'query': return $this->getQueryType(); case 'mutation': return $this->getMutationType(); case 'subscription': return $this->getSubscriptionType(); default: return null; } } /** * Returns root query type. * * @api */ public function getQueryType(): ?ObjectType { $query = $this->config->query; if ($query === null) { return null; } if (is_callable($query)) { return $this->config->query = $query(); } return $query; } /** * Returns root mutation type. * * @api */ public function getMutationType(): ?ObjectType { $mutation = $this->config->mutation; if ($mutation === null) { return null; } if (is_callable($mutation)) { return $this->config->mutation = $mutation(); } return $mutation; } /** * Returns schema subscription. * * @api */ public function getSubscriptionType(): ?ObjectType { $subscription = $this->config->subscription; if ($subscription === null) { return null; } if (is_callable($subscription)) { return $this->config->subscription = $subscription(); } return $subscription; } /** @api */ public function getConfig(): SchemaConfig { return $this->config; } /** * Returns a type by name. * * @throws InvariantViolation * * @return (Type&NamedType)|null * * @api */ public function getType(string $name): ?Type { if (isset($this->resolvedTypes[$name])) { return $this->resolvedTypes[$name]; } $introspectionTypes = Introspection::getTypes(); if (isset($introspectionTypes[$name])) { return $introspectionTypes[$name]; } $standardTypes = Type::getStandardTypes(); if (isset($standardTypes[$name])) { return $standardTypes[$name]; } $type = $this->loadType($name); if ($type === null) { return null; } return $this->resolvedTypes[$name] = self::resolveType($type); } /** @throws InvariantViolation */ public function hasType(string $name): bool { return $this->getType($name) !== null; } /** * @throws InvariantViolation * * @return (Type&NamedType)|null */ private function loadType(string $typeName): ?Type { if (! isset($this->config->typeLoader)) { return $this->getTypeMap()[$typeName] ?? null; } $type = ($this->config->typeLoader)($typeName); if ($type === null) { return null; } // @phpstan-ignore-next-line not strictly enforceable unless PHP gets function types if (! $type instanceof Type) { throw new InvariantViolation(self::typeLoaderNotType($type)); } if ($typeName !== $type->name) { throw new InvariantViolation(self::typeLoaderWrongTypeName($typeName, $type->name)); } return $type; } /** * @template T of Type * * @param Type|callable $type * * @phpstan-param T|callable():T $type * * @phpstan-return T */ public static function resolveType($type): Type { if ($type instanceof Type) { return $type; } return $type(); } /** * Returns all possible concrete types for given abstract type * (implementations for interfaces and members of union type for unions). * * This operation requires full schema scan. Do not use in production environment. * * @param AbstractType&Type $abstractType * * @throws InvariantViolation * * @return array<ObjectType> * * @api */ public function getPossibleTypes(AbstractType $abstractType): array { if ($abstractType instanceof UnionType) { return $abstractType->getTypes(); } assert($abstractType instanceof InterfaceType, 'only other option'); return $this->getImplementations($abstractType)->objects(); } /** * Returns all types that implement a given interface type. * * This operation requires full schema scan. Do not use in production environment. * * @api * * @throws InvariantViolation */ public function getImplementations(InterfaceType $abstractType): InterfaceImplementations { return $this->collectImplementations()[$abstractType->name]; } /** * @throws InvariantViolation * * @return array<string, InterfaceImplementations> */ private function collectImplementations(): array { if (! isset($this->implementationsMap)) { $this->implementationsMap = []; /** * @var array< * string, * array{ * objects: array<int, ObjectType>, * interfaces: array<int, InterfaceType>, * } * > $foundImplementations */ $foundImplementations = []; foreach ($this->getTypeMap() as $type) { if ($type instanceof InterfaceType) { if (! isset($foundImplementations[$type->name])) { $foundImplementations[$type->name] = ['objects' => [], 'interfaces' => []]; } foreach ($type->getInterfaces() as $iface) { if (! isset($foundImplementations[$iface->name])) { $foundImplementations[$iface->name] = ['objects' => [], 'interfaces' => []]; } $foundImplementations[$iface->name]['interfaces'][] = $type; } } elseif ($type instanceof ObjectType) { foreach ($type->getInterfaces() as $iface) { if (! isset($foundImplementations[$iface->name])) { $foundImplementations[$iface->name] = ['objects' => [], 'interfaces' => []]; } $foundImplementations[$iface->name]['objects'][] = $type; } } } foreach ($foundImplementations as $name => $implementations) { $this->implementationsMap[$name] = new InterfaceImplementations($implementations['objects'], $implementations['interfaces']); } } return $this->implementationsMap; } /** * Returns true if the given type is a sub type of the given abstract type. * * @param AbstractType&Type $abstractType * @param ImplementingType&Type $maybeSubType * * @api * * @throws InvariantViolation */ public function isSubType(AbstractType $abstractType, ImplementingType $maybeSubType): bool { if ($abstractType instanceof InterfaceType) { return $maybeSubType->implementsInterface($abstractType); } assert($abstractType instanceof UnionType, 'only other option'); return $abstractType->isPossibleType($maybeSubType); } /** * Returns instance of directive by name. * * @api * * @throws InvariantViolation */ public function getDirective(string $name): ?Directive { foreach ($this->getDirectives() as $directive) { if ($directive->name === $name) { return $directive; } } return null; } /** * Throws if the schema is not valid. * * This operation requires a full schema scan. Do not use in production environment. * * @throws Error * @throws InvariantViolation * * @api */ public function assertValid(): void { $errors = $this->validate(); if ($errors !== []) { throw new InvariantViolation(implode("\n\n", $this->validationErrors)); } $internalTypes = Type::getStandardTypes() + Introspection::getTypes(); foreach ($this->getTypeMap() as $name => $type) { if (isset($internalTypes[$name])) { continue; } $type->assertValid(); // Make sure type loader returns the same instance as registered in other places of schema if (isset($this->config->typeLoader) && $this->loadType($name) !== $type) { throw new InvariantViolation("Type loader returns different instance for {$name} than field/argument definitions. Make sure you always return the same instance for the same type name."); } } } /** * Validate the schema and return any errors. * * This operation requires a full schema scan. Do not use in production environment. * * @throws InvariantViolation * * @return array<int, Error> * * @api */ public function validate(): array { // If this Schema has already been validated, return the previous results. if (isset($this->validationErrors)) { return $this->validationErrors; } // Validate the schema, producing a list of errors. $context = new SchemaValidationContext($this); $context->validateRootTypes(); $context->validateDirectives(); $context->validateTypes(); // Persist the results of validation before returning to ensure validation // does not run multiple times for this schema. $this->validationErrors = $context->getErrors(); return $this->validationErrors; } } graphql/lib/Error/ClientAware.php000064400000001101151666572100012752 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; /** * Implementing ClientAware allows graphql-php to decide if this error is safe to be shown to clients. * * Only errors that both implement this interface and return true from `isClientSafe()` * will retain their original error message during formatting. * * All other errors will have their message replaced with "Internal server error". */ interface ClientAware { /** * Is it safe to show the error message to clients? * * @api */ public function isClientSafe(): bool; } graphql/lib/Error/CoercionError.php000064400000002436151666572100013343 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; use YOOtheme\GraphQL\Utils\Utils; /** * @phpstan-type InputPath list<string|int> */ class CoercionError extends Error { /** @var InputPath|null */ public ?array $inputPath; /** @var mixed whatever invalid value was passed */ public $invalidValue; /** * @param InputPath|null $inputPath * @param mixed $invalidValue whatever invalid value was passed * * @return static */ public static function make( string $message, ?array $inputPath, $invalidValue, ?\Throwable $previous = null ): self { $instance = new static($message, null, null, [], null, $previous); $instance->inputPath = $inputPath; $instance->invalidValue = $invalidValue; return $instance; } public function printInputPath(): ?string { if ($this->inputPath === null) { return null; } $path = ''; foreach ($this->inputPath as $segment) { $path .= is_int($segment) ? "[{$segment}]" : ".{$segment}"; } return $path; } public function printInvalidValue(): string { return Utils::printSafeJson($this->invalidValue); } } graphql/lib/Error/UserError.php000064400000000424151666572100012513 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; /** * Caused by GraphQL clients and can safely be displayed. */ class UserError extends \RuntimeException implements ClientAware { public function isClientSafe(): bool { return true; } } graphql/lib/Error/ProvidesExtensions.php000064400000000573151666572100014443 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; /** * Implementing HasExtensions allows this error to provide additional data to clients. */ interface ProvidesExtensions { /** * Data to include within the "extensions" key of the formatted error. * * @return array<string, mixed>|null */ public function getExtensions(): ?array; } graphql/lib/Error/SyntaxError.php000064400000000601151666572100013060 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; use YOOtheme\GraphQL\Language\Source; class SyntaxError extends Error { public function __construct(Source $source, int $position, string $description) { parent::__construct( "Syntax Error: {$description}", null, $source, [$position] ); } } graphql/lib/Error/DebugFlag.php000064400000000603151666572100012402 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; /** * Collection of flags for [error debugging](error-handling.md#debugging-tools). */ final class DebugFlag { public const NONE = 0; public const INCLUDE_DEBUG_MESSAGE = 1; public const INCLUDE_TRACE = 2; public const RETHROW_INTERNAL_EXCEPTIONS = 4; public const RETHROW_UNSAFE_EXCEPTIONS = 8; } graphql/lib/Error/Warning.php000064400000010037151666572100012171 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; /** * Encapsulates warnings produced by the library. * * Warnings can be suppressed (individually or all) if required. * Also, it is possible to override warning handler (which is **trigger_error()** by default). * * @phpstan-type WarningHandler callable(string $errorMessage, int $warningId, ?int $messageLevel): void */ final class Warning { public const NONE = 0; public const WARNING_ASSIGN = 2; public const WARNING_CONFIG = 4; public const WARNING_FULL_SCHEMA_SCAN = 8; public const WARNING_CONFIG_DEPRECATION = 16; public const WARNING_NOT_A_TYPE = 32; public const ALL = 63; private static int $enableWarnings = self::ALL; /** @var array<int, true> */ private static array $warned = []; /** * @var callable|null * * @phpstan-var WarningHandler|null */ private static $warningHandler; /** * Sets warning handler which can intercept all system warnings. * When not set, trigger_error() is used to notify about warnings. * * @phpstan-param WarningHandler|null $warningHandler * * @api */ public static function setWarningHandler(?callable $warningHandler = null): void { self::$warningHandler = $warningHandler; } /** * Suppress warning by id (has no effect when custom warning handler is set). * * @param bool|int $suppress * * @example Warning::suppress(Warning::WARNING_NOT_A_TYPE) suppress a specific warning * @example Warning::suppress(true) suppresses all warnings * @example Warning::suppress(false) enables all warnings * * @api */ public static function suppress($suppress = true): void { if ($suppress === true) { self::$enableWarnings = 0; } elseif ($suppress === false) { self::$enableWarnings = self::ALL; // @phpstan-ignore-next-line necessary until we can use proper unions } elseif (is_int($suppress)) { self::$enableWarnings &= ~$suppress; } else { $type = gettype($suppress); throw new \InvalidArgumentException("Expected type bool|int, got {$type}."); } } /** * Re-enable previously suppressed warning by id (has no effect when custom warning handler is set). * * @param bool|int $enable * * @example Warning::suppress(Warning::WARNING_NOT_A_TYPE) re-enables a specific warning * @example Warning::suppress(true) re-enables all warnings * @example Warning::suppress(false) suppresses all warnings * * @api */ public static function enable($enable = true): void { if ($enable === true) { self::$enableWarnings = self::ALL; } elseif ($enable === false) { self::$enableWarnings = 0; // @phpstan-ignore-next-line necessary until we can use proper unions } elseif (is_int($enable)) { self::$enableWarnings |= $enable; } else { $type = gettype($enable); throw new \InvalidArgumentException("Expected type bool|int, got {$type}."); } } public static function warnOnce(string $errorMessage, int $warningId, ?int $messageLevel = null): void { $messageLevel ??= \E_USER_WARNING; if (self::$warningHandler !== null) { (self::$warningHandler)($errorMessage, $warningId, $messageLevel); } elseif ((self::$enableWarnings & $warningId) > 0 && ! isset(self::$warned[$warningId])) { self::$warned[$warningId] = true; trigger_error($errorMessage, $messageLevel); } } public static function warn(string $errorMessage, int $warningId, ?int $messageLevel = null): void { $messageLevel ??= \E_USER_WARNING; if (self::$warningHandler !== null) { (self::$warningHandler)($errorMessage, $warningId, $messageLevel); } elseif ((self::$enableWarnings & $warningId) > 0) { trigger_error($errorMessage, $messageLevel); } } } graphql/lib/Error/InvariantViolation.php000064400000000411151666572100014377 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; /** * Note: * This exception should not inherit base Error exception as it is raised when there is an error somewhere in * user-land code. */ class InvariantViolation extends \LogicException {} graphql/lib/Error/SerializationError.php000064400000000452151666572100014413 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; /** * Thrown when failing to serialize a leaf value. * * Not generally safe for clients, as the wrong given value could * be something not intended to ever be seen by clients. */ class SerializationError extends \Exception {} graphql/lib/Error/FormattedError.php000064400000026023151666572100013525 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; use YOOtheme\GraphQL\Executor\ExecutionResult; use YOOtheme\GraphQL\Language\Source; use YOOtheme\GraphQL\Language\SourceLocation; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Utils\Utils; use PHPUnit\Framework\Test; /** * This class is used for [default error formatting](error-handling.md). * It converts PHP exceptions to [spec-compliant errors](https://facebook.github.io/graphql/#sec-Errors) * and provides tools for error debugging. * * @see ExecutionResult * * @phpstan-import-type SerializableError from ExecutionResult * @phpstan-import-type ErrorFormatter from ExecutionResult * * @see \GraphQL\Tests\Error\FormattedErrorTest */ class FormattedError { private static string $internalErrorMessage = 'Internal server error'; /** * Set default error message for internal errors formatted using createFormattedError(). * This value can be overridden by passing 3rd argument to `createFormattedError()`. * * @api */ public static function setInternalErrorMessage(string $msg): void { self::$internalErrorMessage = $msg; } /** * Prints a GraphQLError to a string, representing useful location information * about the error's position in the source. */ public static function printError(Error $error): string { $printedLocations = []; $nodes = $error->nodes; if (isset($nodes) && $nodes !== []) { foreach ($nodes as $node) { $location = $node->loc; if (isset($location)) { $source = $location->source; if (isset($source)) { $printedLocations[] = self::highlightSourceAtLocation( $source, $source->getLocation($location->start) ); } } } } elseif ($error->getSource() !== null && $error->getLocations() !== []) { $source = $error->getSource(); foreach ($error->getLocations() as $location) { $printedLocations[] = self::highlightSourceAtLocation($source, $location); } } return $printedLocations === [] ? $error->getMessage() : implode("\n\n", array_merge([$error->getMessage()], $printedLocations)) . "\n"; } /** * Render a helpful description of the location of the error in the GraphQL * Source document. */ private static function highlightSourceAtLocation(Source $source, SourceLocation $location): string { $line = $location->line; $lineOffset = $source->locationOffset->line - 1; $columnOffset = self::getColumnOffset($source, $location); $contextLine = $line + $lineOffset; $contextColumn = $location->column + $columnOffset; $prevLineNum = (string) ($contextLine - 1); $lineNum = (string) $contextLine; $nextLineNum = (string) ($contextLine + 1); $padLen = strlen($nextLineNum); $lines = Utils::splitLines($source->body); $lines[0] = self::spaces($source->locationOffset->column - 1) . $lines[0]; $outputLines = [ "{$source->name} ({$contextLine}:{$contextColumn})", $line >= 2 ? (self::leftPad($padLen, $prevLineNum) . ': ' . $lines[$line - 2]) : null, self::leftPad($padLen, $lineNum) . ': ' . $lines[$line - 1], self::spaces(2 + $padLen + $contextColumn - 1) . '^', $line < count($lines) ? self::leftPad($padLen, $nextLineNum) . ': ' . $lines[$line] : null, ]; return implode("\n", array_filter($outputLines)); } private static function getColumnOffset(Source $source, SourceLocation $location): int { return $location->line === 1 ? $source->locationOffset->column - 1 : 0; } private static function spaces(int $length): string { return str_repeat(' ', $length); } private static function leftPad(int $length, string $str): string { return self::spaces($length - mb_strlen($str)) . $str; } /** * Convert any exception to a GraphQL spec compliant array. * * This method only exposes the exception message when the given exception * implements the ClientAware interface, or when debug flags are passed. * * For a list of available debug flags @see \GraphQL\Error\DebugFlag constants. * * @return SerializableError * * @api */ public static function createFromException(\Throwable $exception, int $debugFlag = DebugFlag::NONE, ?string $internalErrorMessage = null): array { $internalErrorMessage ??= self::$internalErrorMessage; $message = $exception instanceof ClientAware && $exception->isClientSafe() ? $exception->getMessage() : $internalErrorMessage; $formattedError = ['message' => $message]; if ($exception instanceof Error) { $locations = array_map( static fn (SourceLocation $loc): array => $loc->toSerializableArray(), $exception->getLocations() ); if ($locations !== []) { $formattedError['locations'] = $locations; } if ($exception->path !== null && $exception->path !== []) { $formattedError['path'] = $exception->path; } } if ($exception instanceof ProvidesExtensions) { $extensions = $exception->getExtensions(); if (is_array($extensions) && $extensions !== []) { $formattedError['extensions'] = $extensions; } } if ($debugFlag !== DebugFlag::NONE) { $formattedError = self::addDebugEntries($formattedError, $exception, $debugFlag); } return $formattedError; } /** * Decorates spec-compliant $formattedError with debug entries according to $debug flags. * * @param SerializableError $formattedError * @param int $debugFlag For available flags @see \GraphQL\Error\DebugFlag * * @throws \Throwable * * @return SerializableError */ public static function addDebugEntries(array $formattedError, \Throwable $e, int $debugFlag): array { if ($debugFlag === DebugFlag::NONE) { return $formattedError; } if (($debugFlag & DebugFlag::RETHROW_INTERNAL_EXCEPTIONS) !== 0) { if (! $e instanceof Error) { throw $e; } if ($e->getPrevious() !== null) { throw $e->getPrevious(); } } $isUnsafe = ! $e instanceof ClientAware || ! $e->isClientSafe(); if (($debugFlag & DebugFlag::RETHROW_UNSAFE_EXCEPTIONS) !== 0 && $isUnsafe && $e->getPrevious() !== null) { throw $e->getPrevious(); } if (($debugFlag & DebugFlag::INCLUDE_DEBUG_MESSAGE) !== 0 && $isUnsafe) { $formattedError['extensions']['debugMessage'] = $e->getMessage(); } if (($debugFlag & DebugFlag::INCLUDE_TRACE) !== 0) { $actualError = $e->getPrevious() ?? $e; if ($e instanceof \ErrorException || $e instanceof \Error) { $formattedError['extensions']['file'] = $e->getFile(); $formattedError['extensions']['line'] = $e->getLine(); } else { $formattedError['extensions']['file'] = $actualError->getFile(); $formattedError['extensions']['line'] = $actualError->getLine(); } $isTrivial = $e instanceof Error && $e->getPrevious() === null; if (! $isTrivial) { $formattedError['extensions']['trace'] = static::toSafeTrace($actualError); } } return $formattedError; } /** * Prepares final error formatter taking in account $debug flags. * * If initial formatter is not set, FormattedError::createFromException is used. * * @phpstan-param ErrorFormatter|null $formatter */ public static function prepareFormatter(?callable $formatter, int $debug): callable { return $formatter === null ? static fn (\Throwable $e): array => static::createFromException($e, $debug) : static fn (\Throwable $e): array => static::addDebugEntries($formatter($e), $e, $debug); } /** * Returns error trace as serializable array. * * @return array<int, array{ * file?: string, * line?: int, * function?: string, * call?: string, * }> * * @api */ public static function toSafeTrace(\Throwable $error): array { $trace = $error->getTrace(); if ( isset($trace[0]['function']) && isset($trace[0]['class']) // Remove invariant entries as they don't provide much value: && ($trace[0]['class'] . '::' . $trace[0]['function'] === 'GraphQL\Utils\Utils::invariant') ) { array_shift($trace); } elseif (! isset($trace[0]['file'])) { // Remove root call as it's likely error handler trace: array_shift($trace); } $formatted = []; foreach ($trace as $err) { $safeErr = []; if (isset($err['file'])) { $safeErr['file'] = $err['file']; } if (isset($err['line'])) { $safeErr['line'] = $err['line']; } $func = $err['function']; $args = array_map([self::class, 'printVar'], $err['args'] ?? []); $funcStr = $func . '(' . implode(', ', $args) . ')'; if (isset($err['class'])) { $safeErr['call'] = $err['class'] . '::' . $funcStr; } else { $safeErr['function'] = $funcStr; } $formatted[] = $safeErr; } return $formatted; } /** @param mixed $var */ public static function printVar($var): string { if ($var instanceof Type) { return 'GraphQLType: ' . $var->toString(); } if (is_object($var)) { // Calling `count` on instances of `PHPUnit\Framework\Test` triggers an unintended side effect - see https://github.com/sebastianbergmann/phpunit/issues/5866#issuecomment-2172429263 $count = ! $var instanceof Test && $var instanceof \Countable ? '(' . count($var) . ')' : ''; return 'instance of ' . get_class($var) . $count; } if (is_array($var)) { return 'array(' . count($var) . ')'; } if ($var === '') { return '(empty string)'; } if (is_string($var)) { return "'" . addcslashes($var, "'") . "'"; } if (is_bool($var)) { return $var ? 'true' : 'false'; } if (is_scalar($var)) { return (string) $var; } if ($var === null) { return 'null'; } return gettype($var); } } graphql/lib/Error/Error.php000064400000022671151666572100011664 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Error; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\Source; use YOOtheme\GraphQL\Language\SourceLocation; /** * Describes an Error found during the parse, validate, or * execute phases of performing a GraphQL operation. In addition to a message * and stack trace, it also includes information about the locations in a * GraphQL document and/or execution result that correspond to the Error. * * When the error was caused by an exception thrown in resolver, original exception * is available via `getPrevious()`. * * Also read related docs on [error handling](error-handling.md) * * Class extends standard PHP `\Exception`, so all standard methods of base `\Exception` class * are available in addition to those listed below. * * @see \GraphQL\Tests\Error\ErrorTest */ class Error extends \Exception implements \JsonSerializable, ClientAware, ProvidesExtensions { /** * Lazily initialized. * * @var array<int, SourceLocation> */ private array $locations; /** * An array describing the JSON-path into the execution response which * corresponds to this error. Only included for errors during execution. * When fields are aliased, the path includes aliases. * * @var list<int|string>|null */ public ?array $path; /** * An array describing the JSON-path into the execution response which * corresponds to this error. Only included for errors during execution. * This will never include aliases. * * @var list<int|string>|null */ public ?array $unaliasedPath; /** * An array of GraphQL AST Nodes corresponding to this error. * * @var array<Node>|null */ public ?array $nodes; /** * The source GraphQL document for the first location of this error. * * Note that if this Error represents more than one node, the source may not * represent nodes after the first node. */ private ?Source $source; /** @var array<int, int>|null */ private ?array $positions; private bool $isClientSafe; /** @var array<string, mixed>|null */ protected ?array $extensions; /** * @param iterable<array-key, Node|null>|Node|null $nodes * @param array<int, int>|null $positions * @param list<int|string>|null $path * @param array<string, mixed>|null $extensions * @param list<int|string>|null $unaliasedPath */ public function __construct( string $message = '', $nodes = null, ?Source $source = null, ?array $positions = null, ?array $path = null, ?\Throwable $previous = null, ?array $extensions = null, ?array $unaliasedPath = null ) { parent::__construct($message, 0, $previous); // Compute list of blame nodes. if ($nodes instanceof \Traversable) { /** @phpstan-ignore arrayFilter.strict */ $this->nodes = array_filter(iterator_to_array($nodes)); } elseif (is_array($nodes)) { $this->nodes = array_filter($nodes); } elseif ($nodes !== null) { $this->nodes = [$nodes]; } else { $this->nodes = null; } $this->source = $source; $this->positions = $positions; $this->path = $path; $this->unaliasedPath = $unaliasedPath; if (is_array($extensions) && $extensions !== []) { $this->extensions = $extensions; } elseif ($previous instanceof ProvidesExtensions) { $this->extensions = $previous->getExtensions(); } else { $this->extensions = null; } $this->isClientSafe = $previous instanceof ClientAware ? $previous->isClientSafe() : $previous === null; } /** * Given an arbitrary Error, presumably thrown while attempting to execute a * GraphQL operation, produce a new GraphQLError aware of the location in the * document responsible for the original Error. * * @param mixed $error * @param iterable<Node>|Node|null $nodes * @param list<int|string>|null $path * @param list<int|string>|null $unaliasedPath */ public static function createLocatedError($error, $nodes = null, ?array $path = null, ?array $unaliasedPath = null): Error { if ($error instanceof self) { if ($error->isLocated()) { return $error; } $nodes ??= $error->getNodes(); $path ??= $error->getPath(); $unaliasedPath ??= $error->getUnaliasedPath(); } $source = null; $originalError = null; $positions = []; $extensions = []; if ($error instanceof self) { $message = $error->getMessage(); $originalError = $error; $source = $error->getSource(); $positions = $error->getPositions(); $extensions = $error->getExtensions(); } elseif ($error instanceof InvariantViolation) { $message = $error->getMessage(); $originalError = $error->getPrevious() ?? $error; } elseif ($error instanceof \Throwable) { $message = $error->getMessage(); $originalError = $error; } else { $message = (string) $error; } $nonEmptyMessage = $message === '' ? 'An unknown error occurred.' : $message; return new static( $nonEmptyMessage, $nodes, $source, $positions, $path, $originalError, $extensions, $unaliasedPath ); } protected function isLocated(): bool { $path = $this->getPath(); $nodes = $this->getNodes(); return $path !== null && $path !== [] && $nodes !== null && $nodes !== []; } public function isClientSafe(): bool { return $this->isClientSafe; } public function getSource(): ?Source { return $this->source ??= $this->nodes[0]->loc->source ?? null; } /** @return array<int, int> */ public function getPositions(): array { if (! isset($this->positions)) { $this->positions = []; if (isset($this->nodes)) { foreach ($this->nodes as $node) { if (isset($node->loc->start)) { $this->positions[] = $node->loc->start; } } } } return $this->positions; } /** * An array of locations within the source GraphQL document which correspond to this error. * * Each entry has information about `line` and `column` within source GraphQL document: * $location->line; * $location->column; * * Errors during validation often contain multiple locations, for example to * point out to field mentioned in multiple fragments. Errors during execution include a * single location, the field which produced the error. * * @return array<int, SourceLocation> * * @api */ public function getLocations(): array { if (! isset($this->locations)) { $positions = $this->getPositions(); $source = $this->getSource(); $nodes = $this->getNodes(); $this->locations = []; if ($source !== null && $positions !== []) { foreach ($positions as $position) { $this->locations[] = $source->getLocation($position); } } elseif ($nodes !== null && $nodes !== []) { foreach ($nodes as $node) { if (isset($node->loc->source)) { $this->locations[] = $node->loc->source->getLocation($node->loc->start); } } } } return $this->locations; } /** @return array<Node>|null */ public function getNodes(): ?array { return $this->nodes; } /** * Returns an array describing the path from the root value to the field which produced this error. * Only included for execution errors. When fields are aliased, the path includes aliases. * * @return list<int|string>|null * * @api */ public function getPath(): ?array { return $this->path; } /** * Returns an array describing the path from the root value to the field which produced this error. * Only included for execution errors. This will never include aliases. * * @return list<int|string>|null * * @api */ public function getUnaliasedPath(): ?array { return $this->unaliasedPath; } /** @return array<string, mixed>|null */ public function getExtensions(): ?array { return $this->extensions; } /** * Specify data which should be serialized to JSON. * * @see http://php.net/manual/en/jsonserializable.jsonserialize.php * * @return array<string, mixed> data which can be serialized by <b>json_encode</b>, * which is a value of any type other than a resource */ #[\ReturnTypeWillChange] public function jsonSerialize(): array { return FormattedError::createFromException($this); } public function __toString(): string { return FormattedError::printError($this); } } graphql/lib/Utils/Utils.php000064400000017570151666572100011704 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\Warning; use YOOtheme\GraphQL\Language\AST\Node; class Utils { public static function undefined(): \stdClass { static $undefined; return $undefined ??= new \stdClass(); } /** @param array<string, mixed> $vars */ public static function assign(object $obj, array $vars): object { foreach ($vars as $key => $value) { if (! property_exists($obj, $key)) { $cls = get_class($obj); Warning::warn( "Trying to set non-existing property '{$key}' on class '{$cls}'", Warning::WARNING_ASSIGN ); } $obj->{$key} = $value; } return $obj; } /** * Print a value that came from JSON for debugging purposes. * * @param mixed $value */ public static function printSafeJson($value): string { if ($value instanceof \stdClass) { return static::jsonEncodeOrSerialize($value); } return static::printSafeInternal($value); } /** * Print a value that came from PHP for debugging purposes. * * @param mixed $value */ public static function printSafe($value): string { if (is_object($value)) { if (method_exists($value, '__toString')) { return $value->__toString(); } return 'instance of ' . get_class($value); } return static::printSafeInternal($value); } /** @param \stdClass|array<mixed> $value */ protected static function jsonEncodeOrSerialize($value): string { try { return json_encode($value, JSON_THROW_ON_ERROR); } catch (\JsonException $jsonException) { return serialize($value); } } /** @param mixed $value */ protected static function printSafeInternal($value): string { if (is_array($value)) { return static::jsonEncodeOrSerialize($value); } if ($value === '') { return '(empty string)'; } if ($value === null) { return 'null'; } if ($value === false) { return 'false'; } if ($value === true) { return 'true'; } if (is_string($value)) { return "\"{$value}\""; } if (is_scalar($value)) { return (string) $value; } return gettype($value); } /** UTF-8 compatible chr(). */ public static function chr(int $ord, string $encoding = 'UTF-8'): string { if ($encoding === 'UCS-4BE') { return pack('N', $ord); } return mb_convert_encoding(self::chr($ord, 'UCS-4BE'), $encoding, 'UCS-4BE'); } /** UTF-8 compatible ord(). */ public static function ord(string $char, string $encoding = 'UTF-8'): int { if (! isset($char[1])) { return ord($char); } if ($encoding !== 'UCS-4BE') { $char = mb_convert_encoding($char, 'UCS-4BE', $encoding); assert(is_string($char), 'format string is statically known to be correct'); } $unpacked = unpack('N', $char); assert(is_array($unpacked), 'format string is statically known to be correct'); return $unpacked[1]; } /** Returns UTF-8 char code at given $positing of the $string. */ public static function charCodeAt(string $string, int $position): int { $char = mb_substr($string, $position, 1, 'UTF-8'); return self::ord($char); } /** @throws \JsonException */ public static function printCharCode(?int $code): string { if ($code === null) { return '<EOF>'; } return $code < 0x007F // Trust JSON for ASCII ? json_encode(self::chr($code), JSON_THROW_ON_ERROR) // Otherwise, print the escaped form : '"\\u' . dechex($code) . '"'; } /** * Upholds the spec rules about naming. * * @throws Error */ public static function assertValidName(string $name): void { $error = self::isValidNameError($name); if ($error !== null) { throw $error; } } /** Returns an Error if a name is invalid. */ public static function isValidNameError(string $name, ?Node $node = null): ?Error { if (isset($name[1]) && $name[0] === '_' && $name[1] === '_') { return new Error( "Name \"{$name}\" must not begin with \"__\", which is reserved by GraphQL introspection.", $node ); } if (preg_match('/^[_a-zA-Z][_a-zA-Z0-9]*$/', $name) !== 1) { return new Error( "Names must match /^[_a-zA-Z][_a-zA-Z0-9]*\$/ but \"{$name}\" does not.", $node ); } return null; } /** @param array<string> $items */ public static function quotedOrList(array $items): string { $quoted = array_map( static fn (string $item): string => "\"{$item}\"", $items ); return self::orList($quoted); } /** @param array<string> $items */ public static function orList(array $items): string { if ($items === []) { return ''; } $selected = array_slice($items, 0, 5); $selectedLength = count($selected); $firstSelected = $selected[0]; if ($selectedLength === 1) { return $firstSelected; } return array_reduce( range(1, $selectedLength - 1), static fn ($list, $index): string => $list . ($selectedLength > 2 ? ', ' : ' ') . ($index === $selectedLength - 1 ? 'or ' : '') . $selected[$index], $firstSelected ); } /** * Given an invalid input string and a list of valid options, returns a filtered * list of valid options sorted based on their similarity with the input. * * @param array<string> $options * * @return array<int, string> */ public static function suggestionList(string $input, array $options): array { /** @var array<string, int> $optionsByDistance */ $optionsByDistance = []; $lexicalDistance = new LexicalDistance($input); $threshold = mb_strlen($input) * 0.4 + 1; foreach ($options as $option) { $distance = $lexicalDistance->measure($option, $threshold); if ($distance !== null) { $optionsByDistance[$option] = $distance; } } uksort($optionsByDistance, static function (string $a, string $b) use ($optionsByDistance) { $distanceDiff = $optionsByDistance[$a] - $optionsByDistance[$b]; return $distanceDiff !== 0 ? $distanceDiff : strnatcmp($a, $b); }); return array_map('strval', array_keys($optionsByDistance)); } /** * Try to extract the value for a key from an object like value. * * @param mixed $objectLikeValue * * @return mixed */ public static function extractKey($objectLikeValue, string $key) { if (is_array($objectLikeValue) || $objectLikeValue instanceof \ArrayAccess) { return $objectLikeValue[$key] ?? null; } if (is_object($objectLikeValue)) { return $objectLikeValue->{$key} ?? null; } return null; } /** * Split a string that has either Unix, Windows or Mac style newlines into lines. * * @return list<string> */ public static function splitLines(string $value): array { $lines = preg_split("/\r\n|\r|\n/", $value); assert(is_array($lines), 'given the regex is valid'); return $lines; } } graphql/lib/Utils/BuildClientSchema.php000064400000044423151666572110014121 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Error\SyntaxError; use YOOtheme\GraphQL\Language\Parser; use YOOtheme\GraphQL\Type\Definition\CustomScalarType; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\InputObjectField; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InputType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\OutputType; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Type\SchemaConfig; use YOOtheme\GraphQL\Type\TypeKind; /** * @phpstan-import-type UnnamedFieldDefinitionConfig from FieldDefinition * @phpstan-import-type UnnamedInputObjectFieldConfig from InputObjectField * * @phpstan-type Options array{ * assumeValid?: bool * } * * - assumeValid: * When building a schema from a GraphQL service's introspection result, it * might be safe to assume the schema is valid. Set to true to assume the * produced schema is valid. * * Default: false * * @see \GraphQL\Tests\Utils\BuildClientSchemaTest */ class BuildClientSchema { /** @var array<string, mixed> */ private array $introspection; /** * @var array<string, bool> * * @phpstan-var Options */ private array $options; /** @var array<string, NamedType&Type> */ private array $typeMap = []; /** * @param array<string, mixed> $introspectionQuery * @param array<string, bool> $options * * @phpstan-param Options $options */ public function __construct(array $introspectionQuery, array $options = []) { $this->introspection = $introspectionQuery; $this->options = $options; } /** * Build a schema for use by client tools. * * Given the result of a client running the introspection query, creates and * returns a \GraphQL\Type\Schema instance which can be then used with all graphql-php * tools, but cannot be used to execute a query, as introspection does not * represent the "resolver", "parse" or "serialize" functions or any other * server-internal mechanisms. * * This function expects a complete introspection result. Don't forget to check * the "errors" field of a server response before calling this function. * * @param array<string, mixed> $introspectionQuery * @param array<string, bool> $options * * @phpstan-param Options $options * * @api * * @throws \Exception * @throws InvariantViolation */ public static function build(array $introspectionQuery, array $options = []): Schema { return (new self($introspectionQuery, $options))->buildSchema(); } /** * @throws \Exception * @throws InvariantViolation */ public function buildSchema(): Schema { if (! array_key_exists('__schema', $this->introspection)) { $missingSchemaIntrospection = Utils::printSafeJson($this->introspection); throw new InvariantViolation("Invalid or incomplete introspection result. Ensure that you are passing \"data\" property of introspection response and no \"errors\" was returned alongside: {$missingSchemaIntrospection}."); } $schemaIntrospection = $this->introspection['__schema']; $builtInTypes = array_merge( Type::getStandardTypes(), Introspection::getTypes() ); foreach ($schemaIntrospection['types'] as $typeIntrospection) { if (! isset($typeIntrospection['name'])) { throw self::invalidOrIncompleteIntrospectionResult($typeIntrospection); } $name = $typeIntrospection['name']; if (! is_string($name)) { throw self::invalidOrIncompleteIntrospectionResult($typeIntrospection); } // Use the built-in singleton types to avoid reconstruction $this->typeMap[$name] = $builtInTypes[$name] ?? $this->buildType($typeIntrospection); } $queryType = isset($schemaIntrospection['queryType']) ? $this->getObjectType($schemaIntrospection['queryType']) : null; $mutationType = isset($schemaIntrospection['mutationType']) ? $this->getObjectType($schemaIntrospection['mutationType']) : null; $subscriptionType = isset($schemaIntrospection['subscriptionType']) ? $this->getObjectType($schemaIntrospection['subscriptionType']) : null; $directives = isset($schemaIntrospection['directives']) ? array_map( [$this, 'buildDirective'], $schemaIntrospection['directives'] ) : []; return new Schema( (new SchemaConfig()) ->setQuery($queryType) ->setMutation($mutationType) ->setSubscription($subscriptionType) ->setTypes($this->typeMap) ->setDirectives($directives) ->setAssumeValid($this->options['assumeValid'] ?? false) ); } /** * @param array<string, mixed> $typeRef * * @throws InvariantViolation */ private function getType(array $typeRef): Type { if (isset($typeRef['kind'])) { if ($typeRef['kind'] === TypeKind::LIST) { if (! isset($typeRef['ofType'])) { throw new InvariantViolation('Decorated type deeper than introspection query.'); } return new ListOfType($this->getType($typeRef['ofType'])); } if ($typeRef['kind'] === TypeKind::NON_NULL) { if (! isset($typeRef['ofType'])) { throw new InvariantViolation('Decorated type deeper than introspection query.'); } // @phpstan-ignore-next-line if the type is not a nullable type, schema validation will catch it return new NonNull($this->getType($typeRef['ofType'])); } } if (! isset($typeRef['name'])) { $unknownTypeRef = Utils::printSafeJson($typeRef); throw new InvariantViolation("Unknown type reference: {$unknownTypeRef}."); } return $this->getNamedType($typeRef['name']); } /** * @throws InvariantViolation * * @return NamedType&Type */ private function getNamedType(string $typeName): NamedType { if (! isset($this->typeMap[$typeName])) { throw new InvariantViolation("Invalid or incomplete schema, unknown type: {$typeName}. Ensure that a full introspection query is used in order to build a client schema."); } return $this->typeMap[$typeName]; } /** @param array<mixed> $type */ public static function invalidOrIncompleteIntrospectionResult(array $type): InvariantViolation { $incompleteType = Utils::printSafeJson($type); return new InvariantViolation("Invalid or incomplete introspection result. Ensure that a full introspection query is used in order to build a client schema: {$incompleteType}."); } /** * @param array<string, mixed> $typeRef * * @throws InvariantViolation * * @return Type&InputType */ private function getInputType(array $typeRef): InputType { $type = $this->getType($typeRef); if ($type instanceof InputType) { return $type; } $notInputType = Utils::printSafe($type); throw new InvariantViolation("Introspection must provide input type for arguments, but received: {$notInputType}."); } /** * @param array<string, mixed> $typeRef * * @throws InvariantViolation */ private function getOutputType(array $typeRef): OutputType { $type = $this->getType($typeRef); if ($type instanceof OutputType) { return $type; } $notInputType = Utils::printSafe($type); throw new InvariantViolation("Introspection must provide output type for fields, but received: {$notInputType}."); } /** * @param array<string, mixed> $typeRef * * @throws InvariantViolation */ private function getObjectType(array $typeRef): ObjectType { $type = $this->getType($typeRef); return ObjectType::assertObjectType($type); } /** * @param array<string, mixed> $typeRef * * @throws InvariantViolation */ public function getInterfaceType(array $typeRef): InterfaceType { $type = $this->getType($typeRef); return InterfaceType::assertInterfaceType($type); } /** * @param array<string, mixed> $type * * @throws InvariantViolation * * @return Type&NamedType */ private function buildType(array $type): NamedType { if (! array_key_exists('kind', $type)) { throw self::invalidOrIncompleteIntrospectionResult($type); } switch ($type['kind']) { case TypeKind::SCALAR: return $this->buildScalarDef($type); case TypeKind::OBJECT: return $this->buildObjectDef($type); case TypeKind::INTERFACE: return $this->buildInterfaceDef($type); case TypeKind::UNION: return $this->buildUnionDef($type); case TypeKind::ENUM: return $this->buildEnumDef($type); case TypeKind::INPUT_OBJECT: return $this->buildInputObjectDef($type); default: $unknownKindType = Utils::printSafeJson($type); throw new InvariantViolation("Invalid or incomplete introspection result. Received type with unknown kind: {$unknownKindType}."); } } /** * @param array<string, string> $scalar * * @throws InvariantViolation */ private function buildScalarDef(array $scalar): ScalarType { return new CustomScalarType([ 'name' => $scalar['name'], 'description' => $scalar['description'], 'serialize' => static fn ($value) => $value, ]); } /** * @param array<string, mixed> $implementingIntrospection * * @throws InvariantViolation * * @return array<int, InterfaceType> */ private function buildImplementationsList(array $implementingIntrospection): array { // TODO: Temporary workaround until GraphQL ecosystem will fully support 'interfaces' on interface types. if ( array_key_exists('interfaces', $implementingIntrospection) && $implementingIntrospection['interfaces'] === null && $implementingIntrospection['kind'] === TypeKind::INTERFACE ) { return []; } if (! array_key_exists('interfaces', $implementingIntrospection)) { $safeIntrospection = Utils::printSafeJson($implementingIntrospection); throw new InvariantViolation("Introspection result missing interfaces: {$safeIntrospection}."); } return array_map( [$this, 'getInterfaceType'], $implementingIntrospection['interfaces'] ); } /** * @param array<string, mixed> $object * * @throws InvariantViolation */ private function buildObjectDef(array $object): ObjectType { return new ObjectType([ 'name' => $object['name'], 'description' => $object['description'], 'interfaces' => fn (): array => $this->buildImplementationsList($object), 'fields' => fn (): array => $this->buildFieldDefMap($object), ]); } /** * @param array<string, mixed> $interface * * @throws InvariantViolation */ private function buildInterfaceDef(array $interface): InterfaceType { return new InterfaceType([ 'name' => $interface['name'], 'description' => $interface['description'], 'fields' => fn (): array => $this->buildFieldDefMap($interface), 'interfaces' => fn (): array => $this->buildImplementationsList($interface), ]); } /** * @param array<string, mixed> $union * * @throws InvariantViolation */ private function buildUnionDef(array $union): UnionType { if (! array_key_exists('possibleTypes', $union)) { $safeUnion = Utils::printSafeJson($union); throw new InvariantViolation("Introspection result missing possibleTypes: {$safeUnion}."); } return new UnionType([ 'name' => $union['name'], 'description' => $union['description'], 'types' => fn (): array => array_map( [$this, 'getObjectType'], $union['possibleTypes'] ), ]); } /** * @param array<string, mixed> $enum * * @throws InvariantViolation */ private function buildEnumDef(array $enum): EnumType { if (! array_key_exists('enumValues', $enum)) { $safeEnum = Utils::printSafeJson($enum); throw new InvariantViolation("Introspection result missing enumValues: {$safeEnum}."); } $values = []; foreach ($enum['enumValues'] as $value) { $values[$value['name']] = [ 'description' => $value['description'], 'deprecationReason' => $value['deprecationReason'], ]; } return new EnumType([ 'name' => $enum['name'], 'description' => $enum['description'], 'values' => $values, ]); } /** * @param array<string, mixed> $inputObject * * @throws InvariantViolation */ private function buildInputObjectDef(array $inputObject): InputObjectType { if (! array_key_exists('inputFields', $inputObject)) { $safeInputObject = Utils::printSafeJson($inputObject); throw new InvariantViolation("Introspection result missing inputFields: {$safeInputObject}."); } return new InputObjectType([ 'name' => $inputObject['name'], 'description' => $inputObject['description'], 'fields' => fn (): array => $this->buildInputValueDefMap($inputObject['inputFields']), ]); } /** * @param array<string, mixed> $typeIntrospection * * @throws \Exception * @throws InvariantViolation * * @return array<string, UnnamedFieldDefinitionConfig> */ private function buildFieldDefMap(array $typeIntrospection): array { if (! array_key_exists('fields', $typeIntrospection)) { $safeType = Utils::printSafeJson($typeIntrospection); throw new InvariantViolation("Introspection result missing fields: {$safeType}."); } /** @var array<string, UnnamedFieldDefinitionConfig> $map */ $map = []; foreach ($typeIntrospection['fields'] as $field) { if (! array_key_exists('args', $field)) { $safeField = Utils::printSafeJson($field); throw new InvariantViolation("Introspection result missing field args: {$safeField}."); } $map[$field['name']] = [ 'description' => $field['description'], 'deprecationReason' => $field['deprecationReason'], 'type' => $this->getOutputType($field['type']), 'args' => $this->buildInputValueDefMap($field['args']), ]; } // @phpstan-ignore-next-line unless the returned name was numeric, this works return $map; } /** * @param array<int, array<string, mixed>> $inputValueIntrospections * * @throws \Exception * * @return array<string, UnnamedInputObjectFieldConfig> */ private function buildInputValueDefMap(array $inputValueIntrospections): array { /** @var array<string, UnnamedInputObjectFieldConfig> $map */ $map = []; foreach ($inputValueIntrospections as $value) { $map[$value['name']] = $this->buildInputValue($value); } return $map; } /** * @param array<string, mixed> $inputValueIntrospection * * @throws \Exception * @throws SyntaxError * * @return UnnamedInputObjectFieldConfig */ public function buildInputValue(array $inputValueIntrospection): array { $type = $this->getInputType($inputValueIntrospection['type']); $inputValue = [ 'description' => $inputValueIntrospection['description'], 'type' => $type, ]; if (isset($inputValueIntrospection['defaultValue'])) { $inputValue['defaultValue'] = AST::valueFromAST( Parser::parseValue($inputValueIntrospection['defaultValue']), $type ); } return $inputValue; } /** * @param array<string, mixed> $directive * * @throws \Exception * @throws InvariantViolation */ public function buildDirective(array $directive): Directive { if (! array_key_exists('args', $directive)) { $safeDirective = Utils::printSafeJson($directive); throw new InvariantViolation("Introspection result missing directive args: {$safeDirective}."); } if (! array_key_exists('locations', $directive)) { $safeDirective = Utils::printSafeJson($directive); throw new InvariantViolation("Introspection result missing directive locations: {$safeDirective}."); } return new Directive([ 'name' => $directive['name'], 'description' => $directive['description'], 'args' => $this->buildInputValueDefMap($directive['args']), 'isRepeatable' => $directive['isRepeatable'] ?? false, 'locations' => $directive['locations'], ]); } } graphql/lib/Utils/TypeInfo.php000064400000035153151666572110012337 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\ArgumentNode; use YOOtheme\GraphQL\Language\AST\DirectiveNode; use YOOtheme\GraphQL\Language\AST\EnumValueNode; use YOOtheme\GraphQL\Language\AST\FieldNode; use YOOtheme\GraphQL\Language\AST\FragmentDefinitionNode; use YOOtheme\GraphQL\Language\AST\InlineFragmentNode; use YOOtheme\GraphQL\Language\AST\ListValueNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\ObjectFieldNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\SelectionSetNode; use YOOtheme\GraphQL\Language\AST\VariableDefinitionNode; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\CompositeType; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\HasFieldsType; use YOOtheme\GraphQL\Type\Definition\ImplementingType; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InputType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Type\Definition\WrappingType; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Type\Schema; class TypeInfo { private Schema $schema; /** @var array<int, Type|null> */ private array $typeStack = []; /** @var array<int, (CompositeType&Type)|null> */ private array $parentTypeStack = []; /** @var array<int, (InputType&Type)|null> */ private array $inputTypeStack = []; /** @var array<int, FieldDefinition|null> */ private array $fieldDefStack = []; /** @var array<int, mixed> */ private array $defaultValueStack = []; private ?Directive $directive = null; private ?Argument $argument = null; /** @var mixed */ private $enumValue; public function __construct(Schema $schema) { $this->schema = $schema; } /** @return array<int, (CompositeType&Type)|null> */ public function getParentTypeStack(): array { return $this->parentTypeStack; } /** @return array<int, FieldDefinition|null> */ public function getFieldDefStack(): array { return $this->fieldDefStack; } /** * Given root type scans through all fields to find nested types. * * Returns array where keys are for type name * and value contains corresponding type instance. * * Example output: * [ * 'String' => $instanceOfStringType, * 'MyType' => $instanceOfMyType, * ... * ] * * @param (Type&NamedType)|(Type&WrappingType) $type * @param array<string, Type&NamedType> $typeMap * * @throws InvariantViolation */ public static function extractTypes(Type $type, array &$typeMap): void { if ($type instanceof WrappingType) { self::extractTypes($type->getInnermostType(), $typeMap); return; } $name = $type->name; assert(is_string($name)); if (isset($typeMap[$name])) { if ($typeMap[$name] !== $type) { throw new InvariantViolation("Schema must contain unique named types but contains multiple types named \"{$type}\" (see https://webonyx.github.io/graphql-php/type-definitions/#type-registry)."); } return; } $typeMap[$name] = $type; if ($type instanceof UnionType) { foreach ($type->getTypes() as $member) { self::extractTypes($member, $typeMap); } return; } if ($type instanceof InputObjectType) { foreach ($type->getFields() as $field) { $fieldType = $field->getType(); assert($fieldType instanceof NamedType || $fieldType instanceof WrappingType); self::extractTypes($fieldType, $typeMap); } return; } if ($type instanceof ImplementingType) { foreach ($type->getInterfaces() as $interface) { self::extractTypes($interface, $typeMap); } } if ($type instanceof HasFieldsType) { foreach ($type->getFields() as $field) { foreach ($field->args as $arg) { $argType = $arg->getType(); assert($argType instanceof NamedType || $argType instanceof WrappingType); self::extractTypes($argType, $typeMap); } $fieldType = $field->getType(); assert($fieldType instanceof NamedType || $fieldType instanceof WrappingType); self::extractTypes($fieldType, $typeMap); } } } /** * @param array<string, Type&NamedType> $typeMap * * @throws InvariantViolation */ public static function extractTypesFromDirectives(Directive $directive, array &$typeMap): void { foreach ($directive->args as $arg) { $argType = $arg->getType(); assert($argType instanceof NamedType || $argType instanceof WrappingType); self::extractTypes($argType, $typeMap); } } /** @return (Type&InputType)|null */ public function getParentInputType(): ?InputType { return $this->inputTypeStack[count($this->inputTypeStack) - 2] ?? null; } public function getArgument(): ?Argument { return $this->argument; } /** @return mixed */ public function getEnumValue() { return $this->enumValue; } /** * @throws \Exception * @throws InvariantViolation */ public function enter(Node $node): void { $schema = $this->schema; // Note: many of the types below are explicitly typed as "mixed" to drop // any assumptions of a valid schema to ensure runtime types are properly // checked before continuing since TypeInfo is used as part of validation // which occurs before guarantees of schema and document validity. switch (true) { case $node instanceof SelectionSetNode: $namedType = Type::getNamedType($this->getType()); $this->parentTypeStack[] = Type::isCompositeType($namedType) ? $namedType : null; break; case $node instanceof FieldNode: $parentType = $this->getParentType(); $fieldDef = $parentType === null ? null : self::getFieldDefinition($schema, $parentType, $node); $fieldType = $fieldDef === null ? null : $fieldDef->getType(); $this->fieldDefStack[] = $fieldDef; $this->typeStack[] = $fieldType; break; case $node instanceof DirectiveNode: $this->directive = $schema->getDirective($node->name->value); break; case $node instanceof OperationDefinitionNode: if ($node->operation === 'query') { $type = $schema->getQueryType(); } elseif ($node->operation === 'mutation') { $type = $schema->getMutationType(); } else { // Only other option $type = $schema->getSubscriptionType(); } $this->typeStack[] = Type::isOutputType($type) ? $type : null; break; case $node instanceof InlineFragmentNode: case $node instanceof FragmentDefinitionNode: $typeConditionNode = $node->typeCondition; $outputType = $typeConditionNode === null ? Type::getNamedType($this->getType()) : AST::typeFromAST([$schema, 'getType'], $typeConditionNode); $this->typeStack[] = Type::isOutputType($outputType) ? $outputType : null; break; case $node instanceof VariableDefinitionNode: $inputType = AST::typeFromAST([$schema, 'getType'], $node->type); $this->inputTypeStack[] = Type::isInputType($inputType) ? $inputType : null; // push break; case $node instanceof ArgumentNode: $fieldOrDirective = $this->getDirective() ?? $this->getFieldDef(); $argDef = null; $argType = null; if ($fieldOrDirective !== null) { foreach ($fieldOrDirective->args as $arg) { if ($arg->name === $node->name->value) { $argDef = $arg; $argType = $arg->getType(); } } } $this->argument = $argDef; $this->defaultValueStack[] = $argDef !== null && $argDef->defaultValueExists() ? $argDef->defaultValue : Utils::undefined(); $this->inputTypeStack[] = Type::isInputType($argType) ? $argType : null; break; case $node instanceof ListValueNode: $type = $this->getInputType(); $listType = $type instanceof NonNull ? $type->getWrappedType() : $type; $itemType = $listType instanceof ListOfType ? $listType->getWrappedType() : $listType; // List positions never have a default value. $this->defaultValueStack[] = Utils::undefined(); $this->inputTypeStack[] = Type::isInputType($itemType) ? $itemType : null; break; case $node instanceof ObjectFieldNode: $objectType = Type::getNamedType($this->getInputType()); $inputField = null; $inputFieldType = null; if ($objectType instanceof InputObjectType) { $tmp = $objectType->getFields(); $inputField = $tmp[$node->name->value] ?? null; $inputFieldType = $inputField === null ? null : $inputField->getType(); } $this->defaultValueStack[] = $inputField !== null && $inputField->defaultValueExists() ? $inputField->defaultValue : Utils::undefined(); $this->inputTypeStack[] = Type::isInputType($inputFieldType) ? $inputFieldType : null; break; case $node instanceof EnumValueNode: $enumType = Type::getNamedType($this->getInputType()); $this->enumValue = $enumType instanceof EnumType ? $enumType->getValue($node->value) : null; break; } } public function getType(): ?Type { return $this->typeStack[count($this->typeStack) - 1] ?? null; } /** @return (CompositeType&Type)|null */ public function getParentType(): ?CompositeType { return $this->parentTypeStack[count($this->parentTypeStack) - 1] ?? null; } /** * Not exactly the same as the executor's definition of getFieldDef, in this * statically evaluated environment we do not always have an Object type, * and need to handle Interface and Union types. * * @throws InvariantViolation */ private static function getFieldDefinition(Schema $schema, Type $parentType, FieldNode $fieldNode): ?FieldDefinition { $name = $fieldNode->name->value; $schemaMeta = Introspection::schemaMetaFieldDef(); if ($name === $schemaMeta->name && $schema->getQueryType() === $parentType) { return $schemaMeta; } $typeMeta = Introspection::typeMetaFieldDef(); if ($name === $typeMeta->name && $schema->getQueryType() === $parentType) { return $typeMeta; } $typeNameMeta = Introspection::typeNameMetaFieldDef(); if ($name === $typeNameMeta->name && $parentType instanceof CompositeType) { return $typeNameMeta; } if ( $parentType instanceof ObjectType || $parentType instanceof InterfaceType ) { return $parentType->findField($name); } return null; } public function getDirective(): ?Directive { return $this->directive; } public function getFieldDef(): ?FieldDefinition { return $this->fieldDefStack[count($this->fieldDefStack) - 1] ?? null; } /** @return mixed any value is possible */ public function getDefaultValue() { return $this->defaultValueStack[count($this->defaultValueStack) - 1] ?? null; } /** @return (InputType&Type)|null */ public function getInputType(): ?InputType { return $this->inputTypeStack[count($this->inputTypeStack) - 1] ?? null; } public function leave(Node $node): void { switch (true) { case $node instanceof SelectionSetNode: array_pop($this->parentTypeStack); break; case $node instanceof FieldNode: array_pop($this->fieldDefStack); array_pop($this->typeStack); break; case $node instanceof DirectiveNode: $this->directive = null; break; case $node instanceof OperationDefinitionNode: case $node instanceof InlineFragmentNode: case $node instanceof FragmentDefinitionNode: array_pop($this->typeStack); break; case $node instanceof VariableDefinitionNode: array_pop($this->inputTypeStack); break; case $node instanceof ArgumentNode: $this->argument = null; array_pop($this->defaultValueStack); array_pop($this->inputTypeStack); break; case $node instanceof ListValueNode: case $node instanceof ObjectFieldNode: array_pop($this->defaultValueStack); array_pop($this->inputTypeStack); break; case $node instanceof EnumValueNode: $this->enumValue = null; break; } } } graphql/lib/Utils/PhpDoc.php000064400000002723151666572110011754 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; class PhpDoc { /** @param string|false|null $docBlock */ public static function unwrap($docBlock): ?string { if ($docBlock === false || $docBlock === null) { return null; } $content = preg_replace('~([\r\n]) \* (.*)~i', '$1$2', $docBlock); // strip * assert(is_string($content), 'regex is statically known to be valid'); $content = preg_replace('~([\r\n])[\* ]+([\r\n])~i', '$1$2', $content); // strip single-liner * assert(is_string($content), 'regex is statically known to be valid'); $content = substr($content, 3); // strip leading /** $content = substr($content, 0, -2); // strip trailing */ return static::nonEmptyOrNull($content); } /** @param string|false|null $docBlock */ public static function unpad($docBlock): ?string { if ($docBlock === false || $docBlock === null) { return null; } $lines = explode("\n", $docBlock); $lines = array_map( static fn (string $line): string => ' ' . trim($line), $lines ); $content = implode("\n", $lines); return static::nonEmptyOrNull($content); } protected static function nonEmptyOrNull(string $maybeEmptyString): ?string { $trimmed = trim($maybeEmptyString); return $trimmed === '' ? null : $trimmed; } } graphql/lib/Utils/BreakingChangesFinder.php000064400000105246151666572110014746 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\ImplementingType; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Type\Schema; /** * Utility for finding breaking/dangerous changes between two schemas. * * @phpstan-type Change array{type: string, description: string} * @phpstan-type Changes array{ * breakingChanges: array<int, Change>, * dangerousChanges: array<int, Change> * } * * @see \GraphQL\Tests\Utils\BreakingChangesFinderTest */ class BreakingChangesFinder { public const BREAKING_CHANGE_FIELD_CHANGED_KIND = 'FIELD_CHANGED_KIND'; public const BREAKING_CHANGE_FIELD_REMOVED = 'FIELD_REMOVED'; public const BREAKING_CHANGE_TYPE_CHANGED_KIND = 'TYPE_CHANGED_KIND'; public const BREAKING_CHANGE_TYPE_REMOVED = 'TYPE_REMOVED'; public const BREAKING_CHANGE_TYPE_REMOVED_FROM_UNION = 'TYPE_REMOVED_FROM_UNION'; public const BREAKING_CHANGE_VALUE_REMOVED_FROM_ENUM = 'VALUE_REMOVED_FROM_ENUM'; public const BREAKING_CHANGE_ARG_REMOVED = 'ARG_REMOVED'; public const BREAKING_CHANGE_ARG_CHANGED_KIND = 'ARG_CHANGED_KIND'; public const BREAKING_CHANGE_REQUIRED_ARG_ADDED = 'REQUIRED_ARG_ADDED'; public const BREAKING_CHANGE_REQUIRED_INPUT_FIELD_ADDED = 'REQUIRED_INPUT_FIELD_ADDED'; public const BREAKING_CHANGE_IMPLEMENTED_INTERFACE_REMOVED = 'IMPLEMENTED_INTERFACE_REMOVED'; public const BREAKING_CHANGE_DIRECTIVE_REMOVED = 'DIRECTIVE_REMOVED'; public const BREAKING_CHANGE_DIRECTIVE_ARG_REMOVED = 'DIRECTIVE_ARG_REMOVED'; public const BREAKING_CHANGE_DIRECTIVE_LOCATION_REMOVED = 'DIRECTIVE_LOCATION_REMOVED'; public const BREAKING_CHANGE_REQUIRED_DIRECTIVE_ARG_ADDED = 'REQUIRED_DIRECTIVE_ARG_ADDED'; public const DANGEROUS_CHANGE_ARG_DEFAULT_VALUE_CHANGED = 'ARG_DEFAULT_VALUE_CHANGE'; public const DANGEROUS_CHANGE_VALUE_ADDED_TO_ENUM = 'VALUE_ADDED_TO_ENUM'; public const DANGEROUS_CHANGE_IMPLEMENTED_INTERFACE_ADDED = 'IMPLEMENTED_INTERFACE_ADDED'; public const DANGEROUS_CHANGE_TYPE_ADDED_TO_UNION = 'TYPE_ADDED_TO_UNION'; public const DANGEROUS_CHANGE_OPTIONAL_INPUT_FIELD_ADDED = 'OPTIONAL_INPUT_FIELD_ADDED'; public const DANGEROUS_CHANGE_OPTIONAL_ARG_ADDED = 'OPTIONAL_ARG_ADDED'; /** * Given two schemas, returns an Array containing descriptions of all the types * of breaking changes covered by the other functions down below. * * @throws \TypeError * @throws InvariantViolation * * @return array<int, Change> */ public static function findBreakingChanges(Schema $oldSchema, Schema $newSchema): array { return array_merge( self::findRemovedTypes($oldSchema, $newSchema), self::findTypesThatChangedKind($oldSchema, $newSchema), self::findFieldsThatChangedTypeOnObjectOrInterfaceTypes($oldSchema, $newSchema), self::findFieldsThatChangedTypeOnInputObjectTypes($oldSchema, $newSchema)['breakingChanges'], self::findTypesRemovedFromUnions($oldSchema, $newSchema), self::findValuesRemovedFromEnums($oldSchema, $newSchema), self::findArgChanges($oldSchema, $newSchema)['breakingChanges'], self::findInterfacesRemovedFromObjectTypes($oldSchema, $newSchema), self::findRemovedDirectives($oldSchema, $newSchema), self::findRemovedDirectiveArgs($oldSchema, $newSchema), self::findAddedNonNullDirectiveArgs($oldSchema, $newSchema), self::findRemovedDirectiveLocations($oldSchema, $newSchema) ); } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to removing an entire type. * * @throws InvariantViolation * * @return array<int, Change> */ public static function findRemovedTypes( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $breakingChanges = []; foreach (array_keys($oldTypeMap) as $typeName) { if (! isset($newTypeMap[$typeName])) { $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_TYPE_REMOVED, 'description' => "{$typeName} was removed.", ]; } } return $breakingChanges; } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to changing the type of a type. * * @throws \TypeError * @throws InvariantViolation * * @return array<int, Change> */ public static function findTypesThatChangedKind( Schema $schemaA, Schema $schemaB ): array { $schemaATypeMap = $schemaA->getTypeMap(); $schemaBTypeMap = $schemaB->getTypeMap(); $breakingChanges = []; foreach ($schemaATypeMap as $typeName => $schemaAType) { if (! isset($schemaBTypeMap[$typeName])) { continue; } $schemaBType = $schemaBTypeMap[$typeName]; if ($schemaAType instanceof $schemaBType) { continue; } if ($schemaBType instanceof $schemaAType) { continue; } $schemaATypeKindName = self::typeKindName($schemaAType); $schemaBTypeKindName = self::typeKindName($schemaBType); $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_TYPE_CHANGED_KIND, 'description' => "{$typeName} changed from {$schemaATypeKindName} to {$schemaBTypeKindName}.", ]; } return $breakingChanges; } /** * @param Type&NamedType $type * * @throws \TypeError */ private static function typeKindName(NamedType $type): string { if ($type instanceof ScalarType) { return 'a Scalar type'; } if ($type instanceof ObjectType) { return 'an Object type'; } if ($type instanceof InterfaceType) { return 'an Interface type'; } if ($type instanceof UnionType) { return 'a Union type'; } if ($type instanceof EnumType) { return 'an Enum type'; } if ($type instanceof InputObjectType) { return 'an Input type'; } throw new \TypeError('Unknown type: ' . $type->name); } /** * @throws InvariantViolation * * @return array<int, Change> */ public static function findFieldsThatChangedTypeOnObjectOrInterfaceTypes( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $breakingChanges = []; foreach ($oldTypeMap as $typeName => $oldType) { $newType = $newTypeMap[$typeName] ?? null; if ( ! $oldType instanceof ObjectType && ! $oldType instanceof InterfaceType || ! $newType instanceof ObjectType && ! $newType instanceof InterfaceType || ! ($newType instanceof $oldType) ) { continue; } $oldTypeFieldsDef = $oldType->getFields(); $newTypeFieldsDef = $newType->getFields(); foreach ($oldTypeFieldsDef as $fieldName => $fieldDefinition) { // Check if the field is missing on the type in the new schema. if (! isset($newTypeFieldsDef[$fieldName])) { $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_FIELD_REMOVED, 'description' => "{$typeName}.{$fieldName} was removed.", ]; } else { $oldFieldType = $oldTypeFieldsDef[$fieldName]->getType(); $newFieldType = $newTypeFieldsDef[$fieldName]->getType(); $isSafe = self::isChangeSafeForObjectOrInterfaceField( $oldFieldType, $newFieldType ); if (! $isSafe) { $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_FIELD_CHANGED_KIND, 'description' => "{$typeName}.{$fieldName} changed type from {$oldFieldType} to {$newFieldType}.", ]; } } } } return $breakingChanges; } private static function isChangeSafeForObjectOrInterfaceField( Type $oldType, Type $newType ): bool { if ($oldType instanceof NamedType) { return // if they're both named types, see if their names are equivalent ($newType instanceof NamedType && $oldType->name === $newType->name) // moving from nullable to non-null of the same underlying type is safe || ($newType instanceof NonNull && self::isChangeSafeForObjectOrInterfaceField($oldType, $newType->getWrappedType())); } if ($oldType instanceof ListOfType) { return // if they're both lists, make sure the underlying types are compatible ($newType instanceof ListOfType && self::isChangeSafeForObjectOrInterfaceField( $oldType->getWrappedType(), $newType->getWrappedType() )) // moving from nullable to non-null of the same underlying type is safe || ($newType instanceof NonNull && self::isChangeSafeForObjectOrInterfaceField($oldType, $newType->getWrappedType())); } if ($oldType instanceof NonNull) { // if they're both non-null, make sure the underlying types are compatible return $newType instanceof NonNull && self::isChangeSafeForObjectOrInterfaceField($oldType->getWrappedType(), $newType->getWrappedType()); } return false; } /** * @throws InvariantViolation * * @return Changes */ public static function findFieldsThatChangedTypeOnInputObjectTypes( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $breakingChanges = []; $dangerousChanges = []; foreach ($oldTypeMap as $typeName => $oldType) { $newType = $newTypeMap[$typeName] ?? null; if (! ($oldType instanceof InputObjectType) || ! ($newType instanceof InputObjectType)) { continue; } $oldTypeFieldsDef = $oldType->getFields(); $newTypeFieldsDef = $newType->getFields(); foreach (array_keys($oldTypeFieldsDef) as $fieldName) { if (! isset($newTypeFieldsDef[$fieldName])) { $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_FIELD_REMOVED, 'description' => "{$typeName}.{$fieldName} was removed.", ]; } else { $oldFieldType = $oldTypeFieldsDef[$fieldName]->getType(); $newFieldType = $newTypeFieldsDef[$fieldName]->getType(); $isSafe = self::isChangeSafeForInputObjectFieldOrFieldArg( $oldFieldType, $newFieldType ); if (! $isSafe) { $oldFieldTypeString = $oldFieldType instanceof NamedType ? $oldFieldType->name : $oldFieldType; $newFieldTypeString = $newFieldType instanceof NamedType ? $newFieldType->name : $newFieldType; $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_FIELD_CHANGED_KIND, 'description' => "{$typeName}.{$fieldName} changed type from {$oldFieldTypeString} to {$newFieldTypeString}.", ]; } } } // Check if a field was added to the input object type foreach ($newTypeFieldsDef as $fieldName => $fieldDef) { if (isset($oldTypeFieldsDef[$fieldName])) { continue; } $newTypeName = $newType->name; if ($fieldDef->isRequired()) { $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_REQUIRED_INPUT_FIELD_ADDED, 'description' => "A required field {$fieldName} on input type {$newTypeName} was added.", ]; } else { $dangerousChanges[] = [ 'type' => self::DANGEROUS_CHANGE_OPTIONAL_INPUT_FIELD_ADDED, 'description' => "An optional field {$fieldName} on input type {$newTypeName} was added.", ]; } } } return [ 'breakingChanges' => $breakingChanges, 'dangerousChanges' => $dangerousChanges, ]; } /** @throws InvariantViolation */ private static function isChangeSafeForInputObjectFieldOrFieldArg( Type $oldType, Type $newType ): bool { if ($oldType instanceof NamedType) { if (! $newType instanceof NamedType) { return false; } // if they're both named types, see if their names are equivalent return $oldType->name === $newType->name; } if ($oldType instanceof ListOfType) { // if they're both lists, make sure the underlying types are compatible return $newType instanceof ListOfType && self::isChangeSafeForInputObjectFieldOrFieldArg( $oldType->getWrappedType(), $newType->getWrappedType() ); } if ($oldType instanceof NonNull) { return // if they're both non-null, make sure the underlying types are compatible ($newType instanceof NonNull && self::isChangeSafeForInputObjectFieldOrFieldArg( $oldType->getWrappedType(), $newType->getWrappedType() )) // moving from non-null to nullable of the same underlying type is safe || ! ($newType instanceof NonNull) && self::isChangeSafeForInputObjectFieldOrFieldArg($oldType->getWrappedType(), $newType); } return false; } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to removing types from a union type. * * @throws InvariantViolation * * @return array<int, Change> */ public static function findTypesRemovedFromUnions( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $typesRemovedFromUnion = []; foreach ($oldTypeMap as $typeName => $oldType) { $newType = $newTypeMap[$typeName] ?? null; if (! ($oldType instanceof UnionType) || ! ($newType instanceof UnionType)) { continue; } $typeNamesInNewUnion = []; foreach ($newType->getTypes() as $type) { $typeNamesInNewUnion[$type->name] = true; } foreach ($oldType->getTypes() as $type) { if (! isset($typeNamesInNewUnion[$type->name])) { $typesRemovedFromUnion[] = [ 'type' => self::BREAKING_CHANGE_TYPE_REMOVED_FROM_UNION, 'description' => "{$type->name} was removed from union type {$typeName}.", ]; } } } return $typesRemovedFromUnion; } /** * Given two schemas, returns an Array containing descriptions of any breaking * changes in the newSchema related to removing values from an enum type. * * @throws InvariantViolation * * @return array<int, Change> */ public static function findValuesRemovedFromEnums( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $valuesRemovedFromEnums = []; foreach ($oldTypeMap as $typeName => $oldType) { $newType = $newTypeMap[$typeName] ?? null; if (! ($oldType instanceof EnumType) || ! ($newType instanceof EnumType)) { continue; } $valuesInNewEnum = []; foreach ($newType->getValues() as $value) { $valuesInNewEnum[$value->name] = true; } foreach ($oldType->getValues() as $value) { if (! isset($valuesInNewEnum[$value->name])) { $valuesRemovedFromEnums[] = [ 'type' => self::BREAKING_CHANGE_VALUE_REMOVED_FROM_ENUM, 'description' => "{$value->name} was removed from enum type {$typeName}.", ]; } } } return $valuesRemovedFromEnums; } /** * Given two schemas, returns an Array containing descriptions of any * breaking or dangerous changes in the newSchema related to arguments * (such as removal or change of type of an argument, or a change in an * argument's default value). * * @throws InvariantViolation * * @return Changes */ public static function findArgChanges( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $breakingChanges = []; $dangerousChanges = []; foreach ($oldTypeMap as $typeName => $oldType) { $newType = $newTypeMap[$typeName] ?? null; if ( ! $oldType instanceof ObjectType && ! $oldType instanceof InterfaceType || ! $newType instanceof ObjectType && ! $newType instanceof InterfaceType || ! ($newType instanceof $oldType) ) { continue; } $oldTypeFields = $oldType->getFields(); $newTypeFields = $newType->getFields(); foreach ($oldTypeFields as $fieldName => $oldField) { if (! isset($newTypeFields[$fieldName])) { continue; } foreach ($oldField->args as $oldArgDef) { $newArgDef = null; foreach ($newTypeFields[$fieldName]->args as $newArg) { if ($newArg->name === $oldArgDef->name) { $newArgDef = $newArg; } } if ($newArgDef !== null) { $isSafe = self::isChangeSafeForInputObjectFieldOrFieldArg( $oldArgDef->getType(), $newArgDef->getType() ); $oldArgType = $oldArgDef->getType(); $oldArgName = $oldArgDef->name; if (! $isSafe) { $newArgType = $newArgDef->getType(); $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_ARG_CHANGED_KIND, 'description' => "{$typeName}.{$fieldName} arg {$oldArgName} has changed type from {$oldArgType} to {$newArgType}", ]; } elseif ($oldArgDef->defaultValueExists() && $oldArgDef->defaultValue !== $newArgDef->defaultValue) { $dangerousChanges[] = [ 'type' => self::DANGEROUS_CHANGE_ARG_DEFAULT_VALUE_CHANGED, 'description' => "{$typeName}.{$fieldName} arg {$oldArgName} has changed defaultValue", ]; } } else { $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_ARG_REMOVED, 'description' => "{$typeName}.{$fieldName} arg {$oldArgDef->name} was removed", ]; } // Check if arg was added to the field foreach ($newTypeFields[$fieldName]->args as $newTypeFieldArgDef) { $oldArgDef = null; foreach ($oldTypeFields[$fieldName]->args as $oldArg) { if ($oldArg->name === $newTypeFieldArgDef->name) { $oldArgDef = $oldArg; } } if ($oldArgDef !== null) { continue; } $newTypeName = $newType->name; $newArgName = $newTypeFieldArgDef->name; if ($newTypeFieldArgDef->isRequired()) { $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_REQUIRED_ARG_ADDED, 'description' => "A required arg {$newArgName} on {$newTypeName}.{$fieldName} was added", ]; } else { $dangerousChanges[] = [ 'type' => self::DANGEROUS_CHANGE_OPTIONAL_ARG_ADDED, 'description' => "An optional arg {$newArgName} on {$newTypeName}.{$fieldName} was added", ]; } } } } } return [ 'breakingChanges' => $breakingChanges, 'dangerousChanges' => $dangerousChanges, ]; } /** * @throws InvariantViolation * * @return array<int, Change> */ public static function findInterfacesRemovedFromObjectTypes( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $breakingChanges = []; foreach ($oldTypeMap as $typeName => $oldType) { $newType = $newTypeMap[$typeName] ?? null; if (! ($oldType instanceof ImplementingType) || ! ($newType instanceof ImplementingType)) { continue; } $oldInterfaces = $oldType->getInterfaces(); $newInterfaces = $newType->getInterfaces(); foreach ($oldInterfaces as $oldInterface) { $interfaceWasRemoved = true; foreach ($newInterfaces as $newInterface) { if ($oldInterface->name === $newInterface->name) { $interfaceWasRemoved = false; } } if ($interfaceWasRemoved) { $breakingChanges[] = [ 'type' => self::BREAKING_CHANGE_IMPLEMENTED_INTERFACE_REMOVED, 'description' => "{$typeName} no longer implements interface {$oldInterface->name}.", ]; } } } return $breakingChanges; } /** * @throws InvariantViolation * * @return array<int, Change> */ public static function findRemovedDirectives(Schema $oldSchema, Schema $newSchema): array { $removedDirectives = []; $newSchemaDirectiveMap = self::getDirectiveMapForSchema($newSchema); foreach ($oldSchema->getDirectives() as $directive) { if (! isset($newSchemaDirectiveMap[$directive->name])) { $removedDirectives[] = [ 'type' => self::BREAKING_CHANGE_DIRECTIVE_REMOVED, 'description' => "{$directive->name} was removed", ]; } } return $removedDirectives; } /** * @throws InvariantViolation * * @return array<string, Directive> */ private static function getDirectiveMapForSchema(Schema $schema): array { $directives = []; foreach ($schema->getDirectives() as $directive) { $directives[$directive->name] = $directive; } return $directives; } /** * @throws InvariantViolation * * @return array<int, Change> */ public static function findRemovedDirectiveArgs(Schema $oldSchema, Schema $newSchema): array { $removedDirectiveArgs = []; $oldSchemaDirectiveMap = self::getDirectiveMapForSchema($oldSchema); foreach ($newSchema->getDirectives() as $newDirective) { if (! isset($oldSchemaDirectiveMap[$newDirective->name])) { continue; } foreach ( self::findRemovedArgsForDirectives( $oldSchemaDirectiveMap[$newDirective->name], $newDirective ) as $arg ) { $removedDirectiveArgs[] = [ 'type' => self::BREAKING_CHANGE_DIRECTIVE_ARG_REMOVED, 'description' => "{$arg->name} was removed from {$newDirective->name}", ]; } } return $removedDirectiveArgs; } /** @return array<int, Argument> */ public static function findRemovedArgsForDirectives(Directive $oldDirective, Directive $newDirective): array { $removedArgs = []; $newArgMap = self::getArgumentMapForDirective($newDirective); foreach ($oldDirective->args as $arg) { if (! isset($newArgMap[$arg->name])) { $removedArgs[] = $arg; } } return $removedArgs; } /** @return array<string, Argument> */ private static function getArgumentMapForDirective(Directive $directive): array { $args = []; foreach ($directive->args as $arg) { $args[$arg->name] = $arg; } return $args; } /** * @throws InvariantViolation * * @return array<int, Change> */ public static function findAddedNonNullDirectiveArgs(Schema $oldSchema, Schema $newSchema): array { $addedNonNullableArgs = []; $oldSchemaDirectiveMap = self::getDirectiveMapForSchema($oldSchema); foreach ($newSchema->getDirectives() as $newDirective) { if (! isset($oldSchemaDirectiveMap[$newDirective->name])) { continue; } foreach ( self::findAddedArgsForDirective( $oldSchemaDirectiveMap[$newDirective->name], $newDirective ) as $arg ) { if ($arg->isRequired()) { $addedNonNullableArgs[] = [ 'type' => self::BREAKING_CHANGE_REQUIRED_DIRECTIVE_ARG_ADDED, 'description' => "A required arg {$arg->name} on directive {$newDirective->name} was added", ]; } } } return $addedNonNullableArgs; } /** @return array<int, Argument> */ public static function findAddedArgsForDirective(Directive $oldDirective, Directive $newDirective): array { $addedArgs = []; $oldArgMap = self::getArgumentMapForDirective($oldDirective); foreach ($newDirective->args as $arg) { if (! isset($oldArgMap[$arg->name])) { $addedArgs[] = $arg; } } return $addedArgs; } /** * @throws InvariantViolation * * @return array<int, Change> */ public static function findRemovedDirectiveLocations(Schema $oldSchema, Schema $newSchema): array { $removedLocations = []; $oldSchemaDirectiveMap = self::getDirectiveMapForSchema($oldSchema); foreach ($newSchema->getDirectives() as $newDirective) { if (! isset($oldSchemaDirectiveMap[$newDirective->name])) { continue; } foreach ( self::findRemovedLocationsForDirective( $oldSchemaDirectiveMap[$newDirective->name], $newDirective ) as $location ) { $removedLocations[] = [ 'type' => self::BREAKING_CHANGE_DIRECTIVE_LOCATION_REMOVED, 'description' => "{$location} was removed from {$newDirective->name}", ]; } } return $removedLocations; } /** @return array<int, string> */ public static function findRemovedLocationsForDirective(Directive $oldDirective, Directive $newDirective): array { $removedLocations = []; $newLocationSet = array_flip($newDirective->locations); foreach ($oldDirective->locations as $oldLocation) { if (! array_key_exists($oldLocation, $newLocationSet)) { $removedLocations[] = $oldLocation; } } return $removedLocations; } /** * Given two schemas, returns an Array containing descriptions of all the types * of potentially dangerous changes covered by the other functions down below. * * @throws InvariantViolation * * @return array<int, Change> */ public static function findDangerousChanges(Schema $oldSchema, Schema $newSchema): array { return array_merge( self::findArgChanges($oldSchema, $newSchema)['dangerousChanges'], self::findValuesAddedToEnums($oldSchema, $newSchema), self::findInterfacesAddedToObjectTypes($oldSchema, $newSchema), self::findTypesAddedToUnions($oldSchema, $newSchema), self::findFieldsThatChangedTypeOnInputObjectTypes($oldSchema, $newSchema)['dangerousChanges'] ); } /** * Given two schemas, returns an Array containing descriptions of any dangerous * changes in the newSchema related to adding values to an enum type. * * @throws InvariantViolation * * @return array<int, Change> */ public static function findValuesAddedToEnums( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $valuesAddedToEnums = []; foreach ($oldTypeMap as $typeName => $oldType) { $newType = $newTypeMap[$typeName] ?? null; if (! ($oldType instanceof EnumType) || ! ($newType instanceof EnumType)) { continue; } $valuesInOldEnum = []; foreach ($oldType->getValues() as $value) { $valuesInOldEnum[$value->name] = true; } foreach ($newType->getValues() as $value) { if (! isset($valuesInOldEnum[$value->name])) { $valuesAddedToEnums[] = [ 'type' => self::DANGEROUS_CHANGE_VALUE_ADDED_TO_ENUM, 'description' => "{$value->name} was added to enum type {$typeName}.", ]; } } } return $valuesAddedToEnums; } /** * @throws InvariantViolation * * @return array<int, Change> */ public static function findInterfacesAddedToObjectTypes( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $interfacesAddedToObjectTypes = []; foreach ($newTypeMap as $typeName => $newType) { $oldType = $oldTypeMap[$typeName] ?? null; if ( ! $oldType instanceof ObjectType && ! $oldType instanceof InterfaceType || ! $newType instanceof ObjectType && ! $newType instanceof InterfaceType ) { continue; } $oldInterfaces = $oldType->getInterfaces(); $newInterfaces = $newType->getInterfaces(); foreach ($newInterfaces as $newInterface) { $interfaceWasAdded = true; foreach ($oldInterfaces as $oldInterface) { if ($oldInterface->name === $newInterface->name) { $interfaceWasAdded = false; } } if ($interfaceWasAdded) { $interfacesAddedToObjectTypes[] = [ 'type' => self::DANGEROUS_CHANGE_IMPLEMENTED_INTERFACE_ADDED, 'description' => "{$newInterface->name} added to interfaces implemented by {$typeName}.", ]; } } } return $interfacesAddedToObjectTypes; } /** * Given two schemas, returns an Array containing descriptions of any dangerous * changes in the newSchema related to adding types to a union type. * * @throws InvariantViolation * * @return array<int, Change> */ public static function findTypesAddedToUnions( Schema $oldSchema, Schema $newSchema ): array { $oldTypeMap = $oldSchema->getTypeMap(); $newTypeMap = $newSchema->getTypeMap(); $typesAddedToUnion = []; foreach ($newTypeMap as $typeName => $newType) { $oldType = $oldTypeMap[$typeName] ?? null; if (! ($oldType instanceof UnionType) || ! ($newType instanceof UnionType)) { continue; } $typeNamesInOldUnion = []; foreach ($oldType->getTypes() as $type) { $typeNamesInOldUnion[$type->name] = true; } foreach ($newType->getTypes() as $type) { if (! isset($typeNamesInOldUnion[$type->name])) { $typesAddedToUnion[] = [ 'type' => self::DANGEROUS_CHANGE_TYPE_ADDED_TO_UNION, 'description' => "{$type->name} was added to union type {$typeName}.", ]; } } } return $typesAddedToUnion; } } graphql/lib/Utils/PairSet.php000064400000002462151666572110012146 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; /** * A way to keep track of pairs of things when the ordering of the pair does * not matter. We do this by maintaining a sort of double adjacency sets. */ class PairSet { /** @var array<string, array<string, bool>> */ private array $data = []; public function has(string $a, string $b, bool $areMutuallyExclusive): bool { $first = $this->data[$a] ?? null; $result = $first !== null && isset($first[$b]) ? $first[$b] : null; if ($result === null) { return false; } // areMutuallyExclusive being false is a superset of being true, // hence if we want to know if this PairSet "has" these two with no // exclusivity, we have to ensure it was added as such. if ($areMutuallyExclusive === false) { return $result === false; } return true; } public function add(string $a, string $b, bool $areMutuallyExclusive): void { $this->pairSetAdd($a, $b, $areMutuallyExclusive); $this->pairSetAdd($b, $a, $areMutuallyExclusive); } private function pairSetAdd(string $a, string $b, bool $areMutuallyExclusive): void { $this->data[$a] ??= []; $this->data[$a][$b] = $areMutuallyExclusive; } } graphql/lib/Utils/TypeComparators.php000064400000006001151666572110013724 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Type\Definition\ImplementingType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Schema; class TypeComparators { /** Provided two types, return true if the types are equal (invariant). */ public static function isEqualType(Type $typeA, Type $typeB): bool { // Equivalent types are equal. if ($typeA === $typeB) { return true; } // If either type is non-null, the other must also be non-null. if ($typeA instanceof NonNull && $typeB instanceof NonNull) { return self::isEqualType($typeA->getWrappedType(), $typeB->getWrappedType()); } // If either type is a list, the other must also be a list. if ($typeA instanceof ListOfType && $typeB instanceof ListOfType) { return self::isEqualType($typeA->getWrappedType(), $typeB->getWrappedType()); } // Otherwise the types are not equal. return false; } /** * Provided a type and a super type, return true if the first type is either * equal or a subset of the second super type (covariant). * * @throws InvariantViolation */ public static function isTypeSubTypeOf(Schema $schema, Type $maybeSubType, Type $superType): bool { // Equivalent type is a valid subtype if ($maybeSubType === $superType) { return true; } // If superType is non-null, maybeSubType must also be nullable. if ($superType instanceof NonNull) { if ($maybeSubType instanceof NonNull) { return self::isTypeSubTypeOf($schema, $maybeSubType->getWrappedType(), $superType->getWrappedType()); } return false; } if ($maybeSubType instanceof NonNull) { // If superType is nullable, maybeSubType may be non-null. return self::isTypeSubTypeOf($schema, $maybeSubType->getWrappedType(), $superType); } // If superType type is a list, maybeSubType type must also be a list. if ($superType instanceof ListOfType) { if ($maybeSubType instanceof ListOfType) { return self::isTypeSubTypeOf($schema, $maybeSubType->getWrappedType(), $superType->getWrappedType()); } return false; } if ($maybeSubType instanceof ListOfType) { // If superType is not a list, maybeSubType must also be not a list. return false; } if (Type::isAbstractType($superType)) { // If superType type is an abstract type, maybeSubType type may be a currently // possible object or interface type. return $maybeSubType instanceof ImplementingType && $schema->isSubType($superType, $maybeSubType); } return false; } } graphql/lib/Utils/BuildSchema.php000064400000022727151666572110012765 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Error\SyntaxError; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeExtensionNode; use YOOtheme\GraphQL\Language\Parser; use YOOtheme\GraphQL\Language\Source; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Type\SchemaConfig; use YOOtheme\GraphQL\Validator\DocumentValidator; /** * Build instance of @see \GraphQL\Type\Schema out of schema language definition (string or parsed AST). * * See [schema definition language docs](schema-definition-language.md) for details. * * @phpstan-import-type TypeConfigDecorator from ASTDefinitionBuilder * @phpstan-import-type FieldConfigDecorator from ASTDefinitionBuilder * * @phpstan-type BuildSchemaOptions array{ * assumeValid?: bool, * assumeValidSDL?: bool * } * * - assumeValid: * When building a schema from a GraphQL service's introspection result, it * might be safe to assume the schema is valid. Set to true to assume the * produced schema is valid. * * Default: false * * - assumeValidSDL: * Set to true to assume the SDL is valid. * * Default: false * * @see \GraphQL\Tests\Utils\BuildSchemaTest */ class BuildSchema { private DocumentNode $ast; /** * @var callable|null * * @phpstan-var TypeConfigDecorator|null */ private $typeConfigDecorator; /** * @var callable|null * * @phpstan-var FieldConfigDecorator|null */ private $fieldConfigDecorator; /** * @var array<string, bool> * * @phpstan-var BuildSchemaOptions */ private array $options; /** * @param array<string, bool> $options * * @phpstan-param TypeConfigDecorator|null $typeConfigDecorator * @phpstan-param BuildSchemaOptions $options */ public function __construct( DocumentNode $ast, ?callable $typeConfigDecorator = null, array $options = [], ?callable $fieldConfigDecorator = null ) { $this->ast = $ast; $this->typeConfigDecorator = $typeConfigDecorator; $this->options = $options; $this->fieldConfigDecorator = $fieldConfigDecorator; } /** * A helper function to build a GraphQLSchema directly from a source * document. * * @param DocumentNode|Source|string $source * @param array<string, bool> $options * * @phpstan-param TypeConfigDecorator|null $typeConfigDecorator * @phpstan-param FieldConfigDecorator|null $fieldConfigDecorator * @phpstan-param BuildSchemaOptions $options * * @api * * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation * @throws SyntaxError */ public static function build( $source, ?callable $typeConfigDecorator = null, array $options = [], ?callable $fieldConfigDecorator = null ): Schema { $doc = $source instanceof DocumentNode ? $source : Parser::parse($source); return self::buildAST($doc, $typeConfigDecorator, $options, $fieldConfigDecorator); } /** * This takes the AST of a schema from @see \GraphQL\Language\Parser::parse(). * * If no schema definition is provided, then it will look for types named Query and Mutation. * * Given that AST it constructs a @see \GraphQL\Type\Schema. The resulting schema * has no resolve methods, so execution will use default resolvers. * * @param array<string, bool> $options * * @phpstan-param TypeConfigDecorator|null $typeConfigDecorator * @phpstan-param FieldConfigDecorator|null $fieldConfigDecorator * @phpstan-param BuildSchemaOptions $options * * @api * * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation */ public static function buildAST( DocumentNode $ast, ?callable $typeConfigDecorator = null, array $options = [], ?callable $fieldConfigDecorator = null ): Schema { return (new self($ast, $typeConfigDecorator, $options, $fieldConfigDecorator))->buildSchema(); } /** * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation */ public function buildSchema(): Schema { if ( ! ($this->options['assumeValid'] ?? false) && ! ($this->options['assumeValidSDL'] ?? false) ) { DocumentValidator::assertValidSDL($this->ast); } $schemaDef = null; /** @var array<string, Node&TypeDefinitionNode> */ $typeDefinitionsMap = []; /** @var array<string, array<int, Node&TypeExtensionNode>> $typeExtensionsMap */ $typeExtensionsMap = []; /** @var array<int, DirectiveDefinitionNode> $directiveDefs */ $directiveDefs = []; foreach ($this->ast->definitions as $definition) { switch (true) { case $definition instanceof SchemaDefinitionNode: $schemaDef = $definition; break; case $definition instanceof TypeDefinitionNode: $name = $definition->getName()->value; $typeDefinitionsMap[$name] = $definition; break; case $definition instanceof TypeExtensionNode: $name = $definition->getName()->value; $typeExtensionsMap[$name][] = $definition; break; case $definition instanceof DirectiveDefinitionNode: $directiveDefs[] = $definition; break; } } $operationTypes = $schemaDef !== null ? $this->getOperationTypes($schemaDef) : [ 'query' => 'Query', 'mutation' => 'Mutation', 'subscription' => 'Subscription', ]; $definitionBuilder = new ASTDefinitionBuilder( $typeDefinitionsMap, $typeExtensionsMap, // @phpstan-ignore-next-line TODO add union type when available static function (string $typeName): Type { throw self::unknownType($typeName); }, $this->typeConfigDecorator, $this->fieldConfigDecorator ); $directives = array_map( [$definitionBuilder, 'buildDirective'], $directiveDefs ); $directivesByName = []; foreach ($directives as $directive) { $directivesByName[$directive->name][] = $directive; } // If specified directives were not explicitly declared, add them. if (! isset($directivesByName['include'])) { $directives[] = Directive::includeDirective(); } if (! isset($directivesByName['skip'])) { $directives[] = Directive::skipDirective(); } if (! isset($directivesByName['deprecated'])) { $directives[] = Directive::deprecatedDirective(); } if (! isset($directivesByName['oneOf'])) { $directives[] = Directive::oneOfDirective(); } // Note: While this could make early assertions to get the correctly // typed values below, that would throw immediately while type system // validation with validateSchema() will produce more actionable results. return new Schema( (new SchemaConfig()) // @phpstan-ignore-next-line ->setQuery(isset($operationTypes['query']) ? $definitionBuilder->maybeBuildType($operationTypes['query']) : null) // @phpstan-ignore-next-line ->setMutation(isset($operationTypes['mutation']) ? $definitionBuilder->maybeBuildType($operationTypes['mutation']) : null) // @phpstan-ignore-next-line ->setSubscription(isset($operationTypes['subscription']) ? $definitionBuilder->maybeBuildType($operationTypes['subscription']) : null) ->setTypeLoader(static fn (string $name): ?Type => $definitionBuilder->maybeBuildType($name)) ->setDirectives($directives) ->setAstNode($schemaDef) ->setTypes(fn (): array => array_map( static fn (TypeDefinitionNode $def): Type => $definitionBuilder->buildType($def->getName()->value), $typeDefinitionsMap, )) ); } /** @return array<string, string> */ private function getOperationTypes(SchemaDefinitionNode $schemaDef): array { /** @var array<string, string> $operationTypes */ $operationTypes = []; foreach ($schemaDef->operationTypes as $operationType) { $operationTypes[$operationType->operation] = $operationType->type->name->value; } return $operationTypes; } public static function unknownType(string $typeName): Error { return new Error("Unknown type: \"{$typeName}\"."); } } graphql/lib/Utils/SchemaExtender.php000064400000055566151666572110013513 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\SchemaDefinitionNode; use YOOtheme\GraphQL\Language\AST\SchemaExtensionNode; use YOOtheme\GraphQL\Language\AST\TypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeExtensionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeExtensionNode; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\CustomScalarType; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\ImplementingType; use YOOtheme\GraphQL\Type\Definition\InputObjectField; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Type\Schema; use YOOtheme\GraphQL\Type\SchemaConfig; use YOOtheme\GraphQL\Validator\DocumentValidator; /** * @phpstan-import-type TypeConfigDecorator from ASTDefinitionBuilder * @phpstan-import-type FieldConfigDecorator from ASTDefinitionBuilder * @phpstan-import-type UnnamedArgumentConfig from Argument * @phpstan-import-type UnnamedInputObjectFieldConfig from InputObjectField * * @see \GraphQL\Tests\Utils\SchemaExtenderTest */ class SchemaExtender { /** @var array<string, Type> */ protected array $extendTypeCache = []; /** @var array<string, array<TypeExtensionNode>> */ protected array $typeExtensionsMap = []; protected ASTDefinitionBuilder $astBuilder; /** * @param array<string, bool> $options * * @phpstan-param TypeConfigDecorator|null $typeConfigDecorator * @phpstan-param FieldConfigDecorator|null $fieldConfigDecorator * * @api * * @throws \Exception * @throws InvariantViolation */ public static function extend( Schema $schema, DocumentNode $documentAST, array $options = [], ?callable $typeConfigDecorator = null, ?callable $fieldConfigDecorator = null ): Schema { return (new static())->doExtend($schema, $documentAST, $options, $typeConfigDecorator, $fieldConfigDecorator); } /** * @param array<string, bool> $options * * @phpstan-param TypeConfigDecorator|null $typeConfigDecorator * @phpstan-param FieldConfigDecorator|null $fieldConfigDecorator * * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation */ protected function doExtend( Schema $schema, DocumentNode $documentAST, array $options = [], ?callable $typeConfigDecorator = null, ?callable $fieldConfigDecorator = null ): Schema { if ( ! ($options['assumeValid'] ?? false) && ! ($options['assumeValidSDL'] ?? false) ) { DocumentValidator::assertValidSDLExtension($documentAST, $schema); } /** @var array<string, Node&TypeDefinitionNode> $typeDefinitionMap */ $typeDefinitionMap = []; /** @var array<int, DirectiveDefinitionNode> $directiveDefinitions */ $directiveDefinitions = []; /** @var SchemaDefinitionNode|null $schemaDef */ $schemaDef = null; /** @var array<int, SchemaExtensionNode> $schemaExtensions */ $schemaExtensions = []; foreach ($documentAST->definitions as $def) { if ($def instanceof SchemaDefinitionNode) { $schemaDef = $def; } elseif ($def instanceof SchemaExtensionNode) { $schemaExtensions[] = $def; } elseif ($def instanceof TypeDefinitionNode) { $name = $def->getName()->value; $typeDefinitionMap[$name] = $def; } elseif ($def instanceof TypeExtensionNode) { $name = $def->getName()->value; $this->typeExtensionsMap[$name][] = $def; } elseif ($def instanceof DirectiveDefinitionNode) { $directiveDefinitions[] = $def; } } if ( $this->typeExtensionsMap === [] && $typeDefinitionMap === [] && $directiveDefinitions === [] && $schemaExtensions === [] && $schemaDef === null ) { return $schema; } $this->astBuilder = new ASTDefinitionBuilder( $typeDefinitionMap, [], // @phpstan-ignore-next-line no idea what is wrong here function (string $typeName) use ($schema): Type { $existingType = $schema->getType($typeName); if ($existingType === null) { throw new InvariantViolation("Unknown type: \"{$typeName}\"."); } return $this->extendNamedType($existingType); }, $typeConfigDecorator, $fieldConfigDecorator ); $this->extendTypeCache = []; $types = []; // Iterate through all types, getting the type definition for each, ensuring // that any type not directly referenced by a field will get created. foreach ($schema->getTypeMap() as $type) { $types[] = $this->extendNamedType($type); } // Do the same with new types. foreach ($typeDefinitionMap as $type) { $types[] = $this->astBuilder->buildType($type); } $operationTypes = [ 'query' => $this->extendMaybeNamedType($schema->getQueryType()), 'mutation' => $this->extendMaybeNamedType($schema->getMutationType()), 'subscription' => $this->extendMaybeNamedType($schema->getSubscriptionType()), ]; if ($schemaDef !== null) { foreach ($schemaDef->operationTypes as $operationType) { $operationTypes[$operationType->operation] = $this->astBuilder->buildType($operationType->type); } } foreach ($schemaExtensions as $schemaExtension) { foreach ($schemaExtension->operationTypes as $operationType) { $operationTypes[$operationType->operation] = $this->astBuilder->buildType($operationType->type); } } $schemaConfig = (new SchemaConfig()) // @phpstan-ignore-next-line the root types may be invalid, but just passing them leads to more actionable errors ->setQuery($operationTypes['query']) // @phpstan-ignore-next-line the root types may be invalid, but just passing them leads to more actionable errors ->setMutation($operationTypes['mutation']) // @phpstan-ignore-next-line the root types may be invalid, but just passing them leads to more actionable errors ->setSubscription($operationTypes['subscription']) ->setTypes($types) ->setDirectives($this->getMergedDirectives($schema, $directiveDefinitions)) ->setAstNode($schema->astNode ?? $schemaDef) ->setExtensionASTNodes([...$schema->extensionASTNodes, ...$schemaExtensions]); return new Schema($schemaConfig); } /** * @param Type&NamedType $type * * @return array<TypeExtensionNode>|null */ protected function extensionASTNodes(NamedType $type): ?array { return [ ...$type->extensionASTNodes ?? [], ...$this->typeExtensionsMap[$type->name] ?? [], ]; } /** * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation */ protected function extendScalarType(ScalarType $type): CustomScalarType { /** @var array<ScalarTypeExtensionNode> $extensionASTNodes */ $extensionASTNodes = $this->extensionASTNodes($type); return new CustomScalarType([ 'name' => $type->name, 'description' => $type->description, 'serialize' => [$type, 'serialize'], 'parseValue' => [$type, 'parseValue'], 'parseLiteral' => [$type, 'parseLiteral'], 'astNode' => $type->astNode, 'extensionASTNodes' => $extensionASTNodes, ]); } /** @throws InvariantViolation */ protected function extendUnionType(UnionType $type): UnionType { /** @var array<UnionTypeExtensionNode> $extensionASTNodes */ $extensionASTNodes = $this->extensionASTNodes($type); return new UnionType([ 'name' => $type->name, 'description' => $type->description, 'types' => fn (): array => $this->extendUnionPossibleTypes($type), 'resolveType' => [$type, 'resolveType'], 'astNode' => $type->astNode, 'extensionASTNodes' => $extensionASTNodes, ]); } /** * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation */ protected function extendEnumType(EnumType $type): EnumType { /** @var array<EnumTypeExtensionNode> $extensionASTNodes */ $extensionASTNodes = $this->extensionASTNodes($type); return new EnumType([ 'name' => $type->name, 'description' => $type->description, 'values' => $this->extendEnumValueMap($type), 'astNode' => $type->astNode, 'extensionASTNodes' => $extensionASTNodes, ]); } /** @throws InvariantViolation */ protected function extendInputObjectType(InputObjectType $type): InputObjectType { /** @var array<InputObjectTypeExtensionNode> $extensionASTNodes */ $extensionASTNodes = $this->extensionASTNodes($type); return new InputObjectType([ 'name' => $type->name, 'description' => $type->description, 'fields' => fn (): array => $this->extendInputFieldMap($type), 'parseValue' => [$type, 'parseValue'], 'astNode' => $type->astNode, 'extensionASTNodes' => $extensionASTNodes, 'isOneOf' => $type->isOneOf, ]); } /** * @throws \Exception * @throws InvariantViolation * * @return array<string, UnnamedInputObjectFieldConfig> */ protected function extendInputFieldMap(InputObjectType $type): array { /** @var array<string, UnnamedInputObjectFieldConfig> $newFieldMap */ $newFieldMap = []; $oldFieldMap = $type->getFields(); foreach ($oldFieldMap as $fieldName => $field) { $extendedType = $this->extendType($field->getType()); $newFieldConfig = [ 'description' => $field->description, 'type' => $extendedType, 'deprecationReason' => $field->deprecationReason, 'astNode' => $field->astNode, ]; if ($field->defaultValueExists()) { $newFieldConfig['defaultValue'] = $field->defaultValue; } $newFieldMap[$fieldName] = $newFieldConfig; } if (isset($this->typeExtensionsMap[$type->name])) { foreach ($this->typeExtensionsMap[$type->name] as $extension) { assert($extension instanceof InputObjectTypeExtensionNode, 'proven by schema validation'); foreach ($extension->fields as $field) { $newFieldMap[$field->name->value] = $this->astBuilder->buildInputField($field); } } } return $newFieldMap; } /** * @throws \Exception * @throws InvariantViolation * * @return array<string, array<string, mixed>> */ protected function extendEnumValueMap(EnumType $type): array { $newValueMap = []; foreach ($type->getValues() as $value) { $newValueMap[$value->name] = [ 'name' => $value->name, 'description' => $value->description, 'value' => $value->value, 'deprecationReason' => $value->deprecationReason, 'astNode' => $value->astNode, ]; } if (isset($this->typeExtensionsMap[$type->name])) { foreach ($this->typeExtensionsMap[$type->name] as $extension) { assert($extension instanceof EnumTypeExtensionNode, 'proven by schema validation'); foreach ($extension->values as $value) { $newValueMap[$value->name->value] = $this->astBuilder->buildEnumValue($value); } } } return $newValueMap; } /** * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation * * @return array<int, ObjectType> */ protected function extendUnionPossibleTypes(UnionType $type): array { $possibleTypes = array_map( [$this, 'extendNamedType'], $type->getTypes() ); if (isset($this->typeExtensionsMap[$type->name])) { foreach ($this->typeExtensionsMap[$type->name] as $extension) { assert($extension instanceof UnionTypeExtensionNode, 'proven by schema validation'); foreach ($extension->types as $namedType) { $possibleTypes[] = $this->astBuilder->buildType($namedType); } } } // @phpstan-ignore-next-line proven by schema validation return $possibleTypes; } /** * @param ObjectType|InterfaceType $type * * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation * * @return array<int, InterfaceType> */ protected function extendImplementedInterfaces(ImplementingType $type): array { $interfaces = array_map( [$this, 'extendNamedType'], $type->getInterfaces() ); if (isset($this->typeExtensionsMap[$type->name])) { foreach ($this->typeExtensionsMap[$type->name] as $extension) { assert( $extension instanceof ObjectTypeExtensionNode || $extension instanceof InterfaceTypeExtensionNode, 'proven by schema validation' ); foreach ($extension->interfaces as $namedType) { $interface = $this->astBuilder->buildType($namedType); assert($interface instanceof InterfaceType, 'we know this, but PHP templates cannot express it'); $interfaces[] = $interface; } } } return $interfaces; } /** * @template T of Type * * @param T $typeDef * * @return T */ protected function extendType(Type $typeDef): Type { if ($typeDef instanceof ListOfType) { // @phpstan-ignore-next-line PHPStan does not understand this is the same generic type as the input return Type::listOf($this->extendType($typeDef->getWrappedType())); } if ($typeDef instanceof NonNull) { // @phpstan-ignore-next-line PHPStan does not understand this is the same generic type as the input return Type::nonNull($this->extendType($typeDef->getWrappedType())); } // @phpstan-ignore-next-line PHPStan does not understand this is the same generic type as the input return $this->extendNamedType($typeDef); } /** * @param array<Argument> $args * * @return array<string, UnnamedArgumentConfig> */ protected function extendArgs(array $args): array { $extended = []; foreach ($args as $arg) { $extendedType = $this->extendType($arg->getType()); $def = [ 'type' => $extendedType, 'description' => $arg->description, 'deprecationReason' => $arg->deprecationReason, 'astNode' => $arg->astNode, ]; if ($arg->defaultValueExists()) { $def['defaultValue'] = $arg->defaultValue; } $extended[$arg->name] = $def; } return $extended; } /** * @param InterfaceType|ObjectType $type * * @throws \Exception * @throws Error * @throws InvariantViolation * * @return array<string, array<string, mixed>> */ protected function extendFieldMap(Type $type): array { $newFieldMap = []; $oldFieldMap = $type->getFields(); foreach (array_keys($oldFieldMap) as $fieldName) { $field = $oldFieldMap[$fieldName]; $newFieldMap[$fieldName] = [ 'name' => $fieldName, 'description' => $field->description, 'deprecationReason' => $field->deprecationReason, 'type' => $this->extendType($field->getType()), 'args' => $this->extendArgs($field->args), 'resolve' => $field->resolveFn, 'argsMapper' => $field->argsMapper, 'astNode' => $field->astNode, ]; } if (isset($this->typeExtensionsMap[$type->name])) { foreach ($this->typeExtensionsMap[$type->name] as $extension) { assert( $extension instanceof ObjectTypeExtensionNode || $extension instanceof InterfaceTypeExtensionNode, 'proven by schema validation' ); foreach ($extension->fields as $field) { $newFieldMap[$field->name->value] = $this->astBuilder->buildField($field, $extension); } } } return $newFieldMap; } /** @throws InvariantViolation */ protected function extendObjectType(ObjectType $type): ObjectType { /** @var array<ObjectTypeExtensionNode> $extensionASTNodes */ $extensionASTNodes = $this->extensionASTNodes($type); return new ObjectType([ 'name' => $type->name, 'description' => $type->description, 'interfaces' => fn (): array => $this->extendImplementedInterfaces($type), 'fields' => fn (): array => $this->extendFieldMap($type), 'isTypeOf' => [$type, 'isTypeOf'], 'resolveField' => $type->resolveFieldFn, 'argsMapper' => $type->argsMapper, 'astNode' => $type->astNode, 'extensionASTNodes' => $extensionASTNodes, ]); } /** @throws InvariantViolation */ protected function extendInterfaceType(InterfaceType $type): InterfaceType { /** @var array<InterfaceTypeExtensionNode> $extensionASTNodes */ $extensionASTNodes = $this->extensionASTNodes($type); return new InterfaceType([ 'name' => $type->name, 'description' => $type->description, 'interfaces' => fn (): array => $this->extendImplementedInterfaces($type), 'fields' => fn (): array => $this->extendFieldMap($type), 'resolveType' => [$type, 'resolveType'], 'astNode' => $type->astNode, 'extensionASTNodes' => $extensionASTNodes, ]); } protected function isSpecifiedScalarType(Type $type): bool { return $type instanceof NamedType && ( $type->name === Type::STRING || $type->name === Type::INT || $type->name === Type::FLOAT || $type->name === Type::BOOLEAN || $type->name === Type::ID ); } /** * @template T of Type * * @param T&NamedType $type * * @throws \ReflectionException * @throws InvariantViolation * * @return T&NamedType */ protected function extendNamedType(Type $type): Type { if (Introspection::isIntrospectionType($type) || $this->isSpecifiedScalarType($type)) { return $type; } // @phpstan-ignore-next-line the subtypes line up return $this->extendTypeCache[$type->name] ??= $this->extendNamedTypeWithoutCache($type); } /** @throws \Exception */ protected function extendNamedTypeWithoutCache(Type $type): Type { switch (true) { case $type instanceof ScalarType: return $this->extendScalarType($type); case $type instanceof ObjectType: return $this->extendObjectType($type); case $type instanceof InterfaceType: return $this->extendInterfaceType($type); case $type instanceof UnionType: return $this->extendUnionType($type); case $type instanceof EnumType: return $this->extendEnumType($type); case $type instanceof InputObjectType: return $this->extendInputObjectType($type); default: $unconsideredType = get_class($type); throw new \Exception("Unconsidered type: {$unconsideredType}."); } } /** * @template T of Type * * @param (T&NamedType)|null $type * * @throws \ReflectionException * @throws InvariantViolation * * @return (T&NamedType)|null */ protected function extendMaybeNamedType(?Type $type = null): ?Type { if ($type !== null) { return $this->extendNamedType($type); } return null; } /** * @param array<DirectiveDefinitionNode> $directiveDefinitions * * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation * * @return array<int, Directive> */ protected function getMergedDirectives(Schema $schema, array $directiveDefinitions): array { $directives = array_map( [$this, 'extendDirective'], $schema->getDirectives() ); if ($directives === []) { throw new InvariantViolation('Schema must have default directives.'); } foreach ($directiveDefinitions as $directive) { $directives[] = $this->astBuilder->buildDirective($directive); } return $directives; } protected function extendDirective(Directive $directive): Directive { return new Directive([ 'name' => $directive->name, 'description' => $directive->description, 'locations' => $directive->locations, 'args' => $this->extendArgs($directive->args), 'isRepeatable' => $directive->isRepeatable, 'astNode' => $directive->astNode, ]); } } graphql/lib/Utils/InterfaceImplementations.php000064400000001736151666572110015573 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\ObjectType; /** * A way to track interface implementations. * * Distinguishes between implementations by ObjectTypes and InterfaceTypes. */ class InterfaceImplementations { /** @var array<int, ObjectType> */ private $objects; /** @var array<int, InterfaceType> */ private $interfaces; /** * @param array<int, ObjectType> $objects * @param array<int, InterfaceType> $interfaces */ public function __construct(array $objects, array $interfaces) { $this->objects = $objects; $this->interfaces = $interfaces; } /** @return array<int, ObjectType> */ public function objects(): array { return $this->objects; } /** @return array<int, InterfaceType> */ public function interfaces(): array { return $this->interfaces; } } graphql/lib/Utils/SchemaPrinter.php000064400000044054151666572110013346 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\StringValueNode; use YOOtheme\GraphQL\Language\BlockString; use YOOtheme\GraphQL\Language\Printer; use YOOtheme\GraphQL\Type\Definition\Argument; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\EnumValueDefinition; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\ImplementingType; use YOOtheme\GraphQL\Type\Definition\InputObjectField; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; use YOOtheme\GraphQL\Type\Introspection; use YOOtheme\GraphQL\Type\Schema; /** * Prints the contents of a Schema in schema definition language. * * All sorting options sort alphabetically. If not given or `false`, the original schema definition order will be used. * * @phpstan-type Options array{ * sortArguments?: bool, * sortEnumValues?: bool, * sortFields?: bool, * sortInputFields?: bool, * sortTypes?: bool, * } * * @see \GraphQL\Tests\Utils\SchemaPrinterTest */ class SchemaPrinter { /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @api * * @throws \JsonException * @throws Error * @throws InvariantViolation * @throws SerializationError */ public static function doPrint(Schema $schema, array $options = []): string { return static::printFilteredSchema( $schema, static fn (Directive $directive): bool => ! Directive::isSpecifiedDirective($directive), static fn (NamedType $type): bool => ! $type->isBuiltInType(), $options ); } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @api * * @throws \JsonException * @throws Error * @throws InvariantViolation * @throws SerializationError */ public static function printIntrospectionSchema(Schema $schema, array $options = []): string { return static::printFilteredSchema( $schema, [Directive::class, 'isSpecifiedDirective'], [Introspection::class, 'isIntrospectionType'], $options ); } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException * @throws Error * @throws InvariantViolation * @throws SerializationError */ public static function printType(Type $type, array $options = []): string { if ($type instanceof ScalarType) { return static::printScalar($type, $options); } if ($type instanceof ObjectType) { return static::printObject($type, $options); } if ($type instanceof InterfaceType) { return static::printInterface($type, $options); } if ($type instanceof UnionType) { return static::printUnion($type, $options); } if ($type instanceof EnumType) { return static::printEnum($type, $options); } if ($type instanceof InputObjectType) { return static::printInputObject($type, $options); } $unknownType = Utils::printSafe($type); throw new Error("Unknown type: {$unknownType}."); } /** * @param callable(Directive $directive): bool $directiveFilter * @param callable(Type&NamedType $type): bool $typeFilter * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException * @throws Error * @throws InvariantViolation * @throws SerializationError */ protected static function printFilteredSchema(Schema $schema, callable $directiveFilter, callable $typeFilter, array $options): string { $directives = array_filter($schema->getDirectives(), $directiveFilter); $types = array_filter($schema->getTypeMap(), $typeFilter); if (isset($options['sortTypes']) && $options['sortTypes']) { ksort($types); } $elements = [static::printSchemaDefinition($schema)]; foreach ($directives as $directive) { $elements[] = static::printDirective($directive, $options); } foreach ($types as $type) { $elements[] = static::printType($type, $options); } /** @phpstan-ignore arrayFilter.strict */ return implode("\n\n", array_filter($elements)) . "\n"; } /** @throws InvariantViolation */ protected static function printSchemaDefinition(Schema $schema): ?string { $queryType = $schema->getQueryType(); $mutationType = $schema->getMutationType(); $subscriptionType = $schema->getSubscriptionType(); // Special case: When a schema has no root operation types, no valid schema // definition can be printed. if ($queryType === null && $mutationType === null && $subscriptionType === null) { return null; } // TODO add condition for schema.description // Only print a schema definition if there is a description or if it should // not be omitted because of having default type names. if (! static::hasDefaultRootOperationTypes($schema)) { return "schema {\n" . ($queryType !== null ? " query: {$queryType->name}\n" : '') . ($mutationType !== null ? " mutation: {$mutationType->name}\n" : '') . ($subscriptionType !== null ? " subscription: {$subscriptionType->name}\n" : '') . '}'; } return null; } /** * GraphQL schema define root types for each type of operation. These types are * the same as any other type and can be named in any manner, however there is * a common naming convention:. * * ```graphql * schema { * query: Query * mutation: Mutation * subscription: Subscription * } * ``` * * When using this naming convention, the schema description can be omitted. * When using this naming convention, the schema description can be omitted so * long as these names are only used for operation types. * * Note however that if any of these default names are used elsewhere in the * schema but not as a root operation type, the schema definition must still * be printed to avoid ambiguity. * * @throws InvariantViolation */ protected static function hasDefaultRootOperationTypes(Schema $schema): bool { return $schema->getQueryType() === $schema->getType('Query') && $schema->getMutationType() === $schema->getType('Mutation') && $schema->getSubscriptionType() === $schema->getType('Subscription'); } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printDirective(Directive $directive, array $options): string { return static::printDescription($options, $directive) . 'directive @' . $directive->name . static::printArgs($options, $directive->args) . ($directive->isRepeatable ? ' repeatable' : '') . ' on ' . implode(' | ', $directive->locations); } /** * @param array<string, bool> $options * @param (Type&NamedType)|Directive|EnumValueDefinition|Argument|FieldDefinition|InputObjectField $def * * @throws \JsonException */ protected static function printDescription(array $options, $def, string $indentation = '', bool $firstInBlock = true): string { $description = $def->description; if ($description === null) { return ''; } $prefix = $indentation !== '' && ! $firstInBlock ? "\n{$indentation}" : $indentation; if (count(Utils::splitLines($description)) === 1) { $description = json_encode($description, JSON_THROW_ON_ERROR | JSON_UNESCAPED_UNICODE); } else { $description = BlockString::print($description); $description = $indentation !== '' ? str_replace("\n", "\n{$indentation}", $description) : $description; } return "{$prefix}{$description}\n"; } /** * @param array<string, bool> $options * @param array<int, Argument> $args * * @phpstan-param Options $options * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printArgs(array $options, array $args, string $indentation = ''): string { if ($args === []) { return ''; } if (isset($options['sortArguments']) && $options['sortArguments']) { usort($args, static fn (Argument $left, Argument $right): int => $left->name <=> $right->name); } $allArgsWithoutDescription = true; foreach ($args as $arg) { $description = $arg->description; if ($description !== null && $description !== '') { $allArgsWithoutDescription = false; break; } } if ($allArgsWithoutDescription) { return '(' . implode( ', ', array_map( [static::class, 'printInputValue'], $args ) ) . ')'; } $argsStrings = []; $firstInBlock = true; $previousHasDescription = false; foreach ($args as $arg) { $hasDescription = $arg->description !== null; if ($previousHasDescription && ! $hasDescription) { $argsStrings[] = ''; } $argsStrings[] = static::printDescription($options, $arg, ' ' . $indentation, $firstInBlock) . ' ' . $indentation . static::printInputValue($arg); $firstInBlock = false; $previousHasDescription = $hasDescription; } return "(\n" . implode("\n", $argsStrings) . "\n" . $indentation . ')'; } /** * @param InputObjectField|Argument $arg * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printInputValue($arg): string { $argDecl = "{$arg->name}: {$arg->getType()->toString()}"; if ($arg->defaultValueExists()) { $defaultValueAST = AST::astFromValue($arg->defaultValue, $arg->getType()); if ($defaultValueAST === null) { $inconvertibleDefaultValue = Utils::printSafe($arg->defaultValue); throw new InvariantViolation("Unable to convert defaultValue of argument {$arg->name} into AST: {$inconvertibleDefaultValue}."); } $printedDefaultValue = Printer::doPrint($defaultValueAST); $argDecl .= " = {$printedDefaultValue}"; } return $argDecl . static::printDeprecated($arg); } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException */ protected static function printScalar(ScalarType $type, array $options): string { return static::printDescription($options, $type) . "scalar {$type->name}"; } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printObject(ObjectType $type, array $options): string { return static::printDescription($options, $type) . "type {$type->name}" . static::printImplementedInterfaces($type) . static::printFields($options, $type); } /** * @param array<string, bool> $options * @param ObjectType|InterfaceType $type * * @phpstan-param Options $options * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printFields(array $options, $type): string { $fields = []; $firstInBlock = true; $previousHasDescription = false; $fieldDefinitions = $type->getFields(); if (isset($options['sortFields']) && $options['sortFields']) { ksort($fieldDefinitions); } foreach ($fieldDefinitions as $f) { $hasDescription = $f->description !== null; if ($previousHasDescription && ! $hasDescription) { $fields[] = ''; } $fields[] = static::printDescription($options, $f, ' ', $firstInBlock) . ' ' . $f->name . static::printArgs($options, $f->args, ' ') . ': ' . $f->getType()->toString() . static::printDeprecated($f); $firstInBlock = false; $previousHasDescription = $hasDescription; } return static::printBlock($fields); } /** * @param FieldDefinition|EnumValueDefinition|InputObjectField|Argument $deprecation * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printDeprecated($deprecation): string { $reason = $deprecation->deprecationReason; if ($reason === null) { return ''; } if ($reason === '' || $reason === Directive::DEFAULT_DEPRECATION_REASON) { return ' @deprecated'; } $reasonAST = AST::astFromValue($reason, Type::string()); assert($reasonAST instanceof StringValueNode); $reasonASTString = Printer::doPrint($reasonAST); return " @deprecated(reason: {$reasonASTString})"; } protected static function printImplementedInterfaces(ImplementingType $type): string { $interfaces = $type->getInterfaces(); return $interfaces === [] ? '' : ' implements ' . implode( ' & ', array_map( static fn (InterfaceType $interface): string => $interface->name, $interfaces ) ); } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printInterface(InterfaceType $type, array $options): string { return static::printDescription($options, $type) . "interface {$type->name}" . static::printImplementedInterfaces($type) . static::printFields($options, $type); } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException * @throws InvariantViolation */ protected static function printUnion(UnionType $type, array $options): string { $types = $type->getTypes(); $types = $types === [] ? '' : ' = ' . implode(' | ', $types); return static::printDescription($options, $type) . 'union ' . $type->name . $types; } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printEnum(EnumType $type, array $options): string { $values = []; $firstInBlock = true; $valueDefinitions = $type->getValues(); if (isset($options['sortEnumValues']) && $options['sortEnumValues']) { usort($valueDefinitions, static fn (EnumValueDefinition $left, EnumValueDefinition $right): int => $left->name <=> $right->name); } foreach ($valueDefinitions as $value) { $values[] = static::printDescription($options, $value, ' ', $firstInBlock) . ' ' . $value->name . static::printDeprecated($value); $firstInBlock = false; } return static::printDescription($options, $type) . "enum {$type->name}" . static::printBlock($values); } /** * @param array<string, bool> $options * * @phpstan-param Options $options * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError */ protected static function printInputObject(InputObjectType $type, array $options): string { $fields = []; $firstInBlock = true; $fieldDefinitions = $type->getFields(); if (isset($options['sortInputFields']) && $options['sortInputFields']) { ksort($fieldDefinitions); } foreach ($fieldDefinitions as $field) { $fields[] = static::printDescription($options, $field, ' ', $firstInBlock) . ' ' . static::printInputValue($field); $firstInBlock = false; } return static::printDescription($options, $type) . "input {$type->name}" . ($type->isOneOf() ? ' @oneOf' : '') . static::printBlock($fields); } /** @param array<string> $items */ protected static function printBlock(array $items): string { return $items === [] ? '' : " {\n" . implode("\n", $items) . "\n}"; } } graphql/lib/Utils/LazyException.php000064400000000562151666572110013374 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; /** * Allows lazy calculation of a complex message when the exception is used in `assert()`. */ class LazyException extends \Exception { /** @param callable(): string $makeMessage */ public function __construct(callable $makeMessage) { parent::__construct($makeMessage()); } } graphql/lib/Utils/ASTDefinitionBuilder.php000064400000055552151666572110014556 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Executor\Values; use YOOtheme\GraphQL\Language\AST\DirectiveDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\EnumTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\EnumValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\FieldDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InputObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\InputValueDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\InterfaceTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\ListTypeNode; use YOOtheme\GraphQL\Language\AST\NamedTypeNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\NonNullTypeNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ObjectTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\ScalarTypeExtensionNode; use YOOtheme\GraphQL\Language\AST\TypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\TypeExtensionNode; use YOOtheme\GraphQL\Language\AST\TypeNode; use YOOtheme\GraphQL\Language\AST\UnionTypeDefinitionNode; use YOOtheme\GraphQL\Language\AST\UnionTypeExtensionNode; use YOOtheme\GraphQL\Type\Definition\CustomScalarType; use YOOtheme\GraphQL\Type\Definition\Directive; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\FieldDefinition; use YOOtheme\GraphQL\Type\Definition\InputObjectField; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InputType; use YOOtheme\GraphQL\Type\Definition\InterfaceType; use YOOtheme\GraphQL\Type\Definition\NamedType; use YOOtheme\GraphQL\Type\Definition\ObjectType; use YOOtheme\GraphQL\Type\Definition\OutputType; use YOOtheme\GraphQL\Type\Definition\Type; use YOOtheme\GraphQL\Type\Definition\UnionType; /** * @see FieldDefinition, InputObjectField * * @phpstan-import-type UnnamedFieldDefinitionConfig from FieldDefinition * @phpstan-import-type InputObjectFieldConfig from InputObjectField * @phpstan-import-type UnnamedInputObjectFieldConfig from InputObjectField * * @phpstan-type ResolveType callable(string, Node|null): Type&NamedType * @phpstan-type TypeConfigDecorator callable(array<string, mixed>, Node&TypeDefinitionNode, array<string, Node&TypeDefinitionNode>): array<string, mixed> * @phpstan-type FieldConfigDecorator callable(UnnamedFieldDefinitionConfig, FieldDefinitionNode, ObjectTypeDefinitionNode|ObjectTypeExtensionNode|InterfaceTypeDefinitionNode|InterfaceTypeExtensionNode): UnnamedFieldDefinitionConfig */ class ASTDefinitionBuilder { /** @var array<string, Node&TypeDefinitionNode> */ private array $typeDefinitionsMap; /** * @var callable * * @phpstan-var ResolveType */ private $resolveType; /** * @var callable|null * * @phpstan-var TypeConfigDecorator|null */ private $typeConfigDecorator; /** * @var callable|null * * @phpstan-var FieldConfigDecorator|null */ private $fieldConfigDecorator; /** @var array<string, Type&NamedType> */ private array $cache; /** @var array<string, array<int, Node&TypeExtensionNode>> */ private array $typeExtensionsMap; /** * @param array<string, Node&TypeDefinitionNode> $typeDefinitionsMap * @param array<string, array<int, Node&TypeExtensionNode>> $typeExtensionsMap * * @phpstan-param ResolveType $resolveType * @phpstan-param TypeConfigDecorator|null $typeConfigDecorator * * @throws InvariantViolation */ public function __construct( array $typeDefinitionsMap, array $typeExtensionsMap, callable $resolveType, ?callable $typeConfigDecorator = null, ?callable $fieldConfigDecorator = null ) { $this->typeDefinitionsMap = $typeDefinitionsMap; $this->typeExtensionsMap = $typeExtensionsMap; $this->resolveType = $resolveType; $this->typeConfigDecorator = $typeConfigDecorator; $this->fieldConfigDecorator = $fieldConfigDecorator; $this->cache = Type::builtInTypes(); } /** @throws \Exception */ public function buildDirective(DirectiveDefinitionNode $directiveNode): Directive { $locations = []; foreach ($directiveNode->locations as $location) { $locations[] = $location->value; } return new Directive([ 'name' => $directiveNode->name->value, 'description' => $directiveNode->description->value ?? null, 'args' => $this->makeInputValues($directiveNode->arguments), 'isRepeatable' => $directiveNode->repeatable, 'locations' => $locations, 'astNode' => $directiveNode, ]); } /** * @param NodeList<InputValueDefinitionNode> $values * * @throws \Exception * * @return array<string, UnnamedInputObjectFieldConfig> */ private function makeInputValues(NodeList $values): array { /** @var array<string, UnnamedInputObjectFieldConfig> $map */ $map = []; foreach ($values as $value) { // Note: While this could make assertions to get the correctly typed // value, that would throw immediately while type system validation // with validateSchema() will produce more actionable results. /** @var Type&InputType $type */ $type = $this->buildWrappedType($value->type); $config = [ 'name' => $value->name->value, 'type' => $type, 'description' => $value->description->value ?? null, 'deprecationReason' => $this->getDeprecationReason($value), 'astNode' => $value, ]; if ($value->defaultValue !== null) { $config['defaultValue'] = AST::valueFromAST($value->defaultValue, $type); } $map[$value->name->value] = $config; } return $map; } /** * @param array<InputObjectTypeDefinitionNode|InputObjectTypeExtensionNode> $nodes * * @throws \Exception * * @return array<string, UnnamedInputObjectFieldConfig> */ private function makeInputFields(array $nodes): array { /** @var array<int, InputValueDefinitionNode> $fields */ $fields = []; foreach ($nodes as $node) { array_push($fields, ...$node->fields); } return $this->makeInputValues(new NodeList($fields)); } /** * @param ListTypeNode|NonNullTypeNode|NamedTypeNode $typeNode * * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation */ private function buildWrappedType(TypeNode $typeNode): Type { if ($typeNode instanceof ListTypeNode) { return Type::listOf($this->buildWrappedType($typeNode->type)); } if ($typeNode instanceof NonNullTypeNode) { // @phpstan-ignore-next-line contained type is NullableType return Type::nonNull($this->buildWrappedType($typeNode->type)); } return $this->buildType($typeNode); } /** * @param string|(Node&NamedTypeNode)|(Node&TypeDefinitionNode) $ref * * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation * * @return Type&NamedType */ public function buildType($ref): Type { if ($ref instanceof TypeDefinitionNode) { return $this->internalBuildType($ref->getName()->value, $ref); } if ($ref instanceof NamedTypeNode) { return $this->internalBuildType($ref->name->value, $ref); } return $this->internalBuildType($ref); } /** * Calling this method is an equivalent of `typeMap[typeName]` in `graphql-js`. * It is legal to access a type from the map of already-built types that doesn't exist in the map. * Since we build types lazily, and we don't have a such map of built types, * this method provides a way to build a type that may not exist in the SDL definitions and returns null instead. * * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation * * @return (Type&NamedType)|null */ public function maybeBuildType(string $name): ?Type { return isset($this->typeDefinitionsMap[$name]) ? $this->buildType($name) : null; } /** * @param (Node&NamedTypeNode)|(Node&TypeDefinitionNode)|null $typeNode * * @throws \Exception * @throws \ReflectionException * @throws Error * @throws InvariantViolation * * @return Type&NamedType */ private function internalBuildType(string $typeName, ?Node $typeNode = null): Type { if (isset($this->cache[$typeName])) { return $this->cache[$typeName]; } if (isset($this->typeDefinitionsMap[$typeName])) { $type = $this->makeSchemaDef($this->typeDefinitionsMap[$typeName]); if ($this->typeConfigDecorator !== null) { try { $config = ($this->typeConfigDecorator)( $type->config, $this->typeDefinitionsMap[$typeName], $this->typeDefinitionsMap ); } catch (\Throwable $e) { $class = static::class; throw new Error("Type config decorator passed to {$class} threw an error when building {$typeName} type: {$e->getMessage()}", null, null, [], null, $e); } // @phpstan-ignore-next-line should not happen, but function types are not enforced by PHP if (! is_array($config) || isset($config[0])) { $class = static::class; $notArray = Utils::printSafe($config); throw new Error("Type config decorator passed to {$class} is expected to return an array, but got {$notArray}"); } $type = $this->makeSchemaDefFromConfig($this->typeDefinitionsMap[$typeName], $config); } return $this->cache[$typeName] = $type; } return $this->cache[$typeName] = ($this->resolveType)($typeName, $typeNode); } /** * @param TypeDefinitionNode&Node $def * * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation * * @return CustomScalarType|EnumType|InputObjectType|InterfaceType|ObjectType|UnionType */ private function makeSchemaDef(Node $def): Type { switch (true) { case $def instanceof ObjectTypeDefinitionNode: return $this->makeTypeDef($def); case $def instanceof InterfaceTypeDefinitionNode: return $this->makeInterfaceDef($def); case $def instanceof EnumTypeDefinitionNode: return $this->makeEnumDef($def); case $def instanceof UnionTypeDefinitionNode: return $this->makeUnionDef($def); case $def instanceof ScalarTypeDefinitionNode: return $this->makeScalarDef($def); default: assert($def instanceof InputObjectTypeDefinitionNode, 'all implementations are known'); return $this->makeInputObjectDef($def); } } /** @throws InvariantViolation */ private function makeTypeDef(ObjectTypeDefinitionNode $def): ObjectType { $name = $def->name->value; /** @var array<ObjectTypeExtensionNode> $extensionASTNodes (proven by schema validation) */ $extensionASTNodes = $this->typeExtensionsMap[$name] ?? []; $allNodes = [$def, ...$extensionASTNodes]; return new ObjectType([ 'name' => $name, 'description' => $def->description->value ?? null, 'fields' => fn (): array => $this->makeFieldDefMap($allNodes), 'interfaces' => fn (): array => $this->makeImplementedInterfaces($allNodes), 'astNode' => $def, 'extensionASTNodes' => $extensionASTNodes, ]); } /** * @param array<ObjectTypeDefinitionNode|ObjectTypeExtensionNode|InterfaceTypeDefinitionNode|InterfaceTypeExtensionNode> $nodes * * @throws \Exception * * @phpstan-return array<string, UnnamedFieldDefinitionConfig> */ private function makeFieldDefMap(array $nodes): array { $map = []; foreach ($nodes as $node) { foreach ($node->fields as $field) { $map[$field->name->value] = $this->buildField($field, $node); } } return $map; } /** * @param ObjectTypeDefinitionNode|ObjectTypeExtensionNode|InterfaceTypeDefinitionNode|InterfaceTypeExtensionNode $node * * @throws \Exception * @throws Error * * @return UnnamedFieldDefinitionConfig */ public function buildField(FieldDefinitionNode $field, object $node): array { // Note: While this could make assertions to get the correctly typed // value, that would throw immediately while type system validation // with validateSchema() will produce more actionable results. /** @var OutputType&Type $type */ $type = $this->buildWrappedType($field->type); $config = [ 'type' => $type, 'description' => $field->description->value ?? null, 'args' => $this->makeInputValues($field->arguments), 'deprecationReason' => $this->getDeprecationReason($field), 'astNode' => $field, ]; if ($this->fieldConfigDecorator !== null) { $config = ($this->fieldConfigDecorator)($config, $field, $node); } return $config; } /** * Given a collection of directives, returns the string value for the * deprecation reason. * * @param EnumValueDefinitionNode|FieldDefinitionNode|InputValueDefinitionNode $node * * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation */ private function getDeprecationReason(Node $node): ?string { $deprecated = Values::getDirectiveValues( Directive::deprecatedDirective(), $node ); return $deprecated['reason'] ?? null; } /** * @param array<ObjectTypeDefinitionNode|ObjectTypeExtensionNode|InterfaceTypeDefinitionNode|InterfaceTypeExtensionNode> $nodes * * @throws \Exception * @throws Error * @throws InvariantViolation * * @return array<int, InterfaceType> */ private function makeImplementedInterfaces(array $nodes): array { // Note: While this could make early assertions to get the correctly // typed values, that would throw immediately while type system // validation with validateSchema() will produce more actionable results. $interfaces = []; foreach ($nodes as $node) { foreach ($node->interfaces as $interface) { $interfaces[] = $this->buildType($interface); } } // @phpstan-ignore-next-line generic type will be validated during schema validation return $interfaces; } /** @throws InvariantViolation */ private function makeInterfaceDef(InterfaceTypeDefinitionNode $def): InterfaceType { $name = $def->name->value; /** @var array<InterfaceTypeExtensionNode> $extensionASTNodes (proven by schema validation) */ $extensionASTNodes = $this->typeExtensionsMap[$name] ?? []; $allNodes = [$def, ...$extensionASTNodes]; return new InterfaceType([ 'name' => $name, 'description' => $def->description->value ?? null, 'fields' => fn (): array => $this->makeFieldDefMap($allNodes), 'interfaces' => fn (): array => $this->makeImplementedInterfaces($allNodes), 'astNode' => $def, 'extensionASTNodes' => $extensionASTNodes, ]); } /** * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation */ private function makeEnumDef(EnumTypeDefinitionNode $def): EnumType { $name = $def->name->value; /** @var array<EnumTypeExtensionNode> $extensionASTNodes (proven by schema validation) */ $extensionASTNodes = $this->typeExtensionsMap[$name] ?? []; $values = []; foreach ([$def, ...$extensionASTNodes] as $node) { foreach ($node->values as $value) { $values[$value->name->value] = [ 'description' => $value->description->value ?? null, 'deprecationReason' => $this->getDeprecationReason($value), 'astNode' => $value, ]; } } return new EnumType([ 'name' => $name, 'description' => $def->description->value ?? null, 'values' => $values, 'astNode' => $def, 'extensionASTNodes' => $extensionASTNodes, ]); } /** @throws InvariantViolation */ private function makeUnionDef(UnionTypeDefinitionNode $def): UnionType { $name = $def->name->value; /** @var array<UnionTypeExtensionNode> $extensionASTNodes (proven by schema validation) */ $extensionASTNodes = $this->typeExtensionsMap[$name] ?? []; return new UnionType([ 'name' => $name, 'description' => $def->description->value ?? null, // Note: While this could make assertions to get the correctly typed // values below, that would throw immediately while type system // validation with validateSchema() will produce more actionable results. 'types' => function () use ($def, $extensionASTNodes): array { $types = []; foreach ([$def, ...$extensionASTNodes] as $node) { foreach ($node->types as $type) { $types[] = $this->buildType($type); } } /** @var array<int, ObjectType> $types */ return $types; }, 'astNode' => $def, 'extensionASTNodes' => $extensionASTNodes, ]); } /** @throws InvariantViolation */ private function makeScalarDef(ScalarTypeDefinitionNode $def): CustomScalarType { $name = $def->name->value; /** @var array<ScalarTypeExtensionNode> $extensionASTNodes (proven by schema validation) */ $extensionASTNodes = $this->typeExtensionsMap[$name] ?? []; return new CustomScalarType([ 'name' => $name, 'description' => $def->description->value ?? null, 'serialize' => static fn ($value) => $value, 'astNode' => $def, 'extensionASTNodes' => $extensionASTNodes, ]); } /** * @throws \Exception * @throws \ReflectionException * @throws InvariantViolation */ private function makeInputObjectDef(InputObjectTypeDefinitionNode $def): InputObjectType { $name = $def->name->value; /** @var array<InputObjectTypeExtensionNode> $extensionASTNodes (proven by schema validation) */ $extensionASTNodes = $this->typeExtensionsMap[$name] ?? []; $oneOfDirective = Directive::oneOfDirective(); // Check for @oneOf directive in the definition node $isOneOf = Values::getDirectiveValues($oneOfDirective, $def) !== null; // Check for @oneOf directive in extension nodes if (! $isOneOf) { foreach ($extensionASTNodes as $extensionNode) { if (Values::getDirectiveValues($oneOfDirective, $extensionNode) !== null) { $isOneOf = true; break; } } } return new InputObjectType([ 'name' => $name, 'description' => $def->description->value ?? null, 'isOneOf' => $isOneOf, 'fields' => fn (): array => $this->makeInputFields([$def, ...$extensionASTNodes]), 'astNode' => $def, 'extensionASTNodes' => $extensionASTNodes, ]); } /** * @param array<string, mixed> $config * * @throws Error * * @return CustomScalarType|EnumType|InputObjectType|InterfaceType|ObjectType|UnionType */ private function makeSchemaDefFromConfig(Node $def, array $config): Type { switch (true) { case $def instanceof ObjectTypeDefinitionNode: // @phpstan-ignore-next-line assume the config matches return new ObjectType($config); case $def instanceof InterfaceTypeDefinitionNode: // @phpstan-ignore-next-line assume the config matches return new InterfaceType($config); case $def instanceof EnumTypeDefinitionNode: // @phpstan-ignore-next-line assume the config matches return new EnumType($config); case $def instanceof UnionTypeDefinitionNode: // @phpstan-ignore-next-line assume the config matches return new UnionType($config); case $def instanceof ScalarTypeDefinitionNode: // @phpstan-ignore-next-line assume the config matches return new CustomScalarType($config); case $def instanceof InputObjectTypeDefinitionNode: // @phpstan-ignore-next-line assume the config matches return new InputObjectType($config); default: throw new Error("Type kind of {$def->kind} not supported."); } } /** * @throws \Exception * * @return InputObjectFieldConfig */ public function buildInputField(InputValueDefinitionNode $value): array { $type = $this->buildWrappedType($value->type); assert($type instanceof InputType, 'proven by schema validation'); $config = [ 'name' => $value->name->value, 'type' => $type, 'description' => $value->description->value ?? null, 'astNode' => $value, ]; if ($value->defaultValue !== null) { $config['defaultValue'] = AST::valueFromAST($value->defaultValue, $type); } return $config; } /** * @throws \Exception * * @return array<string, mixed> */ public function buildEnumValue(EnumValueDefinitionNode $value): array { return [ 'description' => $value->description->value ?? null, 'deprecationReason' => $this->getDeprecationReason($value), 'astNode' => $value, ]; } } graphql/lib/Utils/Value.php000064400000021147151666572110011654 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\ClientAware; use YOOtheme\GraphQL\Error\CoercionError; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InputType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; /** * @phpstan-type CoercedValue array{errors: null, value: mixed} * @phpstan-type CoercedErrors array{errors: array<int, CoercionError>, value: null} * * @phpstan-import-type InputPath from CoercionError */ class Value { /** * Coerce the given value to match the given GraphQL Input Type. * * Returns either a value which is valid for the provided type, * or a list of encountered coercion errors. * * @param mixed $value * @param InputType&Type $type * * @phpstan-param InputPath|null $path * * @throws InvariantViolation * * @phpstan-return CoercedValue|CoercedErrors */ public static function coerceInputValue($value, InputType $type, ?array $path = null): array { if ($type instanceof NonNull) { if ($value === null) { return self::ofErrors([ CoercionError::make("Expected non-nullable type \"{$type}\" not to be null.", $path, $value), ]); } // @phpstan-ignore-next-line wrapped type is known to be input type after schema validation return self::coerceInputValue($value, $type->getWrappedType(), $path); } if ($value === null) { // Explicitly return the value null. return self::ofValue(null); } if ($type instanceof ScalarType || $type instanceof EnumType) { // Scalars and Enums determine if a input value is valid via parseValue(), which can // throw to indicate failure. If it throws, maintain a reference to // the original error. try { return self::ofValue($type->parseValue($value)); } catch (\Throwable $error) { if ( $error instanceof Error || ($error instanceof ClientAware && $error->isClientSafe()) ) { return self::ofErrors([ CoercionError::make($error->getMessage(), $path, $value, $error), ]); } return self::ofErrors([ CoercionError::make("Expected type \"{$type->name}\".", $path, $value, $error), ]); } } if ($type instanceof ListOfType) { $itemType = $type->getWrappedType(); assert($itemType instanceof InputType, 'known through schema validation'); if (is_iterable($value)) { $errors = []; $coercedValue = []; foreach ($value as $index => $itemValue) { $coercedItem = self::coerceInputValue( $itemValue, $itemType, [...$path ?? [], $index] ); if (isset($coercedItem['errors'])) { $errors = self::add($errors, $coercedItem['errors']); } else { $coercedValue[] = $coercedItem['value']; } } return $errors === [] ? self::ofValue($coercedValue) : self::ofErrors($errors); } // Lists accept a non-list value as a list of one. $coercedItem = self::coerceInputValue($value, $itemType); return isset($coercedItem['errors']) ? $coercedItem : self::ofValue([$coercedItem['value']]); } assert($type instanceof InputObjectType, 'we handled all other cases at this point'); if ($value instanceof \stdClass) { // Cast objects to associative array before checking the fields. // Note that the coerced value will be an array. $value = (array) $value; } elseif (! is_array($value)) { return self::ofErrors([ CoercionError::make("Expected type \"{$type->name}\" to be an object.", $path, $value), ]); } $errors = []; $coercedValue = []; $fields = $type->getFields(); foreach ($fields as $fieldName => $field) { if (array_key_exists($fieldName, $value)) { $fieldValue = $value[$fieldName]; $coercedField = self::coerceInputValue( $fieldValue, $field->getType(), [...$path ?? [], $fieldName], ); if (isset($coercedField['errors'])) { $errors = self::add($errors, $coercedField['errors']); } else { $coercedValue[$fieldName] = $coercedField['value']; } } elseif ($field->defaultValueExists()) { $coercedValue[$fieldName] = $field->defaultValue; } elseif ($field->getType() instanceof NonNull) { $errors = self::add( $errors, CoercionError::make("Field \"{$fieldName}\" of required type \"{$field->getType()->toString()}\" was not provided.", $path, $value) ); } } // Ensure every provided field is defined. foreach ($value as $fieldName => $field) { if (array_key_exists($fieldName, $fields)) { continue; } $suggestions = Utils::suggestionList( (string) $fieldName, array_keys($fields) ); $message = "Field \"{$fieldName}\" is not defined by type \"{$type->name}\"." . ($suggestions === [] ? '' : ' Did you mean ' . Utils::quotedOrList($suggestions) . '?'); $errors = self::add( $errors, CoercionError::make($message, $path, $value) ); } // Validate OneOf constraints if this is a OneOf input type if ($type->isOneOf()) { $providedFieldCount = 0; $nullFieldName = null; foreach ($coercedValue as $fieldName => $fieldValue) { if ($fieldValue !== null) { ++$providedFieldCount; } else { $nullFieldName = $fieldName; } } // Check for null field values first (takes precedence) if ($nullFieldName !== null) { $errors = self::add( $errors, CoercionError::make("OneOf input object \"{$type->name}\" field \"{$nullFieldName}\" must be non-null.", $path, $value) ); } elseif ($providedFieldCount === 0) { $errors = self::add( $errors, CoercionError::make("OneOf input object \"{$type->name}\" must specify exactly one field.", $path, $value) ); } elseif ($providedFieldCount > 1) { $errors = self::add( $errors, CoercionError::make("OneOf input object \"{$type->name}\" must specify exactly one field.", $path, $value) ); } } return $errors === [] ? self::ofValue($type->parseValue($coercedValue)) : self::ofErrors($errors); } /** * @param array<int, CoercionError> $errors * * @phpstan-return CoercedErrors */ private static function ofErrors(array $errors): array { return ['errors' => $errors, 'value' => null]; } /** * @param mixed $value any value * * @phpstan-return CoercedValue */ private static function ofValue($value): array { return ['errors' => null, 'value' => $value]; } /** * @param array<int, CoercionError> $errors * @param CoercionError|array<int, CoercionError> $errorOrErrors * * @return array<int, CoercionError> */ private static function add(array $errors, $errorOrErrors): array { $moreErrors = is_array($errorOrErrors) ? $errorOrErrors : [$errorOrErrors]; return array_merge($errors, $moreErrors); } } graphql/lib/Utils/MixedStore.php000064400000013333151666572110012661 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; /** * Similar to PHP array, but allows any type of data to act as key (including arrays, objects, scalars). * * When storing array as key, access and modification is O(N). Avoid if possible. * * @template TValue of mixed * * @implements \ArrayAccess<mixed, TValue> * * @see \GraphQL\Tests\Utils\MixedStoreTest */ class MixedStore implements \ArrayAccess { /** @var array<TValue> */ private array $standardStore = []; /** @var array<TValue> */ private array $floatStore = []; /** @var \SplObjectStorage<object, TValue> */ private \SplObjectStorage $objectStore; /** @var array<int, array<mixed>> */ private array $arrayKeys = []; /** @var array<int, TValue> */ private array $arrayValues = []; /** @var array<mixed> */ private ?array $lastArrayKey = null; /** @var TValue|null */ private $lastArrayValue; /** @var TValue|null */ private $nullValue; private bool $nullValueIsSet = false; /** @var TValue|null */ private $trueValue; private bool $trueValueIsSet = false; /** @var TValue|null */ private $falseValue; private bool $falseValueIsSet = false; public function __construct() { $this->objectStore = new \SplObjectStorage(); } /** @param mixed $offset */ #[\ReturnTypeWillChange] public function offsetExists($offset): bool { if ($offset === false) { return $this->falseValueIsSet; } if ($offset === true) { return $this->trueValueIsSet; } if (is_int($offset) || is_string($offset)) { return array_key_exists($offset, $this->standardStore); } if (is_float($offset)) { return array_key_exists((string) $offset, $this->floatStore); } if (is_object($offset)) { return $this->objectStore->offsetExists($offset); } if (is_array($offset)) { foreach ($this->arrayKeys as $index => $entry) { if ($entry === $offset) { $this->lastArrayKey = $offset; $this->lastArrayValue = $this->arrayValues[$index]; return true; } } } if ($offset === null) { return $this->nullValueIsSet; } return false; } /** * @param mixed $offset * * @return TValue|null */ #[\ReturnTypeWillChange] public function offsetGet($offset) { if ($offset === true) { return $this->trueValue; } if ($offset === false) { return $this->falseValue; } if (is_int($offset) || is_string($offset)) { return $this->standardStore[$offset]; } if (is_float($offset)) { return $this->floatStore[(string) $offset]; } if (is_object($offset)) { return $this->objectStore->offsetGet($offset); } if (is_array($offset)) { // offsetGet is often called directly after offsetExists, so optimize to avoid second loop: if ($this->lastArrayKey === $offset) { return $this->lastArrayValue; } foreach ($this->arrayKeys as $index => $entry) { if ($entry === $offset) { return $this->arrayValues[$index]; } } } if ($offset === null) { return $this->nullValue; } return null; } /** * @param mixed $offset * @param TValue $value * * @throws \InvalidArgumentException */ #[\ReturnTypeWillChange] public function offsetSet($offset, $value): void { if ($offset === false) { $this->falseValue = $value; $this->falseValueIsSet = true; } elseif ($offset === true) { $this->trueValue = $value; $this->trueValueIsSet = true; } elseif (is_int($offset) || is_string($offset)) { $this->standardStore[$offset] = $value; } elseif (is_float($offset)) { $this->floatStore[(string) $offset] = $value; } elseif (is_object($offset)) { $this->objectStore[$offset] = $value; } elseif (is_array($offset)) { $this->arrayKeys[] = $offset; $this->arrayValues[] = $value; } elseif ($offset === null) { $this->nullValue = $value; $this->nullValueIsSet = true; } else { $unexpectedOffset = Utils::printSafe($offset); throw new \InvalidArgumentException("Unexpected offset type: {$unexpectedOffset}"); } } /** @param mixed $offset */ #[\ReturnTypeWillChange] public function offsetUnset($offset): void { if ($offset === true) { $this->trueValue = null; $this->trueValueIsSet = false; } elseif ($offset === false) { $this->falseValue = null; $this->falseValueIsSet = false; } elseif (is_int($offset) || is_string($offset)) { unset($this->standardStore[$offset]); } elseif (is_float($offset)) { unset($this->floatStore[(string) $offset]); } elseif (is_object($offset)) { $this->objectStore->offsetUnset($offset); } elseif (is_array($offset)) { $index = array_search($offset, $this->arrayKeys, true); if ($index !== false) { array_splice($this->arrayKeys, $index, 1); array_splice($this->arrayValues, $index, 1); } } elseif ($offset === null) { $this->nullValue = null; $this->nullValueIsSet = false; } } } graphql/lib/Utils/AST.php000064400000052014151666572110011224 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; use YOOtheme\GraphQL\Error\Error; use YOOtheme\GraphQL\Error\InvariantViolation; use YOOtheme\GraphQL\Error\SerializationError; use YOOtheme\GraphQL\Language\AST\BooleanValueNode; use YOOtheme\GraphQL\Language\AST\DefinitionNode; use YOOtheme\GraphQL\Language\AST\DocumentNode; use YOOtheme\GraphQL\Language\AST\EnumValueNode; use YOOtheme\GraphQL\Language\AST\FloatValueNode; use YOOtheme\GraphQL\Language\AST\IntValueNode; use YOOtheme\GraphQL\Language\AST\ListTypeNode; use YOOtheme\GraphQL\Language\AST\ListValueNode; use YOOtheme\GraphQL\Language\AST\Location; use YOOtheme\GraphQL\Language\AST\NamedTypeNode; use YOOtheme\GraphQL\Language\AST\NameNode; use YOOtheme\GraphQL\Language\AST\Node; use YOOtheme\GraphQL\Language\AST\NodeKind; use YOOtheme\GraphQL\Language\AST\NodeList; use YOOtheme\GraphQL\Language\AST\NonNullTypeNode; use YOOtheme\GraphQL\Language\AST\NullValueNode; use YOOtheme\GraphQL\Language\AST\ObjectFieldNode; use YOOtheme\GraphQL\Language\AST\ObjectValueNode; use YOOtheme\GraphQL\Language\AST\OperationDefinitionNode; use YOOtheme\GraphQL\Language\AST\StringValueNode; use YOOtheme\GraphQL\Language\AST\ValueNode; use YOOtheme\GraphQL\Language\AST\VariableNode; use YOOtheme\GraphQL\Type\Definition\EnumType; use YOOtheme\GraphQL\Type\Definition\IDType; use YOOtheme\GraphQL\Type\Definition\InputObjectType; use YOOtheme\GraphQL\Type\Definition\InputType; use YOOtheme\GraphQL\Type\Definition\LeafType; use YOOtheme\GraphQL\Type\Definition\ListOfType; use YOOtheme\GraphQL\Type\Definition\NonNull; use YOOtheme\GraphQL\Type\Definition\NullableType; use YOOtheme\GraphQL\Type\Definition\ScalarType; use YOOtheme\GraphQL\Type\Definition\Type; /** * Various utilities dealing with AST. */ class AST { /** * Convert representation of AST as an associative array to instance of GraphQL\Language\AST\Node. * * For example: * * ```php * AST::fromArray([ * 'kind' => 'ListValue', * 'values' => [ * ['kind' => 'StringValue', 'value' => 'my str'], * ['kind' => 'StringValue', 'value' => 'my other str'] * ], * 'loc' => ['start' => 21, 'end' => 25] * ]); * ``` * * Will produce instance of `ListValueNode` where `values` prop is a lazily-evaluated `NodeList` * returning instances of `StringValueNode` on access. * * This is a reverse operation for AST::toArray($node) * * @param array<string, mixed> $node * * @api * * @throws \JsonException * @throws InvariantViolation */ public static function fromArray(array $node): Node { $kind = $node['kind'] ?? null; if ($kind === null) { $safeNode = Utils::printSafeJson($node); throw new InvariantViolation("Node is missing kind: {$safeNode}"); } $class = NodeKind::CLASS_MAP[$kind] ?? null; if ($class === null) { $safeNode = Utils::printSafeJson($node); throw new InvariantViolation("Node has unexpected kind: {$safeNode}"); } $instance = new $class([]); if (isset($node['loc']['start'], $node['loc']['end'])) { $instance->loc = Location::create($node['loc']['start'], $node['loc']['end']); } foreach ($node as $key => $value) { if ($key === 'loc' || $key === 'kind') { continue; } if (is_array($value)) { $value = isset($value[0]) || $value === [] ? new NodeList($value) : self::fromArray($value); } $instance->{$key} = $value; } return $instance; } /** * Convert AST node to serializable array. * * @return array<string, mixed> * * @api */ public static function toArray(Node $node): array { return $node->toArray(); } /** * Produces a GraphQL Value AST given a PHP value. * * Optionally, a GraphQL type may be provided, which will be used to * disambiguate between value primitives. * * | PHP Value | GraphQL Value | * | ------------- | -------------------- | * | Object | Input Object | * | Assoc Array | Input Object | * | Array | List | * | Boolean | Boolean | * | String | String / Enum Value | * | Int | Int | * | Float | Int / Float | * | Mixed | Enum Value | * | null | NullValue | * * @param mixed $value * @param InputType&Type $type * * @throws \JsonException * @throws InvariantViolation * @throws SerializationError * * @return (ValueNode&Node)|null * * @api */ public static function astFromValue($value, InputType $type): ?ValueNode { if ($type instanceof NonNull) { $wrappedType = $type->getWrappedType(); assert($wrappedType instanceof InputType); $astValue = self::astFromValue($value, $wrappedType); return $astValue instanceof NullValueNode ? null : $astValue; } if ($value === null) { return new NullValueNode([]); } // Convert PHP iterables to GraphQL list. If the GraphQLType is a list, but // the value is not an array, convert the value using the list's item type. if ($type instanceof ListOfType) { $itemType = $type->getWrappedType(); assert($itemType instanceof InputType, 'proven by schema validation'); if (is_iterable($value)) { $valuesNodes = []; foreach ($value as $item) { $itemNode = self::astFromValue($item, $itemType); if ($itemNode !== null) { $valuesNodes[] = $itemNode; } } return new ListValueNode(['values' => new NodeList($valuesNodes)]); } return self::astFromValue($value, $itemType); } // Populate the fields of the input object by creating ASTs from each value // in the PHP object according to the fields in the input type. if ($type instanceof InputObjectType) { $isArray = is_array($value); $isArrayLike = $isArray || $value instanceof \ArrayAccess; if (! $isArrayLike && ! is_object($value)) { return null; } $fields = $type->getFields(); $fieldNodes = []; foreach ($fields as $fieldName => $field) { $fieldValue = $isArrayLike ? $value[$fieldName] ?? null : $value->{$fieldName} ?? null; // Have to check additionally if key exists, since we differentiate between // "no key" and "value is null": if ($fieldValue !== null) { $fieldExists = true; } elseif ($isArray) { $fieldExists = array_key_exists($fieldName, $value); } elseif ($isArrayLike) { $fieldExists = $value->offsetExists($fieldName); } else { $fieldExists = property_exists($value, $fieldName); } if (! $fieldExists) { continue; } $fieldNode = self::astFromValue($fieldValue, $field->getType()); if ($fieldNode === null) { continue; } $fieldNodes[] = new ObjectFieldNode([ 'name' => new NameNode(['value' => $fieldName]), 'value' => $fieldNode, ]); } return new ObjectValueNode(['fields' => new NodeList($fieldNodes)]); } assert($type instanceof LeafType, 'other options were exhausted'); // Since value is an internally represented value, it must be serialized // to an externally represented value before converting into an AST. $serialized = $type->serialize($value); // Others serialize based on their corresponding PHP scalar types. if (is_bool($serialized)) { return new BooleanValueNode(['value' => $serialized]); } if (is_int($serialized)) { return new IntValueNode(['value' => (string) $serialized]); } if (is_float($serialized)) { /** @phpstan-ignore equal.notAllowed (int cast with == used for performance reasons) */ if ((int) $serialized == $serialized) { return new IntValueNode(['value' => (string) $serialized]); } return new FloatValueNode(['value' => (string) $serialized]); } if (is_string($serialized)) { // Enum types use Enum literals. if ($type instanceof EnumType) { return new EnumValueNode(['value' => $serialized]); } // ID types can use Int literals. $asInt = (int) $serialized; if ($type instanceof IDType && (string) $asInt === $serialized) { return new IntValueNode(['value' => $serialized]); } // Use json_encode, which uses the same string encoding as GraphQL, // then remove the quotes. return new StringValueNode(['value' => $serialized]); } $notConvertible = Utils::printSafe($serialized); throw new InvariantViolation("Cannot convert value to AST: {$notConvertible}"); } /** * Produces a PHP value given a GraphQL Value AST. * * A GraphQL type must be provided, which will be used to interpret different * GraphQL Value literals. * * Returns `null` when the value could not be validly coerced according to * the provided type. * * | GraphQL Value | PHP Value | * | -------------------- | ------------- | * | Input Object | Assoc Array | * | List | Array | * | Boolean | Boolean | * | String | String | * | Int / Float | Int / Float | * | Enum Value | Mixed | * | Null Value | null | * * @param (ValueNode&Node)|null $valueNode * @param array<string, mixed>|null $variables * * @throws \Exception * * @return mixed * * @api */ public static function valueFromAST(?ValueNode $valueNode, Type $type, ?array $variables = null) { $undefined = Utils::undefined(); if ($valueNode === null) { // When there is no AST, then there is also no value. // Importantly, this is different from returning the GraphQL null value. return $undefined; } if ($type instanceof NonNull) { if ($valueNode instanceof NullValueNode) { // Invalid: intentionally return no value. return $undefined; } return self::valueFromAST($valueNode, $type->getWrappedType(), $variables); } if ($valueNode instanceof NullValueNode) { // This is explicitly returning the value null. return null; } if ($valueNode instanceof VariableNode) { $variableName = $valueNode->name->value; if ($variables === null || ! array_key_exists($variableName, $variables)) { // No valid return value. return $undefined; } // Note: This does no further checking that this variable is correct. // This assumes that this query has been validated and the variable // usage here is of the correct type. return $variables[$variableName]; } if ($type instanceof ListOfType) { $itemType = $type->getWrappedType(); if ($valueNode instanceof ListValueNode) { $coercedValues = []; $itemNodes = $valueNode->values; foreach ($itemNodes as $itemNode) { if (self::isMissingVariable($itemNode, $variables)) { // If an array contains a missing variable, it is either coerced to // null or if the item type is non-null, it considered invalid. if ($itemType instanceof NonNull) { // Invalid: intentionally return no value. return $undefined; } $coercedValues[] = null; } else { $itemValue = self::valueFromAST($itemNode, $itemType, $variables); if ($undefined === $itemValue) { // Invalid: intentionally return no value. return $undefined; } $coercedValues[] = $itemValue; } } return $coercedValues; } $coercedValue = self::valueFromAST($valueNode, $itemType, $variables); if ($undefined === $coercedValue) { // Invalid: intentionally return no value. return $undefined; } return [$coercedValue]; } if ($type instanceof InputObjectType) { if (! $valueNode instanceof ObjectValueNode) { // Invalid: intentionally return no value. return $undefined; } $coercedObj = []; $fields = $type->getFields(); $fieldNodes = []; foreach ($valueNode->fields as $field) { $fieldNodes[$field->name->value] = $field; } foreach ($fields as $field) { $fieldName = $field->name; $fieldNode = $fieldNodes[$fieldName] ?? null; if ($fieldNode === null || self::isMissingVariable($fieldNode->value, $variables)) { if ($field->defaultValueExists()) { $coercedObj[$fieldName] = $field->defaultValue; } elseif ($field->getType() instanceof NonNull) { // Invalid: intentionally return no value. return $undefined; } continue; } $fieldValue = self::valueFromAST( $fieldNode->value, $field->getType(), $variables ); if ($undefined === $fieldValue) { // Invalid: intentionally return no value. return $undefined; } $coercedObj[$fieldName] = $fieldValue; } return $type->parseValue($coercedObj); } if ($type instanceof EnumType) { try { return $type->parseLiteral($valueNode, $variables); } catch (\Throwable $error) { return $undefined; } } assert($type instanceof ScalarType, 'only remaining option'); // Scalars fulfill parsing a literal value via parseLiteral(). // Invalid values represent a failure to parse correctly, in which case // no value is returned. try { return $type->parseLiteral($valueNode, $variables); } catch (\Throwable $error) { return $undefined; } } /** * Returns true if the provided valueNode is a variable which is not defined * in the set of variables. * * @param ValueNode&Node $valueNode * @param array<string, mixed>|null $variables */ private static function isMissingVariable(ValueNode $valueNode, ?array $variables): bool { return $valueNode instanceof VariableNode && ($variables === null || ! array_key_exists($valueNode->name->value, $variables)); } /** * Produces a PHP value given a GraphQL Value AST. * * Unlike `valueFromAST()`, no type is provided. The resulting PHP value * will reflect the provided GraphQL value AST. * * | GraphQL Value | PHP Value | * | -------------------- | ------------- | * | Input Object | Assoc Array | * | List | Array | * | Boolean | Boolean | * | String | String | * | Int / Float | Int / Float | * | Enum | Mixed | * | Null | null | * * @param array<string, mixed>|null $variables * * @throws \Exception * * @return mixed * * @api */ public static function valueFromASTUntyped(Node $valueNode, ?array $variables = null) { switch (true) { case $valueNode instanceof NullValueNode: return null; case $valueNode instanceof IntValueNode: return (int) $valueNode->value; case $valueNode instanceof FloatValueNode: return (float) $valueNode->value; case $valueNode instanceof StringValueNode: case $valueNode instanceof EnumValueNode: case $valueNode instanceof BooleanValueNode: return $valueNode->value; case $valueNode instanceof ListValueNode: $values = []; foreach ($valueNode->values as $node) { $values[] = self::valueFromASTUntyped($node, $variables); } return $values; case $valueNode instanceof ObjectValueNode: $values = []; foreach ($valueNode->fields as $field) { $values[$field->name->value] = self::valueFromASTUntyped($field->value, $variables); } return $values; case $valueNode instanceof VariableNode: $variableName = $valueNode->name->value; return ($variables ?? []) !== [] && isset($variables[$variableName]) ? $variables[$variableName] : null; } throw new Error("Unexpected value kind: {$valueNode->kind}"); } /** * Returns type definition for given AST Type node. * * @param callable(string): ?Type $typeLoader * @param NamedTypeNode|ListTypeNode|NonNullTypeNode $inputTypeNode * * @throws \Exception * * @api */ public static function typeFromAST(callable $typeLoader, Node $inputTypeNode): ?Type { if ($inputTypeNode instanceof ListTypeNode) { $innerType = self::typeFromAST($typeLoader, $inputTypeNode->type); return $innerType === null ? null : new ListOfType($innerType); } if ($inputTypeNode instanceof NonNullTypeNode) { $innerType = self::typeFromAST($typeLoader, $inputTypeNode->type); if ($innerType === null) { return null; } assert($innerType instanceof NullableType, 'proven by schema validation'); return new NonNull($innerType); } return $typeLoader($inputTypeNode->name->value); } /** * Returns the operation within a document by name. * * If a name is not provided, an operation is only returned if the document has exactly one. * * @api */ public static function getOperationAST(DocumentNode $document, ?string $operationName = null): ?OperationDefinitionNode { $operation = null; foreach ($document->definitions->getIterator() as $node) { if (! $node instanceof OperationDefinitionNode) { continue; } if ($operationName === null) { // We found a second operation, so we bail instead of returning an ambiguous result. if ($operation !== null) { return null; } $operation = $node; } elseif ($node->name instanceof NameNode && $node->name->value === $operationName) { return $node; } } return $operation; } /** * Provided a collection of ASTs, presumably each from different files, * concatenate the ASTs together into batched AST, useful for validating many * GraphQL source files which together represent one conceptual application. * * @param array<DocumentNode> $documents * * @api */ public static function concatAST(array $documents): DocumentNode { /** @var array<int, Node&DefinitionNode> $definitions */ $definitions = []; foreach ($documents as $document) { foreach ($document->definitions as $definition) { $definitions[] = $definition; } } return new DocumentNode(['definitions' => new NodeList($definitions)]); } } graphql/lib/Utils/LexicalDistance.php000064400000007242151666572110013634 0ustar00<?php declare(strict_types=1); namespace YOOtheme\GraphQL\Utils; /** * Computes the lexical distance between strings A and B. * * The "distance" between two strings is given by counting the minimum number * of edits needed to transform string A into string B. An edit can be an * insertion, deletion, or substitution of a single character, or a swap of two * adjacent characters. * * Includes a custom alteration from Damerau-Levenshtein to treat case changes * as a single edit which helps identify mis-cased values with an edit distance * of 1. * * This distance can be useful for detecting typos in input or sorting * * Unlike the native levenshtein() function that always returns int, LexicalDistance::measure() returns int|null. * It takes into account the threshold and returns null if the measured distance is bigger. */ class LexicalDistance { private string $input; private string $inputLowerCase; /** * List of char codes in the input string. * * @var array<int> */ private array $inputArray; public function __construct(string $input) { $this->input = $input; $this->inputLowerCase = strtolower($input); $this->inputArray = self::stringToArray($this->inputLowerCase); } public function measure(string $option, float $threshold): ?int { if ($this->input === $option) { return 0; } $optionLowerCase = strtolower($option); // Any case change counts as a single edit if ($this->inputLowerCase === $optionLowerCase) { return 1; } $a = self::stringToArray($optionLowerCase); $b = $this->inputArray; if (count($a) < count($b)) { $tmp = $a; $a = $b; $b = $tmp; } $aLength = count($a); $bLength = count($b); if ($aLength - $bLength > $threshold) { return null; } /** @var array<array<int>> $rows */ $rows = []; for ($i = 0; $i <= $bLength; ++$i) { $rows[0][$i] = $i; } for ($i = 1; $i <= $aLength; ++$i) { $upRow = &$rows[($i - 1) % 3]; $currentRow = &$rows[$i % 3]; $smallestCell = ($currentRow[0] = $i); for ($j = 1; $j <= $bLength; ++$j) { $cost = $a[$i - 1] === $b[$j - 1] ? 0 : 1; $currentCell = min( $upRow[$j] + 1, // delete $currentRow[$j - 1] + 1, // insert $upRow[$j - 1] + $cost, // substitute ); if ($i > 1 && $j > 1 && $a[$i - 1] === $b[$j - 2] && $a[$i - 2] === $b[$j - 1]) { // transposition $doubleDiagonalCell = $rows[($i - 2) % 3][$j - 2]; $currentCell = min($currentCell, $doubleDiagonalCell + 1); } if ($currentCell < $smallestCell) { $smallestCell = $currentCell; } $currentRow[$j] = $currentCell; } // Early exit, since distance can't go smaller than smallest element of the previous row. if ($smallestCell > $threshold) { return null; } } $distance = $rows[$aLength % 3][$bLength]; return $distance <= $threshold ? $distance : null; } /** * Returns a list of char codes in the given string. * * @return array<int> */ private static function stringToArray(string $str): array { $array = []; foreach (mb_str_split($str) as $char) { $array[] = mb_ord($char); } return $array; } } graphql/LICENSE000064400000002067151666572110007226 0ustar00MIT License Copyright (c) 2015-present, Webonyx, LLC. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. builder-source-filesystem/src/Type/FilesQueryType.php000064400000012323151666572110017040 0ustar00<?php namespace YOOtheme\Builder\Source\Filesystem\Type; use function YOOtheme\app; use YOOtheme\Builder\Source\Filesystem\FileHelper; use function YOOtheme\trans; class FilesQueryType { /** * @param string $rootDir * * @return array */ public static function config($rootDir) { return [ 'fields' => [ 'files' => [ 'type' => [ 'listOf' => 'File', ], 'args' => [ 'pattern' => [ 'type' => 'String', ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Files'), 'group' => trans('External'), 'fields' => [ 'pattern' => [ 'label' => trans('Path Pattern'), 'description' => "Pick a folder to load file content dynamically. Alternatively, set a path <a href=\"https://www.php.net/manual/en/function.glob.php\" target=\"_blank\">glob pattern</a> to filter files. For example <code>{$rootDir}/*.{jpg,png}</code>. The path is relative to the system folder and has to be a subdirectory of <code>{$rootDir}</code>.", 'type' => 'select-file', ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of files.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'default' => 10, 'attrs' => [ 'min' => 1, ], ], ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'description' => trans( 'The Default order will follow the order set by the brackets or fallback to the default files order set by the system.', ), 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'name', 'options' => [ trans('Default') => 'default', trans('Alphabetical') => 'name', trans('Random') => 'rand', ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'ASC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], 'enable' => 'order != "rand"', ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { return app(FileHelper::class)->query($args); } } builder-source-filesystem/src/Type/FileType.php000064400000014472151666572110015636 0ustar00<?php namespace YOOtheme\Builder\Source\Filesystem\Type; use function YOOtheme\app; use YOOtheme\File; use YOOtheme\Path; use YOOtheme\Str; use function YOOtheme\trans; use YOOtheme\Url; use YOOtheme\View; class FileType { /** * @return array */ public static function config() { return [ 'fields' => [ 'name' => [ 'type' => 'String', 'args' => [ 'title_case' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Name'), 'arguments' => [ 'title_case' => [ 'label' => trans('Convert'), 'type' => 'checkbox', 'text' => trans('Convert to title-case'), ], ], 'filters' => ['limit', 'preserve'], ], 'extensions' => [ 'call' => __CLASS__ . '::name', ], ], 'basename' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Basename'), ], 'extensions' => [ 'call' => __CLASS__ . '::basename', ], ], 'dirname' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Dirname'), ], 'extensions' => [ 'call' => __CLASS__ . '::dirname', ], ], 'url' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Url'), ], 'extensions' => [ 'call' => __CLASS__ . '::url', ], ], 'path' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Path'), ], 'extensions' => [ 'call' => __CLASS__ . '::path', ], ], 'content' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Content'), 'filters' => ['limit', 'preserve'], ], 'extensions' => [ 'call' => __CLASS__ . '::content', ], ], 'size' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Size'), ], 'extensions' => [ 'call' => __CLASS__ . '::size', ], ], 'extension' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Extension'), ], 'extensions' => [ 'call' => __CLASS__ . '::extension', ], ], 'mimetype' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Mimetype'), ], 'extensions' => [ 'call' => __CLASS__ . '::mimetype', ], ], 'accessed' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Accessed Date'), 'filters' => ['date'], ], 'extensions' => [ 'call' => __CLASS__ . '::accessed', ], ], 'changed' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Changed Date'), 'filters' => ['date'], ], 'extensions' => [ 'call' => __CLASS__ . '::changed', ], ], 'modified' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Modified Date'), 'filters' => ['date'], ], 'extensions' => [ 'call' => __CLASS__ . '::modified', ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('File'), ], ]; } public static function name($file, $args) { $name = basename($file, '.' . File::getExtension($file)); if (!empty($args['title_case'])) { $name = Str::titleCase($name); } return $name; } public static function content($file) { return File::getContents($file); } public static function size($file) { return app(View::class)->formatBytes(File::getSize($file) ?: 0); } public static function accessed($file) { return File::getATime($file); } public static function changed($file) { return File::getCTime($file); } public static function modified($file) { return File::getMTime($file); } public static function mimetype($file) { return File::getMimetype($file); } public static function extension($file) { return File::getExtension($file); } public static function basename($file) { return basename($file); } public static function dirname($file) { return dirname(self::path($file)); } public static function path($file) { return Path::relative('~', $file); } public static function url($file) { return Url::relative(Url::to($file)); } } builder-source-filesystem/src/Type/FileQueryType.php000064400000010537151666572110016662 0ustar00<?php namespace YOOtheme\Builder\Source\Filesystem\Type; use function YOOtheme\app; use YOOtheme\Builder\Source\Filesystem\FileHelper; use function YOOtheme\trans; class FileQueryType { /** * @param string $rootDir * * @return array */ public static function config($rootDir) { return [ 'fields' => [ 'file' => [ 'type' => 'File', 'args' => [ 'pattern' => [ 'type' => 'String', ], 'offset' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('File'), 'group' => trans('External'), 'fields' => [ 'pattern' => [ 'label' => trans('Path Pattern'), 'description' => "Pick a folder to load file content dynamically. Alternatively, set a path <a href=\"https://www.php.net/manual/en/function.glob.php\" target=\"_blank\">glob pattern</a> to filter files. For example <code>{$rootDir}/*.{jpg,png}</code>. The path is relative to the system folder and has to be a subdirectory of <code>{$rootDir}</code>.", 'type' => 'select-file', ], 'offset' => [ 'label' => trans('Offset'), 'description' => trans( 'Set the offset to specify which file is loaded.', ), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'description' => trans( 'The Default order will follow the order set by the brackets or fallback to the default files order set by the system.', ), 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'name', 'options' => [ trans('Default') => 'default', trans('Alphabetical') => 'name', trans('Random') => 'rand', ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'ASC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], 'enable' => 'order != "rand"', ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $files = app(FileHelper::class)->query(['limit' => 1] + $args); return array_shift($files); } } builder-source-filesystem/src/FileHelper.php000064400000003114151666572110015202 0ustar00<?php namespace YOOtheme\Builder\Source\Filesystem; use YOOtheme\File; use YOOtheme\Path; class FileHelper { /** * @var string[] */ protected $rootDirs; /** * @param string|string[] $rootDirs */ public function __construct($rootDirs) { $this->rootDirs = (array) $rootDirs; } /** * Query files. * * @param array $args * * @return array */ public function query(array $args = []) { $args += ['offset' => 0, 'limit' => 10, 'order' => '', 'order_direction' => 'ASC']; if (empty($args['pattern'])) { return []; } $pattern = $args['pattern']; $pattern = str_starts_with($pattern, '~') ? $pattern : Path::join('~', $pattern); $files = File::glob($pattern, GLOB_NOSORT); // filter out any dir $files = array_filter( $files, fn($file) => array_any($this->rootDirs, fn($dir) => str_starts_with($file, $dir)) && is_file($file), ); // order if ($args['order'] === 'rand') { shuffle($files); } else { if ($args['order'] === 'name') { natcasesort($files); } // direction if ($args['order_direction'] === 'DESC') { $files = array_reverse($files); } } // offset/limit if ($args['offset'] || $args['limit']) { $files = array_slice($files, (int) $args['offset'], (int) $args['limit'] ?: null); } return $files; } } builder-source-filesystem/src/Listener/LoadSourceTypes.php000064400000001407151666572110020040 0ustar00<?php namespace YOOtheme\Builder\Source\Filesystem\Listener; use YOOtheme\Builder\Source\Filesystem\Type; use YOOtheme\Config; use YOOtheme\Path; class LoadSourceTypes { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($source): void { try { $rootDir = Path::relative( $this->config->get('app.rootDir'), $this->config->get('app.uploadDir'), ); $source->queryType(Type\FileQueryType::config($rootDir)); $source->queryType(Type\FilesQueryType::config($rootDir)); $source->objectType('File', Type\FileType::config()); } catch (\Exception $e) { } } } builder-source-filesystem/bootstrap.php000064400000000356151666572110014416 0ustar00<?php namespace YOOtheme\Builder\Source\Filesystem; return [ 'events' => [ // -5 to show the 'External' Group after the 'Custom' Group 'source.init' => [Listener\LoadSourceTypes::class => ['@handle', -5]], ], ]; theme-joomla-menus/bootstrap.php000064400000000652151666572110013015 0ustar00<?php namespace YOOtheme\Theme\Joomla; return [ 'routes' => [['get', '/items', [MenuController::class, 'getItems']]], 'events' => [ 'customizer.init' => [Listener\LoadMenuData::class => '@handle'], ], 'actions' => [ 'onAfterCleanModuleList' => [ Listener\LoadMenuModules::class => '@handle', Listener\LoadSplitNavbar::class => ['@handle', -20], ], ], ]; theme-joomla-menus/config/customizer.json000064400000011170151666572110014630 0ustar00{ "sections": { "joomla-menus": { "title": "Menus", "priority": 30, "help": { "Menus": [ { "title": "Managing Menus", "src": "https://www.youtube-nocookie.com/watch?v=9WljKJbxzZc&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:03", "documentation": "support/yootheme-pro/joomla/menus", "support": "support/search?tags=125&q=menu" }, { "title": "Setting Menu Items", "src": "https://www.youtube-nocookie.com/watch?v=Kvvp3il_yXY&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "3:07", "documentation": "support/yootheme-pro/joomla/menus#menu-items", "support": "support/search?tags=125&q=menu%20item" }, { "title": "Using the Mega Menu Builder", "src": "https://www.youtube-nocookie.com/watch?v=hE_xXcc10K4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "2:21", "documentation": "support/yootheme-pro/joomla/menus#mega-menu-builder", "support": "support/search?tags=125&q=mega%20menu" }, { "title": "Using Menu Positions", "src": "https://www.youtube-nocookie.com/watch?v=Yny3ilroGag&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "2:29", "documentation": "support/yootheme-pro/joomla/menus#menu-positions", "support": "support/search?tags=125&q=menu%20position" }, { "title": "Using Menu Position Options", "src": "https://www.youtube-nocookie.com/watch?v=_gnAQE_MlsI&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "2:17", "documentation": "support/yootheme-pro/joomla/menus#menu-positions", "support": "support/search?tags=125&q=menu%20position%20options" }, { "title": "Using the Menu Module", "src": "https://www.youtube-nocookie.com/watch?v=uJyUxVOT30Y&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:27", "documentation": "support/yootheme-pro/joomla/menus#menu-module", "support": "support/search?tags=125&q=menu%20module" } ], "Menu Items": [ { "title": "Creating Menu Dividers", "src": "https://www.youtube-nocookie.com/watch?v=PVKV0B2fOOk&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:48", "documentation": "support/yootheme-pro/joomla/menus#menu-divider", "support": "support/search?tags=125&q=menu%20divider" }, { "title": "Creating Menu Heading", "src": "https://www.youtube-nocookie.com/watch?v=mAWbl_Qyckg&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:50", "documentation": "support/yootheme-pro/joomla/menus#menu-heading", "support": "support/search?tags=125&q=menu%20heading" }, { "title": "Creating Menu Text Items", "src": "https://www.youtube-nocookie.com/watch?v=RKY8qDgCTnc&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:43", "documentation": "support/yootheme-pro/joomla/menus#menu-text-item", "support": "support/search?tags=125&q=menu%20text%20item" }, { "title": "Creating Accordion Menus", "src": "https://www.youtube-nocookie.com/watch?v=Kq87emJcq68&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:30", "documentation": "support/yootheme-pro/joomla/menus#accordion-menu", "support": "support/search?tags=125&q=accordion%20menu" } ] } } } } theme-joomla-menus/src/Listener/LoadMenuModules.php000064400000003077151666572110016415 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; class LoadMenuModules { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($event): void { $modules = $event->getArgument('modules'); if ($this->config->get('app.isAdmin') || !$this->config->get('theme.active')) { return; } // create menu modules when assigned in theme settings foreach ($this->config->get('~theme.menu.positions', []) as $position => $menu) { if (empty($menu['menu'])) { continue; } array_unshift( $modules, (object) [ 'id' => "menu-{$position}", 'name' => 'menu', 'module' => 'mod_menu', 'title' => '', 'showtitle' => 0, 'position' => $position, 'params' => json_encode([ 'menutype' => $menu['menu'], 'showAllChildren' => true, 'yoo_config' => json_encode( array_combine( array_map(fn($key) => "menu_{$key}", array_keys($menu)), $menu, ), ), ]), ], ); } $event->setArgument(0, $modules); $event->setArgument('modules', $modules); } } theme-joomla-menus/src/Listener/LoadSplitNavbar.php000064400000002572151666572110016404 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; class LoadSplitNavbar { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($event): void { $modules = $event->getArgument('modules'); if ($this->config->get('app.isAdmin') || !$this->config->get('theme.active')) { return; } if ( in_array($this->config->get('~theme.header.layout'), [ 'stacked-center-split-a', 'stacked-center-split-b', ]) ) { foreach ($modules as $module) { if ( $module->module != 'mod_menu' || $module->position != 'navbar' || !in_array($this->config->get("~theme.modules.{$module->id}.menu_type"), [ '', 'nav', ]) ) { continue; } $clone = clone $module; $clone->id = "{$module->id}-split"; $clone->position = 'navbar-split'; array_splice($modules, array_search($module, $modules) + 1, 0, [$clone]); } } $event->setArgument(0, $modules); $event->setArgument('modules', $modules); } } theme-joomla-menus/src/Listener/LoadMenuData.php000064400000001426151666572110015652 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\User\User; use YOOtheme\Config; use YOOtheme\Path; use YOOtheme\Theme\Joomla\MenuConfig; class LoadMenuData { public User $user; public Config $config; public MenuConfig $menu; public function __construct(Config $config, MenuConfig $menu, User $user) { $this->menu = $menu; $this->user = $user; $this->config = $config; } public function handle() { $this->config->add('customizer', ['menu' => $this->menu->getArrayCopy()]); if ($this->user->authorise('core.manage', 'com_menus')) { $this->config->addFile( 'customizer', Path::get('../../config/customizer.json', __DIR__), ); } } } theme-joomla-menus/src/MenuController.php000064400000000424151666572110014534 0ustar00<?php namespace YOOtheme\Theme\Joomla; use YOOtheme\Http\Request; use YOOtheme\Http\Response; class MenuController { public static function getItems(Request $request, Response $response, MenuConfig $menu) { return $response->withJson($menu->items); } } theme-joomla-menus/src/MenuConfig.php000064400000003406151666572110013621 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\HTML\Helpers\Menu; use Joomla\CMS\Menu\AbstractMenu; use Joomla\CMS\User\User; use YOOtheme\Config; use YOOtheme\ConfigObject; /** * @property array $menus * @property array $items * @property array $positions * @property bool $canEdit * @property bool $canCreate * @property bool $canDelete */ class MenuConfig extends ConfigObject { /** * Constructor. */ public function __construct(Config $config, User $user) { parent::__construct([ 'menus' => $this->getMenus(), 'items' => $this->getItems(), 'positions' => $config->get('theme.menus'), 'canEdit' => $user->authorise('core.edit', 'com_menus'), 'canCreate' => $user->authorise('core.create', 'com_menus'), 'canDelete' => $user->authorise('core.edit.state', 'com_menus'), ]); } protected function getMenus() { return array_map( fn($menu) => [ 'id' => $menu->value, 'name' => $menu->text, ], Menu::menus(), ); } protected function getItems() { return array_values( array_map( fn($item) => [ 'id' => (string) $item->id, 'title' => $item->title, 'level' => $item->level - 1, 'menu' => $item->menutype, 'link' => $item->link, 'home' => $item->home, 'parent' => (string) $item->parent_id, 'type' => $item->type == 'separator' ? 'heading' : $item->type, ], AbstractMenu::getInstance('site')->getMenu(), ), ); } } view-metadata/src/View/MetadataManager.php000064400000010247151666572110014537 0ustar00<?php namespace YOOtheme\View; use YOOtheme\Event; use YOOtheme\Metadata; /** * Manages HTML elements belonging to the metadata content category. * * @link https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Content_categories#Metadata_content */ class MetadataManager implements Metadata, \IteratorAggregate { /** * @var array */ protected $prefix = ['article', 'fb', 'og', 'twitter']; /** * @var array */ protected $metadata = []; /** * @inheritdoc */ public function all(...$names) { if (!$names) { return $this->metadata; } $result = []; foreach ($names as $name) { $prefix = str_ends_with($name, '*') ? substr($name, 0, -1) : false; foreach ($this->metadata as $metadata) { if ( isset($this->metadata[$name]) || ($prefix && str_starts_with($metadata->name, $prefix)) ) { $result[$metadata->name] = $metadata; } } } return $result; } /** * @inheritdoc */ public function get($name) { return $this->metadata[$name] ?? null; } /** * @inheritdoc */ public function set($name, $value, array $attributes = []) { if (is_array($value) && !is_callable($value)) { [$value, $attributes] = [null, array_merge($value, $attributes)]; } $metadata = new MetadataObject($name, $value, $attributes); $metadata = $this->resolveMetadata($metadata); $metadata = Event::emit('metadata.load|filter', $metadata, $this); return $this->metadata[$metadata->name] = $metadata; } /** * @inheritdoc */ public function del($name) { unset($this->metadata[$name]); } /** * @inheritdoc */ public function merge(array $metadata) { foreach ($metadata as $name => $value) { $this->set($name, $value); } } /** * @inheritdoc */ public function filter(callable $filter) { return array_filter($this->metadata, $filter); } /** * @inheritdoc */ public function render() { return join("\n", $this->metadata); } /** * Returns an iterator for metadata tags. * * @return \ArrayIterator */ #[\ReturnTypeWillChange] public function getIterator() { return new \ArrayIterator($this->metadata); } /** * Resolves the metadata. * * @param MetadataObject $metadata * * @return MetadataObject */ protected function resolveMetadata(MetadataObject $metadata) { if (is_string($metadata->value)) { $metadata = $this->resolveAttributes($metadata); } if ($metadata->tag === 'style' && !isset($metadata->value)) { return $metadata->withTag('link')->withAttribute('rel', 'stylesheet'); } if (in_array($metadata->tag, $this->prefix)) { return $metadata->withTag('meta'); } return $metadata; } /** * Resolve the metadata attributes. * * @param MetadataObject $metadata * * @return MetadataObject */ protected function resolveAttributes($metadata) { if ($metadata->tag === 'base') { return $metadata->withAttributes([ 'href' => $metadata->value, ]); } if ($metadata->tag === 'link') { return $metadata->withAttributes([ 'href' => $metadata->value, 'rel' => str_replace('link:', '', $metadata->name), ]); } if ($metadata->tag === 'meta') { return $metadata->withAttributes([ 'name' => str_replace('meta:', '', $metadata->name), 'content' => $metadata->value, ]); } if (in_array($metadata->tag, $this->prefix)) { return $metadata->withAttributes([ 'property' => $metadata->name, 'content' => $metadata->value, ]); } return $metadata; } } view-metadata/src/View/MetadataObject.php000064400000007406151666572110014376 0ustar00<?php namespace YOOtheme\View; /** * @property string $href * @property string $src * @property string $defer * @property string $version */ class MetadataObject { /** * @var string */ public $tag; /** * @var string */ public $name; /** * @var mixed */ public $value; /** * @var array */ public $attributes; /** * Constructor. * * @param string $name * @param mixed $value * @param array $attributes */ public function __construct($name, $value, array $attributes = []) { $tag = substr($name, 0, strpos($name, ':')); $this->tag = $tag ?: $name; $this->name = $name; $this->value = $value; $this->attributes = $attributes; } /** * Gets an attribute value. * * @param string $name * * @return mixed */ public function __get($name) { return $this->attributes[$name] ?? null; } /** * Checks if an attribute value exists. * * @param string $name * * @return bool */ public function __isset($name) { return isset($this->attributes[$name]); } /** * Gets the rendered tag as string. * * @return string */ public function __toString() { return $this->render(); } /** * Renders the tag. * * @return string */ public function render() { $metadata = $this; if (is_callable($callback = $this->value)) { $metadata = $callback($this) ?: $this; } return HtmlElement::tag($metadata->tag, $metadata->attributes, $metadata->value); } /** * Gets the tag. * * @return string */ public function getTag() { return $this->tag; } /** * Sets the tag. * * @param string $tag * * @return static */ public function withTag($tag) { $clone = clone $this; $clone->tag = $tag; return $clone; } /** * Gets the name. * * @return string */ public function getName() { return $this->name; } /** * Sets the name. * * @param string $name * * @return static */ public function withName($name) { $clone = clone $this; $clone->name = $name; return $clone; } /** * Gets the value. * * @return string */ public function getValue() { return $this->value; } /** * Sets the value. * * @param string $value * * @return static */ public function withValue($value) { $clone = clone $this; $clone->value = $value; return $clone; } /** * Gets an attribute. * * @param string $name * @param mixed $default * * @return array */ public function getAttribute($name, $default = null) { return $this->$name ?? $default; } /** * Adds an attribute. * * @param string $name * @param mixed $value * * @return static */ public function withAttribute($name, $value) { $clone = clone $this; $clone->attributes[$name] = $value; return $clone; } /** * Gets attributes. * * @return array */ public function getAttributes() { return $this->attributes; } /** * Merges multiple attributes. * * @param array $attributes * * @return static */ public function withAttributes(array $attributes) { $clone = clone $this; $clone->attributes = array_merge($this->attributes, $attributes); return $clone; } } view-metadata/src/Metadata.php000064400000002234151666572110012327 0ustar00<?php namespace YOOtheme; use YOOtheme\View\MetadataObject; interface Metadata { /** * Gets all metadata tags. * * @param string $names * * @return MetadataObject[] */ public function all(...$names); /** * Gets a metadata tag. * * @param string $name * * @return MetadataObject|null */ public function get($name); /** * Sets a metadata tag. * * @param string $name * @param mixed $value * @param array $attributes * * @return MetadataObject */ public function set($name, $value, array $attributes = []); /** * Deletes a metadata tag. * * @param string $name */ public function del($name); /** * Merges multiple metadata tags. * * @param array $metadata */ public function merge(array $metadata); /** * Filters metadata tags using a callback. * * @param callable $filter * * @return MetadataObject[] */ public function filter(callable $filter); /** * Renders metadata tags. * * @return string */ public function render(); } view-metadata/bootstrap.php000064400000000610151666572110012031 0ustar00<?php namespace YOOtheme; use YOOtheme\View\MetadataManager; return [ 'extend' => [ View::class => function (View $view, $app) { $view->addFunction('metadata', $app->wrap(Metadata::class . '@set')); }, ], 'aliases' => [ Metadata::class => 'metadata', ], 'services' => [ Metadata::class => MetadataManager::class, ], ]; platform-joomla/src/Media.php000064400000003324151666572110012202 0ustar00<?php namespace YOOtheme\Joomla; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Extension\MVCComponent; use Joomla\CMS\Factory; use Joomla\Component\Media\Administrator\Model\ApiModel; use Joomla\Component\Media\Administrator\Provider\ProviderInterface; use YOOtheme\Path; class Media { public static function getRoot($root = null): string { $provider = static::getLocalProvider(); $path = null; if ($provider) { $adapters = $provider->getAdapters(); $adapter = $root ? $adapters[$root] ?? null : current($adapters); if ($adapter) { $path = $adapter->getAdapterName(); } } return Path::join( JPATH_ROOT, $path ?: ComponentHelper::getParams('com_media')->get('file_path', 'images'), ); } public static function getRootPaths(): array { $provider = static::getLocalProvider(); if (!$provider) { return []; } return array_values( array_map(fn($adapter) => $adapter->getAdapterName(), $provider->getAdapters()), ); } protected static function getLocalProvider(): ?ProviderInterface { $joomla = Factory::getApplication(); if (!method_exists($joomla, 'bootComponent')) { return null; } try { /** @var MVCComponent $component */ $component = $joomla->bootComponent('com_media'); /** @var ApiModel $model */ $model = $component->getMVCFactory()->createModel('Api', 'Administrator'); return $model->getProvider('local'); } catch (\Exception $e) { return null; } } } platform-joomla/src/Router.php000064400000000722151666572110012442 0ustar00<?php namespace YOOtheme\Joomla; use Joomla\CMS\Router\Route; use YOOtheme\Url; class Router { public static function generate($pattern = '', array $parameters = [], $secure = null) { if ($pattern) { $parameters = ['p' => $pattern] + $parameters; } return Url::to( Route::_('index.php?' . http_build_query(['option' => 'com_ajax']), false), $parameters, $secure, ); } } platform-joomla/src/Storage.php000064400000004134151666572110012567 0ustar00<?php namespace YOOtheme\Joomla; use Joomla\CMS\Factory; use Joomla\Database\DatabaseDriver; use YOOtheme\Storage as AbstractStorage; use function YOOtheme\app; class Storage extends AbstractStorage { /** * Constructor. * * @param string $element * @param string $folder * * @throws \Exception */ public function __construct($element = 'yootheme', $folder = 'system') { /** @var DatabaseDriver $db */ $db = app(DatabaseDriver::class); $query = sprintf( 'SELECT custom_data FROM #__extensions WHERE element = %s AND folder = %s LIMIT 1', $db->quote($element), $db->quote($folder), ); if ($result = $db->setQuery($query)->loadResult()) { $this->addJson($result); } $joomla = Factory::getApplication(); $joomla->registerEvent('onAfterRespond', function () use ($db, $element, $folder) { if ($this->isModified()) { $data = json_encode($this, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); if ($data === false) { return; } $this->alterCustomDataColumn($db); $extension = (object) [ 'element' => $element, 'folder' => $folder, 'custom_data' => $data, ]; $db->updateObject('#__extensions', $extension, ['element', 'folder']); } }); } /** * Alter custom_data type to MEDIUMTEXT only in MySQL database */ protected function alterCustomDataColumn($db) { if (!str_contains($db->getName(), 'mysql')) { return; } if ( $db ->setQuery( "SHOW FIELDS FROM #__extensions WHERE Field = 'custom_data' AND Type = 'text'", ) ->loadRow() ) { $db->setQuery( 'ALTER TABLE #__extensions CHANGE `custom_data` `custom_data` MEDIUMTEXT NOT NULL', )->execute(); } } } platform-joomla/src/ActionLoader.php000064400000001741151666572110013530 0ustar00<?php namespace YOOtheme\Joomla; use Joomla\CMS\Factory; use Joomla\Event\DispatcherInterface; use YOOtheme\Application\EventLoader; use YOOtheme\Container; use YOOtheme\EventDispatcher; /** * @property EventDispatcher|DispatcherInterface $dispatcher */ class ActionLoader extends EventLoader { /** * Constructor. */ public function __construct() { $joomla = Factory::getApplication(); if (version_compare(JVERSION, '5.0', '<')) { $this->dispatcher = new Dispatcher($joomla); } else { $this->dispatcher = $joomla->getDispatcher(); } } /** * Load action listeners. * * @param Container $container * @param array $configs */ public function __invoke(Container $container, array $configs) { if (!$container->has('dispatcher')) { $container->set('dispatcher', $this->dispatcher); } parent::__invoke($container, $configs); } } platform-joomla/src/HttpClient.php000064400000003424151666572110013242 0ustar00<?php namespace YOOtheme\Joomla; use Joomla\CMS\Http\HttpFactory; use Joomla\Registry\Registry; use YOOtheme\Http\Response; use YOOtheme\HttpClientInterface; class HttpClient implements HttpClientInterface { /** * Execute a GET HTTP request. * * @param string $url * @param array $options * * @return Response */ public function get($url, $options = []) { $response = HttpFactory::getHttp(new Registry($options))->get($url); return (new Response($response->code, $response->headers))->write($response->body); } /** * Execute a POST HTTP request. * * @param string $url * @param string $data * @param array $options * * @return Response */ public function post($url, $data = null, $options = []) { $response = HttpFactory::getHttp(new Registry($options))->post($url, $data); return (new Response($response->code, $response->headers))->write($response->body); } /** * Execute a PUT HTTP request. * * @param string $url * @param string $data * @param array $options * * @return Response */ public function put($url, $data = null, $options = []) { $response = HttpFactory::getHttp(new Registry($options))->put($url, $data); return (new Response($response->code, $response->headers))->write($response->body); } /** * Execute a DELETE HTTP request. * * @param string $url * @param array $options * * @return Response */ public function delete($url, $options = []) { $response = HttpFactory::getHttp(new Registry($options))->delete($url); return (new Response($response->code, $response->headers))->write($response->body); } } platform-joomla/src/Dispatcher.php000064400000004504151666572110013252 0ustar00<?php namespace YOOtheme\Joomla; use Joomla\CMS\Application\CMSApplication; use Joomla\Event\Event; use YOOtheme\EventDispatcher; class Dispatcher extends EventDispatcher { /** * @var CMSApplication */ protected $joomla; public static $actions = [ 'onAfterCleanModuleList' => ['modules', 'subject'], 'onBeforeCompileHead' => ['subject', 'document'], 'onContentBeforeSave' => ['context', 'subject'], 'onContentPrepare' => ['context', 'subject', 'params', 'page'], 'onContentPrepareData' => ['context', 'data', 'subject'], 'onContentPrepareForm' => ['subject', 'data'], ]; /** * Constructor. * * @param CMSApplication $joomla */ public function __construct($joomla) { parent::__construct(); $this->joomla = $joomla; } /** * Adds an event listener. * * @param string $event * @param callable $listener * @param int $priority */ public function addListener($event, $listener, $priority = 0) { if (version_compare(JVERSION, '4.0', '>=')) { return $this->joomla ->getDispatcher() ->addListener( $event, fn($event) => $listener($this->prepareArguments($event)), $priority, ); } if (empty($this->listeners[$event])) { if ($event === 'onAfterCleanModuleList') { $handler = fn(&$modules) => $this->dispatch( $event, new Event($event, ['modules' => &$modules]), ); } else { $handler = function (...$arguments) use ($event) { return $this->dispatch( $event, $this->prepareArguments(new Event($event, $arguments)), ); }; } $this->joomla->registerEvent($event, $handler); } parent::addListener($event, $listener, $priority); } protected function prepareArguments($event) { foreach (static::$actions[$event->getName()] ?? [] as $i => $key) { if (!isset($event[$key])) { $event[$key] = $event[$i]; } } return $event; } } platform-joomla/src/Platform.php000064400000016567151666572110012764 0ustar00<?php namespace YOOtheme\Joomla; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Document\Document; use Joomla\CMS\Document\HtmlDocument; use Joomla\Input\Input; use YOOtheme\Application; use YOOtheme\Arr; use YOOtheme\Http\Exception; use YOOtheme\Http\Request; use YOOtheme\Http\Response; use YOOtheme\Metadata; use YOOtheme\Path; use YOOtheme\Url; class Platform { /** * Handle application routes. */ public static function handleRoute(Application $app, CMSApplication $joomla, Input $input) { if ($input->getCmd('option') !== 'com_ajax' || !$input->get('p')) { return; } $response = null; // disable cache $joomla->set('caching', 0); // default format $input->def('format', 'raw'); // get response $joomla->registerEvent('onAfterDispatch', function () use ($app, &$response, $input) { // On administrator routes com_login is rendered for guest users if ($input->getCmd('option') !== 'com_ajax') { return; } $response = $app->run(false); }); // send response $joomla->registerEvent('onAfterRender', function () use ($joomla, &$response) { if (!$response) { return; } $isHtml = strpos($response->getContentType(), 'html'); if (!$isHtml) { // disable gzip for none html responses like binary images $joomla->set('gzip', false); } if (version_compare(JVERSION, '4.0', '>')) { $joomla->allowCache(true); $joomla->setResponse($isHtml ? $response->write($joomla->getBody()) : $response); return; } // send headers if (!headers_sent()) { $response->sendHeaders(); } // set body for none html responses if (!$isHtml) { $joomla->setBody($response->getBody()); } // set cms headers (fix issue when headers_sent() is still false) if (!headers_sent()) { $joomla->allowCache(true); $joomla->setHeader('Cache-Control', $response->getHeaderLine('Cache-Control')); $joomla->setHeader('Content-Type', $response->getContentType()); } }); } /** * Handle application errors. * * @param Request $request * @param Response $response * @param \Exception $exception * * @throws \Exception * * @return Response */ public static function handleError(Request $request, $response, $exception) { if ($exception instanceof Exception) { if (str_starts_with($request->getHeaderLine('Content-Type'), 'application/json')) { return $response->withJson($exception->getMessage()); } return $response ->write($exception->getMessage()) ->withHeader('Content-Type', 'text/plain'); } throw $exception; } /** * Callback to register assets. * * @param Metadata $metadata * @param Document $document */ public static function registerAssets(Metadata $metadata, Document $document) { if (version_compare(JVERSION, '4.0', '<')) { static::registerAssetsLegacy($metadata, $document); return; } $wa = $document->getWebAssetManager(); // Ensure WebAssetManager is not locked // This might happen if a view is rendered after the documents head has been rendered (e.g. HikaShop renders multiple Views) if (\Closure::bind(fn() => $this->locked, $wa, $wa)()) { return; } foreach ($metadata->all('style:*') as $style) { if ($style->href) { $attrs = Arr::omit($style->getAttributes(), ['version', 'href', 'rel', 'defer']); if ($style->defer && $document instanceof HtmlDocument) { $attrs = array_merge($attrs, [ 'rel' => 'preload', 'as' => 'style', 'onload' => "this.onload=null;this.rel='stylesheet'", ]); } $wa->registerAndUseStyle( $style->getName(), static::toRelativeUrl($style->href), ['version' => $style->version], $attrs, ); } elseif ($value = $style->getValue()) { $wa->addInlineStyle($value, [], Arr::omit($style->getAttributes(), ['version'])); } } foreach ($metadata->all('script:*') as $script) { if ($script->src) { $wa->registerAndUseScript( $script->getName(), static::toRelativeUrl($script->src), ['version' => $script->version], Arr::omit($script->getAttributes(), ['version', 'src']), ); } elseif ($value = $script->getValue()) { $wa->addInlineScript($value, [], Arr::omit($script->getAttributes(), ['version'])); } } } protected static function toRelativeUrl($url) { $url = Path::resolveAlias($url); if (Path::isBasePath(JPATH_ROOT, $url)) { return Path::relative(JPATH_ROOT, $url); } return $url; } /** * Callback to register assets (Joomla 3.x). * * @param Metadata $metadata * @param Document $document */ protected static function registerAssetsLegacy(Metadata $metadata, Document $document) { foreach ($metadata->all('style:*') as $style) { if ($style->href) { $attrs = Arr::omit($style->getAttributes(), ['version', 'href', 'rel', 'defer']); if ($style->defer && $document instanceof HtmlDocument) { $document->addHeadLink( htmlentities(Url::to($style->href, ['ver' => $style->version])), 'preload', 'rel', [ 'as' => 'style', 'onload' => "this.onload=null;this.rel='stylesheet'", ] + $attrs, ); } else { $document->addStyleSheet( htmlentities(Url::to($style->href)), ['version' => $style->version], $attrs, ); } } elseif ($value = $style->getValue()) { $document->addStyleDeclaration($value); } } foreach ($metadata->all('script:*') as $script) { if ($script->src) { $document->addScript( htmlentities(Url::to($script->src)), ['version' => $script->version], Arr::omit($script->getAttributes(), ['version', 'src']), ); } elseif ($value = $script->getValue()) { if ($document instanceof HtmlDocument) { $document->addCustomTag((string) $script->withAttribute('version', '')); } else { $document->addScriptDeclaration($value); } } } } } platform-joomla/bootstrap.php000064400000011045151666572110012410 0ustar00<?php namespace YOOtheme; use Joomla\CMS\Application\CMSApplication as CMSApp; use Joomla\CMS\Application\SiteApplication as SiteApp; use Joomla\CMS\Document\Document; use Joomla\CMS\Document\HtmlDocument; use Joomla\CMS\Factory; use Joomla\CMS\Language\Language; use Joomla\CMS\Router\Router as JoomlaRouter; use Joomla\CMS\Router\SiteRouter; use Joomla\CMS\Session\Session; use Joomla\CMS\Uri\Uri; use Joomla\CMS\User\User; use Joomla\DI\Container; use Joomla\Database\DatabaseDriver; use Joomla\Input\Input; use YOOtheme\Joomla\ActionLoader; use YOOtheme\Joomla\Media; use YOOtheme\Joomla\Platform; use YOOtheme\Joomla\Router; Url::setBase(Uri::root(true)); Path::setAlias('~', strtr(JPATH_ROOT, '\\', '/')); return [ 'config' => function () { $joomla = Factory::getApplication(); $normalize = fn($path) => strtr($path, '\\', '/'); return [ 'app' => [ 'platform' => 'joomla', 'version' => JVERSION, 'secret' => (string) $joomla->get('secret'), 'debug' => (bool) $joomla->get('debug'), 'rootDir' => $normalize(JPATH_ROOT), 'tempDir' => $normalize($joomla->get('tmp_path', JPATH_ROOT . '/tmp')), 'adminDir' => $normalize(JPATH_ADMINISTRATOR), 'cacheDir' => $normalize($joomla->get('cache_path', JPATH_ROOT . '/cache')), 'uploadDir' => fn() => Media::getRoot(), 'isSite' => $joomla->isClient('site'), 'isAdmin' => $joomla->isClient('administrator'), ], 'req' => [ 'baseUrl' => Uri::base(true), 'rootUrl' => Uri::root(true), 'siteUrl' => rtrim(Uri::root(), '/'), ], 'locale' => [ 'rtl' => fn() => $joomla->getLanguage()->isRtl(), 'code' => fn() => strtr($joomla->getLanguage()->getTag(), '-', '_'), ], 'session' => [ 'token' => fn() => Session::getFormToken(), ], ]; }, 'events' => [ 'url.route' => [Router::class => 'generate'], 'app.error' => [Platform::class => ['handleError', -50]], ], 'actions' => [ 'onAfterRoute' => [Platform::class => ['handleRoute', -50]], 'onBeforeCompileHead' => [Platform::class => ['registerAssets', -50]], ], 'loaders' => [ 'actions' => ActionLoader::class, ], 'aliases' => [ Document::class => HtmlDocument::class, ], 'services' => array_merge( [ ActionLoader::class => '', CsrfMiddleware::class => fn(Config $config) => new CsrfMiddleware( $config('session.token'), ), HttpClientInterface::class => Joomla\HttpClient::class, Storage::class => Joomla\Storage::class, DatabaseDriver::class => [ 'factory' => fn(Container $container) => $container->get(DatabaseDriver::class), ], SiteApp::class => [ 'factory' => fn(CMSApp $joomla) => $joomla->isClient('site') ? $joomla : null, ], CMSApp::class => ['factory' => fn() => Factory::getApplication()], Container::class => ['factory' => fn() => Factory::getContainer()], Document::class => [ 'shared' => false, 'factory' => fn(CMSApp $joomla) => $joomla->getDocument(), ], Input::class => ['factory' => fn(CMSApp $joomla) => $joomla->input], Language::class => ['factory' => fn(CMSApp $joomla) => $joomla->getLanguage()], Session::class => ['factory' => fn(CMSApp $joomla) => $joomla->getSession()], SiteRouter::class => fn(Container $container) => $container->get(SiteRouter::class), User::class => [ 'shared' => false, 'factory' => fn(CMSApp $joomla) => $joomla->getIdentity(), ], ], version_compare(JVERSION, '4.0', '<') ? [ DatabaseDriver::class => [ 'factory' => function () { // Force autoloading (Type hints do not trigger autoloading) class_exists(DatabaseDriver::class); return Factory::getDbo(); }, ], SiteRouter::class => fn() => JoomlaRouter::getInstance('site'), User::class => ['shared' => false, 'factory' => fn() => Factory::getUser()], ] : [], ), ]; configuration/src/ConfigObject.php000064400000004524151666572110013266 0ustar00<?php namespace YOOtheme; class ConfigObject extends \ArrayObject { /** * Constructor. */ public function __construct(array $values = []) { parent::__construct($values, static::ARRAY_AS_PROPS); } /** * Get all configuration values. */ public function all(): array { return $this->getArrayCopy(); } /** * Get a configuration value. * * @param mixed $default * @return mixed */ public function get(string $key, $default = null) { return Arr::get($this, $key, $default); } /** * Set a configuration value. * * @param mixed $value */ public function set(string $key, $value): void { Arr::set($this, $key, $value); } /** * Remove the last value from an array configuration value. * * @return mixed */ public function pop(string $key) { $array = $this->get($key, []); $value = array_pop($array); $this->set($key, $array); return $value; } /** * Push a value onto an array configuration value. * * @param mixed ...$values */ public function push(string $key, ...$values): void { $array = $this->get($key, []); array_push($array, ...$values); $this->set($key, $array); } /** * Remove the first value from an array configuration value. * * @return mixed */ public function shift(string $key) { $array = $this->get($key, []); $value = array_shift($array); $this->set($key, $array); return $value; } /** * Prepend a value onto an array configuration value. * * @param mixed ...$values */ public function unshift(string $key, ...$values): void { $array = $this->get($key, []); array_unshift($array, ...$values); $this->set($key, $array); } /** * Assign an array of configuration values. */ public function assign(array $values): void { $this->exchangeArray(array_replace($this->getArrayCopy(), $values)); } /** * Merge an array of configuration values recursively. */ public function merge(array $values): void { $this->exchangeArray(array_replace_recursive($this->getArrayCopy(), $values)); } } configuration/src/Config.php000064400000003720151666572110012134 0ustar00<?php namespace YOOtheme; interface Config { /** * Gets a value (shortcut). * * @param string $index * @param mixed $default * * @return mixed */ public function __invoke($index, $default = null); /** * Gets a value. * * @param string $index * @param mixed $default * * @return mixed */ public function get($index, $default = null); /** * Sets a value. * * @param string $index * @param mixed $value * * @return $this */ public function set($index, $value); /** * Deletes a value. * * @param string $index * * @return $this */ public function del($index); /** * Adds a value array. * * @param string $index * @param array $values * @param bool $replace * * @return $this */ public function add($index, array $values = [], $replace = true); /** * Sets a value using a update callback. * * @param string $index * @param callable $callback * * @return $this */ public function update($index, callable $callback); /** * Adds an alias. * * @param string $name * @param string $index * * @return $this */ public function addAlias($name, $index); /** * Adds a file. * * @param string $index * @param string $file * @param bool $replace * * @throws \RuntimeException * * @return $this */ public function addFile($index, $file, $replace = true); /** * Adds a filter callback. * * @param string $name * @param callable $filter * * @return $this */ public function addFilter($name, callable $filter); /** * Loads a config file. * * @param string $file * * @throws \RuntimeException * * @return array */ public function loadFile($file); } configuration/src/Configuration/Node.php000064400000002507151666572110014425 0ustar00<?php namespace YOOtheme\Configuration; abstract class Node { /** * Resolves node to their values. * * @param array $params * * @return mixed */ abstract public function resolve(array $params); /** * Compiles node as parsable string. * * @param array $params * * @return string */ abstract public function compile(array $params); /** * Resolves arguments to their values. * * @param array $arguments * @param array $params * * @return array */ public function resolveArgs(array $arguments, array $params = []) { $args = []; foreach ($arguments as $argument) { $args[] = $argument instanceof Node ? $argument->resolve($params) : $argument; } return $args; } /** * Compiles arguments as parsable string. * * @param array $arguments * @param array $params * * @return string */ public function compileArgs(array $arguments, array $params = []) { $args = []; foreach ($arguments as $argument) { $args[] = $argument instanceof Node ? $argument->compile($params) : var_export($argument, true); } return join(', ', $args); } } configuration/src/Configuration/VariableNode.php000064400000001273151666572110016072 0ustar00<?php namespace YOOtheme\Configuration; class VariableNode extends Node { /** * @var string */ protected $name; /** * Constructor. * * @param string $name */ public function __construct($name) { $this->name = $name; } /** * @inheritdoc */ public function resolve(array $params) { $arguments = $this->resolveArgs([$this->name], $params); return $params['config']->get(...$arguments); } /** * @inheritdoc */ public function compile(array $params) { $arguments = $this->compileArgs([$this->name], $params); return "\$config->get({$arguments})"; } } configuration/src/Configuration/Repository.php000064400000006631151666572110015721 0ustar00<?php namespace YOOtheme\Configuration; use YOOtheme\Arr; class Repository { /** * @var array */ protected $values = []; /** * @var array */ protected $aliases = []; /** * Gets a value (shortcut). * * @param string $index * @param mixed $default * * @return mixed */ public function __invoke($index, $default = null) { return $this->get($index, $default); } /** * Gets a value. * * @param string $index * @param mixed $default * * @return mixed */ public function get($index, $default = null) { $index = strtr($index, $this->aliases); return static::getValue($this->values, $index, $default); } /** * Sets a value. * * @param string $index * @param mixed $value * * @return $this */ public function set($index, $value) { $index = strtr($index, $this->aliases); Arr::set($this->values, $index, $value); return $this; } /** * Deletes a value. * * @param string $index * * @return $this */ public function del($index) { $index = strtr($index, $this->aliases); Arr::del($this->values, $index); return $this; } /** * Adds a value array. * * @param string $index * @param array $values * @param bool $replace * * @return $this */ public function add($index, array $values = [], $replace = true) { $value = $index ? $this->get($index) : $this->values; if (is_array($value)) { $arrays = $replace ? [$value, $values] : [$values, $value]; $values = array_replace_recursive(...$arrays); } if ($index) { $this->set($index, $values); } else { $this->values = $values; } return $this; } /** * Sets a value using a update callback. * * @param string $index * @param callable $callback * * @return $this */ public function update($index, callable $callback) { $index = strtr($index, $this->aliases); Arr::update($this->values, $index, $callback); return $this; } /** * Adds an alias. * * @param string $name * @param string $index * * @return $this */ public function addAlias($name, $index) { $this->aliases[$name] = $index; return $this; } /** * Gets a value from array or object. * * @param mixed $object * @param string|array|int $index * @param mixed $default * * @return mixed */ public static function getValue($object, $index, $default = null) { $index = is_array($index) ? $index : explode('.', $index); while (!is_null($key = array_shift($index))) { if ((is_array($object) || $object instanceof \ArrayAccess) && isset($object[$key])) { $object = $object[$key]; } elseif (is_object($object) && isset($object->$key)) { $object = $object->$key; } elseif (is_callable($callable = [$object, $key])) { $object = $callable(); } else { return $default; } } return $object instanceof \Closure ? $object() : $object; } } configuration/src/Configuration/StringNode.php000064400000001715151666572110015614 0ustar00<?php namespace YOOtheme\Configuration; class StringNode extends Node { /** * @var string */ protected $format; /** * @var array */ protected $arguments; /** * Constructor. * * @param string $format * @param array $arguments */ public function __construct($format, array $arguments = []) { $this->format = $format; $this->arguments = $arguments; } /** * @inheritdoc */ public function resolve(array $params) { $arguments = array_merge([$this->format], $this->arguments); $arguments = $this->resolveArgs($arguments, $params); return sprintf(...$arguments); } /** * @inheritdoc */ public function compile(array $params) { $arguments = array_merge([$this->format], $this->arguments); $arguments = $this->compileArgs($arguments, $params); return "sprintf({$arguments})"; } } configuration/src/Configuration/Resolver.php000064400000015701151666572110015341 0ustar00<?php namespace YOOtheme\Configuration; class Resolver { /** * @var int */ protected $ctime; /** * @var string */ protected $cache; /** * @var string|false */ protected $key = false; /** * @var array */ protected $path = []; /** * @var array */ protected $params = []; /** * @var array */ protected $callbacks = []; /** * Constructor. * * @param string $cache * @param array $params * @param array $callbacks */ public function __construct($cache, array $params = [], array $callbacks = []) { if (is_dir($cache)) { $this->cache = $cache; $this->ctime = filectime(__FILE__); } $this->params = $params; $this->callbacks = $callbacks; } /** * Resets the key and path. */ public function __clone() { $this->key = false; $this->path = []; } /** * Resolves value and evaluates it after applying callbacks. * * @param mixed $value * @param array $params * * @return mixed */ public function resolve($value, array $params = []) { $resolve = fn($value) => $value instanceof Node ? $value->resolve($params + $this->params) : $value; return $this->resolveValue($value, array_merge($this->callbacks, [$resolve])); } /** * Resolves value recursively. * * @param mixed $value * @param array $callbacks * * @return mixed */ public function resolveValue($value, array $callbacks) { // apply callbacks foreach ($callbacks as $callback) { $value = $callback($value, $this->key, $this->path); } if (is_array($value) && !empty($value)) { $array = []; $depth = count($this->path); // update path, if key was changed if ($this->key !== end($this->path)) { array_splice($this->path, -1, 1, $this->key); } foreach ($value as $key => $val) { // update key and path $this->key = $key; $this->path[$depth] = $key; // resolve recursively $val = $this->resolveValue($val, $callbacks); $array[$this->key] = $val; } // set key to last path part array_pop($this->path); $this->key = end($this->path); return $array; } return $value; } /** * Compiles a parsable string of a value after applying callbacks. * * @param mixed $value * @param array $params * * @return string */ public function compile($value, array $params = []) { $compile = fn($value) => $value instanceof Node ? $value->compile($params + $this->params) : var_export($value, true); return $this->compileValue($this->resolveValue($value, $this->callbacks), $compile); } /** * Compiles a parsable string representation of a value. * * @param mixed $value * @param callable $callback * @param int $indent * * @return string */ public function compileValue($value, ?callable $callback = null, $indent = 0) { if (is_array($value)) { $array = []; $assoc = array_values($value) !== $value; $indention = str_repeat(' ', $indent); $indentlast = $assoc ? "\n" . $indention : ''; foreach ($value as $key => $val) { $array[] = ($assoc ? "\n " . $indention . var_export($key, true) . ' => ' : '') . $this->compileValue($val, $callback, $indent + 1); } return '[' . join(', ', $array) . $indentlast . ']'; } return $callback ? $callback($value) : var_export($value, true); } /** * Loads a file. * * @param string $file * @param array $params * * @throws \RuntimeException * * @return array|null */ public function loadFile($file, array $params = []) { $params = array_merge($this->params, $params, compact('file')); $extension = pathinfo($file, PATHINFO_EXTENSION); if ($extension === 'php') { return $this->loadPhpFile($file, $params); } if ($extension === 'json') { return $this->loadJsonFile($file, $params); } throw new \RuntimeException("Unable to load file '{$file}'"); } /** * Loads a PHP file. * * @param string $file * @param array $params * * @throws \RuntimeException * * @return array */ protected function loadPhpFile($file, array $params = []) { extract($params, EXTR_SKIP); if (!is_array($value = @include $file)) { throw new \RuntimeException("Unable to load file '{$file}'"); } return $value; } /** * Loads a JSON config file. * * @param string $file * @param array $params * * @throws \RuntimeException * * @return array */ protected function loadJsonFile($file, array $params = []) { extract($params, EXTR_SKIP); $cache = sprintf( '%s/%s-%s.php', $this->cache, pathinfo($file, PATHINFO_FILENAME), hash('crc32b', $file), ); if ( $this->cache && is_file($cache) && filectime($cache) > max($this->ctime, filectime($file)) ) { return include $cache; } if (!($content = @file_get_contents($file))) { throw new \RuntimeException("Unable to load file '{$file}'"); } if (!is_array($value = @json_decode($content, true))) { throw new \RuntimeException("Invalid JSON format in '{$file}'"); } if ($this->cache && $this->writeCacheFile($cache, $value, $params)) { return include $cache; } return $this->resolve($value, $params); } /** * Writes a cache file. * * @param string $cache * @param array $value * @param array $params * * @return bool */ protected function writeCacheFile($cache, array $value, array $params = []) { $temp = uniqid("{$this->cache}/temp-" . hash('crc32b', $cache)); $data = "<?php // \$file = {$params['file']}\n\nreturn {$this->compile( $value, $params, )};\n"; if (@file_put_contents($temp, $data) && @rename($temp, $cache)) { if (function_exists('opcache_invalidate')) { opcache_invalidate($cache, true); } return true; } // remove temp file if rename failed if (file_exists($temp)) { @unlink($temp); } return false; } } configuration/src/Configuration/FilterNode.php000064400000001601151666572110015565 0ustar00<?php namespace YOOtheme\Configuration; class FilterNode extends Node { /** * @var mixed */ protected $value; /** * @var string */ protected $filters; /** * Constructor. * * @param mixed $value * @param mixed $filters */ public function __construct($value, $filters) { $this->value = $value; $this->filters = $filters; } /** * @inheritdoc */ public function resolve(array $params) { $arguments = $this->resolveArgs([$this->filters, $this->value, $params['file']], $params); return $params['filter']->apply(...$arguments); } /** * @inheritdoc */ public function compile(array $params) { $arguments = $this->compileArgs([$this->filters, $this->value], $params); return "\$filter->apply({$arguments}, \$file)"; } } configuration/src/Configuration/Configuration.php000064400000013213151666572110016343 0ustar00<?php namespace YOOtheme\Configuration; use YOOtheme\Config; use YOOtheme\Path; /** * A configuration with cache and value resolving. * * @example * ```json * { * // config.json * "yoo": "yoo" * } * ``` * * ```php * use YOOtheme\Configuration; * * $config = new Configuration('/cache/folder'); * $config->add('app', ['foo' => 'bar', 'woo' => ['baz' => 'baaz']]); * $config->get('app.foo'); * $config->get('app.woo.baz'); * \\=> baaz * * $config->add('app', '/config.json'); * $config->get('app.yoo'); * \\=> yoo * ``` */ class Configuration extends Repository implements Config { public const REGEX_PATH = '/^(\.\.?)\/.*/S'; public const REGEX_STRING = '/\${((?:\w+:)+)?\s*([^}]+)}/S'; /** * @var Filter */ protected $filter; /** * @var Resolver */ protected $resolver; /** * @var array */ protected $cache = []; /** * Constructor. * * @param string $cache */ public function __construct($cache = null) { $values = [ 'env' => $_ENV, 'server' => $_SERVER, 'globals' => $GLOBALS, ]; $filter = [ 'path' => [$this, 'resolvePath'], 'glob' => [$this, 'resolveGlob'], 'load' => [$this, 'resolveLoad'], ]; $params = [ 'config' => $this, 'filter' => ($this->filter = new Filter($filter)), ]; $this->values = $values; $this->resolver = new Resolver($cache, $params, [ [$this, 'matchPath'], [$this, 'matchString'], ]); } /** * @inheritdoc */ public function addFilter($name, callable $filter) { $this->filter->add($name, $filter); return $this; } /** * @inheritdoc */ public function addFile($index, $file, $replace = true) { return $this->add($index, $this->loadFile($file), $replace); } /** * @inheritdoc */ public function loadFile($file) { // load file config $config = $this->resolver->loadFile($file); $config = $this->resolveExtend($config); $config = $this->resolveImport($config); return $config; } /** * Matches paths ./some/path, ~alias/path. * * @param mixed $value * * @return mixed|Node */ public function matchPath($value) { if (!is_string($value) || !preg_match(static::REGEX_PATH, $value, $matches)) { return $value; } if (isset($this->cache[$value])) { return $this->cache[$value]; } return $this->cache[$value] = new FilterNode($this->matchString($matches[0]), 'path'); } /** * Matches string interpolations ${...}. * * @param mixed $value * * @return mixed|Node */ public function matchString($value) { if ( !is_string($value) || !preg_match_all(static::REGEX_STRING, $value, $matches, PREG_SET_ORDER) ) { return $value; } if (isset($this->cache[$value])) { return $this->cache[$value]; } $replace = $arguments = []; foreach ($matches as $match) { [$search, $filter, $val] = $match; $replace[$search] = '%s'; $arguments[] = $filter ? new FilterNode($val, rtrim($filter, ':')) : new VariableNode($val); } $format = strtr($value, $replace + ['%' => '%%']); return $this->cache[$value] = $format !== '%s' ? new StringNode($format, $arguments) : $arguments[0]; } /** * Resolves and evaluates values. * * @param mixed $value * @param array $params * * @return mixed */ public function resolve($value, array $params = []) { return $this->resolver->resolve($value, $params); } /** * Resolves "path: dir/myfile.php" filter. * * @param string $value * @param string $file * * @return string */ public function resolvePath($value, $file) { return Path::resolve(dirname($file), $value); } /** * Resolves "glob: dir/file*.php" filter. * * @param string $value * @param string $file * * @return string[] */ public function resolveGlob($value, $file) { return glob(Path::resolve(dirname($file), $value)) ?: []; } /** * Resolves "load: dir/file.php" filter. * * @param string $value * @param string $file * * @return array */ public function resolveLoad($value, $file) { return $this->loadFile(Path::resolve(dirname($file), $value)); } /** * Resolves "@extend" in config array. * * @param array $config * * @throws \RuntimeException * * @return array */ protected function resolveExtend(array $config) { $extends = $config['@extend'] ?? []; foreach ((array) $extends as $extend) { $config = array_replace_recursive($this->loadFile($extend), $config); } unset($config['@extend']); return $config; } /** * Resolves "@import" in config array. * * @param array $config * * @throws \RuntimeException * * @return array */ protected function resolveImport(array $config) { $imports = $config['@import'] ?? []; foreach ((array) $imports as $import) { $config = array_replace_recursive($config, $this->loadFile($import)); } unset($config['@import']); return $config; } } configuration/src/Configuration/Filter.php000064400000002403151666572110014760 0ustar00<?php namespace YOOtheme\Configuration; class Filter { /** * @var array */ protected $filters = []; /** * Constructor. * * @param array $filters */ public function __construct(array $filters = []) { foreach ($filters as $name => $filter) { $this->add($name, $filter); } } /** * Adds a filter function. * * @param string $name * @param callable $filter * * @return $this */ public function add($name, callable $filter) { $this->filters[$name] = $filter; return $this; } /** * Applies filters to a value. * * @param mixed $value * @param mixed $filters * @param array $arguments * * @throws \RuntimeException * * @return mixed */ public function apply($filters, $value, ...$arguments) { if (is_string($filters)) { $filters = explode('|', $filters); } foreach ($filters as $name) { if (!isset($this->filters[$name])) { throw new \RuntimeException("Undefined filter '{$name}'"); } $value = $this->filters[$name]($value, ...$arguments); } return $value; } } builder-joomla-source/config/customizer.json000064400000001122151666572110015321 0ustar00{ "sources": { "articleOrderOptions": [ { "text": "Published", "value": "publish_up" }, { "text": "Unpublished", "value": "publish_down" }, { "text": "Created", "value": "created" }, { "text": "Modified", "value": "modified" }, { "text": "Alphabetical", "value": "title" }, { "text": "Hits", "value": "hits" }, { "text": "Article Order", "value": "ordering" }, { "text": "Featured Articles Order", "value": "front" }, { "text": "Random", "value": "rand" } ] } } builder-joomla-source/updates.php000064400000013540151666572110013142 0ustar00<?php namespace YOOtheme; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper; return [ '3.0.0-beta.7.1' => function ($node) { if ( str_starts_with($node->source->query->name ?? '', 'customArticle') && isset($node->source->query->arguments->featured) ) { $node->source->query->arguments->featured = empty( $node->source->query->arguments->featured ) ? '' : 'only'; } }, '2.6.0-beta.0.1' => function ($node) { if (class_exists(FieldsHelper::class) && isset($node->source->props)) { static $fields; if ($fields === null) { $fields = FieldsHelper::getFields('', null, false, null, true); } // update media fields to new MediaFieldType foreach ($node->source->props as $prop) { if (str_contains($prop->name ?? '', 'field.')) { foreach ($fields as $field) { if ( str_ends_with($prop->name, 'field.' . strtr($field->name, '-', '_')) && $field->type === 'media' ) { $prop->name .= '.imagefile'; } } $prop->name = strtr($prop->name, '-', '_'); } } if (str_contains($node->source->query->field->name ?? '', 'field.')) { foreach ($fields as $field) { if ( str_ends_with( $node->source->query->field->name, 'field.' . strtr($field->name, '-', '_'), ) ) { if ($field->type === 'subform') { foreach ($node->source->props as $prop) { $prop->name = Str::snakeCase($prop->name); } foreach ((array) $field->fieldparams->get('options', []) as $option) { foreach ($fields as $subField) { if ( $subField->id === $option->customfield && $subField->type === 'media' ) { $prefix = "{$field->name}_"; foreach ($node->source->props as $prop) { if ( $prop->name === strtr($subField->name, '-', '_') || $prop->name === strtr( substr($subField->name, strlen($prefix)), '-', '_', ) ) { $prop->name .= '.imagefile'; } } } } } } if ($field->type === 'repeatable') { foreach ((array) $field->fieldparams->get('fields', []) as $subField) { if ($subField->fieldtype === 'media') { foreach ($node->source->props ?? [] as $prop) { if ($prop->name === Str::snakeCase($subField->fieldname)) { $prop->name .= '.imagefile'; } } } } } } } } } }, '2.4.0-beta.5' => function ($node) { // refactor show_category argument into show_taxonomy argument foreach ($node->source->props ?? [] as $prop) { if ( isset($prop->name) && $prop->name === 'metaString' && isset($prop->arguments->show_category) ) { /** @var object $arguments */ $arguments = $prop->arguments; $arguments->show_taxonomy = $arguments->show_category ? 'category' : ''; unset($arguments->show_category); } } }, '2.2.0-beta.0.1' => function ($node) { static $fields; if (class_exists(FieldsHelper::class) && is_null($fields)) { $fields = array_column( FieldsHelper::getFields('', null, false, null, true), 'type', 'name', ); } if ( isset($node->source->query->field->name) && in_array('field', $field = explode('.', $node->source->query->field->name)) ) { $node->source->query->field->name = strtr($node->source->query->field->name, '-', '_'); // snake case repeatable field names if (isset($fields[end($field)]) && $fields[end($field)] === 'repeatable') { foreach ($node->source->props ?? [] as $prop) { $prop->name = Str::snakeCase($prop->name); } } } // snake case custom field names foreach ($node->source->props ?? [] as $prop) { if (isset($prop->name) && in_array('field', explode('.', $prop->name))) { $prop->name = strtr($prop->name, '-', '_'); } } }, ]; builder-joomla-source/templates/meta.php000064400000005303151666572110014417 0ustar00<?php use Joomla\CMS\Categories\Categories; use Joomla\CMS\Factory; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\Router\Route; use Joomla\Component\Content\Site\Helper\RouteHelper; use YOOtheme\Builder\Joomla\Source\UserHelper; use YOOtheme\Path; $author = $published = $category = $tag = ''; // Author if ($args['show_author']) { $author = $article->created_by_alias ?: $article->author; if (!isset($article->contact_link)) { $article->contact_link = UserHelper::getContactLink($article->created_by); } if (!empty($article->contact_link)) { $author = HTMLHelper::_('link', $article->contact_link, $author); } } // Publish date if ($args['show_publish_date'] && !empty($article->publish_up) && $article->publish_up !== Factory::getDbo()->getNullDate()) { $published = HTMLHelper::_('date', $article->publish_up, $args['date_format'] ?: Text::_('DATE_FORMAT_LC3')); $published = '<time datetime="' . HTMLHelper::_('date', $article->publish_up, 'c') . "\">{$published}</time>"; } // Category if ($args['show_taxonomy'] === 'category') { $category = $article->category_title; if ($article->catid) { if (!$category) { $category = Categories::getInstance('content')->get($article->catid); if ($category) { $category = $category->title; } } $category = HTMLHelper::_('link', Route::_(RouteHelper::getCategoryRoute($article->catid)), $category); } } // Tag if ($tags && $args['show_taxonomy'] === 'tag') { $tag = $view->render(Path::get('./tags', __DIR__), [ 'tags' => $tags, 'args' => [ 'separator' => ', ', 'show_link' => true, 'link_style' => $args['link_style'], ], ]); } if (!$published && !$author && !$category && !$tag) { return; } if ($args['link_style']) { echo "<span class=\"uk-{$args['link_style']}\">"; } switch ($args['format']) { case 'list': echo implode(" {$args['separator']} ", array_filter([$published, $author, $category, $tag])); break; default: // sentence if ($author && $published) { Text::printf('TPL_YOOTHEME_META_AUTHOR_DATE', $author, $published); } elseif ($author) { Text::printf('TPL_YOOTHEME_META_AUTHOR', $author); } elseif ($published) { Text::printf('TPL_YOOTHEME_META_DATE', $published); } if ($category) { echo ' '; Text::printf('TPL_YOOTHEME_META_CATEGORY', $category); } elseif ($tag) { echo ' '; Text::printf('TPL_YOOTHEME_META_TAG', $tag); } } if ($args['link_style']) { echo '</span>'; } builder-joomla-source/templates/tags.php000064400000001023151666572110014422 0ustar00<?php use Joomla\Component\Tags\Site\Helper\RouteHelper; if ($args['show_link'] && $args['link_style']) { echo '<span class="uk-' . $args['link_style'] . '">'; } echo implode($args['separator'], array_map(function ($tag) use ($args) { if (empty($args['show_link'])) { return $tag->title; } $route = RouteHelper::getTagRoute("{$tag->tag_id}:{$tag->alias}"); return "<a href=\"{$route}\">{$tag->title}</a>"; }, $tags ?: [])); if ($args['show_link'] && $args['link_style']) { echo '</span>'; } builder-joomla-source/src/UserHelper.php000064400000012374151666572110014346 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\CMS\Access\Access; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\Helper\UserGroupsHelper; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\MVC\Model\BaseDatabaseModel; use Joomla\CMS\Router\Route; use Joomla\Component\Contact\Site\Helper\RouteHelper; use Joomla\Component\Users\Administrator\Extension\UsersComponent; use Joomla\Component\Users\Administrator\Model\UsersModel; use Joomla\Database\DatabaseDriver; use function YOOtheme\app; class UserHelper { /** * Gets the user's contact. * * @param int $id * * @return object|null */ public static function getContact($id) { static $contacts = []; if (!isset($contacts[$id])) { /** @var DatabaseDriver $db */ $db = app(DatabaseDriver::class); $query = sprintf( 'SELECT id AS contactid, alias, catid FROM #__contact_details WHERE published = 1 AND user_id = %d', $id, ); if (Multilanguage::isEnabled() === true) { $lang = Factory::getApplication()->getLanguage(); $query .= sprintf( ' AND (language IN (%s, %s) OR language IS NULL)', $db->quote($lang->getTag()), $db->quote('*'), ); } $query .= ' ORDER BY id DESC LIMIT 1'; $contacts[$id] = $db->setQuery($query)->loadObject() ?: false; } return $contacts[$id] ?: null; } /** * Query users. * * @param array $args * * @return array */ public static function queryContacts(array $args = []) { $model = new ContactsModel(['ignore_request' => true]); $model->setState('params', ComponentHelper::getParams('com_contact')); $model->setState('filter.published', 1); $props = [ 'offset' => 'list.start', 'limit' => 'list.limit', 'order' => 'list.ordering', 'order_direction' => 'list.direction', 'catid' => 'filter.category_id', 'tag' => 'filter.tags', 'include_child_categories' => 'filter.include_child_categories', 'include_child_tags' => 'filter.include_child_tags', ]; foreach (array_intersect_key($props, $args) as $key => $prop) { $model->setState($prop, $args[$key]); } return $model->getItems(); } /** * Gets the user's contact link. * * @param int $id * * @return string|null */ public static function getContactLink($id) { if (!($contact = self::getContact($id))) { return null; } return Route::_(RouteHelper::getContactRoute($contact->contactid, (int) $contact->catid)); } /** * Query users. * * @param array $args * * @return array */ public static function query(array $args = []) { /** @var UsersModel $model */ $model = static::getModel(); $model->setState('params', ComponentHelper::getParams('com_users')); $model->setState('filter.active', true); $model->setState('filter.state', 0); $props = [ 'offset' => 'list.start', 'limit' => 'list.limit', 'order' => 'list.ordering', 'order_direction' => 'list.direction', 'groups' => 'filter.groups', ]; if (empty($args['groups'])) { unset($args['groups']); } foreach (array_intersect_key($props, $args) as $key => $prop) { $model->setState($prop, $args[$key]); } return $model->getItems(); } public static function getAuthorList() { /** @var DatabaseDriver $db */ $db = app(DatabaseDriver::class); $query = sprintf( 'SELECT DISTINCT(m.user_id) AS value, u.name AS text FROM #__usergroups AS ug1 JOIN #__usergroups AS ug2 ON ug2.lft >= ug1.lft AND ug1.rgt >= ug2.rgt JOIN #__user_usergroup_map AS m ON ug2.id=m.group_id JOIN #__users AS u ON u.id=m.user_id WHERE ug1.id IN (%s)', join( ',', array_filter( array_map(fn($group) => $group->id, UserGroupsHelper::getInstance()->getAll()), fn($id) => Access::checkGroup($id, 'core.create', 'com_content') || Access::checkGroup($id, 'core.admin'), ), ), ); return $db->setQuery($query)->loadObjectList(); } protected static function getModel() { if (version_compare(JVERSION, '4.0', '<')) { BaseDatabaseModel::addIncludePath(JPATH_ADMINISTRATOR . '/components/com_users/models'); return BaseDatabaseModel::getInstance('users', 'UsersModel', [ 'ignore_request' => true, ]); } /** @var UsersComponent $component */ $component = Factory::getApplication()->bootComponent('com_users'); return $component ->getMVCFactory() ->createModel('users', 'administrator', ['ignore_request' => true]); } } builder-joomla-source/src/ContactsModel.php000064400000004347151666572110015030 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\Component\Contact\Administrator\Model\ContactsModel as BaseModel; class ContactsModel extends BaseModel { protected function getListQuery() { $categoryId = $this->getState('filter.category_id'); $includeChildCategories = $this->getState('filter.include_child_categories'); if ($categoryId && $includeChildCategories) { $this->setState('filter.category_id'); } $tags = (array) $this->getState('filter.tags', []); $includeChildTags = $this->getState('filter.include_child_tags'); if ($tags && !$includeChildTags && !version_compare(JVERSION, '4.0', '<')) { $this->setState('filter.tag', $tags); } $query = parent::getListQuery(); if ($categoryId && $includeChildCategories) { $categories = implode(',', array_map('intval', (array) $categoryId)); $where = []; if ($includeChildCategories === 'include') { $where[] = "a.catid IN ({$categories})"; } $subQuery = "SELECT sub.id FROM #__categories AS sub JOIN #__categories AS this ON sub.lft > this.lft AND sub.rgt < this.rgt WHERE this.id IN ({$categories})"; $where[] = "a.catid IN ({$subQuery})"; $query->andWhere($where); } if ($tags && ($includeChildTags || version_compare(JVERSION, '4.0', '<'))) { $tags = implode(',', array_map('intval', $tags)); $where = []; if (!$includeChildTags || $includeChildTags === 'include') { $subQuery = "SELECT content_item_id FROM #__contentitem_tag_map WHERE tag_id IN ({$tags}) AND type_alias = 'com_contact.contact'"; $where[] = "a.id IN ({$subQuery})"; } if ($includeChildTags) { $subQuery = "SELECT map.content_item_id FROM #__tags AS sub JOIN #__tags AS this ON sub.lft > this.lft AND sub.rgt < this.rgt JOIN #__contentitem_tag_map as map ON sub.id = map.tag_id WHERE this.id IN ({$tags}) and map.type_alias = 'com_contact.contact'"; $where[] = "a.id IN ({$subQuery})"; } $query->andWhere($where); } return $query; } } builder-joomla-source/src/TagModel.php000064400000001640151666572110013756 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\Component\Tags\Site\Model\TagModel as BaseModel; use Joomla\Database\DatabaseDriver; use function YOOtheme\app; class TagModel extends BaseModel { protected function getListQuery() { $query = parent::getListQuery(); $ordering = $this->getState('list.ordering', ''); if ($ordering === 'c.rand') { $query->clear('order'); $query->order(app(DatabaseDriver::class)->getQuery(true)->Rand()); } elseif ($this->getState('list.alphanum')) { $ordering = $this->getState('list.ordering', 'c.core_ordering'); $order = $this->getState('list.direction', 'ASC'); $query->clear('order'); $query->order( "(substr({$ordering}, 1, 1) > '9') {$order}, {$ordering}+0 {$order}, {$ordering} {$order}", ); } return $query; } } builder-joomla-source/src/Listener/LoadTemplate.php000064400000004555151666572110016432 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Listener; use Joomla\CMS\Language\Text; use YOOtheme\Builder; use YOOtheme\Builder\Templates\TemplateHelper; use YOOtheme\Config; use YOOtheme\Event; use function YOOtheme\app; class LoadTemplate { public Config $config; public Builder $builder; public function __construct(Config $config, Builder $builder) { $this->config = $config; $this->builder = $builder; } public function handle($event): void { [$htmlView, $tpl] = $event->getArguments(); $view = Event::emit('builder.template', $htmlView, $tpl); if (empty($view['type'])) { return; } // get template from customizer request? $template = $this->config->get('req.customizer.template'); if ($this->config->get('app.isCustomizer')) { $this->config->set('customizer.view', $view['type']); } if ($this->config->get('app.isBuilder') && empty($template)) { return; } // get visible template $visible = app(TemplateHelper::class)->match($view); // set template identifier if ($this->config->get('app.isCustomizer')) { $this->config->add('customizer.template', [ 'id' => $template['id'] ?? null, 'visible' => $visible['id'] ?? null, ]); } if ($template ??= $visible) { // get output from builder $output = $this->builder->render( json_encode($template['layout'] ?? []), ($view['params'] ?? []) + [ 'prefix' => "template-{$template['id']}", 'template' => $template['type'], ], ); // append frontend edit button? if ($output && isset($view['editUrl']) && !$this->config->get('app.isCustomizer')) { $output .= "<a style=\"position: fixed!important\" class=\"uk-position-medium uk-position-bottom-right uk-position-z-index uk-button uk-button-primary\" href=\"{$view['editUrl']}\">" . Text::_('JACTION_EDIT') . '</a>'; } $htmlView->set('_output', $output ?? ''); $this->config->set('app.isBuilder', true); $this->config->set('app.template', $template); } } } builder-joomla-source/src/Listener/LoadBuilderConfig.php000064400000033214151666572110017365 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Listener; use Joomla\CMS\Categories\Categories; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Multilanguage; use Joomla\Database\DatabaseDriver; use YOOtheme\Builder\BuilderConfig; use YOOtheme\Builder\Joomla\Source\UserHelper; use function YOOtheme\trans; class LoadBuilderConfig { public DatabaseDriver $db; public function __construct(DatabaseDriver $db) { $this->db = $db; } /** * @param BuilderConfig $config */ public function handle($config): void { $config->merge([ 'languages' => array_map( fn($lang) => [ 'value' => $lang->value == '*' ? '' : strtolower($lang->value), 'text' => $lang->text, ], Multilanguage::isEnabled() ? HTMLHelper::_('contentlanguage.existing', true, true) : [], ), 'templates' => static::getTemplates(), 'categories' => array_map( fn($category) => ['value' => (string) $category->value, 'text' => $category->text], HTMLHelper::_('category.options', 'com_content'), ), 'root_categories' => array_map( fn($category) => ['value' => (string) $category->id, 'text' => $category->title], Categories::getInstance('content')->get()->getChildren(), ), 'com_contact.categories' => array_map( fn($category) => ['value' => (string) $category->value, 'text' => $category->text], HTMLHelper::_('category.options', 'com_contact'), ), 'com_finder.filters' => array_map( fn($filter) => ['value' => $filter->value, 'text' => $filter->text], $this->getSearchFilters(), ), 'tags' => array_map( fn($tag) => ['value' => (string) $tag->value, 'text' => $tag->text], HTMLHelper::_('tag.options'), ), 'authors' => array_map( fn($user) => ['value' => (string) $user->value, 'text' => $user->text], UserHelper::getAuthorList(), ), 'usergroups' => array_map( fn($group) => ['value' => (string) $group->value, 'text' => $group->text], HTMLHelper::_('user.groups'), ), ]); } protected static function getTemplates(): array { return array_merge( [ 'com_content.article' => [ 'label' => trans('Single Article'), 'fieldset' => [ 'default' => [ 'fields' => [ 'catid' => static::getCategoryField(), 'include_child_categories' => static::getIncludeChildCategoriesField( trans( 'The template is only assigned to articles from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.', ), ), 'tag' => static::getTagField(), 'include_child_tags' => static::getIncludeChildTagsField( trans( 'The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.', ), ), 'lang' => static::getLanguageField(), ], ], ], ], 'com_content.category' => [ 'label' => trans('Category Blog'), 'fieldset' => [ 'default' => [ 'fields' => [ 'catid' => static::getCategoryField(), 'include_child_categories' => static::getIncludeChildCategoriesField( trans( 'The template is only assigned to the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.', ), ), 'tag' => static::getTagField(), 'include_child_tags' => static::getIncludeChildTagsField( trans( 'The template is only assigned to categories if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.', ), ), 'pages' => static::getPagesField(), 'lang' => static::getLanguageField(), ], ], ], ], 'com_content.featured' => [ 'label' => trans('Featured Articles'), 'fieldset' => [ 'default' => [ 'fields' => [ 'pages' => static::getPagesField(), 'lang' => static::getLanguageField(), ], ], ], ], 'com_tags.tag' => [ 'label' => trans('Tagged Items'), 'fieldset' => [ 'default' => [ 'fields' => [ 'tag' => static::getTagField(), 'include_child_tags' => static::getIncludeChildTagsField( trans( 'The template is only assigned to the view if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.', ), ), 'pages' => static::getPagesField(), 'lang' => static::getLanguageField(), ], ], ], ], 'com_tags.tags' => [ 'label' => trans('List All Tags'), 'fieldset' => [ 'default' => [ 'fields' => [ 'pages' => static::getPagesField(), 'lang' => static::getLanguageField(), ], ], ], ], 'com_contact.contact' => [ 'label' => trans('Single Contact'), 'fieldset' => [ 'default' => [ 'fields' => [ 'catid' => static::getCategoryField('com_contact.categories'), 'include_child_categories' => static::getIncludeChildCategoriesField( trans( 'The template is only assigned to contacts from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.', ), ), 'tag' => static::getTagField(), 'include_child_tags' => static::getIncludeChildTagsField( trans( 'The template is only assigned to contacts with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.', ), ), 'lang' => static::getLanguageField(), ], ], ], ], ], ComponentHelper::isEnabled('com_search') ? [ 'com_search.search' => [ 'label' => trans('Search'), 'fieldset' => [ 'default' => [ 'fields' => [ 'lang' => static::getLanguageField(), ], ], ], ], ] : [], [ 'com_finder.search' => [ 'label' => trans('Smart Search'), 'fieldset' => [ 'default' => [ 'fields' => [ 'pages' => static::getPagesField(), 'lang' => static::getLanguageField(), ], ], ], ], '_search' => [ 'label' => trans('Live Search'), 'fieldset' => [ 'default' => [ 'fields' => [ 'lang' => static::getLanguageField(), ], ], 'params' => [ 'fields' => [ 'live_search_results' => [ 'label' => trans('Items per Page'), 'type' => 'number', 'description' => trans('Set the number of items per page.'), 'attrs' => [ 'placeholder' => trans('Default'), 'min' => '1', 'max' => LoadSearchTemplate::MAX_ITEMS_PER_PAGE, ], ], ], ], ], ], 'error-404' => [ 'label' => trans('Error 404'), 'fieldset' => [ 'default' => [ 'fields' => [ 'lang' => static::getLanguageField(), ], ], ], ], ], ); } protected function getSearchFilters(): array { $query = $this->db ->getQuery(true) ->select('f.title AS text, f.filter_id AS value') ->from($this->db->quoteName('#__finder_filters') . ' AS f') ->where('f.state = 1') ->order('f.title ASC'); return $this->db->setQuery($query)->loadObjectList(); } protected static function getCategoryField($categories = 'categories'): array { return [ 'label' => trans('Limit by Categories'), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => "yootheme.builder['{$categories}']"]], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], ]; } protected static function getTagField(): array { return [ 'label' => trans('Limit by Tags'), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.tags']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], ]; } protected static function getIncludeChildCategoriesField($description): array { return [ 'type' => 'select', 'description' => $description, 'options' => [ trans('Exclude child categories') => '', trans('Include child categories') => 'include', trans('Only include child categories') => 'only', ], ]; } protected static function getIncludeChildTagsField($description): array { return [ 'type' => 'select', 'description' => $description, 'options' => [ trans('Exclude child tags') => '', trans('Include child tags') => 'include', trans('Only include child tags') => 'only', ], ]; } protected static function getLanguageField(): array { return [ 'label' => trans('Limit by Language'), 'type' => 'select', 'defaultIndex' => 0, 'options' => [['evaluate' => 'yootheme.builder.languages']], 'show' => 'yootheme.builder.languages.length > 1 || lang', ]; } protected static function getPagesField(): array { return [ 'label' => trans('Limit by Page Number'), 'description' => trans('The template is only assigned to the selected pages.'), 'type' => 'select', 'options' => [ trans('All pages') => '', trans('First page') => 'first', trans('All except first page') => 'except_first', ], ]; } } builder-joomla-source/src/Listener/LoadSourceTypes.php000064400000004504151666572110017136 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Listener; use YOOtheme\Builder\Joomla\Source\Type; use YOOtheme\Builder\Source\Type\RequestType; use YOOtheme\Builder\Source\Type\SiteType; class LoadSourceTypes { public static function handle($source): void { $query = [ Type\ArticleQueryType::config(), Type\CategoryQueryType::config(), Type\ContactQueryType::config(), Type\ArticlesQueryType::config(), Type\SmartSearchQueryType::config(), Type\SmartSearchItemsQueryType::config(), Type\TagsQueryType::config(), Type\TagItemsQueryType::config(), Type\CustomArticleQueryType::config(), Type\CustomArticlesQueryType::config(), Type\CustomCategoryQueryType::config(), Type\CustomCategoriesQueryType::config(), Type\CustomTagQueryType::config(), Type\CustomTagsQueryType::config(), Type\CustomMenuItemQueryType::config(), Type\CustomMenuItemsQueryType::config(), Type\CustomUserQueryType::config(), Type\CustomUsersQueryType::config(), Type\SiteQueryType::config(), ]; $types = [ ['Article', Type\ArticleType::config()], ['ArticleEvent', Type\ArticleEventType::config()], ['ArticleImages', Type\ArticleImagesType::config()], ['ArticleUrls', Type\ArticleUrlsType::config()], ['Category', Type\CategoryType::config()], ['CategoryParams', Type\CategoryParamsType::config()], ['Contact', Type\ContactType::config()], ['Event', Type\EventType::config()], ['Images', Type\ImagesType::config()], ['MenuItem', Type\MenuItemType::config()], ['Request', RequestType::config()], ['Site', SiteType::config()], ['SmartSearch', Type\SmartSearchType::config()], ['SmartSearchItem', Type\SmartSearchItemType::config()], ['Tag', Type\TagType::config()], ['TagItem', Type\TagItemType::config()], ['User', Type\UserType::config()], ]; foreach ($query as $args) { $source->queryType($args); } foreach ($types as $args) { $source->objectType(...$args); } } } builder-joomla-source/src/Listener/MatchTemplate.php000064400000020222151666572110016574 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Listener; use Joomla\CMS\Categories\Categories; use Joomla\CMS\Document\Document; use Joomla\CMS\Factory; use Joomla\CMS\Router\Route; use Joomla\CMS\Uri\Uri; use Joomla\Component\Content\Site\Helper\RouteHelper; use Joomla\Database\DatabaseDriver; use YOOtheme\Builder\Joomla\Source\TagHelper; class MatchTemplate { public string $language; protected DatabaseDriver $db; public function __construct(?Document $document, DatabaseDriver $db) { $this->language = $document->language ?? 'en-gb'; $this->db = $db; } public function handle($view, $tpl): ?array { if ($tpl) { return null; } $layout = $view->getLayout(); $context = $view->get('context'); if ($context === 'com_content.article' && $layout === 'default') { $item = $view->get('item'); return [ 'type' => $context, 'query' => [ 'catid' => fn($ids, $query) => $this->matchCategory( $item->catid, $ids, $query['include_child_categories'] ?? false, 'content', ), 'tag' => fn($ids, $query) => $this->matchTag( $item->tags->itemTags, $ids, $query['include_child_tags'] ?? false, ), 'lang' => $this->language, ], 'params' => ['item' => $item], 'editUrl' => $item->params->get('access-edit') ? Route::_( RouteHelper::getFormRoute($item->id) . '&return=' . base64_encode(Uri::getInstance()), ) : null, ]; } if ($context === 'com_content.category' && $layout === 'blog') { $category = $view->get('category'); $pagination = $view->get('pagination'); return [ 'type' => $context, 'query' => [ 'catid' => fn($ids, $query) => $this->matchCategory( $category, $ids, $query['include_child_categories'] ?? false, 'content', ), 'tag' => fn($ids, $query) => $this->matchTag( TagHelper::get($view->get('State')->get('filter.tag', [])), $ids, $query['include_child_tags'] ?? false, ), 'pages' => $pagination->pagesCurrent === 1 ? 'first' : 'except_first', 'lang' => $this->language, ], 'params' => [ 'category' => $category, 'items' => array_merge($view->get('lead_items'), $view->get('intro_items')), 'pagination' => $pagination, ], ]; } if ($context === 'com_content.featured') { $pagination = $view->get('pagination'); return [ 'type' => $context, 'query' => [ 'pages' => $pagination->pagesCurrent === 1 ? 'first' : 'except_first', 'lang' => $this->language, ], 'params' => ['items' => $view->get('items'), 'pagination' => $pagination], ]; } if ($context === 'com_tags.tag') { $pagination = $view->get('pagination'); $tags = $view->get('item'); return [ 'type' => $context, 'query' => [ 'tag' => fn($ids, $query) => $this->matchTag( $tags, $ids, $query['include_child_tags'] ?? false, ), 'pages' => $pagination->pagesCurrent === 1 ? 'first' : 'except_first', 'lang' => $this->language, ], 'params' => [ 'tags' => $tags, 'items' => $view->get('items'), 'pagination' => $pagination, ], ]; } if ($context === 'com_tags.tags') { $pagination = $view->get('pagination'); return [ 'type' => $context, 'query' => [ 'lang' => $this->language, 'pages' => $pagination->pagesCurrent === 1 ? 'first' : 'except_first', ], 'params' => [ 'tags' => $view->get('items'), 'pagination' => $pagination, ], ]; } if ($context === 'com_contact.contact') { $item = $view->get('item'); return [ 'type' => $context, 'query' => [ 'catid' => fn($ids, $query) => $this->matchCategory( $item->catid, $ids, $query['include_child_categories'] ?? false, 'contact', ), 'tag' => fn($ids, $query) => $this->matchTag( $item->tags->itemTags, $ids, $query['include_child_tags'] ?? false, ), 'lang' => $this->language, ], 'params' => ['item' => $item], ]; } if ($context === 'com_finder.search') { $pagination = $view->get('pagination'); $input = Factory::getApplication()->input; return [ 'type' => $input->getBool('live-search') ? '_search' : $context, 'query' => [ 'pages' => $pagination->pagesCurrent === 1 ? 'first' : 'except_first', 'lang' => $this->language, ], 'params' => [ 'search' => [ 'searchword' => $view->get('query')->input ?: '', 'total' => $pagination->total, ], 'items' => $view->get('results') ?? [], 'pagination' => $pagination, ], ]; } if ($view->getName() === '404') { return [ 'type' => 'error-404', 'query' => ['lang' => $this->language], ]; } return null; } protected function matchCategory($category, $categoryIds, $includeChildren, $extension): bool { $match = in_array(is_object($category) ? $category->id : $category, $categoryIds); if (!$includeChildren || ($match && $includeChildren === 'include')) { return $match; } if ($match && $includeChildren === 'only') { return false; } if (!is_object($category)) { $category = Categories::getInstance($extension)->get($category); } return $category && array_intersect(array_keys($category->getPath()), $categoryIds); } protected function matchTag($tags, $tagIds, $includeChildren): bool { $match = (bool) array_intersect(array_column($tags, 'id'), $tagIds); if (!$includeChildren || ($match && $includeChildren === 'include')) { return $match; } if ($match && $includeChildren === 'only') { return false; } if (array_intersect(array_column($tags, 'parent_id'), $tagIds)) { return true; } $tags = array_filter($tags, fn($tag) => substr_count($tag->path, '/') >= 2); if (!$tags) { return false; } $query = sprintf( 'SELECT 1 FROM #__tags WHERE id IN (%s) AND (%s) LIMIT 1', join(',', $tagIds), join(' OR ', array_map(fn($tag) => "(lft < {$tag->lft} AND rgt > {$tag->rgt})", $tags)), ); return (bool) $this->db->setQuery($query)->loadResult(); } } builder-joomla-source/src/Listener/LoadNotFound.php000064400000002446151666572110016410 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Listener; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\MVC\View\HtmlView; use YOOtheme\Config; use YOOtheme\Theme\Joomla\ThemeLoader; use function YOOtheme\app; class LoadNotFound { public Config $config; public CMSApplication $joomla; public function __construct(Config $config, CMSApplication $joomla) { $this->config = $config; $this->joomla = $joomla; } public function handle($event): void { [$result] = $event->getArguments(); if (!$this->config->get('theme.template')) { app()->call([ThemeLoader::class, 'initTheme']); } $view = new HtmlView(['name' => '404', 'base_path' => '', 'template_path' => '']); $this->joomla->triggerEvent('onLoadTemplate', [$view, null]); if ($this->config->get('app.isCustomizer')) { $result['customizer'] = sprintf( '<script id="customizer-data">window.yootheme = window.yootheme || {}; var $customizer = yootheme.customizer = JSON.parse(atob("%s"));</script>', base64_encode(json_encode($this->config->get('customizer'))), ); } if (!empty($view->get('_output'))) { $result['404'] = $view->get('_output'); } } } builder-joomla-source/src/Listener/LoadSearchTemplate.php000064400000003374151666572110017556 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Listener; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\Document\HtmlDocument; use Joomla\CMS\Document\RawDocument; use YOOtheme\Builder\Templates\TemplateHelper; use YOOtheme\Config; use function YOOtheme\app; class LoadSearchTemplate { public const MAX_ITEMS_PER_PAGE = 100; public Config $config; public CMSApplication $joomla; public function __construct(Config $config, CMSApplication $joomla) { $this->config = $config; $this->joomla = $joomla; } public function afterInitialiseDocument(): void { if ( $this->joomla instanceof SiteApplication && $this->joomla->input->getCmd('option') === 'com_finder' && $this->joomla->input->getCmd('view') === 'search' && $this->joomla->input->getBool('live-search') && ($template = app(TemplateHelper::class)->match([ 'type' => '_search', 'query' => ['lang' => $this->joomla->getDocument()->language], ])) && ($results = (int) ($template['params']['live_search_results'] ?? 0)) ) { $this->joomla ->getParams() ->set('list_limit', (string) min($results, static::MAX_ITEMS_PER_PAGE)); } } public function afterDispatch(): void { $document = $this->joomla->getDocument(); if ( $document instanceof HtmlDocument && $this->config->get('app.template.type') === '_search' ) { $doc = new RawDocument(); $doc->setBuffer($document->getBuffer('component') ?? ''); $this->joomla->loadDocument($doc); } } } builder-joomla-source/src/Listener/LoadTemplateUrl.php000064400000013704151666572110017111 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Listener; use Joomla\CMS\Categories\Categories; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Router\SiteRouter; use Joomla\Component\Contact\Site\Helper\RouteHelper as ContactRouteHelper; use Joomla\Component\Content\Site\Helper\RouteHelper; use Joomla\Component\Tags\Site\Helper\RouteHelper as TagRouteHelper; use YOOtheme\Arr; use YOOtheme\Builder\Joomla\Source\ArticleHelper; use YOOtheme\Builder\Joomla\Source\TagHelper; use YOOtheme\Builder\Joomla\Source\UserHelper; use YOOtheme\Config; class LoadTemplateUrl { public Config $config; public SiteRouter $router; public function __construct(Config $config, SiteRouter $router) { $this->config = $config; $this->router = $router; } public function handle(array $template): array { $url = ''; try { switch ($template['type'] ?? '') { case 'com_content.article': $lang = $this->getLanguage($template); $args = ['lang' => $lang] + $template['query'] + ['limit' => 1]; Arr::updateKeys($args, ['tag' => 'tags']); if ($articles = ArticleHelper::query($args)) { $url = RouteHelper::getArticleRoute( $articles[0]->id, $articles[0]->catid, $lang, ); } break; case 'com_content.category': $lang = $this->getLanguage($template); $catid = $template['query']['catid'] ?? null ?: [$this->getDefaultCategory($lang)]; if ( isset($catid[0]) && ($template['query']['include_child_categories'] ?? false) === 'only' ) { $catid = [$this->getFirstChildCategory($catid)]; } if (isset($catid[0])) { $url = RouteHelper::getCategoryRoute($catid[0], $lang, 'blog'); } break; case 'com_content.featured': $url = 'index.php?option=com_content&view=featured'; break; case 'com_tags.tag': $tag = $template['query']['tag'] ?? null ?: array_column(TagHelper::query($template['query'] + ['limit' => 1]), 'id'); if ( isset($tag[0]) && ($template['query']['include_child_tags'] ?? false) === 'only' ) { $tag = [$this->getFirstChildTag($tag)]; } if (isset($tag[0])) { $url = version_compare(JVERSION, '4.2', '<') ? TagRouteHelper::getTagRoute($tag[0]) : TagRouteHelper::getComponentTagRoute($tag[0]); } break; case 'com_tags.tags': $url = 'index.php?option=com_tags&view=tags'; break; case 'com_contact.contact': $lang = $this->getLanguage($template); $args = $template['query'] + ['limit' => 1]; if ($contacts = UserHelper::queryContacts($args)) { $url = ContactRouteHelper::getContactRoute( $contacts[0]->id, $contacts[0]->catid, $lang, ); } break; case 'com_finder.search': $url = 'index.php?option=com_finder&view=search'; break; case '_search': $template['url'] = '#live-search'; return $template; case 'error-404': $url = RouteHelper::getArticleRoute(-1, 0, $this->getLanguage($template)); break; } if ($url) { $template['url'] = (string) $this->router->build($url); } } catch (\Exception $e) { // ArticleHelper::query() throws exception if article "attribs" are invalid JSON } return $template; } /** * Fixes lowercase language code from "en-gb" to "en-GB". */ protected function getLanguage(array $template): string { return preg_replace_callback( '/-\w{2}$/', fn($matches) => strtoupper($matches[0]), $template['query']['lang'] ?? '', ); } protected function getDefaultCategory(string $lang): ?string { foreach ( HTMLHelper::_('category.options', 'com_content', [ 'filter.published' => [0, 1], 'filter.language' => [$lang, '*'], ]) as $category ) { if ($this->config->get('~theme.page_category') !== (string) $category->value) { return (string) $category->value; } } return null; } protected function getFirstChildCategory($categoryIds): ?string { $model = Categories::getInstance('content'); foreach ($categoryIds as $id) { $category = $model->get($id); if ($category) { $children = $category->getChildren(true); if (isset($children[0])) { return (string) $children[0]->id; } } } return null; } protected function getFirstChildTag($tagIds): ?string { foreach ($tagIds as $id) { $tags = TagHelper::query(['parent_id' => $id]); if (isset($tags[0])) { return (string) $tags[0]->id; } } return null; } } builder-joomla-source/src/Type/CategoryType.php000064400000033026151666572110015625 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Categories\CategoryNode; use Joomla\CMS\Helper\TagsHelper; use Joomla\CMS\Tree\NodeInterface; use Joomla\CMS\User\User; use Joomla\Component\Content\Site\Helper\RouteHelper; use YOOtheme\Builder\Joomla\Source\ArticleHelper; use YOOtheme\Builder\Joomla\Source\TagHelper; use YOOtheme\Path; use YOOtheme\View; use function YOOtheme\app; use function YOOtheme\trans; class CategoryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Title'), 'filters' => ['limit', 'preserve'], ], ], 'description' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Description'), 'filters' => ['limit', 'preserve'], ], ], 'params' => [ 'type' => 'CategoryParams', 'metadata' => [ 'label' => '', ], 'extensions' => [ 'call' => __CLASS__ . '::params', ], ], 'link' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], 'extensions' => [ 'call' => __CLASS__ . '::link', ], ], 'parent' => [ 'type' => 'Category', 'metadata' => [ 'label' => trans('Parent Category'), ], 'extensions' => [ 'call' => __CLASS__ . '::parent', ], ], 'tagString' => [ 'type' => 'String', 'args' => [ 'parent_id' => [ 'type' => 'String', ], 'separator' => [ 'type' => 'String', ], 'show_link' => [ 'type' => 'Boolean', ], 'link_style' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Tags'), 'arguments' => [ 'parent_id' => [ 'label' => trans('Parent Tag'), 'description' => trans( 'Tags are only loaded from the selected parent tag.', ), 'type' => 'select', 'default' => '0', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.tags'], ], ], 'separator' => [ 'label' => trans('Separator'), 'description' => trans('Set the separator between tags.'), 'default' => ', ', ], 'show_link' => [ 'label' => trans('Link'), 'type' => 'checkbox', 'default' => true, 'text' => trans('Show link'), ], 'link_style' => [ 'label' => trans('Link Style'), 'description' => trans('Set the link style.'), 'type' => 'select', 'default' => '', 'options' => [ 'Default' => '', 'Muted' => 'link-muted', 'Text' => 'link-text', 'Heading' => 'link-heading', 'Reset' => 'link-reset', ], 'enable' => 'arguments.show_link', ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::tagString', ], ], 'categories' => [ 'type' => [ 'listOf' => 'Category', ], 'metadata' => [ 'label' => trans('Child Categories'), ], 'extensions' => [ 'call' => __CLASS__ . '::categories', ], ], 'articles' => [ 'type' => [ 'listOf' => 'Article', ], 'args' => [ 'subcategories' => [ 'type' => 'Boolean', ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], 'order_alphanum' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Articles'), 'arguments' => [ 'subcategories' => [ 'label' => trans('Filter'), 'text' => trans('Include articles from child categories'), 'type' => 'checkbox', ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of articles.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'default' => 10, 'attrs' => [ 'min' => 1, ], ], ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'publish_up', 'options' => [ [ 'evaluate' => 'yootheme.builder.sources.articleOrderOptions', ], ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'DESC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], ], ], ], 'order_alphanum' => [ 'text' => trans('Alphanumeric Ordering'), 'type' => 'checkbox', ], ], 'directives' => [], ], 'extensions' => [ 'call' => __CLASS__ . '::articles', ], ], 'tags' => [ 'type' => [ 'listOf' => 'Tag', ], 'args' => [ 'parent_id' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Tags'), 'fields' => [ 'parent_id' => [ 'label' => trans('Parent Tag'), 'description' => trans( 'Tags are only loaded from the selected parent tag.', ), 'type' => 'select', 'default' => '0', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.tags'], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::tags', ], ], 'numitems' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Article Count'), ], ], 'alias' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Alias'), ], ], 'id' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('ID'), ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Category'), ], ]; } public static function params($category) { return is_string($category->params) ? json_decode($category->params) : $category->params; } public static function link($category) { return RouteHelper::getCategoryRoute($category->id, $category->language); } /** * @param CategoryNode $category * * @return ?CategoryNode */ public static function parent($category) { /** @var CategoryNode $parent */ $parent = $category->getParent(); return $parent && $parent->id !== 'root' ? $parent : null; } /** * @param CategoryNode $category * * @return CategoryNode[] */ public static function categories($category) { $groups = app(User::class)->getAuthorisedViewLevels(); return array_filter( $category->getChildren(), fn($child) => in_array($child->access, $groups), ); } public static function articles($category, $args) { return ArticleHelper::query(['catid' => $category->id] + $args); } public static function tags($category, $args) { $tags = $category->tags->itemTags ?? (new TagsHelper())->getItemTags('com_content.category', $category->id); if (!empty($args['parent_id'])) { return TagHelper::filterTags($tags, $args['parent_id']); } return $tags; } public static function tagString($category, array $args) { $tags = static::tags($category, $args); $args += [ 'separator' => ', ', 'show_link' => true, 'link_style' => '', ]; return app(View::class)->render( Path::get('../../templates/tags', __DIR__), compact('category', 'tags', 'args'), ); } } builder-joomla-source/src/Type/CategoryQueryType.php000064400000001623151666572110016651 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class CategoryQueryType { protected static $view = ['com_content.category']; /** * @return array */ public static function config() { return [ 'fields' => [ 'category' => [ 'type' => 'Category', 'metadata' => [ 'label' => trans('Category'), 'view' => static::$view, 'group' => trans('Page'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root) { if (in_array($root['template'] ?? '', static::$view)) { return $root['category']; } } } builder-joomla-source/src/Type/CustomArticlesQueryType.php000064400000026217151666572110020043 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use YOOtheme\Builder\Joomla\Source\ArticleHelper; use function YOOtheme\trans; class CustomArticlesQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customArticles' => [ 'type' => [ 'listOf' => 'Article', ], 'args' => [ 'catid' => [ 'type' => [ 'listOf' => 'String', ], ], 'cat_operator' => [ 'type' => 'String', ], 'include_child_categories' => [ 'type' => 'String', ], 'tags' => [ 'type' => [ 'listOf' => 'String', ], ], 'tag_operator' => [ 'type' => 'String', ], 'include_child_tags' => [ 'type' => 'String', ], 'users' => [ 'type' => [ 'listOf' => 'String', ], ], 'users_operator' => [ 'type' => 'String', ], 'featured' => [ 'type' => 'String', ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], 'order_alphanum' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Custom Articles'), 'group' => trans('Custom'), 'fields' => [ 'catid' => [ 'label' => trans('Filter by Categories'), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.categories']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], ], 'cat_operator' => [ 'type' => 'select', 'default' => 'IN', 'options' => [ trans('Match (OR)') => 'IN', trans('Don\'t match (NOR)') => 'NOT IN', ], ], 'include_child_categories' => [ 'type' => 'select', 'description' => trans( 'Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.', ), 'options' => [ trans('Exclude child categories') => '', trans('Include child categories') => 'include', trans('Only include child categories') => 'only', ], ], 'tags' => [ 'label' => trans('Filter by Tags'), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.tags']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], ], 'tag_operator' => [ 'type' => 'select', 'default' => 'IN', 'options' => [ trans('Match one (OR)') => 'IN', trans('Match all (AND)') => 'AND', trans('Don\'t match (NOR)') => 'NOT IN', ], ], 'include_child_tags' => [ 'type' => 'select', 'description' => trans( 'Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.', ), 'options' => [ trans('Exclude child tags') => '', trans('Include child tags') => 'include', trans('Only include child tags') => 'only', ], ], 'users' => [ 'label' => trans('Filter by Authors'), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.authors']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], ], 'users_operator' => [ 'description' => trans( 'Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.', ), 'type' => 'select', 'default' => 'IN', 'options' => [ trans('Match (OR)') => 'IN', trans('Don\'t match (NOR)') => 'NOT IN', ], ], 'featured' => [ 'label' => trans('Filter by Featured Articles'), 'description' => trans( 'Filter articles by featured status. Load all articles, featured articles only, or articles which are not featured.', ), 'type' => 'select', 'options' => [ 'None' => '', 'Featured only' => 'only', 'Not featured' => 'hide', ], ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of articles.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'default' => 10, 'attrs' => [ 'min' => 1, ], ], ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'publish_up', 'options' => [ [ 'evaluate' => 'yootheme.builder.sources.articleOrderOptions', ], ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'DESC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], ], ], ], 'order_alphanum' => [ 'text' => trans('Alphanumeric Ordering'), 'type' => 'checkbox', ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { return ArticleHelper::query($args); } } builder-joomla-source/src/Type/CustomMenuItemQueryType.php000064400000004666151666572110020024 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Factory; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\User\User; use function YOOtheme\app; use function YOOtheme\trans; class CustomMenuItemQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customMenuItem' => [ 'type' => 'MenuItem', 'args' => [ 'menu' => [ 'type' => 'String', ], 'id' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Custom Menu Item'), 'group' => trans('Custom'), 'fields' => [ 'menu' => [ 'label' => trans('Menu'), 'type' => 'select', 'defaultIndex' => 0, 'options' => [ ['evaluate' => 'yootheme.customizer.menu.menusSelect()'], ], ], 'id' => [ 'label' => trans('Menu Item'), 'description' => trans('Select menu item.'), 'type' => 'select', 'defaultIndex' => 0, 'options' => [ ['evaluate' => 'yootheme.customizer.menu.itemsSelect(menu)'], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $item = Factory::getApplication() ->getMenu('site') ->getItem($args['id'] ?? 0); return $item && in_array($item->access, app(User::class)->getAuthorisedViewLevels()) && (!Multilanguage::isEnabled() || in_array($item->language, [Factory::getLanguage()->getTag(), '*'])) ? $item : null; } } builder-joomla-source/src/Type/MenuItemType.php000064400000014671151666572110015600 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Factory; use Joomla\CMS\Language\Multilanguage; use Joomla\CMS\User\User; use YOOtheme\Config; use function YOOtheme\app; use function YOOtheme\trans; class MenuItemType { /** * @return array */ public static function config() { return [ 'fields' => [ 'title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Title'), 'filters' => ['limit', 'preserve'], ], ], 'image' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Image'), ], 'extensions' => [ 'call' => __CLASS__ . '::data', ], ], 'icon' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Icon'), ], 'extensions' => [ 'call' => __CLASS__ . '::data', ], ], 'subtitle' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Subtitle'), ], 'extensions' => [ 'call' => __CLASS__ . '::data', ], ], 'link' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], 'extensions' => [ 'call' => __CLASS__ . '::link', ], ], 'active' => [ 'type' => 'Boolean', 'metadata' => [ 'label' => trans('Active'), ], 'extensions' => [ 'call' => __CLASS__ . '::active', ], ], 'type' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Type'), ], 'extensions' => [ 'call' => __CLASS__ . '::type', ], ], ] + (version_compare(JVERSION, '4.0', '>') ? [ 'parent' => [ 'type' => 'MenuItem', 'metadata' => [ 'label' => trans('Parent Menu Item'), ], 'extensions' => [ 'call' => __CLASS__ . '::parent', ], ], 'children' => [ 'type' => [ 'listOf' => 'MenuItem', ], 'metadata' => [ 'label' => trans('Child Menu Items'), ], 'extensions' => [ 'call' => __CLASS__ . '::children', ], ], ] : []) + [ 'alias' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Alias'), ], ], 'id' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('ID'), ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Menu Item'), ], ]; } public static function link($item) { $link = $item->link; if ($item->type === 'alias' && str_ends_with($link, 'Itemid=')) { $link .= "&Itemid={$item->getParams()->get('aliasoptions')}"; } if (str_starts_with($link, 'index.php?') && !str_contains($link, 'Itemid=')) { $link .= "&Itemid={$item->id}"; } return $link; } public static function active($item): bool { $active = Factory::getApplication()->getMenu()->getActive(); if (!$active) { return false; } $alias_id = $item->getParams()->get('aliasoptions'); // set active state if ($item->id == $active->id || ($item->type == 'alias' && $alias_id == $active->id)) { return true; } if (in_array($item->id, $active->tree)) { return true; } elseif ($item->type == 'alias') { if (count($active->tree) > 0 && $alias_id == $active->tree[count($active->tree) - 1]) { return true; } elseif (in_array($alias_id, $active->tree) && !in_array($alias_id, $item->tree)) { return true; } } return false; } public static function data($item, $args, $context, $info) { $value = app(Config::class)->get("~theme.menu.items.{$item->id}.{$info->fieldName}"); if ($info->fieldName === 'image' && empty($value)) { return $item->getParams()['menu_image']; } return $value; } public static function type($item): string { if ($item->type === 'separator') { return 'divider'; } if ($item->type === 'heading') { return 'heading'; } return ''; } public static function parent($item, $args, $context, $info) { return $item->getParent(); } public static function children($item, $args, $context, $info) { $groups = app(User::class)->getAuthorisedViewLevels(); $language = Multilanguage::isEnabled() ? [Factory::getLanguage()->getTag(), '*'] : false; return array_filter( $item->getChildren(), fn($child) => $child->getParams()->get('menu_show', true) && in_array($child->access, $groups) && (!$language || in_array($child->language, $language)), ); } } builder-joomla-source/src/Type/CustomArticleQueryType.php000064400000027143151666572110017657 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use YOOtheme\Builder\Joomla\Source\ArticleHelper; use function YOOtheme\trans; class CustomArticleQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customArticle' => [ 'type' => 'Article', 'args' => [ 'id' => [ 'type' => 'String', ], 'catid' => [ 'type' => [ 'listOf' => 'String', ], ], 'include_child_categories' => [ 'type' => 'String', ], 'cat_operator' => [ 'type' => 'String', ], 'tags' => [ 'type' => [ 'listOf' => 'String', ], ], 'include_child_tags' => [ 'type' => 'String', ], 'tag_operator' => [ 'type' => 'String', ], 'users' => [ 'type' => [ 'listOf' => 'String', ], ], 'users_operator' => [ 'type' => 'String', ], 'featured' => [ 'type' => 'String', ], 'offset' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], 'order_alphanum' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Custom Article'), 'group' => trans('Custom'), 'fields' => [ 'id' => [ 'label' => trans('Select Manually'), 'description' => trans( 'Pick an article manually or use filter options to specify which article should be loaded dynamically.', ), 'type' => 'select-item', 'labels' => ['type' => trans('Article')], ], 'catid' => [ 'label' => trans('Filter by Categories'), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.categories']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], 'enable' => '!id', ], 'include_child_categories' => [ 'type' => 'select', 'options' => [ trans('Exclude child categories') => '', trans('Include child categories') => 'include', trans('Only include child categories') => 'only', ], ], 'cat_operator' => [ 'type' => 'select', 'description' => trans( 'Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.', ), 'default' => 'IN', 'options' => [ trans('Match (OR)') => 'IN', trans('Don\'t match (NOR)') => 'NOT IN', ], 'enable' => '!id', ], 'tags' => [ 'label' => trans('Filter by Tags'), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.tags']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], 'enable' => '!id', ], 'include_child_tags' => [ 'type' => 'select', 'options' => [ trans('Exclude child tags') => '', trans('Include child tags') => 'include', trans('Only include child tags') => 'only', ], ], 'tag_operator' => [ 'type' => 'select', 'description' => trans( 'Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.', ), 'default' => 'IN', 'options' => [ trans('Match one (OR)') => 'IN', trans('Match all (AND)') => 'AND', trans('Don\'t match (NOR)') => 'NOT IN', ], 'enable' => '!id', ], 'users' => [ 'label' => trans('Filter by Authors'), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.authors']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], 'enable' => '!id', ], 'users_operator' => [ 'description' => trans( 'Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.', ), 'type' => 'select', 'default' => 'IN', 'options' => [ trans('Match (OR)') => 'IN', trans('Don\'t match (NOR)') => 'NOT IN', ], 'enable' => '!id', ], 'featured' => [ 'label' => trans('Filter by Featured Articles'), 'description' => trans( 'Filter articles by featured status. Load all articles, featured articles only, or articles which are not featured.', ), 'type' => 'select', 'options' => [ 'None' => '', 'Featured only' => 'only', 'Not featured' => 'hide', ], 'enable' => '!id', ], 'offset' => [ 'label' => trans('Start'), 'description' => trans( 'Set the starting point to specify which article is loaded.', ), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], 'enable' => '!id', ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'publish_up', 'options' => [ [ 'evaluate' => 'yootheme.builder.sources.articleOrderOptions', ], ], 'enable' => '!id', ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'DESC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], 'enable' => '!id', ], ], ], 'order_alphanum' => [ 'text' => trans('Alphanumeric Ordering'), 'type' => 'checkbox', 'enable' => '!id', ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $args += ['id' => 0, 'limit' => 1]; if (!empty($args['id'])) { $articles = ArticleHelper::get($args['id']); } else { $articles = ArticleHelper::query($args); } return array_shift($articles); } } builder-joomla-source/src/Type/ArticleType.php000064400000067675151666572110015454 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Categories\Categories; use Joomla\CMS\Factory; use Joomla\CMS\Helper\TagsHelper; use Joomla\Component\Content\Site\Helper\RouteHelper; use YOOtheme\Builder\Joomla\Fields\Type\FieldsType; use YOOtheme\Builder\Joomla\Source\ArticleHelper; use YOOtheme\Builder\Joomla\Source\TagHelper; use YOOtheme\Path; use YOOtheme\View; use function YOOtheme\app; use function YOOtheme\trans; class ArticleType { /** * @return array */ public static function config() { return [ 'fields' => [ 'title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Title'), 'filters' => ['limit', 'preserve'], ], ], 'content' => [ 'type' => 'String', 'args' => [ 'show_intro_text' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Content'), 'arguments' => [ 'show_intro_text' => [ 'label' => trans('Intro Text'), 'description' => trans('Show or hide the intro text.'), 'type' => 'checkbox', 'default' => true, 'text' => trans('Show intro text'), ], ], 'filters' => ['limit', 'preserve'], ], 'extensions' => [ 'call' => __CLASS__ . '::content', ], ], 'teaser' => [ 'type' => 'String', 'args' => [ 'show_excerpt' => [ 'type' => 'Boolean', ], 'show_content' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Teaser'), 'arguments' => [ 'show_excerpt' => [ 'label' => trans('Intro Text'), 'description' => trans( 'Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text. To use an excerpt field, create a custom field with the name excerpt.', ), 'type' => 'checkbox', 'default' => true, 'text' => trans('Prefer excerpt over intro text'), ], 'show_content' => [ 'type' => 'checkbox', 'default' => true, 'text' => trans('Fall back to content'), ], ], 'filters' => ['limit', 'preserve'], ], 'extensions' => [ 'call' => __CLASS__ . '::teaser', ], ], 'publish_up' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Published Date'), 'filters' => ['date'], ], ], 'created' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Created Date'), 'filters' => ['date'], ], ], 'modified' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Modified Date'), 'filters' => ['date'], ], ], 'featured' => [ 'type' => 'Boolean', 'metadata' => [ 'label' => trans('Featured'), 'condition' => true, ], ], 'metaString' => [ 'type' => 'String', 'args' => [ 'format' => [ 'type' => 'String', ], 'separator' => [ 'type' => 'String', ], 'link_style' => [ 'type' => 'String', ], 'show_publish_date' => [ 'type' => 'Boolean', ], 'show_author' => [ 'type' => 'Boolean', ], 'show_taxonomy' => [ 'type' => 'String', ], 'parent_id' => [ 'type' => 'String', ], 'date_format' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Meta'), 'arguments' => [ 'format' => [ 'label' => trans('Format'), 'description' => trans( 'Display the meta text in a sentence or a horizontal list.', ), 'type' => 'select', 'default' => 'list', 'options' => [ trans('List') => 'list', trans('Sentence') => 'sentence', ], ], 'separator' => [ 'label' => trans('Separator'), 'description' => trans('Set the separator between fields.'), 'default' => '|', 'enable' => 'arguments.format === "list"', ], 'link_style' => [ 'label' => trans('Link Style'), 'description' => trans('Set the link style.'), 'type' => 'select', 'default' => '', 'options' => [ 'Default' => '', 'Muted' => 'link-muted', 'Text' => 'link-text', 'Heading' => 'link-heading', 'Reset' => 'link-reset', ], ], 'show_publish_date' => [ 'label' => trans('Display'), 'description' => trans('Show or hide fields in the meta text.'), 'type' => 'checkbox', 'default' => true, 'text' => trans('Show date'), ], 'show_author' => [ 'type' => 'checkbox', 'default' => true, 'text' => trans('Show author'), ], 'show_taxonomy' => [ 'type' => 'select', 'default' => 'category', 'options' => [ trans('Hide Term List') => '', trans('Show Category') => 'category', trans('Show Tags') => 'tag', ], ], 'parent_id' => [ 'label' => trans('Parent Tag'), 'description' => trans( 'Tags are only loaded from the selected parent tag.', ), 'type' => 'select', 'default' => '0', 'show' => 'arguments.show_taxonomy === "tag"', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.tags'], ], ], 'date_format' => [ 'label' => trans('Date Format'), 'description' => trans( 'Select a predefined date format or enter a custom format.', ), 'type' => 'data-list', 'default' => '', 'options' => [ 'Aug 6, 1999 (M j, Y)' => 'M j, Y', 'August 06, 1999 (F d, Y)' => 'F d, Y', '08/06/1999 (m/d/Y)' => 'm/d/Y', '08.06.1999 (m.d.Y)' => 'm.d.Y', '6 Aug, 1999 (j M, Y)' => 'j M, Y', 'Tuesday, Aug 06 (l, M d)' => 'l, M d', ], 'enable' => 'arguments.show_publish_date', 'attrs' => [ 'placeholder' => 'Default', ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::metaString', ], ], 'category' => [ 'type' => 'Category', 'metadata' => [ 'label' => trans('Category'), ], 'extensions' => [ 'call' => __CLASS__ . '::category', ], ], 'tagString' => [ 'type' => 'String', 'args' => [ 'parent_id' => [ 'type' => 'String', ], 'separator' => [ 'type' => 'String', ], 'show_link' => [ 'type' => 'Boolean', ], 'link_style' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Tags'), 'arguments' => [ 'parent_id' => [ 'label' => trans('Parent Tag'), 'description' => trans( 'Tags are only loaded from the selected parent tag.', ), 'type' => 'select', 'default' => '0', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.tags'], ], ], 'separator' => [ 'label' => trans('Separator'), 'description' => trans('Set the separator between tags.'), 'default' => ', ', ], 'show_link' => [ 'label' => trans('Link'), 'type' => 'checkbox', 'default' => true, 'text' => trans('Show link'), ], 'link_style' => [ 'label' => trans('Link Style'), 'description' => trans('Set the link style.'), 'type' => 'select', 'default' => '', 'options' => [ 'Default' => '', 'Muted' => 'link-muted', 'Text' => 'link-text', 'Heading' => 'link-heading', 'Reset' => 'link-reset', ], 'enable' => 'arguments.show_link', ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::tagString', ], ], 'images' => [ 'type' => 'ArticleImages', 'metadata' => [ 'label' => '', ], 'extensions' => [ 'call' => __CLASS__ . '::images', ], ], 'link' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], 'extensions' => [ 'call' => __CLASS__ . '::link', ], ], 'author' => [ 'type' => 'User', 'metadata' => [ 'label' => trans('Author'), ], 'extensions' => [ 'call' => __CLASS__ . '::author', ], ], 'hits' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Hits'), ], ], 'rating' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Rating'), ], ], 'rating_count' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Votes'), ], ], 'urls' => [ 'type' => 'ArticleUrls', 'metadata' => [ 'label' => trans('Link'), ], 'extensions' => [ 'call' => __CLASS__ . '::urls', ], ], 'event' => [ 'type' => 'ArticleEvent', 'metadata' => [ 'label' => trans('Events'), ], 'extensions' => [ 'call' => __CLASS__ . '::event', ], ], 'tags' => [ 'type' => [ 'listOf' => 'Tag', ], 'args' => [ 'parent_id' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Tags'), 'arguments' => [ 'parent_id' => [ 'label' => trans('Parent Tag'), 'description' => trans( 'Tags are only loaded from the selected parent tag.', ), 'type' => 'select', 'default' => '0', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.tags'], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::tags', ], ], 'alias' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Alias'), ], ], 'id' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('ID'), ], ], 'relatedArticles' => [ 'type' => ['listOf' => 'Article'], 'args' => [ 'category' => [ 'type' => 'String', ], 'tags' => [ 'type' => 'String', ], 'author' => [ 'type' => 'String', ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], 'order_alphanum' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Related Articles'), 'arguments' => [ 'category' => [ 'label' => trans('Relationship'), 'type' => 'select', 'default' => 'IN', 'options' => [ trans('Ignore category') => '', trans('Match category (OR)') => 'IN', trans('Don\'t match category (NOR)') => 'NOT IN', ], ], 'tags' => [ 'type' => 'select', 'options' => [ trans('Ignore tags') => '', trans('Match one tag (OR)') => 'IN', trans('Match all tags (AND)') => 'AND', trans('Don\'t match tags (NOR)') => 'NOT IN', ], ], 'author' => [ 'description' => trans( 'Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.', ), 'type' => 'select', 'options' => [ trans('Ignore author') => '', trans('Match author (OR)') => 'IN', trans('Don\'t match author (NOR)') => 'NOT IN', ], ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of articles.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'default' => 10, 'attrs' => [ 'min' => 1, ], ], ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'publish_up', 'options' => [ [ 'evaluate' => 'yootheme.builder.sources.articleOrderOptions', ], ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'DESC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], ], ], ], 'order_alphanum' => [ 'text' => trans('Alphanumeric Ordering'), 'type' => 'checkbox', ], ], 'directives' => [], ], 'extensions' => [ 'call' => __CLASS__ . '::relatedArticles', ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Article'), ], ]; } public static function content($article, $args) { if ( !$article->params->get('access-view') && $article->params->get('show_noauth') && Factory::getUser()->get('guest') ) { return $article->introtext; } $args += ['show_intro_text' => true]; if (isset($article->text) && $args['show_intro_text']) { return ($article->toc ?? '') . $article->text; } if ($article->params->get('show_intro', '1') === '1' && $args['show_intro_text']) { return "{$article->introtext} {$article->fulltext}"; } if ($article->fulltext) { return $article->fulltext; } return $article->introtext; } public static function teaser($article, $args) { $args += ['show_excerpt' => true, 'show_content' => true]; if ( $args['show_excerpt'] && ($field = FieldsType::getField('excerpt', $article, 'com_content.article')) && $field->rawvalue != '' ) { return $field->rawvalue; } if (!$args['show_content'] && $article->fulltext == '') { return ''; } return $article->introtext; } public static function link($article) { return RouteHelper::getArticleRoute( "{$article->id}:{$article->alias}", $article->catid, $article->language, ); } public static function images($article) { return json_decode($article->images); } public static function urls($article) { return json_decode($article->urls); } public static function author($article) { $user = Factory::getUser($article->created_by); if ($article->created_by_alias) { $user = clone $user; $user->name = $article->created_by_alias; } return $user; } public static function category($article) { return $article->catid && $article->catid !== 'root' ? Categories::getInstance('content', ['countItems' => true])->get($article->catid) : null; } public static function tags($article, $args) { $tags = $article->tags->itemTags ?? (new TagsHelper())->getItemTags('com_content.article', $article->id); if (!empty($args['parent_id'])) { return TagHelper::filterTags($tags, $args['parent_id']); } return $tags; } public static function event($article) { return $article; } public static function tagString($article, array $args) { $tags = static::tags($article, $args); $args += ['separator' => ', ', 'show_link' => true, 'link_style' => '']; return app(View::class)->render( Path::get('../../templates/tags', __DIR__), compact('tags', 'args'), ); } public static function metaString($article, array $args) { $args += [ 'format' => 'list', 'separator' => '|', 'link_style' => '', 'show_publish_date' => true, 'show_author' => true, 'show_taxonomy' => 'category', 'date_format' => '', ]; $tags = $args['show_taxonomy'] === 'tag' ? static::tags($article, $args) : null; return app(View::class)->render( Path::get('../../templates/meta', __DIR__), compact('article', 'tags', 'args'), ); } public static function relatedArticles($article, array $args) { $args['article'] = $article->id; $args['article_operator'] = 'NOT IN'; if (!empty($args['category'])) { $args['cat_operator'] = $args['category']; $args['catid'] = (array) $article->catid; } if (!empty($args['tags'])) { $args['tag_operator'] = $args['tags']; $args['tags'] = array_column(static::tags($article, []), 'id'); if (empty($args['tags'])) { return; } } if (!empty($args['author'])) { $args['users'] = $article->created_by; $args['users_operator'] = $args['author']; } return ArticleHelper::query($args); } } builder-joomla-source/src/Type/CustomTagQueryType.php000064400000002642151666572110017004 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use YOOtheme\Builder\Joomla\Source\TagHelper; use function YOOtheme\trans; class CustomTagQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customTag' => [ 'type' => 'Tag', 'args' => [ 'id' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Custom Tag'), 'group' => trans('Custom'), 'fields' => [ 'id' => [ 'label' => trans('Tag'), 'type' => 'select', 'defaultIndex' => 0, 'options' => [['evaluate' => 'yootheme.builder.tags']], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { if (!empty($args['id'])) { $tags = TagHelper::get($args['id']); return array_shift($tags); } } } builder-joomla-source/src/Type/ArticleEventType.php000064400000004352151666572110016435 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Document\HtmlDocument; use Joomla\CMS\Factory; use Joomla\CMS\Plugin\PluginHelper; class ArticleEventType extends EventType { public static function resolve($article, $args, $context, $info) { $key = $info->fieldName; if (isset($article->event->$key)) { return $article->event->$key; } $marker = "{# article_{$article->id}_{$key} #}"; Factory::getApplication()->registerEvent('onBeforeRender', function () use ( $article, $key, $marker ) { if (!isset($article->event->$key)) { static::applyContentPlugins($article); } /** @var HtmlDocument $document */ $document = Factory::getApplication()->getDocument(); $document->setBuffer( str_replace($marker, $article->event->$key, $document->getBuffer('component')), [ 'type' => 'component', 'name' => null, 'title' => null, ], ); }); return $marker; } protected static function applyContentPlugins($article) { $joomla = Factory::getApplication(); // Process the content plugins. PluginHelper::importPlugin('content'); $article->event = new \stdClass(); // Joomla content plugins expect $article and $article->params to be passed as reference $results = $joomla->triggerEvent('onContentAfterTitle', [ 'com_content.article', &$article, &$article->params, ]); $article->event->afterDisplayTitle = trim(implode("\n", $results)); $results = $joomla->triggerEvent('onContentBeforeDisplay', [ 'com_content.article', &$article, &$article->params, ]); $article->event->beforeDisplayContent = trim(implode("\n", $results)); $results = $joomla->triggerEvent('onContentAfterDisplay', [ 'com_content.article', &$article, &$article->params, ]); $article->event->afterDisplayContent = trim(implode("\n", $results)); } } builder-joomla-source/src/Type/CustomTagsQueryType.php000064400000012004151666572110017160 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use YOOtheme\Builder\Joomla\Source\TagHelper; use function YOOtheme\trans; class CustomTagsQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customTags' => [ 'type' => [ 'listOf' => 'Tag', ], 'args' => [ 'parent_id' => [ 'type' => 'String', ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Custom Tags'), 'group' => trans('Custom'), 'fields' => [ 'parent_id' => [ 'label' => trans('Parent Tag'), 'description' => trans( 'Tags are only loaded from the selected parent tag.', ), 'type' => 'select', 'default' => '0', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.tags'], ], ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of tags.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'default' => 10, 'attrs' => [ 'min' => 1, ], ], ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'a.title', 'options' => [ trans('Alphabetical') => 'a.title', trans('Tag Order') => 'a.lft', trans('Hits') => 'a.hits', trans('Random') => 'rand', ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'ASC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $args += ['parent_id' => 0]; return TagHelper::query($args); } } builder-joomla-source/src/Type/SmartSearchItemsQueryType.php000064400000016533151666572110020320 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Categories\Categories; use function YOOtheme\trans; class SmartSearchItemsQueryType { protected static $view = ['com_finder.search', '_search']; /** * @return array */ public static function config() { return [ 'fields' => [ 'smartSearchItem' => [ 'type' => 'SmartSearchItem', 'args' => [ 'catid' => [ 'type' => [ 'listOf' => 'String', ], ], 'offset' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Item'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ 'catid' => [ 'label' => trans('Filter by Root Categories'), 'description' => trans( 'Filter items visually by the selected root categories.', ), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.root_categories']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], ], 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolveSingle', ], ], 'smartSearchItems' => [ 'type' => [ 'listOf' => 'SmartSearchItem', ], 'args' => [ 'catid' => [ 'type' => [ 'listOf' => 'String', ], ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Items'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ 'catid' => [ 'label' => trans('Filter by Root Categories'), 'description' => trans( 'Filter items visually by the selected root categories.', ), 'type' => 'select', 'default' => [], 'options' => [['evaluate' => 'yootheme.builder.root_categories']], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of items.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'attrs' => [ 'placeholder' => trans('No limit'), 'min' => 0, ], ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $args += [ 'catid' => null, 'offset' => 0, 'limit' => null, ]; if (in_array($root['template'] ?? '', static::$view)) { $items = $root['items'] ?? []; if ($args['catid']) { $rootCategories = array_map( fn($catId) => Categories::getInstance('content', ['countItems' => true])->get( $catId, ), $args['catid'], ); if (!$rootCategories) { return []; } $items = array_filter($items, function ($item) use ($rootCategories) { $id = $item->getElement('catid'); if (!$id || $item->getElement('context') !== 'com_content.article') { return false; } $category = Categories::getInstance('content', ['countItems' => true])->get( $id, ); if (!$category) { return false; } foreach ($rootCategories as $rootCategory) { if (array_key_exists($rootCategory->id, $category->getPath())) { return true; } } return false; }); } if ($args['offset'] || $args['limit']) { $items = array_slice($items, (int) $args['offset'], (int) $args['limit'] ?: null); } return $items; } } public static function resolveSingle($root, array $args) { return static::resolve($root, $args + ['limit' => 1])[0] ?? null; } } builder-joomla-source/src/Type/TagsQueryType.php000064400000010406151666572110015771 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class TagsQueryType { protected static $view = ['com_tags.tag', 'com_tags.tags']; /** * @return array */ public static function config() { return [ 'fields' => [ 'tagsSingle' => [ 'type' => 'Tag', 'args' => [ 'offset' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Tag'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolveSingle', ], ], 'tags' => [ 'type' => [ 'listOf' => 'Tag', ], 'args' => [ 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Tags'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of tags.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'attrs' => [ 'placeholder' => trans('No limit'), 'min' => 0, ], ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $args += [ 'offset' => 0, 'limit' => null, ]; if (in_array($root['template'] ?? '', static::$view)) { $tags = $root['tags']; if ($args['offset'] || $args['limit']) { $tags = array_slice($tags, (int) $args['offset'], (int) $args['limit'] ?: null); } return $tags; } } public static function resolveSingle($root, array $args) { if (in_array($root['template'] ?? '', static::$view)) { return $root['tags'][$args['offset'] ?? 0] ?? null; } } } builder-joomla-source/src/Type/SmartSearchType.php000064400000002347151666572110016266 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\Component\Finder\Site\Helper\RouteHelper; use function YOOtheme\trans; class SmartSearchType { /** * @return array */ public static function config() { return [ 'fields' => [ 'searchword' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Search Word'), ], ], 'total' => [ 'type' => 'Int', 'metadata' => [ 'label' => trans('Item Count'), ], ], 'link' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], 'extensions' => [ 'call' => __CLASS__ . '::link', ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Search'), ], ]; } public static function link() { return RouteHelper::getSearchRoute(); } } builder-joomla-source/src/Type/CustomUserQueryType.php000064400000002563151666572110017211 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Factory; use function YOOtheme\trans; class CustomUserQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customUser' => [ 'type' => 'User', 'args' => [ 'id' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Custom User'), 'group' => trans('Custom'), 'fields' => [ 'id' => [ 'label' => trans('User'), 'type' => 'select-item', 'module' => 'com_users', 'labels' => ['type' => trans('User')], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { if (empty($args['id'])) { return; } return Factory::getUser($args['id']); } } builder-joomla-source/src/Type/EventType.php000064400000003053151666572110015126 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class EventType { /** * @return array */ public static function config() { return [ 'fields' => [ 'afterDisplayTitle' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('After Display Title'), ], 'extensions' => [ 'call' => get_called_class() . '::resolve', ], ], 'beforeDisplayContent' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Before Display Content'), ], 'extensions' => [ 'call' => get_called_class() . '::resolve', ], ], 'afterDisplayContent' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('After Display Content'), ], 'extensions' => [ 'call' => get_called_class() . '::resolve', ], ], ], 'metadata' => [ 'label' => trans('Events'), ], ]; } public static function resolve($article, $args, $context, $info) { $key = $info->fieldName; return $article->event->$key ?? null; } } builder-joomla-source/src/Type/UserType.php000064400000007145151666572110014771 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Access\Access; use Joomla\Component\Users\Administrator\Helper\UsersHelper; use YOOtheme\Builder\Joomla\Source\UserHelper; use function YOOtheme\trans; class UserType { /** * @return array */ public static function config() { return [ 'fields' => [ 'name' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Name'), 'filters' => ['limit', 'preserve'], ], ], 'username' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Username'), 'filters' => ['limit', 'preserve'], ], ], 'email' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Email'), 'filters' => ['limit', 'preserve'], ], ], 'registerDate' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Registered Date'), 'filters' => ['date'], ], ], 'lastvisitDate' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Last Visit Date'), 'filters' => ['date'], ], ], 'link' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], 'extensions' => [ 'call' => __CLASS__ . '::link', ], ], 'userGroupString' => [ 'type' => 'String', 'args' => [ 'separator' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('User Groups'), 'arguments' => [ 'separator' => [ 'label' => trans('Separator'), 'description' => trans('Set the separator between user groups.'), 'default' => ', ', ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::userGroupString', ], ], 'id' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('ID'), ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('User'), ], ]; } public static function link($user) { return UserHelper::getContactLink($user->id); } public static function userGroupString($user, $args) { $result = []; $groups = Access::getGroupsByUser($user->id); foreach (UsersHelper::getGroups() as $group) { if (in_array($group->value, $groups)) { $result[] = $group->title; } } return implode($args['separator'] ?? ', ', $result); } } builder-joomla-source/src/Type/SmartSearchQueryType.php000064400000001650151666572110017310 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class SmartSearchQueryType { protected static $view = ['com_finder.search', '_search']; /** * @return array */ public static function config() { return [ 'fields' => [ 'smartSearch' => [ 'type' => 'SmartSearch', 'metadata' => [ 'label' => trans('Search'), 'view' => static::$view, 'group' => trans('Page'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root) { if (in_array($root['template'] ?? '', static::$view)) { return $root['search'] ?? null; } } } builder-joomla-source/src/Type/ContactQueryType.php000064400000001614151666572110016467 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class ContactQueryType { protected static $view = ['com_contact.contact']; /** * @return array */ public static function config() { return [ 'fields' => [ 'contact' => [ 'type' => 'Contact', 'metadata' => [ 'group' => trans('Page'), 'label' => trans('Contact'), 'view' => static::$view, ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root) { if (in_array($root['template'] ?? '', static::$view)) { return $root['item']; } } } builder-joomla-source/src/Type/ArticleUrlsType.php000064400000001711151666572110016275 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; class ArticleUrlsType { /** * @return array */ public static function config() { $fields = []; foreach (['a', 'b', 'c'] as $letter) { $fields["url{$letter}"] = [ 'type' => 'String', 'metadata' => [ 'label' => ucfirst($letter), ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ]; $fields["url{$letter}text"] = [ 'type' => 'String', 'metadata' => [ 'label' => ucfirst($letter) . ' Text', 'filters' => ['limit', 'preserve'], ], ]; } return compact('fields'); } public static function resolve($item, $args, $context, $info) { return $item->{$info->fieldName} ?: ''; } } builder-joomla-source/src/Type/SiteQueryType.php000064400000002356151666572110016004 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\User\User; use function YOOtheme\app; use function YOOtheme\trans; class SiteQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'site' => [ 'type' => 'Site', 'metadata' => [ 'label' => trans('Site'), 'group' => trans('Global'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve() { /** @var User $user */ $user = app(User::class); /** @var CMSApplication $joomla */ $joomla = app(CMSApplication::class); $params = $joomla instanceof SiteApplication ? $joomla->getParams() : []; return [ 'title' => $joomla->get('sitename'), 'page_title' => $params['page_heading'] ?? '', 'user' => $user, 'is_guest' => $user->guest, ]; } } builder-joomla-source/src/Type/ArticlesQueryType.php000064400000010776151666572110016653 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class ArticlesQueryType { protected static $view = ['com_content.category', 'com_content.featured']; /** * @return array */ public static function config() { return [ 'fields' => [ 'articlesSingle' => [ 'type' => 'Article', 'args' => [ 'offset' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Article'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'description' => trans( 'Set the starting point to specify which article is loaded.', ), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolveSingle', ], ], 'articles' => [ 'type' => [ 'listOf' => 'Article', ], 'args' => [ 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Articles'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of articles.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'attrs' => [ 'placeholder' => trans('No limit'), 'min' => 0, ], ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $args += [ 'offset' => 0, 'limit' => null, ]; if (in_array($root['template'] ?? '', static::$view)) { $items = $root['items'] ?? []; if ($args['offset'] || $args['limit']) { $items = array_slice($items, (int) $args['offset'], (int) $args['limit'] ?: null); } return $items; } } public static function resolveSingle($root, array $args) { if (in_array($root['template'] ?? '', static::$view)) { return $root['items'][$args['offset'] ?? 0] ?? null; } } } builder-joomla-source/src/Type/TagItemsQueryType.php000064400000010422151666572110016606 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class TagItemsQueryType { protected static $view = ['com_tags.tag']; /** * @return array */ public static function config() { return [ 'fields' => [ 'tagItemsSingle' => [ 'type' => 'TagItem', 'args' => [ 'offset' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Item'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolveSingle', ], ], 'tagItems' => [ 'type' => [ 'listOf' => 'TagItem', ], 'args' => [ 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Items'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of items.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'attrs' => [ 'placeholder' => trans('No limit'), 'min' => 0, ], ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $args += [ 'offset' => 0, 'limit' => null, ]; if (in_array($root['template'] ?? '', static::$view)) { $items = $root['items']; if ($args['offset'] || $args['limit']) { $items = array_slice($items, (int) $args['offset'], (int) $args['limit'] ?: null); } return $items; } } public static function resolveSingle($root, array $args) { if (in_array($root['template'] ?? '', static::$view)) { return $root['items'][$args['offset'] ?? 0] ?? null; } } } builder-joomla-source/src/Type/CustomCategoryQueryType.php000064400000002621151666572110020043 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Categories\Categories; use function YOOtheme\trans; class CustomCategoryQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customCategory' => [ 'type' => 'Category', 'args' => [ 'id' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Custom Category'), 'group' => trans('Custom'), 'fields' => [ 'id' => [ 'label' => trans('Category'), 'type' => 'select', 'defaultIndex' => 0, 'options' => [['evaluate' => 'yootheme.builder.categories']], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { return Categories::getInstance('content', ['countItems' => true])->get($args['id']); } } builder-joomla-source/src/Type/TagType.php000064400000022357151666572110014570 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Helper\TagsHelper; use Joomla\Component\Tags\Site\Helper\RouteHelper; use YOOtheme\Builder\Joomla\Source\TagHelper; use function YOOtheme\trans; class TagType { /** * @return array */ public static function config() { return [ 'fields' => [ 'title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Title'), 'filters' => ['limit', 'preserve'], ], ], 'description' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Description'), 'filters' => ['limit', 'preserve'], ], ], 'images' => [ 'type' => 'Images', 'metadata' => [ 'label' => '', ], 'extensions' => [ 'call' => __CLASS__ . '::images', ], ], 'hits' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Hits'), ], ], 'link' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], 'extensions' => [ 'call' => __CLASS__ . '::link', ], ], 'tags' => [ 'type' => [ 'listOf' => 'Tag', ], 'metadata' => [ 'label' => trans('Child Tags'), ], 'extensions' => [ 'call' => __CLASS__ . '::tags', ], ], 'items' => [ 'type' => [ 'listOf' => 'TagItem', ], 'args' => [ 'include_children' => [ 'type' => 'Boolean', ], 'typesr' => [ 'type' => [ 'listOf' => 'String', ], ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], 'order_alphanum' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Tagged Items'), 'arguments' => [ 'typesr' => [ 'label' => trans('Type'), 'type' => 'select', 'description' => trans('Set the type of tagged items.'), 'options' => array_merge( [trans('All types') => ''], ...array_map( fn($type) => [$type->type_title => (string) $type->type_id], TagsHelper::getTypes('array'), ), ), ], 'include_children' => [ 'label' => trans('Filter'), 'text' => trans('Include items from child tags'), 'type' => 'checkbox', ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of tagged items.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'default' => 10, 'attrs' => [ 'min' => 1, ], ], ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'core_publish_up', 'options' => [ trans('Published') => 'core_publish_up', trans('Unpublished') => 'core_publish_down', trans('Created') => 'core_created_time', trans('Modified') => 'core_modified_time', trans('Alphabetical') => 'core_title', trans('Hits') => 'core_hits', trans('Ordering') => 'core_ordering', trans('Random') => 'rand', ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'DESC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], ], ], ], 'order_alphanum' => [ 'text' => trans('Alphanumeric Ordering'), 'type' => 'checkbox', ], ], 'directives' => [], ], 'extensions' => [ 'call' => __CLASS__ . '::items', ], ], 'alias' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Alias'), ], ], 'id' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('ID'), ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Tag'), ], ]; } public static function images($tag) { return json_decode($tag->images); } public static function link($tag) { return RouteHelper::getTagRoute("{$tag->id}:{$tag->alias}"); } public static function tags($tag) { return TagHelper::query([ 'parent_id' => $tag->id, 'language' => $tag->language === '*' ? null : $tag->language, ]); } public static function items($tag, $args) { if ($tag->language !== '*') { $args['language'] = $tag->language; } $items = TagHelper::getItems($tag->id, $args); foreach ($items as $item) { if (($item->content_type_title ?? '') === 'Article') { $item->id = $item->content_item_id ?? '0'; $item->catid = $item->core_catid ?? '0'; $item->language = $item->core_language ?? '*'; } } return $items; } } builder-joomla-source/src/Type/CustomMenuItemsQueryType.php000064400000013554151666572110020203 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Factory; use Joomla\CMS\Menu\MenuItem; use function YOOtheme\trans; class CustomMenuItemsQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customMenuItems' => [ 'type' => [ 'listOf' => 'MenuItem', ], 'args' => [ 'id' => [ 'type' => 'String', ], 'parent' => [ 'type' => 'String', ], 'heading' => [ 'type' => 'String', ], 'include_heading' => [ 'type' => 'Boolean', 'defaultValue' => true, ], 'ids' => [ 'type' => [ 'listOf' => 'String', ], ], ], 'metadata' => [ 'label' => trans('Custom Menu Items'), 'group' => trans('Custom'), 'fields' => [ 'id' => [ 'label' => trans('Menu'), 'type' => 'select', 'defaultIndex' => 0, 'options' => [ ['evaluate' => 'yootheme.customizer.menu.menusSelect()'], ], ], 'parent' => [ 'label' => trans('Parent Menu Item'), 'description' => trans( 'Menu items are only loaded from the selected parent item.', ), 'type' => 'select', 'defaultIndex' => 0, 'options' => [ ['value' => '', 'text' => trans('Root')], ['evaluate' => 'yootheme.customizer.menu.itemsSelect(id)'], ], ], 'heading' => [ 'label' => trans('Limit by Menu Heading'), 'type' => 'select', 'defaultIndex' => 0, 'options' => [ ['value' => '', 'text' => trans('None')], [ 'evaluate' => 'yootheme.customizer.menu.headingItemsSelect(id, parent)', ], ], ], 'include_heading' => [ 'description' => trans( 'Only load menu items from the selected menu heading.', ), 'type' => 'checkbox', 'default' => true, 'text' => trans('Include heading itself'), ], 'ids' => [ 'label' => trans('Select Manually'), 'description' => trans( 'Select menu items manually. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple menu items.', ), 'type' => 'select', 'options' => [ ['evaluate' => 'yootheme.customizer.menu.itemsSelect(id)'], ], 'attrs' => [ 'multiple' => true, 'class' => 'uk-height-small', ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $found = false; return array_filter( Factory::getApplication()->getMenu('site')->getItems('menutype', $args['id']), function (MenuItem $item) use ($args, &$found) { if (!$item->getParams()->get('menu_show', true)) { return false; } if (!empty($args['ids'])) { return in_array($item->id, $args['ids']); } if (!empty($args['heading'])) { if (!$found) { if ($item->id == $args['heading']) { $found = $item; return !empty($args['include_heading']); } return false; } if ($item->parent_id !== $found->parent_id) { return false; } if (!in_array($item->type, ['heading', 'separator'])) { return true; } return $found = false; } if (!empty($args['parent'])) { return $item->parent_id == $args['parent']; } return $item->level == '1'; }, ); } } builder-joomla-source/src/Type/SmartSearchItemType.php000064400000026120151666572110017100 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Categories\Categories; use Joomla\CMS\Categories\CategoryNode; use Joomla\CMS\Factory; use Joomla\CMS\User\User; use Joomla\Component\Finder\Administrator\Indexer\Result; use YOOtheme\Path; use YOOtheme\View; use function YOOtheme\app; use function YOOtheme\trans; class SmartSearchItemType { /** * @return array */ public static function config() { return [ 'fields' => [ 'title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Title'), 'filters' => ['limit', 'preserve'], ], ], 'description' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Content'), 'filters' => ['limit', 'preserve'], ], ], 'publish_start_date' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Published Date'), 'filters' => ['date'], ], ], 'metaString' => [ 'type' => 'String', 'args' => [ 'format' => [ 'type' => 'String', ], 'separator' => [ 'type' => 'String', ], 'link_style' => [ 'type' => 'String', ], 'show_publish_date' => [ 'type' => 'Boolean', ], 'show_author' => [ 'type' => 'Boolean', ], 'show_taxonomy' => [ 'type' => 'String', ], 'parent_id' => [ 'type' => 'String', ], 'date_format' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Meta'), 'arguments' => [ 'format' => [ 'label' => trans('Format'), 'description' => trans( 'Display the meta text in a sentence or a horizontal list.', ), 'type' => 'select', 'default' => 'list', 'options' => [ trans('List') => 'list', trans('Sentence') => 'sentence', ], ], 'separator' => [ 'label' => trans('Separator'), 'description' => trans('Set the separator between fields.'), 'default' => '|', 'enable' => 'arguments.format === "list"', ], 'link_style' => [ 'label' => trans('Link Style'), 'description' => trans('Set the link style.'), 'type' => 'select', 'default' => '', 'options' => [ 'Default' => '', 'Muted' => 'link-muted', 'Text' => 'link-text', 'Heading' => 'link-heading', 'Reset' => 'link-reset', ], ], 'show_publish_date' => [ 'label' => trans('Display'), 'description' => trans('Show or hide fields in the meta text.'), 'type' => 'checkbox', 'default' => true, 'text' => trans('Show date'), ], 'show_author' => [ 'type' => 'checkbox', 'default' => true, 'text' => trans('Show author'), ], 'show_taxonomy' => [ 'type' => 'select', 'default' => 'category', 'options' => [ trans('Hide Term List') => '', trans('Show Category') => 'category', trans('Show Tags') => 'tag', ], ], 'parent_id' => [ 'label' => trans('Parent Tag'), 'description' => trans( 'Tags are only loaded from the selected parent tag.', ), 'type' => 'select', 'default' => '0', 'show' => 'arguments.show_taxonomy === "tag"', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.tags'], ], ], 'date_format' => [ 'label' => trans('Date Format'), 'description' => trans( 'Select a predefined date format or enter a custom format.', ), 'type' => 'data-list', 'default' => '', 'options' => [ 'Aug 6, 1999 (M j, Y)' => 'M j, Y', 'August 06, 1999 (F d, Y)' => 'F d, Y', '08/06/1999 (m/d/Y)' => 'm/d/Y', '08.06.1999 (m.d.Y)' => 'm.d.Y', '6 Aug, 1999 (j M, Y)' => 'j M, Y', 'Tuesday, Aug 06 (l, M d)' => 'l, M d', ], 'enable' => 'arguments.show_publish_date', 'attrs' => [ 'placeholder' => 'Default', ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::metaString', ], ], 'category' => [ 'type' => 'Category', 'metadata' => [ 'label' => trans('Category'), ], 'extensions' => [ 'call' => __CLASS__ . '::category', ], ], 'images' => [ 'type' => 'ArticleImages', 'metadata' => [ 'label' => '', ], 'extensions' => [ 'call' => __CLASS__ . '::images', ], ], 'route' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], ], 'author' => [ 'type' => 'User', 'metadata' => [ 'label' => trans('Author'), ], 'extensions' => [ 'call' => __CLASS__ . '::author', ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Smart Search Item'), ], ]; } /** * @param Result $item * * @return string */ public static function metaString($item, array $args) { $args += [ 'format' => 'list', 'separator' => '|', 'link_style' => '', 'show_publish_date' => true, 'show_author' => true, 'show_taxonomy' => 'category', 'date_format' => '', ]; $props = [ 'id', 'author', 'created_by', 'created_by_alias', 'contact_link', 'catid', 'category' => 'category_title', ]; $article = new \stdClass(); foreach ($props as $field => $prop) { if (is_numeric($field)) { $article->$prop = $item->getElement($prop); } else { $article->$prop = $item->getElement($field); } } $article->publish_up = $item->publish_start_date; $tags = $args['show_taxonomy'] === 'tag' ? ArticleType::tags($article, $args) : null; return app(View::class)->render( Path::get('../../templates/meta', __DIR__), compact('article', 'tags', 'args'), ); } /** * @param Result $item * * @return array */ public static function images($item) { $images = json_decode($item->getElement('images') ?? ''); // Fallback for plugins not storing images as json representation (like HikaShop) if (!$images && $item->getElement('imageUrl')) { $images = (object) [ 'image_intro' => $item->getElement('imageUrl'), 'image_intro_alt' => $item->getElement('imageAlt'), ]; } return $images; } /** * @param Result $item * * @return CategoryNode|null */ public static function category($item) { if ($item->getElement('context') === 'com_content.article') { $id = $item->getElement('catid'); return $id && $id !== 'root' ? Categories::getInstance('content', ['countItems' => true])->get($id) : null; } return null; } /** * @param Result $item * * @return User */ public static function author($item) { $user = Factory::getUser($item->getElement('created_by')); if ($item->getElement('created_by_alias')) { $user = clone $user; $user->name = $item->getElement('created_by_alias'); } return $user; } } builder-joomla-source/src/Type/CustomCategoriesQueryType.php000064400000013625151666572110020361 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Categories\Categories; use function YOOtheme\trans; class CustomCategoriesQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customCategories' => [ 'type' => [ 'listOf' => 'Category', ], 'args' => [ 'catid' => [ 'type' => 'String', ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Custom Categories'), 'group' => trans('Custom'), 'fields' => [ 'catid' => [ 'label' => trans('Parent Category'), 'description' => trans( 'Categories are only loaded from the selected parent category.', ), 'type' => 'select', 'default' => '0', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.categories'], ], ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of categories.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'default' => 10, 'attrs' => [ 'min' => 1, ], ], ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'ordering', 'options' => [ trans('Alphabetical') => 'title', trans('Category Order') => 'ordering', trans('Random') => 'rand', ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'ASC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { if ( $category = Categories::getInstance('content', ['countItems' => true])->get( $args['catid'], ) ) { $categories = $category->getChildren(); if ($args['order'] === 'rand') { shuffle($categories); } elseif ($args['order']) { $prop = $args['order'] === 'ordering' ? 'lft' : $args['order']; usort( $categories, fn($article, $other) => strnatcmp($article->$prop, $other->$prop), ); } if ($args['offset'] || $args['limit']) { $categories = array_slice( $categories, (int) $args['offset'], (int) $args['limit'] ?: null, ); } if ($args['order_direction'] === 'DESC') { $categories = array_reverse($categories); } return $categories; } } } builder-joomla-source/src/Type/ArticleQueryType.php000064400000006031151666572110016455 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Router\Route; use Joomla\CMS\Router\Router; use Joomla\Uri\Uri; use YOOtheme\Builder\Joomla\Source\ArticleHelper; use function YOOtheme\trans; class ArticleQueryType { protected static $view = ['com_content.article']; /** * @return array */ public static function config() { return [ 'fields' => [ 'article' => [ 'type' => 'Article', 'metadata' => [ 'label' => trans('Article'), 'view' => static::$view, 'group' => trans('Page'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], 'prevArticle' => [ 'type' => 'Article', 'metadata' => [ 'label' => trans('Previous Article'), 'view' => static::$view, 'group' => trans('Page'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolvePreviousArticle', ], ], 'nextArticle' => [ 'type' => 'Article', 'metadata' => [ 'label' => trans('Next Article'), 'view' => static::$view, 'group' => trans('Page'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveNextArticle', ], ], ], ]; } public static function resolve($root) { if (in_array($root['template'] ?? '', static::$view)) { return $root['article'] ?? $root['item']; } } public static function resolvePreviousArticle($root) { $article = static::resolve($root); if (!$article) { return; } ArticleHelper::applyPageNavigation($article); if (!empty($article->prev)) { return static::getArticleFromUrl($article->prev); } } public static function resolveNextArticle($root) { $article = static::resolve($root); if (!$article) { return; } ArticleHelper::applyPageNavigation($article); if (!empty($article->next)) { return static::getArticleFromUrl($article->next); } } protected static function getArticleFromUrl($url) { if (version_compare(JVERSION, '4.0', '<')) { $uri = new Uri(Route::_($url)); $vars = Router::getInstance('site')->parse($uri); $id = $vars['id'] ?? 0; } else { $id = (new Uri($url))->getVar('id', '0'); } if (!$id) { return null; } $articles = ArticleHelper::get($id); return array_shift($articles); } } builder-joomla-source/src/Type/ContactType.php000064400000024570151666572110015447 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Categories\Categories; use Joomla\CMS\Factory; use Joomla\CMS\Helper\TagsHelper; use Joomla\Component\Contact\Site\Helper\RouteHelper; use YOOtheme\Builder\Joomla\Source\ArticleHelper; use YOOtheme\Path; use YOOtheme\View; use function YOOtheme\app; use function YOOtheme\trans; class ContactType { /** * @return array */ public static function config() { return [ 'fields' => [ 'name' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Name'), 'filters' => ['limit', 'preserve'], ], ], 'image' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Image'), 'filters' => ['limit', 'preserve'], ], ], 'email_to' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Email'), 'filters' => ['limit', 'preserve'], ], ], 'con_position' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Contacts Position'), 'filters' => ['limit', 'preserve'], ], ], 'address' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Address'), 'filters' => ['limit', 'preserve'], ], ], 'suburb' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('City or Suburb'), 'filters' => ['limit', 'preserve'], ], ], 'state' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('State or County'), 'filters' => ['limit', 'preserve'], ], ], 'postcode' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Postal/ZIP Code'), 'filters' => ['limit', 'preserve'], ], ], 'country' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Country'), 'filters' => ['limit', 'preserve'], ], ], 'telephone' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Telephone'), 'filters' => ['limit', 'preserve'], ], ], 'mobile' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Mobile'), 'filters' => ['limit', 'preserve'], ], ], 'fax' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Fax'), 'filters' => ['limit', 'preserve'], ], ], 'webpage' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Website'), 'filters' => ['limit', 'preserve'], ], ], 'text' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Miscellaneous Information'), 'filters' => ['limit', 'preserve'], ], ], 'created' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Created Date'), 'filters' => ['date'], ], ], 'modified' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Modified Date'), 'filters' => ['date'], ], ], 'category' => [ 'type' => 'Category', 'metadata' => [ 'label' => trans('Category'), ], 'extensions' => [ 'call' => __CLASS__ . '::category', ], ], 'user' => [ 'type' => 'User', 'metadata' => [ 'label' => trans('User'), ], 'extensions' => [ 'call' => __CLASS__ . '::user', ], ], 'tagString' => [ 'type' => 'String', 'args' => [ 'separator' => [ 'type' => 'String', ], 'show_link' => [ 'type' => 'Boolean', ], 'link_style' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Tags'), 'arguments' => [ 'separator' => [ 'label' => trans('Separator'), 'description' => trans('Set the separator between tags.'), 'default' => ', ', ], 'show_link' => [ 'label' => trans('Link'), 'type' => 'checkbox', 'default' => true, 'text' => trans('Show link'), ], 'link_style' => [ 'label' => trans('Link Style'), 'description' => trans('Set the link style.'), 'type' => 'select', 'default' => '', 'options' => [ 'Default' => '', 'Muted' => 'link-muted', 'Text' => 'link-text', 'Heading' => 'link-heading', 'Reset' => 'link-reset', ], 'enable' => 'arguments.show_link', ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::tagString', ], ], 'link' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], 'extensions' => [ 'call' => __CLASS__ . '::link', ], ], 'articles' => [ 'type' => [ 'listOf' => 'Article', ], 'metadata' => [ 'label' => trans('Articles'), ], 'extensions' => [ 'call' => __CLASS__ . '::articles', ], ], 'tags' => [ 'type' => [ 'listOf' => 'Tag', ], 'metadata' => [ 'label' => trans('Tags'), ], 'extensions' => [ 'call' => __CLASS__ . '::tags', ], ], 'hits' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Hits'), ], ], 'alias' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Alias'), ], ], 'id' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('ID'), ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Contact'), ], ]; } public static function category($contact) { return Categories::getInstance('contact', ['countItems' => true])->get($contact->catid); } public static function user($contact) { return Factory::getUser($contact->user_id); } public static function tags($contact) { return $contact->tags->itemTags ?? (new TagsHelper())->getItemTags('com_contact.contact', $contact->id); } public static function tagString($contact, array $args) { $tags = static::tags($contact); $args += ['separator' => ', ', 'show_link' => true, 'link_style' => '']; return app(View::class)->render( Path::get('../../templates/tags', __DIR__), compact('tags', 'args'), ); } public static function link($contact) { return RouteHelper::getContactRoute($contact->id, $contact->catid, $contact->language); } public static function articles($contact) { if (empty($contact->articles)) { return; } $ids = array_column($contact->articles, 'id'); $articles = ArticleHelper::get($ids); usort($articles, fn($a, $b) => array_search($a->id, $ids) - array_search($b->id, $ids)); return $articles; } } builder-joomla-source/src/Type/TagItemType.php000064400000033034151666572110015401 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use Joomla\CMS\Categories\Categories; use Joomla\CMS\Factory; use YOOtheme\Path; use YOOtheme\View; use function YOOtheme\app; use function YOOtheme\trans; class TagItemType { /** * @return array */ public static function config() { return [ 'fields' => [ 'core_title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Title'), 'filters' => ['limit', 'preserve'], ], ], 'content' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Content'), 'filters' => ['limit', 'preserve'], ], 'extensions' => [ 'call' => __CLASS__ . '::content', ], ], 'teaser' => [ 'type' => 'String', 'args' => [ 'show_excerpt' => [ 'type' => 'Boolean', ], ], 'metadata' => [ 'label' => trans('Teaser'), 'arguments' => [ 'show_excerpt' => [ 'label' => trans('Excerpt'), 'description' => trans( 'Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.', ), 'type' => 'checkbox', 'default' => true, 'text' => trans('Prefer excerpt over regular text'), ], ], 'filters' => ['limit', 'preserve'], ], 'extensions' => [ 'call' => __CLASS__ . '::teaser', ], ], 'core_publish_up' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Published Date'), 'filters' => ['date'], ], ], 'core_created_time' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Created Date'), 'filters' => ['date'], ], ], 'core_modified_time' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Modified Date'), 'filters' => ['date'], ], ], 'metaString' => [ 'type' => 'String', 'args' => [ 'format' => [ 'type' => 'String', ], 'separator' => [ 'type' => 'String', ], 'link_style' => [ 'type' => 'String', ], 'show_publish_date' => [ 'type' => 'Boolean', ], 'show_author' => [ 'type' => 'Boolean', ], 'show_taxonomy' => [ 'type' => 'String', ], 'parent_id' => [ 'type' => 'String', ], 'date_format' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Meta'), 'arguments' => [ 'format' => [ 'label' => trans('Format'), 'description' => trans( 'Display the meta text in a sentence or a horizontal list.', ), 'type' => 'select', 'default' => 'list', 'options' => [ trans('List') => 'list', trans('Sentence') => 'sentence', ], ], 'separator' => [ 'label' => trans('Separator'), 'description' => trans('Set the separator between fields.'), 'default' => '|', 'enable' => 'arguments.format === "list"', ], 'link_style' => [ 'label' => trans('Link Style'), 'description' => trans('Set the link style.'), 'type' => 'select', 'default' => '', 'options' => [ 'Default' => '', 'Muted' => 'link-muted', 'Text' => 'link-text', 'Heading' => 'link-heading', 'Reset' => 'link-reset', ], ], 'show_publish_date' => [ 'label' => trans('Display'), 'description' => trans('Show or hide fields in the meta text.'), 'type' => 'checkbox', 'default' => true, 'text' => trans('Show date'), ], 'show_author' => [ 'type' => 'checkbox', 'default' => true, 'text' => trans('Show author'), ], 'show_taxonomy' => [ 'type' => 'select', 'default' => 'category', 'options' => [ trans('Hide Term List') => '', trans('Show Category') => 'category', trans('Show Tags') => 'tag', ], ], 'parent_id' => [ 'label' => trans('Parent Tag'), 'description' => trans( 'Tags are only loaded from the selected parent tag.', ), 'type' => 'select', 'default' => '0', 'show' => 'arguments.show_taxonomy === "tag"', 'options' => [ ['value' => '0', 'text' => trans('Root')], ['evaluate' => 'yootheme.builder.tags'], ], ], 'date_format' => [ 'label' => trans('Date Format'), 'description' => trans( 'Select a predefined date format or enter a custom format.', ), 'type' => 'data-list', 'default' => '', 'options' => [ 'Aug 6, 1999 (M j, Y)' => 'M j, Y', 'August 06, 1999 (F d, Y)' => 'F d, Y', '08/06/1999 (m/d/Y)' => 'm/d/Y', '08.06.1999 (m.d.Y)' => 'm.d.Y', '6 Aug, 1999 (j M, Y)' => 'j M, Y', 'Tuesday, Aug 06 (l, M d)' => 'l, M d', ], 'enable' => 'arguments.show_publish_date', 'attrs' => [ 'placeholder' => 'Default', ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::metaString', ], ], 'category' => [ 'type' => 'Category', 'metadata' => [ 'label' => trans('Category'), ], 'extensions' => [ 'call' => __CLASS__ . '::category', ], ], 'images' => [ 'type' => 'Images', 'metadata' => [ 'label' => '', ], 'extensions' => [ 'call' => __CLASS__ . '::images', ], ], 'link' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], ], 'author' => [ 'type' => 'User', 'metadata' => [ 'label' => trans('Author'), ], 'extensions' => [ 'call' => __CLASS__ . '::author', ], ], 'event' => [ 'type' => 'ArticleEvent', 'metadata' => [ 'label' => trans('Events'), ], 'extensions' => [ 'call' => __CLASS__ . '::event', ], ], 'content_type_title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Content Type Title'), ], ], 'core_alias' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Alias'), ], ], 'id' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('ID'), ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Tag Item'), ], ]; } public static function content($item) { return $item->core_body ?? ''; } public static function teaser($item, $args) { $args += ['show_excerpt' => true]; if ($args['show_excerpt'] && !empty($item->jcfields['excerpt']->rawvalue)) { return $item->jcfields['excerpt']->rawvalue; } return $item->core_body ?? ''; } public static function metaString($item, array $args) { if ($item->type_alias !== 'com_content.article') { return; } $args += [ 'format' => 'list', 'separator' => '|', 'link_style' => '', 'show_publish_date' => true, 'show_author' => true, 'show_taxonomy' => 'category', 'date_format' => '', ]; $props = [ 'id', 'author', 'contact_link', 'core_catid' => 'catid', 'category_title', 'core_created_user_id' => 'created_by', 'core_created_by_alias' => 'created_by_alias', 'core_publish_up' => 'publish_up', ]; $article = new \stdClass(); foreach ($props as $field => $prop) { if (isset($item->$prop)) { $article->$prop = $item->$prop; } elseif (isset($item->$field)) { $article->$prop = $item->$field; } else { $article->$prop = null; } } $tags = $args['show_taxonomy'] === 'tag' ? ArticleType::tags($article, $args) : null; return app(View::class)->render( Path::get('../../templates/meta', __DIR__), compact('article', 'tags', 'args'), ); } public static function images($item) { return json_decode($item->core_images); } public static function author($item) { $user = Factory::getUser($item->core_created_user_id); if ($item->core_created_by_alias) { $user = clone $user; $user->name = $item->core_created_by_alias; } return $user; } public static function category($item) { return isset($item->catid) ? Categories::getInstance('content', ['countItems' => true])->get($item->catid) : null; } public static function event($item) { return isset($item->event) ? $item : null; } } builder-joomla-source/src/Type/CategoryParamsType.php000064400000001335151666572110016767 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class CategoryParamsType { /** * @return array */ public static function config() { return [ 'fields' => [ 'image' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Image'), ], ], 'image_alt' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Image Alt'), 'filters' => ['limit', 'preserve'], ], ], ], ]; } } builder-joomla-source/src/Type/ImagesType.php000064400000004236151666572110015256 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use function YOOtheme\trans; class ImagesType { /** * @return array */ public static function config() { return [ 'fields' => [ 'image_intro' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Intro Image'), ], 'extensions' => [ 'call' => __CLASS__ . '::image', ], ], 'image_intro_alt' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Intro Image Alt'), 'filters' => ['limit', 'preserve'], ], ], 'image_intro_caption' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Intro Image Caption'), 'filters' => ['limit', 'preserve'], ], ], 'image_fulltext' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Full Article Image'), ], 'extensions' => [ 'call' => __CLASS__ . '::image', ], ], 'image_fulltext_alt' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Full Article Image Alt'), 'filters' => ['limit', 'preserve'], ], ], 'image_fulltext_caption' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Full Article Image Caption'), 'filters' => ['limit', 'preserve'], ], ], ], ]; } public static function image($data, $args, $context, $info) { return $data->{$info->fieldName} ?? null; } } builder-joomla-source/src/Type/ArticleImagesType.php000064400000000145151666572110016555 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; class ArticleImagesType extends ImagesType {} builder-joomla-source/src/Type/CustomUsersQueryType.php000064400000012041151666572110017364 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source\Type; use YOOtheme\Builder\Joomla\Source\UserHelper; use function YOOtheme\trans; class CustomUsersQueryType { /** * @return array */ public static function config() { return [ 'fields' => [ 'customUsers' => [ 'type' => [ 'listOf' => 'User', ], 'args' => [ 'groups' => [ 'type' => [ 'listOf' => 'String', ], ], 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], 'order' => [ 'type' => 'String', ], 'order_direction' => [ 'type' => 'String', ], ], 'metadata' => [ 'label' => trans('Custom Users'), 'group' => trans('Custom'), 'fields' => [ 'groups' => [ 'label' => trans('User Group'), 'description' => trans( 'Users are only loaded from the selected user groups. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple user groups.', ), 'type' => 'select', 'attrs' => [ 'multiple' => true, ], 'options' => [['evaluate' => 'yootheme.builder.usergroups']], ], '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of users.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'default' => 10, 'attrs' => [ 'min' => 1, ], ], ], ], '_order' => [ 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'order' => [ 'label' => trans('Order'), 'type' => 'select', 'default' => 'a.name', 'options' => [ trans('Alphabetical') => 'a.name', trans('Register date') => 'a.registerDate', trans('Last visit date') => 'a.lastvisitDate', ], ], 'order_direction' => [ 'label' => trans('Direction'), 'type' => 'select', 'default' => 'ASC', 'options' => [ trans('Ascending') => 'ASC', trans('Descending') => 'DESC', ], ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { return UserHelper::query($args); } } builder-joomla-source/src/TagHelper.php000064400000006740151666572110014143 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\Language\Multilanguage; use Joomla\Component\Tags\Administrator\Table\TagTable; use Joomla\Database\DatabaseDriver; use Joomla\Registry\Registry; use function YOOtheme\app; class TagHelper { /** * Gets the tags. * * @param int[] $ids * * @return object[] */ public static function get($ids) { $tags = []; // Get a level row instance. $table = new TagTable(app(DatabaseDriver::class)); foreach ((array) $ids as $id) { $table->load($id); if ($table->get('published') != 1) { continue; } if (!in_array($table->get('access'), Factory::getUser()->getAuthorisedViewLevels())) { continue; } $tags[] = (object) $table->getProperties(true); } return $tags; } public static function query($args = []) { $model = new TagsModel(['ignore_request' => true]); $params = ComponentHelper::getParams('com_tags'); $params->set('show_pagination_limit', false); $params->set('published', 1); $model->setState('tag.parent_id', !empty($args['parent_id']) ? $args['parent_id'] : 0); $model->setState( 'tag.language', Multilanguage::isEnabled() ? $args['language'] ?? Factory::getApplication()->getLanguage()->getTag() : 'all', ); $props = [ 'limit' => 'maximum', 'order' => 'all_tags_orderby', 'order_direction' => 'all_tags_orderby_direction', 'offset' => 'list.start', ]; foreach (array_intersect_key($props, $args) as $key => $prop) { $params->set($prop, $args[$key]); } $model->setState('params', $params); return $model->getItems(); } public static function filterTags($tags, $parentId) { $parent = current(static::get($parentId)); return $parent ? array_filter($tags, fn($tag) => $tag->lft > $parent->lft && $tag->rgt < $parent->rgt) : []; } public static function getItems($tagId, $args) { $model = new TagModel(['ignore_request' => true]); $model->setState('tag.id', $tagId); $model->setState('tag.state', 1); $model->setState( 'tag.language', $args['language'] ?? Factory::getApplication()->getLanguage()->getTag(), ); $model->setState( 'params', new Registry([ 'include_children' => $args['include_children'] ?? false, ]), ); if (!empty($args['order'])) { $args['order'] = "c.{$args['order']}"; } $args['typesr'] = array_filter($args['typesr'] ?? []); if (empty($args['typesr'])) { unset($args['typesr']); } $props = [ 'typesr' => 'tag.typesr', 'offset' => 'list.start', 'limit' => 'list.limit', 'order' => 'list.ordering', 'order_direction' => 'list.direction', 'include_children' => 'filter.include_children', 'order_alphanum' => 'list.alphanum', ]; foreach (array_intersect_key($props, $args) as $key => $prop) { $model->setState($prop, $args[$key]); } return $model->getItems(); } } builder-joomla-source/src/SourceController.php000064400000002523151666572110015567 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\CMS\Factory; use Joomla\CMS\User\User; use Joomla\Database\DatabaseDriver; use YOOtheme\Http\Request; use YOOtheme\Http\Response; class SourceController { /** * @throws \Exception */ public static function articles( Request $request, Response $response, DatabaseDriver $db, User $user ): Response { $ids = implode(',', array_map('intval', (array) $request->getQueryParam('ids'))); $groups = implode(',', $user->getAuthorisedViewLevels()); $titles = []; if (!empty($ids)) { $query = "SELECT id, title FROM #__content WHERE id IN ({$ids}) AND access IN ({$groups})"; $titles = $db->setQuery($query)->loadAssocList('id', 'title'); } return $response->withJson((object) $titles); } /** * @throws \Exception */ public static function users(Request $request, Response $response, User $user): Response { $titles = []; if ($user->authorise('core.manage', 'com_users')) { foreach ((array) $request->getQueryParam('ids') as $id) { $titles[$id] = Factory::getUser($id)->name; } } return $response->withJson((object) $titles); } } builder-joomla-source/src/ArticleHelper.php000064400000011352151666572110015006 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Event\Content\BeforeDisplayEvent; use Joomla\CMS\Factory; use Joomla\CMS\Language\Multilanguage; use Joomla\Database\DatabaseDriver; use Joomla\Registry\Registry; use function YOOtheme\app; class ArticleHelper { /** * Gets the articles. * * @param int[] $ids * @param array $args * * @return object[] */ public static function get($ids, array $args = []) { return $ids ? static::query(['article' => (array) $ids] + $args) : []; } /** * Query articles. * * @param array $args * * @return object[] */ public static function query(array $args = []) { $model = new ArticlesModel(['ignore_request' => true]); $model->setState('params', ComponentHelper::getParams('com_content')); $model->setState('filter.access', true); $model->setState('filter.published', 1); $model->setState('filter.language', empty($args['lang']) && Multilanguage::isEnabled()); $model->setState('filter.subcategories', false); $model->setState('filter.max_category_levels', -1); $args += [ 'article_operator' => 'IN', 'cat_operator' => 'IN', 'tag_operator' => 'IN', 'users_operator' => 'IN', ]; if (!empty($args['order'])) { if ($args['order'] === 'rand') { $args['order'] = app(DatabaseDriver::class)->getQuery(true)->Rand(); } elseif ($args['order'] === 'front') { $args['order'] = 'fp.ordering'; } else { $args['order'] = "a.{$args['order']}"; } } $props = [ 'offset' => 'list.start', 'limit' => 'list.limit', 'order' => 'list.ordering', 'order_direction' => 'list.direction', 'order_alphanum' => 'list.alphanum', 'featured' => 'filter.featured', 'subcategories' => 'filter.subcategories', 'max_category_levels' => 'filter.max_category_levels', 'tags' => 'filter.tags', 'tag_operator' => 'filter.tag_operator', 'include_child_categories' => 'filter.include_child_categories', 'include_child_tags' => 'filter.include_child_tags', 'lang' => 'filter.lang', ]; foreach (array_intersect_key($props, $args) as $key => $prop) { $model->setState($prop, $args[$key]); } if (!empty($args['article'])) { $model->setState('filter.article_id', (array) $args['article']); $model->setState('filter.article_id.include', $args['article_operator'] === 'IN'); } if (!empty($args['catid'])) { $model->setState('filter.category_id', $args['catid']); $model->setState('filter.category_id.include', $args['cat_operator'] === 'IN'); } if (!empty($args['users'])) { $model->setState('filter.author_id', (array) $args['users']); $model->setState('filter.author_id.include', $args['users_operator'] === 'IN'); } return $model->getItems(); } public static function applyPageNavigation($article) { if (empty($article->pagination)) { $joomla = Factory::getApplication(); if (method_exists($joomla, 'bootPlugin')) { $plugin = $joomla->bootPlugin('pagenavigation', 'content'); } elseif (!($plugin = static::importPlugin('pagenavigation', 'content'))) { return null; } $plugin->params = new Registry(['display' => 0]); $params = clone $article->params; $params->set('show_item_navigation', true); $args = ['com_content.article', $article, $params, 0]; if (version_compare(JVERSION, '5.3', '>=')) { $args = [new BeforeDisplayEvent('onContentBeforeDisplay', $args)]; } $plugin->onContentBeforeDisplay(...$args); } return !empty($article->prev) || !empty($article->next); } /** * Only needed for Joomla 3.x because it has no Application::bootPlugin() method. * * @param string $plugin * @param string $type * * @return ?object */ protected static function importPlugin($plugin, $type) { $path = JPATH_PLUGINS . "{$type}/{$plugin}/{$plugin}.php"; $class = 'Plg' . str_replace('-', '', $type) . $plugin; if (is_file($path)) { require_once $path; } if (!class_exists($class)) { return null; } return (new \ReflectionClass($class))->newInstanceWithoutConstructor(); } } builder-joomla-source/src/ArticlesModel.php000064400000011161151666572110015010 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\Component\Content\Site\Model\ArticlesModel as BaseModel; use Joomla\Database\DatabaseDriver; use function YOOtheme\app; class ArticlesModel extends BaseModel { protected function getListQuery() { $fieldId = false; $ordering = $this->getState('list.ordering', ''); if (str_starts_with($ordering, 'a.field:')) { $fieldId = (int) substr($ordering, 8); $this->setState('list.ordering', 'fields.value'); } $categoryId = $this->getState('filter.category_id'); $includeChildCategories = $this->getState('filter.include_child_categories'); if ($categoryId && $includeChildCategories) { $this->setState('filter.category_id'); } $query = parent::getListQuery(); if ($categoryId && $includeChildCategories) { $categories = implode(',', array_map('intval', (array) $categoryId)); $include = $this->getState('filter.category_id.include', true); $type = $include ? 'IN' : 'NOT IN'; $where = []; if ($includeChildCategories === 'include') { $where[] = "a.catid {$type} ({$categories})"; } $subQuery = "SELECT sub.id FROM #__categories AS sub JOIN #__categories AS this ON sub.lft > this.lft AND sub.rgt < this.rgt WHERE this.id IN ({$categories})"; $where[] = "a.catid {$type} ({$subQuery})"; $query->andWhere($where, $include ? 'OR' : 'AND'); } $tags = array_filter((array) $this->getState('filter.tags', [])); if ($tags) { $tagOperator = $this->getState('filter.tag_operator', 'IN'); $tagCount = count($tags); $tags = implode(',', array_map('intval', $tags)); $includeChildTags = $this->getState('filter.include_child_tags'); if (in_array($tagOperator, ['IN', 'NOT IN'])) { $where = []; if (!$includeChildTags || $includeChildTags === 'include') { $subQuery = "SELECT content_item_id FROM #__contentitem_tag_map WHERE tag_id IN ({$tags}) AND type_alias = 'com_content.article'"; $where[] = "a.id {$tagOperator} ({$subQuery})"; } if ($includeChildTags) { $subQuery = "SELECT map.content_item_id FROM #__tags AS sub JOIN #__tags AS this ON sub.lft > this.lft AND sub.rgt < this.rgt JOIN #__contentitem_tag_map as map ON sub.id = map.tag_id WHERE this.id IN ({$tags}) and map.type_alias = 'com_content.article'"; $where[] = "a.id {$tagOperator} ({$subQuery})"; } $query->andWhere($where, $tagOperator === 'IN' ? 'OR' : 'AND'); } if ($tagOperator === 'AND') { $greaterThan = $includeChildTags === 'include' ? '>=' : '>'; $lesserThan = $includeChildTags === 'include' ? '<=' : '<'; $tagQuery = $includeChildTags ? "SELECT sub.id FROM #__tags AS sub JOIN #__tags AS this ON sub.lft {$greaterThan} this.lft AND sub.rgt {$lesserThan} this.rgt WHERE this.id IN ({$tags})" : $tags; $tagCountQuery = $includeChildTags ? "(SELECT COUNT(sub.id) FROM #__tags AS sub JOIN #__tags AS this ON sub.lft {$greaterThan} this.lft AND sub.rgt {$lesserThan} this.rgt WHERE this.id IN ({$tags}))" : $tagCount; $subQuery = "SELECT COUNT(1) FROM #__contentitem_tag_map WHERE tag_id IN ({$tagQuery}) AND content_item_id = a.id AND type_alias = 'com_content.article'"; $query->where("({$subQuery}) = {$tagCountQuery}"); } } if ($fieldId) { $query->leftJoin( "#__fields_values AS fields ON a.id = fields.item_id AND fields.field_id = {$fieldId}", ); } if ( $this->getState('list.alphanum') && $ordering != app(DatabaseDriver::class)->getQuery(true)->Rand() ) { $ordering = $this->getState('list.ordering', 'a.ordering'); $order = $this->getState('list.direction', 'ASC'); $query->clear('order'); $query->order( "(substr({$ordering}, 1, 1) > '9') {$order}, {$ordering}+0 {$order}, {$ordering} {$order}", ); } // Filter by language if ($lang = $this->getState('filter.lang')) { $db = app(DatabaseDriver::class); $query->where('a.language IN (' . $db->quote($lang) . ',' . $db->quote('*') . ')'); } return $query; } } builder-joomla-source/src/TagsModel.php000064400000001174151666572110014143 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\Component\Tags\Site\Model\TagsModel as BaseModel; use Joomla\Database\DatabaseDriver; use function YOOtheme\app; class TagsModel extends BaseModel { protected function getListQuery() { $query = parent::getListQuery(); $params = $this->state->get('params'); $this->setState('list.start', $params->get('list.start')); if ($params->get('all_tags_orderby', 'title') == 'rand') { $query->clear('order'); $query->order(app(DatabaseDriver::class)->getQuery(true)->rand()); } return $query; } } builder-joomla-source/elements/pagination/templates/template.php000064400000004570151666572110021256 0ustar00<?php use Joomla\CMS\Language\Text; $pagination = $props['pagination']; $el = $this->el('nav', [ 'aria-label' => $props['pagination_type'] == 'numeric' ? Text::_('TPL_YOOTHEME_PAGINATION') : false, ]); $list = $this->el('ul', [ 'class' => [ 'uk-pagination uk-margin-remove-bottom', 'uk-flex-{text_align}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]]', ], 'uk-margin' => $props['pagination_type'] == 'numeric' ? count($pagination) > 1 : isset($pagination['previous'], $pagination['next']), ]); ?> <?= $el($props, $attrs) ?> <?= $list($props) ?> <?php if ($props['pagination_type'] == 'numeric') : ?> <?php foreach ($pagination as $key => $page) : ?> <?php if ($page->active) : ?> <li class="uk-active"><span aria-current="page"><?= $page->text ?></span></li> <?php elseif ($page->link) : ?> <li> <?php if (in_array($key, ['previous', 'next'], true)) : ?> <a href="<?= $page->link ?>" aria-label="<?= $page->text ?>"> <span uk-pagination-<?= $key ?>></span> </a> <?php else : ?> <a href="<?= $page->link ?>"><?= $page->text ?></a> <?php endif ?> </li> <?php else : ?> <li class="uk-disabled"><span><?= $page->text ?></span></li> <?php endif ?> <?php endforeach ?> <?php else : ?> <?php if (isset($pagination['previous'])) : ?> <?php if ($props['pagination_space_between']) : ?> <li class="uk-margin-auto-right"> <?php else : ?> <li> <?php endif ?> <a href="<?= $pagination['previous']->link ?>"><span uk-pagination-previous></span> <?= $pagination['previous']->text ?></a> </li> <?php endif ?> <?php if (isset($pagination['next'])) : ?> <?php if ($props['pagination_space_between']) : ?> <li class="uk-margin-auto-left"> <?php else : ?> <li> <?php endif ?> <a href="<?= $pagination['next']->link ?>"><?= $pagination['next']->text ?> <span uk-pagination-next></span></a> </li> <?php endif ?> <?php endif ?> <?= $list->end() ?> <?= $el->end() ?> builder-joomla-source/elements/pagination/element.json000064400000010713151666572110017254 0ustar00{ "@import": "./element.php", "name": "pagination", "title": "Pagination", "group": "system", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "pagination_type": "previous/next", "text_align": "center" }, "updates": "./updates.php", "templates": { "render": "./templates/template.php" }, "fields": { "pagination_type": { "label": "Pagination", "description": "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.", "type": "select", "options": { "Previous/Next": "previous/next", "Numeric": "numeric" } }, "pagination_space_between": { "type": "checkbox", "text": "Show space between links", "enable": "pagination_type == 'previous/next'" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element"] } } }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Settings", "fields": [ { "label": "Pagination", "type": "group", "fields": ["pagination_type", "pagination_space_between"] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder-joomla-source/elements/pagination/images/iconSmall.svg000064400000000623151666572110020636 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" points="14.5 8.4 16.5 10.5 14.5 12.6" /> <polyline fill="none" stroke="#444" points="5.5 8.4 3.5 10.5 5.5 12.6" /> <rect width="8" height="8" fill="none" stroke="#444" x="0.5" y="6.5" /> <rect width="8" height="8" fill="none" stroke="#444" x="11.5" y="6.5" /> </svg> builder-joomla-source/elements/pagination/images/icon.svg000064400000000711151666572110017643 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="2" points="21.5 12 24.5 15 21.5 18" /> <polyline fill="none" stroke="#444" stroke-width="2" points="8.5 12 5.5 15 8.5 18" /> <rect width="12" height="12" fill="none" stroke="#444" stroke-width="2" x="1" y="9" /> <rect width="12" height="12" fill="none" stroke="#444" stroke-width="2" x="17" y="9" /> </svg> builder-joomla-source/elements/pagination/element.php000064400000006033151666572110017072 0ustar00<?php namespace YOOtheme; use Joomla\CMS\Language\Text; use Joomla\CMS\Pagination\PaginationObject; use YOOtheme\Builder\Joomla\Source\ArticleHelper; return [ 'transforms' => [ 'render' => function ($node, $params) { // Single Article if (!isset($params['pagination'])) { $article = $params['item'] ?? ($params['article'] ?? false); if (!$article || !ArticleHelper::applyPageNavigation($article)) { return false; } $params['pagination'] = [ 'previous' => $article->prev ? new PaginationObject($article->prev_label, '', null, $article->prev) : null, 'next' => $article->next ? new PaginationObject($article->next_label, '', null, $article->next) : null, ]; } if (is_callable($params['pagination'])) { $params['pagination'] = $params['pagination'](); } if (is_array($params['pagination'])) { $node->props['pagination_type'] = 'previous/next'; $node->props['pagination'] = $params['pagination']; return; } // Article Index if (empty($params['pagination']) || $params['pagination']->pagesTotal < 2) { return false; } $list = $params['pagination']->getPaginationPages(); $total = $params['pagination']->pagesTotal; $current = (int) $params['pagination']->pagesCurrent; $endSize = 1; $midSize = 3; $dots = false; $pagination = []; if ($list['previous']['active']) { $pagination['previous'] = $list['previous']['data']; } $list['start']['data']->text = 1; $list['end']['data']->text = $total; for ($n = 1; $n <= $total; $n++) { $active = $n <= $endSize || ($current && $n >= $current - $midSize && $n <= $current + $midSize) || $n > $total - $endSize; if ($active || $dots) { if ($active) { $pagination[$n] = $n === 1 ? $list['start']['data'] : ($n === $total ? $list['end']['data'] : $list['pages'][$n]['data']); $pagination[$n]->active = $n === $current; } else { $pagination[$n] = new PaginationObject(Text::_('…')); } $dots = $active; } } if ($list['next']['active']) { $pagination['next'] = $list['next']['data']; } $node->props['pagination'] = $pagination; }, ], ]; builder-joomla-source/elements/pagination/updates.php000064400000000352151666572110017104 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset( $node->props['navigation'], $node->props['pagination_start_end'] ); }, ]; builder-joomla-source/bootstrap.php000064400000004750151666572110013515 0ustar00<?php namespace YOOtheme\Builder\Joomla\Source; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; use Joomla\Database\DatabaseDriver; use YOOtheme\Builder; use YOOtheme\Builder\BuilderConfig; use YOOtheme\Builder\Source\Filesystem\FileHelper; use YOOtheme\Builder\Source\SourceTransform; use YOOtheme\Builder\UpdateTransform; use YOOtheme\Joomla\Media; use YOOtheme\Path; return [ 'config' => [ 'source' => [ 'id' => 1, ], BuilderConfig::class => __DIR__ . '/config/customizer.json', ], 'routes' => [ ['get', '/joomla/articles', [SourceController::class, 'articles']], ['get', '/joomla/users', [SourceController::class, 'users']], ], 'events' => [ 'source.init' => [Listener\LoadSourceTypes::class => 'handle'], 'builder.template' => [Listener\MatchTemplate::class => '@handle'], 'builder.template.load' => [Listener\LoadTemplateUrl::class => '@handle'], BuilderConfig::class => [Listener\LoadBuilderConfig::class => '@handle'], ], 'actions' => [ 'onLoad404' => [Listener\LoadNotFound::class => '@handle'], 'onAfterInitialiseDocument' => [ Listener\LoadSearchTemplate::class => '@afterInitialiseDocument', ], 'onLoadTemplate' => [Listener\LoadTemplate::class => '@handle'], 'onAfterDispatch' => [Listener\LoadSearchTemplate::class => ['@afterDispatch', -10]], ], 'extend' => [ Builder::class => function (Builder $builder) { $builder->addTypePath(__DIR__ . '/elements/*/element.json'); }, UpdateTransform::class => function (UpdateTransform $update) { $update->addGlobals(require __DIR__ . '/updates.php'); }, SourceTransform::class => function (SourceTransform $transform, $app) { $transform->addFilter('date', function ($value, $format) use ($app) { if (!$value) { return $value; } if ($value === $app(DatabaseDriver::class)->getNullDate()) { return; } return HTMLHelper::_('date', $value, $format ?: Text::_('DATE_FORMAT_LC3')); }); }, ], 'services' => [ Listener\LoadSearchTemplate::class => '', FileHelper::class => function () { return new FileHelper( array_map(fn($dir) => Path::join(JPATH_ROOT, $dir), Media::getRootPaths()), ); }, ], ]; theme-joomla-modules/bootstrap.php000064400000001712151666572110013334 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Document\Document; use YOOtheme\View; return [ 'routes' => [ ['get', '/module', ModuleController::class . '@getModule'], ['post', '/module', ModuleController::class . '@saveModule'], ['get', '/modules', ModuleController::class . '@getModules'], ['get', '/positions', ModuleController::class . '@getPositions'], ], 'events' => [ 'theme.init' => [Listener\LoadModuleRenderer::class => '@handle'], 'customizer.init' => [Listener\LoadModuleData::class => '@handle'], ], 'actions' => [ 'onContentPrepareForm' => [Listener\LoadModuleForm::class => 'handle'], 'onAfterCleanModuleList' => [Listener\LoadModules::class => ['@handle', -10]], ], 'extend' => [ View::class => function (View $view, $app) { $view->addFunction('countModules', $app->wrap(Document::class . '@countModules')); }, ], ]; theme-joomla-modules/src/ModuleConfig.php000064400000006143151666572110014464 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Language\Language; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\PluginHelper; use Joomla\CMS\User\User; use Joomla\Database\DatabaseDriver; use YOOtheme\Config; use YOOtheme\ConfigObject; /** * @property array $types * @property array $modules * @property array $positions * @property bool $canCreate */ class ModuleConfig extends ConfigObject { public User $user; public Config $config; public Language $language; public DatabaseDriver $db; /** * Constructor. */ public function __construct(User $user, Config $config, Language $language, DatabaseDriver $db) { $this->db = $db; $this->user = $user; $this->config = $config; $this->language = $language; $component = PluginHelper::isEnabled('system', 'advancedmodules') ? 'com_advancedmodules' : 'com_modules'; parent::__construct([ 'types' => $this->getTypes(), 'modules' => $this->getModules(), 'positions' => $this->getPositions(), 'canCreate' => $this->user->authorise('core.create', 'com_modules'), 'url' => "administrator/index.php?option={$component}", ]); } protected function getTypes() { $query = 'SELECT name, element FROM #__extensions WHERE client_id = 0 AND type = ' . $this->db->quote('module'); $types = array_map(function (object $type): string { $this->language->load("{$type->element}.sys", JPATH_SITE, null, false, true); return Text::_($type->name); }, $this->db->setQuery($query)->loadObjectList('element')); natsort($types); return $types; } protected function getModules() { $query = 'SELECT id, title, module, position, ordering FROM #__modules WHERE client_id = 0 AND published != -2 ORDER BY position, ordering'; return array_map( fn(object $module): array => [ 'id' => (string) $module->id, // In Joomla 4 `id` is int 'type' => $module->module, 'title' => $module->title, 'builder' => $module->module === 'mod_yootheme_builder', 'position' => $module->position, 'canEdit' => $this->user->authorise( 'core.edit', "com_modules.module.{$module->id}", ), 'canDelete' => $this->user->authorise( 'core.edit.state', "com_modules.module.{$module->id}", ), ], $this->db->setQuery($query)->loadObjectList(), ); } protected function getPositions() { $query = 'SELECT DISTINCT(position) FROM #__modules WHERE client_id = 0 ORDER BY position'; return array_values( array_unique( array_merge( array_keys($this->config->get('theme.positions', [])), $this->db->setQuery($query)->loadColumn(), ), ), ); } } theme-joomla-modules/src/ModulesRenderer.php000064400000005323151666572110015207 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Document\DocumentRenderer; use Joomla\CMS\Helper\ModuleHelper; use Joomla\CMS\Layout\LayoutHelper; use Joomla\CMS\User\User; use YOOtheme\Config; use YOOtheme\View; use function YOOtheme\app; class ModulesRenderer extends DocumentRenderer { public function render($position, $params = [], $content = null) { [$config, $view, $user, $joomla] = app( Config::class, View::class, User::class, CMSApplication::class, ); $modules = ModuleHelper::getModules($position); $renderer = $this->_doc->loadRenderer('module'); $frontEdit = $joomla->isClient('site') && $joomla->get('frontediting', 1) && !$user->guest; $menusEdit = $joomla->get('frontediting', 1) == 2 && $user->authorise('core.edit', 'com_menus'); // Reset section transparent header if ($position === 'top') { $prevSectionTransparency = $config->get('header.section.transparent'); $config->del('header.section.transparent'); } foreach ($modules as $module) { $moduleHtml = $renderer->render($module, $params, $content); if (!isset($module->attrs)) { $module->attrs = []; } if (trim($moduleHtml) != '') { if ( $position === 'top' && ($module->type ?? '') !== 'yootheme_builder' && null === $config->get('header.section.transparent') ) { $config->set( 'header.section.transparent', (bool) $config('~theme.top.header_transparent'), ); } if ( $frontEdit && $user->authorise('module.edit.frontend', "com_modules.module.{$module->id}") ) { $displayData = [ 'moduleHtml' => &$moduleHtml, 'module' => $module, 'position' => $position, 'menusediting' => $menusEdit, ]; LayoutHelper::render('joomla.edit.frontediting_modules', $displayData); } } $module->content = $moduleHtml; } if ($position === 'top' && null === $config->get('header.section.transparent')) { $config->set('header.section.transparent', $prevSectionTransparency); } return $view( '~theme/templates/position', ['name' => $position, 'items' => $modules] + $params, ); } } theme-joomla-modules/src/Listener/LoadModuleRenderer.php000064400000001115151666572110017404 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; class LoadModuleRenderer { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle(): void { if ($this->config->get('app.isSite')) { $renderer = version_compare(JVERSION, '3.8', '>=') ? 'Joomla\CMS\Document\Renderer\Html\ModulesRenderer' : 'JDocumentRendererHtmlModules'; class_alias('YOOtheme\Theme\Joomla\ModulesRenderer', $renderer); } } } theme-joomla-modules/src/Listener/LoadModules.php000064400000022523151666572110016106 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Document\Document; use Joomla\CMS\Document\HtmlDocument; use Joomla\CMS\Helper\ModuleHelper; use YOOtheme\Config; use YOOtheme\Path; use YOOtheme\View; class LoadModules { public View $view; public Config $config; public ?Document $document; public function __construct(Config $config, View $view, ?Document $document) { $this->view = $view; $this->config = $config; $this->document = $document; } public function handle($event): void { $modules = $event->getArgument('modules'); if ( $this->config->get('app.isAdmin') || !$this->config->get('theme.active') || !$this->document instanceof HtmlDocument ) { return; } $this->view['sections']->add( 'breadcrumbs', fn() => ModuleHelper::renderModule( $this->createModule([ 'module' => 'mod_breadcrumbs', 'params' => [ 'showLast' => $this->config->get('~theme.site.breadcrumbs_show_current'), 'showHome' => $this->config->get('~theme.site.breadcrumbs_show_home'), 'homeText' => $this->config->get('~theme.site.breadcrumbs_home_text'), ], ]), ), ); // Logo Module foreach (['logo', 'logo-mobile', 'dialog', 'dialog-mobile'] as $position) { if ( $content = trim( $this->view->render('~theme/templates/header-logo', ['position' => $position]), ) ) { $module = $this->createModule([ 'module' => 'mod_custom', 'position' => $position, 'content' => $content, 'type' => 'logo', 'params' => ['layout' => 'blank'], ]); array_unshift($modules, $module); } } // Search Module foreach (['~theme.header.search', '~theme.mobile.header.search'] as $key) { if ($position = $this->config->get($key)) { $position = explode(':', $position, 2); $params = []; if ($this->config->get('~theme.search_module') === 'mod_finder') { $params['show_autosuggest'] = ComponentHelper::getParams('com_finder')->get( 'show_autosuggest', 1, ); } $module = $this->createModule([ 'module' => $this->config->get('~theme.search_module'), 'position' => $position[0], 'params' => $params, ]); $position[1] == 'start' ? array_unshift($modules, $module) : array_push($modules, $module); } } // Social Module foreach (['~theme.header.social', '~theme.mobile.header.social'] as $key) { if ( $this->config->get($key) && ($content = trim( $this->view->render('~theme/templates/socials', [ 'position' => ($position = explode(':', $this->config->get($key), 2))[0], ]), )) ) { $module = $this->createModule([ 'module' => 'mod_custom', 'position' => $position[0], 'content' => $content, 'params' => ['layout' => 'blank'], ]); $position[1] == 'start' ? array_unshift($modules, $module) : array_push($modules, $module); } } // Dialog Toggle Module foreach (['~theme.dialog.toggle', '~theme.mobile.dialog.toggle'] as $key) { if ( $this->config->get($key) && ($content = trim( $this->view->render('~theme/templates/header-dialog', [ 'position' => ($position = explode(':', $this->config->get($key), 2))[0], ]), )) ) { $module = $this->createModule([ 'module' => 'mod_custom', 'position' => $position[0], 'content' => $content, 'type' => 'dialog-toggle', 'params' => ['layout' => 'blank'], ]); $position[1] == 'start' ? array_unshift($modules, $module) : array_push($modules, $module); } } // Split Header Position if ($this->config->get('~theme.header.layout') === 'stacked-center-c') { $headerModules = $this->filterModules($modules, 'header'); // Split Auto $index = $this->config->get('~theme.header.split_index') ?: ceil(count($headerModules) / 2); foreach (array_slice($headerModules, $index) as $module) { $module->position .= '-split'; } } // Push Navbar Position if ( $this->config->get('~theme.header.layout') === 'stacked-left' && ($index = $this->config->get('~theme.header.push_index')) ) { $navbarModules = $this->filterModules($modules, 'navbar'); foreach (array_slice($navbarModules, $index) as $module) { $module->position .= '-push'; } } // Push Dialog Positions foreach ( [ 'dialog' => '~theme.dialog.push_index', 'dialog-mobile' => '~theme.mobile.dialog.push_index', ] as $key => $value ) { if ($index = $this->config->get($value)) { $dialogModules = $this->filterModules($modules, $key); foreach (array_slice($dialogModules, $index) as $module) { $module->position .= '-push'; } } } $temp = $this->config->get('req.customizer.module'); // Module field defaults (Template Tab in Module edit view) $defaults = array_map( fn($field) => $field['default'] ?? '', $this->config->loadFile(Path::get('../../config/modules.json', __DIR__))['fields'], ); foreach ($modules as $module) { if (empty($module->type)) { $module->type = str_replace('mod_', '', $module->module); } $module->attrs = ['id' => "module-{$module->id}", 'class' => []]; // Replace module content with temporary customizer module content if ($temp && $temp['id'] == $module->id && $module->type === 'yootheme_builder') { $module->content = $temp['content']; } $this->config->update("~theme.modules.{$module->id}", function ($values) use ( $temp, $module, $defaults ) { $params = json_decode($module->params); // Replace module config with temporary customizer module config if (isset($temp['yoo_config']) && $temp['id'] == $module->id) { $params->yoo_config = $temp['yoo_config']; } if (isset($params->yoo_config)) { $config = $params->yoo_config; } elseif (isset($params->config)) { $config = $params->config; } else { $config = '{}'; } return [ 'showtitle' => $module->showtitle, 'class' => [$params->moduleclass_sfx ?? ''], 'title_tag' => $params->header_tag ?? 'h3', 'title_class' => $params->header_class ?? '', 'is_list' => in_array($module->type, [ 'articles_archive', 'articles_categories', 'articles_category', 'articles_latest', 'articles_popular', 'tags_popular', 'tags_similar', ]), ] + json_decode($config, true) + $defaults + ($values ?: []); }); } $event->setArgument(0, $modules); $event->setArgument('modules', $modules); } protected function createModule($module) { static $id = 0; $module = (object) array_merge( [ 'id' => 'tm-' . ++$id, 'name' => "tm-{$id}", // Joomla\CMS\Helper\ModuleHelper::getModule() requires 'name' 'title' => '', 'showtitle' => 0, 'position' => '', 'params' => '{}', ], (array) $module, ); if (is_array($module->params)) { $module->params = json_encode($module->params); } return $module; } protected function filterModules($modules, $position) { return array_filter($modules, fn($module) => $module->position === $position); } } theme-joomla-modules/src/Listener/LoadModuleData.php000064400000001626151666572110016516 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\User\User; use YOOtheme\Config; use YOOtheme\Path; use YOOtheme\Theme\Joomla\ModuleConfig; class LoadModuleData { public User $user; public Config $config; public ModuleConfig $module; public function __construct(User $user, Config $config, ModuleConfig $module) { $this->user = $user; $this->config = $config; $this->module = $module; } public function handle(): void { $this->config->add('customizer', ['module' => $this->module->getArrayCopy()]); $this->config->addFile('customizer.panels.module', Path::get('../../config/modules.json')); if ($this->user->authorise('core.manage', 'com_modules')) { $this->config->addFile( 'customizer', Path::get('../../config/customizer.json', __DIR__), ); } } } theme-joomla-modules/src/Listener/LoadModuleForm.php000064400000001603151666572110016543 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; class LoadModuleForm { public static function handle($event): void { $form = $event->getArgument('subject'); $data = $event->getArgument('data'); if ( !in_array($form->getName(), [ 'com_config.modules', 'com_modules.module', 'com_advancedmodules.module', ]) ) { return; } // copy params config to yoo_config if (!isset($data->params['yoo_config']) && isset($data->params['config'])) { $data->params['yoo_config'] = $data->params['config']; } // add yoo_config hidden input field $form->load( '<form><fields name="params"><fieldset name="advanced"><field name="yoo_config" type="hidden" default="{}" /></fieldset></fields></form>', ); } } theme-joomla-modules/src/ModuleController.php000064400000005431151666572110015401 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\User\User; use Joomla\Database\DatabaseDriver; use YOOtheme\Builder; use YOOtheme\Http\Request; use YOOtheme\Http\Response; class ModuleController { protected DatabaseDriver $db; public function __construct(DatabaseDriver $db) { $this->db = $db; } public function getModule(Request $request, Response $response, Builder $builder) { $module = $this->getInstance($request->getQueryParam('id')); return $response->withJson([ 'title' => $module->title, 'params' => $module->params, 'content' => $module->module === 'mod_yootheme_builder' ? $builder->load($module->content ?? '') : $module->content, ]); } public function saveModule(Request $request, Response $response, Builder $builder, User $user) { $id = $request->getParam('id'); $data = $request->getParam('data', []); $request->abortIf(!$id, 400); $request->abortIf( !$user->authorise('core.edit', "com_modules.module.{$id}"), 403, 'Insufficient User Rights.', ); // save builder content if (array_key_exists('content', $data)) { $data = [ 'content' => json_encode( $builder ->withParams(['context' => 'save']) ->load(json_encode($data['content'])), ), ]; } return $response->withJson([ 'message' => $this->saveInstance($id, $data) ? 'success' : 'fail', ]); } public function getModules(Request $request, Response $response, ModuleConfig $module) { return $response->withJson($module->modules); } public function getPositions(Request $request, Response $response, ModuleConfig $module) { return $response->withJson($module->positions); } protected function getInstance(string $id): ?object { $query = sprintf('SELECT * FROM #__modules WHERE id = %d', $id); // decode module params $module = $this->db->setQuery($query)->loadObject(); $module->params = json_decode($module->params, true); return $module; } protected function saveInstance(string $id, array $data): bool { $data += ['id' => $id]; $object = (object) $data; // update module params if (is_array($object->params ?? null)) { $module = $this->getInstance($id); $object->params = json_encode( $object->params + $module->params, JSON_UNESCAPED_SLASHES, ); } return $this->db->updateObject('#__modules', $object, 'id'); } } theme-joomla-modules/config/customizer.json000064400000012725151666572110015160 0ustar00{ "sections": { "joomla-modules": { "title": "Modules", "priority": 40, "help": { "Modules and Positions": [ { "title": "Managing Modules", "src": "https://www.youtube-nocookie.com/watch?v=KPdzvC1BmbU&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:54", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#+modules", "support": "support/search?tags=125&q=modules" }, { "title": "Creating a New Module", "src": "https://www.youtube-nocookie.com/watch?v=rBd5TVnk0pM&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:06", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#add-a-new-module", "support": "support/search?tags=125&q=modules" }, { "title": "Using Module Positions", "src": "https://www.youtube-nocookie.com/watch?v=0qIrLoh1jP4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:55", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#module-positions", "support": "support/search?tags=125&q=module%20positions" }, { "title": "Assigning Modules to Specific Pages", "src": "https://www.youtube-nocookie.com/watch?v=48GVyeC2OB4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:09", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#module-visibility", "support": "support/search?tags=125&q=module%20visibility" } ], "Module Theme Options": [ { "title": "Setting the Module Default Options", "src": "https://www.youtube-nocookie.com/watch?v=b1aqNdyLkpA&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:33", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#default-options", "support": "support/search?tags=125&q=module%20theme%20settings" }, { "title": "Setting the Module Appearance Options", "src": "https://www.youtube-nocookie.com/watch?v=oNxjulZebfc&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:08", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#appearance-options", "support": "support/search?tags=125&q=module%20theme%20settings" }, { "title": "Setting the Module Grid Options", "src": "https://www.youtube-nocookie.com/watch?v=cYY0hIVJlr0&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:41", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#grid-options", "support": "support/search?tags=125&q=module%20theme%20settings%20grid" }, { "title": "Setting the Module List Options", "src": "https://www.youtube-nocookie.com/watch?v=R3g2cgnC3SM&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:38", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#list-options", "support": "support/search?tags=125&q=module%20theme%20settings%20list" }, { "title": "Setting the Module Menu Options", "src": "https://www.youtube-nocookie.com/watch?v=5oXRtSuVTtk&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:24", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#menu-options", "support": "support/search?tags=125&q=module%20theme%20settings%20menu" } ], "Builder Module": [ { "title": "Using the Builder Module", "src": "https://www.youtube-nocookie.com/watch?v=msRBkqxnZ18&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:58", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#builder-module", "support": "support/search?tags=125&q=builder%20module" }, { "title": "Creating Advanced Module Layouts", "src": "https://www.youtube-nocookie.com/watch?v=jr09mnXDbIA&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "4:16", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#advanced-layouts", "support": "support/search?tags=125&q=builder%20module" } ] } } } } theme-joomla-modules/config/modules.json000064400000023234151666572110014421 0ustar00{ "fields": { "visibility": { "label": "Visibility", "description": "Display the module only from this device width and larger.", "type": "select", "default": "", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } }, "style": { "label": "Style", "description": "Select a panel style.", "type": "select", "default": "", "options": { "None": "", "Card Default": "card-default", "Card Primary": "card-primary", "Card Secondary": "card-secondary", "Card Hover": "card-hover" }, "show": "!$match(this.position, '^(toolbar-(left|right)|(logo|navbar|header|dialog)(-mobile)?|debug)$')" }, "title_style": { "label": "Title Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "default": "", "options": { "None": "", "3X-Large": "heading-3xlarge", "2X-Large": "heading-2xlarge", "X-Large": "heading-xlarge", "Large": "heading-large", "Medium": "heading-medium", "Small": "heading-small", "H1": "h1", "H2": "h2", "H3": "h3", "H4": "h4", "H5": "h5", "H6": "h6" }, "show": "!$match(this.position, '^(toolbar-(left|right)|(logo|navbar|header)(-mobile)?|debug)$')" }, "title_decoration": { "label": "Title Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "default": "", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "show": "!$match(this.position, '^(toolbar-(left|right)|(logo|navbar|header)(-mobile)?|debug)$')" }, "text_align": { "label": "Alignment", "description": "Center, left and right alignment may depend on a breakpoint and require a fallback.", "type": "select", "default": "", "options": { "None": "", "Left": "left", "Center": "center", "Right": "right", "Justify": "justify" }, "show": "!$match(this.position, '^(toolbar-(left|right)|(logo|navbar|header)(-mobile)?|debug)$')" }, "text_align_breakpoint": { "label": "Alignment Breakpoint", "description": "Define the device width from which the alignment will apply.", "type": "select", "default": "", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "show": "!$match(this.position, '^(toolbar-(left|right)|(logo|navbar|header)(-mobile)?|debug)$') && text_align && text_align != 'justify'" }, "text_align_fallback": { "label": "Alignment Fallback", "description": "Define an alignment fallback for device widths below the breakpoint.", "type": "select", "default": "", "options": { "None": "", "Left": "left", "Center": "center", "Right": "right", "Justify": "justify" }, "show": "!$match(this.position, '^(toolbar-(left|right)|(logo|navbar|header)(-mobile)?|debug)$') && text_align && text_align != 'justify' && text_align_breakpoint" }, "width": { "label": "Width", "description": "The width of the grid column that contains the module.", "type": "select", "default": "", "options": { "Expand": "", "20%": "1-5", "25%": "1-4", "33%": "1-3", "40%": "2-5", "50%": "1-2", "100%": "1-1" }, "show": "$match(this.position, '^(top|bottom|builder-\\d+)$')" }, "maxwidth": { "label": "Max Width", "description": "The module maximum width.", "type": "select", "default": "", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "show": "$match(this.position, '^(top|bottom|builder-\\d+)$')" }, "maxwidth_align": { "label": "Max Width (Alignment)", "description": "Set how the module should align when the container is larger than its max-width.", "type": "checkbox", "text": "Center the module", "show": "maxwidth && $match(this.position, '^(top|bottom|builder-\\d+)$')" }, "list_style": { "label": "List Style", "description": "Select the list style.", "type": "select", "default": "", "options": { "None": "", "Divider": "divider" }, "show": "$match(this.type, 'articles_(archive|categories|latest|popular)|tags_(popular|similar)')" }, "link_style": { "label": "Link Style", "description": "Select the link style.", "type": "select", "default": "", "options": { "None": "", "Muted": "muted", "Text": "text" }, "show": "$match(this.type, 'articles_(archive|categories|latest|popular)|tags_(popular|similar)')" }, "menu_type": { "label": "Menu Type", "description": "Select the menu type.", "type": "select", "default": "", "options": { "Default": "", "Nav": "nav", "Subnav": "subnav", "Iconnav": "iconnav" }, "show": "$match(this.type, 'menu')" }, "menu_divider": { "label": "Menu Divider", "description": "Show optional dividers between nav or subnav items.", "type": "checkbox", "text": "Show dividers", "show": "$match(this.type, 'menu')" }, "menu_style": { "label": "Menu Style", "description": "Select the nav style.", "type": "select", "default": "default", "options": { "Default": "default", "Primary": "primary", "Secondary": "secondary" }, "show": "$match(this.type, 'menu')" }, "menu_size": { "label": "Menu Primary Size", "description": "Select the primary nav size.", "type": "select", "default": "", "options": { "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "show": "$match(this.type, 'menu')", "enable": "menu_style == 'primary'" }, "menu_image_width": { "label": "Menu Image Width", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "attrs": { "placeholder": "auto" }, "show": "$match(this.type, 'menu')" }, "menu_image_height": { "label": "Menu Image Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "attrs": { "placeholder": "auto" }, "show": "$match(this.type, 'menu')" }, "menu_image_svg_inline": { "label": "Menu Inline SVG", "description": "Inject SVG images into the markup so they adopt the text color automatically.", "type": "checkbox", "text": "Make SVG stylable with CSS", "show": "$match(this.type, 'menu')" }, "menu_icon_width": { "label": "Menu Icon Width", "description": "Set the icon width.", "show": "$match(this.type, 'menu')" }, "menu_image_margin": { "label": "Menu Image and Title", "type": "checkbox", "text": "Add margin between", "default": true, "show": "$match(this.type, 'menu')" }, "menu_image_align": { "label": "Menu Image Align", "type": "select", "default": "center", "options": { "Top": "top", "Center": "center" }, "show": "$match(this.type, 'menu')" } } } theme-analytics/bootstrap.php000064400000000210151666572110012364 0ustar00<?php namespace YOOtheme\Theme\Analytics; return [ 'events' => ['theme.head' => [Listener\LoadThemeHead::class => '@handle']], ]; theme-analytics/app/analytics.min.js000064400000000760151666572110013537 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ (function(){"use strict";function e(t,n={}){a("js",new Date),a("config",t,n),o(`https://www.googletagmanager.com/gtag/js?id=${t}`)}function a(){let{dataLayer:t}=window;t||(t=window.dataLayer=[]),t.push(arguments)}function o(t){const n=document.createElement("script");n.src=t,n.async=!0,document.head.appendChild(n)}(window.$load||(window.$load=[])).push(({google_analytics:t,google_analytics_anonymize:n},c)=>{e(t,{anonymize_ip:n}),c()})})(); theme-analytics/src/Listener/LoadThemeHead.php000064400000001637151666572110015365 0ustar00<?php namespace YOOtheme\Theme\Analytics\Listener; use YOOtheme\Config; use YOOtheme\Metadata; use YOOtheme\Path; class LoadThemeHead { public Config $config; public Metadata $metadata; public function __construct(Config $config, Metadata $metadata) { $this->config = $config; $this->metadata = $metadata; } public function handle(): void { $keys = ['google_analytics', 'google_analytics_anonymize']; if ($this->config->get("~theme.{$keys[0]}")) { foreach ($keys as $key) { $this->config->set( "theme.data.{$key}", trim($this->config->get("~theme.{$key}", '')), ); } $this->metadata->set('script:analytics', [ 'src' => Path::get('../../app/analytics.min.js', __DIR__), 'defer' => true, ]); } } } styler/config/customizer.json000064400000000215151666572110012442 0ustar00{ "sections": { "styler": { "title": "Style", "width": 350, "priority": 11 } } } styler/config/styler.json000064400000133067151666572110011574 0ustar00{ "ignore": [ "@deprecated", "@breakpoint-*-max", "@internal*", "@heading-primary-*", "@heading-hero-*", "@woocommerce-*" ], "components": { "global": { "name": "Global", "general": true, "groups": { "typography": ["@global(-*)?-font-*", "@global-line-height"], "primary": "@global-primary-*", "secondary": "@global-secondary-*", "tertiary": "@global-tertiary-*", "colors": "@global(-*)?-color", "backgrounds": "@global(-*)?-background", "borders": "@global-border*", "box shadows": "@global-*-box-shadow", "spacings": ["@global(-*)?-margin", "@global(-*)?-gutter"], "controls": "@global-control-*", "z index": "@global-z-index", "breakpoints": "@breakpoint-*" } }, "theme": { "name": "Theme", "general": true, "groups": { "page": "@theme-page-*", "page container": "@theme-page-container-*", "toolbar": "@theme-toolbar-*", "headerbar": "@theme-headerbar-*", "headerbar top": "@theme-headerbar-top-*", "headerbar bottom": "@theme-headerbar-bottom-*", "headerbar stacked": "@theme-headerbar-stacked-*", "sidebar": "@theme-sidebar-*", "section title": "@section-title-*", "mask default": "@theme-mask-default-*", "box decoration": "@theme-box-decoration-*", "box decoration default": "@theme-box-decoration-default-*", "box decoration primary": "@theme-box-decoration-primary-*", "box decoration secondary": "@theme-box-decoration-secondary-*", "transition border": "@theme-transition-border-*" }, "hover": ".tm-page, .tm-toolbar, .tm-sidebar, .tm-headerbar-top, .tm-headerbar-bottom, .tm-headerbar-stacked, .tm-section-title, .tm-box-decoration-default, .tm-box-decoration-primary, .tm-box-decoration-secondary, .tm-transition-border", "inspect": ".tm-page-container, .tm-page, tm-page > *, .tm-toolbar, .tm-toolbar > *, .tm-sidebar, .tm-sidebar > *, .tm-headerbar-top, .tm-headerbar-top > *, .tm-headerbar-bottom, .tm-headerbar-bottom > *, .tm-headerbar-stacked, .tm-headerbar-stacked > *, .tm-section-title, .tm-section-title > *, .tm-box-decoration-default, .tm-box-decoration-default > *, .tm-box-decoration-primary, .tm-box-decoration-primary > *, .tm-box-decoration-secondary, .tm-box-decoration-secondary > *, .tm-transition-border, .tm-transition-border > *" }, "inverse": { "name": "Inverse", "general": true, "groups": { "global": ["@inverse-global-color-mode", "@inverse-global-*"], "theme": [ "@inverse-section-title-*", "@inverse-theme-box-decoration-default-*", "@inverse-theme-box-decoration-primary-*", "@inverse-theme-box-decoration-secondary-*" ], "woocommerce": "@inverse-woocommerce-*", "accordion": "@inverse-accordion-*", "article": "@inverse-article-*", "badge": "@inverse-badge-*", "base": "@inverse-base-*", "breadcrumb": "@inverse-breadcrumb-*", "button default": "@inverse-button-default-*", "button primary": "@inverse-button-primary-*", "button secondary": "@inverse-button-secondary-*", "button danger": "@inverse-button-danger-*", "button disabled": "@inverse-button-disabled-*", "button text": "@inverse-button-text-(?!transform)*", "button link": "@inverse-button-link-*", "card": "@inverse-card-*", "close": "@inverse-close-*", "column": "@inverse-column-*", "countdown": "@inverse-countdown-*", "divider": "@inverse-divider-*", "dotnav": "@inverse-dotnav-*", "form": "@inverse-form-*", "form danger": "@inverse-form-danger-*", "form success": "@inverse-form-success-*", "form blank": "@inverse-form-blank-*", "form select": "@inverse-form-select-*", "form radio": "@inverse-form-radio-*", "form legend": "@inverse-form-legend-*", "form label": "@inverse-form-label-*", "form icon": "@inverse-form-icon-*", "grid divider": "@inverse-grid-divider-*", "heading": "@inverse-heading-*", "icon link": "@inverse-icon-link-*", "icon button": "@inverse-icon-button-*", "iconnav": "@inverse-iconnav-*", "label": "@inverse-label-*", "leader": "@inverse-leader-*", "link": "@inverse-link-*", "list": "@inverse-list-*", "marker": "@inverse-marker-*", "nav": "@inverse-nav-*", "nav default": "@inverse-nav-default-*", "nav primary": "@inverse-nav-primary-*", "nav secondary": "@inverse-nav-secondary-*", "navbar": "@inverse-navbar-*", "navbar nav item": "@inverse-navbar-nav-item-*", "navbar nav item line": "@inverse-navbar-nav-item-line-*", "pagination": "@inverse-pagination-*", "search": "@inverse-search-*", "search default": "@inverse-search-default-*", "search navbar": "@inverse-search-navbar-*", "search medium": "@inverse-search-medium-*", "search large": "@inverse-search-large-*", "search toggle": "@inverse-search-toggle-*", "slidenav": "@inverse-slidenav-*", "subnav": "@inverse-subnav-*", "subnav divider": "@inverse-subnav-divider-*", "subnav pill": "@inverse-subnav-pill-*", "tab": "@inverse-tab-*", "table": "@inverse-table-*", "text": "@inverse-text-*", "thumbnav": "@inverse-thumbnav-*", "totop": "@inverse-totop-*", "utility": ["@inverse-dropcap-*", "@inverse-logo-*"] } }, "accordion": { "name": "Accordion", "groups": { "item": "@accordion-item-*", "title": "@accordion-title-*", "icon": "@accordion-icon-*", "content": "@accordion-content-*" }, "hover": ".uk-accordion", "inspect": ".uk-accordion, .uk-accordion-title, .uk-accordion-title > *, .uk-accordion-content, .uk-accordion-content > *" }, "alert": { "name": "Alert", "groups": { "primary": "@alert-primary-*", "success": "@alert-success-*", "warning": "@alert-warning-*", "danger": "@alert-danger-*", "close": "@alert-close-*" }, "hover": ".uk-alert", "inspect": ".uk-alert, .uk-alert > *, .uk-alert-close" }, "align": { "name": "Align", "hover": "[class*='uk-align']", "inspect": "[class*='uk-align'], [class*='uk-align'] > *" }, "animation": { "name": "Animation", "groups": { "slide": "@animation-slide-*" }, "hover": "[class*='uk-animation-']", "inspect": "[class*='uk-animation-'], [class*='uk-animation-'] > *" }, "article": { "name": "Article", "groups": { "title": "@article-title-*", "meta": "@article-meta-*", "meta link": "@article-meta-link-*" }, "hover": ".uk-article", "inspect": ".uk-article, .uk-article > *, .uk-article-title, .uk-article-title > *, .uk-article-meta, .uk-article-meta > *" }, "background": { "name": "Background", "groups": { "default": "@background-default-*", "muted": "@background-muted-*", "primary": "@background-primary-*", "secondary": "@background-secondary-*" }, "hover": ".uk-background-default, .uk-background-muted, .uk-background-primary, .uk-background-secondary", "inspect": ".uk-background-default, .uk-background-muted, .uk-background-primary, .uk-background-secondary" }, "badge": { "name": "Badge", "groups": { "badge": "@badge-*" }, "hover": ".uk-badge", "inspect": ".uk-badge, .uk-badge > *" }, "base": { "name": "Base", "groups": { "body": "@base-body-*", "link": "@base-link-*", "strong": "@base-strong-*", "code": "@base-code-*", "em": "@base-em-*", "ins": "@base-ins-*", "mark": "@base-mark-*", "quote": "@base-quote-*", "small": "@base-small-*", "margin": "@base-margin-*", "heading": "@base-heading-*", "h1": "@base-h1-*", "h2": "@base-h2-*", "h3": "@base-h3-*", "h4": "@base-h4-*", "h5": "@base-h5-*", "h6": "@base-h6-*", "list": "@base-list-*", "hr": "@base-hr-*", "blockquote": "@base-blockquote-*", "blockquote footer": "@base-blockquote-footer-*", "pre": "@base-pre-*", "focus": "@base-focus-*", "selection": "@base-selection-*" }, "hover": "a, strong, code, kbd, samp, em, ins, mark, q, small, p, ul, ol, dl, pre, address, fieldset, figure, h1, h2, h3, h4, h5, h6, hr, blockquote, .uk-h1, .uk-h2, .uk-h3, .uk-h4, .uk-h5, .uk-h6, .uk-link", "inspect": ":not(.uk-nav):not(.uk-nav-sub):not(.uk-navbar-nav):not(.uk-subnav):not(.uk-breadcrumb):not(.uk-pagination):not(.uk-tab) > * > a:not([class]), * > a:not([class]), * > * > a:not([class]), strong, :not(pre) > code, :not(pre) > kbd, :not(pre) > samp, em, ins, mark, q, small, h1, h2, h3, h4, h5, h6, h1 > *, h2 > *, h3 > *, h4 > *, h5 > *, h6 > *, hr:not(.uk-divider-icon), blockquote, blockquote > *, pre, pre > *, .uk-h1, .uk-h2, .uk-h3, .uk-h4, .uk-h5, .uk-h6, .uk-h1 > *, .uk-h2 > *, .uk-h3 > *, .uk-h4 > *, .uk-h5 > *, .uk-h6 > *, .uk-link" }, "breadcrumb": { "name": "Breadcrumb", "groups": { "item": "@breadcrumb-item-*", "divider": "@breadcrumb-divider*" }, "hover": ".uk-breadcrumb", "inspect": ".uk-breadcrumb, .uk-breadcrumb > *, .uk-breadcrumb > * > *" }, "button": { "name": "Button", "groups": { "default": "@button-default-*", "primary": "@button-primary-*", "secondary": "@button-secondary-*", "danger": "@button-danger-*", "disabled": "@button-disabled-*", "text": ["@button-text-mode", "@button-text-(?!transform)*"], "link": "@button-link-*", "small": "@button-small-*", "large": "@button-large-*" }, "hover": ".uk-button", "inspect": ".uk-button, .uk-button-group" }, "card": { "name": "Card", "groups": { "body": "@card-body-*", "header": "@card-header-*", "footer": "@card-footer-*", "title": "@card-title-*", "badge": "@card-badge-*", "hover": "@card-hover*", "default": "@card-default-*", "default title": "@card-default-title-*", "default header": "@card-default-header-*", "default footer": "@card-default-footer-*", "primary": "@card-primary-*", "primary title": "@card-primary-title-*", "secondary": "@card-secondary-*", "secondary title": "@card-secondary-title-*", "small": "@card-small-*", "large": "@card-large-*" }, "hover": ".uk-card", "inspect": ".uk-card, .uk-card-body, .uk-card-body > *, .uk-card-header, .uk-card-header > *, .uk-card-footer, .uk-card-footer > *, [class*='uk-card-media'], .uk-card-title, .uk-card-title > *, .uk-card-badge" }, "close": { "name": "Close", "hover": ".uk-close", "inspect": ".uk-close, .uk-close svg" }, "column": { "name": "Column", "groups": { "divider": "@column-divider-*" }, "hover": "[class*='uk-column-']", "inspect": "[class*='uk-column-'], [class*='uk-column-'] > *" }, "comment": { "name": "Comment", "groups": { "header": "@comment-header-*", "title": "@comment-title-*", "meta": "@comment-meta-*", "list": "@comment-list-*", "primary": "@comment-primary-*" }, "hover": ".uk-comment", "inspect": ".uk-comment, .uk-comment-body, .uk-comment-body > *, .uk-comment-header, .uk-comment-header > *, .uk-comment-title, .uk-comment-title > *, .uk-comment-meta, .uk-comment-meta > *, .uk-comment-avatar, .uk-comment-avatar > *, .uk-comment-list, .uk-comment-list ul, .uk-comment-list li, .uk-comment-primary, uk-comment-primary > *" }, "container": { "name": "Container", "groups": { "xsmall": "@container-xsmall-*", "small": "@container-small-*", "large": "@container-large-*", "xlarge": "@container-xlarge-*" }, "hover": ".uk-container", "inspect": ".uk-container, .uk-container > *" }, "countdown": { "name": "Countdown", "groups": { "item": "@countdown-item-*", "number": "@countdown-number-*", "separator": "@countdown-separator-*", "label": "@countdown-label-*" }, "hover": ".uk-countdown", "inspect": ".uk-countdown, .uk-countdown > *" }, "description-list": { "name": "Description List", "groups": { "term": "@description-list-term-*", "description": "@description-list-description-*", "divider": "@description-list-divider-*" }, "hover": ".uk-description-list", "inspect": ".uk-description-list, .uk-description-list > dt, .uk-description-list > dd" }, "divider": { "name": "Divider", "groups": { "divider icon": "@divider-icon-*", "divider small": "@divider-small-*", "divider vertical": "@divider-vertical-*" }, "hover": ".uk-divider-icon, .uk-divider-small, .uk-divider-vertical", "inspect": ".uk-divider-icon, .uk-divider-small, .uk-divider-vertical" }, "dotnav": { "name": "Dotnav", "groups": { "item": "@dotnav-item-*" }, "hover": ".uk-dotnav", "inspect": ".uk-dotnav, .uk-dotnav > *, .uk-dotnav > * > *" }, "drop": { "name": "Drop", "groups": { "parent icon": "@drop-parent-icon-*" }, "hover": ".uk-drop", "inspect": ".uk-drop, .uk-drop > *, .uk-drop-grid, .uk-drop-grid > *" }, "dropdown": { "name": "Dropdown", "groups": { "large": "@dropdown-large-*", "nav": "@dropdown-nav-*", "nav item": "@dropdown-nav-item-*", "nav subtitle": "@dropdown-nav-subtitle-*", "nav header": "@dropdown-nav-header-*", "nav divider": "@dropdown-nav-divider-*", "nav sublist": "@dropdown-nav-sublist-*" }, "hover": ".uk-dropdown", "inspect": ".uk-dropdown, .uk-dropdown > *, .uk-dropdown-nav, .uk-dropdown-nav > *, .uk-dropdown-nav > * > *" }, "dropbar": { "name": "Dropbar", "groups": { "large": "@dropbar-large-*", "top": "@dropbar-top-*", "bottom": "@dropbar-bottom-*", "left": "@dropbar-left-*", "right": "@dropbar-right-*" }, "hover": ".uk-dropbar", "inspect": ".uk-dropbar, .uk-dropbar > *" }, "form": { "name": "Form", "groups": { "multi line": ["@form-multi-line-*", "@form-padding-vertical"], "danger": "@form-danger-*", "success": "@form-success-*", "blank": "@form-blank-*", "select": "@form-select-*", "range": "@form-range-*", "small": "@form-small-*", "large": "@form-large-*", "width": "@form-width-*", "radio": "@form-radio-*", "legend": "@form-legend-*", "label": "@form-label-*", "stacked": "@form-stacked-*", "horizontal": "@form-horizontal-*", "icon": "@form-icon-*" }, "hover": ".uk-input, .uk-select, .uk-textarea, .uk-range, .uk-radio, .uk-checkbox, .uk-legend, .uk-fieldset, [class*='uk-form']", "inspect": ".uk-input, .uk-select, .uk-textarea, .uk-range, .uk-radio, .uk-checkbox, .uk-legend, .uk-fieldset, [class*='uk-form'], [class*='uk-form'] > *" }, "grid": { "name": "Grid", "groups": { "small": "@grid-small-*", "medium": "@grid-medium-*", "large": "@grid-large-*", "divider": "@grid-divider-*" }, "hover": ".uk-grid", "inspect": ".uk-grid, .uk-grid > *, .uk-grid > * > *" }, "heading": { "name": "Heading", "groups": { "small": "@heading-small-*", "medium": "@heading-medium-*", "large": "@heading-large-*", "xlarge": "@heading-xlarge-*", "2xlarge": "@heading-2xlarge-*", "3xlarge": "@heading-3xlarge-*", "divider": "@heading-divider-*", "bullet": "@heading-bullet-*", "line": "@heading-line-*" }, "hover": ".uk-heading-small, .uk-heading-medium, .uk-heading-large, .uk-heading-xlarge, .uk-heading-2xlarge, .uk-heading-3xlarge, .uk-heading-divider, .uk-heading-bullet, .uk-heading-line", "inspect": ".uk-heading-small, .uk-heading-small > *, .uk-heading-medium, .uk-heading-medium > *, .uk-heading-large, .uk-heading-large > *, .uk-heading-xlarge, .uk-heading-xlarge > *, .uk-heading-2xlarge, .uk-heading-2xlarge > *, .uk-heading-3xlarge, .uk-heading-3xlarge > *, .uk-heading-divider, .uk-heading-divider > *, .uk-heading-bullet, .uk-heading-bullet > *, .uk-heading-line, .uk-heading-line > *" }, "height": { "name": "Height", "hover": ".uk-height-small, .uk-height-medium, .uk-height-large", "inspect": ".uk-height-small, .uk-height-small > *, .uk-height-medium, .uk-height-medium > *, .uk-height-large, .uk-height-large > *" }, "icon": { "name": "Icon", "groups": { "link": "@icon-link-*", "button": "@icon-button-*", "image": "@icon-image-*" }, "hover": ".uk-icon", "inspect": ".uk-icon, .uk-icon svg" }, "iconnav": { "name": "Iconnav", "groups": { "item": "@iconnav-item-*", "siblings": "@iconnav-siblings-*" }, "hover": ".uk-iconnav", "inspect": ".uk-iconnav, .uk-iconnav > *, .uk-iconnav > * > *, .uk-iconnav > * > * > *" }, "label": { "name": "Label", "groups": { "success": "@label-success-*", "warning": "@label-warning-*", "danger": "@label-danger-*" }, "hover": ".uk-label", "inspect": ".uk-label, .uk-label > *" }, "leader": { "name": "Leader", "hover": ".uk-leader", "inspect": ".uk-leader, .uk-leader > *" }, "lightbox": { "name": "Lightbox", "groups": { "item": "@lightbox-item-*", "thumbnav": "@lightbox-thumbnav-*", "caption": "@lightbox-caption-*" }, "hover": ".uk-lightbox", "inspect": ".uk-lightbox, .uk-lightbox > *, .uk-lightbox-item, .uk-lightbox-item > *" }, "link": { "name": "Link", "groups": { "muted": "@link-muted-*", "text": "@link-text-*", "heading": "@link-heading-*" }, "hover": ".uk-link-muted, .uk-link-text, .uk-link-heading, .uk-link-reset", "inspect": ".uk-link-muted, .uk-link-text, .uk-link-heading, .uk-link-reset" }, "list": { "name": "List", "groups": { "color": [ "@list-muted-color", "@list-emphasis-color", "@list-primary-color", "@list-secondary-color" ], "bullet": "@list-bullet-*", "divider": "@list-divider-*", "striped": "@list-striped-*", "large": "@list-large-*", "large divider": "@list-large-divider-*", "large striped": "@list-large-striped-*" }, "hover": ".uk-list", "inspect": ".uk-list, .uk-list > *, .uk-list > * > *" }, "margin": { "name": "Margin", "groups": { "small": "@margin-small-*", "medium": "@margin-medium-*", "large": "@margin-large-*", "xlarge": "@margin-xlarge-*" }, "hover": "[class*='uk-margin']", "inspect": "[class*='uk-margin'], [class*='uk-margin'] > *" }, "marker": { "name": "Marker", "hover": ".uk-marker", "inspect": ".uk-marker, .uk-marker svg" }, "modal": { "name": "Modal", "groups": { "dialog": "@modal-dialog-*", "container": "@modal-container-*", "body": "@modal-body-*", "header": "@modal-header-*", "footer": "@modal-footer-*", "title": "@modal-title-*", "close": "@modal-close-*", "close outside": "@modal-close-outside-*" }, "hover": ".uk-modal", "inspect": ".uk-modal, .uk-modal-dialog, .uk-modal-container, .uk-modal-body, .uk-modal-body > *, .uk-modal-header, .uk-modal-header > *, .uk-modal-footer, .uk-modal-footer > *, .uk-modal-title, .uk-modal-title > *, [class*='uk-modal-close-']" }, "nav": { "name": "Nav", "groups": { "item": "@nav-item-*", "sublist": "@nav-sublist-*", "parent icon": "@nav-parent-icon-*", "header": "@nav-header-*", "divider": "@nav-divider-*", "default": "@nav-default-*", "default item": "@nav-default-item-*", "default subtitle": "@nav-default-subtitle-*", "default header": "@nav-default-header-*", "default divider": "@nav-default-divider-*", "default sublist": "@nav-default-sublist-*", "default item line": "@nav-default-item-line-*", "default siblings": "@nav-default-siblings-*", "primary": "@nav-primary-*", "primary item": "@nav-primary-item-*", "primary subtitle": "@nav-primary-subtitle-*", "primary header": "@nav-primary-header-*", "primary divider": "@nav-primary-divider-*", "primary sublist": "@nav-primary-sublist-*", "primary item line": "@nav-primary-item-line-*", "primary siblings": "@nav-primary-siblings-*", "secondary": "@nav-secondary-*", "secondary item": "@nav-secondary-item-*", "secondary subtitle": "@nav-secondary-subtitle-*", "secondary header": "@nav-secondary-header-*", "secondary divider": "@nav-secondary-divider-*", "secondary sublist": "@nav-secondary-sublist-*", "dividers": "@nav-dividers-*" }, "hover": ".uk-nav", "inspect": ".uk-nav, .uk-nav > *, .uk-nav > * > *, .uk-nav-sub, .uk-nav-sub > *, .uk-nav-sub > * > *" }, "navbar": { "name": "Navbar", "groups": { "group": "@navbar-group-*", "nav": "@navbar-nav-*", "nav item": "@navbar-nav-item-*", "nav item line": [ "@navbar-nav-item-line-mode", "@navbar-nav-item-line-position-mode", "@navbar-nav-item-line-slide-mode", "@navbar-nav-item-line-*" ], "parent icon": "@navbar-parent-icon-*", "item": "@navbar-item-*", "toggle": "@navbar-toggle-*", "subtitle": "@navbar-subtitle-*", "primary": "@navbar-primary-*", "primary nav": "@navbar-primary-nav-*", "primary nav item": "@navbar-primary-nav-item-*", "primary item": "@navbar-primary-item-*", "primary toggle": "@navbar-primary-toggle-*", "sticky": "@navbar-sticky-*", "dropdown": "@navbar-dropdown-*", "dropdown large": "@navbar-dropdown-large-*", "dropdown dropbar": "@navbar-dropdown-dropbar-*", "dropdown dropbar large": "@navbar-dropdown-dropbar-large-*", "dropdown grid": "@navbar-dropdown-grid-*", "dropdown nav": "@navbar-dropdown-nav-*", "dropdown nav item": "@navbar-dropdown-nav-item-*", "dropdown nav subtitle": "@navbar-dropdown-nav-subtitle-*", "dropdown nav header": "@navbar-dropdown-nav-header-*", "dropdown nav divider": "@navbar-dropdown-nav-divider-*", "dropdown nav sublist": "@navbar-dropdown-nav-sublist-*", "dropbar": "@navbar-dropbar-*" }, "hover": ".uk-navbar-container", "inspect": ".uk-navbar-container, .uk-navbar, .uk-navbar-left, .uk-navbar-right, .uk-navbar-center, .uk-navbar-nav, .uk-navbar-nav > *, .uk-navbar-nav > * > *, .uk-navbar-item, .uk-navbar-item > *, .uk-navbar-toggle, .uk-navbar-toggle > *, .uk-navbar-subtitle, .uk-navbar-dropbar, .uk-navbar-dropdown, .uk-navbar-dropdown-nav, .uk-navbar-dropdown-nav > *, .uk-navbar-dropdown-nav > * > *, .uk-navbar-toggle-icon" }, "notification": { "name": "Notification", "groups": { "message": "@notification-message-*", "close": "@notification-close-*", "message primary": "@notification-message-primary-*", "message success": "@notification-message-success-*", "message warning": "@notification-message-warning-*", "message danger": "@notification-message-danger-*" }, "hover": ".uk-notification", "inspect": ".uk-notification, .uk-notification-message, .uk-notification-message > *, .uk-notification-close" }, "offcanvas": { "name": "Offcanvas", "groups": { "bar": "@offcanvas-bar-*", "close": "@offcanvas-close-*", "overlay": "@offcanvas-overlay-*" }, "hover": ".uk-offcanvas", "inspect": ".uk-offcanvas, .uk-offcanvas-overlay, .uk-offcanvas-bar, .uk-offcanvas-bar > *" }, "overlay": { "name": "Overlay", "groups": { "default": "@overlay-default-*", "primary": "@overlay-primary-*" }, "hover": ".uk-overlay", "inspect": ".uk-overlay, .uk-overlay > *, .uk-overlay-icon, .uk-overlay-icon svg" }, "padding": { "name": "Padding", "groups": { "small": "@padding-small-*", "large": "@padding-large-*" }, "hover": "[class*='uk-padding']", "inspect": "[class*='uk-padding'], [class*='uk-padding'] > *" }, "pagination": { "name": "Pagination", "groups": { "item": "@pagination-item-*", "item next previous": "@pagination-item-next-previous-*" }, "hover": ".uk-pagination", "inspect": ".uk-pagination, .uk-pagination > *, .uk-pagination > * > *, .uk-pagination-next, .uk-pagination-next svg, .uk-pagination-previous, .uk-pagination-previous svg" }, "placeholder": { "name": "Placeholder", "hover": ".uk-placeholder", "inspect": ".uk-placeholder, .uk-placeholder > *" }, "position": { "name": "Position", "hover": "[class*='uk-position']", "inspect": "[class*='uk-position'], [class*='uk-position'] > *" }, "progress": { "name": "Progress", "groups": { "bar": "@progress-bar-*" }, "hover": ".uk-progress", "inspect": ".uk-progress" }, "search": { "name": "Search", "groups": { "default": "@search-default-*", "navbar": "@search-navbar-*", "medium": "@search-medium-*", "large": "@search-large-*", "toggle": "@search-toggle-*" }, "hover": ".uk-search", "inspect": ".uk-search, .uk-search-input, .uk-search-toggle, .uk-search-icon, .uk-search-icon svg" }, "section": { "name": "Section", "groups": { "default": "@section-default-*", "muted": "@section-muted-*", "primary": "@section-primary-*", "secondary": "@section-secondary-*", "xsmall": "@section-xsmall-*", "small": "@section-small-*", "large": "@section-large-*", "xlarge": "@section-xlarge-*" }, "hover": ".uk-section", "inspect": ".uk-section, .uk-section > *" }, "slidenav": { "name": "Slidenav", "groups": { "large": "@slidenav-large-*" }, "hover": ".uk-slidenav", "inspect": ".uk-slidenav, .uk-slidenav svg" }, "sortable": { "name": "Sortable", "hover": ".uk-sortable", "inspect": ".uk-sortable, .uk-sortable > *, .uk-sortable > * > *, .uk-sortable-drag, .uk-sortable-drag > *, .uk-sortable-placeholder, .uk-sortable-placeholder > *, .uk-sortable-empty, .uk-sortable-empty > *" }, "spinner": { "name": "Spinner", "hover": ".uk-spinner", "inspect": ".uk-spinner, .uk-spinner svg" }, "sticky": { "name": "Sticky", "hover": "[uk-sticky]", "inspect": "[uk-sticky], [uk-sticky] > *" }, "subnav": { "name": "Subnav", "groups": { "item": "@subnav-item-*", "divider": "@subnav-divider-*", "siblings": "@subnav-siblings-*", "pill": "@subnav-pill-*", "pill item": "@subnav-pill-item-*" }, "hover": ".uk-subnav", "inspect": ".uk-subnav, .uk-subnav > *, .uk-subnav > * > *" }, "tab": { "name": "Tab", "groups": { "item": "@tab-item-*", "item line": "@tab-item-line-(?!height)*", "vertical": "@tab-vertical-*", "vertical item": "@tab-vertical-item-*" }, "hover": ".uk-tab", "inspect": ".uk-tab, .uk-tab > *, .uk-tab > * > *" }, "table": { "name": "Table", "groups": { "cell": "@table-cell-*", "header cell": "@table-header-cell-*", "footer": "@table-footer-*", "caption": "@table-caption-*", "row": "@table-row-*", "divider": "@table-divider-*", "striped": "@table-striped-*", "hover": "@table-hover-*", "small": "@table-small-*", "large": "@table-large-*", "expand": "@table-expand-*" }, "hover": ".uk-table", "inspect": ".uk-table, .uk-table th, .uk-table th > *, .uk-table td, .uk-table td > *, .uk-table tr, .uk-table tbody, .uk-table thead, .uk-table tfoot, .uk-table caption" }, "text": { "name": "Text", "groups": { "lead": "@text-lead-*", "meta": "@text-meta-*", "small": "@text-small-*", "large": "@text-large-*" }, "hover": "[class*='uk-text-']", "inspect": "[class*='uk-text-'], [class*='uk-text-'] > *" }, "thumbnav": { "name": "Thumbnav", "groups": { "item": "@thumbnav-item-*", "siblings": "@thumbnav-siblings-*" }, "hover": ".uk-thumbnav", "inspect": ".uk-thumbnav, .uk-thumbnav > *, .uk-thumbnav > * > *, .uk-thumbnav > * > * > *" }, "tile": { "name": "Tile", "groups": { "default": "@tile-default-*", "muted": "@tile-muted-*", "primary": "@tile-primary-*", "secondary": "@tile-secondary-*", "xsmall": "@tile-xsmall-*", "small": "@tile-small-*", "large": "@tile-large-*", "xlarge": "@tile-xlarge-*" }, "hover": ".uk-tile", "inspect": ".uk-tile, .uk-tile > *" }, "tooltip": { "name": "Tooltip", "hover": ".uk-tooltip", "inspect": ".uk-tooltip" }, "totop": { "name": "Totop", "hover": ".uk-totop", "inspect": ".uk-totop, .uk-totop svg" }, "transition": { "name": "Transition", "groups": { "slide": "@transition-slide-*" }, "hover": "[class*='uk-transition-']", "inspect": "[class*='uk-transition-'], [class*='uk-transition-'] > *" }, "utility": { "name": "Utility", "groups": { "panel scrollable": "@panel-scrollable-*", "border rounded": "@border-rounded-*", "box shadow": "@box-shadow-*", "box shadow bottom": "@box-shadow-bottom-*", "dropcap": "@dropcap-*", "logo": "@logo-*", "dragover": "@dragover-*" }, "hover": ".uk-panel-scrollable, .uk-box-shadow-bottom, .uk-dropcap, .uk-logo", "inspect": ".uk-panel-scrollable, .uk-panel-scrollable > *, .uk-box-shadow-bottom, .uk-dropcap, .uk-logo, .uk-logo > *" }, "width": { "name": "Width", "hover": ".uk-width-small, .uk-width-medium, .uk-width-large, .uk-width-xlarge, .uk-width-2xlarge", "inspect": ".uk-width-small, .uk-width-small > *, .uk-width-medium, .uk-width-medium > *, .uk-width-large, .uk-width-large > *, .uk-width-xlarge, .uk-width-xlarge > *, .uk-width-2xlarge, .uk-width-2xlarge > *" } }, "types": [ { "type": "color", "vars": [ "*-color", "*-border", "*-border-top", "*-border-bottom", "*-border-left", "*-border-right", "*-background", "*-outline" ], "allowEmpty": false }, { "type": "boxshadow", "vars": "*-box-shadow", "allowEmpty": false }, { "type": "textshadow", "vars": "*-text-shadow", "allowEmpty": false }, { "type": "select-custom", "vars": "*-border-style", "options": { "Solid": "solid", "Dashed": "dashed", "Dotted": "dotted", "None": "none" }, "attrs": { "class": "yo-style-form" } }, { "type": "font", "vars": "*-font-family", "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-font-weight", "options": { "Normal": "normal", "Bold": "bold", "Lighter": "lighter", "Bolder": "bolder", "100 (Thin)": "100", "200 (Extra Light)": "200", "300 (Light)": "300", "400 (Normal)": "400", "500 (Medium)": "500", "600 (Semi Bold)": "600", "700 (Bold)": "700", "800 (Extra Bold)": "800", "900 (Black)": "900", "Inherit": "inherit" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-font-style", "options": { "Normal": "normal", "Italic": "italic", "Inherit": "inherit" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-text-align", "options": { "Left": "left", "Right": "right", "Center": "center", "Justify": "justify", "Inherit": "inherit" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-vertical-align", "options": { "Baseline": "baseline", "Sub": "sub", "Super": "super", "Text-top": "text-top", "Text-bottom": "text-bottom", "Middle": "middle", "Top": "top", "Bottom": "bottom", "Inherit": "inherit" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-text-transform", "options": { "None": "none", "Lowercase": "lowercase", "Uppercase": "uppercase", "Capitalize": "capitalize", "Inherit": "inherit" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-text-decoration", "options": { "None": "none", "Underline": "underline", "Inherit": "inherit" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-blend-mode", "options": { "None": "", "Normal": "normal", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color Dodge": "color-dodge", "Color Burn": "color-burn", "Hard Light": "hard-light", "Soft Light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity", "Plus Darker": "plus-darker", "Plus Lighter": "plus-lighter" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-color-mode", "options": { "Light": "light", "Dark": "dark" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-border-mode", "options": { "Full": "", "Top": "-top", "Bottom": "-bottom", "Left": "-left", "Right": "-right" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-position-mode", "options": { "Top": "top", "Bottom": "bottom" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-direction-mode", "options": { "Inside": "inside", "Outside": "outside" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*button-text-mode", "options": { "None": "", "Line": "line", "Border Bottom": "border-bottom" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*button-text-icon-mode", "options": { "None": "", "Arrow": "arrow", "Em Dash": "em-dash" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": ["*nav-default-item-mode", "*nav-primary-item-mode", "*tab-item-mode"], "options": { "None": "", "Line": "line" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*navbar-mode", "options": { "None": "", "Border": "border", "Border (Including transparent navbar)": "border-always", "Rail": "rail", "Frame": "frame" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*navbar-mode-border-vertical", "options": { "None": "", "Partial (Navs only)": "partial", "All (Navs and Items)": "all" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": ["*navbar-nav-item-line-mode", "*navbar-nav-item-line-active-mode"], "options": { "Enable": "true", "Disable": "false" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*navbar-nav-item-line-slide-mode", "options": { "None": "", "Left": "left", "Center": "center" }, "attrs": { "class": "yo-style-form" } }, { "type": "select-custom", "vars": "*-inverse-mode", "options": { "None": "", "Inverse": "inverse" }, "attrs": { "class": "yo-style-form" } }, { "type": "checkbox", "vars": ["*-em-dash"], "attrs": { "false-value": "false", "true-value": "true" } }, { "type": "text", "vars": "*", "attrs": { "class": "yo-style-form" } } ] } styler/config/theme.json000064400000000143151666572110011340 0ustar00{ "defaults": { "less": [], "custom_less": "", "style": "fuse" } } styler/bootstrap.php000064400000002147151666572110010632 0ustar00<?php namespace YOOtheme\Theme\Styler; use YOOtheme\Config; use YOOtheme\Path; return [ 'theme' => fn(Config $config) => $config->loadFile(__DIR__ . '/config/theme.json'), 'config' => [ StylerConfig::class => __DIR__ . '/config/styler.json', ], 'routes' => [ ['get', '/theme/styles', [StyleController::class, 'index']], ['get', '/theme/style', [StyleController::class, 'get']], ['post', '/theme/style', [StyleController::class, 'save']], ['get', '/styler/library', [LibraryController::class, 'index']], ['post', '/styler/library', [LibraryController::class, 'save']], ['delete', '/styler/library', [LibraryController::class, 'delete']], ], 'events' => [ 'customizer.init' => [Listener\LoadStylerData::class => '@handle'], 'styler.imports' => [Listener\LoadStylerImports::class => ['@handle', 10]], ], 'services' => [ StylerConfig::class => '', StyleFontLoader::class => [ 'arguments' => [ '$cache' => fn() => Path::get('~theme/fonts'), ], ], ], ]; styler/src/Styler.php000064400000010165151666572120010666 0ustar00<?php namespace YOOtheme\Theme\Styler; use YOOtheme\Config; use YOOtheme\File; use YOOtheme\Path; use YOOtheme\Url; class Styler { /** * @var Config */ protected $config; /** * Constructor. * * @param Config $config */ public function __construct(Config $config) { $this->config = $config; } /** * Gets theme styles. * * @return array */ public function getThemes() { $themes = []; $directories = join( ',', array_filter([ $this->config->get('theme.rootDir'), $this->config->get('theme.childDir'), ]), ); foreach (File::glob("{{$directories}}/less/theme.*.less") as $file) { $themes[] = $this->getTheme(substr(basename($file, '.less'), 6)); } return $themes; } public function getTheme($id) { $file = File::get("~theme/less/theme.{$id}.less"); if (!$file) { return; } return array_merge( [ 'id' => $id, 'file' => $file, 'name' => static::namify($id), ], static::getMeta($file), ); } public function resolveImports($file, $vars = []) { $importFile = $file; $extension = Path::extname($file); if (!file_exists($file)) { if ($extension || !file_exists($file = "{$file}.less")) { return []; } } $contents = @file_get_contents($file) ?: ''; if (!$extension || $extension === '.less') { $contents = preg_replace('/^\s*\/\/.*?$/m', '', $contents); $contents = preg_replace('/\/\*.*?\*\//s', '', $contents); $contents = preg_replace('/(^@[a-z0-9-]+:)\s+/m', '$1 ', $contents); $contents = preg_replace('/\n{2,}/', "\n", $contents); $contents = preg_replace('/^\n|\n$/', '', $contents); } $imports = [Path::normalize(Url::to($importFile)) => $contents]; if (preg_match_all('/^@import.*?([\'"])(.+?)\1;/m', $contents, $matches)) { $replacePairs = []; foreach ($vars as $name => $value) { $name = substr($name, 1); $replacePairs["@{{$name}}"] = $value; } foreach ($matches[2] as $path) { $imports += $this->resolveImports( Path::resolve(dirname($file), strtr($path, $replacePairs)), $vars, ); } } return $imports; } protected static function getMeta($file) { $meta = []; $style = false; $handle = fopen($file, 'r'); $content = str_replace("\r", "\n", fread($handle, 8192)); fclose($handle); // parse first comment if (!preg_match('/^\s*\/\*(?:(?!\*\/).|\n)+\*\//', $content, $matches)) { return $meta; } // parse all metadata if ( !preg_match_all( '/^[ \t\/*#@]*(name|style|background|color|type|preview):(.*)$/mi', $matches[0], $matches, ) ) { return $meta; } foreach ($matches[1] as $i => $key) { $key = strtolower(trim($key)); $value = trim($matches[2][$i]); if (!in_array($key, ['name', 'style', 'preview'])) { $value = array_map('ucwords', array_map('trim', explode(',', $value))); } if ($key === 'preview') { $value = Url::to(Path::resolve(dirname($file), $value)); } if (!$style && $key != 'style') { $meta[$key] = $value; } elseif ($key == 'style') { $style = $value; $meta['styles'][$style] = ['name' => static::namify($style)]; } else { $meta['styles'][$style][$key] = $value; } } return $meta; } protected static function namify($id) { return ucwords(str_replace('-', ' ', $id)); } } styler/src/StylerConfig.php000064400000001565151666572120012020 0ustar00<?php namespace YOOtheme\Theme\Styler; use YOOtheme\Config; use YOOtheme\ConfigObject; use YOOtheme\File; use YOOtheme\Path; use YOOtheme\Url; class StylerConfig extends ConfigObject { /** * Constructor. */ public function __construct(Config $config) { // check version in css file, if it needs to be updated $style = File::get("~theme/css/theme.{$config('theme.id')}.css"); $header = $style ? file_get_contents($style, false, null, 0, 34) : ''; $version = preg_match('/\sv([\w\d.\-]+)\s/', $header, $match) ? $match[1] : '1.0.0'; parent::__construct([ 'update' => $version !== $config('theme.version'), 'route' => 'theme/style', 'worker' => Url::to(Path::get('../app/worker.min.js', __DIR__), [ 'ver' => $config('theme.version'), ]), ]); } } styler/src/Listener/LoadStylerImports.php000064400000003773151666572120014640 0ustar00<?php namespace YOOtheme\Theme\Styler\Listener; use YOOtheme\Config; use YOOtheme\File; use YOOtheme\Path; use YOOtheme\Theme\Styler\Styler; use YOOtheme\Url; class LoadStylerImports { public Config $config; public Styler $styler; public function __construct(Config $config, Styler $styler) { $this->config = $config; $this->styler = $styler; } public function handle($imports, $themeId): array { // add general imports foreach ($this->config->get('theme.styles.imports', []) as $path) { foreach (File::glob($path) as $file) { $imports += $this->styler->resolveImports($file); } } // add theme imports if (!($theme = $this->styler->getTheme($themeId))) { return $imports; } // add svg images foreach ( File::glob("~theme/vendor/assets/uikit-themes/master-{$themeId}/images/*.svg") as $file ) { $imports += $this->styler->resolveImports($file); } $file = $theme['file']; $imports += $this->styler->resolveImports($file); // add theme style imports if (isset($theme['styles'])) { foreach (array_keys($theme['styles']) as $style) { $imports += $this->styler->resolveImports( $file, [ '@internal-style' => $style, ] + $this->config->get('theme.styles.vars', []), ); } } // add custom components foreach ($this->config->get('theme.styles.components', []) as $path) { foreach (File::glob($path) as $component) { $imports += $this->styler->resolveImports($component); $imports[Url::to($file)] .= sprintf( "\n@import \"%s\";", Path::relative(dirname($file), $component), ); } } return $imports; } } styler/src/Listener/LoadStylerData.php000064400000001202151666572120014035 0ustar00<?php namespace YOOtheme\Theme\Styler\Listener; use YOOtheme\Metadata; use YOOtheme\Theme\Styler\StylerConfig; class LoadStylerData { public Metadata $metadata; public StylerConfig $config; public function __construct(Metadata $metadata, StylerConfig $config) { $this->config = $config; $this->metadata = $metadata; } public function handle(): void { $this->metadata->set( 'script:styler-data', sprintf( 'window.yootheme ||= {}; var $styler = yootheme.styler = %s;', json_encode($this->config), ), ); } } styler/src/LibraryController.php000064400000001702151666572120013051 0ustar00<?php namespace YOOtheme\Theme\Styler; use YOOtheme\Http\Request; use YOOtheme\Http\Response; use YOOtheme\Storage; class LibraryController { public static function index(Request $request, Response $response, Storage $storage) { return $response->withJson((object) $storage('styler.library')); } public static function save(Request $request, Response $response, Storage $storage) { $id = $request->getParam('id'); $style = $request->getParam('style'); if ($id && $style) { $storage->set("styler.library.{$id}", $style); } return $response->withJson(['message' => 'success']); } public static function delete(Request $request, Response $response, Storage $storage) { $id = $request->getQueryParam('id'); if ($id) { $storage->del("styler.library.{$id}"); } return $response->withJson(['message' => 'success']); } } styler/src/StyleFontLoader.php000064400000015564151666572120012472 0ustar00<?php namespace YOOtheme\Theme\Styler; use YOOtheme\File; use YOOtheme\Http\Uri; use YOOtheme\HttpClientInterface; use YOOtheme\Path; class StyleFontLoader { public const VERSION = '2'; public const PREFIX = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 '; /** * @var string */ public $cache; /** * @var array */ public $formats; /** * @var HttpClientInterface */ public $client; /** * Constructor. * * @param HttpClientInterface $client * @param string $cache */ public function __construct(HttpClientInterface $client, $cache) { File::makeDir($cache, 0777, true); $formats = ['woff2' => self::PREFIX . 'Edge/17.17134']; $this->cache = $cache; $this->client = $client; $this->formats = $formats; } /** * Creates CSS markup. * * @param string $url * @param string $basePath * * @return string|void */ public function css($url, $basePath) { $date = date(DATE_W3C); $hash = hash('crc32b', join(',', [$url, $basePath, static::VERSION])); $file = "{$this->cache}/font-{$hash}.css"; // is already cached? if ( is_file($file) && filemtime($file) >= strtotime('-1 week') && is_string($data = file_get_contents($file)) ) { return preg_replace('/^\/\*.+?\*\/\s*/', '', $data); } // load font url $fonts = $this->load($url); $relative = fn($path) => Path::relative($basePath, $path); // relative font path foreach ($fonts as &$font) { $font['src'] = array_map($relative, $font['src']); } // generate fonts css $info = "/* {$url} generated on {$date} */\n"; $data = join(array_map([$this, 'cssFontFace'], $fonts)); // save file in cache if ($fonts && @file_put_contents($file, $info . $data)) { return $data; } } /** * Creates a single @font-face CSS markup. * * @param array $font * * @return string */ public function cssFontFace(array $font) { $output = '@font-face {'; foreach ($font as $name => $value) { if ($name == 'src') { $urls = []; foreach ($value as $format => $url) { $urls[] = "url({$url}) format('{$format}')"; } $value = join(', ', $urls); } $output .= "{$name}: {$value}; "; } return "$output}\n"; } /** * Loads fonts from url. * * @param string $url * * @return array[] */ public function load($url) { $fonts = []; foreach ($this->parseFontFamilies($url) as $url) { // load font formats based on user agents foreach ($this->formats as $userAgent) { $options = compact('userAgent'); $response = $this->client->get($url, $options); if ($result = $this->parseFonts($response->getBody())) { $fonts = array_replace_recursive($fonts, $result); } } } // load fonts and save them foreach ($fonts as &$font) { $font['src'] = array_map( fn($url) => $this->loadFont( $url, preg_replace('/[^a-z]/', '', strtolower($font['font-family'])), ), $font['src'], ); } return $fonts; } /** * Load font file from url. * * @param string $url * @param string $name * @param array $options * * @return string|void */ public function loadFont($url, $name, array $options = []) { $hash = hash('crc32b', $url); $type = pathinfo($url, PATHINFO_EXTENSION); $file = "{$this->cache}/{$name}-{$hash}.{$type}"; // is already cached? if (file_exists($file)) { return $file; } // load font from url $data = $this->client->get($url, $options); // save file in cache if (@file_put_contents($file, $data->getBody())) { return $file; } } /** * Parses font @import from source. * * @param string $source * * @return array */ public function parse($source) { return preg_match( '/@import\s+url\((https?:\/\/fonts\.googleapis\.com[^)]+)\)\s*;?/i', $source, $matches, ) ? $matches : []; } /** * Parses fonts url from source. * * @param string $source * * @return array */ public function parseFonts($source) { $fonts = []; foreach ($this->parseFontFaces($source) as $fontface) { $font = $src = []; foreach ($this->parseFontProperties($fontface) as $name => $value) { if ($name == 'src') { $src = $this->parseFontSrc($value); } else { $font[$name] = $value; } } if ($src) { $hash = hash('crc32b', json_encode($font)); $fonts[$hash] = array_merge($font, compact('src')); } } return $fonts; } /** * Parses font url from source. * * @param string $source * * @return array */ public function parseFontSrc($source) { return preg_match('/url\((https?:\/\/.+?)\)\s*format\(\'?(\w+)/', $source, $matches) ? [$matches[2] => $matches[1]] : []; } /** * Parses @font-face from source. * * @param string $source * * @return array */ public function parseFontFaces($source) { return preg_match_all('/@font-face\s*{\s*([^}]+)/', $source, $matches) ? $matches[1] : []; } /** * Parses properties from source. * * @param string $source * * @return array */ public function parseFontProperties($source) { return preg_match_all('/([\w-]+)\s*:\s*([^;]+)/', $source, $matches) ? array_combine($matches[1], $matches[2]) : []; } /** * Split url into separate urls, one per font family. * * @param string $url * * @return array */ protected function parseFontFamilies($url) { $uri = new Uri($url); $query = $uri->getQueryParams(); if (isset($query['family'])) { return array_map( fn($family) => (string) $uri->withQueryParams(compact('family') + $query), explode('|', $query['family']), ); } return [$url]; } } styler/src/StyleController.php000064400000006413151666572120012551 0ustar00<?php namespace YOOtheme\Theme\Styler; use YOOtheme\Config; use YOOtheme\Event; use YOOtheme\Http\Request; use YOOtheme\Http\Response; use YOOtheme\Path; use YOOtheme\Url; class StyleController { public static function index(Request $request, Response $response, Styler $styler) { return $response->withJson( array_map(function ($theme) { unset($theme['file']); return $theme; }, $styler->getThemes()), ); } public static function get(Request $request, Response $response, Config $config, Styler $styler) { $themeId = explode('::', $request->getQueryParam('id', ''))[0]; $theme = $styler->getTheme($themeId); if (!$theme) { $request->abort(404, "Theme {$themeId} not found"); } return $response->withJson([ 'id' => $themeId, 'filename' => Url::to($theme['file']), 'imports' => Event::emit('styler.imports|filter', [], $themeId), 'vars' => $config('theme.styles.vars'), 'desturl' => Url::to('~theme/css'), ]); } public static function save( Request $request, Response $response, Config $config, StyleFontLoader $font ) { $upload = $request->getUploadedFile('files'); // validate uploads $request ->abortIf(!$upload || $upload->getError(), 400, 'Invalid file upload.') ->abortIf( !($contents = (string) $upload->getStream()), 400, 'Unable to read contents file.', ) ->abortIf(!($contents = @base64_decode($contents)), 400, 'Base64 Decode failed.') ->abortIf( !($files = @json_decode($contents, true)), 400, 'Unable to decode JSON from temporary file.', ); foreach ($files as $file => $data) { $dir = Path::get('~theme/css'); $rtl = strpos($file, '.rtl') ? '.rtl' : ''; try { // save fonts for theme style if ($matches = $font->parse($data)) { [$import, $url] = $matches; if ($fonts = $font->css($url, $dir)) { $data = str_replace($import, $fonts, $data); } } } catch (\RuntimeException $e) { } $head = "/* YOOtheme Pro v{$config('theme.version')} compiled on " . date(DATE_W3C) . " */\n"; // save css for theme style if ( !file_put_contents( $file = "{$dir}/theme.{$config('theme.id')}{$rtl}.css", $head . $data, ) ) { $request->abort(500, sprintf('Unable to write file (%s).', $file)); } // save css for theme as default/fallback if ( $config('theme.default') && !file_put_contents($file = "{$dir}/theme{$rtl}.css", $head . $data) ) { $request->abort(500, sprintf('Unable to write file (%s).', $file)); } } return $response->withJson(['message' => 'success']); } } styler/tests/tab.html000064400000005106151666572120010701 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-panel uk-width-xlarge uk-margin-auto"> <ul uk-tab="animation: uk-animation-fade"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-disabled"><a>Disabled</a></li> </ul> <div class="uk-switcher uk-margin"> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div>Ut enim ad minim veniam, quis nostrud exercitation divlamco laboris nisi ut aliquip ex ea commodo consequat.</div> <div>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</div> <div>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> </div> <div class="uk-margin-large" uk-grid> <div class="uk-width-auto@m"> <ul class="uk-tab-left" uk-tab="connect: #component-tab-left; animation: uk-animation-fade"> <li><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-disabled"><a>Disabled</a></li> </ul> </div> <div class="uk-width-expand@m"> <div id="component-tab-left" class="uk-switcher"> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div>Ut enim ad minim veniam, quis nostrud exercitation divlamco laboris nisi ut aliquip ex ea commodo consequat.</div> <div>Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</div> <div>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</div> </div> </div> </div> </div> </div> </div> </div> styler/tests/margin.html000064400000016123151666572120011411 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <h2>Margin</h2> <div class="uk-grid-large uk-child-width-1-2@s" uk-grid> <div> <div class="uk-margin">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> <div class="uk-margin">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> </div> <div> <div class="uk-margin uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="uk-margin uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> <h2>Small</h2> <div class="uk-child-width-1-2@s" uk-grid> <div> <div class="uk-margin-small">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> <div class="uk-margin-small">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> </div> <div> <div class="uk-margin-small uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="uk-margin-small uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> <h2>Medium</h2> <div class="uk-child-width-1-2@s" uk-grid> <div> <div class="uk-margin-medium">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> <div class="uk-margin-medium">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> </div> <div> <div class="uk-margin-medium uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="uk-margin-medium uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> <h2>Large</h2> <div class="uk-child-width-1-2@s" uk-grid> <div> <div class="uk-margin-large">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> <div class="uk-margin-large">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> </div> <div> <div class="uk-margin-large uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="uk-margin-large uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> <h2>X-Large</h2> <div class="uk-child-width-1-2@s" uk-grid> <div> <div class="uk-margin-xlarge">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> <div class="uk-margin-xlarge">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.</div> </div> <div> <div class="uk-margin-xlarge uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> <div class="uk-margin-xlarge uk-card uk-card-body uk-card-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </div> </div> styler/tests/tooltip.html000064400000000706151666572120011626 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <div class="uk-tooltip uk-tooltip-top-center uk-display-inline-block uk-margin-remove uk-position-relative">Tooltip</div> <button class="uk-button uk-button-default uk-margin-left" uk-tooltip="title: Hello World">Hover</button> </div> </div> </div>styler/tests/utility.html000064400000011042151666572120011632 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <div uk-grid> <div class="uk-width-2-3@m"> <h3 class="uk-h5 uk-heading-divider uk-margin-medium">Dropcap</h3> <p class="uk-text-lead uk-dropcap">Dorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <p class="uk-dropcap uk-margin-large">Torem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <h3 class="uk-h5 uk-heading-divider uk-margin-large-top">Box-shadow</h3> <div class="uk-child-width-1-4@s uk-text-center" uk-grid> <div><div class="uk-box-shadow-small uk-padding">Small</div></div> <div><div class="uk-box-shadow-medium uk-padding">Medium</div></div> <div><div class="uk-box-shadow-large uk-padding">Large</div></div> <div><div class="uk-box-shadow-xlarge uk-padding">X-Large</div></div> </div> <h3 class="uk-h5 uk-heading-divider uk-margin-large-top">Box-shadow hover</h3> <div class="uk-child-width-1-4@s uk-text-center" uk-grid> <div><div class="uk-box-shadow-hover-small uk-padding">Hover Small</div></div> <div><div class="uk-box-shadow-small uk-box-shadow-hover-medium uk-padding">Hover Medium</div></div> <div><div class="uk-box-shadow-medium uk-box-shadow-hover-large uk-padding">Hover Large</div></div> <div><div class="uk-box-shadow-large uk-box-shadow-hover-xlarge uk-padding">Hover X-Large</div></div> </div> <h3 class="uk-h5 uk-heading-divider uk-margin-large-top">Box-shadow bottom</h3> <div class="uk-child-width-1-2@s"> <div class="uk-box-shadow-bottom"> <canvas class="uk-background-muted" width="1200" height="600"></canvas> </div> </div> </div> <div class="uk-width-1-3@m"> <h3 class="uk-h5 uk-heading-divider uk-margin-medium">Logo</h3> <p> <a class="uk-logo" href="#">Logo</a> </p> <h3 class="uk-h5 uk-heading-divider uk-margin-large-top">Panel scrollable</h3> <div class="uk-panel uk-panel-scrollable"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <h3 class="uk-h5 uk-heading-divider uk-margin-large-top">Border rounded</h3> <canvas class="uk-border-rounded uk-background-primary" width="1200" height="600"></canvas> <h3 class="uk-h5 uk-heading-divider uk-margin-large-top">Dragover</h3> <div class="uk-drag uk-dragover"> <canvas width="1200" height="600"></canvas> </div> </div> </div> </div> </div> styler/tests/link.html000064400000000774151666572120011076 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <ul class="uk-list"> <li><a href="#" class="uk-link-muted">Link Muted</a></li> <li><a href="#" class="uk-link-text">Link Text</a></li> <li class="uk-margin-top"><h3><a href="#" class="uk-link-heading">Link Heading</a></h3></li> </ul> </div> </div> </div> styler/tests/sortable.html000064400000002774151666572120011756 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <h3 class="uk-h5 uk-heading-divider">List 1</h3> <div class="uk-grid-match uk-child-width-1-2 uk-child-width-1-5@m uk-text-center" uk-sortable="handle: .uk-card; group: test" uk-grid> <div><div class="uk-card uk-card-default uk-card-body">Item 1</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 2</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 3</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 4</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 5</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 6</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 7</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 8</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 9</div></div> <div><div class="uk-card uk-card-default uk-card-body">Item 10</div></div> </div> <h3 class="uk-h5 uk-heading-divider">List 2</h3> <div class="uk-grid-match uk-child-width-1-2 uk-child-width-1-5@m uk-text-center" uk-sortable="group: test" uk-grid></div> </div> </div> </div>styler/tests/countdown.html000064400000003257151666572120012160 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <div class="uk-grid-small uk-child-width-auto uk-flex-inline" uk-grid js-countdown> <div> <div class="uk-countdown-number uk-countdown-days"></div> <div class="uk-countdown-label uk-margin-small uk-text-center">Days</div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-hours"></div> <div class="uk-countdown-label uk-margin-small uk-text-center">Hours</div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-minutes"></div> <div class="uk-countdown-label uk-margin-small uk-text-center">Minutes</div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-seconds"></div> <div class="uk-countdown-label uk-margin-small uk-text-center">Seconds</div> </div> </div> <script> (function () { const date = new Date(Date.now() + 864e5 * 7).toISOString(); for (const el of UIkit.util.$$('[js-countdown]')) { UIkit.countdown(el, {date: date}); } })(); </script> </div> </div> </div> styler/tests/article.html000064400000004707151666572120011564 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <article class="uk-article"> <h1 class="uk-article-title"><a class="uk-link-reset" href="">Heading</a></h1> <p class="uk-article-meta">Written by <a href="#">Super User</a> on 14 September 2016. Posted in <a href="#">Blog</a></p> <p class="uk-text-lead">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <div class="uk-grid-small" uk-grid> <div> <a class="uk-button uk-button-text" href="#">Read more</a> </div> <div> <a class="uk-button uk-button-text" href="#">6 Comments</a> </div> </div> </article> <article class="uk-article"> <h1 class="uk-article-title"><a class="uk-link-reset" href="">Heading</a></h1> <p class="uk-article-meta">Written by <a href="#">Super User</a> on 10 October 2016. Posted in <a href="#">Blog</a></p> <p class="uk-text-lead">Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <div class="uk-grid-small" uk-grid> <div> <a class="uk-button uk-button-text" href="#">Read more</a> </div> <div> <a class="uk-button uk-button-text" href="#">2 Comments</a> </div> </div> </article> </div> </div> </div>styler/tests/placeholder.html000064400000001210151666572120012405 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-placeholder uk-text-center"> <span class="uk-margin-small-right uk-text-muted" uk-icon="icon: cloud-upload"></span> <span class="uk-text-middle">Attach binaries by dropping them here or</span> <div uk-form-custom> <input type="file" multiple> <span class="uk-link">selecting one</span> </div> </div> </div> </div> </div>styler/tests/notification.html000064400000003247151666572120012625 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <p uk-margin> <button class="uk-button uk-button-default" type="button" onclick="UIkit.notification({pos: 'top-left', message: 'Message'})">Top Left</button> <button class="uk-button uk-button-default" type="button" onclick="UIkit.notification({pos: 'top-center', message: 'Message'})">Top Center</button> <button class="uk-button uk-button-default" type="button" onclick="UIkit.notification({pos: 'top-right', message: 'Message'})">Top Right</button> </p> <p class="uk-notification-message"> <a href="#" class="uk-notification-close" uk-close></a> Message </p> <p class="uk-notification-message uk-notification-message-primary"> <a href="#" class="uk-notification-close" uk-close></a> Primary message </p> <p class="uk-notification-message uk-notification-message-success"> <a href="#" class="uk-notification-close" uk-close></a> Success message </p> <p class="uk-notification-message uk-notification-message-warning"> <a href="#" class="uk-notification-close" uk-close></a> Warning message </p> <p class="uk-notification-message uk-notification-message-danger"> <a href="#" class="uk-notification-close" uk-close></a> Danger message </p> </div> </div> </div> styler/tests/base.html000064400000010472151666572120011047 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <div uk-grid> <div class="uk-width-2-3@s"> <h1>H1 heading<br> with additional text</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <h2>H2 heading<br> with additional text</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <h3>H3 heading<br> with additional text</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <h4>H4 heading<br> with additional text</h4> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> <h5>H5 heading<br> with additional text</h5> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> <h6>H6 heading<br> with additional text</h6> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> <hr> <blockquote cite="#"> <p class="uk-margin-small-bottom">The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element.</p> <footer>Someone famous in <cite><a href="">Source Title</a></cite></footer> </blockquote> <hr> <h3>Preformatted text with a code element</h3> <pre class="uk-pre"><code><html> <head> </head> <body> <div class="main"><div> </body> </html></code></pre> </div> <div class="uk-width-1-3@s"> <ul class="uk-list"> <li>The <a href="#">a element</a> example</li> <li>The <abbr>abbr element</abbr> and <abbr title="Title text">abbr element with title</abbr> examples</li> <li>The <b>b element</b> example</li> <li>The <cite>cite element</cite> example</li> <li>The <code>code element</code> example</li> <li>The <del>del element</del> example</li> <li>The <dfn>dfn element</dfn> and <dfn title="Title text">dfn element with title</dfn> examples</li> <li>The <em>em element</em> example</li> <li>The <i>i element</i> example</li> <li>The img element <canvas width="16" height="16" class="test-img-small"></canvas> example</li> <li>The <ins>ins element</ins> example</li> <li>The <kbd>kbd element</kbd> example</li> <li>The <mark>mark element</mark> example</li> <li>The <q>q element <q>inside</q> a q element</q> example</li> <li>The <s>s element</s> example</li> <li>The <samp>samp element</samp> example</li> <li>The <small>small element</small> example</li> <li>The <span>span element</span> example</li> <li>The <strong>strong element</strong> example</li> <li>The <sub>sub element</sub> example</li> <li>The <sup>sup element</sup> example</li> <li>The <u>u element</u> example</li> <li>The <var>var element</var> example</li> </ul> </div> </div> </div> </div> styler/tests/grid.html000064400000010054151666572120011056 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <h2>Default</h2> <div class="uk-child-width-1-1 uk-child-width-1-3@s uk-text-center" uk-grid> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> </div> <h2>Small</h2> <div class="uk-grid-small uk-child-width-1-1 uk-child-width-1-3@s uk-text-center" uk-grid> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> </div> <h2>Medium</h2> <div class="uk-grid-medium uk-child-width-1-1 uk-child-width-1-3@s uk-text-center" uk-grid> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> </div> <h2>Large</h2> <div class="uk-grid-large uk-child-width-1-1 uk-child-width-1-3@s uk-text-center" uk-grid> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> </div> <h2>Divider</h2> <h3 class="uk-h5">Default</h3> <div class="uk-grid-divider uk-child-width-1-1 uk-child-width-1-3@s uk-text-center" uk-grid> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> </div> <h3 class="uk-h5">Small</h3> <div class="uk-grid-small uk-grid-divider uk-child-width-1-1 uk-child-width-1-3@s uk-text-center" uk-grid> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> </div> <h3 class="uk-h5">Medium</h3> <div class="uk-grid-medium uk-grid-divider uk-child-width-1-1 uk-child-width-1-3@s uk-text-center" uk-grid> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> </div> <h3 class="uk-h5">Large</h3> <div class="uk-grid-large uk-grid-divider uk-child-width-1-1 uk-child-width-1-3@s uk-text-center" uk-grid> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> <div><div class="uk-padding uk-background-muted">Item</div></div> </div> </div> </div> styler/tests/lightbox.html000064400000005226151666572120011756 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <a id="js-lightbox-slidenav" class="uk-button uk-button-default" href>Open Slidenav</a> <a id="js-lightbox-thumbnav" class="uk-button uk-button-default" href>Open Thumbnav</a> <a id="js-lightbox-dotnav" class="uk-button uk-button-default" href>Open Dotnav</a> </div> </div> </div> <style> .uk-lightbox .uk-lightbox-items > * > img, .uk-lightbox .uk-lightbox-thumbnav > * > * > img { background-image: repeating-linear-gradient(-45deg, #f0f0f0, #f0f0f0 25px, #fcfcfc 25px, #fcfcfc 50px); } </style> <script> (function () { const source = (width, height) => `data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}"></svg>`; const items = [ { source: source(900, 600), thumb: source(900, 600), title: '900x600', type: 'image', caption: 'Lorem ipsum dolor sit amet', attrs: {class: 'uk-inverse-dark'}, }, { source: source(1800, 1200), thumb: source(1800, 1200), title: '700x500', type: 'image', caption: 'Lorem ipsum dolor sit amet', attrs: {class: 'uk-inverse-dark'}, }, { source: source(1000, 2000), thumb: source(1000, 2000), title: '700x500', type: 'image', caption: 'Lorem ipsum dolor sit amet', attrs: {class: 'uk-inverse-dark'}, }, { source: source(2000, 500), thumb: source(2000, 500), title: '700x500', type: 'image', caption: 'Lorem ipsum dolor sit amet', attrs: {class: 'uk-inverse-dark'}, }, ]; UIkit.util.on('#js-lightbox-slidenav', 'click', function (e) { e.preventDefault(); UIkit.lightboxPanel({ items, counter: true }).show(); }); UIkit.util.on('#js-lightbox-thumbnav', 'click', function (e) { e.preventDefault(); UIkit.lightboxPanel({ items, slidenav: false, nav: 'thumbnav', counter: true }).show(); }); UIkit.util.on('#js-lightbox-dotnav', 'click', function (e) { e.preventDefault(); UIkit.lightboxPanel({ items, slidenav: false, nav: 'dotnav', counter: true }).show(); }); })(); </script> styler/tests/table.html000064400000013573151666572120011231 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container uk-container-small"> <h2>Divider</h2> <div class="uk-overflow-auto"> <table class="uk-table uk-table-divider uk-table-hover"> <thead> <tr> <th class="uk-table-expand">Expand</th> <th>Table Heading</th> <th>Table Heading</th> <th>Table Heading</th> </tr> </thead> <tfoot> <tr> <td>Table Footer</td> <td>Table Footer</td> <td>Table Footer</td> <td>Table Footer</td> </tr> </tfoot> <tbody> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr class="uk-active"> <td>Active Row</td> <td>Active Row</td> <td>Active Row</td> <td>Active Row</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> </tbody> </table> </div> <h2>Striped</h2> <div class="uk-overflow-auto"> <table class="uk-table uk-table-hover uk-table-striped"> <thead> <tr> <th class="uk-table-expand">Expand</th> <th>Table Heading</th> <th>Table Heading</th> <th>Table Heading</th> </tr> </thead> <tfoot> <tr> <td>Table Footer</td> <td>Table Footer</td> <td>Table Footer</td> <td>Table Footer</td> </tr> </tfoot> <tbody> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr class="uk-active"> <td>Active Row</td> <td>Active Row</td> <td>Active Row</td> <td>Active Row</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> </tbody> </table> </div> <h2>Small</h2> <div class="uk-overflow-auto"> <table class="uk-table uk-table-divider uk-table-hover uk-table-small"> <thead> <tr> <th class="uk-table-expand">Expand</th> <th>Table Heading</th> <th>Table Heading</th> <th>Table Heading</th> </tr> </thead> <tfoot> <tr> <td>Table Footer</td> <td>Table Footer</td> <td>Table Footer</td> <td>Table Footer</td> </tr> </tfoot> <tbody> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr class="uk-active"> <td>Active Row</td> <td>Active Row</td> <td>Active Row</td> <td>Active Row</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> </tbody> </table> </div> </div> </div>styler/tests/thumbnav.html000064400000002526151666572120011762 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-2@s" uk-grid> <div> <h2 class="uk-h5 uk-heading-divider">Horizontal</h2> <ul class="uk-thumbnav"> <li class="uk-active"><a href="#"><canvas width="100" height="70" class="test-img"></canvas></a></li> <li><a href="#"><canvas width="100" height="70" class="test-img"></canvas></a></li> <li><a href="#"><canvas width="100" height="70" class="test-img"></canvas></a></li> </ul> </div> <div> <h2 class="uk-h5 uk-heading-divider">Vertical</h2> <ul class="uk-thumbnav uk-thumbnav-vertical"> <li class="uk-active"><a href="#"><canvas width="100" height="70" class="test-img"></canvas></a></li> <li><a href="#"><canvas width="100" height="70" class="test-img"></canvas></a></li> <li><a href="#"><canvas width="100" height="70" class="test-img"></canvas></a></li> </ul> </div> </div> </div> </div> </div>styler/tests/card.html000064400000031247151666572120011051 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container uk-container-small"> <h2 class="uk-h5 uk-heading-divider uk-margin-large-bottom">Styles</h2> <div class="uk-child-width-1-2@m uk-grid-match" uk-grid> <div> <div class="uk-card uk-card-default uk-card-hover"> <div class="uk-card-badge">Hot</div> <div class="uk-card-body"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p uk-margin> <a class="uk-button uk-button-default" href="#">Button</a> <a class="uk-button uk-button-primary" href="#">Button</a> </p> </div> </div> </div> <div> <div class="uk-card uk-card-primary uk-card-hover"> <div class="uk-card-badge">Hot</div> <div class="uk-card-body"> <h3 class="uk-card-title">Primary</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p uk-margin> <a class="uk-button uk-button-default" href="#">Button</a> <a class="uk-button uk-button-primary" href="#">Button</a> </p> </div> </div> </div> <div> <div class="uk-card uk-card-secondary uk-card-hover"> <div class="uk-card-badge">Hot</div> <div class="uk-card-body"> <h3 class="uk-card-title">Secondary</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p uk-margin> <a class="uk-button uk-button-default" href="#">Button</a> <a class="uk-button uk-button-primary" href="#">Button</a> </p> </div> </div> </div> <div> <div class="uk-card uk-card-hover"> <div class="uk-card-badge">Hot</div> <div class="uk-card-body"> <h3 class="uk-card-title">Hover</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p uk-margin> <a class="uk-button uk-button-default" href="#">Button</a> <a class="uk-button uk-button-primary" href="#">Button</a> </p> </div> </div> </div> </div> <h2 class="uk-h5 uk-heading-divider uk-margin-large-top">Header and Footer</h2> <div class="uk-child-width-1-2@m" uk-grid> <div> <div class="uk-card uk-card-default"> <div class="uk-card-header"> <div class="uk-grid-small uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas width="40" height="40" class="test-img-small uk-border-circle"></canvas> </div> <div class="uk-width-expand"> <h3 class="uk-card-title uk-margin-remove-bottom">Title</h3> <p class="uk-text-meta uk-margin-remove-top"><time datetime="2016-04-01T19:00">April 01, 2016</time></p> </div> </div> </div> <div class="uk-card-media"> <canvas width="800" height="400" class="test-img"></canvas> </div> <div class="uk-card-body"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</p> </div> <div class="uk-card-footer"> <a href="#" class="uk-button uk-button-text">Read more</a> </div> </div> </div> <div> <div class="uk-card uk-card-default"> <div class="uk-card-header"> <div class="uk-grid-small uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas width="40" height="40" class="test-img-small uk-border-circle"></canvas> </div> <div class="uk-width-expand"> <h3 class="uk-card-title uk-margin-remove-bottom">Title</h3> <p class="uk-text-meta uk-margin-remove-top"><time datetime="2016-04-01T19:00">April 01, 2016</time></p> </div> </div> </div> <div class="uk-card-body"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-card-footer"> <a href="#" class="uk-button uk-button-text">Read more</a> </div> </div> </div> </div> <h2 class="uk-h5 uk-heading-divider uk-margin-large-top">Small</h2> <div class="uk-child-width-1-2@m" uk-grid> <div> <div class="uk-card uk-card-default uk-card-small"> <div class="uk-card-header"> <h3 class="uk-card-title uk-margin-remove-bottom">Title</h3> </div> <div class="uk-card-media"> <canvas width="800" height="400" class="test-img"></canvas> </div> <div class="uk-card-body"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</p> </div> <div class="uk-card-footer"> <p class="uk-text-meta"><time datetime="2016-04-01T19:00">April 01, 2016</time>.</p> </div> </div> </div> <div> <div class="uk-card uk-card-default uk-card-small"> <div class="uk-card-header"> <h3 class="uk-card-title uk-margin-remove-bottom">Title</h3> </div> <div class="uk-card-body"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-card-footer"> <p class="uk-text-meta"><time datetime="2016-04-01T19:00">April 01, 2016</time>.</p> </div> </div> </div> </div> <h2 class="uk-h5 uk-heading-divider uk-margin-large-top">Large</h2> <div class="uk-child-width-1-2@m" uk-grid> <div> <div class="uk-card uk-card-default uk-card-large"> <div class="uk-card-header"> <h3 class="uk-card-title uk-margin-remove-bottom">Title</h3> </div> <div class="uk-card-media"> <canvas width="800" height="400" class="test-img"></canvas> </div> <div class="uk-card-body"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</p> </div> <div class="uk-card-footer"> <p class="uk-text-meta"><time datetime="2016-04-01T19:00">April 01, 2016</time>.</p> </div> </div> </div> <div> <div class="uk-card uk-card-default uk-card-large"> <div class="uk-card-header"> <h3 class="uk-card-title uk-margin-remove-bottom">Title</h3> </div> <div class="uk-card-body"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-card-footer"> <p class="uk-text-meta"><time datetime="2016-04-01T19:00">April 01, 2016</time>.</p> </div> </div> </div> </div> </div> </div> <div class="uk-section uk-section-muted"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-3@m uk-grid-match" uk-grid> <div> <div class="uk-card uk-card-default uk-card-hover uk-card-body"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-primary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Primary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-secondary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Secondary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> </div> </div> </div> <div class="uk-section uk-section-primary uk-preserve-color"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-3@m uk-grid-match" uk-grid> <div> <div class="uk-card uk-card-default uk-card-hover uk-card-body"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-primary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Primary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-secondary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Secondary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> </div> </div> </div> <div class="uk-section uk-section-secondary uk-preserve-color"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-3@m uk-grid-match" uk-grid> <div> <div class="uk-card uk-card-default uk-card-hover uk-card-body"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-primary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Primary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-secondary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Secondary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> </div> </div> </div>styler/tests/preview.html000064400000000551151666572120011613 0ustar00<html> <head> <link href="/packages/styler/tests/tests.css" rel="stylesheet" /> <link href="/.storybook/site.css" rel="stylesheet" /> <script src="/vendor/assets/uikit/dist/js/uikit.js"></script> <script src="/vendor/assets/uikit/dist/js/uikit-icons.js"></script> </head> <body> %content% </body> </html> styler/tests/slidenav.html000064400000003230151666572120011734 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-grid-large uk-child-width-1-1 uk-child-width-1-2@s" uk-grid> <div> <h2>Default</h2> <div class="uk-inline"> <canvas width="1200" height="600" class="test-img"></canvas> <a class="uk-position-small uk-position-center-left" href="#" uk-slidenav-previous></a> <a class="uk-position-small uk-position-center-right" href="#" uk-slidenav-next></a> </div> <div class="uk-margin"> <a chref="#" uk-slidenav-previous></a> <a href="#" uk-slidenav-next></a> </div> </div> <div> <h2>Large</h2> <div class="uk-inline"> <canvas width="1200" height="600" class="test-img"></canvas> <a class="uk-slidenav-large uk-position-small uk-position-center-left" href="#" uk-slidenav-previous></a> <a class="uk-slidenav-large uk-position-small uk-position-center-right" href="#" uk-slidenav-next></a> </div> <div class="uk-margin"> <a class="uk-slidenav-large" href="#" uk-slidenav-previous></a> <a class="uk-slidenav-large" href="#" uk-slidenav-next></a> </div> </div> </div> </div> </div> </div>styler/tests/drop.html000064400000001103151666572120011070 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <button class="uk-button uk-button-default" type="button">Hover</button> <div class="uk-open" uk-drop="pos: bottom-center"> <div class="uk-card uk-card-body uk-card-default uk-text-center">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </div> </div>styler/tests/background.html000064400000001727151666572120012257 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-child-width-1-4@m uk-text-center" uk-grid> <div> <div class="uk-background-default uk-height-medium"></div> <h2 class="uk-h5">Default</h2> </div> <div> <div class="uk-background-muted uk-height-medium"></div> <h2 class="uk-h5">Muted</h2> </div> <div> <div class="uk-background-primary uk-height-medium"></div> <h2 class="uk-h5">Primary</h2> </div> <div> <div class="uk-background-secondary uk-height-medium"></div> <h2 class="uk-h5">Secondary</h2> </div> </div> </div> </div> </div>styler/tests/text.html000064400000004543151666572120011123 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-grid-large" uk-grid> <div class="uk-width-expand@m"> <h1>Lead and Meta</h1> <p class="uk-text-lead">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <p class="uk-text-meta">Written by <a href="#">Super User</a> on <time datetime="2016-04-01T19:00">01 April 2016</time>.<br>Posted in <a href="#">Blog</a></p> <h1>Large and Small</h1> <p class="uk-text-large">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> <p class="uk-text-small">Written by <a href="#">Super User</a> on <time datetime="2016-04-01T19:00">01 April 2016</time>.<br>Posted in <a href="#">Blog</a></p> </div> <div class="uk-width-auto@m"> <h3>Colors</h3> <ul class="uk-list"> <li class="uk-text-muted">text-muted</li> <li class="uk-text-emphasis">text-emphasis</li> <li class="uk-text-primary">text-primary</li> <li class="uk-text-secondary">text-secondary</li> <li class="uk-text-success">text-success</li> <li class="uk-text-warning">text-warning</li> <li class="uk-text-danger">text-danger</li> <li class="uk-text-background">text-background</li> </ul> </div> </div> </div> </div> </div>styler/tests/nav.html000064400000024276151666572120010730 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <div class="uk-child-width-1-3@s uk-grid-large" uk-grid> <div> <h2>Default</h2> <ul class="uk-nav-default uk-nav-accordion" uk-nav="multiple: true"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent uk-open"> <a href="#">Parent <span uk-nav-parent-icon></span></a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent uk-open"> <a href="#">Parent <span uk-nav-parent-icon></span></a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <h2>Primary</h2> <ul class="uk-nav-primary uk-nav-accordion" uk-nav="multiple: true"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent uk-open"> <a href="#">Parent <span uk-nav-parent-icon></span></a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent uk-open"> <a href="#">Parent <span uk-nav-parent-icon></span></a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <h2>Secondary</h2> <ul class="uk-nav uk-nav-secondary"> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet.</div></div></a></li> <li class="uk-parent"> <a href="#"><div>Parent<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet.</div></div></a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#"><div>Parent<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet.</div></div></a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"> <span class="uk-margin-small-right uk-preserve-width" uk-icon="icon: table; ratio: 1"></span> <div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet.</div></div> </a></li> <li><a href="#"> <span class="uk-margin-small-right uk-preserve-width" uk-icon="icon: thumbnails; ratio: 1"></span> <div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet.</div></div> </a></li> <li class="uk-nav-divider"></li> <li><a href="#"> <span class="uk-margin-small-right uk-preserve-width" uk-icon="icon: trash; ratio: 1"></span> <div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet.</div></div> </a></li> </ul> </div> </div> <h2>With Subtitle</h2> <div class="uk-child-width-1-3@s uk-grid-large" uk-grid> <div> <ul class="uk-nav-default" uk-nav> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore.</div></div></a></li> </ul> </div> <div> <ul class="uk-nav-primary" uk-nav> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> </ul> </div> <div> <ul class="uk-nav-secondary" uk-nav> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</div></div></a></li> </ul> </div> </div> <h2>With Dividers</h2> <div class="uk-child-width-1-3@s uk-grid-large" uk-grid> <div> <ul class="uk-nav-default uk-nav-divider" uk-nav="multiple: true"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> </div> <div> <ul class="uk-nav-primary uk-nav-divider" uk-nav="multiple: true"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> </div> <div> <ul class="uk-nav-secondary uk-nav-divider" uk-nav> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt.</div></div></a></li> </ul> </div> </div> </div> </div>styler/tests/totop.html000064400000000357151666572120011303 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <a href="#" uk-totop></a> </div> </div> </div>styler/tests/section.html000064400000017410151666572120011600 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <h1 class="uk-h2">Default</h1> <div class="uk-grid-match uk-child-width-1-3@m" uk-grid> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div> </div> <div class="uk-section uk-section-muted"> <div class="uk-container"> <h1 class="uk-h2">Muted</h1> <div class="uk-grid-match uk-child-width-1-3@m" uk-grid> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div> </div> <div class="uk-section uk-section-primary"> <div class="uk-container"> <h1 class="uk-h2">Primary</h1> <div class="uk-grid-match uk-child-width-1-3@m" uk-grid> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div> </div> <div class="uk-section uk-section-secondary"> <div class="uk-container"> <h1 class="uk-h2">Secondary</h1> <div class="uk-grid-match uk-child-width-1-3@m" uk-grid> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div> </div> <div class="uk-section uk-section-default uk-section-xsmall"> <div class="uk-container"> <p>X-Small Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div class="uk-section uk-section-muted uk-section-small"> <div class="uk-container"> <h1 class="uk-h2">Small</h1> <div class="uk-grid-match uk-child-width-1-3@m" uk-grid> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div> </div> <div class="uk-section uk-section-primary uk-section-large"> <div class="uk-container"> <h1 class="uk-h2">Large</h1> <div class="uk-grid-match uk-child-width-1-3@m" uk-grid> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div> </div> <div class="uk-section uk-section-secondary uk-section-xlarge"> <div class="uk-container"> <h1 class="uk-h2">X-Large</h1> <div class="uk-grid-match uk-child-width-1-3@m" uk-grid> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> </div> </div>styler/tests/navbar.html000064400000137623151666572120011416 0ustar00<style> .test { display: block; position: relative; z-index: 1; width: 100%; margin-left: 0; } </style> <div> <div uk-sticky="show-on-up: true; animation: uk-animation-slide-top; sel-target: .uk-navbar-container; cls-active: uk-navbar-sticky; bottom: #dropdown"> <nav class="uk-navbar-container"> <div class="uk-container"> <div uk-navbar> <div class="uk-navbar-left"> <a class="uk-navbar-item uk-logo" href="#">Dropdown</a> <ul class="uk-navbar-nav"> <li class="uk-active"> <a href="">Active <span uk-navbar-parent-icon></span></a> <div class="uk-navbar-dropdown"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </li> <li> <a href="#">2 Columns <span uk-navbar-parent-icon></span></a> <div class="uk-navbar-dropdown uk-navbar-dropdown-width-2"> <div class="uk-drop-grid uk-child-width-1-2" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"><a href="#">Parent</a></li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"><a href="#">Parent</a></li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> </div> </li> <li> <a href="#"><span class="uk-margin-small-right" uk-icon="icon: home"></span> Stretch <span uk-navbar-parent-icon></span></a> <div class="uk-navbar-dropdown uk-navbar-dropdown-large" uk-drop="cls-drop: uk-navbar-dropdown; boundary: !.uk-navbar; stretch: x; flip: false"> <div class="uk-drop-grid uk-child-width-1-3@m" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </li> <li><a href="#"> <div> Item <div class="uk-navbar-subtitle">Subtitle</div> </div> </a></li> </ul> <div class="uk-navbar-item"> <div>Some <a href="#">Link</a></div> </div> </div> <div class="uk-navbar-right"> <a class="uk-navbar-toggle uk-navbar-toggle-animate" href="#"> <span class="uk-margin-small-right">Menu</span> <span uk-navbar-toggle-icon></span> </a> <div class="uk-navbar-dropdown uk-navbar-dropdown-large" uk-drop="cls-drop: uk-navbar-dropdown; boundary: !.uk-navbar; stretch: x; flip: false"> <div class="uk-drop-grid uk-child-width-1-3@m" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </div> </div> </div> </nav> </div> </div> <div class="uk-section uk-section-default"> <div id="dropdown" class="uk-container"> <h3 class="uk-h4">Dropdown and Dropbar</h3> <div uk-grid> <div class="uk-width-1-3@m"> <div class="uk-drop uk-navbar-dropdown test"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> <div class="uk-width-1-3@m"> <div class="uk-drop uk-navbar-dropdown test"> <ul class="uk-nav uk-nav-secondary"> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> </ul> </div> </div> <div class="uk-width-1-3@m"> <div class="uk-drop uk-dropbar uk-dropbar-top uk-navbar-dropbar test"> <div class="uk-drop uk-navbar-dropdown uk-navbar-dropdown-dropbar test"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> </div> </div> </div> </div> <div> <div uk-sticky="show-on-up: true; animation: uk-animation-slide-top; sel-target: .uk-navbar-container; cls-active: uk-navbar-sticky; bottom: #dropbar"> <nav class="uk-navbar-container"> <div class="uk-container"> <div uk-navbar="target-y: !.uk-navbar-container; dropbar: true; dropbar-anchor: !.uk-navbar-container"> <div class="uk-navbar-left"> <a class="uk-navbar-item uk-logo" href="#">Dropbar</a> <ul class="uk-navbar-nav"> <li class="uk-active"> <a href="">Active</a> <div class="uk-navbar-dropdown"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </li> <li> <a href="#">2 Columns</a> <div class="uk-navbar-dropdown uk-navbar-dropdown-width-2"> <div class="uk-drop-grid uk-child-width-1-2" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"><a href="#">Parent</a></li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"><a href="#">Parent</a></li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> </div> </li> <li> <a href="#"><span class="uk-margin-small-right" uk-icon="icon: home"></span> Stretch</a> <div class="uk-navbar-dropdown uk-navbar-dropdown-dropbar-large" uk-drop="cls-drop: uk-navbar-dropdown; boundary: !.uk-navbar; stretch: x; flip: false"> <div class="uk-drop-grid uk-child-width-1-3@m" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </li> <li><a href="#"> <div> Item <div class="uk-navbar-subtitle">Subtitle</div> </div> </a></li> </ul> <div class="uk-navbar-item"> <div>Some <a href="#">Link</a></div> </div> </div> <div class="uk-navbar-right"> <a class="uk-navbar-toggle uk-navbar-toggle-animate" href="#"> <span class="uk-margin-small-right">Menu</span> <span uk-navbar-toggle-icon></span> </a> <div class="uk-navbar-dropdown uk-navbar-dropdown-dropbar-large" uk-drop="cls-drop: uk-navbar-dropdown; boundary: !.uk-navbar; stretch: x; flip: false"> <div class="uk-drop-grid uk-child-width-1-3@m" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </div> </div> </div> </nav> </div> </div> <div class="uk-section uk-section-default"> <div id="dropbar" class="uk-container"> <h3 class="uk-h4">Large Dropdown and Large Dropbar</h3> <div uk-grid> <div class="uk-width-1-3@m"> <div class="uk-drop uk-navbar-dropdown uk-navbar-dropdown-large test"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> <div class="uk-width-1-3@m"> <div class="uk-drop uk-navbar-dropdown uk-navbar-dropdown-large test"> <ul class="uk-nav uk-nav-secondary"> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> </ul> </div> </div> <div class="uk-width-1-3@m"> <div class="uk-drop uk-dropbar uk-dropbar-top uk-navbar-dropbar test"> <div class="uk-drop uk-navbar-dropdown uk-navbar-dropdown-dropbar uk-navbar-dropdown-dropbar-large test"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> </div> </div> </div> </div> <div> <div uk-sticky="show-on-up: true; animation: uk-animation-slide-top; sel-target: .uk-navbar-container; cls-active: uk-navbar-sticky; bottom: #dropdown"> <nav class="uk-navbar-container uk-navbar-primary"> <div class="uk-container"> <div uk-navbar> <div class="uk-navbar-left"> <a class="uk-navbar-item uk-logo" href="#">Primary</a> <ul class="uk-navbar-nav"> <li class="uk-active"> <a href="">Active</a> <div class="uk-navbar-dropdown"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </li> <li> <a href="#">2 Columns</a> <div class="uk-navbar-dropdown uk-navbar-dropdown-width-2"> <div class="uk-drop-grid uk-child-width-1-2" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"><a href="#">Parent</a></li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"><a href="#">Parent</a></li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> </div> </li> <li> <a href="#"><span class="uk-margin-small-right" uk-icon="icon: home"></span> Stretch</a> <div class="uk-navbar-dropdown uk-navbar-dropdown-large" uk-drop="cls-drop: uk-navbar-dropdown; boundary: !.uk-navbar; stretch: x; flip: false"> <div class="uk-drop-grid uk-child-width-1-3@m" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </li> <li><a href="#"> <div> Item <div class="uk-navbar-subtitle">Subtitle</div> </div> </a></li> </ul> <div class="uk-navbar-item"> <div>Some <a href="#">Link</a></div> </div> </div> <div class="uk-navbar-right"> <a class="uk-navbar-toggle uk-navbar-toggle-animate" href="#"> <span class="uk-margin-small-right">Menu</span> <span uk-navbar-toggle-icon></span> </a> <div class="uk-navbar-dropdown uk-navbar-dropdown-large" uk-drop="cls-drop: uk-navbar-dropdown; boundary: !.uk-navbar; stretch: x; flip: false"> <div class="uk-drop-grid uk-child-width-1-3@m" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </div> </div> </div> </nav> </div> </div> <div class="uk-section uk-section-default"> <div class="uk-container"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum.</p> <p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum.</p> <p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum.</p> <p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.</p> <p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum.</p> <p>Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.</p> </div> </div> styler/tests/heading.html000064400000106175151666572120011542 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <div class="uk-margin"> <button class="uk-button uk-button-default" type="button" uk-toggle="target: .uk-hidden; cls: uk-hidden">More Text</button> </div> <div class="uk-heading-small">Heading Small<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-medium">Heading Medium<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-large">Heading Large<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-xlarge">Heading XL<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-2xlarge">Heading 2XL<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-3xlarge">Head 3XL<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-grid-large uk-child-width-1-2@m uk-margin-large" uk-grid> <div> <div class="uk-heading-divider uk-heading-3xlarge">Hea<span class="uk-hidden"><br>More</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-bullet uk-heading-3xlarge">Hea<span class="uk-hidden"><br>More</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-divider uk-heading-2xlarge">Head<span class="uk-hidden"><br>More</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-bullet uk-heading-2xlarge">Head<span class="uk-hidden"><br>More</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-divider uk-heading-xlarge">Head<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-bullet uk-heading-xlarge">Head<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-divider uk-heading-large">Heading L<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-bullet uk-heading-large">Heading L<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-divider uk-heading-medium">Heading M<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-bullet uk-heading-medium">Heading M<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-divider uk-heading-small">Heading S<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <div class="uk-heading-bullet uk-heading-small">Heading S<span class="uk-hidden"><br>More text</span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h1 class="uk-heading-divider">Heading H1<span class="uk-hidden"><br>More text</span></h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h1 class="uk-heading-bullet">Heading H1<span class="uk-hidden"><br>More text</span></h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h2 class="uk-heading-divider">Heading H2<span class="uk-hidden"><br>More text</span></h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h2 class="uk-heading-bullet">Heading H2<span class="uk-hidden"><br>More text</span></h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h3 class="uk-heading-divider">Heading H3<span class="uk-hidden"><br>More text</span></h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h3 class="uk-heading-bullet">Heading H3<span class="uk-hidden"><br>More text</span></h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h4 class="uk-heading-divider">Heading H4<span class="uk-hidden"><br>More text</span></h4> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h4 class="uk-heading-bullet">Heading H4<span class="uk-hidden"><br>More text</span></h4> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h5 class="uk-heading-divider">Heading H5<span class="uk-hidden"><br>More text</span></h5> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h5 class="uk-heading-bullet">Heading H5<span class="uk-hidden"><br>More text</span></h5> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h6 class="uk-heading-divider">Heading H6<span class="uk-hidden"><br>More text</span></h6> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div> <h6 class="uk-heading-bullet">Heading H6<span class="uk-hidden"><br>More text</span></h6> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> </div> <div class="uk-grid-large uk-child-width-1-2@m uk-margin-large" uk-grid> <div> <div class="uk-heading-line uk-heading-3xlarge"><span>Hea<span class="uk-hidden"><br>More</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-2xlarge"><span>Head<span class="uk-hidden"><br>More</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-xlarge"><span>Head<span class="uk-hidden"><br>More text</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-large"><span>Heading L<span class="uk-hidden"><br>More text</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-medium"><span>Heading M<span class="uk-hidden"><br>More text</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-small"><span>Heading S<span class="uk-hidden"><br>More text</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h1 class="uk-heading-line"><span>Heading H1<span class="uk-hidden"><br>More text</span></span></h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h2 class="uk-heading-line"><span>Heading H2<span class="uk-hidden"><br>More text</span></span></h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h3 class="uk-heading-line"><span>Heading H3<span class="uk-hidden"><br>More text</span></span></h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h4 class="uk-heading-line"><span>Heading H4<span class="uk-hidden"><br>More text</span></span></h4> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h5 class="uk-heading-line"><span>Heading H5<span class="uk-hidden"><br>More text</span></span></h5> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h6 class="uk-heading-line"><span>Heading H6<span class="uk-hidden"><br>More text</span></span></h6> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div class="uk-text-center"> <div class="uk-heading-line uk-heading-3xlarge"><span>He<span class="uk-hidden"><br>More</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-2xlarge"><span>Head<span class="uk-hidden"><br>More</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-xlarge"><span>Head<span class="uk-hidden"><br>More text</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-large"><span>Heading L<span class="uk-hidden"><br>More text</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-medium"><span>Heading M<span class="uk-hidden"><br>More text</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class="uk-heading-line uk-heading-small"><span>Heading S<span class="uk-hidden"><br>More text</span></span></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h1 class="uk-heading-line"><span>Heading H1<span class="uk-hidden"><br>More text</span></span></h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h2 class="uk-heading-line"><span>Heading H2<span class="uk-hidden"><br>More text</span></span></h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h3 class="uk-heading-line"><span>Heading H3<span class="uk-hidden"><br>More text</span></span></h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h4 class="uk-heading-line"><span>Heading H4<span class="uk-hidden"><br>More text</span></span></h4> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h5 class="uk-heading-line"><span>Heading H5<span class="uk-hidden"><br>More text</span></span></h5> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <h6 class="uk-heading-line"><span>Heading H6<span class="uk-hidden"><br>More text</span></span></h6> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> </div> </div> </div> styler/tests/dotnav.html000064400000002550151666572120011426 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-2@s" uk-grid> <div> <h2 class="uk-h5 uk-heading-divider">Horizontal</h2> <ul class="uk-dotnav"> <li class="uk-active"><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li><a href="#">Item 3</a></li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> <li><a href="#">Item 6</a></li> </ul> </div> <div> <h2 class="uk-h5 uk-heading-divider">Vertical</h2> <ul class="uk-dotnav uk-dotnav-vertical"> <li class="uk-active"><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li><a href="#">Item 3</a></li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> <li><a href="#">Item 6</a></li> </ul> </div> </div> </div> </div> </div>styler/tests/pagination.html000064400000003021151666572120012256 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <nav aria-label="Pagination"> <ul class="uk-pagination uk-flex-center"> <li class="uk-disabled"><a><span uk-pagination-previous></span></a></li> <li><a href="#"><span uk-pagination-previous></span></a></li> <li><a href="#">1</a></li> <li class="uk-disabled"><span>…</span></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><a href="#">6</a></li> <li class="uk-active"><span aria-current="page">7</span></li> <li><a href="#">8</a></li> <li><a href="#">9</a></li> <li><a href="#">10</a></li> <li class="uk-disabled"><span>…</span></li> <li><a href="#">20</a></li> <li><a href="#"><span uk-pagination-next></span></a></li> <li class="uk-disabled"><a><span uk-pagination-next></span></a></li> </ul> </nav> <nav> <ul class="uk-pagination uk-flex-center"> <li><a href="#"><span uk-pagination-previous></span> Previous</a></li> <li><a href="#">Next <span uk-pagination-next></span></a></li> </ul> </nav> </div> </div> </div>styler/tests/sticky.html000064400000000671151666572120011443 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container uk-container-small" style="height: 2000px;"> <div id="viewport" class="test-border" style="height: 600px; border: 1px dashed rgba(0,0,0,0.2);"> <div class="uk-card uk-card-primary uk-card-body uk-text-center" uk-sticky="start: 250; end: !#viewport; animation: uk-animation-slide-top">Slide with 250px offset</div> </div> </div> </div>styler/tests/list.html000064400000010123151666572120011101 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <h2>Color</h2> <div class="uk-child-width-1-4" uk-grid> <div> <h3>Muted</h3> <ul class="uk-list uk-list-disc uk-list-muted"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Emphasis</h3> <ul class="uk-list uk-list-disc uk-list-emphasis"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Primary</h3> <ul class="uk-list uk-list-disc uk-list-primary"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Secondary</h3> <ul class="uk-list uk-list-disc uk-list-secondary"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> </div> <h2>Style</h2> <div class="uk-child-width-1-4" uk-grid> <div> <h3>Default</h3> <ul class="uk-list"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Bullet</h3> <ul class="uk-list uk-list-bullet"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Divider</h3> <ul class="uk-list uk-list-divider"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Striped</h3> <ul class="uk-list uk-list-striped"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> </div> <h2>Large</h2> <div class="uk-child-width-1-4" uk-grid> <div> <h3>Default</h3> <ul class="uk-list uk-list-large"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Bullet</h3> <ul class="uk-list uk-list-large uk-list-bullet"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Divider</h3> <ul class="uk-list uk-list-large uk-list-divider"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> <div> <h3>Striped</h3> <ul class="uk-list uk-list-large uk-list-striped"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> <li>List item 4</li> </ul> </div> </div> </div> </div> styler/tests/slider.html000064400000011433151666572120011415 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div uk-slider> <div class="uk-position-relative uk-visible-toggle"> <div class="uk-slider-container uk-slider-container-offset" tabindex="-1"> <div class="uk-slider-items uk-child-width-1-3@s uk-grid"> <div> <div class="uk-card uk-card-default uk-card-hover uk-card-body"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-primary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Primary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-secondary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Secondary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-default uk-card-hover uk-card-body"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-primary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Primary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-secondary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Secondary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-default uk-card-hover uk-card-body"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-primary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Primary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> <div> <div class="uk-card uk-card-secondary uk-card-hover uk-card-body"> <h3 class="uk-card-title">Secondary</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.</p> </div> </div> </div> </div> <a class="uk-position-center-left-out uk-position-small uk-hidden-hover" href="#" uk-slidenav-previous uk-slider-item="previous"></a> <a class="uk-position-center-right-out uk-position-small uk-hidden-hover" href="#" uk-slidenav-next uk-slider-item="next"></a> </div> <ul class="uk-slider-nav uk-dotnav uk-flex-center uk-margin"></ul> </div> </div> </div> </div> styler/tests/inverse.html000064400000077454151666572120011625 0ustar00<div> <nav class="uk-navbar-container uk-navbar-transparent test-inverse-background uk-light"> <div class="uk-container"> <div uk-navbar> <div class="uk-navbar-left"> <a class="uk-navbar-item uk-logo" href="#">Logo</a> <ul class="uk-navbar-nav"> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Dropdown</a> <div class="uk-navbar-dropdown"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </li> <li> <a href="#">Dropbar <span uk-navbar-parent-icon></span></a> <div class="uk-dropbar uk-dropbar-top" uk-drop="pos: bottom-left; stretch: x; target-y: !.uk-navbar-container; animation: slide-top; animate-out: true"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> </div> <div class="uk-navbar-right"> <div class="uk-navbar-item"> <form class="uk-search uk-search-navbar uk-width-1-1"> <span uk-search-icon></span> <input class="uk-search-input" type="search" placeholder="Search" aria-label="Search"> </form> </div> <div class="uk-navbar-item"> <button class="uk-button uk-button-default" type="button" uk-toggle="target: .test-inverse-background; cls: uk-light uk-dark">Toggle Inverse</button> </div> </div> </div> </div> </nav> </div> <div class="uk-section test-inverse-background uk-light"> <div class="uk-container"> <div uk-grid> <div class="uk-width-2-3@m"> <nav aria-label="Breadcrumb"> <ul class="uk-breadcrumb"> <li><a href="#">Home</a></li> <li><a href="#">Blog</a></li> <li class="uk-disabled"><span>Category</span></li> <li><span aria-current="page">Post</span></li> </ul> </nav> <article class="uk-article"> <h1 class="uk-article-title"><a class="uk-link-reset" href="#">Article Title</a></h1> <hr class="uk-divider-small"> <p class="uk-text-lead">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p class="uk-column-1-2@s uk-dropcap">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p class="uk-article-meta">Written by <a href="#">Super User</a> on 12 April 2012. Posted in <a href="#">Blog</a></p> <hr class="uk-divider-icon uk-margin-medium"> <div class="uk-grid-small uk-child-width-auto uk-flex-middle uk-margin-medium" uk-grid> <div> <button class="uk-button uk-button-default">Default</button> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> <div> <button class="uk-button uk-button-primary">Primary</button> </div> <div> <button class="uk-button uk-button-secondary">Secondary</button> </div> <div> <button class="uk-button uk-button-danger">Danger</button> </div> <div> <button class="uk-button uk-button-default" disabled>Disabled</button> </div> </div> <hr class="uk-margin-medium"> <div class="uk-child-width-1-2 uk-child-width-1-4@s uk-margin" uk-grid> <div> <ul class="uk-list"> <li><a href="#">a element</a></li> <li><abbr title="Title text">abbr element</abbr></li> <li><code>code element</code></li> <li><del>del element</del></li> <li><dfn title="Title text">dfn element</dfn></li> <li><a href="#" class="uk-link-muted">Link Muted</a></li> </ul> </div> <div> <ul class="uk-list"> <li><em>em element</em></li> <li><ins>ins element</ins></li> <li><mark>mark element</mark></li> <li><q>q <q>inside</q> a q</q></li> <li><strong>strong element</strong></li> <li><a href="#" class="uk-link-reset">Link Reset</a></li> </ul> </div> <div> <ul class="uk-list"> <li class="uk-text-muted">Text Muted</li> <li class="uk-text-emphasis">Text Emphasis</li> <li class="uk-text-primary">Text Primary</li> <li class="uk-text-secondary">Text Secondary</li> <li class="uk-text-success">Text Success</li> <li class="uk-text-warning">Text Warning</li> <li class="uk-text-danger">Text Danger</li> <li class="uk-text-meta">Text Meta</li> </ul> </div> <div> <ul class="uk-list"> <li><span class="uk-label">Default</span></li> <li><span class="uk-label uk-label-success">Success</span></li> <li><span class="uk-label uk-label-warning">Warning</span></li> <li><span class="uk-label uk-label-danger">Danger</span></li> <li><a class="uk-badge" href="#">1</a></li> <li> <a class="uk-icon-button" href="#" uk-icon="icon: home"></a> <a class="uk-icon-button" href="#" uk-icon="icon: github"></a> <a class="uk-icon-link" href="#" uk-icon="icon: trash"></a> </li> </ul> </div> </div> <blockquote class="uk-margin-medium" cite="#"> <p>The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element.</p> <footer>Someone famous in <cite><a href="#">Source Title</a></cite></footer> </blockquote> <div class="uk-grid-small" uk-grid> <div> <a class="uk-button uk-button-text" href="#">Read more</a> </div> <div> <a class="uk-button uk-button-text" href="#">5 Comments</a> </div> <div> <a class="uk-button uk-button-link" href="#">Button Link</a> </div> </div> </article> <hr class="uk-margin-medium"> <ul class="uk-comment-list uk-margin-medium"> <li> <article class="uk-comment uk-visible-toggle" tabindex="-1" role="comment"> <header class="uk-comment-header uk-position-relative"> <div class="uk-grid-medium uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas class="uk-comment-avatar test-img-small" width="50" height="50"></canvas> </div> <div class="uk-width-expand"> <h4 class="uk-comment-title uk-margin-remove"><a class="uk-link-reset" href="#">Author</a></h4> <p class="uk-comment-meta uk-margin-remove-top"><a class="uk-link-reset" href="#">12 days ago</a></p> </div> </div> <div class="uk-position-top-right uk-position-small uk-hidden-hover"><a class="uk-button uk-button-text" href="#">Reply</a></div> </header> <div class="uk-comment-body"> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> </div> </article> </li> </ul> <nav aria-label="Pagination"> <ul class="uk-pagination uk-flex-center" uk-margin> <li><a href="#"><span uk-pagination-previous></span></a></li> <li><a href="#">1</a></li> <li class="uk-disabled"><span>…</span></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><a href="#">6</a></li> <li class="uk-active"><span aria-current="page">7</span></li> <li><a href="#">8</a></li> <li><a href="#">9</a></li> <li><a href="#">10</a></li> <li class="uk-disabled"><span>…</span></li> <li><a href="#">20</a></li> <li><a href="#"><span uk-pagination-next></span></a></li> </ul> </nav> </div> <div class="uk-width-expand@m"> <div class="uk-margin-medium-bottom"> <form class="uk-search uk-search-default uk-width-1-1"> <span uk-search-icon></span> <input class="uk-search-input" type="search" placeholder="Search" aria-label="Search"> </form> </div> <ul class="uk-nav-default uk-margin-medium" uk-nav> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent <span uk-nav-parent-icon></span></a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#">Parent <span uk-nav-parent-icon></span></a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> <ul class="uk-list uk-list-bullet uk-margin-medium"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> <ul class="uk-list uk-list-striped uk-margin-medium"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> <ul class="uk-list uk-list-divider uk-margin-medium"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> <ul class="uk-margin-medium" uk-accordion> <li class="uk-open"> <a class="uk-accordion-title" href="#">Item 1</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> </div> </li> <li> <a class="uk-accordion-title" href="#">Item 2</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> </div> </li> <li> <a class="uk-accordion-title" href="#">Item 3</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> </div> </li> </ul> <div class="uk-margin"> <div class="uk-inline"> <canvas width="800" height="600" class="test-img"></canvas> <div class="uk-position-center"> <span uk-overlay-icon></span> </div> <a class="uk-position-absolute uk-transform-center" style="left: 20%; top: 30%" href="#" uk-marker></a> <a class="uk-position-absolute uk-transform-center" style="left: 60%; top: 40%" href="#" uk-marker></a> <a class="uk-position-absolute uk-transform-center" style="left: 80%; top: 70%" href="#" uk-marker></a> </div> </div> </div> </div> <hr class="uk-margin-large"> <div class="uk-grid-divider" uk-grid> <div class="uk-width-2-3@m"> <h1 class="uk-heading-2xlarge uk-margin-small">2X-Large</h1> <h1 class="uk-heading-xlarge uk-margin-small">X-Large</h1> <h1 class="uk-heading-large uk-margin-small">Heading L</h1> <h1 class="uk-heading-medium uk-margin-small">Heading M</h1> <h1 class="uk-heading-small uk-margin-small">Heading S</h1> <h1 class="uk-margin-small">Heading H1</h1> <h2 class="uk-margin-small">Heading H2</h2> <h3 class="uk-margin-small">Heading H3</h3> <h4 class="uk-margin-small">Heading H4</h4> <h5 class="uk-margin-small">Heading H5</h5> <h6 class="uk-margin-small">Heading H6</h6> <h3 class="uk-heading-divider">Heading Divider</h3> <h3 class="uk-heading-bullet">Heading Bullet</h3> <h3 class="uk-heading-line"><span>Heading Line</span></h3> <div class="uk-overflow-auto uk-margin-large-top"> <table class="uk-table uk-table-divider uk-table-hover uk-table-small"> <thead> <tr> <th>Table Heading</th> <th>Table Heading</th> <th>Table Heading</th> </tr> </thead> <tbody> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> </tbody> </table> </div> <div class="uk-grid-small uk-child-width-auto uk-margin-medium-top" uk-grid js-countdown> <div> <div class="uk-countdown-number uk-countdown-days"></div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-hours"></div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-minutes"></div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-seconds"></div> </div> </div> <script> (function () { const date = (new Date(Date.now() + 864e5 * 7)).toISOString(); for (const el of UIkit.util.$$('[js-countdown]')) { UIkit.countdown(el, {date: date}); } })(); </script> </div> <div class="uk-width-1-3@m"> <form class="uk-form-stacked"> <div class="uk-margin-small"> <label class="uk-form-label" for="form-input-text">Text</label> <input id="form-input-text" class="uk-input" type="text" placeholder="Some text..."> </div> <div class="uk-margin-small"> <select class="uk-select" aria-label="Select"> <option>Option 01</option> <option>Option 02</option> </select> </div> <div class="uk-margin-small"> <textarea class="uk-textarea" rows="2" placeholder="Some text..." aria-label="Textarea"></textarea> </div> <div class="uk-grid-small uk-child-width-auto" uk-grid> <div> <label><input class="uk-radio" type="radio" name="radio"> Radio</label> </div> <div> <label><input class="uk-checkbox" type="checkbox"> Checkbox</label> </div> </div> <div class="uk-margin-small"> <label class="uk-form-label" for="form-input-states">States</label> <input id="form-input-states" class="uk-input" type="text" placeholder=":disabled" disabled> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-danger" type="text" placeholder="form-danger" aria-label="form-danger" value="form-danger"> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-success" type="text" placeholder="form-success" aria-label="form-success" value="form-success"> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-blank" type="text" placeholder="form-blank" aria-label="form-blank"> </div> </form> <ul class="uk-nav uk-nav-primary uk-margin-medium"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> <ul class="uk-nav uk-nav-secondary uk-margin-medium"> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.</div></div></a></li> </ul> </div> </div> <hr class="uk-margin-large"> <div class="uk-grid-divider uk-child-width-auto@m" uk-grid> <div> <ul class="uk-dotnav"> <li class="uk-active"><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li><a href="#">Item 3</a></li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> <li><a href="#">Item 6</a></li> </ul> </div> <div> <a href="#" uk-slidenav-previous></a> <a href="#" uk-slidenav-next></a> </div> <div> <ul class="uk-thumbnav"> <li class="uk-active"><a href="#"><canvas width="60" height="40" class="test-img"></canvas></a></li> <li><a href="#"><canvas width="60" height="40" class="test-img"></canvas></a></li> <li><a href="#"><canvas width="60" height="40" class="test-img"></canvas></a></li> </ul> </div> <div> <button type="button" uk-close></button> </div> <div> <a href="#" uk-totop></a> </div> </div> <hr class="uk-margin-large"> <div class="uk-grid-divider uk-child-width-auto@m" uk-grid> <div> <ul class="uk-subnav uk-subnav-divider" uk-margin> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li class="uk-disabled"><a>Disabled</a></li> </ul> </div> <div> <ul class="uk-subnav uk-subnav-pill" uk-margin> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li class="uk-disabled"><a>Disabled</a></li> </ul> </div> <div> <ul uk-tab> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li class="uk-disabled"><a>Disabled</a></li> </ul> </div> <div> <ul class="uk-iconnav"> <li class="uk-active"><a href="#" uk-icon="icon: plus"></a></li> <li><a href="#" uk-icon="icon: pencil"></a></li> <li><a href="#"><span uk-icon="icon: bag"></span> (2)</a></li> </ul> </div> </div> <hr class="uk-margin-large"> <div class="uk-child-width-1-4 uk-grid-large" uk-grid> <div> <div class="uk-inline tm-box-decoration-default tm-box-decoration-inverse"> <canvas width="800" height="600" class="test-img-opaque"></canvas> </div> </div> <div> <div class="uk-inline tm-box-decoration-primary tm-box-decoration-inverse"> <canvas width="800" height="600" class="test-img-opaque"></canvas> </div> </div> <div> <div class="uk-inline tm-box-decoration-secondary tm-box-decoration-inverse"> <canvas width="800" height="600" class="test-img-opaque"></canvas> </div> </div> <div> <div class="uk-inline uk-transition-toggle tm-transition-border"> <canvas width="800" height="600" class="test-img-opaque"></canvas> </div> </div> </div> </div> </div> styler/tests/index.html000064400000121253151666572120011244 0ustar00<nav class="uk-navbar-container"> <div class="uk-container"> <div uk-navbar> <div class="uk-navbar-left"> <a class="uk-navbar-item uk-logo" href="#">Logo</a> <ul class="uk-navbar-nav"> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Dropdown <span uk-navbar-parent-icon></span></a> <div class="uk-navbar-dropdown"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </li> <li> <a href="#">Dropbar <span uk-navbar-parent-icon></span></a> <div class="uk-dropbar uk-dropbar-top" uk-drop="pos: bottom-left; stretch: x; target-y: !.uk-navbar-container; animation: slide-top; animate-out: true"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> </div> <div class="uk-navbar-right"> <div class="uk-navbar-item"> <form class="uk-search uk-search-navbar uk-width-1-1"> <span uk-search-icon></span> <input class="uk-search-input" type="search" placeholder="Search" aria-label="Search"> </form> </div> <a class="uk-navbar-toggle" href="#modal" uk-icon="icon: more-vertical" uk-toggle></a> <a class="uk-navbar-toggle" href="#modal-search" uk-search-icon uk-toggle></a> <a class="uk-navbar-toggle" href="#offcanvas" uk-navbar-toggle-icon uk-toggle></a> </div> </div> </div> </nav> <div class="uk-section uk-section-default"> <div class="uk-container"> <div uk-grid> <div class="uk-width-2-3@m"> <nav aria-label="Breadcrumb"> <ul class="uk-breadcrumb"> <li><a href="#">Home</a></li> <li><a href="#">Blog</a></li> <li class="uk-disabled"><span>Category</span></li> <li><span aria-current="page">Post</span></li> </ul> </nav> <article class="uk-article"> <h1 class="uk-article-title"><a class="uk-link-reset" href="#">Article Title</a></h1> <hr class="uk-divider-small"> <p class="uk-text-lead">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p class="uk-column-1-2@s uk-dropcap">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p class="uk-article-meta">Written by <a href="#">Super User</a> on 12 April 2012. Posted in <a href="#">Blog</a></p> <hr class="uk-divider-icon uk-margin-medium"> <div class="uk-grid-small uk-child-width-auto uk-flex-middle uk-margin-medium" uk-grid> <div> <button class="uk-button uk-button-default">Default</button> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> <div> <button class="uk-button uk-button-primary">Primary</button> </div> <div> <button class="uk-button uk-button-secondary">Secondary</button> </div> <div> <button class="uk-button uk-button-danger">Danger</button> </div> <div> <button class="uk-button uk-button-default" disabled>Disabled</button> </div> </div> <hr class="uk-margin-medium"> <div class="uk-child-width-1-2 uk-child-width-1-4@s uk-margin" uk-grid> <div> <ul class="uk-list"> <li><a href="#">a element</a></li> <li><abbr title="Title text">abbr element</abbr></li> <li><code>code element</code></li> <li><del>del element</del></li> <li><dfn title="Title text">dfn element</dfn></li> <li><a href="#" class="uk-link-muted">Link Muted</a></li> </ul> </div> <div> <ul class="uk-list"> <li><em>em element</em></li> <li><ins>ins element</ins></li> <li><mark>mark element</mark></li> <li><q>q <q>inside</q> a q</q></li> <li><strong>strong element</strong></li> <li><a href="#" class="uk-link-reset">Link Reset</a></li> </ul> </div> <div> <ul class="uk-list"> <li class="uk-text-muted">Text Muted</li> <li class="uk-text-emphasis">Text Emphasis</li> <li class="uk-text-primary">Text Primary</li> <li class="uk-text-secondary">Text Secondary</li> <li class="uk-text-success">Text Success</li> <li class="uk-text-warning">Text Warning</li> <li class="uk-text-danger">Text Danger</li> <li class="uk-text-meta">Text Meta</li> </ul> </div> <div> <ul class="uk-list"> <li><span class="uk-label">Default</span></li> <li><span class="uk-label uk-label-success">Success</span></li> <li><span class="uk-label uk-label-warning">Warning</span></li> <li><span class="uk-label uk-label-danger">Danger</span></li> <li><a class="uk-badge" href="#">1</a></li> <li> <a class="uk-icon-button" href="#" uk-icon="icon: home"></a> <a class="uk-icon-button" href="#" uk-icon="icon: github"></a> <a class="uk-icon-link" href="#" uk-icon="icon: trash"></a> </li> </ul> </div> </div> <pre class="uk-pre uk-margin-medium"><code><div class="myclass">…<div></code></pre> <blockquote class="uk-margin-medium" cite="#"> <p>The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a footer or cite element.</p> <footer>Someone famous in <cite><a href="#">Source Title</a></cite></footer> </blockquote> <div class="uk-grid-small" uk-grid> <div> <a class="uk-button uk-button-text" href="#">Read more</a> </div> <div> <a class="uk-button uk-button-text" href="#">5 Comments</a> </div> <div> <a class="uk-button uk-button-link" href="#">Button Link</a> </div> </div> </article> <hr class="uk-margin-medium"> <ul class="uk-comment-list uk-margin-medium"> <li> <article class="uk-comment uk-visible-toggle" tabindex="-1" role="comment"> <header class="uk-comment-header uk-position-relative"> <div class="uk-grid-medium uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas class="uk-comment-avatar test-img-small" width="50" height="50"></canvas> </div> <div class="uk-width-expand"> <h4 class="uk-comment-title uk-margin-remove"><a class="uk-link-reset" href="#">Author</a></h4> <p class="uk-comment-meta uk-margin-remove-top"><a class="uk-link-reset" href="#">12 days ago</a></p> </div> </div> <div class="uk-position-top-right uk-position-small uk-hidden-hover"><a class="uk-button uk-button-text" href="#">Reply</a></div> </header> <div class="uk-comment-body"> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</p> </div> </article> </li> </ul> <nav aria-label="Pagination"> <ul class="uk-pagination uk-flex-center" uk-margin> <li><a href="#"><span uk-pagination-previous></span></a></li> <li><a href="#">1</a></li> <li class="uk-disabled"><span>…</span></li> <li><a href="#">4</a></li> <li><a href="#">5</a></li> <li><a href="#">6</a></li> <li class="uk-active"><span aria-current="page">7</span></li> <li><a href="#">8</a></li> <li><a href="#">9</a></li> <li><a href="#">10</a></li> <li class="uk-disabled"><span>…</span></li> <li><a href="#">20</a></li> <li><a href="#"><span uk-pagination-next></span></a></li> </ul> </nav> </div> <div class="uk-width-expand@m"> <div class="uk-margin-medium-bottom"> <form class="uk-search uk-search-default uk-width-1-1"> <span uk-search-icon></span> <input class="uk-search-input" type="search" placeholder="Search"> </form> </div> <ul class="uk-nav-default uk-margin-medium" uk-nav> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent <span uk-nav-parent-icon></span></a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#">Parent <span uk-nav-parent-icon></span></a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> <div class="uk-card uk-card-body uk-card-default uk-card-hover"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-margin uk-card uk-card-body uk-card-primary uk-card-hover"> <h3 class="uk-card-title">Primary</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-margin uk-card uk-card-body uk-card-secondary uk-card-hover"> <h3 class="uk-card-title">Secondary</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-margin uk-card uk-card-body uk-card-hover"> <h3 class="uk-card-title">Hover</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> </div> <hr class="uk-margin-large"> <div class="uk-grid-divider" uk-grid> <div class="uk-width-2-3@m"> <h1 class="uk-heading-2xlarge uk-margin-small">2X-Large</h1> <h1 class="uk-heading-xlarge uk-margin-small">X-Large</h1> <h1 class="uk-heading-large uk-margin-small">Heading L</h1> <h1 class="uk-heading-medium uk-margin-small">Heading M</h1> <h1 class="uk-heading-small uk-margin-small">Heading S</h1> <h1 class="uk-margin-small">Heading H1</h1> <h2 class="uk-margin-small">Heading H2</h2> <h3 class="uk-margin-small">Heading H3</h3> <h4 class="uk-margin-small">Heading H4</h4> <h5 class="uk-margin-small">Heading H5</h5> <h6 class="uk-margin-small">Heading H6</h6> <h3 class="uk-heading-divider">Heading Divider</h3> <h3 class="uk-heading-bullet">Heading Bullet</h3> <h3 class="uk-heading-line"><span>Heading Line</span></h3> <div class="uk-overflow-auto uk-margin-medium-top"> <table class="uk-table uk-table-divider uk-table-hover uk-table-small"> <thead> <tr> <th>Table Heading</th> <th>Table Heading</th> <th>Table Heading</th> </tr> </thead> <tbody> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> <tr> <td>Table Data</td> <td>Table Data</td> <td>Table Data</td> </tr> </tbody> </table> </div> <div class="uk-grid-small uk-child-width-auto uk-margin-medium-top" uk-grid js-countdown> <div> <div class="uk-countdown-number uk-countdown-days"></div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-hours"></div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-minutes"></div> </div> <div class="uk-countdown-separator">:</div> <div> <div class="uk-countdown-number uk-countdown-seconds"></div> </div> </div> <script> (function () { const date = (new Date(Date.now() + 864e5 * 7)).toISOString(); for (const el of UIkit.util.$$('[js-countdown]')) { UIkit.countdown(el, {date: date}); } })(); </script> </div> <div class="uk-width-1-3@m"> <form class="uk-form-stacked"> <div class="uk-margin-small"> <label class="uk-form-label" for="form-input-text">Text</label> <input id="form-input-text" class="uk-input" type="text" placeholder="Some text..."> </div> <div class="uk-margin-small"> <select class="uk-select" aria-label="Select"> <option>Option 01</option> <option>Option 02</option> </select> </div> <div class="uk-margin-small"> <textarea class="uk-textarea" rows="2" placeholder="Some text..." aria-label="Textarea"></textarea> </div> <div class="uk-grid-small uk-child-width-auto" uk-grid> <div> <label><input class="uk-radio" type="radio" name="radio"> Radio</label> </div> <div> <label><input class="uk-checkbox" type="checkbox"> Checkbox</label> </div> </div> <div class="uk-margin-small"> <input class="uk-range" type="range" value="2" min="0" max="10" step="0.1" aria-label="Range"> </div> <div class="uk-margin-small"> <label class="uk-form-label" for="form-input-states">States</label> <input id="form-input-states" class="uk-input" type="text" placeholder=":disabled" disabled> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-danger" type="text" placeholder="form-danger" aria-label="form-danger" value="form-danger"> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-success" type="text" placeholder="form-success" aria-label="form-success" value="form-success"> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-blank" type="text" placeholder="form-blank" aria-label="form-blank"> </div> </form> <ul class="uk-nav uk-nav-primary uk-margin-medium"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> <ul class="uk-nav uk-nav-secondary uk-margin-medium"> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do.</div></div></a></li> </ul> <div class="uk-margin-medium-top" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p>Default</p> </div> <div class="uk-alert-primary" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p>Primary</p> </div> <div class="uk-alert-success" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p>Success</p> </div> <div class="uk-alert-warning" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p>Warning</p> </div> <div class="uk-alert-danger uk-margin-remove-bottom" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p>Danger</p> </div> </div> </div> <hr class="uk-margin-medium"> <div class="uk-child-width-1-2@s uk-child-width-expand@m" uk-grid> <div> <div class="uk-inline"> <canvas width="800" height="600" class="test-img"></canvas> <a class="uk-position-absolute uk-transform-center" style="left: 20%; top: 30%" href="#" uk-marker></a> <a class="uk-position-absolute uk-transform-center" style="left: 60%; top: 40%" href="#" uk-marker></a> <a class="uk-position-absolute uk-transform-center" style="left: 80%; top: 70%" href="#" uk-marker></a> </div> </div> <div> <div class="uk-inline-clip"> <canvas width="800" height="600" class="test-img"></canvas> <div class="uk-overlay uk-overlay-default uk-position-bottom"> <p>Default Lorem ipsum dolor sit amet, consectetur.</p> </div> </div> </div> <div> <div class="uk-inline-clip"> <canvas width="800" height="600" class="test-img"></canvas> <div class="uk-overlay uk-overlay-primary uk-position-bottom"> <p>Primary Lorem ipsum dolor sit amet, consectetur.</p> </div> </div> </div> <div> <div class="uk-inline"> <canvas width="800" height="600" class="test-img"></canvas> <div class="uk-position-center"> <span uk-overlay-icon></span> </div> </div> </div> </div> <hr class="uk-margin-medium"> <div class="uk-grid-divider uk-child-width-auto@m" uk-grid> <div> <ul class="uk-dotnav"> <li class="uk-active"><a href="#">Item 1</a></li> <li><a href="#">Item 2</a></li> <li><a href="#">Item 3</a></li> <li><a href="#">Item 4</a></li> <li><a href="#">Item 5</a></li> <li><a href="#">Item 6</a></li> </ul> </div> <div> <a href="#" uk-slidenav-previous></a> <a href="#" uk-slidenav-next></a> </div> <div> <ul class="uk-thumbnav"> <li class="uk-active"><a href="#"><canvas width="60" height="40" class="test-img"></canvas></a></li> <li><a href="#"><canvas width="60" height="40" class="test-img"></canvas></a></li> <li><a href="#"><canvas width="60" height="40" class="test-img"></canvas></a></li> </ul> </div> <div> <div class="uk-tooltip uk-tooltip-top-center uk-display-inline-block uk-margin-remove uk-position-relative">Tooltip</div> </div> <div class="uk-width-expand@m"> <progress class="uk-progress" value="45" max="100">45%</progress> </div> <div> <button type="button" uk-close></button> </div> <div> <a href="#" uk-totop></a> </div> </div> <hr class="uk-margin-medium"> <div class="uk-grid-divider uk-child-width-auto@m" uk-grid> <div> <ul class="uk-subnav uk-subnav-divider" uk-margin> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li class="uk-disabled"><a>Disabled</a></li> </ul> </div> <div> <ul class="uk-subnav uk-subnav-pill" uk-margin> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li class="uk-disabled"><a>Disabled</a></li> </ul> </div> <div> <ul uk-tab> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li class="uk-disabled"><a>Disabled</a></li> </ul> </div> <div> <ul class="uk-iconnav"> <li class="uk-active"><a href="#" uk-icon="icon: plus"></a></li> <li><a href="#" uk-icon="icon: pencil"></a></li> <li><a href="#"><span uk-icon="icon: bag"></span> (2)</a></li> </ul> </div> </div> <hr class="uk-margin-medium"> <div class="uk-grid-divider uk-child-width-expand@m" uk-grid> <div> <ul class="uk-list uk-list-bullet uk-margin-medium"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> <ul class="uk-list uk-list-striped"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> </div> <div> <ul class="uk-list uk-list-divider uk-margin-medium"> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ul> <dl class="uk-description-list uk-description-list-divider"> <dt>Description lists</dt> <dd>A description text</dd> <dt>Description lists</dt> <dd>A description text</dd> </dl> </div> <div> <ul uk-accordion> <li class="uk-open"> <a class="uk-accordion-title" href="#">Item 1</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> </div> </li> <li> <a class="uk-accordion-title" href="#">Item 2</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> </div> </li> <li> <a class="uk-accordion-title" href="#">Item 3</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco.</p> </div> </li> </ul> </div> </div> </div> </div> <div class="uk-section uk-padding-remove-vertical"> <div class="uk-child-width-1-2@s uk-child-width-1-4@l uk-grid-collapse uk-grid-match" uk-grid> <div> <div class="uk-tile uk-tile-default">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.</div> </div> <div> <div class="uk-tile uk-tile-muted">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.</div> </div> <div> <div class="uk-tile uk-tile-primary">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.</div> </div> <div> <div class="uk-tile uk-tile-secondary">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.</div> </div> </div> </div> <div class="uk-section uk-section-default"> <div class="uk-container"> <div class="uk-grid-large uk-flex-middle" uk-grid> <div class="uk-width-expand@m"> <p class="uk-text-large">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.</p> </div> <div class="uk-width-auto@m"> <a class="uk-button uk-button-default uk-button-large" href="#">Button</a> </div> </div> </div> </div> <div class="uk-section uk-section-muted"> <div class="uk-container"> <div class="uk-grid-large uk-flex-middle" uk-grid> <div class="uk-width-expand@m"> <p class="uk-text-large">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.</p> </div> <div class="uk-width-auto@m"> <a class="uk-button uk-button-default uk-button-large" href="#">Button</a> </div> </div> </div> </div> <div class="uk-section uk-section-primary"> <div class="uk-container"> <div class="uk-grid-large uk-flex-middle" uk-grid> <div class="uk-width-expand@m"> <p class="uk-text-large">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.</p> </div> <div class="uk-width-auto@m"> <a class="uk-button uk-button-default uk-button-large" href="#">Button</a> </div> </div> </div> </div> <div class="uk-section uk-section-secondary"> <div class="uk-container"> <div class="uk-grid-large uk-flex-middle" uk-grid> <div class="uk-width-expand@m"> <p class="uk-text-large">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor.</p> </div> <div class="uk-width-auto@m"> <a class="uk-button uk-button-default uk-button-large" href="#">Button</a> </div> </div> </div> </div> <div id="modal" uk-modal> <div class="uk-modal-dialog"> <button class="uk-modal-close-default" type="button" uk-close></button> <div class="uk-modal-header"> <h2 class="uk-modal-title">Headline</h2> </div> <div class="uk-modal-body"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-default uk-modal-close" type="button">Cancel</button> <button class="uk-button uk-button-primary" type="button">Save</button> </div> </div> </div> <div id="modal-search" class="uk-modal-full" uk-modal> <div class="uk-modal-dialog uk-flex uk-flex-center uk-flex-middle" uk-height-viewport> <button class="uk-modal-close-full uk-close-large" type="button" uk-close></button> <div> <ul class="uk-nav-primary uk-nav-center" uk-nav> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> <div class="uk-margin"> <form class="uk-search uk-search-large"> <input class="uk-search-input uk-text-center" type="search" placeholder="Search" aria-label="Search"> </form> </div> </div> </div> </div> <div id="offcanvas" uk-offcanvas="flip: true; overlay: true"> <div class="uk-offcanvas-bar"> <button class="uk-offcanvas-close" type="button" uk-close></button> <ul class="uk-nav uk-nav-default"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> <h3>Title</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div> styler/tests/tests.css000064400000001354151666572120011122 0ustar00.test-img { background-image: repeating-linear-gradient(-45deg, rgba(200,200,200,0.2), rgba(200,200,200,0.2) 25px, rgba(50,50,50,0.2) 25px, rgba(50,50,50,0.2) 50px); } .test-img-opaque { background-image: repeating-linear-gradient(-45deg, #f0f0f0, #f0f0f0 25px, #fcfcfc 25px, #fcfcfc 50px); } .test-img-small { background-image: repeating-linear-gradient(-45deg, rgba(200,200,200,0.2), rgba(200,200,200,0.2) 10px, rgba(50,50,50,0.2) 10px, rgba(50,50,50,0.2) 20px); } .test-inverse-background:not(.uk-navbar-container).uk-dark, .test-inverse-background.uk-navbar-transparent.uk-dark { background: #fff; } .test-inverse-background:not(.uk-navbar-container).uk-light, .test-inverse-background.uk-navbar-transparent.uk-light { background: #343434; } styler/tests/icon.html000064400000003250151666572120011061 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-1 uk-child-width-1-3@s" uk-grid> <div> <h2 class="uk-h5 uk-heading-divider">Text</h2> <ul class="uk-grid-small uk-flex-middle" uk-grid> <li><span uk-icon="icon: home"></span></li> <li><span uk-icon="icon: search"></span></li> <li><span uk-icon="icon: trash"></span></li> </ul> </div> <div> <h2 class="uk-h5 uk-heading-divider">Link</h2> <ul class="uk-grid-small uk-flex-middle" uk-grid> <li><a class="uk-icon-link" href="#" uk-icon="icon: home"></a></li> <li><a class="uk-icon-link" href="#" uk-icon="icon: search"></a></li> <li><a class="uk-icon-link" href="#" uk-icon="icon: trash"></a></li> </ul> </div> <div> <h2 class="uk-h5 uk-heading-divider">Button</h2> <ul class="uk-grid-small uk-flex-middle" uk-grid> <li><a class="uk-icon-button" href="#" uk-icon="icon: home"></a></li> <li><a class="uk-icon-button" href="#" uk-icon="icon: search"></a></li> <li><a class="uk-icon-button" href="#" uk-icon="icon: trash"></a></li> </ul> </div> </div> </div> </div> </div>styler/tests/label.html000064400000000702151666572120011207 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <span class="uk-label">Default</span> <span class="uk-label uk-label-success">Success</span> <span class="uk-label uk-label-warning">Warning</span> <span class="uk-label uk-label-danger">Danger</span> </div> </div> </div>styler/tests/padding.html000064400000002525151666572120011543 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-child-width-expand@m" uk-grid> <div> <div class="uk-padding uk-background-muted"> <h3>Default</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-padding-small uk-background-muted"> <h3>Small</h3> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.</p> </div> </div> <div> <div class="uk-padding-large uk-background-muted"> <h3>Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> </div> </div> </div> </div> styler/tests/comment.html000064400000020177151666572120011602 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container uk-container-small"> <ul class="uk-comment-list"> <li> <article class="uk-comment uk-visible-toggle" tabindex="-1" role="comment"> <header class="uk-comment-header uk-position-relative"> <div class="uk-grid-medium uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas class="uk-comment-avatar test-img-small" width="50" height="50"></canvas> </div> <div class="uk-width-expand"> <h4 class="uk-comment-title uk-margin-remove"><a class="uk-link-reset" href="#">Author</a></h4> <p class="uk-comment-meta uk-margin-remove-top"><a class="uk-link-reset" href="#">12 days ago</a></p> </div> </div> <div class="uk-position-top-right uk-position-small uk-hidden-hover"><a class="uk-button uk-button-text" href="#">Reply</a></div> </header> <div class="uk-comment-body"> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> </div> </article> </li> <li> <article class="uk-comment uk-visible-toggle" tabindex="-1" role="comment"> <header class="uk-comment-header uk-position-relative"> <div class="uk-grid-medium uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas class="uk-comment-avatar test-img-small" width="50" height="50"></canvas> </div> <div class="uk-width-expand"> <h4 class="uk-comment-title uk-margin-remove"><a class="uk-link-reset" href="#">Author</a></h4> <p class="uk-comment-meta uk-margin-remove-top"><a class="uk-link-reset" href="#">12 days ago</a></p> </div> </div> <div class="uk-position-top-right uk-position-small uk-hidden-hover"><a class="uk-button uk-button-text" href="#">Reply</a></div> </header> <div class="uk-comment-body"> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> </div> </article> <ul> <li> <article class="uk-comment uk-comment-primary uk-visible-toggle" tabindex="-1" role="comment"> <header class="uk-comment-header uk-position-relative"> <div class="uk-grid-medium uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas class="uk-comment-avatar test-img-small" width="50" height="50"></canvas> </div> <div class="uk-width-expand"> <h4 class="uk-comment-title uk-margin-remove"><a class="uk-link-reset" href="#">Author</a></h4> <p class="uk-comment-meta uk-margin-remove-top"><a class="uk-link-reset" href="#">12 days ago</a></p> </div> </div> <div class="uk-position-top-right uk-position-small uk-hidden-hover"><a class="uk-button uk-button-text" href="#">Reply</a></div> </header> <div class="uk-comment-body"> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> </div> </article> <ul> <li> <article class="uk-comment uk-visible-toggle" tabindex="-1" role="comment"> <header class="uk-comment-header uk-position-relative"> <div class="uk-grid-medium uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas class="uk-comment-avatar test-img-small" width="50" height="50"></canvas> </div> <div class="uk-width-expand"> <h4 class="uk-comment-title uk-margin-remove"><a class="uk-link-reset" href="#">Author</a></h4> <p class="uk-comment-meta uk-margin-remove-top"><a class="uk-link-reset" href="#">12 days ago</a></p> </div> </div> <div class="uk-position-top-right uk-position-small uk-hidden-hover"><a class="uk-button uk-button-text" href="#">Reply</a></div> </header> <div class="uk-comment-body"> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> </div> </article> </li> </ul> </li> <li> <article class="uk-comment uk-visible-toggle" tabindex="-1" role="comment"> <header class="uk-comment-header uk-position-relative"> <div class="uk-grid-medium uk-flex-middle" uk-grid> <div class="uk-width-auto"> <canvas class="uk-comment-avatar test-img-small" width="50" height="50"></canvas> </div> <div class="uk-width-expand"> <h4 class="uk-comment-title uk-margin-remove"><a class="uk-link-reset" href="#">Author</a></h4> <p class="uk-comment-meta uk-margin-remove-top"><a class="uk-link-reset" href="#">12 days ago</a></p> </div> </div> <div class="uk-position-top-right uk-position-small uk-hidden-hover"><a class="uk-button uk-button-text" href="#">Reply</a></div> </header> <div class="uk-comment-body"> <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> </div> </article> </li> </ul> </li> </ul> </div> </div>styler/tests/overlay.html000064400000003004151666572120011607 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-child-width-1-3@m" uk-grid> <div> <h2>Default</h2> <div class="uk-inline"> <canvas width="800" height="600" class="test-img"></canvas> <div class="uk-overlay uk-overlay-default uk-position-bottom"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> </div> </div> </div> <div> <h2>Primary</h2> <div class="uk-inline"> <canvas width="800" height="600" class="test-img"></canvas> <div class="uk-overlay uk-overlay-primary uk-position-bottom"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p> </div> </div> </div> <div> <h2>Icon</h2> <div class="uk-inline"> <canvas width="800" height="600" class="test-img"></canvas> <div class="uk-position-center"> <span uk-overlay-icon></span> </div> </div> </div> </div> </div> </div> </div>styler/tests/dropbar.html000064400000010713151666572120011564 0ustar00<style> .test { display: block; position: relative; width: 100%; } </style> <nav class="uk-navbar-container"> <div class="uk-container"> <div uk-navbar> <div class="uk-navbar-left"> <ul class="uk-navbar-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> </div> </div> </div> </nav> <div class="uk-dropbar uk-dropbar-top test"> <div class="uk-container"> <div class="uk-child-width-1-3" uk-grid> <div> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> <div> <ul class="uk-nav uk-nav-secondary"> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> </ul> </div> <div>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</div> </div> </div> </div> <div class="uk-section uk-section-default"> <div class="uk-container"> <div class="uk-child-width-1-4@m uk-grid-match" uk-grid> <div> <div class="uk-dropbar uk-dropbar-top test"> <h3>Top</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-dropbar uk-dropbar-bottom test"> <h3>Bottom</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-dropbar uk-dropbar-left test"> <h3>Left</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-dropbar uk-dropbar-right test"> <h3>Right</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> </div> </div> </div>styler/tests/animation.html000064400000006253151666572120012116 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-child-width-1-2@s uk-child-width-1-3@m uk-margin-large-top" uk-grid> <div class="uk-animation-toggle" tabindex="0"> <div class="uk-card uk-card-default uk-card-body uk-animation-fade"> <h3 class="uk-card-title">Fade</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div class="uk-animation-toggle" tabindex="0"> <div class="uk-card uk-card-default uk-card-body uk-animation-scale-up"> <h3 class="uk-card-title">Scale Up</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div class="uk-animation-toggle" tabindex="0"> <div class="uk-card uk-card-default uk-card-body uk-animation-scale-up uk-animation-fast"> <h3 class="uk-card-title">Fast</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div class="uk-animation-toggle" tabindex="0"> <div class="uk-card uk-card-default uk-card-body uk-animation-slide-left"> <h3 class="uk-card-title">Slide</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div class="uk-animation-toggle" tabindex="0"> <div class="uk-card uk-card-default uk-card-body uk-animation-slide-left-small"> <h3 class="uk-card-title">Slide Small</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div class="uk-animation-toggle" tabindex="0"> <div class="uk-card uk-card-default uk-card-body uk-animation-slide-left-medium"> <h3 class="uk-card-title">Slide Medium</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> </div> <div class="uk-inline-clip uk-grid-margin"> <canvas class="uk-animation-kenburns uk-transform-origin-center-right test-img" width="1600" height="200"></canvas> <div class="uk-position-center"> <h3 class="uk-margin-remove-bottom">Ken Burns</h3> </div> </div> </div> </div> </div>styler/tests/align.html000064400000004374151666572120011233 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-child-width-1-2@m uk-grid-large" uk-grid> <div> <div class="uk-align-left"> <canvas width="250" height="170" class="test-img"></canvas> </div> <p class="uk-margin-remove">Lorem ipsum dolor sit amet, consecte tur adipiscing elit et, sed do eiusmod tempor ut incididunt est labore et dolore magna aliqua.</p> <p>Lorem ipsum dolor sit amet, consete tur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> </div> <div> <div class="uk-align-right"> <canvas width="250" height="170" class="test-img"></canvas> </div> <p class="uk-margin-remove">Lorem ipsum dolor sit amet, consecte tur adipiscing elit et, sed do eiusmod tempor ut incididunt est labore et dolore magna aliqua.</p> <p>Lorem ipsum dolor sit amet, consete tur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p> </div> </div> </div> </div> </div> styler/tests/button.html000064400000006154151666572120011452 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-grid-medium uk-child-width-auto uk-flex-middle uk-margin-large" uk-grid> <div> <button class="uk-button uk-button-default">Default</button> </div> <div> <button class="uk-button uk-button-primary">Primary</button> </div> <div> <button class="uk-button uk-button-secondary">Secondary</button> </div> <div> <button class="uk-button uk-button-danger">Danger</button> </div> <div> <button class="uk-button uk-button-default" disabled>Disabled</button> </div> <div> <button class="uk-button uk-button-text">Text</button> </div> <div> <button class="uk-button uk-button-link">Link</button> </div> </div> <hr> <div class="uk-grid-medium uk-child-width-auto uk-flex-middle uk-margin-large" uk-grid> <div> <button class="uk-button uk-button-large uk-button-default">Default</button> </div> <div> <button class="uk-button uk-button-large uk-button-primary">Primary</button> </div> <div> <button class="uk-button uk-button-large uk-button-secondary">Secondary</button> </div> <div> <button class="uk-button uk-button-large uk-button-danger">Danger</button> </div> <div> <button class="uk-button uk-button-large uk-button-default" disabled>Disabled</button> </div> <div> <button class="uk-button uk-button-large uk-button-text">Text</button> </div> </div> <hr> <div class="uk-grid-medium uk-child-width-auto uk-flex-middle uk-margin-large" uk-grid> <div> <button class="uk-button uk-button-small uk-button-default">Default</button> </div> <div> <button class="uk-button uk-button-small uk-button-primary">Primary</button> </div> <div> <button class="uk-button uk-button-small uk-button-secondary">Secondary</button> </div> <div> <button class="uk-button uk-button-small uk-button-danger">Danger</button> </div> <div> <button class="uk-button uk-button-small uk-button-default" disabled>Disabled</button> </div> <div> <button class="uk-button uk-button-small uk-button-text">Text</button> </div> </div> </div> </div> </div> styler/tests/description-list.html000064400000003336151666572120013432 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-2@s uk-grid-large" uk-grid> <div> <h3>Default</h3> <dl class="uk-description-list"> <dt>Description Term</dt> <dd>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</dd> <dt>Description Term</dt> <dd>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</dd> <dt>Description Term</dt> <dd>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</dd> </dl> </div> <div> <h3>Divider</h3> <dl class="uk-description-list uk-description-list-divider"> <dt>Description Term</dt> <dd>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</dd> <dt>Description Term</dt> <dd>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</dd> <dt>Description Term</dt> <dd>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</dd> </dl> </div> </div> </div> </div> </div> styler/tests/search.html000064400000004035151666572120011400 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <h2>Default</h2> <div class="uk-margin" uk-margin> <form class="uk-search uk-search-default"> <span uk-search-icon></span> <input class="uk-search-input" type="search" placeholder="Search" aria-label="Search"> </form> </div> <h2>Navbar</h2> </div> <div class="uk-navbar-container uk-margin"> <div class="uk-container uk-container-small"> <div class="uk-navbar"> <div class="uk-navbar-left"> <div class="uk-navbar-item"> <form class="uk-search uk-search-navbar"> <span uk-search-icon></span> <input class="uk-search-input" type="search" placeholder="Search" aria-label="Search"> </form> </div> </div> </div> </div> </div> <div class="uk-container uk-container-small"> <h2>Medium</h2> <div class="uk-margin" uk-margin> <form class="uk-search uk-search-medium"> <span uk-search-icon></span> <input class="uk-search-input" type="search" placeholder="Search" aria-label="Search"> </form> </div> <h2>Large</h2> <div class="uk-margin" uk-margin> <form class="uk-search uk-search-large"> <span uk-search-icon></span> <input class="uk-search-input" type="search" placeholder="Search" aria-label="Search"> </form> </div> <h2>Toggle</h2> <a class="uk-search-toggle" href="#" uk-search-icon></a> </div> </div> </div>styler/tests/marker.html000064400000001264151666572120011415 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <div class="uk-inline"> <canvas width="800" height="400" class="test-img"></canvas> <a class="uk-position-absolute uk-transform-center" style="left: 20%; top: 30%" href="#" uk-marker></a> <a class="uk-position-absolute uk-transform-center" style="left: 60%; top: 40%" href="#" uk-marker></a> <a class="uk-position-absolute uk-transform-center" style="left: 80%; top: 70%" href="#" uk-marker></a> </div> </div> </div> </div>styler/tests/offcanvas.html000064400000003062151666572120012100 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <button class="uk-button uk-button-default" uk-toggle="target: #offcanvas-test" type="button">Open</button> </div> </div> </div> <div id="offcanvas-test" uk-offcanvas="overlay: true"> <div class="uk-offcanvas-bar"> <button class="uk-offcanvas-close" type="button" uk-close></button> <ul class="uk-nav uk-nav-default"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> <h3>Title</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div>styler/tests/spinner.html000064400000000354151666572120011611 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <div uk-spinner></div> </div> </div> </div>styler/tests/badge.html000064400000000656151666572120011202 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <a class="uk-badge" href="#">1</a> <span class="uk-badge">2</span> <span class="uk-badge">10</span> <span class="uk-badge">100</span> <span class="uk-badge">Text</span> </div> </div> </div>styler/tests/tile.html000064400000014132151666572120011067 0ustar00<div class="uk-section"> <div class="uk-child-width-1-2@s uk-child-width-1-4@l uk-grid-collapse uk-grid-match" uk-grid> <div> <div class="uk-tile uk-tile-default uk-tile-hover"> <h3>Default</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p uk-margin> <a class="uk-button uk-button-default" href="#">Button</a> <a class="uk-button uk-button-text uk-margin-small-left" href="#">Button</a> </p> </div> </div> <div> <div class="uk-tile uk-tile-muted uk-tile-hover"> <h3>Muted</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p uk-margin> <a class="uk-button uk-button-default" href="#">Button</a> <a class="uk-button uk-button-text uk-margin-small-left" href="#">Button</a> </p> </div> </div> <div> <div class="uk-tile uk-tile-primary uk-tile-hover"> <h3>Primary</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p uk-margin> <a class="uk-button uk-button-default" href="#">Button</a> <a class="uk-button uk-button-text uk-margin-small-left" href="#">Button</a> </p> </div> </div> <div> <div class="uk-tile uk-tile-secondary uk-tile-hover"> <h3>Secondary</h3> <p>Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> <p uk-margin> <a class="uk-button uk-button-default" href="#">Button</a> <a class="uk-button uk-button-text uk-margin-small-left" href="#">Button</a> </p> </div> </div> </div> </div> <div class="uk-section"> <div class="uk-child-width-1-2@s uk-child-width-1-4@l uk-grid-collapse uk-grid-match" uk-grid> <div> <div class="uk-tile uk-tile-default uk-tile-small"> <h3>Small</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-muted uk-tile-small"> <h3>Small</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-primary uk-tile-small"> <h3>Small</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-secondary uk-tile-small"> <h3>Small</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> </div> </div> <div class="uk-section"> <div class="uk-child-width-1-2@s uk-child-width-1-4@l uk-grid-collapse uk-grid-match" uk-grid> <div> <div class="uk-tile uk-tile-default uk-tile-large"> <h3>Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-muted uk-tile-large"> <h3>Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-primary uk-tile-large"> <h3>Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-secondary uk-tile-large"> <h3>Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> </div> </div> <div class="uk-section"> <div class="uk-child-width-1-2@s uk-child-width-1-4@l uk-grid-collapse uk-grid-match" uk-grid> <div> <div class="uk-tile uk-tile-default uk-tile-xlarge"> <h3>X-Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-muted uk-tile-xlarge"> <h3>X-Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-primary uk-tile-xlarge"> <h3>X-Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-tile uk-tile-secondary uk-tile-xlarge"> <h3>X-Large</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> </div> </div>styler/tests/accordion.html000064400000004404151666572120012074 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <ul uk-accordion="multiple: true"> <li class="uk-open"> <a class="uk-accordion-title" href="#">Item 1</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> </li> <li> <a class="uk-accordion-title" href="#">Item 2</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> </li> <li> <a class="uk-accordion-title" href="#">Item 3</a> <div class="uk-accordion-content"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> </li> </ul> </div> </div> </div>styler/tests/width.html000064400000003516151666572120011255 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <div class="uk-grid-small uk-grid-match uk-child-width-expand" uk-grid> <div class="uk-width-small"><div class="uk-card uk-card-small uk-card-body uk-card-primary">Small</div></div> <div><div class="uk-card uk-card-small uk-card-body uk-background-muted"></div></div> </div> <div class="uk-grid-small uk-grid-match uk-child-width-expand" uk-grid> <div class="uk-width-medium"><div class="uk-card uk-card-small uk-card-body uk-card-primary">Medium</div></div> <div><div class="uk-card uk-card-small uk-card-body uk-background-muted"></div></div> </div> <div class="uk-grid-small uk-grid-match uk-child-width-expand" uk-grid> <div class="uk-width-large"><div class="uk-card uk-card-small uk-card-body uk-card-primary">Large</div></div> <div><div class="uk-card uk-card-small uk-card-body uk-background-muted"></div></div> </div> <div class="uk-grid-small uk-grid-match uk-child-width-expand" uk-grid> <div class="uk-width-xlarge"><div class="uk-card uk-card-small uk-card-body uk-card-primary">X-Large</div></div> <div><div class="uk-card uk-card-small uk-card-body uk-background-muted"></div></div> </div> <div class="uk-grid-small uk-grid-match uk-child-width-expand" uk-grid> <div class="uk-width-2xlarge"><div class="uk-card uk-card-small uk-card-body uk-card-primary">2X-Large</div></div> <div><div class="uk-card uk-card-small uk-card-body uk-background-muted"></div></div> </div> </div> </div> </div>styler/tests/height.html000064400000001702151666572120011401 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-3@s uk-grid-small" uk-grid> <div> <div class="uk-panel uk-background-muted uk-height-small"> <h3 class="uk-position-center uk-h5">Small</h3> </div> </div> <div> <div class="uk-panel uk-background-muted uk-height-medium"> <h3 class="uk-position-center uk-h5">Medium</h3> </div> </div> <div> <div class="uk-panel uk-background-muted uk-height-large"> <h3 class="uk-position-center uk-h5">Large</h3> </div> </div> </div> </div> </div> </div> styler/tests/breadcrumb.html000064400000001305151666572120012236 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <nav aria-label="Breadcrumb"> <ul class="uk-breadcrumb"> <li><a href="#">Home</a></li> <li><a href="#">Linked Category</a></li> <li class="uk-disabled"><span>Disabled Category</span></li> <li><span aria-current="page">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</span></li> </ul> </nav> </div> </div> </div> styler/tests/iconnav.html000064400000003021151666572120011562 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-2@s" uk-grid> <div> <h2 class="uk-h5 uk-heading-divider">Horizontal</h2> <ul class="uk-iconnav"> <li class="uk-active"><a href="#" uk-icon="icon: plus"></a></li> <li><a href="#" uk-icon="icon: pencil"></a></li> <li><a href="#" uk-icon="icon: files"></a></li> <li><a href="#"><span uk-icon="icon: bag"></span> (2)</a></li> <li><a href="#"><span uk-icon="icon: cart"></span> <span class="uk-badge">2</span></a></li> </ul> </div> <div> <h2 class="uk-h5 uk-heading-divider">Vertical</h2> <ul class="uk-iconnav uk-iconnav-vertical"> <li class="uk-active"><a href="#" uk-icon="icon: plus"></a></li> <li><a href="#" uk-icon="icon: pencil"></a></li> <li><a href="#" uk-icon="icon: files"></a></li> <li><a href="#"><span uk-icon="icon: bag"></span> (2)</a></li> <li><a href="#"><span uk-icon="icon: cart"></span> <span class="uk-badge">2</span></a></li> </ul> </div> </div> </div> </div> </div>styler/tests/transition.html000064400000013167151666572120012333 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-grid-small uk-child-width-1-3@s uk-child-width-1-5@m uk-text-center" uk-grid> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-transition-fade uk-position-bottom uk-overlay uk-overlay-default">Overlay</div> </div> <p class="uk-margin-small-top">Fade</p> </div> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-position-center"> <div class="uk-transition-scale-up uk-overlay uk-overlay-default">Overlay</div> </div> </div> <p class="uk-margin-small-top">Scale Up</p> </div> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-transition-slide-bottom uk-position-bottom uk-overlay uk-overlay-default">Overlay</div> </div> <p class="uk-margin-small-top">Slide</p> </div> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-position-center uk-position-small"> <div class="uk-transition-slide-bottom-small uk-overlay uk-overlay-default uk-flex uk-flex-center uk-flex-middle">Overlay</div> </div> </div> <p class="uk-margin-small-top">Slide Small</p> </div> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-position-center uk-position-small"> <div class="uk-transition-slide-bottom-medium uk-overlay uk-overlay-default uk-flex uk-flex-center uk-flex-middle">Overlay</div> </div> </div> <p class="uk-margin-small-top">Slide Medium</p> </div> </div> <h2>Slow</h2> <div class="uk-grid-small uk-child-width-1-3@s uk-child-width-1-5@m uk-text-center" uk-grid> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-transition-fade uk-transition-slow uk-position-bottom uk-overlay uk-overlay-default">Overlay</div> </div> <p class="uk-margin-small-top">Fade</p> </div> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-position-center"> <div class="uk-transition-scale-up uk-transition-slow uk-overlay uk-overlay-default">Overlay</div> </div> </div> <p class="uk-margin-small-top">Scale Up</p> </div> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-transition-slide-bottom uk-transition-slow uk-position-bottom uk-overlay uk-overlay-default">Overlay</div> </div> <p class="uk-margin-small-top">Slide</p> </div> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-position-center uk-position-small"> <div class="uk-transition-slide-bottom-small uk-transition-slow uk-overlay uk-overlay-default uk-flex uk-flex-center uk-flex-middle">Overlay</div> </div> </div> <p class="uk-margin-small-top">Slide Small</p> </div> <div class="uk-text-center"> <div class="uk-inline-clip uk-transition-toggle" tabindex="0"> <canvas width="600" height="500" class="test-img"></canvas> <div class="uk-position-center uk-position-small"> <div class="uk-transition-slide-bottom-medium uk-transition-slow uk-overlay uk-overlay-default uk-flex uk-flex-center uk-flex-middle">Overlay</div> </div> </div> <p class="uk-margin-small-top">Slide Medium</p> </div> </div> </div> </div> </div> styler/tests/subnav.html000064400000007053151666572120011434 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-width-large uk-margin-auto"> <h2 class="uk-h5 uk-heading-divider">Default</h2> <ul class="uk-subnav" uk-margin> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li><a href="#">Item</a></li> <li><span>Disabled</span></li> </ul> <h2 class="uk-h5 uk-heading-divider uk-margin-large-top">Divider</h2> <ul class="uk-subnav uk-subnav-divider" uk-margin> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li><a href="#">Item</a></li> <li><span>Disabled</span></li> </ul> <h2 class="uk-h5 uk-heading-divider uk-margin-large-top">Pill</h2> <ul class="uk-subnav uk-subnav-pill" uk-margin> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent <span uk-drop-parent-icon></span></a> <div uk-dropdown="mode: click"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-header">Header</li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#">Item</a></li> </ul> </div> </li> <li><a href="#">Item</a></li> <li><span>Disabled</span></li> </ul> </div> </div> </div> </div>styler/tests/position.html000064400000005751151666572120012005 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-child-width-expand@m" uk-grid> <div> <h2>Small</h2> <div class="uk-inline"> <canvas width="1600" height="1200" class="test-img"></canvas> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-small uk-position-top-left">Top Left</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-small uk-position-top-center">Top Center</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-small uk-position-top-right">Top Right</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-small uk-position-center-left">Center Left</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-small uk-position-center-right">Center Right</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-small uk-position-bottom-left">Bottom Left</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-small uk-position-bottom-center">Bottom Center</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-small uk-position-bottom-right">Bottom Right</div> </div> </div> <div> <h2>Medium</h2> <div class="uk-inline"> <canvas width="1600" height="1200" class="test-img"></canvas> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-medium uk-position-top-left">Top Left</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-medium uk-position-top-center">Top Center</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-medium uk-position-top-right">Top Right</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-medium uk-position-center-left">Center Left</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-medium uk-position-center-right">Center Right</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-medium uk-position-bottom-left">Bottom Left</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-medium uk-position-bottom-center">Bottom Center</div> <div class="uk-overlay uk-overlay-default uk-padding-small uk-position-medium uk-position-bottom-right">Bottom Right</div> </div> </div> </div> </div> </div> </div> styler/tests/progress.html000064400000000430151666572120011772 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <progress class="uk-progress" value="45" max="100"></progress> </div> </div> </div>styler/tests/form.html000064400000027707151666572120011111 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container"> <div uk-grid> <div class="uk-width-2-3@s"> <h2>Horizontal</h2> <form class="uk-form-horizontal"> <div class="uk-margin"> <label class="uk-form-label" for="form-h-text">Text</label> <div class="uk-form-controls"> <input class="uk-input uk-form-width-large" id="form-h-text" type="text" placeholder="Some text..."> </div> </div> <div class="uk-margin"> <label class="uk-form-label" for="form-h-select">Select</label> <div class="uk-form-controls"> <select class="uk-select uk-form-width-large" id="form-h-select"> <option>Option 01</option> <option>Option 02</option> </select> </div> </div> <div class="uk-margin"> <label class="uk-form-label" for="form-h-textarea">Textarea</label> <div class="uk-form-controls"> <textarea class="uk-textarea uk-form-width-large" id="form-h-textarea" rows="5" placeholder="Some text..."></textarea> </div> </div> <div class="uk-margin"> <span class="uk-form-label">Radio</span> <div class="uk-form-controls uk-form-controls-text"> <div class="uk-grid-small uk-child-width-auto" uk-grid> <label><input class="uk-radio" type="radio" name="radio2"> A</label> <label><input class="uk-radio" type="radio" name="radio2"> B</label> <label><input class="uk-radio" type="radio" name="radio2"> C</label> <label><input class="uk-radio" type="radio" name="radio2" disabled> D</label> </div> </div> </div> <div class="uk-margin"> <span class="uk-form-label">Checkbox</span> <div class="uk-form-controls uk-form-controls-text"> <div class="uk-grid-small uk-child-width-auto" uk-grid> <label><input class="uk-checkbox" type="checkbox"> A</label> <label><input class="uk-checkbox" type="checkbox"> B</label> <label><input class="uk-checkbox" type="checkbox"> C</label> <label><input class="uk-checkbox" type="checkbox" disabled> D</label> </div> </div> </div> <div class="uk-margin"> <label class="uk-form-label" for="form-h-multiple">Multiple</label> <div class="uk-form-controls"> <select class="uk-select uk-form-width-large" id="form-h-multiple" multiple> <option>Option 01</option> <option>Option 02</option> <option>Option 03</option> <option>Option 04</option> </select> </div> </div> <div class="uk-margin"> <label class="uk-form-label" for="form-h-range">Range</label> <div class="uk-form-controls uk-form-controls-text"> <input class="uk-range uk-form-width-large" id="form-h-range" type="range" value="2" min="0" max="10" step="0.1"> </div> </div> </form> <h2>Sizes</h2> <form> <div class="uk-margin" uk-margin> <textarea class="uk-textarea uk-form-width-small uk-form-large" rows="2" placeholder="Large" aria-label="Large"></textarea> <input class="uk-input uk-form-width-small uk-form-large" type="text" placeholder="Large" aria-label="Large"> <select class="uk-select uk-form-width-small uk-form-large" aria-label="Large"> <option>Option 01</option> <option>Option 02</option> </select> <button class="uk-button uk-button-default uk-button-large">Button</button> <label><input class="uk-checkbox" type="checkbox"> Checkbox</label> </div> <div class="uk-margin" uk-margin> <textarea class="uk-textarea uk-form-width-small" rows="2" placeholder="Default" aria-label="Default"></textarea> <input class="uk-input uk-form-width-small" type="text" placeholder="Default" aria-label="Default"> <select class="uk-select uk-form-width-small" aria-label="Default"> <option>Option 01</option> <option>Option 02</option> </select> <button class="uk-button uk-button-default">Button</button> <label><input class="uk-checkbox" type="checkbox"> Checkbox</label> </div> <div class="uk-margin" uk-margin> <textarea class="uk-textarea uk-form-width-small uk-form-small" rows="2" placeholder="Small" aria-label="Small"></textarea> <input class="uk-input uk-form-width-small uk-form-small" type="text" placeholder="Small" aria-label="Small"> <select class="uk-select uk-form-width-small uk-form-small" aria-label="Small"> <option>Option 01</option> <option>Option 02</option> </select> <button class="uk-button uk-button-default uk-button-small">Button</button> <label><input class="uk-checkbox" type="checkbox"> Checkbox</label> </div> </form> <h2>Widths</h2> <form> <div class="uk-margin"> <input class="uk-input uk-form-width-large" type="text" placeholder="Large" aria-label="Large"> </div> <div class="uk-margin"> <input class="uk-input uk-form-width-medium" type="text" placeholder="Medium" aria-label="Medium"> </div> <div class="uk-margin"> <input class="uk-input uk-form-width-small" type="text" placeholder="Small" aria-label="Small"> </div> <div class="uk-margin"> <input class="uk-input uk-form-width-xsmall" type="text" placeholder="Xsmall" aria-label="Xsmall"> </div> </form> </div> <form class="uk-form-stacked uk-width-1-3@s"> <h2>Stacked</h2> <div class="uk-margin"> <span class="uk-form-label">States and styles</span> <div class="uk-margin-small"> <input class="uk-input" type="text" placeholder=":disabled" aria-label="disabled" disabled> </div> <div class="uk-margin-small"> <select class="uk-select uk-form-width-large" aria-label="disabled" disabled> <option>Option 01</option> <option>Option 02</option> </select> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-danger" type="text" placeholder="form-danger" aria-label="form-danger" value="form-danger"> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-success" type="text" placeholder="form-success" aria-label="form-success" value="form-success"> </div> <div class="uk-margin-small"> <input class="uk-input uk-form-blank" type="text" placeholder="form-blank" aria-label="form-blank"> </div> </div> <fieldset class="uk-fieldset"> <legend class="uk-legend">Legend</legend> <div class="uk-margin"> <label class="uk-form-label" for="form-s-text">Text</label> <input class="uk-input" id="form-s-text" type="text" placeholder="Some text..."> </div> <div class="uk-margin"> <label class="uk-form-label" for="form-s-select">Select</label> <select class="uk-select" id="form-s-select"> <option>Option 01</option> <option>Option 02</option> </select> </div> <div class="uk-margin"> <label class="uk-form-label" for="form-s-textarea">Textarea</label> <textarea class="uk-textarea" id="form-s-textarea" rows="5" placeholder="Some text..."></textarea> </div> <div class="uk-margin"> <span class="uk-form-label">Radio</span> <label><input class="uk-radio" type="radio" name="radio1"> Option 01</label><br> <label><input class="uk-radio" type="radio" name="radio1"> Option 02</label> </div> <div class="uk-margin"> <span class="uk-form-label">Checkbox</span> <label><input class="uk-checkbox" type="checkbox"> Option 01</label><br> <label><input class="uk-checkbox" type="checkbox"> Option 02</label> </div> </fieldset> <div class="uk-margin"> <span class="uk-form-label">Icon</span> <div class="uk-margin-small"> <div class="uk-inline"> <span class="uk-form-icon" uk-icon="icon: user"></span> <input class="uk-input" type="text" aria-label="Icon"> </div> </div> </div> <div class="uk-margin"> <span class="uk-form-label">Icon Link</span> <div class="uk-margin-small"> <div class="uk-inline"> <a class="uk-form-icon" href="#" uk-icon="icon: pencil"></a> <input class="uk-input" type="text" aria-label="Icon Link"> </div> </div> </div> </form> </div> </div> </div>styler/tests/dropdown.html000064400000010576151666572120011776 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <style> .test { display: block; position: relative; width: 330px; } </style> <div class="uk-child-width-auto uk-flex-center" uk-grid> <div> <div class="uk-drop uk-dropdown test"> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a> <ul> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> </ul> </li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li class="uk-active"><a href="#">Active</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> <div> <div class="uk-drop uk-dropdown test"> <ul class="uk-nav uk-nav-secondary"> <li class="uk-active"><a href="#"><div>Active<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> <li><a href="#"><div>Item<div class="uk-nav-subtitle">Subtitle lorem ipsum dolor sit amet, consectetur adipiscing.</div></div></a></li> </ul> </div> </div> <div> <button class="uk-button uk-button-default" type="button">Hover</button> <div uk-dropdown> <ul class="uk-nav uk-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </div> </div> </div> </div> </div>styler/tests/theme.html000064400000021126151666572120011235 0ustar00<div class="tm-page-container tm-page-margin-top tm-page-margin-bottom"> <div class="tm-page uk-margin-auto"> <div class="tm-toolbar tm-toolbar-default"> <div class="uk-container uk-flex uk-flex-middle"> <div> <div class="uk-grid-medium uk-child-width-auto uk-flex-middle" uk-grid="margin: uk-margin-small-top"> <div> <div class="uk-panel">Toolbar Left</div> </div> <div> <div class="uk-panel">Lorem ipsum dolor.</div> </div> </div> </div> <div class="uk-margin-auto-left"> <div class="uk-grid-medium uk-child-width-auto uk-flex-middle" uk-grid="margin: uk-margin-small-top"> <div> <div class="uk-panel">Toolbar Right</div> </div> <div> <div class="uk-panel">Lorem ipsum dolor.</div> </div> </div> </div> </div> </div> <div class="tm-header"> <div class="tm-headerbar-top tm-headerbar-default"> <div class="uk-container uk-container-expand"> <div class="uk-text-center"> <a href="#" class="uk-logo">Logo</a> </div> <div class="tm-headerbar-stacked uk-grid-medium uk-child-width-auto uk-flex-center uk-flex-middle" uk-grid> <div> <div class="uk-panel">Headerbar Top</div> </div> <div> <div class="uk-panel"> <a class="uk-search-toggle" href="#" uk-search-icon></a> </div> </div> </div> </div> </div> <nav class="uk-navbar-container"> <div class="uk-container"> <div uk-navbar> <div class="uk-navbar-center"> <ul class="uk-navbar-nav"> <li class="uk-active"><a href="#">Active</a></li> <li> <a href="#">Parent</a> <div class="uk-navbar-dropdown"> <ul class="uk-nav uk-navbar-dropdown-nav"> <li class="uk-active"><a href="#">Active</a></li> <li class="uk-parent"> <a href="#">Parent</a> <ul class="uk-nav-sub"> <li><a href="#">Sub item</a></li> <li><a href="#">Sub item</a></li> </ul> </li> <li class="uk-nav-header">Header</li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: table"></span> Item</a></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: thumbnails"></span> Item</a></li> <li class="uk-nav-divider"></li> <li><a href="#"><span class="uk-margin-small-right" uk-icon="icon: trash"></span> Item</a></li> </ul> </div> </li> <li><a href="#">Item</a></li> <li><a href="#">Item</a></li> </ul> </div> </div> </div> </nav> <div class="tm-headerbar-bottom tm-headerbar-default"> <div class="uk-container uk-container-expand"> <div class="uk-grid-medium uk-child-width-auto uk-flex-center uk-flex-middle" uk-grid> <div> <div class="uk-panel">Headerbar Bottom</div> </div> <div> <div class="uk-panel"> <a class="uk-search-toggle" href="#" uk-search-icon></a> </div> </div> </div> </div> </div> </div> <div id="tm-main" class="tm-main uk-section uk-section-default" uk-height-viewport="expand: true"> <div class="uk-position-relative"> <div class="uk-container uk-container-small"> <div uk-grid> <div class="uk-width-expand@m"> <h1 class="uk-h2">Headline</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> </div> <aside id="tm-sidebar" class="tm-sidebar uk-width-1-3@m"> <div class="uk-child-width-1-1" uk-grid> <div> <div class="uk-panel"> <h3>Sidebar</h3> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> <div> <div class="uk-card uk-card-body uk-card-default"> <h3 class="uk-card-title">Default</h3> <p>Lorem ipsum dolor sit amet, consectetur.</p> </div> </div> </div> </aside> </div> </div> <div class="tm-section-title uk-position-center-left uk-position-medium uk-text-nowrap"> <div class="tm-rotate-180">Section Title</div> </div> </div> </div> <div class="uk-section uk-section-default"> <div class="uk-container uk-container-small"> <div class="uk-child-width-1-2 uk-grid-large" uk-grid> <div> <canvas width="800" height="600" class="tm-mask-default test-img-opaque"></canvas> </div> <div> <div class="uk-inline tm-box-decoration-default"> <canvas width="800" height="600" class="test-img-opaque"></canvas> </div> </div> <div> <div class="uk-inline tm-box-decoration-primary"> <canvas width="800" height="600" class="test-img-opaque"></canvas> </div> </div> <div> <div class="uk-inline tm-box-decoration-secondary"> <canvas width="800" height="600" class="test-img-opaque"></canvas> </div> </div> <div> <div class="uk-inline uk-transition-toggle tm-transition-border"> <canvas width="800" height="600" class="test-img-opaque"></canvas> </div> </div> </div> </div> </div> </div> </div>styler/tests/column.html000064400000005006151666572120011427 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container"> <div class="uk-column-1-2@s uk-column-1-3@m"> <h2>Default</h2> <p class="uk-text-lead">Lorem ipsum dolor sit amet, consectetur adipiscing elit sed do eiusmod tempor.</p> <p class="uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div class="uk-column-divider uk-margin-large uk-column-1-2@s uk-column-1-3@m"> <h2>Divider</h2> <p class="uk-text-lead">Lorem ipsum dolor sit amet, consectetur adipiscing elit sed do eiusmod tempor.</p> <p class="uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> </div> </div> </div> styler/tests/leader.html000064400000001715151666572120011371 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div class="uk-grid-small" uk-grid> <div class="uk-width-expand" uk-leader>Lorem ipsum dolor sit amet</div> <div>$20.90</div> </div> <div class="uk-grid-small" uk-grid> <div class="uk-width-expand" uk-leader>Consectetur adipisicing elit sed do eiusmod</div> <div>$24.50</div> </div> <div class="uk-grid-small" uk-grid> <div class="uk-width-expand" uk-leader>Tempor incididunt</div> <div>$32.10</div> </div> <div class="uk-grid-small" uk-grid> <div class="uk-width-expand" uk-leader>Ut labore et dolore magna</div> <div>$160.80</div> </div> </div> </div> </div> styler/tests/divider.html000064400000005072151666572120011563 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <h2>Divider Icon</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <hr class="uk-divider-icon"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <h2>Divider Small</h2> <hr class="uk-divider-small"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <hr class="uk-divider-small"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <h2>Divider Vertical</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> <hr class="uk-divider-vertical"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.</p> </div> </div> </div>styler/tests/alert.html000064400000003416151666572120011244 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-container-small"> <div uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p><strong>Alert!</strong> Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-alert-primary" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p><strong>Primary!</strong> Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-alert-success" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p><strong>Success!</strong> Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-alert-warning" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p><strong>Warning!</strong> Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-alert-danger" uk-alert> <a href="#" class="uk-alert-close" uk-close></a> <p><strong>Danger!</strong> Lorem ipsum <a href="#">dolor</a> sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> </div> </div> </div> styler/tests/modal.html000064400000006722151666572120011234 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <div uk-margin> <a class="uk-button uk-button-default" href="#modal-1" uk-toggle>Open</a> <a class="uk-button uk-button-default uk-margin-small-top" href="#modal-2" uk-toggle>Close outside</a> <a class="uk-button uk-button-default uk-margin-small-top" href="#modal-3" uk-toggle>Full</a> </div> <div id="modal-1" uk-modal> <div class="uk-modal-dialog"> <button class="uk-modal-close-default" type="button" uk-close></button> <div class="uk-modal-header"> <h2 class="uk-modal-title">Headline</h2> </div> <div class="uk-modal-body"> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div class="uk-modal-footer uk-text-right"> <button class="uk-button uk-button-default uk-modal-close" type="button">Cancel</button> <button class="uk-button uk-button-primary" type="button">Save</button> </div> </div> </div> <div id="modal-2" class="uk-flex-top" uk-modal> <div class="uk-modal-dialog uk-width-auto uk-margin-auto-vertical"> <button class="uk-modal-close-outside" type="button" uk-close></button> <canvas width="800" height="400" class="test-img"></canvas> </div> </div> <div id="modal-3" class="uk-modal-full" uk-modal> <div class="uk-modal-dialog"> <button class="uk-modal-close-full uk-close-large" type="button" uk-close></button> <div class="uk-grid-collapse uk-child-width-1-2@s uk-flex-middle" uk-grid> <div class="uk-background-cover test-img" uk-height-viewport></div> <div class="uk-padding-large"> <h1>Headline</h1> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p class="uk-margin-medium"> <button class="uk-button uk-button-default uk-modal-close" type="button">Cancel</button> <button class="uk-button uk-button-primary" type="button">Save</button> </p> </div> </div> </div> </div> </div> </div> </div>styler/tests/close.html000064400000000376151666572120011244 0ustar00<div class="uk-section uk-section-default uk-flex uk-flex-middle" uk-height-viewport> <div class="uk-width-1-1"> <div class="uk-container uk-text-center"> <button type="button" uk-close></button> </div> </div> </div>styler/tests/container.html000064400000007626151666572120012126 0ustar00<div class="uk-section uk-section-default"> <div class="uk-container uk-margin-large"> <h2>Default</h2> <p class="uk-column-1-2@s uk-column-1-3@m uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p> </div> <div class="uk-container uk-container-small uk-margin-large"> <h2>Small</h2> <p class="uk-column-1-2@s uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> </div> <div class="uk-container uk-container-large uk-margin-large"> <h2>Large</h2> <p class="uk-column-1-2@s uk-column-1-3@m uk-column-1-4@l uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div class="uk-container uk-container-xlarge uk-margin-large"> <h2>X-Large</h2> <p class="uk-column-1-2@s uk-column-1-3@m uk-column-1-4@l uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> <div class="uk-container uk-container-expand uk-margin-large"> <h2>Expand</h2> <p class="uk-column-1-2@s uk-column-1-3@m uk-column-1-4@l uk-text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p> </div> </div>styler/app/worker.min.js000064400001774475151666572120011343 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ (function(){"use strict";var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(y){return y&&y.__esModule&&Object.prototype.hasOwnProperty.call(y,"default")?y.default:y}function getAugmentedNamespace(y){if(Object.prototype.hasOwnProperty.call(y,"__esModule"))return y;var R=y.default;if(typeof R=="function"){var E=function q(){var d=!1;try{d=this instanceof q}catch{}return d?Reflect.construct(R,arguments,this.constructor):R.apply(this,arguments)};E.prototype=R.prototype}else E={};return Object.defineProperty(E,"__esModule",{value:!0}),Object.keys(y).forEach(function(q){var d=Object.getOwnPropertyDescriptor(y,q);Object.defineProperty(E,q,d.get?d:{enumerable:!0,get:function(){return y[q]}})}),E}var processFast={exports:{}},hasRequiredProcessFast;function requireProcessFast(){if(hasRequiredProcessFast)return processFast.exports;hasRequiredProcessFast=1;const y=processFast.exports={};y.title="browser",y.browser=!0,y.env={},y.argv=[],y.version="",y.versions={};function R(){}return y.on=R,y.addListener=R,y.once=R,y.off=R,y.removeListener=R,y.removeAllListeners=R,y.emit=R,y.prependListener=R,y.prependOnceListener=R,y.nextTick=(E,...q)=>window.queueMicrotask(()=>E(...q)),y.listeners=E=>[],y.cwd=()=>"/",y.umask=()=>0,y.binding=E=>{throw new Error("process.binding is not supported")},y.chdir=E=>{throw new Error("process.chdir is not supported")},processFast.exports}var processFastExports=requireProcessFast(),process=getDefaultExportFromCjs(processFastExports),clean={exports:{}},optimize$3,hasRequiredOptimize$3;function requireOptimize$3(){if(hasRequiredOptimize$3)return optimize$3;hasRequiredOptimize$3=1;function y(R){return R}return optimize$3=y,optimize$3}var naturalCompare_1,hasRequiredNaturalCompare;function requireNaturalCompare(){if(hasRequiredNaturalCompare)return naturalCompare_1;hasRequiredNaturalCompare=1;var y=/([0-9]+)/;function R(q,d){var _=(""+q).split(y).map(E),b=(""+d).split(y).map(E),w,O,A=Math.min(_.length,b.length),S,P;for(S=0,P=A;S<P;S++)if(w=_[S],O=b[S],w!=O)return w>O?1:-1;return _.length>b.length?1:_.length==b.length?0:-1}function E(q){return""+parseInt(q)==q?parseInt(q):q}return naturalCompare_1=R,naturalCompare_1}var sortSelectors_1,hasRequiredSortSelectors;function requireSortSelectors(){if(hasRequiredSortSelectors)return sortSelectors_1;hasRequiredSortSelectors=1;var y=requireNaturalCompare();function R(d,_){return y(d[1],_[1])}function E(d,_){return d[1]>_[1]?1:-1}function q(d,_){switch(_){case"natural":return d.sort(R);case"standard":return d.sort(E);case"none":case!1:return d}}return sortSelectors_1=q,sortSelectors_1}var override_1,hasRequiredOverride;function requireOverride(){if(hasRequiredOverride)return override_1;hasRequiredOverride=1;function y(R,E){var q={},d,_,b;for(d in R)b=R[d],Array.isArray(b)?q[d]=b.slice(0):typeof b=="object"&&b!==null?q[d]=y(b,{}):q[d]=b;for(_ in E)b=E[_],_ in q&&Array.isArray(b)?q[_]=b.slice(0):_ in q&&typeof b=="object"&&b!==null?q[_]=y(q[_],b):q[_]=b;return q}return override_1=y,override_1}var noop_1,hasRequiredNoop;function requireNoop(){if(hasRequiredNoop)return noop_1;hasRequiredNoop=1;function y(){}return noop_1=y,noop_1}var format,hasRequiredFormat;function requireFormat(){if(hasRequiredFormat)return format;hasRequiredFormat=1;var y=requireOverride();function R(){var D=` `;try{var $=requireNoop();D=$.EOL}catch{}return D}var E={AfterAtRule:"afterAtRule",AfterBlockBegins:"afterBlockBegins",AfterBlockEnds:"afterBlockEnds",AfterComment:"afterComment",AfterProperty:"afterProperty",AfterRuleBegins:"afterRuleBegins",AfterRuleEnds:"afterRuleEnds",BeforeBlockEnds:"beforeBlockEnds",BetweenSelectors:"betweenSelectors"},q={CarriageReturnLineFeed:`\r `,LineFeed:` `,System:R()},d={Space:" ",Tab:" "},_={AroundSelectorRelation:"aroundSelectorRelation",BeforeBlockBegins:"beforeBlockBegins",BeforeValue:"beforeValue"},b={breaks:B(!1),breakWith:q.System,indentBy:0,indentWith:d.Space,spaces:T(!1),wrapAt:!1,semicolonAfterLastProperty:!1},w="beautify",O="keep-breaks",A=";",S=":",P=",",C="=",M="false",k="off",L="true",I="on";function B(D){var $={};return $[E.AfterAtRule]=D,$[E.AfterBlockBegins]=D,$[E.AfterBlockEnds]=D,$[E.AfterComment]=D,$[E.AfterProperty]=D,$[E.AfterRuleBegins]=D,$[E.AfterRuleEnds]=D,$[E.BeforeBlockEnds]=D,$[E.BetweenSelectors]=D,$}function T(D){var $={};return $[_.AroundSelectorRelation]=D,$[_.BeforeBlockBegins]=D,$[_.BeforeValue]=D,$}function z(D){return D===void 0||D===!1?!1:(typeof D=="object"&&"breakWith"in D&&(D=y(D,{breakWith:x(D.breakWith)})),typeof D=="object"&&"indentBy"in D&&(D=y(D,{indentBy:parseInt(D.indentBy)})),typeof D=="object"&&"indentWith"in D&&(D=y(D,{indentWith:K(D.indentWith)})),typeof D=="object"?F(y(b,D)):typeof D=="string"&&D==w?F(y(b,{breaks:B(!0),indentBy:2,spaces:T(!0)})):typeof D=="string"&&D==O?F(y(b,{breaks:{afterAtRule:!0,afterBlockBegins:!0,afterBlockEnds:!0,afterComment:!0,afterRuleEnds:!0,beforeBlockEnds:!0}})):typeof D=="string"?F(y(b,V(D))):b)}function V(D){return D.split(A).reduce(function($,G){var j=G.split(S),W=j[0],H=j[1];return W=="breaks"||W=="spaces"?$[W]=N(H):W=="indentBy"||W=="wrapAt"?$[W]=parseInt(H):W=="indentWith"?$[W]=K(H):W=="breakWith"&&($[W]=x(H)),$},{})}function N(D){return D.split(P).reduce(function($,G){var j=G.split(C),W=j[0],H=j[1];return $[W]=U(H),$},{})}function U(D){switch(D){case M:case k:return!1;case L:case I:return!0;default:return D}}function x(D){switch(D){case"windows":case"crlf":case q.CarriageReturnLineFeed:return q.CarriageReturnLineFeed;case"unix":case"lf":case q.LineFeed:return q.LineFeed;default:return q.System}}function K(D){switch(D){case"space":return d.Space;case"tab":return d.Tab;default:return D}}function F(D){for(var $ in E){var G=E[$],j=D.breaks[G];j===!0?D.breaks[G]=D.breakWith:j===!1?D.breaks[G]="":D.breaks[G]=D.breakWith.repeat(parseInt(j))}return D}return format={Breaks:E,Spaces:_,formatFrom:z},format}var marker,hasRequiredMarker;function requireMarker(){if(hasRequiredMarker)return marker;hasRequiredMarker=1;var y={ASTERISK:"*",AT:"@",BACK_SLASH:"\\",CARRIAGE_RETURN:"\r",CLOSE_CURLY_BRACKET:"}",CLOSE_ROUND_BRACKET:")",CLOSE_SQUARE_BRACKET:"]",COLON:":",COMMA:",",DOUBLE_QUOTE:'"',EXCLAMATION:"!",FORWARD_SLASH:"/",INTERNAL:"-clean-css-",NEW_LINE_NIX:` `,OPEN_CURLY_BRACKET:"{",OPEN_ROUND_BRACKET:"(",OPEN_SQUARE_BRACKET:"[",SEMICOLON:";",SINGLE_QUOTE:"'",SPACE:" ",TAB:" ",UNDERSCORE:"_"};return marker=y,marker}var formatPosition_1,hasRequiredFormatPosition;function requireFormatPosition(){if(hasRequiredFormatPosition)return formatPosition_1;hasRequiredFormatPosition=1;function y(R){var E=R[0],q=R[1],d=R[2];return d?d+":"+E+":"+q:E+":"+q}return formatPosition_1=y,formatPosition_1}var tidyRules_1,hasRequiredTidyRules;function requireTidyRules(){if(hasRequiredTidyRules)return tidyRules_1;hasRequiredTidyRules=1;var y=requireFormat().Spaces,R=requireMarker(),E=requireFormatPosition(),q=/[\s"'][iI]\s*\]/,d=/([\d\w])([iI])\]/g,_=/="([a-zA-Z][a-zA-Z\d\-_]+)"([iI])/g,b=/="([a-zA-Z][a-zA-Z\d\-_]+)"(\s|\])/g,w=/^(?:(?:<!--|-->)\s*)+/,O=/='([a-zA-Z][a-zA-Z\d\-_]+)'([iI])/g,A=/='([a-zA-Z][a-zA-Z\d\-_]+)'(\s|\])/g,S=/[>+~]/,P=/\s/,C="*+html ",M="*:first-child+html ",k="<",L=[":current",":future",":has",":host",":host-context",":is",":not",":past",":where"];function I(U){var x,K=!1,F,D=!1,$,G;for($=0,G=U.length;$<G;$++){if(F=U[$],!x){if(F==R.SINGLE_QUOTE||F==R.DOUBLE_QUOTE)D=!D;else if(!D&&(F==R.CLOSE_CURLY_BRACKET||F==R.EXCLAMATION||F==k||F==R.SEMICOLON)){K=!0;break}else if(!D&&$===0&&S.test(F)){K=!0;break}}x=F==R.BACK_SLASH}return K}function B(U,x){var K=[],F,D,$,G,j,W,H,Y,te,J,ie,re,ee=0,Q=!1,X=!1,Z=!1,se=q.test(U),ne=x&&x.spaces[y.AroundSelectorRelation],ae,he;for(ae=0,he=U.length;ae<he;ae++){if(F=U[ae],D=F==R.NEW_LINE_NIX,$=F==R.NEW_LINE_NIX&&U[ae-1]==R.CARRIAGE_RETURN,W=H||Y,J=!te&&!G&&ee===0&&S.test(F),ie=P.test(F),re=ee==1&&F==R.CLOSE_ROUND_BRACKET?!1:re||ee===0&&F==R.COLON&&T(U,ae),j&&W&&$)K.pop(),K.pop();else if(G&&W&&D)K.pop();else if(G)K.push(F);else if(F==R.OPEN_SQUARE_BRACKET&&!W)K.push(F),te=!0;else if(F==R.CLOSE_SQUARE_BRACKET&&!W)K.push(F),te=!1;else if(F==R.OPEN_ROUND_BRACKET&&!W)K.push(F),ee++;else if(F==R.CLOSE_ROUND_BRACKET&&!W)K.push(F),ee--;else if(F==R.SINGLE_QUOTE&&!W)K.push(F),H=!0;else if(F==R.DOUBLE_QUOTE&&!W)K.push(F),Y=!0;else if(F==R.SINGLE_QUOTE&&W)K.push(F),H=!1;else if(F==R.DOUBLE_QUOTE&&W)K.push(F),Y=!1;else{if(ie&&X&&!ne)continue;!ie&&X&&ne?(K.push(R.SPACE),K.push(F)):ie&&!Z&&Q&&ee>0&&re||(ie&&!Z&&ee>0&&re?K.push(F):ie&&(te||ee>0)&&!W||ie&&Z&&!W||($||D)&&(te||ee>0)&&W||(J&&Z&&!ne?(K.pop(),K.push(F)):J&&!Z&&ne?(K.push(R.SPACE),K.push(F)):ie?K.push(R.SPACE):K.push(F)))}j=G,G=F==R.BACK_SLASH,X=J,Z=ie,Q=F==R.COMMA}return se?K.join("").replace(d,"$1 $2]"):K.join("")}function T(U,x){var K=U.substring(x,U.indexOf(R.OPEN_ROUND_BRACKET,x));return L.indexOf(K)>-1}function z(U){return U.indexOf("'")==-1&&U.indexOf('"')==-1?U:U.replace(O,"=$1 $2").replace(A,"=$1$2").replace(_,"=$1 $2").replace(b,"=$1$2")}function V(U){return U.replace("nth-child(1)","first-child").replace("nth-of-type(1)","first-of-type").replace("nth-of-type(even)","nth-of-type(2n)").replace("nth-child(even)","nth-child(2n)").replace("nth-of-type(2n+1)","nth-of-type(odd)").replace("nth-child(2n+1)","nth-child(odd)").replace("nth-last-child(1)","last-child").replace("nth-last-of-type(1)","last-of-type").replace("nth-last-of-type(even)","nth-last-of-type(2n)").replace("nth-last-child(even)","nth-last-child(2n)").replace("nth-last-of-type(2n+1)","nth-last-of-type(odd)").replace("nth-last-child(2n+1)","nth-last-child(odd)")}function N(U,x,K,F,D){var $=[],G=[];function j(J,ie){return D.push("HTML comment '"+ie+"' at "+E(J[2][0])+". Removing."),""}for(var W=0,H=U.length;W<H;W++){var Y=U[W],te=Y[1];if(te=te.replace(w,j.bind(null,Y)),I(te)){D.push("Invalid selector '"+Y[1]+"' at "+E(Y[2][0])+". Ignoring.");continue}te=B(te,F),te=z(te),K&&te.indexOf("nav")>0&&(te=te.replace(/\+nav(\S|$)/,"+ nav$1")),!(x&&te.indexOf(C)>-1)&&(x&&te.indexOf(M)>-1||(te.indexOf("*")>-1&&(te=te.replace(/\*([:#.[])/g,"$1").replace(/^(:first-child)?\+html/,"*$1+html")),!(G.indexOf(te)>-1)&&(te=V(te),Y[1]=te,G.push(te),$.push(Y))))}return $.length==1&&$[0][1].length===0&&(D.push("Empty selector '"+$[0][1]+"' at "+E($[0][2][0])+". Ignoring."),$=[]),$}return tidyRules_1=N,tidyRules_1}var tidyBlock_1,hasRequiredTidyBlock;function requireTidyBlock(){if(hasRequiredTidyBlock)return tidyBlock_1;hasRequiredTidyBlock=1;var y=/^@media\W/,R=/^@(?:keyframes|-moz-keyframes|-o-keyframes|-webkit-keyframes)\W/;function E(q,d){var _,b,w;for(w=q.length-1;w>=0;w--)_=!d&&y.test(q[w][1]),b=R.test(q[w][1]),q[w][1]=q[w][1].replace(/\n|\r\n/g," ").replace(/\s+/g," ").replace(/(,|:|\() /g,"$1").replace(/ \)/g,")"),b&&(q[w][1]=q[w][1].replace(/'([a-zA-Z][a-zA-Z\d\-_]+)'/,"$1").replace(/"([a-zA-Z][a-zA-Z\d\-_]+)"/,"$1")),_&&(q[w][1]=q[w][1].replace(/\) /g,")"));return q}return tidyBlock_1=E,tidyBlock_1}var tidyAtRule_1,hasRequiredTidyAtRule;function requireTidyAtRule(){if(hasRequiredTidyAtRule)return tidyAtRule_1;hasRequiredTidyAtRule=1;function y(R){return R.replace(/\s+/g," ").replace(/url\(\s+/g,"url(").replace(/\s+\)/g,")").trim()}return tidyAtRule_1=y,tidyAtRule_1}var hack,hasRequiredHack;function requireHack(){if(hasRequiredHack)return hack;hasRequiredHack=1;var y={ASTERISK:"asterisk",BANG:"bang",BACKSLASH:"backslash",UNDERSCORE:"underscore"};return hack=y,hack}var removeUnused_1,hasRequiredRemoveUnused;function requireRemoveUnused(){if(hasRequiredRemoveUnused)return removeUnused_1;hasRequiredRemoveUnused=1;function y(R){for(var E=R.length-1;E>=0;E--){var q=R[E];q.unused&&q.all.splice(q.position,1)}}return removeUnused_1=y,removeUnused_1}var restoreFromOptimizing_1,hasRequiredRestoreFromOptimizing;function requireRestoreFromOptimizing(){if(hasRequiredRestoreFromOptimizing)return restoreFromOptimizing_1;hasRequiredRestoreFromOptimizing=1;var y=requireHack(),R=requireMarker(),E="*",q="\\",d="!important",_="_",b="!ie";function w(S,P){var C,M,k,L;for(L=S.length-1;L>=0;L--){if(C=S[L],C.dynamic&&C.important){O(C);continue}C.dynamic||C.unused||!C.dirty&&!C.important&&!C.hack||(C.optimizable&&P?(M=P(C),C.value=M):M=C.value,C.important&&O(C),C.hack&&A(C),"all"in C&&(k=C.all[C.position],k[1][1]=C.name,k.splice(2,k.length-1),Array.prototype.push.apply(k,M)))}}function O(S){S.value[S.value.length-1][1]+=d}function A(S){S.hack[0]==y.UNDERSCORE?S.name=_+S.name:S.hack[0]==y.ASTERISK?S.name=E+S.name:S.hack[0]==y.BACKSLASH?S.value[S.value.length-1][1]+=q+S.hack[1]:S.hack[0]==y.BANG&&(S.value[S.value.length-1][1]+=R.SPACE+b)}return restoreFromOptimizing_1=w,restoreFromOptimizing_1}var token,hasRequiredToken;function requireToken(){if(hasRequiredToken)return token;hasRequiredToken=1;var y={AT_RULE:"at-rule",AT_RULE_BLOCK:"at-rule-block",AT_RULE_BLOCK_SCOPE:"at-rule-block-scope",COMMENT:"comment",NESTED_BLOCK:"nested-block",NESTED_BLOCK_SCOPE:"nested-block-scope",PROPERTY:"property",PROPERTY_BLOCK:"property-block",PROPERTY_NAME:"property-name",PROPERTY_VALUE:"property-value",RAW:"raw",RULE:"rule",RULE_SCOPE:"rule-scope"};return token=y,token}var wrapForOptimizing,hasRequiredWrapForOptimizing;function requireWrapForOptimizing(){if(hasRequiredWrapForOptimizing)return wrapForOptimizing;hasRequiredWrapForOptimizing=1;var y=requireHack(),R=requireMarker(),E=requireToken(),q={ASTERISK:"*",BACKSLASH:"\\",BANG:"!",BANG_SUFFIX_PATTERN:/!\w+$/,IMPORTANT_TOKEN_PATTERN:new RegExp("!important$","i"),IMPORTANT_WORD_PATTERN:new RegExp("important$","i"),SUFFIX_BANG_PATTERN:/!$/,UNDERSCORE:"_",VARIABLE_REFERENCE_PATTERN:/var\(--.+\)$/};function d(k,L){var I=[],B,T,z;for(z=k.length-1;z>=0;z--)T=k[z],T[0]==E.PROPERTY&&(L&&L.indexOf(T[1][1])>-1||(B=M(T),B.all=k,B.position=z,I.unshift(B)));return I}function _(k){var L,I,B;for(L=2,I=k.length;L<I;L++)if(B=k[L],B[0]==E.PROPERTY_VALUE&&b(B[1]))return!0;return!1}function b(k){return q.VARIABLE_REFERENCE_PATTERN.test(k)}function w(k){var L,I,B;for(I=3,B=k.length;I<B;I++)if(L=k[I],L[0]==E.PROPERTY_VALUE&&(L[1]==R.COMMA||L[1]==R.FORWARD_SLASH))return!0;return!1}function O(k){var L=!1,I=k[1][1],B=k[k.length-1];return I[0]==q.UNDERSCORE?L=[y.UNDERSCORE]:I[0]==q.ASTERISK?L=[y.ASTERISK]:B[1][0]==q.BANG&&!B[1].match(q.IMPORTANT_WORD_PATTERN)?L=[y.BANG]:B[1].indexOf(q.BANG)>0&&!B[1].match(q.IMPORTANT_WORD_PATTERN)&&q.BANG_SUFFIX_PATTERN.test(B[1])?L=[y.BANG]:B[1].indexOf(q.BACKSLASH)>0&&B[1].indexOf(q.BACKSLASH)==B[1].length-q.BACKSLASH.length-1?L=[y.BACKSLASH,B[1].substring(B[1].indexOf(q.BACKSLASH)+1)]:B[1].indexOf(q.BACKSLASH)===0&&B[1].length==2&&(L=[y.BACKSLASH,B[1].substring(1)]),L}function A(k){if(k.length<3)return!1;var L=k[k.length-1];return!!(q.IMPORTANT_TOKEN_PATTERN.test(L[1])||q.IMPORTANT_WORD_PATTERN.test(L[1])&&q.SUFFIX_BANG_PATTERN.test(k[k.length-2][1]))}function S(k){var L=k[k.length-1],I=k[k.length-2];q.IMPORTANT_TOKEN_PATTERN.test(L[1])?L[1]=L[1].replace(q.IMPORTANT_TOKEN_PATTERN,""):(L[1]=L[1].replace(q.IMPORTANT_WORD_PATTERN,""),I[1]=I[1].replace(q.SUFFIX_BANG_PATTERN,"")),L[1].length===0&&k.pop(),I[1].length===0&&k.pop()}function P(k){k[1][1]=k[1][1].substring(1)}function C(k,L){var I=k[k.length-1];I[1]=I[1].substring(0,I[1].indexOf(L[0]==y.BACKSLASH?q.BACKSLASH:q.BANG)).trim(),I[1].length===0&&k.pop()}function M(k){var L=A(k);L&&S(k);var I=O(k);return I[0]==y.ASTERISK||I[0]==y.UNDERSCORE?P(k):(I[0]==y.BACKSLASH||I[0]==y.BANG)&&C(k,I),{block:k[2]&&k[2][0]==E.PROPERTY_BLOCK,components:[],dirty:!1,dynamic:_(k),hack:I,important:L,name:k[1][1],multiplex:k.length>3?w(k):!1,optimizable:!0,position:0,shorthand:!1,unused:!1,value:k.slice(2)}}return wrapForOptimizing={all:d,single:M},wrapForOptimizing}var invalidPropertyError,hasRequiredInvalidPropertyError;function requireInvalidPropertyError(){if(hasRequiredInvalidPropertyError)return invalidPropertyError;hasRequiredInvalidPropertyError=1;function y(R){this.name="InvalidPropertyError",this.message=R,this.stack=new Error().stack}return y.prototype=Object.create(Error.prototype),y.prototype.constructor=y,invalidPropertyError=y,invalidPropertyError}var breakUp,hasRequiredBreakUp;function requireBreakUp(){if(hasRequiredBreakUp)return breakUp;hasRequiredBreakUp=1;var y=requireInvalidPropertyError(),R=requireWrapForOptimizing().single,E=requireToken(),q=requireMarker(),d=requireFormatPosition();function _(N){var U,x;for(U=0,x=N.length;U<x;U++)if(N[U][1]=="inherit")return!0;return!1}function b(N){return function(U){return U[1]=="invert"||N.isColor(U[1])||N.isPrefixed(U[1])}}function w(N){return function(U){return U[1]!="inherit"&&N.isStyleKeyword(U[1])&&!N.isColorFunction(U[1])}}function O(N,U,x){var K=x[N];return K.doubleValues&&K.defaultValue.length==2?R([E.PROPERTY,[E.PROPERTY_NAME,N],[E.PROPERTY_VALUE,K.defaultValue[0]],[E.PROPERTY_VALUE,K.defaultValue[1]]]):K.doubleValues&&K.defaultValue.length==1?R([E.PROPERTY,[E.PROPERTY_NAME,N],[E.PROPERTY_VALUE,K.defaultValue[0]]]):R([E.PROPERTY,[E.PROPERTY_NAME,N],[E.PROPERTY_VALUE,K.defaultValue]])}function A(N){return function(U){return U[1]!="inherit"&&(N.isWidth(U[1])||N.isUnit(U[1])||N.isDynamicUnit(U[1]))&&!N.isStyleKeyword(U[1])&&!N.isColorFunction(U[1])}}function S(N,U,x){var K=O(N.name+"-duration",N,U),F=O(N.name+"-timing-function",N,U),D=O(N.name+"-delay",N,U),$=O(N.name+"-iteration-count",N,U),G=O(N.name+"-direction",N,U),j=O(N.name+"-fill-mode",N,U),W=O(N.name+"-play-state",N,U),H=O(N.name+"-name",N,U),Y=[K,F,D,$,G,j,W,H],te=N.value,J,ie=!1,re=!1,ee=!1,Q=!1,X=!1,Z=!1,se=!1,ne=!1,ae,he;if(N.value.length==1&&N.value[0][1]=="inherit")return K.value=F.value=D.value=$.value=G.value=j.value=W.value=H.value=N.value,Y;if(te.length>1&&_(te))throw new y("Invalid animation values at "+d(te[0][2][0])+". Ignoring.");for(ae=0,he=te.length;ae<he;ae++)if(J=te[ae],x.isTime(J[1])&&!ie)K.value=[J],ie=!0;else if(x.isTime(J[1])&&!ee)D.value=[J],ee=!0;else if((x.isGlobal(J[1])||x.isTimingFunction(J[1]))&&!re)F.value=[J],re=!0;else if((x.isAnimationIterationCountKeyword(J[1])||x.isPositiveNumber(J[1]))&&!Q)$.value=[J],Q=!0;else if(x.isAnimationDirectionKeyword(J[1])&&!X)G.value=[J],X=!0;else if(x.isAnimationFillModeKeyword(J[1])&&!Z)j.value=[J],Z=!0;else if(x.isAnimationPlayStateKeyword(J[1])&&!se)W.value=[J],se=!0;else if((x.isAnimationNameKeyword(J[1])||x.isIdentifier(J[1]))&&!ne)H.value=[J],ne=!0;else throw new y("Invalid animation value at "+d(J[2][0])+". Ignoring.");return Y}function P(N,U,x){var K=O("background-image",N,U),F=O("background-position",N,U),D=O("background-size",N,U),$=O("background-repeat",N,U),G=O("background-attachment",N,U),j=O("background-origin",N,U),W=O("background-clip",N,U),H=O("background-color",N,U),Y=[K,F,D,$,G,j,W,H],te=N.value,J=!1,ie=!1,re=!1,ee=!1,Q=!1;if(N.value.length==1&&N.value[0][1]=="inherit")return H.value=K.value=$.value=F.value=D.value=j.value=W.value=N.value,Y;if(N.value.length==1&&N.value[0][1]=="0 0")return Y;for(var X=te.length-1;X>=0;X--){var Z=te[X];if(x.isBackgroundAttachmentKeyword(Z[1]))G.value=[Z],Q=!0;else if(x.isBackgroundClipKeyword(Z[1])||x.isBackgroundOriginKeyword(Z[1]))ie?(j.value=[Z],re=!0):(W.value=[Z],ie=!0),Q=!0;else if(x.isBackgroundRepeatKeyword(Z[1]))ee?$.value.unshift(Z):($.value=[Z],ee=!0),Q=!0;else if(x.isBackgroundPositionKeyword(Z[1])||x.isBackgroundSizeKeyword(Z[1])||x.isUnit(Z[1])||x.isDynamicUnit(Z[1])){if(X>0){var se=te[X-1];se[1]==q.FORWARD_SLASH?D.value=[Z]:X>1&&te[X-2][1]==q.FORWARD_SLASH?(D.value=[se,Z],X-=2):(J||(F.value=[]),F.value.unshift(Z),J=!0)}else J||(F.value=[]),F.value.unshift(Z),J=!0;Q=!0}else(H.value[0][1]==U[H.name].defaultValue||H.value[0][1]=="none")&&(x.isColor(Z[1])||x.isPrefixed(Z[1]))?(H.value=[Z],Q=!0):(x.isUrl(Z[1])||x.isFunction(Z[1]))&&(K.value=[Z],Q=!0)}if(ie&&!re&&(j.value=W.value.slice(0)),!Q)throw new y("Invalid background value at "+d(te[0][2][0])+". Ignoring.");return Y}function C(N,U){for(var x=N.value,K=-1,F=0,D=x.length;F<D;F++)if(x[F][1]==q.FORWARD_SLASH){K=F;break}if(K===0||K===x.length-1)throw new y("Invalid border-radius value at "+d(x[0][2][0])+". Ignoring.");var $=O(N.name,N,U);$.value=K>-1?x.slice(0,K):x.slice(0),$.components=I($,U);var G=O(N.name,N,U);G.value=K>-1?x.slice(K+1):x.slice(0),G.components=I(G,U);for(var j=0;j<4;j++)$.components[j].multiplex=!0,$.components[j].value=$.components[j].value.concat(G.components[j].value);return $.components}function M(N,U,x){var K=O("font-style",N,U),F=O("font-variant",N,U),D=O("font-weight",N,U),$=O("font-stretch",N,U),G=O("font-size",N,U),j=O("line-height",N,U),W=O("font-family",N,U),H=[K,F,D,$,G,j,W],Y=N.value,te=4,J=0,ie=!1,re,ee=!1,Q,X=!1,Z,se=!1,ne,ae=!1;if(!Y[J])throw new y("Missing font values at "+d(N.all[N.position][1][2][0])+". Ignoring.");if(Y.length==1&&Y[0][1]=="inherit")return K.value=F.value=D.value=$.value=G.value=j.value=W.value=Y,H;if(Y.length==1&&(x.isFontKeyword(Y[0][1])||x.isGlobal(Y[0][1])||x.isPrefixed(Y[0][1])))return Y[0][1]=q.INTERNAL+Y[0][1],K.value=F.value=D.value=$.value=G.value=j.value=W.value=Y,H;if(Y.length<2||!k(Y,x)||!L(Y,x))throw new y("Invalid font values at "+d(N.all[N.position][1][2][0])+". Ignoring.");if(Y.length>1&&_(Y))throw new y("Invalid font values at "+d(Y[0][2][0])+". Ignoring.");for(;J<te;){if(re=x.isFontStretchKeyword(Y[J][1])||x.isGlobal(Y[J][1]),Q=x.isFontStyleKeyword(Y[J][1])||x.isGlobal(Y[J][1]),Z=x.isFontVariantKeyword(Y[J][1])||x.isGlobal(Y[J][1]),ne=x.isFontWeightKeyword(Y[J][1])||x.isGlobal(Y[J][1]),Q&&!ee)K.value=[Y[J]],ee=!0;else if(Z&&!X)F.value=[Y[J]],X=!0;else if(ne&&!se)D.value=[Y[J]],se=!0;else if(re&&!ie)$.value=[Y[J]],ie=!0;else{if(Q&&ee||Z&&X||ne&&se||re&&ie)throw new y("Invalid font style / variant / weight / stretch value at "+d(Y[0][2][0])+". Ignoring.");break}J++}if(x.isFontSizeKeyword(Y[J][1])||x.isUnit(Y[J][1])&&!x.isDynamicUnit(Y[J][1]))G.value=[Y[J]],J++;else throw new y("Missing font size at "+d(Y[0][2][0])+". Ignoring.");if(!Y[J])throw new y("Missing font family at "+d(Y[0][2][0])+". Ignoring.");for(Y[J]&&Y[J][1]==q.FORWARD_SLASH&&Y[J+1]&&(x.isLineHeightKeyword(Y[J+1][1])||x.isUnit(Y[J+1][1])||x.isNumber(Y[J+1][1]))&&(j.value=[Y[J+1]],J++,J++),W.value=[];Y[J];)Y[J][1]==q.COMMA?ae=!1:(ae?W.value[W.value.length-1][1]+=q.SPACE+Y[J][1]:W.value.push(Y[J]),ae=!0),J++;if(W.value.length===0)throw new y("Missing font family at "+d(Y[0][2][0])+". Ignoring.");return H}function k(N,U){var x,K,F;for(K=0,F=N.length;K<F;K++)if(x=N[K],U.isFontSizeKeyword(x[1])||U.isUnit(x[1])&&!U.isDynamicUnit(x[1])||U.isFunction(x[1]))return!0;return!1}function L(N,U){var x,K,F;for(K=0,F=N.length;K<F;K++)if(x=N[K],U.isIdentifier(x[1])||U.isQuotedText(x[1]))return!0;return!1}function I(N,U){var x=U[N.name].components,K=[],F=N.value;if(F.length<1)return[];F.length<2&&(F[1]=F[0].slice(0)),F.length<3&&(F[2]=F[0].slice(0)),F.length<4&&(F[3]=F[1].slice(0));for(var D=x.length-1;D>=0;D--){var $=R([E.PROPERTY,[E.PROPERTY_NAME,x[D]]]);$.value=[F[D]],K.unshift($)}return K}function B(N){return function(U,x,K){var F=[],D=U.value,$,G,j,W;for($=0,j=D.length;$<j;$++)D[$][1]==","&&F.push($);if(F.length===0)return N(U,x,K);var H=[];for($=0,j=F.length;$<=j;$++){var Y=$===0?0:F[$-1]+1,te=$<j?F[$]:D.length,J=O(U.name,U,x);J.value=D.slice(Y,te),J.value.length>0&&H.push(N(J,x,K))}var ie=H[0];for($=0,j=ie.length;$<j;$++)for(ie[$].multiplex=!0,G=1,W=H.length;G<W;G++)ie[$].value.push([E.PROPERTY_VALUE,q.COMMA]),Array.prototype.push.apply(ie[$].value,H[G][$].value);return ie}}function T(N,U,x){var K=O("list-style-type",N,U),F=O("list-style-position",N,U),D=O("list-style-image",N,U),$=[K,F,D];if(N.value.length==1&&N.value[0][1]=="inherit")return K.value=F.value=D.value=[N.value[0]],$;var G=N.value.slice(0),j=G.length,W=0;for(W=0,j=G.length;W<j;W++)if(x.isUrl(G[W][1])||G[W][1]=="0"){D.value=[G[W]],G.splice(W,1);break}for(W=0,j=G.length;W<j;W++)if(x.isListStylePositionKeyword(G[W][1])){F.value=[G[W]],G.splice(W,1);break}return G.length>0&&(x.isListStyleTypeKeyword(G[0][1])||x.isIdentifier(G[0][1]))&&(K.value=[G[0]]),$}function z(N,U,x){var K=O(N.name+"-property",N,U),F=O(N.name+"-duration",N,U),D=O(N.name+"-timing-function",N,U),$=O(N.name+"-delay",N,U),G=[K,F,D,$],j=N.value,W,H=!1,Y=!1,te=!1,J=!1,ie,re;if(N.value.length==1&&N.value[0][1]=="inherit")return K.value=F.value=D.value=$.value=N.value,G;if(j.length>1&&_(j))throw new y("Invalid animation values at "+d(j[0][2][0])+". Ignoring.");for(ie=0,re=j.length;ie<re;ie++)if(W=j[ie],x.isTime(W[1])&&!H)F.value=[W],H=!0;else if(x.isTime(W[1])&&!Y)$.value=[W],Y=!0;else if((x.isGlobal(W[1])||x.isTimingFunction(W[1]))&&!J)D.value=[W],J=!0;else if(x.isIdentifier(W[1])&&!te)K.value=[W],te=!0;else throw new y("Invalid animation value at "+d(W[2][0])+". Ignoring.");return G}function V(N,U,x){for(var K=U[N.name],F=[O(K.components[0],N,U),O(K.components[1],N,U),O(K.components[2],N,U)],D,$,G,j=0;j<3;j++){var W=F[j];W.name.indexOf("color")>0?D=W:W.name.indexOf("style")>0?$=W:G=W}if(N.value.length==1&&N.value[0][1]=="inherit"||N.value.length==3&&N.value[0][1]=="inherit"&&N.value[1][1]=="inherit"&&N.value[2][1]=="inherit")return D.value=$.value=G.value=[N.value[0]],F;var H=N.value.slice(0),Y,te;return H.length>0&&(te=H.filter(A(x)),Y=te.length>1&&(te[0][1]=="none"||te[0][1]=="auto")?te[1]:te[0],Y&&(G.value=[Y],H.splice(H.indexOf(Y),1))),H.length>0&&(Y=H.filter(w(x))[0],Y&&($.value=[Y],H.splice(H.indexOf(Y),1))),H.length>0&&(Y=H.filter(b(x))[0],Y&&(D.value=[Y],H.splice(H.indexOf(Y),1))),F}return breakUp={animation:S,background:P,border:V,borderRadius:C,font:M,fourValues:I,listStyle:T,multiplex:B,outline:V,transition:z},breakUp}var vendorPrefixes,hasRequiredVendorPrefixes;function requireVendorPrefixes(){if(hasRequiredVendorPrefixes)return vendorPrefixes;hasRequiredVendorPrefixes=1;var y=/(?:^|\W)(-\w+-)/g;function R(q){for(var d=[],_;(_=y.exec(q))!==null;)d.indexOf(_[0])==-1&&d.push(_[0]);return d}function E(q,d){return R(q).sort().join(",")==R(d).sort().join(",")}return vendorPrefixes={unique:R,same:E},vendorPrefixes}var understandable_1,hasRequiredUnderstandable;function requireUnderstandable(){if(hasRequiredUnderstandable)return understandable_1;hasRequiredUnderstandable=1;var y=requireVendorPrefixes().same;function R(E,q,d,_,b){return!(!y(q,d)||b&&E.isVariable(q)!==E.isVariable(d))}return understandable_1=R,understandable_1}var canOverride,hasRequiredCanOverride;function requireCanOverride(){if(hasRequiredCanOverride)return canOverride;hasRequiredCanOverride=1;var y=requireUnderstandable();function R(N,U,x){return!y(N,U,x,0,!0)&&!(N.isAnimationIterationCountKeyword(x)||N.isPositiveNumber(x))?!1:N.isVariable(U)&&N.isVariable(x)?!0:N.isAnimationIterationCountKeyword(x)||N.isPositiveNumber(x)}function E(N,U,x){return!y(N,U,x,0,!0)&&!(N.isAnimationNameKeyword(x)||N.isIdentifier(x))?!1:N.isVariable(U)&&N.isVariable(x)?!0:N.isAnimationNameKeyword(x)||N.isIdentifier(x)}function q(N,U,x){if(!N.isFunction(U)||!N.isFunction(x))return!1;var K=U.substring(0,U.indexOf("(")),F=x.substring(0,x.indexOf("(")),D=U.substring(K.length+1,U.length-1),$=x.substring(F.length+1,x.length-1);return N.isFunction(D)||N.isFunction($)?K===F&&q(N,D,$):K===F}function d(N,U,x){return!y(N,U,x,0,!0)&&!(N.isBackgroundPositionKeyword(x)||N.isGlobal(x))?!1:N.isVariable(U)&&N.isVariable(x)||N.isBackgroundPositionKeyword(x)||N.isGlobal(x)?!0:B(N,U,x)}function _(N,U,x){return!y(N,U,x,0,!0)&&!(N.isBackgroundSizeKeyword(x)||N.isGlobal(x))?!1:N.isVariable(U)&&N.isVariable(x)||N.isBackgroundSizeKeyword(x)||N.isGlobal(x)?!0:B(N,U,x)}function b(N,U,x){return!y(N,U,x,0,!0)&&!N.isColor(x)?!1:N.isVariable(U)&&N.isVariable(x)?!0:!N.colorOpacity&&(N.isRgbColor(U)||N.isHslColor(U))||!N.colorOpacity&&(N.isRgbColor(x)||N.isHslColor(x))||!N.colorHexAlpha&&(N.isHexAlphaColor(U)||N.isHexAlphaColor(x))?!1:N.isColor(U)&&N.isColor(x)?!0:M(N,U,x)}function w(N){return function(U,x,K,F){return N[F](U,x,K)}}function O(N,U,x){return y(N,U,x,0,!0)}function A(N,U,x){return!y(N,U,x,0,!0)&&!N.isImage(x)?!1:N.isVariable(U)&&N.isVariable(x)||N.isImage(x)?!0:N.isImage(U)?!1:M(N,U,x)}function S(N){return function(U,x,K){return!y(U,x,K,0,!0)&&!U.isKeyword(N)(K)?!1:U.isVariable(x)&&U.isVariable(K)?!0:U.isKeyword(N)(K)}}function P(N){return function(U,x,K){return!y(U,x,K,0,!0)&&!(U.isKeyword(N)(K)||U.isGlobal(K))?!1:U.isVariable(x)&&U.isVariable(K)?!0:U.isKeyword(N)(K)||U.isGlobal(K)}}function C(N,U,x){return!y(N,U,x,0,!0)&&!N.isIdentifier(x)?!1:N.isVariable(U)&&N.isVariable(x)?!0:N.isIdentifier(x)}function M(N,U,x){return q(N,U,x)?!0:U===x}function k(N,U,x){return!y(N,U,x,0,!0)&&!(N.isUnit(x)||N.isColor(x)||N.isGlobal(x))?!1:N.isVariable(U)&&N.isVariable(x)?!0:N.isUnit(x)||N.isColor(x)||N.isGlobal(x)}function L(N,U,x){return!y(N,U,x,0,!0)&&!N.isTime(x)?!1:N.isVariable(U)&&N.isVariable(x)?!0:N.isTime(U)&&!N.isTime(x)?!1:N.isTime(x)?!0:N.isTime(U)?!1:N.isFunction(U)&&!N.isPrefixed(U)&&N.isFunction(x)&&!N.isPrefixed(x)?!0:M(N,U,x)}function I(N,U,x){return!y(N,U,x,0,!0)&&!(N.isTimingFunction(x)||N.isGlobal(x))?!1:N.isVariable(U)&&N.isVariable(x)?!0:N.isTimingFunction(x)||N.isGlobal(x)}function B(N,U,x){return!y(N,U,x,0,!0)&&!N.isUnit(x)?!1:N.isVariable(U)&&N.isVariable(x)?!0:N.isUnit(U)&&!N.isUnit(x)?!1:N.isUnit(x)?!0:N.isUnit(U)?!1:N.isFunction(U)&&!N.isPrefixed(U)&&N.isFunction(x)&&!N.isPrefixed(x)?!0:M(N,U,x)}function T(N){var U=P(N);return function(x,K,F){return B(x,K,F)||U(x,K,F)}}function z(N,U,x){return!y(N,U,x,0,!0)&&!(N.isUnit(x)||N.isNumber(x))?!1:N.isVariable(U)&&N.isVariable(x)?!0:(N.isUnit(U)||N.isNumber(U))&&!(N.isUnit(x)||N.isNumber(x))?!1:N.isUnit(x)||N.isNumber(x)?!0:N.isUnit(U)||N.isNumber(U)?!1:N.isFunction(U)&&!N.isPrefixed(U)&&N.isFunction(x)&&!N.isPrefixed(x)?!0:M(N,U,x)}function V(N,U,x){return!y(N,U,x,0,!0)&&!N.isZIndex(x)?!1:N.isVariable(U)&&N.isVariable(x)?!0:N.isZIndex(x)}return canOverride={generic:{color:b,components:w,image:A,propertyName:C,time:L,timingFunction:I,unit:B,unitOrNumber:z},property:{animationDirection:P("animation-direction"),animationFillMode:S("animation-fill-mode"),animationIterationCount:R,animationName:E,animationPlayState:P("animation-play-state"),backgroundAttachment:S("background-attachment"),backgroundClip:P("background-clip"),backgroundOrigin:S("background-origin"),backgroundPosition:d,backgroundRepeat:S("background-repeat"),backgroundSize:_,bottom:T("bottom"),borderCollapse:S("border-collapse"),borderStyle:P("*-style"),clear:P("clear"),cursor:P("cursor"),display:P("display"),float:P("float"),left:T("left"),fontFamily:O,fontStretch:P("font-stretch"),fontStyle:P("font-style"),fontVariant:P("font-variant"),fontWeight:P("font-weight"),listStyleType:P("list-style-type"),listStylePosition:P("list-style-position"),outlineStyle:P("*-style"),overflow:P("overflow"),position:P("position"),right:T("right"),textAlign:P("text-align"),textDecoration:P("text-decoration"),textOverflow:P("text-overflow"),textShadow:k,top:T("top"),transform:M,verticalAlign:T("vertical-align"),visibility:P("visibility"),whiteSpace:P("white-space"),zIndex:V}},canOverride}var clone,hasRequiredClone;function requireClone(){if(hasRequiredClone)return clone;hasRequiredClone=1;var y=requireWrapForOptimizing().single,R=requireToken();function E(d){for(var _=q(d),b=d.components.length-1;b>=0;b--){var w=q(d.components[b]);w.value=d.components[b].value.slice(0),_.components.unshift(w)}return _.dirty=!0,_.value=d.value.slice(0),_}function q(d){var _=y([R.PROPERTY,[R.PROPERTY_NAME,d.name]]);return _.important=d.important,_.hack=d.hack,_.unused=!1,_}return clone={deep:E,shallow:q},clone}var restore,hasRequiredRestore;function requireRestore(){if(hasRequiredRestore)return restore;hasRequiredRestore=1;var y=requireClone().shallow,R=requireToken(),E=requireMarker();function q(P){for(var C=0,M=P.length;C<M;C++){var k=P[C][1];if(k!="inherit"&&k!=E.COMMA&&k!=E.FORWARD_SLASH)return!1}return!0}function d(P,C,M){var k=P.components,L=[],I,B;function T($){Array.prototype.unshift.apply(L,$.value)}function z($){var G=C[$.name];return G.doubleValues&&G.defaultValue.length==1?$.value[0][1]==G.defaultValue[0]&&($.value[1]?$.value[1][1]==G.defaultValue[0]:!0):G.doubleValues&&G.defaultValue.length!=1?$.value[0][1]==G.defaultValue[0]&&($.value[1]?$.value[1][1]:$.value[0][1])==G.defaultValue[1]:$.value[0][1]==G.defaultValue}for(var V=k.length-1;V>=0;V--){var N=k[V],U=z(N);if(N.name=="background-clip"){var x=k[V-1],K=z(x);I=N.value[0][1]==x.value[0][1],B=!I&&(K&&!U||!K&&!U||!K&&U&&N.value[0][1]!=x.value[0][1]),I?T(x):B&&(T(N),T(x)),V--}else if(N.name=="background-size"){var F=k[V-1],D=z(F);I=!D&&U,B=!I&&(D&&!U||!D&&!U),I?T(F):B?(T(N),L.unshift([R.PROPERTY_VALUE,E.FORWARD_SLASH]),T(F)):F.value.length==1&&T(F),V--}else{if(U||C[N.name].multiplexLastOnly&&!M)continue;T(N)}}return L.length===0&&P.value.length==1&&P.value[0][1]=="0"&&L.push(P.value[0]),L.length===0&&L.push([R.PROPERTY_VALUE,C[P.name].defaultValue]),q(L)?[L[0]]:L}function _(P){if(P.multiplex){for(var C=y(P),M=y(P),k=0;k<4;k++){var L=P.components[k],I=y(P);I.value=[L.value[0]],C.components.push(I);var B=y(P);B.value=[L.value[1]||L.value[0]],M.components.push(B)}var T=w(C),z=w(M);return T.length==z.length&&T[0][1]==z[0][1]&&(!(T.length>1)||T[1][1]==z[1][1])&&(!(T.length>2)||T[2][1]==z[2][1])&&(!(T.length>3)||T[3][1]==z[3][1])?T:T.concat([[R.PROPERTY_VALUE,E.FORWARD_SLASH]]).concat(z)}return w(P)}function b(P,C){var M=P.components,k=[],L,I=0,B=0;if(P.value[0][1].indexOf(E.INTERNAL)===0)return P.value[0][1]=P.value[0][1].substring(E.INTERNAL.length),P.value;for(;I<4;)L=M[I],L.value[0][1]!=C[L.name].defaultValue&&Array.prototype.push.apply(k,L.value),I++;for(Array.prototype.push.apply(k,M[I].value),I++,M[I].value[0][1]!=C[M[I].name].defaultValue&&(Array.prototype.push.apply(k,[[R.PROPERTY_VALUE,E.FORWARD_SLASH]]),Array.prototype.push.apply(k,M[I].value)),I++;M[I].value[B];)k.push(M[I].value[B]),M[I].value[B+1]&&k.push([R.PROPERTY_VALUE,E.COMMA]),B++;return q(k)?[k[0]]:k}function w(P){var C=P.components,M=C[0].value[0],k=C[1].value[0],L=C[2].value[0],I=C[3].value[0];return M[1]==k[1]&&M[1]==L[1]&&M[1]==I[1]?[M]:M[1]==L[1]&&k[1]==I[1]?[M,k]:k[1]==I[1]?[M,k,L]:[M,k,L,I]}function O(P){return function(C,M){if(!C.multiplex)return P(C,M,!0);var k=0,L=[],I={},B,T;for(B=0,T=C.components[0].value.length;B<T;B++)C.components[0].value[B][1]==E.COMMA&&k++;for(B=0;B<=k;B++){for(var z=y(C),V=0,N=C.components.length;V<N;V++){var U=C.components[V],x=y(U);z.components.push(x);for(var K=I[x.name]||0,F=U.value.length;K<F;K++){if(U.value[K][1]==E.COMMA){I[x.name]=K+1;break}x.value.push(U.value[K])}}var D=B==k,$=P(z,M,D);Array.prototype.push.apply(L,$),B<k&&L.push([R.PROPERTY_VALUE,E.COMMA])}return L}}function A(P,C){for(var M=P.components,k=[],L=M.length-1;L>=0;L--){var I=M[L],B=C[I.name];(I.value[0][1]!=B.defaultValue||"keepUnlessDefault"in B&&!S(M,C,B.keepUnlessDefault))&&k.unshift(I.value[0])}return k.length===0&&k.push([R.PROPERTY_VALUE,C[P.name].defaultValue]),q(k)?[k[0]]:k}function S(P,C,M){var k,L,I;for(L=0,I=P.length;L<I;L++)if(k=P[L],k.name==M&&k.value[0][1]==C[M].defaultValue)return!0;return!1}return restore={background:d,borderRadius:_,font:b,fourValues:w,multiplex:O,withoutDefaults:A},restore}var roundingPrecision,hasRequiredRoundingPrecision;function requireRoundingPrecision(){if(hasRequiredRoundingPrecision)return roundingPrecision;hasRequiredRoundingPrecision=1;var y=requireOverride(),R=/^\d+$/,E=["*","all"],q="off",d=",",_="=";function b(A){return y(w(q),O(A))}function w(A){return{ch:A,cm:A,em:A,ex:A,in:A,mm:A,pc:A,pt:A,px:A,q:A,rem:A,vh:A,vmax:A,vmin:A,vw:A,"%":A}}function O(A){return A==null?{}:typeof A=="boolean"?{}:typeof A=="number"&&A==-1?w(q):typeof A=="number"?w(A):typeof A=="string"&&R.test(A)?w(parseInt(A)):typeof A=="string"&&A==q?w(q):typeof A=="object"?A:A.split(d).reduce(function(S,P){var C=P.split(_),M=C[0],k=parseInt(C[1]);return(Number.isNaN(k)||k==-1)&&(k=q),E.indexOf(M)>-1?S=y(S,w(k)):S[M]=k,S},{})}return roundingPrecision={DEFAULT:q,roundingPrecisionFrom:b},roundingPrecision}var optimizationLevel,hasRequiredOptimizationLevel;function requireOptimizationLevel(){if(hasRequiredOptimizationLevel)return optimizationLevel;hasRequiredOptimizationLevel=1;var y=requireRoundingPrecision().roundingPrecisionFrom,R=requireOverride(),E={Zero:"0",One:"1",Two:"2"},q={};q[E.Zero]={},q[E.One]={cleanupCharsets:!0,normalizeUrls:!0,optimizeBackground:!0,optimizeBorderRadius:!0,optimizeFilter:!0,optimizeFontWeight:!0,optimizeOutline:!0,removeEmpty:!0,removeNegativePaddings:!0,removeQuotes:!0,removeWhitespace:!0,replaceMultipleZeros:!0,replaceTimeUnits:!0,replaceZeroUnits:!0,roundingPrecision:y(void 0),selectorsSortingMethod:"standard",specialComments:"all",tidyAtRules:!0,tidyBlockScopes:!0,tidySelectors:!0,variableValueOptimizers:[]},q[E.Two]={mergeAdjacentRules:!0,mergeIntoShorthands:!0,mergeMedia:!0,mergeNonAdjacentRules:!0,mergeSemantically:!1,overrideProperties:!0,removeEmpty:!0,reduceNonAdjacentRules:!0,removeDuplicateFontRules:!0,removeDuplicateMediaBlocks:!0,removeDuplicateRules:!0,removeUnusedAtRules:!1,restructureRules:!1,skipProperties:[]};var d="*",_="all",b="false",w="off",O="true",A="on",S=",",P=";",C=":";function M(T){var z=R(q,{}),V=E.Zero,N=E.One,U=E.Two;return T===void 0?(delete z[U],z):(typeof T=="string"&&(T=parseInt(T)),typeof T=="number"&&T===parseInt(U)?z:typeof T=="number"&&T===parseInt(N)?(delete z[U],z):typeof T=="number"&&T===parseInt(V)?(delete z[U],delete z[N],z):(typeof T=="object"&&(T=I(T)),N in T&&"roundingPrecision"in T[N]&&(T[N].roundingPrecision=y(T[N].roundingPrecision)),U in T&&"skipProperties"in T[U]&&typeof T[U].skipProperties=="string"&&(T[U].skipProperties=T[U].skipProperties.split(S)),(V in T||N in T||U in T)&&(z[V]=R(z[V],T[V])),N in T&&d in T[N]&&(z[N]=R(z[N],k(N,L(T[N][d]))),delete T[N][d]),N in T&&_ in T[N]&&(z[N]=R(z[N],k(N,L(T[N][_]))),delete T[N][_]),N in T||U in T?z[N]=R(z[N],T[N]):delete z[N],U in T&&d in T[U]&&(z[U]=R(z[U],k(U,L(T[U][d]))),delete T[U][d]),U in T&&_ in T[U]&&(z[U]=R(z[U],k(U,L(T[U][_]))),delete T[U][_]),U in T?z[U]=R(z[U],T[U]):delete z[U],z))}function k(T,z){var V=R(q[T],{}),N;for(N in V)typeof V[N]=="boolean"&&(V[N]=z);return V}function L(T){switch(T){case b:case w:return!1;case O:case A:return!0;default:return T}}function I(T){var z=R(T,{}),V,N;for(N=0;N<=2;N++)V=""+N,V in z&&(z[V]===void 0||z[V]===!1)&&delete z[V],V in z&&z[V]===!0&&(z[V]={}),V in z&&typeof z[V]=="string"&&(z[V]=B(z[V],V));return z}function B(T,z){return T.split(P).reduce(function(V,N){var U=N.split(C),x=U[0],K=U[1],F=L(K);return d==x||_==x?V=R(V,k(z,F)):V[x]=F,V},{})}return optimizationLevel={OptimizationLevel:E,optimizationLevelFrom:M},optimizationLevel}var background,hasRequiredBackground;function requireBackground(){if(hasRequiredBackground)return background;hasRequiredBackground=1;var y=requireOptimizationLevel().OptimizationLevel,R={level1:{property:function(q,d,_){var b=d.value;_.level[y.One].optimizeBackground&&(b.length==1&&b[0][1]=="none"&&(b[0][1]="0 0"),b.length==1&&b[0][1]=="transparent"&&(b[0][1]="0 0"))}}};return background=R,background}var boxShadow,hasRequiredBoxShadow;function requireBoxShadow(){if(hasRequiredBoxShadow)return boxShadow;hasRequiredBoxShadow=1;var y={level1:{property:function(E,q){var d=q.value;d.length==4&&d[0][1]==="0"&&d[1][1]==="0"&&d[2][1]==="0"&&d[3][1]==="0"&&(q.value.splice(2),q.dirty=!0)}}};return boxShadow=y,boxShadow}var borderRadius,hasRequiredBorderRadius;function requireBorderRadius(){if(hasRequiredBorderRadius)return borderRadius;hasRequiredBorderRadius=1;var y=requireOptimizationLevel().OptimizationLevel,R={level1:{property:function(q,d,_){var b=d.value;_.level[y.One].optimizeBorderRadius&&(b.length==3&&b[1][1]=="/"&&b[0][1]==b[2][1]?(d.value.splice(1),d.dirty=!0):b.length==5&&b[2][1]=="/"&&b[0][1]==b[3][1]&&b[1][1]==b[4][1]?(d.value.splice(2),d.dirty=!0):b.length==7&&b[3][1]=="/"&&b[0][1]==b[4][1]&&b[1][1]==b[5][1]&&b[2][1]==b[6][1]?(d.value.splice(3),d.dirty=!0):b.length==9&&b[4][1]=="/"&&b[0][1]==b[5][1]&&b[1][1]==b[6][1]&&b[2][1]==b[7][1]&&b[3][1]==b[8][1]&&(d.value.splice(4),d.dirty=!0))}}};return borderRadius=R,borderRadius}var filter,hasRequiredFilter;function requireFilter(){if(hasRequiredFilter)return filter;hasRequiredFilter=1;var y=requireOptimizationLevel().OptimizationLevel,R=/progid:DXImageTransform\.Microsoft\.(Alpha|Chroma)(\W)/,E=/,(\S)/g,q=/ ?= ?/g,d={level1:{property:function(b,w,O){O.compatibility.properties.ieFilters&&O.level[y.One].optimizeFilter&&(w.value.length==1&&(w.value[0][1]=w.value[0][1].replace(R,function(A,S,P){return S.toLowerCase()+P})),w.value[0][1]=w.value[0][1].replace(E,", $1").replace(q,"="))}}};return filter=d,filter}var fontWeight,hasRequiredFontWeight;function requireFontWeight(){if(hasRequiredFontWeight)return fontWeight;hasRequiredFontWeight=1;var y=requireOptimizationLevel().OptimizationLevel,R={level1:{property:function(q,d,_){var b=d.value[0][1];_.level[y.One].optimizeFontWeight&&(b=="normal"?b="400":b=="bold"&&(b="700"),d.value[0][1]=b)}}};return fontWeight=R,fontWeight}var margin,hasRequiredMargin;function requireMargin(){if(hasRequiredMargin)return margin;hasRequiredMargin=1;var y=requireOptimizationLevel().OptimizationLevel,R={level1:{property:function(q,d,_){var b=d.value;_.level[y.One].replaceMultipleZeros&&b.length==4&&b[0][1]==="0"&&b[1][1]==="0"&&b[2][1]==="0"&&b[3][1]==="0"&&(d.value.splice(1),d.dirty=!0)}}};return margin=R,margin}var outline,hasRequiredOutline;function requireOutline(){if(hasRequiredOutline)return outline;hasRequiredOutline=1;var y=requireOptimizationLevel().OptimizationLevel,R={level1:{property:function(q,d,_){var b=d.value;_.level[y.One].optimizeOutline&&b.length==1&&b[0][1]=="none"&&(b[0][1]="0")}}};return outline=R,outline}var padding,hasRequiredPadding;function requirePadding(){if(hasRequiredPadding)return padding;hasRequiredPadding=1;var y=requireOptimizationLevel().OptimizationLevel;function R(q){return q&&q[1][0]=="-"&&parseFloat(q[1])<0}var E={level1:{property:function(d,_,b){var w=_.value;w.length==4&&w[0][1]==="0"&&w[1][1]==="0"&&w[2][1]==="0"&&w[3][1]==="0"&&(_.value.splice(1),_.dirty=!0),b.level[y.One].removeNegativePaddings&&(R(_.value[0])||R(_.value[1])||R(_.value[2])||R(_.value[3]))&&(_.unused=!0)}}};return padding=E,padding}var propertyOptimizers,hasRequiredPropertyOptimizers;function requirePropertyOptimizers(){return hasRequiredPropertyOptimizers||(hasRequiredPropertyOptimizers=1,propertyOptimizers={background:requireBackground().level1.property,boxShadow:requireBoxShadow().level1.property,borderRadius:requireBorderRadius().level1.property,filter:requireFilter().level1.property,fontWeight:requireFontWeight().level1.property,margin:requireMargin().level1.property,outline:requireOutline().level1.property,padding:requirePadding().level1.property}),propertyOptimizers}var shortenHex_1,hasRequiredShortenHex;function requireShortenHex(){if(hasRequiredShortenHex)return shortenHex_1;hasRequiredShortenHex=1;var y={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#f0f",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",green:"#008000",greenyellow:"#adff2f",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgreen:"#90ee90",lightgrey:"#d3d3d3",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370db",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#db7093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#f00",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"},R={},E={};for(var q in y){var d=y[q];q.length<d.length?E[d]=q:R[q]=d}var _=new RegExp("(^| |,|\\))("+Object.keys(R).join("|")+")( |,|\\)|$)","ig"),b=new RegExp("("+Object.keys(E).join("|")+")([^a-f0-9]|$)","ig");function w(S,P,C,M){return P+R[C.toLowerCase()]+M}function O(S,P,C){return E[P.toLowerCase()]+C}function A(S){var P=S.indexOf("#")>-1,C=S.replace(_,w);return C!=S&&(C=C.replace(_,w)),P?C.replace(b,O):C}return shortenHex_1=A,shortenHex_1}var shortenHsl_1,hasRequiredShortenHsl;function requireShortenHsl(){if(hasRequiredShortenHsl)return shortenHsl_1;hasRequiredShortenHsl=1;function y(q,d,_){var b,w,O;if(q%=360,q<0&&(q+=360),q=~~q/360,d<0?d=0:d>100&&(d=100),d=~~d/100,_<0?_=0:_>100&&(_=100),_=~~_/100,d===0)b=w=O=_;else{var A=_<.5?_*(1+d):_+d-_*d,S=2*_-A;b=R(S,A,q+1/3),w=R(S,A,q),O=R(S,A,q-1/3)}return[~~(b*255),~~(w*255),~~(O*255)]}function R(q,d,_){return _<0&&(_+=1),_>1&&(_-=1),_<1/6?q+(d-q)*6*_:_<1/2?d:_<2/3?q+(d-q)*(2/3-_)*6:q}function E(q,d,_){var b=y(q,d,_),w=b[0].toString(16),O=b[1].toString(16),A=b[2].toString(16);return"#"+((w.length==1?"0":"")+w)+((O.length==1?"0":"")+O)+((A.length==1?"0":"")+A)}return shortenHsl_1=E,shortenHsl_1}var shortenRgb_1,hasRequiredShortenRgb;function requireShortenRgb(){if(hasRequiredShortenRgb)return shortenRgb_1;hasRequiredShortenRgb=1;function y(R,E,q){var d=Math.max(0,Math.min(parseInt(R),255)),_=Math.max(0,Math.min(parseInt(E),255)),b=Math.max(0,Math.min(parseInt(q),255));return"#"+("00000"+(d<<16|_<<8|b).toString(16)).slice(-6)}return shortenRgb_1=y,shortenRgb_1}var split_1,hasRequiredSplit;function requireSplit(){if(hasRequiredSplit)return split_1;hasRequiredSplit=1;var y=requireMarker();function R(q,d,_){return _?d.test(q):q===d}function E(q,d){var _=y.OPEN_ROUND_BRACKET,b=y.CLOSE_ROUND_BRACKET,w=0,O=0,A=0,S,P,C=q.length,M=[],k=typeof d=="object"&&"exec"in d;if(!k&&q.indexOf(d)==-1)return[q];if(q.indexOf(_)==-1)return q.split(d);for(;O<C;)q[O]==_?w++:q[O]==b&&w--,w===0&&O>0&&O+1<C&&R(q[O],d,k)&&(M.push(q.substring(A,O)),k&&d.exec(q[O]).length>1&&M.push(q[O]),A=O+1),O++;return A<O+1&&(S=q.substring(A),P=S[S.length-1],R(P,d,k)&&(S=S.substring(0,S.length-1)),M.push(S)),M}return split_1=E,split_1}var color$2,hasRequiredColor$2;function requireColor$2(){if(hasRequiredColor$2)return color$2;hasRequiredColor$2=1;var y=requireShortenHex(),R=requireShortenHsl(),E=requireShortenRgb(),q=requireSplit(),d=/(rgb|rgba|hsl|hsla)\(([^()]+)\)/gi,_=/#|rgb|hsl/gi,b=/(^|[^='"])#([0-9a-f]{6})/gi,w=/(^|[^='"])#([0-9a-f]{3})/gi,O=/[0-9a-f]/i,A=/hsl\((-?\d+),(-?\d+)%?,(-?\d+)%?\)/gi,S=/(rgb|hsl)a?\((-?\d+),(-?\d+%?),(-?\d+%?),(0*[1-9]+[0-9]*(\.?\d*)?)\)/gi,P=/rgb\((-?\d+),(-?\d+),(-?\d+)\)/gi,C=/(?:rgba|hsla)\(0,0%?,0%?,0\)/g,M={level1:{value:function(L,I,B){return B.compatibility.properties.colors?(I.match(_)&&(I=I.replace(S,function(T,z,V,N,U,x){return parseInt(x)>=1?z+"("+[V,N,U].join(",")+")":T}).replace(P,function(T,z,V,N){return E(z,V,N)}).replace(A,function(T,z,V,N){return R(z,V,N)}).replace(b,function(T,z,V,N,U){var x=U[N+T.length];return x&&O.test(x)?T:V[0]==V[1]&&V[2]==V[3]&&V[4]==V[5]?(z+"#"+V[0]+V[2]+V[4]).toLowerCase():(z+"#"+V).toLowerCase()}).replace(w,function(T,z,V){return z+"#"+V.toLowerCase()}).replace(d,function(T,z,V){var N=V.split(","),U=z&&z.toLowerCase(),x=U=="hsl"&&N.length==3||U=="hsla"&&N.length==4||U=="rgb"&&N.length===3&&V.indexOf("%")>0||U=="rgba"&&N.length==4&&N[0].indexOf("%")>0;return x?(N[1].indexOf("%")==-1&&(N[1]+="%"),N[2].indexOf("%")==-1&&(N[2]+="%"),z+"("+N.join(",")+")"):T}),B.compatibility.colors.opacity&&L.indexOf("background")==-1&&(I=I.replace(C,function(T){return q(I,",").pop().indexOf("gradient(")>-1?T:"transparent"}))),y(I)):I}}};return color$2=M,color$2}var degrees,hasRequiredDegrees;function requireDegrees(){if(hasRequiredDegrees)return degrees;hasRequiredDegrees=1;var y=/\(0deg\)/g,R={level1:{value:function(q,d,_){return!_.compatibility.properties.zeroUnits||d.indexOf("0deg")==-1?d:d.replace(y,"(0)")}}};return degrees=R,degrees}var startsAsUrl_1,hasRequiredStartsAsUrl;function requireStartsAsUrl(){if(hasRequiredStartsAsUrl)return startsAsUrl_1;hasRequiredStartsAsUrl=1;var y=/^url\(/i;function R(E){return y.test(E)}return startsAsUrl_1=R,startsAsUrl_1}var fraction,hasRequiredFraction;function requireFraction(){if(hasRequiredFraction)return fraction;hasRequiredFraction=1;var y=requireSplit(),R=requireStartsAsUrl(),E=requireOptimizationLevel().OptimizationLevel,q=/^expression\(.*\)$/,d=/^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\((.+)\)$/,_=/([\s,/])/,b=/(^|\D)\.0+(\D|$)/g,w=/\.([1-9]*)0+(\D|$)/g,O=/(^|\D)0\.(\d)/g,A=/([^\w\d-]|^)-0([^.]|$)/g,S=/(^|\s)0+([1-9])/g;function P(k){var L,I;return R(k)||q.test(k)?k:(L=d.exec(k),L?(I=y(L[2],_).map(function(B){return P(B)}),L[1]+"("+I.join("")+")"):C(k))}function C(k){return k.indexOf("0")==-1?k:(k.indexOf("-")>-1&&(k=k.replace(A,"$10$2").replace(A,"$10$2")),k.replace(S,"$1$2").replace(b,"$10$2").replace(w,function(L,I,B){return(I.length>0?".":"")+I+B}).replace(O,"$1.$2"))}var M={level1:{value:function(L,I,B){return B.level[E.One].replaceZeroUnits?P(I):I}}};return fraction=M,fraction}var precision,hasRequiredPrecision;function requirePrecision(){if(hasRequiredPrecision)return precision;hasRequiredPrecision=1;var y={level1:{value:function(E,q,d){return!d.precision.enabled||q.indexOf(".")===-1?q:q.replace(d.precision.decimalPointMatcher,"$1$2$3").replace(d.precision.zeroMatcher,function(_,b,w,O){var A=d.precision.units[O].multiplier,S=parseInt(b),P=Number.isNaN(S)?0:S,C=parseFloat(w);return Math.round((P+C)*A)/A+O})}}};return precision=y,precision}var textQuotes,hasRequiredTextQuotes;function requireTextQuotes(){if(hasRequiredTextQuotes)return textQuotes;hasRequiredTextQuotes=1;var y=requireOptimizationLevel().OptimizationLevel,R=/^local\(/i,E=/^('.*'|".*")$/,q=/^['"][a-zA-Z][a-zA-Z\d\-_]+['"]$/,d=/^['"](?:cursive|default|emoji|fangsong|fantasy|inherit|initial|math|monospace|revert|revert-layer|sans-serif|serif|system-ui|ui-monospace|ui-rounded|ui-sans-serif|ui-serif|unset)['"]$/,_={level1:{value:function(w,O,A){return(w=="font-family"||w=="font")&&d.test(O)||!A.level[y.One].removeQuotes||!E.test(O)&&!R.test(O)?O:q.test(O)?O.substring(1,O.length-1):O}}};return textQuotes=_,textQuotes}var time,hasRequiredTime;function requireTime(){if(hasRequiredTime)return time;hasRequiredTime=1;var y=requireOptimizationLevel().OptimizationLevel,R=/^(-?[\d.]+)(m?s)$/,E={level1:{value:function(d,_,b){return!b.level[y.One].replaceTimeUnits||!R.test(_)?_:_.replace(R,function(w,O,A){var S;return A=="ms"?S=parseInt(O)/1e3+"s":A=="s"&&(S=parseFloat(O)*1e3+"ms"),S.length<w.length?S:w})}}};return time=E,time}var unit$1,hasRequiredUnit$1;function requireUnit$1(){if(hasRequiredUnit$1)return unit$1;hasRequiredUnit$1=1;var y=/(?:^|\s|\()(-?\d+)px/,R={level1:{value:function(q,d,_){return y.test(d)?d.replace(y,function(b,w){var O,A=parseInt(w);return A===0?b:(_.compatibility.properties.shorterLengthUnits&&_.compatibility.units.pt&&A*3%4===0&&(O=A*3/4+"pt"),_.compatibility.properties.shorterLengthUnits&&_.compatibility.units.pc&&A%16===0&&(O=A/16+"pc"),_.compatibility.properties.shorterLengthUnits&&_.compatibility.units.in&&A%96===0&&(O=A/96+"in"),O&&(O=b.substring(0,b.indexOf(w))+O),O&&O.length<b.length?O:b)}):d}}};return unit$1=R,unit$1}var urlPrefix,hasRequiredUrlPrefix;function requireUrlPrefix(){if(hasRequiredUrlPrefix)return urlPrefix;hasRequiredUrlPrefix=1;var y=requireStartsAsUrl(),R=requireOptimizationLevel().OptimizationLevel,E=/^url\(/i,q={level1:{value:function(_,b,w){return!w.level[R.One].normalizeUrls||!y(b)?b:b.replace(E,"url(")}}};return urlPrefix=q,urlPrefix}var urlQuotes,hasRequiredUrlQuotes;function requireUrlQuotes(){if(hasRequiredUrlQuotes)return urlQuotes;hasRequiredUrlQuotes=1;var y=/^url\(['"].+['"]\)$/,R=/^url\(['"].*[*\s()'"].*['"]\)$/,E=/["']/g,q=/^url\(['"]data:[^;]+;charset/,d={level1:{value:function(b,w,O){return O.compatibility.properties.urlQuotes?w:y.test(w)&&!R.test(w)&&!q.test(w)?w.replace(E,""):w}}};return urlQuotes=d,urlQuotes}var urlWhitespace,hasRequiredUrlWhitespace;function requireUrlWhitespace(){if(hasRequiredUrlWhitespace)return urlWhitespace;hasRequiredUrlWhitespace=1;var y=requireStartsAsUrl(),R=/\\?\n|\\?\r\n/g,E=/(\()\s+/g,q=/\s+(\))/g,d={level1:{value:function(b,w){return y(w)?w.replace(R,"").replace(E,"$1").replace(q,"$1"):w}}};return urlWhitespace=d,urlWhitespace}var whitespace,hasRequiredWhitespace;function requireWhitespace(){if(hasRequiredWhitespace)return whitespace;hasRequiredWhitespace=1;var y=requireOptimizationLevel().OptimizationLevel,R=requireMarker(),E=/\) ?\/ ?/g,q=/, /g,d=/\r?\n/g,_=/\s+/g,b=/\s+(;?\))/g,w=/(\(;?)\s+/g,O=/^--\S+$/,A=/^var\(\s*--\S+\s*\)$/,S={level1:{value:function(C,M,k){return!k.level[y.One].removeWhitespace||O.test(C)&&!A.test(M)||M.indexOf(" ")==-1&&M.indexOf(` `)==-1||M.indexOf("expression")===0||M.indexOf(R.SINGLE_QUOTE)>-1||M.indexOf(R.DOUBLE_QUOTE)>-1?M:(M=M.replace(d,""),M=M.replace(_," "),M.indexOf("calc")>-1&&(M=M.replace(E,")/ ")),M.replace(w,"$1").replace(b,"$1").replace(q,","))}}};return whitespace=S,whitespace}var zero,hasRequiredZero;function requireZero(){if(hasRequiredZero)return zero;hasRequiredZero=1;var y=requireSplit(),R=/^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\((.+)\)$/,E=/^(?:-moz-calc|-webkit-calc|calc|rgb|hsl|rgba|hsla|min|max|clamp|expression)\(/,q=/([\s,/])/;function d(w,O){var A,S;return E.test(w)?w:(A=R.exec(w),A?(S=y(A[2],q).map(function(P){return d(P,O)}),A[1]+"("+S.join("")+")"):_(w,O))}function _(w,O){return w.replace(O.unitsRegexp,"$10$2").replace(O.unitsRegexp,"$10$2")}var b={level1:{value:function(O,A,S){return!S.compatibility.properties.zeroUnits||A.indexOf("%")>0&&(O=="height"||O=="max-height"||O=="width"||O=="max-width")?A:d(A,S)}}};return zero=b,zero}var valueOptimizers,hasRequiredValueOptimizers;function requireValueOptimizers(){return hasRequiredValueOptimizers||(hasRequiredValueOptimizers=1,valueOptimizers={color:requireColor$2().level1.value,degrees:requireDegrees().level1.value,fraction:requireFraction().level1.value,precision:requirePrecision().level1.value,textQuotes:requireTextQuotes().level1.value,time:requireTime().level1.value,unit:requireUnit$1().level1.value,urlPrefix:requireUrlPrefix().level1.value,urlQuotes:requireUrlQuotes().level1.value,urlWhiteSpace:requireUrlWhitespace().level1.value,whiteSpace:requireWhitespace().level1.value,zero:requireZero().level1.value}),valueOptimizers}var configuration_1,hasRequiredConfiguration;function requireConfiguration(){if(hasRequiredConfiguration)return configuration_1;hasRequiredConfiguration=1;var y=requireBreakUp(),R=requireCanOverride(),E=requireRestore(),q=requirePropertyOptimizers(),d=requireValueOptimizers(),_=requireOverride(),b={animation:{canOverride:R.generic.components([R.generic.time,R.generic.timingFunction,R.generic.time,R.property.animationIterationCount,R.property.animationDirection,R.property.animationFillMode,R.property.animationPlayState,R.property.animationName]),components:["animation-duration","animation-timing-function","animation-delay","animation-iteration-count","animation-direction","animation-fill-mode","animation-play-state","animation-name"],breakUp:y.multiplex(y.animation),defaultValue:"none",restore:E.multiplex(E.withoutDefaults),shorthand:!0,valueOptimizers:[d.whiteSpace,d.textQuotes,d.time,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-delay":{canOverride:R.generic.time,componentOf:["animation"],defaultValue:"0s",intoMultiplexMode:"real",valueOptimizers:[d.time,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-direction":{canOverride:R.property.animationDirection,componentOf:["animation"],defaultValue:"normal",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-duration":{canOverride:R.generic.time,componentOf:["animation"],defaultValue:"0s",intoMultiplexMode:"real",keepUnlessDefault:"animation-delay",valueOptimizers:[d.time,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-fill-mode":{canOverride:R.property.animationFillMode,componentOf:["animation"],defaultValue:"none",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-iteration-count":{canOverride:R.property.animationIterationCount,componentOf:["animation"],defaultValue:"1",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-name":{canOverride:R.property.animationName,componentOf:["animation"],defaultValue:"none",intoMultiplexMode:"real",valueOptimizers:[d.textQuotes],vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-play-state":{canOverride:R.property.animationPlayState,componentOf:["animation"],defaultValue:"running",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},"animation-timing-function":{canOverride:R.generic.timingFunction,componentOf:["animation"],defaultValue:"ease",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-o-","-webkit-"]},background:{canOverride:R.generic.components([R.generic.image,R.property.backgroundPosition,R.property.backgroundSize,R.property.backgroundRepeat,R.property.backgroundAttachment,R.property.backgroundOrigin,R.property.backgroundClip,R.generic.color]),components:["background-image","background-position","background-size","background-repeat","background-attachment","background-origin","background-clip","background-color"],breakUp:y.multiplex(y.background),defaultValue:"0 0",propertyOptimizer:q.background,restore:E.multiplex(E.background),shortestValue:"0",shorthand:!0,valueOptimizers:[d.whiteSpace,d.urlWhiteSpace,d.fraction,d.zero,d.color,d.urlPrefix,d.urlQuotes]},"background-attachment":{canOverride:R.property.backgroundAttachment,componentOf:["background"],defaultValue:"scroll",intoMultiplexMode:"real"},"background-clip":{canOverride:R.property.backgroundClip,componentOf:["background"],defaultValue:"border-box",intoMultiplexMode:"real",shortestValue:"border-box"},"background-color":{canOverride:R.generic.color,componentOf:["background"],defaultValue:"transparent",intoMultiplexMode:"real",multiplexLastOnly:!0,nonMergeableValue:"none",shortestValue:"red",valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"background-image":{canOverride:R.generic.image,componentOf:["background"],defaultValue:"none",intoMultiplexMode:"default",valueOptimizers:[d.urlWhiteSpace,d.urlPrefix,d.urlQuotes,d.whiteSpace,d.fraction,d.precision,d.unit,d.zero,d.color]},"background-origin":{canOverride:R.property.backgroundOrigin,componentOf:["background"],defaultValue:"padding-box",intoMultiplexMode:"real",shortestValue:"border-box"},"background-position":{canOverride:R.property.backgroundPosition,componentOf:["background"],defaultValue:["0","0"],doubleValues:!0,intoMultiplexMode:"real",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"background-repeat":{canOverride:R.property.backgroundRepeat,componentOf:["background"],defaultValue:["repeat"],doubleValues:!0,intoMultiplexMode:"real"},"background-size":{canOverride:R.property.backgroundSize,componentOf:["background"],defaultValue:["auto"],doubleValues:!0,intoMultiplexMode:"real",shortestValue:"0 0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},bottom:{canOverride:R.property.bottom,defaultValue:"auto",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},border:{breakUp:y.border,canOverride:R.generic.components([R.generic.unit,R.property.borderStyle,R.generic.color]),components:["border-width","border-style","border-color"],defaultValue:"none",overridesShorthands:["border-bottom","border-left","border-right","border-top"],restore:E.withoutDefaults,shorthand:!0,shorthandComponents:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.zero,d.color]},"border-bottom":{breakUp:y.border,canOverride:R.generic.components([R.generic.unit,R.property.borderStyle,R.generic.color]),components:["border-bottom-width","border-bottom-style","border-bottom-color"],defaultValue:"none",restore:E.withoutDefaults,shorthand:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.zero,d.color]},"border-bottom-color":{canOverride:R.generic.color,componentOf:["border-bottom","border-color"],defaultValue:"none",valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"border-bottom-left-radius":{canOverride:R.generic.unit,componentOf:["border-radius"],defaultValue:"0",propertyOptimizer:q.borderRadius,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-o-"]},"border-bottom-right-radius":{canOverride:R.generic.unit,componentOf:["border-radius"],defaultValue:"0",propertyOptimizer:q.borderRadius,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-o-"]},"border-bottom-style":{canOverride:R.property.borderStyle,componentOf:["border-bottom","border-style"],defaultValue:"none"},"border-bottom-width":{canOverride:R.generic.unit,componentOf:["border-bottom","border-width"],defaultValue:"medium",oppositeTo:"border-top-width",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"border-collapse":{canOverride:R.property.borderCollapse,defaultValue:"separate"},"border-color":{breakUp:y.fourValues,canOverride:R.generic.components([R.generic.color,R.generic.color,R.generic.color,R.generic.color]),componentOf:["border"],components:["border-top-color","border-right-color","border-bottom-color","border-left-color"],defaultValue:"none",restore:E.fourValues,shortestValue:"red",shorthand:!0,singleTypeComponents:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"border-left":{breakUp:y.border,canOverride:R.generic.components([R.generic.unit,R.property.borderStyle,R.generic.color]),components:["border-left-width","border-left-style","border-left-color"],defaultValue:"none",restore:E.withoutDefaults,shorthand:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.zero,d.color]},"border-left-color":{canOverride:R.generic.color,componentOf:["border-color","border-left"],defaultValue:"none",valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"border-left-style":{canOverride:R.property.borderStyle,componentOf:["border-left","border-style"],defaultValue:"none"},"border-left-width":{canOverride:R.generic.unit,componentOf:["border-left","border-width"],defaultValue:"medium",oppositeTo:"border-right-width",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"border-radius":{breakUp:y.borderRadius,canOverride:R.generic.components([R.generic.unit,R.generic.unit,R.generic.unit,R.generic.unit]),components:["border-top-left-radius","border-top-right-radius","border-bottom-right-radius","border-bottom-left-radius"],defaultValue:"0",propertyOptimizer:q.borderRadius,restore:E.borderRadius,shorthand:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-o-"]},"border-right":{breakUp:y.border,canOverride:R.generic.components([R.generic.unit,R.property.borderStyle,R.generic.color]),components:["border-right-width","border-right-style","border-right-color"],defaultValue:"none",restore:E.withoutDefaults,shorthand:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"border-right-color":{canOverride:R.generic.color,componentOf:["border-color","border-right"],defaultValue:"none",valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"border-right-style":{canOverride:R.property.borderStyle,componentOf:["border-right","border-style"],defaultValue:"none"},"border-right-width":{canOverride:R.generic.unit,componentOf:["border-right","border-width"],defaultValue:"medium",oppositeTo:"border-left-width",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"border-style":{breakUp:y.fourValues,canOverride:R.generic.components([R.property.borderStyle,R.property.borderStyle,R.property.borderStyle,R.property.borderStyle]),componentOf:["border"],components:["border-top-style","border-right-style","border-bottom-style","border-left-style"],defaultValue:"none",restore:E.fourValues,shorthand:!0,singleTypeComponents:!0},"border-top":{breakUp:y.border,canOverride:R.generic.components([R.generic.unit,R.property.borderStyle,R.generic.color]),components:["border-top-width","border-top-style","border-top-color"],defaultValue:"none",restore:E.withoutDefaults,shorthand:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.zero,d.color,d.unit]},"border-top-color":{canOverride:R.generic.color,componentOf:["border-color","border-top"],defaultValue:"none",valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"border-top-left-radius":{canOverride:R.generic.unit,componentOf:["border-radius"],defaultValue:"0",propertyOptimizer:q.borderRadius,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-o-"]},"border-top-right-radius":{canOverride:R.generic.unit,componentOf:["border-radius"],defaultValue:"0",propertyOptimizer:q.borderRadius,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-o-"]},"border-top-style":{canOverride:R.property.borderStyle,componentOf:["border-style","border-top"],defaultValue:"none"},"border-top-width":{canOverride:R.generic.unit,componentOf:["border-top","border-width"],defaultValue:"medium",oppositeTo:"border-bottom-width",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"border-width":{breakUp:y.fourValues,canOverride:R.generic.components([R.generic.unit,R.generic.unit,R.generic.unit,R.generic.unit]),componentOf:["border"],components:["border-top-width","border-right-width","border-bottom-width","border-left-width"],defaultValue:"medium",restore:E.fourValues,shortestValue:"0",shorthand:!0,singleTypeComponents:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"box-shadow":{propertyOptimizer:q.boxShadow,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero,d.color],vendorPrefixes:["-moz-","-ms-","-o-","-webkit-"]},clear:{canOverride:R.property.clear,defaultValue:"none"},clip:{valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},color:{canOverride:R.generic.color,defaultValue:"transparent",shortestValue:"red",valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"column-gap":{valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},cursor:{canOverride:R.property.cursor,defaultValue:"auto"},display:{canOverride:R.property.display},filter:{propertyOptimizer:q.filter,valueOptimizers:[d.fraction]},float:{canOverride:R.property.float,defaultValue:"none"},font:{breakUp:y.font,canOverride:R.generic.components([R.property.fontStyle,R.property.fontVariant,R.property.fontWeight,R.property.fontStretch,R.generic.unit,R.generic.unit,R.property.fontFamily]),components:["font-style","font-variant","font-weight","font-stretch","font-size","line-height","font-family"],restore:E.font,shorthand:!0,valueOptimizers:[d.textQuotes]},"font-family":{canOverride:R.property.fontFamily,defaultValue:"user|agent|specific",valueOptimizers:[d.textQuotes]},"font-size":{canOverride:R.generic.unit,defaultValue:"medium",shortestValue:"0",valueOptimizers:[d.fraction]},"font-stretch":{canOverride:R.property.fontStretch,defaultValue:"normal"},"font-style":{canOverride:R.property.fontStyle,defaultValue:"normal"},"font-variant":{canOverride:R.property.fontVariant,defaultValue:"normal"},"font-weight":{canOverride:R.property.fontWeight,defaultValue:"normal",propertyOptimizer:q.fontWeight,shortestValue:"400"},gap:{valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},height:{canOverride:R.generic.unit,defaultValue:"auto",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},left:{canOverride:R.property.left,defaultValue:"auto",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"letter-spacing":{valueOptimizers:[d.fraction,d.zero]},"line-height":{canOverride:R.generic.unitOrNumber,defaultValue:"normal",shortestValue:"0",valueOptimizers:[d.fraction,d.zero]},"list-style":{canOverride:R.generic.components([R.property.listStyleType,R.property.listStylePosition,R.property.listStyleImage]),components:["list-style-type","list-style-position","list-style-image"],breakUp:y.listStyle,restore:E.withoutDefaults,defaultValue:"outside",shortestValue:"none",shorthand:!0},"list-style-image":{canOverride:R.generic.image,componentOf:["list-style"],defaultValue:"none"},"list-style-position":{canOverride:R.property.listStylePosition,componentOf:["list-style"],defaultValue:"outside",shortestValue:"inside"},"list-style-type":{canOverride:R.property.listStyleType,componentOf:["list-style"],defaultValue:"decimal|disc",shortestValue:"none"},margin:{breakUp:y.fourValues,canOverride:R.generic.components([R.generic.unit,R.generic.unit,R.generic.unit,R.generic.unit]),components:["margin-top","margin-right","margin-bottom","margin-left"],defaultValue:"0",propertyOptimizer:q.margin,restore:E.fourValues,shorthand:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"margin-bottom":{canOverride:R.generic.unit,componentOf:["margin"],defaultValue:"0",oppositeTo:"margin-top",propertyOptimizer:q.margin,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"margin-inline-end":{valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"margin-inline-start":{valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"margin-left":{canOverride:R.generic.unit,componentOf:["margin"],defaultValue:"0",oppositeTo:"margin-right",propertyOptimizer:q.margin,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"margin-right":{canOverride:R.generic.unit,componentOf:["margin"],defaultValue:"0",oppositeTo:"margin-left",propertyOptimizer:q.margin,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"margin-top":{canOverride:R.generic.unit,componentOf:["margin"],defaultValue:"0",oppositeTo:"margin-bottom",propertyOptimizer:q.margin,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"max-height":{canOverride:R.generic.unit,defaultValue:"none",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"max-width":{canOverride:R.generic.unit,defaultValue:"none",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"min-height":{canOverride:R.generic.unit,defaultValue:"0",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"min-width":{canOverride:R.generic.unit,defaultValue:"0",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},opacity:{valueOptimizers:[d.fraction,d.precision]},outline:{canOverride:R.generic.components([R.generic.color,R.property.outlineStyle,R.generic.unit]),components:["outline-color","outline-style","outline-width"],breakUp:y.outline,restore:E.withoutDefaults,defaultValue:"0",propertyOptimizer:q.outline,shorthand:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"outline-color":{canOverride:R.generic.color,componentOf:["outline"],defaultValue:"invert",shortestValue:"red",valueOptimizers:[d.whiteSpace,d.fraction,d.color]},"outline-style":{canOverride:R.property.outlineStyle,componentOf:["outline"],defaultValue:"none"},"outline-width":{canOverride:R.generic.unit,componentOf:["outline"],defaultValue:"medium",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},overflow:{canOverride:R.property.overflow,defaultValue:"visible"},"overflow-x":{canOverride:R.property.overflow,defaultValue:"visible"},"overflow-y":{canOverride:R.property.overflow,defaultValue:"visible"},padding:{breakUp:y.fourValues,canOverride:R.generic.components([R.generic.unit,R.generic.unit,R.generic.unit,R.generic.unit]),components:["padding-top","padding-right","padding-bottom","padding-left"],defaultValue:"0",propertyOptimizer:q.padding,restore:E.fourValues,shorthand:!0,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"padding-bottom":{canOverride:R.generic.unit,componentOf:["padding"],defaultValue:"0",oppositeTo:"padding-top",propertyOptimizer:q.padding,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"padding-left":{canOverride:R.generic.unit,componentOf:["padding"],defaultValue:"0",oppositeTo:"padding-right",propertyOptimizer:q.padding,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"padding-right":{canOverride:R.generic.unit,componentOf:["padding"],defaultValue:"0",oppositeTo:"padding-left",propertyOptimizer:q.padding,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"padding-top":{canOverride:R.generic.unit,componentOf:["padding"],defaultValue:"0",oppositeTo:"padding-bottom",propertyOptimizer:q.padding,valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},position:{canOverride:R.property.position,defaultValue:"static"},right:{canOverride:R.property.right,defaultValue:"auto",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"row-gap":{valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},src:{valueOptimizers:[d.urlWhiteSpace,d.urlPrefix,d.urlQuotes]},"stroke-width":{valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"text-align":{canOverride:R.property.textAlign,defaultValue:"left|right"},"text-decoration":{canOverride:R.property.textDecoration,defaultValue:"none"},"text-indent":{canOverride:R.property.textOverflow,defaultValue:"none",valueOptimizers:[d.fraction,d.zero]},"text-overflow":{canOverride:R.property.textOverflow,defaultValue:"none"},"text-shadow":{canOverride:R.property.textShadow,defaultValue:"none",valueOptimizers:[d.whiteSpace,d.fraction,d.zero,d.color]},top:{canOverride:R.property.top,defaultValue:"auto",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},transform:{canOverride:R.property.transform,valueOptimizers:[d.whiteSpace,d.degrees,d.fraction,d.precision,d.unit,d.zero],vendorPrefixes:["-moz-","-ms-","-o-","-webkit-"]},transition:{breakUp:y.multiplex(y.transition),canOverride:R.generic.components([R.property.transitionProperty,R.generic.time,R.generic.timingFunction,R.generic.time]),components:["transition-property","transition-duration","transition-timing-function","transition-delay"],defaultValue:"none",restore:E.multiplex(E.withoutDefaults),shorthand:!0,valueOptimizers:[d.time,d.fraction],vendorPrefixes:["-moz-","-ms-","-o-","-webkit-"]},"transition-delay":{canOverride:R.generic.time,componentOf:["transition"],defaultValue:"0s",intoMultiplexMode:"real",valueOptimizers:[d.time],vendorPrefixes:["-moz-","-ms-","-o-","-webkit-"]},"transition-duration":{canOverride:R.generic.time,componentOf:["transition"],defaultValue:"0s",intoMultiplexMode:"real",keepUnlessDefault:"transition-delay",valueOptimizers:[d.time,d.fraction],vendorPrefixes:["-moz-","-ms-","-o-","-webkit-"]},"transition-property":{canOverride:R.generic.propertyName,componentOf:["transition"],defaultValue:"all",intoMultiplexMode:"placeholder",placeholderValue:"_",vendorPrefixes:["-moz-","-ms-","-o-","-webkit-"]},"transition-timing-function":{canOverride:R.generic.timingFunction,componentOf:["transition"],defaultValue:"ease",intoMultiplexMode:"real",vendorPrefixes:["-moz-","-ms-","-o-","-webkit-"]},"vertical-align":{canOverride:R.property.verticalAlign,defaultValue:"baseline",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},visibility:{canOverride:R.property.visibility,defaultValue:"visible"},"-webkit-tap-highlight-color":{valueOptimizers:[d.whiteSpace,d.color]},"-webkit-margin-end":{valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"white-space":{canOverride:R.property.whiteSpace,defaultValue:"normal"},width:{canOverride:R.generic.unit,defaultValue:"auto",shortestValue:"0",valueOptimizers:[d.whiteSpace,d.fraction,d.precision,d.unit,d.zero]},"z-index":{canOverride:R.property.zIndex,defaultValue:"auto"}},w={};function O(k,L){var I=_(b[k],{});return"componentOf"in I&&(I.componentOf=I.componentOf.map(function(B){return L+B})),"components"in I&&(I.components=I.components.map(function(B){return L+B})),"keepUnlessDefault"in I&&(I.keepUnlessDefault=L+I.keepUnlessDefault),I}for(var A in b){var S=b[A];if("vendorPrefixes"in S){for(var P=0;P<S.vendorPrefixes.length;P++){var C=S.vendorPrefixes[P],M=O(A,C);delete M.vendorPrefixes,w[C+A]=M}delete S.vendorPrefixes}}return configuration_1=_(b,w),configuration_1}var helpers,hasRequiredHelpers;function requireHelpers(){if(hasRequiredHelpers)return helpers;hasRequiredHelpers=1;var y="",R=requireFormat().Breaks,E=requireFormat().Spaces,q=requireMarker(),d=requireToken();function _(D){return D[1][1]=="background"||D[1][1]=="transform"||D[1][1]=="src"}function b(D,$){return D[$][1][D[$][1].length-1]==q.CLOSE_ROUND_BRACKET}function w(D,$){return D[$][1]==q.COMMA}function O(D,$){return D[$][1]==q.FORWARD_SLASH}function A(D,$){return D[$+1]&&D[$+1][1]==q.COMMA}function S(D,$){return D[$+1]&&D[$+1][1]==q.FORWARD_SLASH}function P(D){return D[1][1]=="filter"||D[1][1]=="-ms-filter"}function C(D,$,G){return!D.spaceAfterClosingBrace&&_($)&&b($,G)||S($,G)||O($,G)||A($,G)||w($,G)}function M(D,$){for(var G=D.store,j=0,W=$.length;j<W;j++)G(D,$[j]),j<W-1&&G(D,K(D))}function k(D,$){for(var G=L($),j=0,W=$.length;j<W;j++)I(D,$,j,G)}function L(D){for(var $=D.length-1;$>=0&&D[$][0]==d.COMMENT;$--);return $}function I(D,$,G,j){var W=D.store,H=$[G],Y=H[2],te=Y&&Y[0]===d.PROPERTY_BLOCK,J;D.format?D.format.semicolonAfterLastProperty||te||G<j?J=!0:J=!1:J=G<j||te;var ie=G===j;switch(H[0]){case d.AT_RULE:W(D,H),W(D,x(D,R.AfterProperty,!1));break;case d.AT_RULE_BLOCK:M(D,H[1]),W(D,V(D,R.AfterRuleBegins,!0)),k(D,H[2]),W(D,N(D,R.AfterRuleEnds,!1,ie));break;case d.COMMENT:W(D,H),W(D,T(D,R.AfterComment)+D.indentWith);break;case d.PROPERTY:W(D,H[1]),W(D,U(D)),Y&&B(D,H),W(D,J?x(D,R.AfterProperty,ie):y);break;case d.RAW:W(D,H)}}function B(D,$){var G=D.store,j,W;if($[2][0]==d.PROPERTY_BLOCK)G(D,V(D,R.AfterBlockBegins,!1)),k(D,$[2][1]),G(D,N(D,R.AfterBlockEnds,!1,!0));else for(j=2,W=$.length;j<W;j++)G(D,$[j]),j<W-1&&(P($)||!C(D,$,j))&&G(D,q.SPACE)}function T(D,$){return D.format?D.format.breaks[$]:y}function z(D,$){return D.format&&D.format.spaces[$]}function V(D,$,G){return D.format?(D.indentBy+=D.format.indentBy,D.indentWith=D.format.indentWith.repeat(D.indentBy),(G&&z(D,E.BeforeBlockBegins)?q.SPACE:y)+q.OPEN_CURLY_BRACKET+T(D,$)+D.indentWith):q.OPEN_CURLY_BRACKET}function N(D,$,G,j){return D.format?(D.indentBy-=D.format.indentBy,D.indentWith=D.format.indentWith.repeat(D.indentBy),(G?T(D,R.BeforeBlockEnds):T(D,R.AfterProperty))+D.indentWith+q.CLOSE_CURLY_BRACKET+(j?y:T(D,$)+D.indentWith)):q.CLOSE_CURLY_BRACKET}function U(D){return D.format?q.COLON+(z(D,E.BeforeValue)?q.SPACE:y):q.COLON}function x(D,$,G){return D.format?q.SEMICOLON+(G?y:T(D,$)+D.indentWith):q.SEMICOLON}function K(D){return D.format?q.COMMA+T(D,R.BetweenSelectors)+D.indentWith:q.COMMA}function F(D,$){var G=D.store,j,W,H,Y;for(H=0,Y=$.length;H<Y;H++)switch(j=$[H],W=H==Y-1,j[0]){case d.AT_RULE:G(D,j),G(D,x(D,R.AfterAtRule,W));break;case d.AT_RULE_BLOCK:M(D,j[1]),G(D,V(D,R.AfterRuleBegins,!0)),k(D,j[2]),G(D,N(D,R.AfterRuleEnds,!1,W));break;case d.NESTED_BLOCK:M(D,j[1]),G(D,V(D,R.AfterBlockBegins,!0)),F(D,j[2]),G(D,N(D,R.AfterBlockEnds,!0,W));break;case d.COMMENT:G(D,j),G(D,T(D,R.AfterComment)+D.indentWith);break;case d.RAW:G(D,j);break;case d.RULE:M(D,j[1]),G(D,V(D,R.AfterRuleBegins,!0)),k(D,j[2]),G(D,N(D,R.AfterRuleEnds,!1,W));break}}return helpers={all:F,body:k,property:I,rules:M,value:B},helpers}var oneTime,hasRequiredOneTime;function requireOneTime(){if(hasRequiredOneTime)return oneTime;hasRequiredOneTime=1;var y=requireHelpers();function R(O,A){O.output.push(typeof A=="string"?A:A[1])}function E(){var O={output:[],store:R};return O}function q(O){var A=E();return y.all(A,O),A.output.join("")}function d(O){var A=E();return y.body(A,O),A.output.join("")}function _(O,A){var S=E();return y.property(S,O,A,!0),S.output.join("")}function b(O){var A=E();return y.rules(A,O),A.output.join("")}function w(O){var A=E();return y.value(A,O),A.output.join("")}return oneTime={all:q,body:d,property:_,rules:b,value:w},oneTime}var optimize$2,hasRequiredOptimize$2;function requireOptimize$2(){if(hasRequiredOptimize$2)return optimize$2;hasRequiredOptimize$2=1;var y=requireSortSelectors(),R=requireTidyRules(),E=requireTidyBlock(),q=requireTidyAtRule(),d=requireHack(),_=requireRemoveUnused(),b=requireRestoreFromOptimizing(),w=requireWrapForOptimizing().all,O=requireConfiguration(),A=requireValueOptimizers(),S=requireOptimizationLevel().OptimizationLevel,P=requireToken(),C=requireMarker(),M=requireFormatPosition(),k=requireOneTime().rules,L="@charset",I=new RegExp("^"+L,"i"),B=requireRoundingPrecision().DEFAULT,T=/^--\S+$/,z=/^(?:-chrome-|-[\w-]+\w|\w[\w-]+\w|\w{1,})$/,V=/^@import/i,N=/^url\(/i;function U(ie){return N.test(ie)}function x(ie){return V.test(ie[1])}function K(ie){var re;return ie.name=="filter"||ie.name=="-ms-filter"?(re=ie.value[0][1],re.indexOf("progid")>-1||re.indexOf("alpha")===0||re.indexOf("chroma")===0):!1}function F(){}function D(ie,re,ee){return re}function $(ie,re,ee){var Q=ee.options,X,Z,se,ne,ae,he,ve,ge=k(ie),ce=w(re),be=ee.options.plugins.level1Value,Re=ee.options.plugins.level1Property,we,_e,qe;for(_e=0,qe=ce.length;_e<qe;_e++){var Se,Ae,le,me;if(Z=ce[_e],se=Z.name,ve=O[se]&&O[se].propertyOptimizer||F,X=O[se]&&O[se].valueOptimizers||[A.whiteSpace],we=T.test(se),we&&(X=Q.variableOptimizers.length>0?Q.variableOptimizers:[A.whiteSpace]),!we&&!z.test(se)){he=Z.all[Z.position],ee.warnings.push("Invalid property name '"+se+"' at "+M(he[1][2][0])+". Ignoring."),Z.unused=!0;continue}if(Z.value.length===0){he=Z.all[Z.position],ee.warnings.push("Empty property '"+se+"' at "+M(he[1][2][0])+". Ignoring."),Z.unused=!0;continue}if(Z.hack&&((Z.hack[0]==d.ASTERISK||Z.hack[0]==d.UNDERSCORE)&&!Q.compatibility.properties.iePrefixHack||Z.hack[0]==d.BACKSLASH&&!Q.compatibility.properties.ieSuffixHack||Z.hack[0]==d.BANG&&!Q.compatibility.properties.ieBangHack)){Z.unused=!0;continue}if(!Q.compatibility.properties.ieFilters&&K(Z)){Z.unused=!0;continue}if(Z.block){$(ie,Z.value[0][1],ee);continue}for(Se=0,le=Z.value.length;Se<le;Se++){if(ne=Z.value[Se][0],ae=Z.value[Se][1],ne==P.PROPERTY_BLOCK){Z.unused=!0,ee.warnings.push("Invalid value token at "+M(ae[0][1][2][0])+". Ignoring.");break}if(U(ae)&&!ee.validator.isUrl(ae)){Z.unused=!0,ee.warnings.push("Broken URL '"+ae+"' at "+M(Z.value[Se][2][0])+". Ignoring.");break}for(Ae=0,me=X.length;Ae<me;Ae++)ae=X[Ae](se,ae,Q);for(Ae=0,me=be.length;Ae<me;Ae++)ae=be[Ae](se,ae,Q);Z.value[Se][1]=ae}for(ve(ge,Z,Q),Se=0,le=Re.length;Se<le;Se++)Re[Se](ge,Z,Q)}b(ce),_(ce),G(re,Q)}function G(ie,re){var ee,Q;for(Q=0;Q<ie.length;Q++)ee=ie[Q],ee[0]==P.COMMENT&&(j(ee,re),ee[1].length===0&&(ie.splice(Q,1),Q--))}function j(ie,re){if(ie[1][2]==C.EXCLAMATION&&(re.level[S.One].specialComments=="all"||re.commentsKept<re.level[S.One].specialComments)){re.commentsKept++;return}ie[1]=[]}function W(ie){for(var re=!1,ee=0,Q=ie.length;ee<Q;ee++){var X=ie[ee];X[0]==P.AT_RULE&&I.test(X[1])&&(re||X[1].indexOf(L)==-1?(ie.splice(ee,1),ee--,Q--):(re=!0,ie.splice(ee,1),ie.unshift([P.AT_RULE,X[1].replace(I,L)])))}}function H(ie){var re=["px","em","ex","cm","mm","in","pt","pc","%"],ee=["ch","rem","vh","vm","vmax","vmin","vw"];return ee.forEach(function(Q){ie.compatibility.units[Q]&&re.push(Q)}),new RegExp("(^|\\s|\\(|,)0(?:"+re.join("|")+")(\\W|$)","g")}function Y(ie){var re={matcher:null,units:{}},ee=[],Q,X;for(Q in ie)X=ie[Q],X!=B&&(re.units[Q]={},re.units[Q].value=X,re.units[Q].multiplier=10**X,ee.push(Q));return ee.length>0&&(re.enabled=!0,re.decimalPointMatcher=new RegExp("(\\d)\\.($|"+ee.join("|")+")($|\\W)","g"),re.zeroMatcher=new RegExp("(\\d*)(\\.\\d+)("+ee.join("|")+")","g")),re}function te(ie){return ie.level[S.One].variableValueOptimizers.map(function(re){return typeof re=="string"?A[re]||D:re})}function J(ie,re){var ee=re.options,Q=ee.level[S.One],X=ee.compatibility.selectors.ie7Hack,Z=ee.compatibility.selectors.adjacentSpace,se=ee.compatibility.properties.spaceAfterClosingBrace,ne=ee.format,ae=!1,he=!1;ee.unitsRegexp=ee.unitsRegexp||H(ee),ee.precision=ee.precision||Y(Q.roundingPrecision),ee.commentsKept=ee.commentsKept||0,ee.variableOptimizers=ee.variableOptimizers||te(ee);for(var ve=0,ge=ie.length;ve<ge;ve++){var ce=ie[ve];switch(ce[0]){case P.AT_RULE:ce[1]=x(ce)&&he?"":ce[1],ce[1]=Q.tidyAtRules?q(ce[1]):ce[1],ae=!0;break;case P.AT_RULE_BLOCK:$(ce[1],ce[2],re),he=!0;break;case P.NESTED_BLOCK:ce[1]=Q.tidyBlockScopes?E(ce[1],se):ce[1],J(ce[2],re),he=!0;break;case P.COMMENT:j(ce,ee);break;case P.RULE:ce[1]=Q.tidySelectors?R(ce[1],!X,Z,ne,re.warnings):ce[1],ce[1]=ce[1].length>1?y(ce[1],Q.selectorsSortingMethod):ce[1],$(ce[1],ce[2],re),he=!0;break}(ce[0]==P.COMMENT&&ce[1].length===0||Q.removeEmpty&&(ce[1].length===0||ce[2]&&ce[2].length===0))&&(ie.splice(ve,1),ve--,ge--)}return Q.cleanupCharsets&&ae&&W(ie),ie}return optimize$2=J,optimize$2}var isMergeable_1,hasRequiredIsMergeable;function requireIsMergeable(){if(hasRequiredIsMergeable)return isMergeable_1;hasRequiredIsMergeable=1;var y=requireMarker(),R=requireSplit(),E=/\/deep\//,q=/^::/,d=/:(-moz-|-ms-|-o-|-webkit-)/,_=":not",b=[":dir",":lang",":not",":nth-child",":nth-last-child",":nth-last-of-type",":nth-of-type"],w=/[>+~]/,O=[":after",":before",":first-letter",":first-line",":lang"],A=["::after","::before","::first-letter","::first-line"],S={DOUBLE_QUOTE:"double-quote",SINGLE_QUOTE:"single-quote",ROOT:"root"};function P(N,U,x,K){var F=R(N,y.COMMA),D,$,G;for($=0,G=F.length;$<G;$++)if(D=F[$],D.length===0||C(D)||M(D)||D.indexOf(y.COLON)>-1&&!L(D,k(D),U,x,K))return!1;return!0}function C(N){return E.test(N)}function M(N){return d.test(N)}function k(N){var U=[],x,K=[],F=S.ROOT,D=0,$,G,j=!1,W,H=!1,Y,te;for(Y=0,te=N.length;Y<te;Y++)x=N[Y],W=!G&&w.test(x),$=F==S.DOUBLE_QUOTE||F==S.SINGLE_QUOTE,G?K.push(x):x==y.DOUBLE_QUOTE&&F==S.ROOT?(K.push(x),F=S.DOUBLE_QUOTE):x==y.DOUBLE_QUOTE&&F==S.DOUBLE_QUOTE?(K.push(x),F=S.ROOT):x==y.SINGLE_QUOTE&&F==S.ROOT?(K.push(x),F=S.SINGLE_QUOTE):x==y.SINGLE_QUOTE&&F==S.SINGLE_QUOTE?(K.push(x),F=S.ROOT):$?K.push(x):x==y.OPEN_ROUND_BRACKET?(K.push(x),D++):x==y.CLOSE_ROUND_BRACKET&&D==1&&j?(K.push(x),U.push(K.join("")),D--,K=[],j=!1):x==y.CLOSE_ROUND_BRACKET?(K.push(x),D--):x==y.COLON&&D===0&&j&&!H?(U.push(K.join("")),K=[],K.push(x)):x==y.COLON&&D===0&&!H?(K=[],K.push(x),j=!0):x==y.SPACE&&D===0&&j?(U.push(K.join("")),K=[],j=!1):W&&D===0&&j?(U.push(K.join("")),K=[],j=!1):K.push(x),G=x==y.BACK_SLASH,H=x==y.COLON;return K.length>0&&j&&U.push(K.join("")),U}function L(N,U,x,K,F){return I(U,x,K)&&B(U)&&(U.length<2||!T(N,U))&&(U.length<2||F&&z(U))}function I(N,U,x){var K,F,D,$;for(D=0,$=N.length;D<$;D++)if(K=N[D],F=K.indexOf(y.OPEN_ROUND_BRACKET)>-1?K.substring(0,K.indexOf(y.OPEN_ROUND_BRACKET)):K,U.indexOf(F)===-1&&x.indexOf(F)===-1)return!1;return!0}function B(N){var U,x,K,F,D,$;for(D=0,$=N.length;D<$;D++)if(U=N[D],K=U.indexOf(y.OPEN_ROUND_BRACKET),F=K>-1,x=F?U.substring(0,K):U,F&&b.indexOf(x)==-1||!F&&b.indexOf(x)>-1)return!1;return!0}function T(N,U){var x=0,K,F,D,$,G,j,W,H,Y;for(H=0,Y=U.length;H<Y&&(K=U[H],D=U[H+1],!!D);H++)if(F=N.indexOf(K,x),$=N.indexOf(K,F+1),x=$,W=F+K.length==$,W&&(G=K.indexOf(y.OPEN_ROUND_BRACKET)>-1?K.substring(0,K.indexOf(y.OPEN_ROUND_BRACKET)):K,j=D.indexOf(y.OPEN_ROUND_BRACKET)>-1?D.substring(0,D.indexOf(y.OPEN_ROUND_BRACKET)):D,G!=_||j!=_))return!0;return!1}function z(N){var U=0,x,K,F;for(K=0,F=N.length;K<F;K++)if(x=N[K],V(x)?U+=A.indexOf(x)>-1?1:0:U+=O.indexOf(x)>-1?1:0,U>1)return!1;return!0}function V(N){return q.test(N)}return isMergeable_1=P,isMergeable_1}var everyValuesPair_1,hasRequiredEveryValuesPair;function requireEveryValuesPair(){if(hasRequiredEveryValuesPair)return everyValuesPair_1;hasRequiredEveryValuesPair=1;var y=requireMarker();function R(E,q,d){var _=q.value.length,b=d.value.length,w=Math.max(_,b),O=Math.min(_,b)-1,A,S,P;for(P=0;P<w;P++)if(A=q.value[P]&&q.value[P][1]||A,S=d.value[P]&&d.value[P][1]||S,!(A==y.COMMA||S==y.COMMA)&&!E(A,S,P,P<=O))return!1;return!0}return everyValuesPair_1=R,everyValuesPair_1}var hasInherit_1,hasRequiredHasInherit;function requireHasInherit(){if(hasRequiredHasInherit)return hasInherit_1;hasRequiredHasInherit=1;function y(R){for(var E=R.value.length-1;E>=0;E--)if(R.value[E][1]=="inherit")return!0;return!1}return hasInherit_1=y,hasInherit_1}var hasSameValues_1,hasRequiredHasSameValues;function requireHasSameValues(){if(hasRequiredHasSameValues)return hasSameValues_1;hasRequiredHasSameValues=1;function y(R){var E=R.value[0][1],q,d;for(q=1,d=R.value.length;q<d;q++)if(R.value[q][1]!=E)return!1;return!0}return hasSameValues_1=y,hasSameValues_1}var populateComponents_1,hasRequiredPopulateComponents;function requirePopulateComponents(){if(hasRequiredPopulateComponents)return populateComponents_1;hasRequiredPopulateComponents=1;var y=requireConfiguration(),R=requireInvalidPropertyError();function E(_,b,w){for(var O,A,S,P=_.length-1;P>=0;P--){var C=_[P],M=y[C.name];if(!C.dynamic&&M&&M.shorthand){if(q(C,b)||d(C,b)){C.optimizable=!1;continue}C.shorthand=!0,C.dirty=!0;try{if(C.components=M.breakUp(C,y,b),M.shorthandComponents)for(A=0,S=C.components.length;A<S;A++)O=C.components[A],O.components=y[O.name].breakUp(O,y,b)}catch(k){if(k instanceof R)C.components=[],w.push(k.message);else throw k}C.components.length>0?C.multiplex=C.components[0].multiplex:C.unused=!0}}}function q(_,b){return _.value.length==1&&b.isVariable(_.value[0][1])}function d(_,b){return _.value.length>1&&_.value.filter(function(w){return b.isVariable(w[1])}).length>1}return populateComponents_1=E,populateComponents_1}var restoreWithComponents_1,hasRequiredRestoreWithComponents;function requireRestoreWithComponents(){if(hasRequiredRestoreWithComponents)return restoreWithComponents_1;hasRequiredRestoreWithComponents=1;var y=requireConfiguration();function R(E){var q=y[E.name];return q&&q.shorthand?q.restore(E,y):E.value}return restoreWithComponents_1=R,restoreWithComponents_1}var mergeIntoShorthands_1,hasRequiredMergeIntoShorthands;function requireMergeIntoShorthands(){if(hasRequiredMergeIntoShorthands)return mergeIntoShorthands_1;hasRequiredMergeIntoShorthands=1;var y=requireEveryValuesPair(),R=requireHasInherit(),E=requireHasSameValues(),q=requirePopulateComponents(),d=requireConfiguration(),_=requireClone().deep,b=requireRestoreWithComponents(),w=requireRestoreFromOptimizing(),O=requireWrapForOptimizing().single,A=requireOneTime().body,S=requireToken();function P(j,W){var H={},Y,te,J,ie,re,ee,Q;if(!(j.length<3)){for(ie=0,re=j.length;ie<re;ie++)if(J=j[ie],Y=d[J.name],!J.dynamic&&!J.unused&&!J.hack&&!J.block&&!(Y&&Y.singleTypeComponents&&!E(J))&&(C(j,ie,H,W),Y&&Y.componentOf))for(ee=0,Q=Y.componentOf.length;ee<Q;ee++)te=Y.componentOf[ee],H[te]=H[te]||{},H[te][J.name]=J;C(j,ie,H,W)}}function C(j,W,H,Y){var te=j[W],J,ie,re,ee=[],Q;for(J in H)if(!(te!==void 0&&J==te.name)){if(ie=d[J],re=H[J],te&&M(H,J,te)){delete H[J];continue}ie.components.length>Object.keys(re).length||k(re)||L(re,J,Y)&&B(re)&&(T(re)?z(j,re,J,Y):D(j,re,J,Y),ee.push(J))}for(Q=ee.length-1;Q>=0;Q--)delete H[ee[Q]]}function M(j,W,H){var Y=d[W],te=d[H.name],J;if("overridesShorthands"in Y&&Y.overridesShorthands.indexOf(H.name)>-1)return!0;if(te&&"componentOf"in te){for(J in j[W])if(te.componentOf.indexOf(J)>-1)return!0}return!1}function k(j){var W,H;for(H in j){if(W!==void 0&&j[H].important!=W)return!0;W=j[H].important}return!1}function L(j,W,H){var Y=d[W],te=[S.PROPERTY,[S.PROPERTY_NAME,W],[S.PROPERTY_VALUE,Y.defaultValue]],J=O(te),ie,re,ee,Q;for(q([J],H,[]),ee=0,Q=Y.components.length;ee<Q;ee++)if(ie=j[Y.components[ee]],re=d[ie.name].canOverride||I,!y(re.bind(null,H),J.components[ee],ie))return!1;return!0}function I(j,W,H){return W===H}function B(j){var W=null,H,Y,te,J,ie;for(Y in j)if(te=j[Y],J=d[Y],"restore"in J){if(w([te.all[te.position]],b),ie=J.restore(te,d),H=ie.length,W!==null&&H!==W)return!1;W=H}return!0}function T(j){var W,H=null,Y;for(W in j){if(Y=R(j[W]),H!==null&&H!==Y)return!0;H=Y}return!1}function z(j,W,H,Y){var te=V(W,H,Y),J=K(W,H,Y),ie=te[0],re=J[0],ee=A(ie).length<A(re).length,Q=ee?ie:re,X=ee?te[1]:J[1],Z=ee?te[2]:J[2],se=W[Object.keys(W).pop()],ne=se.all,ae=se.position,he,ve,ge,ce;X.position=ae,X.shorthand=!0,X.important=se.important,X.multiplex=!1,X.dirty=!0,X.all=ne,X.all[ae]=Q[0],j.splice(ae,1,X);for(he in W)ve=W[he],ve.unused=!0,X.multiplex=X.multiplex||ve.multiplex,ve.name in Z&&(ge=Z[ve.name],ce=F(Q,he),ge.position=ne.length,ge.all=ne,ge.all.push(ce),j.push(ge))}function V(j,W,H){var Y=[],te={},J={},ie=d[W],re=[S.PROPERTY,[S.PROPERTY_NAME,W],[S.PROPERTY_VALUE,ie.defaultValue]],ee=O(re),Q,X,Z,se,ne,ae;for(q([ee],H,[]),ne=0,ae=ie.components.length;ne<ae;ne++)Q=j[ie.components[ne]],R(Q)?(X=Q.all[Q.position].slice(0,2),Array.prototype.push.apply(X,Q.value),Y.push(X),Z=_(Q),Z.value=N(j,Z.name),ee.components[ne]=Z,te[Q.name]=_(Q)):(Z=_(Q),Z.all=Q.all,ee.components[ne]=Z,J[Q.name]=Q);return ee.important=j[Object.keys(j).pop()].important,se=U(J,1),re[1].push(se),w([ee],b),re=re.slice(0,2),Array.prototype.push.apply(re,ee.value),Y.unshift(re),[Y,ee,te]}function N(j,W){var H=d[W];return"oppositeTo"in H?j[H.oppositeTo].value:[[S.PROPERTY_VALUE,H.defaultValue]]}function U(j,W){var H=[],Y,te,J,ie;for(ie in j)Y=j[ie],te=Y.all[Y.position],J=te[W][te[W].length-1],Array.prototype.push.apply(H,J);return H.sort(x)}function x(j,W){var H=j[0],Y=W[0],te=j[1],J=W[1];return H<Y||H===Y&&te<J?-1:1}function K(j,W,H){var Y=[],te={},J={},ie=d[W],re=[S.PROPERTY,[S.PROPERTY_NAME,W],[S.PROPERTY_VALUE,"inherit"]],ee=O(re),Q,X,Z,se,ne,ae;for(q([ee],H,[]),ne=0,ae=ie.components.length;ne<ae;ne++)Q=j[ie.components[ne]],R(Q)?te[Q.name]=Q:(X=Q.all[Q.position].slice(0,2),Array.prototype.push.apply(X,Q.value),Y.push(X),J[Q.name]=_(Q));return Z=U(te,1),re[1].push(Z),se=U(te,2),re[2].push(se),Y.unshift(re),[Y,ee,J]}function F(j,W){var H,Y;for(H=0,Y=j.length;H<Y;H++)if(j[H][1][1]==W)return j[H]}function D(j,W,H,Y){var te=d[H],J,ie,re=[S.PROPERTY,[S.PROPERTY_NAME,H],[S.PROPERTY_VALUE,te.defaultValue]],ee,Q=$(j,W,H),X=O(re);X.shorthand=!0,X.dirty=!0,X.multiplex=!1,q([X],Y,[]);for(var Z=0,se=te.components.length;Z<se;Z++){var ne=W[te.components[Z]];X.components[Z]=_(ne),X.important=ne.important,X.multiplex=X.multiplex||ne.multiplex,ee=ne.all}for(var ae in W)W[ae].unused=!0;J=U(W,1),re[1].push(J),ie=U(W,2),re[2].push(ie),X.position=Q,X.all=ee,X.all[Q]=re,j.splice(Q,1,X)}function $(j,W,H){var Y=Object.keys(W),te=W[Y[0]].position,J=W[Y[Y.length-1]].position;return H=="border"&&G(j.slice(te,J),"border-image")?te:J}function G(j,W){for(var H=j.length-1;H>=0;H--)if(j[H].name==W)return!0;return!1}return mergeIntoShorthands_1=P,mergeIntoShorthands_1}var hasUnset_1,hasRequiredHasUnset;function requireHasUnset(){if(hasRequiredHasUnset)return hasUnset_1;hasRequiredHasUnset=1;function y(R){for(var E=R.value.length-1;E>=0;E--)if(R.value[E][1]=="unset")return!0;return!1}return hasUnset_1=y,hasUnset_1}var findComponentIn_1,hasRequiredFindComponentIn;function requireFindComponentIn(){if(hasRequiredFindComponentIn)return findComponentIn_1;hasRequiredFindComponentIn=1;var y=requireConfiguration();function R(_,b){var w=E(b);return q(_,w)||d(_,w)}function E(_){return function(b){return _.name===b.name}}function q(_,b){return _.components.filter(b)[0]}function d(_,b){var w,O,A,S;if(y[_.name].shorthandComponents){for(A=0,S=_.components.length;A<S;A++)if(w=_.components[A],O=q(w,b),O)return O}}return findComponentIn_1=R,findComponentIn_1}var isComponentOf_1,hasRequiredIsComponentOf;function requireIsComponentOf(){if(hasRequiredIsComponentOf)return isComponentOf_1;hasRequiredIsComponentOf=1;var y=requireConfiguration();function R(d,_,b){return E(d,_)||!b&&!!y[d.name].shorthandComponents&&q(d,_)}function E(d,_){var b=y[d.name];return"components"in b&&b.components.indexOf(_.name)>-1}function q(d,_){return d.components.some(function(b){return E(b,_)})}return isComponentOf_1=R,isComponentOf_1}var isMergeableShorthand_1,hasRequiredIsMergeableShorthand;function requireIsMergeableShorthand(){if(hasRequiredIsMergeableShorthand)return isMergeableShorthand_1;hasRequiredIsMergeableShorthand=1;var y=requireMarker();function R(E){return E.name!="font"?!0:E.value[0][1].indexOf(y.INTERNAL)==-1}return isMergeableShorthand_1=R,isMergeableShorthand_1}var overridesNonComponentShorthand_1,hasRequiredOverridesNonComponentShorthand;function requireOverridesNonComponentShorthand(){if(hasRequiredOverridesNonComponentShorthand)return overridesNonComponentShorthand_1;hasRequiredOverridesNonComponentShorthand=1;var y=requireConfiguration();function R(E,q){return E.name in y&&"overridesShorthands"in y[E.name]&&y[E.name].overridesShorthands.indexOf(q.name)>-1}return overridesNonComponentShorthand_1=R,overridesNonComponentShorthand_1}var overrideProperties_1,hasRequiredOverrideProperties;function requireOverrideProperties(){if(hasRequiredOverrideProperties)return overrideProperties_1;hasRequiredOverrideProperties=1;var y=requireHasInherit(),R=requireHasUnset(),E=requireEveryValuesPair(),q=requireFindComponentIn(),d=requireIsComponentOf(),_=requireIsMergeableShorthand(),b=requireOverridesNonComponentShorthand(),w=requireVendorPrefixes().same,O=requireConfiguration(),A=requireClone().deep,S=requireRestoreWithComponents(),P=requireClone().shallow,C=requireRestoreFromOptimizing(),M=requireToken(),k=requireMarker(),L=requireOneTime().property;function I(ee,Q,X){return Q===X}function B(ee,Q){for(var X=0;X<ee.components.length;X++){var Z=ee.components[X],se=O[Z.name],ne=se&&se.canOverride||I,ae=P(Z);if(ae.value=[[M.PROPERTY_VALUE,se.defaultValue]],!E(ne.bind(null,Q),ae,Z))return!0}return!1}function T(ee,Q){Q.unused=!0,x(Q,D(ee)),ee.value=Q.value}function z(ee,Q){Q.unused=!0,ee.multiplex=!0,ee.value=Q.value}function V(ee,Q){Q.unused=!0,ee.value=Q.value}function N(ee,Q){Q.multiplex?z(ee,Q):ee.multiplex?T(ee,Q):V(ee,Q)}function U(ee,Q){Q.unused=!0;for(var X=0,Z=ee.components.length;X<Z;X++)N(ee.components[X],Q.components[X])}function x(ee,Q){ee.multiplex=!0,O[ee.name].shorthand?K(ee,Q):F(ee,Q)}function K(ee,Q){var X,Z,se;for(Z=0,se=ee.components.length;Z<se;Z++)X=ee.components[Z],X.multiplex||F(X,Q)}function F(ee,Q){for(var X=O[ee.name],Z=X.intoMultiplexMode=="real",se=X.intoMultiplexMode=="real"?ee.value.slice(0):X.intoMultiplexMode=="placeholder"?X.placeholderValue:X.defaultValue,ne=D(ee),ae,he=se.length;ne<Q;ne++)if(ee.value.push([M.PROPERTY_VALUE,k.COMMA]),Array.isArray(se))for(ae=0;ae<he;ae++)ee.value.push(Z?se[ae]:[M.PROPERTY_VALUE,se[ae]]);else ee.value.push(Z?se:[M.PROPERTY_VALUE,se])}function D(ee){for(var Q=0,X=0,Z=ee.value.length;X<Z;X++)ee.value[X][1]==k.COMMA&&Q++;return Q+1}function $(ee){var Q=[M.PROPERTY,[M.PROPERTY_NAME,ee.name]].concat(ee.value);return L([Q],0).length}function G(ee,Q,X){for(var Z=0,se=Q;se>=0&&(ee[se].name==X&&!ee[se].unused&&Z++,!(Z>1));se--);return Z>1}function j(ee,Q){for(var X=0,Z=ee.components.length;X<Z;X++)if(!W(Q.isUrl,ee.components[X])&&W(Q.isFunction,ee.components[X]))return!0;return!1}function W(ee,Q){for(var X=0,Z=Q.value.length;X<Z;X++)if(Q.value[X][1]!=k.COMMA&&ee(Q.value[X][1]))return!0;return!1}function H(ee,Q){if(!ee.multiplex&&!Q.multiplex||ee.multiplex&&Q.multiplex)return!1;var X=ee.multiplex?ee:Q,Z=ee.multiplex?Q:ee,se,ne=A(X);C([ne],S);var ae=A(Z);C([ae],S);var he=$(ne)+1+$(ae);ee.multiplex?(se=q(ne,ae),T(se,ae)):(se=q(ae,ne),x(ae,D(ne)),z(se,ne)),C([ae],S);var ve=$(ae);return he<=ve}function Y(ee){return ee.name in O}function te(ee,Q){return!ee.multiplex&&(ee.name=="background"||ee.name=="background-image")&&Q.multiplex&&(Q.name=="background"||Q.name=="background-image")&&J(Q.value)}function J(ee){for(var Q=ie(ee),X=0,Z=Q.length;X<Z;X++)if(Q[X].length==1&&Q[X][0][1]=="none")return!0;return!1}function ie(ee){for(var Q=[],X=0,Z=[],se=ee.length;X<se;X++){var ne=ee[X];ne[1]==k.COMMA?(Q.push(Z),Z=[]):Z.push(ne)}return Q.push(Z),Q}function re(ee,Q,X,Z){var se,ne,ae,he,ve,ge,ce,be,Re,we,_e;e:for(Re=ee.length-1;Re>=0;Re--)if(ne=ee[Re],!!Y(ne)&&!ne.block){se=O[ne.name].canOverride||I;r:for(we=Re-1;we>=0;we--)if(ae=ee[we],!!Y(ae)&&!ae.block&&!(ae.dynamic||ne.dynamic)&&!(ae.unused||ne.unused)&&!(ae.hack&&!ne.hack&&!ne.important||!ae.hack&&!ae.important&&ne.hack)&&!(ae.important==ne.important&&ae.hack[0]!=ne.hack[0])&&!(ae.important==ne.important&&(ae.hack[0]!=ne.hack[0]||ae.hack[1]&&ae.hack[1]!=ne.hack[1]))&&!y(ne)&&!te(ae,ne)){if(ne.shorthand&&d(ne,ae)){if(!ne.important&&ae.important||!w([ae],ne.components)||!W(Z.isFunction,ae)&&j(ne,Z))continue;if(!_(ne)){ae.unused=!0;continue}he=q(ne,ae),se=O[ae.name].canOverride||I,E(se.bind(null,Z),ae,he)&&(ae.unused=!0)}else if(ne.shorthand&&b(ne,ae)){if(!ne.important&&ae.important||!w([ae],ne.components)||!W(Z.isFunction,ae)&&j(ne,Z))continue;for(ve=ae.shorthand?ae.components:[ae],_e=ve.length-1;_e>=0;_e--)if(ge=ve[_e],ce=q(ne,ge),se=O[ge.name].canOverride||I,!E(se.bind(null,Z),ae,ce))continue r;ae.unused=!0}else if(Q&&ae.shorthand&&!ne.shorthand&&d(ae,ne,!0)){if(ne.important&&!ae.important)continue;if(!ne.important&&ae.important){ne.unused=!0;continue}if(G(ee,Re-1,ae.name)||j(ae,Z)||!_(ae)||R(ae)||R(ne))continue;if(he=q(ae,ne),E(se.bind(null,Z),he,ne)){var qe=!X.properties.backgroundClipMerging&&he.name.indexOf("background-clip")>-1||!X.properties.backgroundOriginMerging&&he.name.indexOf("background-origin")>-1||!X.properties.backgroundSizeMerging&&he.name.indexOf("background-size")>-1,Se=O[ne.name].nonMergeableValue===ne.value[0][1];if(qe||Se||!X.properties.merging&&B(ae,Z)||he.value[0][1]!=ne.value[0][1]&&(y(ae)||y(ne))||H(ae,ne))continue;!ae.multiplex&&ne.multiplex&&x(ae,D(ne)),N(he,ne),ae.dirty=!0}}else if(Q&&ae.shorthand&&ne.shorthand&&ae.name==ne.name){if(!ae.multiplex&&ne.multiplex)continue;if(!ne.important&&ae.important){ne.unused=!0;continue e}if(ne.important&&!ae.important){ae.unused=!0;continue}if(!_(ne)){ae.unused=!0;continue}for(_e=ae.components.length-1;_e>=0;_e--){var Ae=ae.components[_e],le=ne.components[_e];if(se=O[Ae.name].canOverride||I,!E(se.bind(null,Z),Ae,le))continue e}U(ae,ne),ae.dirty=!0}else if(Q&&ae.shorthand&&ne.shorthand&&d(ae,ne)){if(!ae.important&&ne.important||(he=q(ae,ne),se=O[ne.name].canOverride||I,!E(se.bind(null,Z),he,ne)))continue;if(ae.important&&!ne.important){ne.unused=!0;continue}var me=O[ne.name].restore(ne,O);if(me.length>1)continue;he=q(ae,ne),N(he,ne),ne.dirty=!0}else if(ae.name==ne.name){if(be=!0,ne.shorthand)for(_e=ne.components.length-1;_e>=0&&be;_e--)ge=ae.components[_e],ce=ne.components[_e],se=O[ce.name].canOverride||I,be=E(se.bind(null,Z),ge,ce);else se=O[ne.name].canOverride||I,be=E(se.bind(null,Z),ae,ne);if(ae.important&&!ne.important&&be){ne.unused=!0;continue}if(!ae.important&&ne.important&&be){ae.unused=!0;continue}if(!be)continue;ae.unused=!0}}}}return overrideProperties_1=re,overrideProperties_1}var optimize$1,hasRequiredOptimize$1;function requireOptimize$1(){if(hasRequiredOptimize$1)return optimize$1;hasRequiredOptimize$1=1;var y=requireMergeIntoShorthands(),R=requireOverrideProperties(),E=requirePopulateComponents(),q=requireRestoreWithComponents(),d=requireWrapForOptimizing().all,_=requireRemoveUnused(),b=requireRestoreFromOptimizing(),w=requireOptimizationLevel().OptimizationLevel;function O(A,S,P,C){var M=C.options.level[w.Two],k=d(A,M.skipProperties),L,I,B;for(E(k,C.validator,C.warnings),I=0,B=k.length;I<B;I++)L=k[I],L.block&&O(L.value[0][1],S,P,C);P&&M.mergeIntoShorthands&&y(k,C.validator),S&&M.overrideProperties&&R(k,P,C.options.compatibility,C.validator),b(k,q),_(k)}return optimize$1=O,optimize$1}var mergeAdjacent_1,hasRequiredMergeAdjacent;function requireMergeAdjacent(){if(hasRequiredMergeAdjacent)return mergeAdjacent_1;hasRequiredMergeAdjacent=1;var y=requireIsMergeable(),R=requireOptimize$1(),E=requireSortSelectors(),q=requireTidyRules(),d=requireOptimizationLevel().OptimizationLevel,_=requireOneTime().body,b=requireOneTime().rules,w=requireToken();function O(A,S){for(var P=[null,[],[]],C=S.options,M=C.compatibility.selectors.adjacentSpace,k=C.level[d.One].selectorsSortingMethod,L=C.compatibility.selectors.mergeablePseudoClasses,I=C.compatibility.selectors.mergeablePseudoElements,B=C.compatibility.selectors.mergeLimit,T=C.compatibility.selectors.multiplePseudoMerging,z=0,V=A.length;z<V;z++){var N=A[z];if(N[0]!=w.RULE){P=[null,[],[]];continue}P[0]==w.RULE&&b(N[1])==b(P[1])?(Array.prototype.push.apply(P[2],N[2]),R(P[2],!0,!0,S),N[2]=[]):P[0]==w.RULE&&_(N[2])==_(P[2])&&y(b(N[1]),L,I,T)&&y(b(P[1]),L,I,T)&&P[1].length<B?(P[1]=q(P[1].concat(N[1]),!1,M,!1,S.warnings),P[1]=P.length>1?E(P[1],k):P[1],N[2]=[]):P=N}}return mergeAdjacent_1=O,mergeAdjacent_1}var rulesOverlap_1,hasRequiredRulesOverlap;function requireRulesOverlap(){if(hasRequiredRulesOverlap)return rulesOverlap_1;hasRequiredRulesOverlap=1;var y=/--.+$/;function R(q,d,_){var b,w,O,A,S,P;for(O=0,A=q.length;O<A;O++)for(b=q[O][1],S=0,P=d.length;S<P;S++)if(w=d[S][1],b==w||_&&E(b)==E(w))return!0;return!1}function E(q){return q.replace(y,"")}return rulesOverlap_1=R,rulesOverlap_1}var specificity_1,hasRequiredSpecificity;function requireSpecificity(){if(hasRequiredSpecificity)return specificity_1;hasRequiredSpecificity=1;var y=requireMarker(),R={DOT:".",HASH:"#",PSEUDO:":"},E=/[a-zA-Z]/,q=":not(",d=/[\s,(>~+]/;function _(w){var O=[0,0,0],A,S,P,C,M=0,k,L=!1,I=!1,B,T;for(B=0,T=w.length;B<T;B++){if(A=w[B],!S)if(A==y.SINGLE_QUOTE&&!C&&!P)P=!0;else if(A==y.SINGLE_QUOTE&&!C&&P)P=!1;else if(A==y.DOUBLE_QUOTE&&!C&&!P)C=!0;else if(A==y.DOUBLE_QUOTE&&C&&!P)C=!1;else{if(P||C)continue;M>0&&!L||(A==y.OPEN_ROUND_BRACKET?M++:A==y.CLOSE_ROUND_BRACKET&&M==1?(M--,L=!1):A==y.CLOSE_ROUND_BRACKET?M--:A==R.HASH?O[0]++:A==R.DOT||A==y.OPEN_SQUARE_BRACKET?O[1]++:A==R.PSEUDO&&!I&&!b(w,B)?(O[1]++,L=!1):A==R.PSEUDO?L=!0:(B===0||k)&&E.test(A)&&O[2]++)}S=A==y.BACK_SLASH,I=A==R.PSEUDO,k=!S&&d.test(A)}return O}function b(w,O){return w.indexOf(q,O)===O}return specificity_1=_,specificity_1}var specificitiesOverlap_1,hasRequiredSpecificitiesOverlap;function requireSpecificitiesOverlap(){if(hasRequiredSpecificitiesOverlap)return specificitiesOverlap_1;hasRequiredSpecificitiesOverlap=1;var y=requireSpecificity();function R(q,d,_){var b,w,O,A,S,P;for(O=0,A=q.length;O<A;O++)for(b=E(q[O][1],_),S=0,P=d.length;S<P;S++)if(w=E(d[S][1],_),b[0]===w[0]&&b[1]===w[1]&&b[2]===w[2])return!0;return!1}function E(q,d){var _;return q in d||(d[q]=_=y(q)),_||d[q]}return specificitiesOverlap_1=R,specificitiesOverlap_1}var reorderable,hasRequiredReorderable;function requireReorderable(){if(hasRequiredReorderable)return reorderable;hasRequiredReorderable=1;var y=requireRulesOverlap(),R=requireSpecificitiesOverlap(),E=/align-items|box-align|box-pack|flex|justify/,q=/^border-(top|right|bottom|left|color|style|width|radius)/;function d(M,k,L){for(var I=k.length-1;I>=0;I--)for(var B=M.length-1;B>=0;B--)if(!_(M[B],k[I],L))return!1;return!0}function _(M,k,L){var I=M[0],B=M[1],T=M[2],z=M[5],V=M[6],N=k[0],U=k[1],x=k[2],K=k[5],F=k[6];return I=="font"&&N=="line-height"||N=="font"&&I=="line-height"||E.test(I)&&E.test(N)||T==x&&w(I)==w(N)&&b(I)^b(N)||T=="border"&&q.test(x)&&(I=="border"||I==x||B!=U&&O(I,N))||x=="border"&&q.test(T)&&(N=="border"||N==T||B!=U&&O(I,N))||T=="border"&&x=="border"&&I!=N&&(A(I)&&S(N)||S(I)&&A(N))?!1:!!(T!=x||I==N&&T==x&&(B==U||P(B,U))||I!=N&&T==x&&I!=T&&N!=x||I!=N&&T==x&&B==U||F&&V&&!C(T)&&!C(x)&&!y(K,z,!1)||!R(z,K,L))}function b(M){return/^-(?:moz|webkit|ms|o)-/.test(M)}function w(M){return M.replace(/^-(?:moz|webkit|ms|o)-/,"")}function O(M,k){return M.split("-").pop()==k.split("-").pop()}function A(M){return M=="border-top"||M=="border-right"||M=="border-bottom"||M=="border-left"}function S(M){return M=="border-color"||M=="border-style"||M=="border-width"}function P(M,k){return b(M)&&b(k)&&M.split("-")[1]!=k.split("-")[2]}function C(M){return M=="font"||M=="line-height"||M=="list-style"}return reorderable={canReorder:d,canReorderSingle:_},reorderable}var extractProperties_1,hasRequiredExtractProperties;function requireExtractProperties(){if(hasRequiredExtractProperties)return extractProperties_1;hasRequiredExtractProperties=1;var y=requireToken(),R=requireOneTime().rules,E=requireOneTime().value;function q(_){var b=[],w,O,A,S,P,C;if(_[0]==y.RULE)for(w=!/[.+>~]/.test(R(_[1])),P=0,C=_[2].length;P<C;P++)O=_[2][P],O[0]==y.PROPERTY&&(A=O[1][1],A.length!==0&&(S=E(O,P),b.push([A,S,d(A),_[2][P],A+":"+S,_[1],w])));else if(_[0]==y.NESTED_BLOCK)for(P=0,C=_[2].length;P<C;P++)b=b.concat(q(_[2][P]));return b}function d(_){return _=="list-style"?_:_.indexOf("-radius")>0?"border-radius":_=="border-collapse"||_=="border-spacing"||_=="border-image"?_:_.indexOf("border-")===0&&/^border-\w+-\w+$/.test(_)?_.match(/border-\w+/)[0]:_.indexOf("border-")===0&&/^border-\w+$/.test(_)?"border":_.indexOf("text-")===0||_=="-chrome-"?_:_.replace(/^-\w+-/,"").match(/([a-zA-Z]+)/)[0].toLowerCase()}return extractProperties_1=q,extractProperties_1}var mergeMediaQueries_1,hasRequiredMergeMediaQueries;function requireMergeMediaQueries(){if(hasRequiredMergeMediaQueries)return mergeMediaQueries_1;hasRequiredMergeMediaQueries=1;var y=requireReorderable().canReorder,R=requireReorderable().canReorderSingle,E=requireExtractProperties(),q=requireRulesOverlap(),d=requireOneTime().rules,_=requireOptimizationLevel().OptimizationLevel,b=requireToken();function w(A,S){for(var P=S.options.level[_.Two].mergeSemantically,C=S.cache.specificity,M={},k=[],L=A.length-1;L>=0;L--){var I=A[L];if(I[0]==b.NESTED_BLOCK){var B=d(I[1]),T=M[B];T||(T=[],M[B]=T),T.push(L)}}for(var z in M){var V=M[z];e:for(var N=V.length-1;N>0;N--){var U=V[N],x=A[U],K=V[N-1],F=A[K];r:for(var D=1;D>=-1;D-=2){for(var $=D==1,G=$?U+1:K-1,j=$?K:U,W=$?1:-1,H=$?x:F,Y=$?F:x,te=E(H);G!=j;){var J=E(A[G]);if(G+=W,!(P&&O(te,J,C))&&!y(te,J,C))continue r}Y[2]=$?H[2].concat(Y[2]):Y[2].concat(H[2]),H[2]=[],k.push(Y);continue e}}}return k}function O(A,S,P){var C,M,k,L,I,B,T,z;for(I=0,B=A.length;I<B;I++)for(C=A[I],M=C[5],T=0,z=S.length;T<z;T++)if(k=S[T],L=k[5],q(M,L,!0)&&!R(C,k,P))return!1;return!0}return mergeMediaQueries_1=w,mergeMediaQueries_1}var mergeNonAdjacentByBody_1,hasRequiredMergeNonAdjacentByBody;function requireMergeNonAdjacentByBody(){if(hasRequiredMergeNonAdjacentByBody)return mergeNonAdjacentByBody_1;hasRequiredMergeNonAdjacentByBody=1;var y=requireIsMergeable(),R=requireSortSelectors(),E=requireTidyRules(),q=requireOptimizationLevel().OptimizationLevel,d=requireOneTime().body,_=requireOneTime().rules,b=requireToken();function w(C){return/\.|\*| :/.test(C)}function O(C){var M=_(C[1]);return M.indexOf("__")>-1||M.indexOf("--")>-1}function A(C){return C.replace(/--[^ ,>+~:]+/g,"")}function S(C,M){var k=A(_(C[1]));for(var L in M){var I=M[L],B=A(_(I[1]));(B.indexOf(k)>-1||k.indexOf(B)>-1)&&delete M[L]}}function P(C,M){for(var k=M.options,L=k.level[q.Two].mergeSemantically,I=k.compatibility.selectors.adjacentSpace,B=k.level[q.One].selectorsSortingMethod,T=k.compatibility.selectors.mergeablePseudoClasses,z=k.compatibility.selectors.mergeablePseudoElements,V=k.compatibility.selectors.multiplePseudoMerging,N={},U=C.length-1;U>=0;U--){var x=C[U];if(x[0]==b.RULE){x[2].length>0&&!L&&w(_(x[1]))&&(N={}),x[2].length>0&&L&&O(x)&&S(x,N);var K=d(x[2]),F=N[K];F&&y(_(x[1]),T,z,V)&&y(_(F[1]),T,z,V)&&(x[2].length>0?(x[1]=E(F[1].concat(x[1]),!1,I,!1,M.warnings),x[1]=x[1].length>1?R(x[1],B):x[1]):x[1]=F[1].concat(x[1]),F[2]=[],N[K]=null),N[d(x[2])]=x}}}return mergeNonAdjacentByBody_1=P,mergeNonAdjacentByBody_1}var mergeNonAdjacentBySelector_1,hasRequiredMergeNonAdjacentBySelector;function requireMergeNonAdjacentBySelector(){if(hasRequiredMergeNonAdjacentBySelector)return mergeNonAdjacentBySelector_1;hasRequiredMergeNonAdjacentBySelector=1;var y=requireReorderable().canReorder,R=requireExtractProperties(),E=requireOptimize$1(),q=requireOneTime().rules,d=requireToken();function _(b,w){var O=w.cache.specificity,A={},S=[],P;for(P=b.length-1;P>=0;P--)if(b[P][0]==d.RULE&&b[P][2].length!==0){var C=q(b[P][1]);A[C]=[P].concat(A[C]||[]),A[C].length==2&&S.push(C)}for(P=S.length-1;P>=0;P--){var M=A[S[P]];e:for(var k=M.length-1;k>0;k--){var L=M[k-1],I=b[L],B=M[k],T=b[B];r:for(var z=1;z>=-1;z-=2){for(var V=z==1,N=V?L+1:B-1,U=V?B:L,x=V?1:-1,K=V?I:T,F=V?T:I,D=R(K);N!=U;){var $=R(b[N]);N+=x;var G=V?y(D,$,O):y($,D,O);if(!G&&!V)continue e;if(!G&&V)continue r}V?(Array.prototype.push.apply(K[2],F[2]),F[2]=K[2]):Array.prototype.push.apply(F[2],K[2]),E(F[2],!0,!0,w),K[2]=[]}}}}return mergeNonAdjacentBySelector_1=_,mergeNonAdjacentBySelector_1}var cloneArray_1,hasRequiredCloneArray;function requireCloneArray(){if(hasRequiredCloneArray)return cloneArray_1;hasRequiredCloneArray=1;function y(R){for(var E=R.slice(0),q=0,d=E.length;q<d;q++)Array.isArray(E[q])&&(E[q]=y(E[q]));return E}return cloneArray_1=y,cloneArray_1}var reduceNonAdjacent_1,hasRequiredReduceNonAdjacent;function requireReduceNonAdjacent(){if(hasRequiredReduceNonAdjacent)return reduceNonAdjacent_1;hasRequiredReduceNonAdjacent=1;var y=requireIsMergeable(),R=requireOptimize$1(),E=requireCloneArray(),q=requireToken(),d=requireOneTime().body,_=requireOneTime().rules;function b(P,C){for(var M=C.options,k=M.compatibility.selectors.mergeablePseudoClasses,L=M.compatibility.selectors.mergeablePseudoElements,I=M.compatibility.selectors.multiplePseudoMerging,B={},T=[],z=P.length-1;z>=0;z--){var V=P[z];if(V[0]==q.RULE&&V[2].length!==0)for(var N=_(V[1]),U=V[1].length>1&&y(N,k,L,I),x=w(V[1]),K=U?[N].concat(x):[N],F=0,D=K.length;F<D;F++){var $=K[F];B[$]?T.push($):B[$]=[],B[$].push({where:z,list:x,isPartial:U&&F>0,isComplex:U&&F===0})}}O(P,T,B,M,C),A(P,B,M,C)}function w(P){for(var C=[],M=0;M<P.length;M++)C.push([P[M][1]]);return C}function O(P,C,M,k,L){function I(U,x){return N[U].isPartial&&x.length===0}function B(U,x,K,F){N[K-F-1].isPartial||(U[2]=x)}for(var T=0,z=C.length;T<z;T++){var V=C[T],N=M[V];S(P,N,{filterOut:I,callback:B},k,L)}}function A(P,C,M,k){var L=M.compatibility.selectors.mergeablePseudoClasses,I=M.compatibility.selectors.mergeablePseudoElements,B=M.compatibility.selectors.multiplePseudoMerging,T={};function z(H){return T.data[H].where<T.intoPosition}function V(H,Y,te,J){J===0&&T.reducedBodies.push(Y)}e:for(var N in C){var U=C[N];if(U[0].isComplex){var x=U[U.length-1].where,K=P[x],F=[],D=y(N,L,I,B)?U[0].list:[N];T.intoPosition=x,T.reducedBodies=F;for(var $=0,G=D.length;$<G;$++){var j=D[$],W=C[j];if(W.length<2||(T.data=W,S(P,W,{filterOut:z,callback:V},M,k),d(F[F.length-1])!=d(F[0])))continue e}K[2]=F[0]}}}function S(P,C,M,k,L){for(var I=[],B=[],T=[],z=C.length-1;z>=0;z--)if(!M.filterOut(z,I)){var V=C[z].where,N=P[V],U=E(N[2]);I=I.concat(U),B.push(U),T.push(V)}R(I,!0,!1,L);for(var x=T.length,K=I.length-1,F=x-1;F>=0;){if((F===0||I[K]&&B[F].indexOf(I[K])>-1)&&K>-1){K--;continue}var D=I.splice(K+1);M.callback(P[T[F]],D,x,F),F--}}return reduceNonAdjacent_1=b,reduceNonAdjacent_1}var removeDuplicateFontAtRules_1,hasRequiredRemoveDuplicateFontAtRules;function requireRemoveDuplicateFontAtRules(){if(hasRequiredRemoveDuplicateFontAtRules)return removeDuplicateFontAtRules_1;hasRequiredRemoveDuplicateFontAtRules=1;var y=requireToken(),R=requireOneTime().all,E="@font-face";function q(d){var _=[],b,w,O,A;for(O=0,A=d.length;O<A;O++)b=d[O],!(b[0]!=y.AT_RULE_BLOCK&&b[1][0][1]!=E)&&(w=R([b]),_.indexOf(w)>-1?b[2]=[]:_.push(w))}return removeDuplicateFontAtRules_1=q,removeDuplicateFontAtRules_1}var removeDuplicateMediaQueries_1,hasRequiredRemoveDuplicateMediaQueries;function requireRemoveDuplicateMediaQueries(){if(hasRequiredRemoveDuplicateMediaQueries)return removeDuplicateMediaQueries_1;hasRequiredRemoveDuplicateMediaQueries=1;var y=requireToken(),R=requireOneTime().all,E=requireOneTime().rules;function q(d){var _={},b,w,O,A,S;for(A=0,S=d.length;A<S;A++)w=d[A],w[0]==y.NESTED_BLOCK&&(O=E(w[1])+"%"+R(w[2]),b=_[O],b&&(b[2]=[]),_[O]=w)}return removeDuplicateMediaQueries_1=q,removeDuplicateMediaQueries_1}var removeDuplicates_1,hasRequiredRemoveDuplicates;function requireRemoveDuplicates(){if(hasRequiredRemoveDuplicates)return removeDuplicates_1;hasRequiredRemoveDuplicates=1;var y=requireToken(),R=requireOneTime().body,E=requireOneTime().rules;function q(d){for(var _={},b=[],w,O,A,S,P=0,C=d.length;P<C;P++)O=d[P],O[0]==y.RULE&&(w=E(O[1]),_[w]&&_[w].length==1?b.push(w):_[w]=_[w]||[],_[w].push(P));for(P=0,C=b.length;P<C;P++){w=b[P],S=[];for(var M=_[w].length-1;M>=0;M--)O=d[_[w][M]],A=R(O[2]),S.indexOf(A)>-1?O[2]=[]:S.push(A)}}return removeDuplicates_1=q,removeDuplicates_1}var removeUnusedAtRules_1,hasRequiredRemoveUnusedAtRules;function requireRemoveUnusedAtRules(){if(hasRequiredRemoveUnusedAtRules)return removeUnusedAtRules_1;hasRequiredRemoveUnusedAtRules=1;var y=requirePopulateComponents(),R=requireWrapForOptimizing().single,E=requireRestoreFromOptimizing(),q=requireToken(),d=/^(-moz-|-o-|-webkit-)?animation-name$/,_=/^(-moz-|-o-|-webkit-)?animation$/,b=/^@(-moz-|-o-|-webkit-)?keyframes /,w=/\s{0,31}!important$/,O=/^(['"]?)(.*)\1$/;function A(N){return N.replace(O,"$2").replace(w,"")}function S(N,U){P(N,M,k,U),P(N,L,I,U),P(N,B,T,U),P(N,z,V,U)}function P(N,U,x,K){var F={},D,$,G,j,W,H;for(W=0,H=N.length;W<H;W++)U(N[W],F);if(Object.keys(F).length!==0){C(N,x,F,K);for(D in F)for($=F[D],W=0,H=$.length;W<H;W++)G=$[W],j=G[0]==q.AT_RULE?1:2,G[j]=[]}}function C(N,U,x,K){var F=U(x),D,$;for(D=0,$=N.length;D<$;D++)switch(N[D][0]){case q.RULE:F(N[D],K);break;case q.NESTED_BLOCK:C(N[D][2],U,x,K)}}function M(N,U){var x;N[0]==q.AT_RULE_BLOCK&&N[1][0][1].indexOf("@counter-style")===0&&(x=N[1][0][1].split(" ")[1],U[x]=U[x]||[],U[x].push(N))}function k(N){return function(U,x){var K,F,D,$;for(D=0,$=U[2].length;D<$;D++)K=U[2][D],K[1][1]=="list-style"&&(F=R(K),y([F],x.validator,x.warnings),F.components[0].value[0][1]in N&&delete N[K[2][1]],E([F])),K[1][1]=="list-style-type"&&K[2][1]in N&&delete N[K[2][1]]}}function L(N,U){var x,K,F,D;if(N[0]==q.AT_RULE_BLOCK&&N[1][0][1]=="@font-face"){for(F=0,D=N[2].length;F<D;F++)if(x=N[2][F],x[1][1]=="font-family"){K=A(x[2][1].toLowerCase()),U[K]=U[K]||[],U[K].push(N);break}}}function I(N){return function(U,x){var K,F,D,$,G,j,W,H;for(G=0,j=U[2].length;G<j;G++){if(K=U[2][G],K[1][1]=="font"){for(F=R(K),y([F],x.validator,x.warnings),D=F.components[6],W=0,H=D.value.length;W<H;W++)$=A(D.value[W][1].toLowerCase()),$ in N&&delete N[$];E([F])}if(K[1][1]=="font-family")for(W=2,H=K.length;W<H;W++)$=A(K[W][1].toLowerCase()),$ in N&&delete N[$]}}}function B(N,U){var x;N[0]==q.NESTED_BLOCK&&b.test(N[1][0][1])&&(x=N[1][0][1].split(" ")[1],U[x]=U[x]||[],U[x].push(N))}function T(N){return function(U,x){var K,F,D,$,G,j,W;for($=0,G=U[2].length;$<G;$++){if(K=U[2][$],_.test(K[1][1])){for(F=R(K),y([F],x.validator,x.warnings),D=F.components[7],j=0,W=D.value.length;j<W;j++)D.value[j][1]in N&&delete N[D.value[j][1]];E([F])}if(d.test(K[1][1]))for(j=2,W=K.length;j<W;j++)K[j][1]in N&&delete N[K[j][1]]}}}function z(N,U){var x;N[0]==q.AT_RULE&&N[1].indexOf("@namespace")===0&&(x=N[1].split(" ")[1],U[x]=U[x]||[],U[x].push(N))}function V(N){var U=new RegExp(Object.keys(N).join("\\||")+"\\|","g");return function(x){var K,F,D,$,G,j,W;for($=0,G=x[1].length;$<G;$++)for(F=x[1][$],K=F[1].match(U),j=0,W=K.length;j<W;j++)D=K[j].substring(0,K[j].length-1),D in N&&delete N[D]}}return removeUnusedAtRules_1=S,removeUnusedAtRules_1}var tidyRuleDuplicates_1,hasRequiredTidyRuleDuplicates;function requireTidyRuleDuplicates(){if(hasRequiredTidyRuleDuplicates)return tidyRuleDuplicates_1;hasRequiredTidyRuleDuplicates=1;function y(E,q){return E[1]>q[1]?1:-1}function R(E){for(var q=[],d=[],_=0,b=E.length;_<b;_++){var w=E[_];d.indexOf(w[1])==-1&&(d.push(w[1]),q.push(w))}return q.sort(y)}return tidyRuleDuplicates_1=R,tidyRuleDuplicates_1}var restructure_1,hasRequiredRestructure;function requireRestructure(){if(hasRequiredRestructure)return restructure_1;hasRequiredRestructure=1;var y=requireReorderable().canReorderSingle,R=requireExtractProperties(),E=requireIsMergeable(),q=requireTidyRuleDuplicates(),d=requireToken(),_=requireCloneArray(),b=requireOneTime().body,w=requireOneTime().rules;function O(P,C){return P>C?1:-1}function A(P,C){var M=_(P);return M[5]=M[5].concat(C[5]),M}function S(P,C){var M=C.options,k=M.compatibility.selectors.mergeablePseudoClasses,L=M.compatibility.selectors.mergeablePseudoElements,I=M.compatibility.selectors.mergeLimit,B=M.compatibility.selectors.multiplePseudoMerging,T=C.cache.specificity,z={},V=[],N={},U=[],x=2,K="%";function F(fe,de,ue){for(var pe=ue.length-1;pe>=0;pe--){var oe=ue[pe][0],ye=D(de,oe);if(N[ye].length>1&&Q(fe,N[ye])){$(ye);break}}}function D(fe,de){var ue=G(de);return N[ue]=N[ue]||[],N[ue].push([fe,de]),ue}function $(fe){var de=fe.split(K),ue=[],pe;for(var oe in N){var ye=oe.split(K);for(pe=ye.length-1;pe>=0;pe--)if(de.indexOf(ye[pe])>-1){ue.push(oe);break}}for(pe=ue.length-1;pe>=0;pe--)delete N[ue[pe]]}function G(fe){for(var de=[],ue=0,pe=fe.length;ue<pe;ue++)de.push(w(fe[ue][1]));return de.join(K)}function j(fe){for(var de=[],ue=[],pe=fe.length-1;pe>=0;pe--)E(w(fe[pe][1]),k,L,B)&&(ue.unshift(fe[pe]),fe[pe][2].length>0&&de.indexOf(fe[pe])==-1&&de.push(fe[pe]));return de.length>1?ue:[]}function W(fe,de){var ue=de[0],pe=de[1],oe=de[4],ye=ue.length+pe.length+1,Oe=[],Me=[],Pe=j(z[oe]);if(!(Pe.length<2)){var Ce=Y(Pe,ye,1),ke=Ce[0];if(ke[1]>0)return F(fe,de,Ce);for(var Te=ke[0].length-1;Te>=0;Te--)Oe=ke[0][Te][1].concat(Oe),Me.unshift(ke[0][Te]);Oe=q(Oe),ie(fe,[de],Oe,Me)}}function H(fe,de){return fe[1]>de[1]?1:fe[1]==de[1]?0:-1}function Y(fe,de,ue){var pe=te(fe,de,ue,x-1);return pe.sort(H)}function te(fe,de,ue,pe){var oe=[[fe,J(fe,de,ue)]];if(fe.length>2&&pe>0)for(var ye=fe.length-1;ye>=0;ye--){var Oe=Array.prototype.slice.call(fe,0);Oe.splice(ye,1),oe=oe.concat(te(Oe,de,ue,pe-1))}return oe}function J(fe,de,ue){for(var pe=0,oe=fe.length-1;oe>=0;oe--)pe+=fe[oe][2].length>ue?w(fe[oe][1]).length:-1;return pe-(fe.length-1)*de+1}function ie(fe,de,ue,pe){var oe,ye,Oe,Me,Pe=[];for(oe=pe.length-1;oe>=0;oe--){var Ce=pe[oe];for(ye=Ce[2].length-1;ye>=0;ye--){var ke=Ce[2][ye];for(Oe=0,Me=de.length;Oe<Me;Oe++){var Te=de[Oe],Le=ke[1][1],Ne=Te[0],Ie=Te[4];if(Le==Ne&&b([ke])==Ie){Ce[2].splice(ye,1);break}}}}for(oe=de.length-1;oe>=0;oe--)Pe.unshift(de[oe][3]);var De=[d.RULE,ue,Pe];P.splice(fe,0,De)}function re(fe,de){var ue=de[4],pe=z[ue];pe&&pe.length>1&&(ee(fe,de)||W(fe,de))}function ee(fe,de){var ue=[],pe=[],oe=de[4],ye,Oe,Me=j(z[oe]);if(!(Me.length<2)){e:for(var Pe in z){var Ce=z[Pe];for(ye=Me.length-1;ye>=0;ye--)if(Ce.indexOf(Me[ye])==-1)continue e;ue.push(Pe)}if(ue.length<2)return!1;for(ye=ue.length-1;ye>=0;ye--)for(Oe=V.length-1;Oe>=0;Oe--)if(V[Oe][4]==ue[ye]){pe.unshift([V[Oe],Me]);break}return Q(fe,pe)}}function Q(fe,de){for(var ue=0,pe=[],oe,ye=de.length-1;ye>=0;ye--){oe=de[ye][0];var Oe=oe[4];ue+=Oe.length+(ye>0?1:0),pe.push(oe)}var Me=de[0][1],Pe=Y(Me,ue,pe.length)[0];if(Pe[1]>0)return!1;var Ce=[],ke=[];for(ye=Pe[0].length-1;ye>=0;ye--)Ce=Pe[0][ye][1].concat(Ce),ke.unshift(Pe[0][ye]);for(Ce=q(Ce),ie(fe,pe,Ce,ke),ye=pe.length-1;ye>=0;ye--){oe=pe[ye];var Te=V.indexOf(oe);delete z[oe[4]],Te>-1&&U.indexOf(Te)==-1&&U.push(Te)}return!0}function X(fe,de,ue){var pe=fe[0],oe=de[0];if(pe!=oe)return!1;var ye=de[4],Oe=z[ye];return Oe&&Oe.indexOf(ue)>-1}for(var Z=P.length-1;Z>=0;Z--){var se=P[Z],ne,ae,he,ve,ge;if(se[0]==d.RULE)ne=!0;else if(se[0]==d.NESTED_BLOCK)ne=!1;else continue;var ce=V.length,be=R(se);U=[];var Re=[];for(ae=be.length-1;ae>=0;ae--)for(he=ae-1;he>=0;he--)if(!y(be[ae],be[he],T)){Re.push(ae);break}for(ae=be.length-1;ae>=0;ae--){var we=be[ae],_e=!1;for(he=0;he<ce;he++){var qe=V[he];U.indexOf(he)==-1&&(!y(we,qe,T)&&!X(we,qe,se)||z[qe[4]]&&z[qe[4]].length===I)&&(re(Z+1,qe),U.indexOf(he)==-1&&(U.push(he),delete z[qe[4]])),_e||(_e=we[0]==qe[0]&&we[1]==qe[1],_e&&(ge=he))}if(!(!ne||Re.indexOf(ae)>-1)){var Se=we[4];_e&&V[ge][5].length+we[5].length>I?(re(Z+1,V[ge]),V.splice(ge,1),z[Se]=[se],_e=!1):(z[Se]=z[Se]||[],z[Se].push(se)),_e?V[ge]=A(V[ge],we):V.push(we)}}for(U=U.sort(O),ae=0,ve=U.length;ae<ve;ae++){var Ae=U[ae]-ae;V.splice(Ae,1)}}for(var le=P[0]&&P[0][0]==d.AT_RULE&&P[0][1].indexOf("@charset")===0?1:0;le<P.length-1;le++){var me=P[le][0]===d.AT_RULE&&P[le][1].indexOf("@import")===0,Ee=P[le][0]===d.COMMENT;if(!(me||Ee))break}for(Z=0;Z<V.length;Z++)re(le,V[Z])}return restructure_1=S,restructure_1}var optimize,hasRequiredOptimize;function requireOptimize(){if(hasRequiredOptimize)return optimize;hasRequiredOptimize=1;var y=requireMergeAdjacent(),R=requireMergeMediaQueries(),E=requireMergeNonAdjacentByBody(),q=requireMergeNonAdjacentBySelector(),d=requireReduceNonAdjacent(),_=requireRemoveDuplicateFontAtRules(),b=requireRemoveDuplicateMediaQueries(),w=requireRemoveDuplicates(),O=requireRemoveUnusedAtRules(),A=requireRestructure(),S=requireOptimize$1(),P=requireOptimizationLevel().OptimizationLevel,C=requireToken();function M(B){for(var T=0,z=B.length;T<z;T++){var V=B[T],N=!1;switch(V[0]){case C.RULE:N=V[1].length===0||V[2].length===0;break;case C.NESTED_BLOCK:M(V[2]),N=V[2].length===0;break;case C.AT_RULE:N=V[1].length===0;break;case C.AT_RULE_BLOCK:N=V[2].length===0}N&&(B.splice(T,1),T--,z--)}}function k(B,T){for(var z=0,V=B.length;z<V;z++){var N=B[z];if(N[0]==C.NESTED_BLOCK){var U=/@(-moz-|-o-|-webkit-)?keyframes/.test(N[1][0][1]);I(N[2],T,!U)}}}function L(B,T){for(var z=0,V=B.length;z<V;z++){var N=B[z];switch(N[0]){case C.RULE:S(N[2],!0,!0,T);break;case C.NESTED_BLOCK:L(N[2],T)}}}function I(B,T,z){var V=T.options.level[P.Two],N=T.options.plugins.level2Block,U,x;if(k(B,T),L(B,T),V.removeDuplicateRules&&w(B,T),V.mergeAdjacentRules&&y(B,T),V.reduceNonAdjacentRules&&d(B,T),V.mergeNonAdjacentRules&&V.mergeNonAdjacentRules!="body"&&q(B,T),V.mergeNonAdjacentRules&&V.mergeNonAdjacentRules!="selector"&&E(B,T),V.restructureRules&&V.mergeAdjacentRules&&z&&(A(B,T),y(B,T)),V.restructureRules&&!V.mergeAdjacentRules&&z&&A(B,T),V.removeDuplicateFontRules&&_(B,T),V.removeDuplicateMediaBlocks&&b(B,T),V.removeUnusedAtRules&&O(B,T),V.mergeMedia)for(U=R(B,T),x=U.length-1;x>=0;x--)I(U[x][2],T,!1);for(x=0;x<N.length;x++)N[x](B);return V.removeEmpty&&M(B),B}return optimize=I,optimize}var validator_1,hasRequiredValidator;function requireValidator(){if(hasRequiredValidator)return validator_1;hasRequiredValidator=1;var y="[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)",R="\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)",E="var\\(\\-\\-[^\\)]+\\)",q="("+E+"|"+y+"|"+R+")",d=new RegExp("^(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)$","i"),_=/[0-9]/,b=new RegExp("^"+q+"$","i"),w=/^#(?:[0-9a-f]{4}|[0-9a-f]{8})$/i,O=/^hsl\(\s{0,31}[-.]?\d+\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[-.]?\d+\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\.?\d+\s{0,31}\)$/,A=/^hsl\(\s{0,31}[-.]?\d+(deg)?\s{1,31}\d*\.?\d+%\s{1,31}\d*\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[-.]?\d+(deg)?\s{1,31}\d*\.?\d+%\s{1,31}\d*\.?\d+%\s{1,31}\/\s{1,31}\d*\.?\d+%?\s{0,31}\)$/,S=/^(-[a-z0-9_][a-z0-9\-_]*|[a-z_][a-z0-9\-_]*)$/i,P=/^[a-z]+$/i,C=/^-([a-z0-9]|-)*$/i,M=/^("[^"]*"|'[^']*')$/i,k=/^rgb\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[.\d]+\s{0,31}\)$/i,L=/^rgb\(\s{0,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}\/\s{1,31}[\d]*\.?[.\d]+%?\s{0,31}\)$/i,I=/\d+(s|ms)/,B=/^(cubic-bezier|steps)\([^)]+\)$/,T=["ms","s"],z=/^url\([\s\S]+\)$/i,V=new RegExp("^"+E+"$","i"),N=/^#[0-9a-f]{8}$/i,U=/^#[0-9a-f]{4}$/i,x=/^#[0-9a-f]{6}$/i,K=/^#[0-9a-f]{3}$/i,F=".",D="-",$="+",G={"^":["inherit","initial","unset"],"*-style":["auto","dashed","dotted","double","groove","hidden","inset","none","outset","ridge","solid"],"*-timing-function":["ease","ease-in","ease-in-out","ease-out","linear","step-end","step-start"],"animation-direction":["alternate","alternate-reverse","normal","reverse"],"animation-fill-mode":["backwards","both","forwards","none"],"animation-iteration-count":["infinite"],"animation-name":["none"],"animation-play-state":["paused","running"],"background-attachment":["fixed","inherit","local","scroll"],"background-clip":["border-box","content-box","inherit","padding-box","text"],"background-origin":["border-box","content-box","inherit","padding-box"],"background-position":["bottom","center","left","right","top"],"background-repeat":["no-repeat","inherit","repeat","repeat-x","repeat-y","round","space"],"background-size":["auto","cover","contain"],"border-collapse":["collapse","inherit","separate"],bottom:["auto"],clear:["both","left","none","right"],color:["transparent"],cursor:["all-scroll","auto","col-resize","crosshair","default","e-resize","help","move","n-resize","ne-resize","no-drop","not-allowed","nw-resize","pointer","progress","row-resize","s-resize","se-resize","sw-resize","text","vertical-text","w-resize","wait"],display:["block","inline","inline-block","inline-table","list-item","none","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group"],float:["left","none","right"],left:["auto"],font:["caption","icon","menu","message-box","small-caption","status-bar","unset"],"font-size":["large","larger","medium","small","smaller","x-large","x-small","xx-large","xx-small"],"font-stretch":["condensed","expanded","extra-condensed","extra-expanded","normal","semi-condensed","semi-expanded","ultra-condensed","ultra-expanded"],"font-style":["italic","normal","oblique"],"font-variant":["normal","small-caps"],"font-weight":["100","200","300","400","500","600","700","800","900","bold","bolder","lighter","normal"],"line-height":["normal"],"list-style-position":["inside","outside"],"list-style-type":["armenian","circle","decimal","decimal-leading-zero","disc","decimal|disc","georgian","lower-alpha","lower-greek","lower-latin","lower-roman","none","square","upper-alpha","upper-latin","upper-roman"],overflow:["auto","hidden","scroll","visible"],position:["absolute","fixed","relative","static"],right:["auto"],"text-align":["center","justify","left","left|right","right"],"text-decoration":["line-through","none","overline","underline"],"text-overflow":["clip","ellipsis"],top:["auto"],"vertical-align":["baseline","bottom","middle","sub","super","text-bottom","text-top","top"],visibility:["collapse","hidden","visible"],"white-space":["normal","nowrap","pre"],width:["inherit","initial","medium","thick","thin"]},j=["%","ch","cm","em","ex","in","mm","pc","pt","px","rem","vh","vm","vmax","vmin","vw"];function W(le){return le!="auto"&&(Z("color")(le)||J(le)||H(le)||se(le))}function H(le){return ae(le)||ie(le)}function Y(le){return d.test(le)}function te(le){return b.test(le)}function J(le){return K.test(le)||U.test(le)||x.test(le)||N.test(le)}function ie(le){return O.test(le)||A.test(le)}function re(le){return w.test(le)}function ee(le){return S.test(le)}function Q(le){return M.test(le)}function X(le){return le=="none"||le=="inherit"||_e(le)}function Z(le){return function(me){return G[le].indexOf(me)>-1}}function se(le){return P.test(le)}function ne(le){return Se(le)==le.length}function ae(le){return k.test(le)||L.test(le)}function he(le){return C.test(le)}function ve(le){return ne(le)&&parseFloat(le)>=0}function ge(le){return V.test(le)}function ce(le){var me=Se(le);return me==le.length&&parseInt(le)===0||me>-1&&T.indexOf(le.slice(me+1))>-1||be(le)}function be(le){return te(le)&&I.test(le)}function Re(){var le=Z("*-timing-function");return function(me){return le(me)||B.test(me)}}function we(le,me){var Ee=Se(me);return Ee==me.length&&parseInt(me)===0||Ee>-1&&le.indexOf(me.slice(Ee+1).toLowerCase())>-1||me=="auto"||me=="inherit"}function _e(le){return z.test(le)}function qe(le){return le=="auto"||ne(le)||Z("^")(le)}function Se(le){var me=!1,Ee=!1,fe,de,ue;for(de=0,ue=le.length;de<ue;de++)if(fe=le[de],de===0&&(fe==$||fe==D))Ee=!0;else{if(de>0&&Ee&&(fe==$||fe==D))return de-1;if(fe==F&&!me)me=!0;else{if(fe==F&&me)return de-1;if(_.test(fe))continue;return de-1}}return de}function Ae(le){var me=j.slice(0).filter(function(Ee){return!(Ee in le.units)||le.units[Ee]===!0});return le.customUnits.rpx&&me.push("rpx"),{colorOpacity:le.colors.opacity,colorHexAlpha:le.colors.hexAlpha,isAnimationDirectionKeyword:Z("animation-direction"),isAnimationFillModeKeyword:Z("animation-fill-mode"),isAnimationIterationCountKeyword:Z("animation-iteration-count"),isAnimationNameKeyword:Z("animation-name"),isAnimationPlayStateKeyword:Z("animation-play-state"),isTimingFunction:Re(),isBackgroundAttachmentKeyword:Z("background-attachment"),isBackgroundClipKeyword:Z("background-clip"),isBackgroundOriginKeyword:Z("background-origin"),isBackgroundPositionKeyword:Z("background-position"),isBackgroundRepeatKeyword:Z("background-repeat"),isBackgroundSizeKeyword:Z("background-size"),isColor:W,isColorFunction:H,isDynamicUnit:Y,isFontKeyword:Z("font"),isFontSizeKeyword:Z("font-size"),isFontStretchKeyword:Z("font-stretch"),isFontStyleKeyword:Z("font-style"),isFontVariantKeyword:Z("font-variant"),isFontWeightKeyword:Z("font-weight"),isFunction:te,isGlobal:Z("^"),isHexAlphaColor:re,isHslColor:ie,isIdentifier:ee,isImage:X,isKeyword:Z,isLineHeightKeyword:Z("line-height"),isListStylePositionKeyword:Z("list-style-position"),isListStyleTypeKeyword:Z("list-style-type"),isNumber:ne,isPrefixed:he,isPositiveNumber:ve,isQuotedText:Q,isRgbColor:ae,isStyleKeyword:Z("*-style"),isTime:ce,isUnit:we.bind(null,me),isUrl:_e,isVariable:ge,isWidth:Z("width"),isZIndex:qe}}return validator_1=Ae,validator_1}var compatibility,hasRequiredCompatibility;function requireCompatibility(){if(hasRequiredCompatibility)return compatibility;hasRequiredCompatibility=1;var y={"*":{colors:{hexAlpha:!1,opacity:!0},customUnits:{rpx:!1},properties:{backgroundClipMerging:!0,backgroundOriginMerging:!0,backgroundSizeMerging:!0,colors:!0,ieBangHack:!1,ieFilters:!1,iePrefixHack:!1,ieSuffixHack:!1,merging:!0,shorterLengthUnits:!1,spaceAfterClosingBrace:!0,urlQuotes:!0,zeroUnits:!0},selectors:{adjacentSpace:!1,ie7Hack:!1,mergeablePseudoClasses:[":active",":after",":before",":empty",":checked",":disabled",":empty",":enabled",":first-child",":first-letter",":first-line",":first-of-type",":focus",":hover",":lang",":last-child",":last-of-type",":link",":not",":nth-child",":nth-last-child",":nth-last-of-type",":nth-of-type",":only-child",":only-of-type",":root",":target",":visited"],mergeablePseudoElements:["::after","::before","::first-letter","::first-line"],mergeLimit:8191,multiplePseudoMerging:!0},units:{ch:!0,in:!0,pc:!0,pt:!0,rem:!0,vh:!0,vm:!0,vmax:!0,vmin:!0,vw:!0}}};y.ie11=E(y["*"],{properties:{ieSuffixHack:!0}}),y.ie10=E(y["*"],{properties:{ieSuffixHack:!0}}),y.ie9=E(y["*"],{properties:{ieFilters:!0,ieSuffixHack:!0}}),y.ie8=E(y.ie9,{colors:{opacity:!1},properties:{backgroundClipMerging:!1,backgroundOriginMerging:!1,backgroundSizeMerging:!1,iePrefixHack:!0,merging:!1},selectors:{mergeablePseudoClasses:[":after",":before",":first-child",":first-letter",":focus",":hover",":visited"],mergeablePseudoElements:[]},units:{ch:!1,rem:!1,vh:!1,vm:!1,vmax:!1,vmin:!1,vw:!1}}),y.ie7=E(y.ie8,{properties:{ieBangHack:!0},selectors:{ie7Hack:!0,mergeablePseudoClasses:[":first-child",":first-letter",":hover",":visited"]}});function R(d){return E(y["*"],q(d))}function E(d,_){for(var b in d)if(Object.prototype.hasOwnProperty.call(d,b)){var w=d[b];Object.prototype.hasOwnProperty.call(_,b)&&typeof w=="object"&&!Array.isArray(w)?_[b]=E(w,_[b]||{}):_[b]=b in _?_[b]:w}return _}function q(d){if(typeof d=="object")return d;if(!/[,+-]/.test(d))return y[d]||y["*"];var _=d.split(","),b=_[0]in y?y[_.shift()]:y["*"];return d={},_.forEach(function(w){var O=w[0]=="+",A=w.substring(1).split("."),S=A[0],P=A[1];d[S]=d[S]||{},d[S][P]=O}),E(b,d)}return compatibility=R,compatibility}var querystring={},decode,hasRequiredDecode;function requireDecode(){if(hasRequiredDecode)return decode;hasRequiredDecode=1;function y(R,E){return Object.prototype.hasOwnProperty.call(R,E)}return decode=function(R,E,q,d){E=E||"&",q=q||"=";var _={};if(typeof R!="string"||R.length===0)return _;var b=/\+/g;R=R.split(E);var w=1e3;d&&typeof d.maxKeys=="number"&&(w=d.maxKeys);var O=R.length;w>0&&O>w&&(O=w);for(var A=0;A<O;++A){var S=R[A].replace(b,"%20"),P=S.indexOf(q),C,M,k,L;P>=0?(C=S.substr(0,P),M=S.substr(P+1)):(C=S,M=""),k=decodeURIComponent(C),L=decodeURIComponent(M),y(_,k)?Array.isArray(_[k])?_[k].push(L):_[k]=[_[k],L]:_[k]=L}return _},decode}var encode,hasRequiredEncode;function requireEncode(){if(hasRequiredEncode)return encode;hasRequiredEncode=1;var y=function(R){switch(typeof R){case"string":return R;case"boolean":return R?"true":"false";case"number":return isFinite(R)?R:"";default:return""}};return encode=function(R,E,q,d){return E=E||"&",q=q||"=",R===null&&(R=void 0),typeof R=="object"?Object.keys(R).map(function(_){var b=encodeURIComponent(y(_))+q;return Array.isArray(R[_])?R[_].map(function(w){return b+encodeURIComponent(y(w))}).join(E):b+encodeURIComponent(y(R[_]))}).filter(Boolean).join(E):d?encodeURIComponent(y(d))+q+encodeURIComponent(y(R)):""},encode}var hasRequiredQuerystring;function requireQuerystring(){return hasRequiredQuerystring||(hasRequiredQuerystring=1,querystring.decode=querystring.parse=requireDecode(),querystring.encode=querystring.stringify=requireEncode()),querystring}var querystringExports=requireQuerystring(),t=getDefaultExportFromCjs(querystringExports),e=/https?|ftp|gopher|file/;function o(y){typeof y=="string"&&(y=g(y));var R=(function(E,q,d){var _=E.auth,b=E.hostname,w=E.protocol||"",O=E.pathname||"",A=E.hash||"",S=E.query||"",P=!1;_=_?encodeURIComponent(_).replace(/%3A/i,":")+"@":"",E.host?P=_+E.host:b&&(P=_+(~b.indexOf(":")?"["+b+"]":b),E.port&&(P+=":"+E.port)),S&&typeof S=="object"&&(S=q.encode(S));var C=E.search||S&&"?"+S||"";return w&&w.substr(-1)!==":"&&(w+=":"),E.slashes||(!w||d.test(w))&&P!==!1?(P="//"+(P||""),O&&O[0]!=="/"&&(O="/"+O)):P||(P=""),A&&A[0]!=="#"&&(A="#"+A),C&&C[0]!=="?"&&(C="?"+C),{protocol:w,host:P,pathname:O=O.replace(/[?#]/g,encodeURIComponent),search:C=C.replace("#","%23"),hash:A}})(y,t,e);return""+R.protocol+R.host+R.pathname+R.search+R.hash}var r="http://",a="w.w",s=r+a,p=/^([a-z0-9.+-]*:\/\/\/)([a-z0-9.+-]:\/*)?/i,n=/https?|ftp|gopher|file/;function h(y,R){var E=typeof y=="string"?g(y):y;y=typeof y=="object"?o(y):y;var q=g(R),d="";E.protocol&&!E.slashes&&(d=E.protocol,y=y.replace(E.protocol,""),d+=R[0]==="/"||y[0]==="/"?"/":""),d&&q.protocol&&(d="",q.slashes||(d=q.protocol,R=R.replace(q.protocol,"")));var _=y.match(p);_&&!q.protocol&&(y=y.substr((d=_[1]+(_[2]||"")).length),/^\/\/[^/]/.test(R)&&(d=d.slice(0,-1)));var b=new URL(y,s+"/"),w=new URL(R,b).toString().replace(s,""),O=q.protocol||E.protocol;return O+=E.slashes||q.slashes?"//":"",!d&&O?w=w.replace(r,O):d&&(w=w.replace(r,"")),n.test(w)||~R.indexOf(".")||y.slice(-1)==="/"||R.slice(-1)==="/"||w.slice(-1)!=="/"||(w=w.slice(0,-1)),d&&(w=d+(w[0]==="/"?w.substr(1):w)),w}function c(y,R){return g(h(y,R))}function l(){}l.prototype.parse=g,l.prototype.format=o,l.prototype.resolve=h,l.prototype.resolveObject=h;var i=/^https?|ftp|gopher|file/,u=/^(.*?)([#?].*)/,f=/^([a-z0-9.+-]*:)(\/{0,3})(.*)/i,m=/^([a-z0-9.+-]*:)?\/\/\/*/i,v=/^([a-z0-9.+-]*:)(\/{0,2})\[(.*)\]$/i;function g(y,R,E){if(R===void 0&&(R=!1),E===void 0&&(E=!1),y&&typeof y=="object"&&y instanceof l)return y;var q=(y=y.trim()).match(u);y=q?q[1].replace(/\\/g,"/")+q[2]:y.replace(/\\/g,"/"),v.test(y)&&y.slice(-1)!=="/"&&(y+="/");var d=!/(^javascript)/.test(y)&&y.match(f),_=m.test(y),b="";d&&(i.test(d[1])||(b=d[1].toLowerCase(),y=""+d[2]+d[3]),d[2]||(_=!1,i.test(d[1])?(b=d[1],y=""+d[3]):y="//"+d[3]),d[2].length!==3&&d[2].length!==1||(b=d[1],y="/"+d[3]));var w,O=(q?q[1]:y).match(/^https?:\/\/[^/]+(:[0-9]+)(?=\/|$)/),A=O&&O[1],S=new l,P="",C="";try{w=new URL(y)}catch(L){P=L,b||E||!/^\/\//.test(y)||/^\/\/.+[@.]/.test(y)||(C="/",y=y.substr(1));try{w=new URL(y,s)}catch{return S.protocol=b,S.href=b,S}}S.slashes=_&&!C,S.host=w.host===a?"":w.host,S.hostname=w.hostname===a?"":w.hostname.replace(/(\[|\])/g,""),S.protocol=P?b||null:w.protocol,S.search=w.search.replace(/\\/g,"%5C"),S.hash=w.hash.replace(/\\/g,"%5C");var M=y.split("#");!S.search&&~M[0].indexOf("?")&&(S.search="?"),S.hash||M[1]!==""||(S.hash="#"),S.query=R?t.decode(w.search.substr(1)):S.search.substr(1),S.pathname=C+(d?(function(L){return L.replace(/['^|`]/g,function(I){return"%"+I.charCodeAt().toString(16).toUpperCase()}).replace(/((?:%[0-9A-F]{2})+)/g,function(I,B){try{return decodeURIComponent(B).split("").map(function(T){var z=T.charCodeAt();return z>256||/^[a-z0-9]$/i.test(T)?T:"%"+z.toString(16).toUpperCase()}).join("")}catch{return B}})})(w.pathname):w.pathname),S.protocol==="about:"&&S.pathname==="blank"&&(S.protocol="",S.pathname=""),P&&y[0]!=="/"&&(S.pathname=S.pathname.substr(1)),b&&!i.test(b)&&y.slice(-1)!=="/"&&S.pathname==="/"&&(S.pathname=""),S.path=S.pathname+S.search,S.auth=[w.username,w.password].map(decodeURIComponent).filter(Boolean).join(":"),S.port=w.port,A&&!S.host.endsWith(A)&&(S.host+=A,S.port=A.slice(1)),S.href=C?""+S.pathname+S.search+S.hash:o(S);var k=/^(file)/.test(S.href)?["host","hostname"]:[];return Object.keys(S).forEach(function(L){~k.indexOf(L)||(S[L]=S[L]||null)}),S}var dist$1=Object.freeze({__proto__:null,Url:l,format:o,parse:g,resolve:h,resolveObject:c}),require$$2=getAugmentedNamespace(dist$1),isHttpResource_1,hasRequiredIsHttpResource;function requireIsHttpResource(){if(hasRequiredIsHttpResource)return isHttpResource_1;hasRequiredIsHttpResource=1;var y=/^http:\/\//;function R(E){return y.test(E)}return isHttpResource_1=R,isHttpResource_1}var isHttpsResource_1,hasRequiredIsHttpsResource;function requireIsHttpsResource(){if(hasRequiredIsHttpsResource)return isHttpsResource_1;hasRequiredIsHttpsResource=1;var y=/^https:\/\//;function R(E){return y.test(E)}return isHttpsResource_1=R,isHttpsResource_1}var loadRemoteResource_1,hasRequiredLoadRemoteResource;function requireLoadRemoteResource(){if(hasRequiredLoadRemoteResource)return loadRemoteResource_1;hasRequiredLoadRemoteResource=1;var y=requireNoop(),R=requireNoop(),E=require$$2,q=requireIsHttpResource(),d=requireIsHttpsResource(),_=requireOverride(),b="http:";function w(O,A,S,P){var C=A.protocol||A.hostname,M=!1,k,L;k=_(E.parse(O),A||{}),A.hostname!==void 0&&(k.protocol=A.protocol||b,k.path=k.href),L=C&&!d(C)||q(O)?y.get:R.get,L(k,function(I){var B=[],T;if(!M){if(I.statusCode<200||I.statusCode>399)return P(I.statusCode,null);if(I.statusCode>299)return T=E.resolve(O,I.headers.location),w(T,A,S,P);I.on("data",function(z){B.push(z.toString())}),I.on("end",function(){var z=B.join("");P(null,z)})}}).on("error",function(I){M||(M=!0,P(I.message,null))}).on("timeout",function(){M||(M=!0,P("timeout",null))}).setTimeout(S)}return loadRemoteResource_1=w,loadRemoteResource_1}var fetch,hasRequiredFetch;function requireFetch(){if(hasRequiredFetch)return fetch;hasRequiredFetch=1;var y=requireLoadRemoteResource();function R(E){return E||y}return fetch=R,fetch}var inline,hasRequiredInline;function requireInline(){if(hasRequiredInline)return inline;hasRequiredInline=1;function y(R){return Array.isArray(R)?R:R===!1?["none"]:R===void 0?["local"]:R.split(",")}return inline=y,inline}var inlineRequest,hasRequiredInlineRequest;function requireInlineRequest(){if(hasRequiredInlineRequest)return inlineRequest;hasRequiredInlineRequest=1;var y=require$$2,R=requireOverride();function E(d){return R(q(process.env.HTTP_PROXY||process.env.http_proxy),d||{})}function q(d){return d?{hostname:y.parse(d).hostname,port:parseInt(y.parse(d).port)}:{}}return inlineRequest=E,inlineRequest}var inlineTimeout,hasRequiredInlineTimeout;function requireInlineTimeout(){if(hasRequiredInlineTimeout)return inlineTimeout;hasRequiredInlineTimeout=1;var y=5e3;function R(E){return E||y}return inlineTimeout=R,inlineTimeout}var plugins,hasRequiredPlugins;function requirePlugins(){if(hasRequiredPlugins)return plugins;hasRequiredPlugins=1;function y(R){var E={level1Value:[],level1Property:[],level2Block:[]};return R=R||[],E.level1Value=R.map(function(q){return q.level1&&q.level1.value}).filter(function(q){return q!=null}),E.level1Property=R.map(function(q){return q.level1&&q.level1.property}).filter(function(q){return q!=null}),E.level2Block=R.map(function(q){return q.level2&&q.level2.block}).filter(function(q){return q!=null}),E}return plugins=y,plugins}var rebase,hasRequiredRebase$1;function requireRebase$1(){if(hasRequiredRebase$1)return rebase;hasRequiredRebase$1=1;function y(R,E){return E!==void 0?!0:R===void 0?!1:!!R}return rebase=y,rebase}var pathBrowserify,hasRequiredPathBrowserify;function requirePathBrowserify(){if(hasRequiredPathBrowserify)return pathBrowserify;hasRequiredPathBrowserify=1;function y(d){if(typeof d!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(d))}function R(d,_){for(var b="",w=0,O=-1,A=0,S,P=0;P<=d.length;++P){if(P<d.length)S=d.charCodeAt(P);else{if(S===47)break;S=47}if(S===47){if(!(O===P-1||A===1))if(O!==P-1&&A===2){if(b.length<2||w!==2||b.charCodeAt(b.length-1)!==46||b.charCodeAt(b.length-2)!==46){if(b.length>2){var C=b.lastIndexOf("/");if(C!==b.length-1){C===-1?(b="",w=0):(b=b.slice(0,C),w=b.length-1-b.lastIndexOf("/")),O=P,A=0;continue}}else if(b.length===2||b.length===1){b="",w=0,O=P,A=0;continue}}_&&(b.length>0?b+="/..":b="..",w=2)}else b.length>0?b+="/"+d.slice(O+1,P):b=d.slice(O+1,P),w=P-O-1;O=P,A=0}else S===46&&A!==-1?++A:A=-1}return b}function E(d,_){var b=_.dir||_.root,w=_.base||(_.name||"")+(_.ext||"");return b?b===_.root?b+w:b+d+w:w}var q={resolve:function(){for(var _="",b=!1,w,O=arguments.length-1;O>=-1&&!b;O--){var A;O>=0?A=arguments[O]:(w===void 0&&(w=process.cwd()),A=w),y(A),A.length!==0&&(_=A+"/"+_,b=A.charCodeAt(0)===47)}return _=R(_,!b),b?_.length>0?"/"+_:"/":_.length>0?_:"."},normalize:function(_){if(y(_),_.length===0)return".";var b=_.charCodeAt(0)===47,w=_.charCodeAt(_.length-1)===47;return _=R(_,!b),_.length===0&&!b&&(_="."),_.length>0&&w&&(_+="/"),b?"/"+_:_},isAbsolute:function(_){return y(_),_.length>0&&_.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var _,b=0;b<arguments.length;++b){var w=arguments[b];y(w),w.length>0&&(_===void 0?_=w:_+="/"+w)}return _===void 0?".":q.normalize(_)},relative:function(_,b){if(y(_),y(b),_===b||(_=q.resolve(_),b=q.resolve(b),_===b))return"";for(var w=1;w<_.length&&_.charCodeAt(w)===47;++w);for(var O=_.length,A=O-w,S=1;S<b.length&&b.charCodeAt(S)===47;++S);for(var P=b.length,C=P-S,M=A<C?A:C,k=-1,L=0;L<=M;++L){if(L===M){if(C>M){if(b.charCodeAt(S+L)===47)return b.slice(S+L+1);if(L===0)return b.slice(S+L)}else A>M&&(_.charCodeAt(w+L)===47?k=L:L===0&&(k=0));break}var I=_.charCodeAt(w+L),B=b.charCodeAt(S+L);if(I!==B)break;I===47&&(k=L)}var T="";for(L=w+k+1;L<=O;++L)(L===O||_.charCodeAt(L)===47)&&(T.length===0?T+="..":T+="/..");return T.length>0?T+b.slice(S+k):(S+=k,b.charCodeAt(S)===47&&++S,b.slice(S))},_makeLong:function(_){return _},dirname:function(_){if(y(_),_.length===0)return".";for(var b=_.charCodeAt(0),w=b===47,O=-1,A=!0,S=_.length-1;S>=1;--S)if(b=_.charCodeAt(S),b===47){if(!A){O=S;break}}else A=!1;return O===-1?w?"/":".":w&&O===1?"//":_.slice(0,O)},basename:function(_,b){if(b!==void 0&&typeof b!="string")throw new TypeError('"ext" argument must be a string');y(_);var w=0,O=-1,A=!0,S;if(b!==void 0&&b.length>0&&b.length<=_.length){if(b.length===_.length&&b===_)return"";var P=b.length-1,C=-1;for(S=_.length-1;S>=0;--S){var M=_.charCodeAt(S);if(M===47){if(!A){w=S+1;break}}else C===-1&&(A=!1,C=S+1),P>=0&&(M===b.charCodeAt(P)?--P===-1&&(O=S):(P=-1,O=C))}return w===O?O=C:O===-1&&(O=_.length),_.slice(w,O)}else{for(S=_.length-1;S>=0;--S)if(_.charCodeAt(S)===47){if(!A){w=S+1;break}}else O===-1&&(A=!1,O=S+1);return O===-1?"":_.slice(w,O)}},extname:function(_){y(_);for(var b=-1,w=0,O=-1,A=!0,S=0,P=_.length-1;P>=0;--P){var C=_.charCodeAt(P);if(C===47){if(!A){w=P+1;break}continue}O===-1&&(A=!1,O=P+1),C===46?b===-1?b=P:S!==1&&(S=1):b!==-1&&(S=-1)}return b===-1||O===-1||S===0||S===1&&b===O-1&&b===w+1?"":_.slice(b,O)},format:function(_){if(_===null||typeof _!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof _);return E("/",_)},parse:function(_){y(_);var b={root:"",dir:"",base:"",ext:"",name:""};if(_.length===0)return b;var w=_.charCodeAt(0),O=w===47,A;O?(b.root="/",A=1):A=0;for(var S=-1,P=0,C=-1,M=!0,k=_.length-1,L=0;k>=A;--k){if(w=_.charCodeAt(k),w===47){if(!M){P=k+1;break}continue}C===-1&&(M=!1,C=k+1),w===46?S===-1?S=k:L!==1&&(L=1):S!==-1&&(L=-1)}return S===-1||C===-1||L===0||L===1&&S===C-1&&S===P+1?C!==-1&&(P===0&&O?b.base=b.name=_.slice(1,C):b.base=b.name=_.slice(P,C)):(P===0&&O?(b.name=_.slice(1,S),b.base=_.slice(1,C)):(b.name=_.slice(P,S),b.base=_.slice(P,C)),b.ext=_.slice(S,C)),P>0?b.dir=_.slice(0,P-1):O&&(b.dir="/"),b},sep:"/",delimiter:":",win32:null,posix:null};return q.posix=q,pathBrowserify=q,pathBrowserify}var rebaseTo,hasRequiredRebaseTo;function requireRebaseTo(){if(hasRequiredRebaseTo)return rebaseTo;hasRequiredRebaseTo=1;var y=requirePathBrowserify();function R(E){return E?y.resolve(E):process.cwd()}return rebaseTo=R,rebaseTo}var sourceMap={},sourceMapGenerator={},base64Vlq={},base64={},hasRequiredBase64;function requireBase64(){if(hasRequiredBase64)return base64;hasRequiredBase64=1;var y="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");return base64.encode=function(R){if(0<=R&&R<y.length)return y[R];throw new TypeError("Must be between 0 and 63: "+R)},base64.decode=function(R){var E=65,q=90,d=97,_=122,b=48,w=57,O=43,A=47,S=26,P=52;return E<=R&&R<=q?R-E:d<=R&&R<=_?R-d+S:b<=R&&R<=w?R-b+P:R==O?62:R==A?63:-1},base64}var hasRequiredBase64Vlq;function requireBase64Vlq(){if(hasRequiredBase64Vlq)return base64Vlq;hasRequiredBase64Vlq=1;var y=requireBase64(),R=5,E=1<<R,q=E-1,d=E;function _(w){return w<0?(-w<<1)+1:(w<<1)+0}function b(w){var O=(w&1)===1,A=w>>1;return O?-A:A}return base64Vlq.encode=function(O){var A="",S,P=_(O);do S=P&q,P>>>=R,P>0&&(S|=d),A+=y.encode(S);while(P>0);return A},base64Vlq.decode=function(O,A,S){var P=O.length,C=0,M=0,k,L;do{if(A>=P)throw new Error("Expected more digits in base 64 VLQ value.");if(L=y.decode(O.charCodeAt(A++)),L===-1)throw new Error("Invalid base64 digit: "+O.charAt(A-1));k=!!(L&d),L&=q,C=C+(L<<M),M+=R}while(k);S.value=b(C),S.rest=A},base64Vlq}var util$1={},hasRequiredUtil$1;function requireUtil$1(){return hasRequiredUtil$1||(hasRequiredUtil$1=1,(function(y){function R(V,N,U){if(N in V)return V[N];if(arguments.length===3)return U;throw new Error('"'+N+'" is a required argument.')}y.getArg=R;var E=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,q=/^data:.+\,.+$/;function d(V){var N=V.match(E);return N?{scheme:N[1],auth:N[2],host:N[3],port:N[4],path:N[5]}:null}y.urlParse=d;function _(V){var N="";return V.scheme&&(N+=V.scheme+":"),N+="//",V.auth&&(N+=V.auth+"@"),V.host&&(N+=V.host),V.port&&(N+=":"+V.port),V.path&&(N+=V.path),N}y.urlGenerate=_;function b(V){var N=V,U=d(V);if(U){if(!U.path)return V;N=U.path}for(var x=y.isAbsolute(N),K=N.split(/\/+/),F,D=0,$=K.length-1;$>=0;$--)F=K[$],F==="."?K.splice($,1):F===".."?D++:D>0&&(F===""?(K.splice($+1,D),D=0):(K.splice($,2),D--));return N=K.join("/"),N===""&&(N=x?"/":"."),U?(U.path=N,_(U)):N}y.normalize=b;function w(V,N){V===""&&(V="."),N===""&&(N=".");var U=d(N),x=d(V);if(x&&(V=x.path||"/"),U&&!U.scheme)return x&&(U.scheme=x.scheme),_(U);if(U||N.match(q))return N;if(x&&!x.host&&!x.path)return x.host=N,_(x);var K=N.charAt(0)==="/"?N:b(V.replace(/\/+$/,"")+"/"+N);return x?(x.path=K,_(x)):K}y.join=w,y.isAbsolute=function(V){return V.charAt(0)==="/"||E.test(V)};function O(V,N){V===""&&(V="."),V=V.replace(/\/$/,"");for(var U=0;N.indexOf(V+"/")!==0;){var x=V.lastIndexOf("/");if(x<0||(V=V.slice(0,x),V.match(/^([^\/]+:\/)?\/*$/)))return N;++U}return Array(U+1).join("../")+N.substr(V.length+1)}y.relative=O;var A=(function(){var V=Object.create(null);return!("__proto__"in V)})();function S(V){return V}function P(V){return M(V)?"$"+V:V}y.toSetString=A?S:P;function C(V){return M(V)?V.slice(1):V}y.fromSetString=A?S:C;function M(V){if(!V)return!1;var N=V.length;if(N<9||V.charCodeAt(N-1)!==95||V.charCodeAt(N-2)!==95||V.charCodeAt(N-3)!==111||V.charCodeAt(N-4)!==116||V.charCodeAt(N-5)!==111||V.charCodeAt(N-6)!==114||V.charCodeAt(N-7)!==112||V.charCodeAt(N-8)!==95||V.charCodeAt(N-9)!==95)return!1;for(var U=N-10;U>=0;U--)if(V.charCodeAt(U)!==36)return!1;return!0}function k(V,N,U){var x=I(V.source,N.source);return x!==0||(x=V.originalLine-N.originalLine,x!==0)||(x=V.originalColumn-N.originalColumn,x!==0||U)||(x=V.generatedColumn-N.generatedColumn,x!==0)||(x=V.generatedLine-N.generatedLine,x!==0)?x:I(V.name,N.name)}y.compareByOriginalPositions=k;function L(V,N,U){var x=V.generatedLine-N.generatedLine;return x!==0||(x=V.generatedColumn-N.generatedColumn,x!==0||U)||(x=I(V.source,N.source),x!==0)||(x=V.originalLine-N.originalLine,x!==0)||(x=V.originalColumn-N.originalColumn,x!==0)?x:I(V.name,N.name)}y.compareByGeneratedPositionsDeflated=L;function I(V,N){return V===N?0:V===null?1:N===null?-1:V>N?1:-1}function B(V,N){var U=V.generatedLine-N.generatedLine;return U!==0||(U=V.generatedColumn-N.generatedColumn,U!==0)||(U=I(V.source,N.source),U!==0)||(U=V.originalLine-N.originalLine,U!==0)||(U=V.originalColumn-N.originalColumn,U!==0)?U:I(V.name,N.name)}y.compareByGeneratedPositionsInflated=B;function T(V){return JSON.parse(V.replace(/^\)]}'[^\n]*\n/,""))}y.parseSourceMapInput=T;function z(V,N,U){if(N=N||"",V&&(V[V.length-1]!=="/"&&N[0]!=="/"&&(V+="/"),N=V+N),U){var x=d(U);if(!x)throw new Error("sourceMapURL could not be parsed");if(x.path){var K=x.path.lastIndexOf("/");K>=0&&(x.path=x.path.substring(0,K+1))}N=w(_(x),N)}return b(N)}y.computeSourceURL=z})(util$1)),util$1}var arraySet={},hasRequiredArraySet;function requireArraySet(){if(hasRequiredArraySet)return arraySet;hasRequiredArraySet=1;var y=requireUtil$1(),R=Object.prototype.hasOwnProperty,E=typeof Map<"u";function q(){this._array=[],this._set=E?new Map:Object.create(null)}return q.fromArray=function(_,b){for(var w=new q,O=0,A=_.length;O<A;O++)w.add(_[O],b);return w},q.prototype.size=function(){return E?this._set.size:Object.getOwnPropertyNames(this._set).length},q.prototype.add=function(_,b){var w=E?_:y.toSetString(_),O=E?this.has(_):R.call(this._set,w),A=this._array.length;(!O||b)&&this._array.push(_),O||(E?this._set.set(_,A):this._set[w]=A)},q.prototype.has=function(_){if(E)return this._set.has(_);var b=y.toSetString(_);return R.call(this._set,b)},q.prototype.indexOf=function(_){if(E){var b=this._set.get(_);if(b>=0)return b}else{var w=y.toSetString(_);if(R.call(this._set,w))return this._set[w]}throw new Error('"'+_+'" is not in the set.')},q.prototype.at=function(_){if(_>=0&&_<this._array.length)return this._array[_];throw new Error("No element indexed by "+_)},q.prototype.toArray=function(){return this._array.slice()},arraySet.ArraySet=q,arraySet}var mappingList={},hasRequiredMappingList;function requireMappingList(){if(hasRequiredMappingList)return mappingList;hasRequiredMappingList=1;var y=requireUtil$1();function R(q,d){var _=q.generatedLine,b=d.generatedLine,w=q.generatedColumn,O=d.generatedColumn;return b>_||b==_&&O>=w||y.compareByGeneratedPositionsInflated(q,d)<=0}function E(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}return E.prototype.unsortedForEach=function(d,_){this._array.forEach(d,_)},E.prototype.add=function(d){R(this._last,d)?(this._last=d,this._array.push(d)):(this._sorted=!1,this._array.push(d))},E.prototype.toArray=function(){return this._sorted||(this._array.sort(y.compareByGeneratedPositionsInflated),this._sorted=!0),this._array},mappingList.MappingList=E,mappingList}var hasRequiredSourceMapGenerator;function requireSourceMapGenerator(){if(hasRequiredSourceMapGenerator)return sourceMapGenerator;hasRequiredSourceMapGenerator=1;var y=requireBase64Vlq(),R=requireUtil$1(),E=requireArraySet().ArraySet,q=requireMappingList().MappingList;function d(_){_||(_={}),this._file=R.getArg(_,"file",null),this._sourceRoot=R.getArg(_,"sourceRoot",null),this._skipValidation=R.getArg(_,"skipValidation",!1),this._sources=new E,this._names=new E,this._mappings=new q,this._sourcesContents=null}return d.prototype._version=3,d.fromSourceMap=function(b){var w=b.sourceRoot,O=new d({file:b.file,sourceRoot:w});return b.eachMapping(function(A){var S={generated:{line:A.generatedLine,column:A.generatedColumn}};A.source!=null&&(S.source=A.source,w!=null&&(S.source=R.relative(w,S.source)),S.original={line:A.originalLine,column:A.originalColumn},A.name!=null&&(S.name=A.name)),O.addMapping(S)}),b.sources.forEach(function(A){var S=A;w!==null&&(S=R.relative(w,A)),O._sources.has(S)||O._sources.add(S);var P=b.sourceContentFor(A);P!=null&&O.setSourceContent(A,P)}),O},d.prototype.addMapping=function(b){var w=R.getArg(b,"generated"),O=R.getArg(b,"original",null),A=R.getArg(b,"source",null),S=R.getArg(b,"name",null);this._skipValidation||this._validateMapping(w,O,A,S),A!=null&&(A=String(A),this._sources.has(A)||this._sources.add(A)),S!=null&&(S=String(S),this._names.has(S)||this._names.add(S)),this._mappings.add({generatedLine:w.line,generatedColumn:w.column,originalLine:O!=null&&O.line,originalColumn:O!=null&&O.column,source:A,name:S})},d.prototype.setSourceContent=function(b,w){var O=b;this._sourceRoot!=null&&(O=R.relative(this._sourceRoot,O)),w!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[R.toSetString(O)]=w):this._sourcesContents&&(delete this._sourcesContents[R.toSetString(O)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))},d.prototype.applySourceMap=function(b,w,O){var A=w;if(w==null){if(b.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);A=b.file}var S=this._sourceRoot;S!=null&&(A=R.relative(S,A));var P=new E,C=new E;this._mappings.unsortedForEach(function(M){if(M.source===A&&M.originalLine!=null){var k=b.originalPositionFor({line:M.originalLine,column:M.originalColumn});k.source!=null&&(M.source=k.source,O!=null&&(M.source=R.join(O,M.source)),S!=null&&(M.source=R.relative(S,M.source)),M.originalLine=k.line,M.originalColumn=k.column,k.name!=null&&(M.name=k.name))}var L=M.source;L!=null&&!P.has(L)&&P.add(L);var I=M.name;I!=null&&!C.has(I)&&C.add(I)},this),this._sources=P,this._names=C,b.sources.forEach(function(M){var k=b.sourceContentFor(M);k!=null&&(O!=null&&(M=R.join(O,M)),S!=null&&(M=R.relative(S,M)),this.setSourceContent(M,k))},this)},d.prototype._validateMapping=function(b,w,O,A){if(w&&typeof w.line!="number"&&typeof w.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(b&&"line"in b&&"column"in b&&b.line>0&&b.column>=0&&!w&&!O&&!A)){if(b&&"line"in b&&"column"in b&&w&&"line"in w&&"column"in w&&b.line>0&&b.column>=0&&w.line>0&&w.column>=0&&O)return;throw new Error("Invalid mapping: "+JSON.stringify({generated:b,source:O,original:w,name:A}))}},d.prototype._serializeMappings=function(){for(var b=0,w=1,O=0,A=0,S=0,P=0,C="",M,k,L,I,B=this._mappings.toArray(),T=0,z=B.length;T<z;T++){if(k=B[T],M="",k.generatedLine!==w)for(b=0;k.generatedLine!==w;)M+=";",w++;else if(T>0){if(!R.compareByGeneratedPositionsInflated(k,B[T-1]))continue;M+=","}M+=y.encode(k.generatedColumn-b),b=k.generatedColumn,k.source!=null&&(I=this._sources.indexOf(k.source),M+=y.encode(I-P),P=I,M+=y.encode(k.originalLine-1-A),A=k.originalLine-1,M+=y.encode(k.originalColumn-O),O=k.originalColumn,k.name!=null&&(L=this._names.indexOf(k.name),M+=y.encode(L-S),S=L)),C+=M}return C},d.prototype._generateSourcesContent=function(b,w){return b.map(function(O){if(!this._sourcesContents)return null;w!=null&&(O=R.relative(w,O));var A=R.toSetString(O);return Object.prototype.hasOwnProperty.call(this._sourcesContents,A)?this._sourcesContents[A]:null},this)},d.prototype.toJSON=function(){var b={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(b.file=this._file),this._sourceRoot!=null&&(b.sourceRoot=this._sourceRoot),this._sourcesContents&&(b.sourcesContent=this._generateSourcesContent(b.sources,b.sourceRoot)),b},d.prototype.toString=function(){return JSON.stringify(this.toJSON())},sourceMapGenerator.SourceMapGenerator=d,sourceMapGenerator}var sourceMapConsumer={},binarySearch={},hasRequiredBinarySearch;function requireBinarySearch(){return hasRequiredBinarySearch||(hasRequiredBinarySearch=1,(function(y){y.GREATEST_LOWER_BOUND=1,y.LEAST_UPPER_BOUND=2;function R(E,q,d,_,b,w){var O=Math.floor((q-E)/2)+E,A=b(d,_[O],!0);return A===0?O:A>0?q-O>1?R(O,q,d,_,b,w):w==y.LEAST_UPPER_BOUND?q<_.length?q:-1:O:O-E>1?R(E,O,d,_,b,w):w==y.LEAST_UPPER_BOUND?O:E<0?-1:E}y.search=function(q,d,_,b){if(d.length===0)return-1;var w=R(-1,d.length,q,d,_,b||y.GREATEST_LOWER_BOUND);if(w<0)return-1;for(;w-1>=0&&_(d[w],d[w-1],!0)===0;)--w;return w}})(binarySearch)),binarySearch}var quickSort={},hasRequiredQuickSort;function requireQuickSort(){if(hasRequiredQuickSort)return quickSort;hasRequiredQuickSort=1;function y(q,d,_){var b=q[d];q[d]=q[_],q[_]=b}function R(q,d){return Math.round(q+Math.random()*(d-q))}function E(q,d,_,b){if(_<b){var w=R(_,b),O=_-1;y(q,w,b);for(var A=q[b],S=_;S<b;S++)d(q[S],A)<=0&&(O+=1,y(q,O,S));y(q,O+1,S);var P=O+1;E(q,d,_,P-1),E(q,d,P+1,b)}}return quickSort.quickSort=function(q,d){E(q,d,0,q.length-1)},quickSort}var hasRequiredSourceMapConsumer;function requireSourceMapConsumer(){if(hasRequiredSourceMapConsumer)return sourceMapConsumer;hasRequiredSourceMapConsumer=1;var y=requireUtil$1(),R=requireBinarySearch(),E=requireArraySet().ArraySet,q=requireBase64Vlq(),d=requireQuickSort().quickSort;function _(A,S){var P=A;return typeof A=="string"&&(P=y.parseSourceMapInput(A)),P.sections!=null?new O(P,S):new b(P,S)}_.fromSourceMap=function(A,S){return b.fromSourceMap(A,S)},_.prototype._version=3,_.prototype.__generatedMappings=null,Object.defineProperty(_.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}}),_.prototype.__originalMappings=null,Object.defineProperty(_.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}}),_.prototype._charIsMappingSeparator=function(S,P){var C=S.charAt(P);return C===";"||C===","},_.prototype._parseMappings=function(S,P){throw new Error("Subclasses must implement _parseMappings")},_.GENERATED_ORDER=1,_.ORIGINAL_ORDER=2,_.GREATEST_LOWER_BOUND=1,_.LEAST_UPPER_BOUND=2,_.prototype.eachMapping=function(S,P,C){var M=P||null,k=C||_.GENERATED_ORDER,L;switch(k){case _.GENERATED_ORDER:L=this._generatedMappings;break;case _.ORIGINAL_ORDER:L=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var I=this.sourceRoot;L.map(function(B){var T=B.source===null?null:this._sources.at(B.source);return T=y.computeSourceURL(I,T,this._sourceMapURL),{source:T,generatedLine:B.generatedLine,generatedColumn:B.generatedColumn,originalLine:B.originalLine,originalColumn:B.originalColumn,name:B.name===null?null:this._names.at(B.name)}},this).forEach(S,M)},_.prototype.allGeneratedPositionsFor=function(S){var P=y.getArg(S,"line"),C={source:y.getArg(S,"source"),originalLine:P,originalColumn:y.getArg(S,"column",0)};if(C.source=this._findSourceIndex(C.source),C.source<0)return[];var M=[],k=this._findMapping(C,this._originalMappings,"originalLine","originalColumn",y.compareByOriginalPositions,R.LEAST_UPPER_BOUND);if(k>=0){var L=this._originalMappings[k];if(S.column===void 0)for(var I=L.originalLine;L&&L.originalLine===I;)M.push({line:y.getArg(L,"generatedLine",null),column:y.getArg(L,"generatedColumn",null),lastColumn:y.getArg(L,"lastGeneratedColumn",null)}),L=this._originalMappings[++k];else for(var B=L.originalColumn;L&&L.originalLine===P&&L.originalColumn==B;)M.push({line:y.getArg(L,"generatedLine",null),column:y.getArg(L,"generatedColumn",null),lastColumn:y.getArg(L,"lastGeneratedColumn",null)}),L=this._originalMappings[++k]}return M},sourceMapConsumer.SourceMapConsumer=_;function b(A,S){var P=A;typeof A=="string"&&(P=y.parseSourceMapInput(A));var C=y.getArg(P,"version"),M=y.getArg(P,"sources"),k=y.getArg(P,"names",[]),L=y.getArg(P,"sourceRoot",null),I=y.getArg(P,"sourcesContent",null),B=y.getArg(P,"mappings"),T=y.getArg(P,"file",null);if(C!=this._version)throw new Error("Unsupported version: "+C);L&&(L=y.normalize(L)),M=M.map(String).map(y.normalize).map(function(z){return L&&y.isAbsolute(L)&&y.isAbsolute(z)?y.relative(L,z):z}),this._names=E.fromArray(k.map(String),!0),this._sources=E.fromArray(M,!0),this._absoluteSources=this._sources.toArray().map(function(z){return y.computeSourceURL(L,z,S)}),this.sourceRoot=L,this.sourcesContent=I,this._mappings=B,this._sourceMapURL=S,this.file=T}b.prototype=Object.create(_.prototype),b.prototype.consumer=_,b.prototype._findSourceIndex=function(A){var S=A;if(this.sourceRoot!=null&&(S=y.relative(this.sourceRoot,S)),this._sources.has(S))return this._sources.indexOf(S);var P;for(P=0;P<this._absoluteSources.length;++P)if(this._absoluteSources[P]==A)return P;return-1},b.fromSourceMap=function(S,P){var C=Object.create(b.prototype),M=C._names=E.fromArray(S._names.toArray(),!0),k=C._sources=E.fromArray(S._sources.toArray(),!0);C.sourceRoot=S._sourceRoot,C.sourcesContent=S._generateSourcesContent(C._sources.toArray(),C.sourceRoot),C.file=S._file,C._sourceMapURL=P,C._absoluteSources=C._sources.toArray().map(function(U){return y.computeSourceURL(C.sourceRoot,U,P)});for(var L=S._mappings.toArray().slice(),I=C.__generatedMappings=[],B=C.__originalMappings=[],T=0,z=L.length;T<z;T++){var V=L[T],N=new w;N.generatedLine=V.generatedLine,N.generatedColumn=V.generatedColumn,V.source&&(N.source=k.indexOf(V.source),N.originalLine=V.originalLine,N.originalColumn=V.originalColumn,V.name&&(N.name=M.indexOf(V.name)),B.push(N)),I.push(N)}return d(C.__originalMappings,y.compareByOriginalPositions),C},b.prototype._version=3,Object.defineProperty(b.prototype,"sources",{get:function(){return this._absoluteSources.slice()}});function w(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}b.prototype._parseMappings=function(S,P){for(var C=1,M=0,k=0,L=0,I=0,B=0,T=S.length,z=0,V={},N={},U=[],x=[],K,F,D,$,G;z<T;)if(S.charAt(z)===";")C++,z++,M=0;else if(S.charAt(z)===",")z++;else{for(K=new w,K.generatedLine=C,$=z;$<T&&!this._charIsMappingSeparator(S,$);$++);if(F=S.slice(z,$),D=V[F],D)z+=F.length;else{for(D=[];z<$;)q.decode(S,z,N),G=N.value,z=N.rest,D.push(G);if(D.length===2)throw new Error("Found a source, but no line and column");if(D.length===3)throw new Error("Found a source and line, but no column");V[F]=D}K.generatedColumn=M+D[0],M=K.generatedColumn,D.length>1&&(K.source=I+D[1],I+=D[1],K.originalLine=k+D[2],k=K.originalLine,K.originalLine+=1,K.originalColumn=L+D[3],L=K.originalColumn,D.length>4&&(K.name=B+D[4],B+=D[4])),x.push(K),typeof K.originalLine=="number"&&U.push(K)}d(x,y.compareByGeneratedPositionsDeflated),this.__generatedMappings=x,d(U,y.compareByOriginalPositions),this.__originalMappings=U},b.prototype._findMapping=function(S,P,C,M,k,L){if(S[C]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+S[C]);if(S[M]<0)throw new TypeError("Column must be greater than or equal to 0, got "+S[M]);return R.search(S,P,k,L)},b.prototype.computeColumnSpans=function(){for(var S=0;S<this._generatedMappings.length;++S){var P=this._generatedMappings[S];if(S+1<this._generatedMappings.length){var C=this._generatedMappings[S+1];if(P.generatedLine===C.generatedLine){P.lastGeneratedColumn=C.generatedColumn-1;continue}}P.lastGeneratedColumn=1/0}},b.prototype.originalPositionFor=function(S){var P={generatedLine:y.getArg(S,"line"),generatedColumn:y.getArg(S,"column")},C=this._findMapping(P,this._generatedMappings,"generatedLine","generatedColumn",y.compareByGeneratedPositionsDeflated,y.getArg(S,"bias",_.GREATEST_LOWER_BOUND));if(C>=0){var M=this._generatedMappings[C];if(M.generatedLine===P.generatedLine){var k=y.getArg(M,"source",null);k!==null&&(k=this._sources.at(k),k=y.computeSourceURL(this.sourceRoot,k,this._sourceMapURL));var L=y.getArg(M,"name",null);return L!==null&&(L=this._names.at(L)),{source:k,line:y.getArg(M,"originalLine",null),column:y.getArg(M,"originalColumn",null),name:L}}}return{source:null,line:null,column:null,name:null}},b.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(S){return S==null}):!1},b.prototype.sourceContentFor=function(S,P){if(!this.sourcesContent)return null;var C=this._findSourceIndex(S);if(C>=0)return this.sourcesContent[C];var M=S;this.sourceRoot!=null&&(M=y.relative(this.sourceRoot,M));var k;if(this.sourceRoot!=null&&(k=y.urlParse(this.sourceRoot))){var L=M.replace(/^file:\/\//,"");if(k.scheme=="file"&&this._sources.has(L))return this.sourcesContent[this._sources.indexOf(L)];if((!k.path||k.path=="/")&&this._sources.has("/"+M))return this.sourcesContent[this._sources.indexOf("/"+M)]}if(P)return null;throw new Error('"'+M+'" is not in the SourceMap.')},b.prototype.generatedPositionFor=function(S){var P=y.getArg(S,"source");if(P=this._findSourceIndex(P),P<0)return{line:null,column:null,lastColumn:null};var C={source:P,originalLine:y.getArg(S,"line"),originalColumn:y.getArg(S,"column")},M=this._findMapping(C,this._originalMappings,"originalLine","originalColumn",y.compareByOriginalPositions,y.getArg(S,"bias",_.GREATEST_LOWER_BOUND));if(M>=0){var k=this._originalMappings[M];if(k.source===C.source)return{line:y.getArg(k,"generatedLine",null),column:y.getArg(k,"generatedColumn",null),lastColumn:y.getArg(k,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}},sourceMapConsumer.BasicSourceMapConsumer=b;function O(A,S){var P=A;typeof A=="string"&&(P=y.parseSourceMapInput(A));var C=y.getArg(P,"version"),M=y.getArg(P,"sections");if(C!=this._version)throw new Error("Unsupported version: "+C);this._sources=new E,this._names=new E;var k={line:-1,column:0};this._sections=M.map(function(L){if(L.url)throw new Error("Support for url field in sections not implemented.");var I=y.getArg(L,"offset"),B=y.getArg(I,"line"),T=y.getArg(I,"column");if(B<k.line||B===k.line&&T<k.column)throw new Error("Section offsets must be ordered and non-overlapping.");return k=I,{generatedOffset:{generatedLine:B+1,generatedColumn:T+1},consumer:new _(y.getArg(L,"map"),S)}})}return O.prototype=Object.create(_.prototype),O.prototype.constructor=_,O.prototype._version=3,Object.defineProperty(O.prototype,"sources",{get:function(){for(var A=[],S=0;S<this._sections.length;S++)for(var P=0;P<this._sections[S].consumer.sources.length;P++)A.push(this._sections[S].consumer.sources[P]);return A}}),O.prototype.originalPositionFor=function(S){var P={generatedLine:y.getArg(S,"line"),generatedColumn:y.getArg(S,"column")},C=R.search(P,this._sections,function(k,L){var I=k.generatedLine-L.generatedOffset.generatedLine;return I||k.generatedColumn-L.generatedOffset.generatedColumn}),M=this._sections[C];return M?M.consumer.originalPositionFor({line:P.generatedLine-(M.generatedOffset.generatedLine-1),column:P.generatedColumn-(M.generatedOffset.generatedLine===P.generatedLine?M.generatedOffset.generatedColumn-1:0),bias:S.bias}):{source:null,line:null,column:null,name:null}},O.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(S){return S.consumer.hasContentsOfAllSources()})},O.prototype.sourceContentFor=function(S,P){for(var C=0;C<this._sections.length;C++){var M=this._sections[C],k=M.consumer.sourceContentFor(S,!0);if(k)return k}if(P)return null;throw new Error('"'+S+'" is not in the SourceMap.')},O.prototype.generatedPositionFor=function(S){for(var P=0;P<this._sections.length;P++){var C=this._sections[P];if(C.consumer._findSourceIndex(y.getArg(S,"source"))!==-1){var M=C.consumer.generatedPositionFor(S);if(M){var k={line:M.line+(C.generatedOffset.generatedLine-1),column:M.column+(C.generatedOffset.generatedLine===M.line?C.generatedOffset.generatedColumn-1:0)};return k}}}return{line:null,column:null}},O.prototype._parseMappings=function(S,P){this.__generatedMappings=[],this.__originalMappings=[];for(var C=0;C<this._sections.length;C++)for(var M=this._sections[C],k=M.consumer._generatedMappings,L=0;L<k.length;L++){var I=k[L],B=M.consumer._sources.at(I.source);B=y.computeSourceURL(M.consumer.sourceRoot,B,this._sourceMapURL),this._sources.add(B),B=this._sources.indexOf(B);var T=null;I.name&&(T=M.consumer._names.at(I.name),this._names.add(T),T=this._names.indexOf(T));var z={source:B,generatedLine:I.generatedLine+(M.generatedOffset.generatedLine-1),generatedColumn:I.generatedColumn+(M.generatedOffset.generatedLine===I.generatedLine?M.generatedOffset.generatedColumn-1:0),originalLine:I.originalLine,originalColumn:I.originalColumn,name:T};this.__generatedMappings.push(z),typeof z.originalLine=="number"&&this.__originalMappings.push(z)}d(this.__generatedMappings,y.compareByGeneratedPositionsDeflated),d(this.__originalMappings,y.compareByOriginalPositions)},sourceMapConsumer.IndexedSourceMapConsumer=O,sourceMapConsumer}var sourceNode={},hasRequiredSourceNode;function requireSourceNode(){if(hasRequiredSourceNode)return sourceNode;hasRequiredSourceNode=1;var y=requireSourceMapGenerator().SourceMapGenerator,R=requireUtil$1(),E=/(\r?\n)/,q=10,d="$$$isSourceNode$$$";function _(b,w,O,A,S){this.children=[],this.sourceContents={},this.line=b??null,this.column=w??null,this.source=O??null,this.name=S??null,this[d]=!0,A!=null&&this.add(A)}return _.fromStringWithSourceMap=function(w,O,A){var S=new _,P=w.split(E),C=0,M=function(){var T=V(),z=V()||"";return T+z;function V(){return C<P.length?P[C++]:void 0}},k=1,L=0,I=null;return O.eachMapping(function(T){if(I!==null)if(k<T.generatedLine)B(I,M()),k++,L=0;else{var z=P[C]||"",V=z.substr(0,T.generatedColumn-L);P[C]=z.substr(T.generatedColumn-L),L=T.generatedColumn,B(I,V),I=T;return}for(;k<T.generatedLine;)S.add(M()),k++;if(L<T.generatedColumn){var z=P[C]||"";S.add(z.substr(0,T.generatedColumn)),P[C]=z.substr(T.generatedColumn),L=T.generatedColumn}I=T},this),C<P.length&&(I&&B(I,M()),S.add(P.splice(C).join(""))),O.sources.forEach(function(T){var z=O.sourceContentFor(T);z!=null&&(A!=null&&(T=R.join(A,T)),S.setSourceContent(T,z))}),S;function B(T,z){if(T===null||T.source===void 0)S.add(z);else{var V=A?R.join(A,T.source):T.source;S.add(new _(T.originalLine,T.originalColumn,V,z,T.name))}}},_.prototype.add=function(w){if(Array.isArray(w))w.forEach(function(O){this.add(O)},this);else if(w[d]||typeof w=="string")w&&this.children.push(w);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+w);return this},_.prototype.prepend=function(w){if(Array.isArray(w))for(var O=w.length-1;O>=0;O--)this.prepend(w[O]);else if(w[d]||typeof w=="string")this.children.unshift(w);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+w);return this},_.prototype.walk=function(w){for(var O,A=0,S=this.children.length;A<S;A++)O=this.children[A],O[d]?O.walk(w):O!==""&&w(O,{source:this.source,line:this.line,column:this.column,name:this.name})},_.prototype.join=function(w){var O,A,S=this.children.length;if(S>0){for(O=[],A=0;A<S-1;A++)O.push(this.children[A]),O.push(w);O.push(this.children[A]),this.children=O}return this},_.prototype.replaceRight=function(w,O){var A=this.children[this.children.length-1];return A[d]?A.replaceRight(w,O):typeof A=="string"?this.children[this.children.length-1]=A.replace(w,O):this.children.push("".replace(w,O)),this},_.prototype.setSourceContent=function(w,O){this.sourceContents[R.toSetString(w)]=O},_.prototype.walkSourceContents=function(w){for(var O=0,A=this.children.length;O<A;O++)this.children[O][d]&&this.children[O].walkSourceContents(w);for(var S=Object.keys(this.sourceContents),O=0,A=S.length;O<A;O++)w(R.fromSetString(S[O]),this.sourceContents[S[O]])},_.prototype.toString=function(){var w="";return this.walk(function(O){w+=O}),w},_.prototype.toStringWithSourceMap=function(w){var O={code:"",line:1,column:0},A=new y(w),S=!1,P=null,C=null,M=null,k=null;return this.walk(function(L,I){O.code+=L,I.source!==null&&I.line!==null&&I.column!==null?((P!==I.source||C!==I.line||M!==I.column||k!==I.name)&&A.addMapping({source:I.source,original:{line:I.line,column:I.column},generated:{line:O.line,column:O.column},name:I.name}),P=I.source,C=I.line,M=I.column,k=I.name,S=!0):S&&(A.addMapping({generated:{line:O.line,column:O.column}}),P=null,S=!1);for(var B=0,T=L.length;B<T;B++)L.charCodeAt(B)===q?(O.line++,O.column=0,B+1===T?(P=null,S=!1):S&&A.addMapping({source:I.source,original:{line:I.line,column:I.column},generated:{line:O.line,column:O.column},name:I.name})):O.column++}),this.walkSourceContents(function(L,I){A.setSourceContent(L,I)}),{code:O.code,map:A}},sourceNode.SourceNode=_,sourceNode}var hasRequiredSourceMap;function requireSourceMap(){return hasRequiredSourceMap||(hasRequiredSourceMap=1,sourceMap.SourceMapGenerator=requireSourceMapGenerator().SourceMapGenerator,sourceMap.SourceMapConsumer=requireSourceMapConsumer().SourceMapConsumer,sourceMap.SourceNode=requireSourceNode().SourceNode),sourceMap}var inputSourceMapTracker_1,hasRequiredInputSourceMapTracker;function requireInputSourceMapTracker(){if(hasRequiredInputSourceMapTracker)return inputSourceMapTracker_1;hasRequiredInputSourceMapTracker=1;var y=requireSourceMap().SourceMapConsumer;function R(){var w={};return{all:E.bind(null,w),isTracking:q.bind(null,w),originalPositionFor:d.bind(null,w),track:b.bind(null,w)}}function E(w){return w}function q(w,O){return O in w}function d(w,O,A,S){for(var P=O[0],C=O[1],M=O[2],k={line:P,column:C+A},L;!L&&k.column>C;)k.column--,L=w[M].originalPositionFor(k);return!L||L.column<0?O:L.line===null&&P>1&&S>0?d(w,[P-1,C,M],A,S-1):L.line!==null?_(L):O}function _(w){return[w.line,w.column,w.source]}function b(w,O,A){w[O]=new y(A)}return inputSourceMapTracker_1=R,inputSourceMapTracker_1}var isRemoteResource_1,hasRequiredIsRemoteResource;function requireIsRemoteResource(){if(hasRequiredIsRemoteResource)return isRemoteResource_1;hasRequiredIsRemoteResource=1;var y=/^(\w+:\/\/|\/\/)/,R=/^file:\/\//;function E(q){return y.test(q)&&!R.test(q)}return isRemoteResource_1=E,isRemoteResource_1}var hasProtocol_1,hasRequiredHasProtocol;function requireHasProtocol(){if(hasRequiredHasProtocol)return hasProtocol_1;hasRequiredHasProtocol=1;var y=/^\/\//;function R(E){return!y.test(E)}return hasProtocol_1=R,hasProtocol_1}var isAllowedResource_1,hasRequiredIsAllowedResource;function requireIsAllowedResource(){if(hasRequiredIsAllowedResource)return isAllowedResource_1;hasRequiredIsAllowedResource=1;var y=requirePathBrowserify(),R=require$$2,E=requireIsRemoteResource(),q=requireHasProtocol(),d="http:";function _(w,O,A){var S,P,C=!O,M,k,L,I;if(A.length===0)return!1;for(O&&!q(w)&&(w=d+w),S=O?R.parse(w).host:w,P=O?w:y.resolve(w),I=0;I<A.length;I++)M=A[I],k=M[0]=="!",L=M.substring(1),k&&O&&b(L)?C=C&&!_(w,!0,[L]):k&&!O&&!b(L)?C=C&&!_(w,!1,[L]):k?C=C&&!0:M=="all"?C=!0:O&&M=="local"?C=C||!1:O&&M=="remote"?C=!0:!O&&M=="remote"?C=!1:!O&&M=="local"||M===S||M===w||O&&P.indexOf(M)===0||!O&&P.indexOf(y.resolve(M))===0?C=!0:O!=b(L)?C=C&&!0:C=!1;return C}function b(w){return E(w)||R.parse(d+"//"+w).host==w}return isAllowedResource_1=_,isAllowedResource_1}var matchDataUri_1,hasRequiredMatchDataUri;function requireMatchDataUri(){if(hasRequiredMatchDataUri)return matchDataUri_1;hasRequiredMatchDataUri=1;var y=/^data:(\S*?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/;function R(E){return y.exec(E)}return matchDataUri_1=R,matchDataUri_1}var rebaseLocalMap_1,hasRequiredRebaseLocalMap;function requireRebaseLocalMap(){if(hasRequiredRebaseLocalMap)return rebaseLocalMap_1;hasRequiredRebaseLocalMap=1;var y=requirePathBrowserify();function R(E,q,d){var _=y.resolve(""),b=y.resolve(_,q),w=y.dirname(b);return E.sources=E.sources.map(function(O){return y.relative(d,y.resolve(w,O))}),E}return rebaseLocalMap_1=R,rebaseLocalMap_1}var rebaseRemoteMap_1,hasRequiredRebaseRemoteMap;function requireRebaseRemoteMap(){if(hasRequiredRebaseRemoteMap)return rebaseRemoteMap_1;hasRequiredRebaseRemoteMap=1;var y=requirePathBrowserify(),R=require$$2;function E(q,d){var _=y.dirname(d);return q.sources=q.sources.map(function(b){return R.resolve(_,b)}),q}return rebaseRemoteMap_1=E,rebaseRemoteMap_1}var isDataUriResource_1,hasRequiredIsDataUriResource;function requireIsDataUriResource(){if(hasRequiredIsDataUriResource)return isDataUriResource_1;hasRequiredIsDataUriResource=1;var y=/^data:(\S{0,31}?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/;function R(E){return y.test(E)}return isDataUriResource_1=R,isDataUriResource_1}var applySourceMaps_1,hasRequiredApplySourceMaps;function requireApplySourceMaps(){if(hasRequiredApplySourceMaps)return applySourceMaps_1;hasRequiredApplySourceMaps=1;var y=requireNoop(),R=requirePathBrowserify(),E=requireIsAllowedResource(),q=requireMatchDataUri(),d=requireRebaseLocalMap(),_=requireRebaseRemoteMap(),b=requireToken(),w=requireHasProtocol(),O=requireIsDataUriResource(),A=requireIsRemoteResource(),S=/^\/\*# sourceMappingURL=(\S+) \*\/$/;function P(N,U,x){var K={callback:x,fetch:U.options.fetch,index:0,inline:U.options.inline,inlineRequest:U.options.inlineRequest,inlineTimeout:U.options.inlineTimeout,inputSourceMapTracker:U.inputSourceMapTracker,localOnly:U.localOnly,processedTokens:[],rebaseTo:U.options.rebaseTo,sourceTokens:N,warnings:U.warnings};return U.options.sourceMap&&N.length>0?C(K):x(N)}function C(N){var U=[],x=M(N.sourceTokens[0]),K,F,D;for(D=N.sourceTokens.length;N.index<D;N.index++)if(F=N.sourceTokens[N.index],K=M(F),K!=x&&(U=[],x=K),U.push(F),N.processedTokens.push(F),F[0]==b.COMMENT&&S.test(F[1]))return k(F[1],K,U,N);return N.callback(N.processedTokens)}function M(N){var U,x;return N[0]==b.AT_RULE||N[0]==b.COMMENT||N[0]==b.RAW?x=N[2][0]:(U=N[1][0],x=U[2][0]),x[2]}function k(N,U,x,K){return L(N,K,function(F){return F&&(K.inputSourceMapTracker.track(U,F),z(x,K.inputSourceMapTracker)),K.index++,C(K)})}function L(N,U,x){var K=S.exec(N)[1],F,D,$;return O(K)?(D=I(K),x(D)):A(K)?B(K,U,function(G){var j;G?(j=JSON.parse(G),$=_(j,K),x($)):x(null)}):(F=R.resolve(U.rebaseTo,K),D=T(F,U),D?($=d(D,F,U.rebaseTo),x($)):x(null))}function I(N){var U=q(N),x=U[2]?U[2].split(/[=;]/)[2]:"us-ascii",K=U[3]?U[3].split(";")[1]:"utf8",F=K=="utf8"?commonjsGlobal.unescape(U[4]):U[4],D=Buffer.from(F,K);return D.charset=x,JSON.parse(D.toString())}function B(N,U,x){var K=E(N,!0,U.inline),F=!w(N);if(U.localOnly)return U.warnings.push('Cannot fetch remote resource from "'+N+'" as no callback given.'),x(null);if(F)return U.warnings.push('Cannot fetch "'+N+'" as no protocol given.'),x(null);if(!K)return U.warnings.push('Cannot fetch "'+N+'" as resource is not allowed.'),x(null);U.fetch(N,U.inlineRequest,U.inlineTimeout,function(D,$){if(D)return U.warnings.push('Missing source map at "'+N+'" - '+D),x(null);x($)})}function T(N,U){var x=E(N,!1,U.inline),K;return!y.existsSync(N)||!y.statSync(N).isFile()?(U.warnings.push('Ignoring local source map at "'+N+'" as resource is missing.'),null):x?y.statSync(N).size?(K=y.readFileSync(N,"utf-8"),JSON.parse(K)):(U.warnings.push('Cannot fetch "'+N+'" as resource is empty.'),null):(U.warnings.push('Cannot fetch "'+N+'" as resource is not allowed.'),null)}function z(N,U){var x,K,F;for(K=0,F=N.length;K<F;K++)switch(x=N[K],x[0]){case b.AT_RULE:V(x,U);break;case b.AT_RULE_BLOCK:z(x[1],U),z(x[2],U);break;case b.AT_RULE_BLOCK_SCOPE:V(x,U);break;case b.NESTED_BLOCK:z(x[1],U),z(x[2],U);break;case b.NESTED_BLOCK_SCOPE:V(x,U);break;case b.COMMENT:V(x,U);break;case b.PROPERTY:z(x,U);break;case b.PROPERTY_BLOCK:z(x[1],U);break;case b.PROPERTY_NAME:V(x,U);break;case b.PROPERTY_VALUE:V(x,U);break;case b.RULE:z(x[1],U),z(x[2],U);break;case b.RULE_SCOPE:V(x,U)}return N}function V(N,U){var x=N[1],K=N[2],F=[],D,$;for(D=0,$=K.length;D<$;D++)F.push(U.originalPositionFor(K[D],x.length));N[2]=F}return applySourceMaps_1=P,applySourceMaps_1}var extractImportUrlAndMedia_1,hasRequiredExtractImportUrlAndMedia;function requireExtractImportUrlAndMedia(){if(hasRequiredExtractImportUrlAndMedia)return extractImportUrlAndMedia_1;hasRequiredExtractImportUrlAndMedia=1;var y=requireSplit(),R=/^\(/,E=/\)$/,q=/^@import/i,d=/['"]\s{0,31}/,_=/\s{0,31}['"]/,b=/^url\(\s{0,31}/i,w=/\s{0,31}\)/i;function O(A){var S,P,C,M;return C=A.replace(q,"").trim().replace(b,"(").replace(w,") ").replace(d,"").replace(_,""),M=y(C," "),S=M[0].replace(R,"").replace(E,""),P=M.slice(1).join(" "),[S,P]}return extractImportUrlAndMedia_1=O,extractImportUrlAndMedia_1}var loadOriginalSources_1,hasRequiredLoadOriginalSources;function requireLoadOriginalSources(){if(hasRequiredLoadOriginalSources)return loadOriginalSources_1;hasRequiredLoadOriginalSources=1;var y=requireNoop(),R=requirePathBrowserify(),E=requireIsAllowedResource(),q=requireHasProtocol(),d=requireIsRemoteResource();function _(P,C){var M={callback:C,fetch:P.options.fetch,index:0,inline:P.options.inline,inlineRequest:P.options.inlineRequest,inlineTimeout:P.options.inlineTimeout,localOnly:P.localOnly,rebaseTo:P.options.rebaseTo,sourcesContent:P.sourcesContent,uriToSource:b(P.inputSourceMapTracker.all()),warnings:P.warnings};return P.options.sourceMap&&P.options.sourceMapInlineSources?w(M):C()}function b(P){var C={},M,k,L,I,B;for(L in P)for(M=P[L],I=0,B=M.sources.length;I<B;I++)k=M.sources[I],L=M.sourceContentFor(k,!0),C[k]=L;return C}function w(P){var C=Object.keys(P.uriToSource),M,k,L;for(L=C.length;P.index<L;P.index++)if(M=C[P.index],k=P.uriToSource[M],k)P.sourcesContent[M]=k;else return O(M,P);return P.callback()}function O(P,C){var M;return d(P)?A(P,C,function(k){return C.index++,C.sourcesContent[P]=k,w(C)}):(M=S(P,C),C.index++,C.sourcesContent[P]=M,w(C))}function A(P,C,M){var k=E(P,!0,C.inline),L=!q(P);if(C.localOnly)return C.warnings.push('Cannot fetch remote resource from "'+P+'" as no callback given.'),M(null);if(L)return C.warnings.push('Cannot fetch "'+P+'" as no protocol given.'),M(null);if(!k)return C.warnings.push('Cannot fetch "'+P+'" as resource is not allowed.'),M(null);C.fetch(P,C.inlineRequest,C.inlineTimeout,function(I,B){I&&C.warnings.push('Missing original source at "'+P+'" - '+I),M(B)})}function S(P,C){var M=E(P,!1,C.inline),k=R.resolve(C.rebaseTo,P);if(!y.existsSync(k)||!y.statSync(k).isFile())return C.warnings.push('Ignoring local source map at "'+k+'" as resource is missing.'),null;if(!M)return C.warnings.push('Cannot fetch "'+k+'" as resource is not allowed.'),null;var L=y.readFileSync(k,"utf8");return L.charCodeAt(0)===65279&&(L=L.substring(1)),L}return loadOriginalSources_1=_,loadOriginalSources_1}var normalizePath_1,hasRequiredNormalizePath;function requireNormalizePath(){if(hasRequiredNormalizePath)return normalizePath_1;hasRequiredNormalizePath=1;var y="/",R=/\\/g;function E(q){return q.replace(R,y)}return normalizePath_1=E,normalizePath_1}var restoreImport_1,hasRequiredRestoreImport;function requireRestoreImport(){if(hasRequiredRestoreImport)return restoreImport_1;hasRequiredRestoreImport=1;function y(R,E){return("@import "+R+" "+E).trim()}return restoreImport_1=y,restoreImport_1}var rewriteUrl_1,hasRequiredRewriteUrl;function requireRewriteUrl(){if(hasRequiredRewriteUrl)return rewriteUrl_1;hasRequiredRewriteUrl=1;var y=requirePathBrowserify(),R=require$$2,E=requireIsDataUriResource(),q='"',d="'",_="url(",b=")",w=/^[^\w\d]*\/\//,O=/^["']/,A=/["']$/,S=/[()]/,P=/^url\(/i,C=/\)$/,M=/\s/,k=process.platform=="win32";function L($,G){return!G||I($)&&!z(G.toBase)||z($)||B($)||T($)||E($)?$:z(G.toBase)?R.resolve(G.toBase,$):G.absolute?U(V($,G)):U(N($,G))}function I($){return y.isAbsolute($)}function B($){return $[0]=="#"}function T($){return/^\w+:\w+/.test($)}function z($){return/^[^:]+?:\/\//.test($)||w.test($)}function V($,G){return y.resolve(y.join(G.fromBase||"",$)).replace(G.toBase,"")}function N($,G){return y.relative(G.toBase,y.join(G.fromBase||"",$))}function U($){return k?$.replace(/\\/g,"/"):$}function x($){return $.indexOf(d)>-1?q:$.indexOf(q)>-1||K($)||F($)?d:""}function K($){return M.test($)}function F($){return S.test($)}function D($,G,j){var W=$.replace(P,"").replace(C,"").trim(),H=W.replace(O,"").replace(A,"").trim(),Y=W[0]==d||W[0]==q?W[0]:x(H);return j?L(H,G):_+Y+L(H,G)+Y+b}return rewriteUrl_1=D,rewriteUrl_1}var isImport_1,hasRequiredIsImport;function requireIsImport(){if(hasRequiredIsImport)return isImport_1;hasRequiredIsImport=1;var y=/^@import/i;function R(E){return y.test(E)}return isImport_1=R,isImport_1}var rebase_1,hasRequiredRebase;function requireRebase(){if(hasRequiredRebase)return rebase_1;hasRequiredRebase=1;var y=requireExtractImportUrlAndMedia(),R=requireRestoreImport(),E=requireRewriteUrl(),q=requireToken(),d=requireIsImport(),_=/^\/\*# sourceMappingURL=(\S+) \*\/$/;function b(C,M,k,L){return M?w(C,k,L):O(C,k,L)}function w(C,M,k){var L,I,B;for(I=0,B=C.length;I<B;I++)switch(L=C[I],L[0]){case q.AT_RULE:A(L,M,k);break;case q.AT_RULE_BLOCK:P(L[2],M,k);break;case q.COMMENT:S(L,k);break;case q.NESTED_BLOCK:w(L[2],M,k);break;case q.RULE:P(L[2],M,k);break}return C}function O(C,M,k){var L,I,B;for(I=0,B=C.length;I<B;I++)switch(L=C[I],L[0]){case q.AT_RULE:A(L,M,k);break}return C}function A(C,M,k){if(d(C[1])){var L=y(C[1]),I=E(L[0],k),B=L[1];C[1]=R(I,B)}}function S(C,M){var k=_.exec(C[1]);k&&k[1].indexOf("data:")===-1&&(C[1]=C[1].replace(k[1],E(k[1],M,!0)))}function P(C,M,k){var L,I,B,T,z,V;for(B=0,T=C.length;B<T;B++)for(L=C[B],z=2,V=L.length;z<V;z++)I=L[z][1],M.isUrl(I)&&(L[z][1]=E(I,k))}return rebase_1=b,rebase_1}var tokenize_1,hasRequiredTokenize$1;function requireTokenize$1(){if(hasRequiredTokenize$1)return tokenize_1;hasRequiredTokenize$1=1;var y=requireMarker(),R=requireToken(),E=requireFormatPosition(),q={BLOCK:"block",COMMENT:"comment",DOUBLE_QUOTE:"double-quote",RULE:"rule",SINGLE_QUOTE:"single-quote"},d=["@charset","@import"],_=["@-moz-document","@document","@-moz-keyframes","@-ms-keyframes","@-o-keyframes","@-webkit-keyframes","@keyframes","@media","@supports","@container","@layer"],b=/\/\* clean-css ignore:end \*\/$/,w=/^\/\* clean-css ignore:start \*\//,O=["@bottom-center","@bottom-left","@bottom-left-corner","@bottom-right","@bottom-right-corner","@left-bottom","@left-middle","@left-top","@right-bottom","@right-middle","@right-top","@top-center","@top-left","@top-left-corner","@top-right","@top-right-corner"],A=["@footnote","@footnotes","@left","@page-float-bottom","@page-float-top","@right"],S=/^\[\s{0,31}\d+\s{0,31}\]$/,P=/([^}])\}*$/,C=/[\s(]/;function M(U,x){var K={level:q.BLOCK,position:{source:x.source||void 0,line:1,column:0,index:0}};return k(U,x,K,!1)}function k(U,x,K,F){for(var D=[],$=D,G,j,W=[],H,Y,te=[],J=K.level,ie=[],re=[],ee=[],Q=!0,X,Z,se=0,ne,ae,he,ve,ge,ce,be=!1,Re,we=!1,_e,qe,Se=!1,Ae,le=!1,me=!1,Ee=!1,fe=!1,de=!1,ue=K.position,pe;ue.index<U.length;ue.index++){var oe=U[ue.index];if(ne=J==q.SINGLE_QUOTE||J==q.DOUBLE_QUOTE,ae=oe==y.SPACE||oe==y.TAB,he=oe==y.NEW_LINE_NIX,ve=oe==y.NEW_LINE_NIX&&U[ue.index-1]==y.CARRIAGE_RETURN,ge=oe==y.CARRIAGE_RETURN&&U[ue.index+1]&&U[ue.index+1]!=y.NEW_LINE_NIX,ce=!we&&J!=q.COMMENT&&!ne&&oe==y.ASTERISK&&U[ue.index-1]==y.FORWARD_SLASH,_e=!be&&!ne&&oe==y.FORWARD_SLASH&&U[ue.index-1]==y.ASTERISK,Re=J==q.COMMENT&&_e,Ae=!ae&&!ge&&(oe>="A"&&oe<="Z"||oe>="a"&&oe<="z"||oe>="0"&&oe<="9"||oe=="-"),me=me||J!=q.COMMENT&&!fe&&le&&oe==="-"&&re.length===1,le=oe==="-",se=Math.max(se,0),Y=Q?[ue.line,ue.column,ue.source]:Y,qe)re.push(oe),Q=!1;else if(Ae)re.push(oe),Q=!1;else if((ae||he&&!ve)&&(ne||J==q.COMMENT))re.push(oe),Q=!1;else if(!((ae||he&&!ve)&&Q)){if(!Re&&J==q.COMMENT)re.push(oe),Q=!1;else if(!ce&&!Re&&Ee)re.push(oe),Q=!1;else if(ce&&me&&(J==q.BLOCK||J==q.RULE)&&re.length>1)re.push(oe),Q=!1,ie.push(J),J=q.COMMENT;else if(ce&&(J==q.BLOCK||J==q.RULE)&&re.length>1)te.push(Y),re.push(oe),ee.push(re.slice(0,-2)),Q=!1,re=re.slice(-2),Y=[ue.line,ue.column-1,ue.source],ie.push(J),J=q.COMMENT;else if(ce)ie.push(J),J=q.COMMENT,re.push(oe),Q=!1;else if(Re&&me)re.push(oe),J=ie.pop();else if(Re&&L(re))X=re.join("").trim()+oe,G=[R.COMMENT,X,[B(Y,X,x)]],$.push(G),Ee=!0,Y=te.pop()||null,re=ee.pop()||[],Q=re.length===0;else if(Re&&I(re))X=re.join("")+oe,pe=X.lastIndexOf(y.FORWARD_SLASH+y.ASTERISK),Z=X.substring(0,pe),G=[R.RAW,Z,[B(Y,Z,x)]],$.push(G),Z=X.substring(pe),Y=[ue.line,ue.column-Z.length+1,ue.source],G=[R.COMMENT,Z,[B(Y,Z,x)]],$.push(G),Ee=!1,J=ie.pop(),Y=te.pop()||null,re=ee.pop()||[],Q=re.length===0;else if(Re)X=re.join("").trim()+oe,G=[R.COMMENT,X,[B(Y,X,x)]],$.push(G),J=ie.pop(),Y=te.pop()||null,re=ee.pop()||[],Q=re.length===0;else if(_e&&U[ue.index+1]!=y.ASTERISK)x.warnings.push("Unexpected '*/' at "+E([ue.line,ue.column,ue.source])+"."),re=[],Q=!0;else if(oe==y.SINGLE_QUOTE&&!ne)ie.push(J),J=q.SINGLE_QUOTE,re.push(oe),Q=!1;else if(oe==y.SINGLE_QUOTE&&J==q.SINGLE_QUOTE)J=ie.pop(),re.push(oe),Q=!1;else if(oe==y.DOUBLE_QUOTE&&!ne)ie.push(J),J=q.DOUBLE_QUOTE,re.push(oe),Q=!1;else if(oe==y.DOUBLE_QUOTE&&J==q.DOUBLE_QUOTE)J=ie.pop(),re.push(oe),Q=!1;else if(oe!=y.CLOSE_ROUND_BRACKET&&oe!=y.OPEN_ROUND_BRACKET&&J!=q.COMMENT&&!ne&&se>0)re.push(oe),Q=!1;else if(oe==y.OPEN_ROUND_BRACKET&&!ne&&J!=q.COMMENT&&!fe)re.push(oe),Q=!1,se++;else if(oe==y.CLOSE_ROUND_BRACKET&&!ne&&J!=q.COMMENT&&!fe)re.push(oe),Q=!1,se--;else if(oe==y.SEMICOLON&&J==q.BLOCK&&re[0]==y.AT)X=re.join("").trim(),D.push([R.AT_RULE,X,[B(Y,X,x)]]),re=[],Q=!0;else if(oe==y.COMMA&&J==q.BLOCK&&j)X=re.join("").trim(),j[1].push([z(j[0]),X,[B(Y,X,x,j[1].length)]]),re=[],Q=!0;else if(oe==y.COMMA&&J==q.BLOCK&&T(re)==R.AT_RULE)re.push(oe),Q=!1;else if(oe==y.COMMA&&J==q.BLOCK)j=[T(re),[],[]],X=re.join("").trim(),j[1].push([z(j[0]),X,[B(Y,X,x,0)]]),re=[],Q=!0;else if(oe==y.OPEN_CURLY_BRACKET&&J==q.BLOCK&&j&&j[0]==R.NESTED_BLOCK)X=re.join("").trim(),j[1].push([R.NESTED_BLOCK_SCOPE,X,[B(Y,X,x)]]),D.push(j),ie.push(J),ue.column++,ue.index++,re=[],Q=!0,j[2]=k(U,x,K,!0),j=null;else if(oe==y.OPEN_CURLY_BRACKET&&J==q.BLOCK&&T(re)==R.NESTED_BLOCK)X=re.join("").trim(),j=j||[R.NESTED_BLOCK,[],[]],j[1].push([R.NESTED_BLOCK_SCOPE,X,[B(Y,X,x)]]),D.push(j),ie.push(J),ue.column++,ue.index++,re=[],Q=!0,me=!1,j[2]=k(U,x,K,!0),j=null;else if(oe==y.OPEN_CURLY_BRACKET&&J==q.BLOCK)X=re.join("").trim(),j=j||[T(re),[],[]],j[1].push([z(j[0]),X,[B(Y,X,x,j[1].length)]]),$=j[2],D.push(j),ie.push(J),J=q.RULE,re=[],Q=!0;else if(oe==y.OPEN_CURLY_BRACKET&&J==q.RULE&&fe)W.push(j),j=[R.PROPERTY_BLOCK,[]],H.push(j),$=j[1],ie.push(J),J=q.RULE,fe=!1;else if(oe==y.OPEN_CURLY_BRACKET&&J==q.RULE&&V(re))X=re.join("").trim(),W.push(j),j=[R.AT_RULE_BLOCK,[],[]],j[1].push([R.AT_RULE_BLOCK_SCOPE,X,[B(Y,X,x)]]),$.push(j),$=j[2],ie.push(J),J=q.RULE,re=[],Q=!0;else if(oe==y.COLON&&J==q.RULE&&!fe)X=re.join("").trim(),H=[R.PROPERTY,[R.PROPERTY_NAME,X,[B(Y,X,x)]]],$.push(H),fe=!0,re=[],Q=!0;else if(oe==y.SEMICOLON&&J==q.RULE&&H&&W.length>0&&!Q&&re[0]==y.AT)X=re.join("").trim(),j[1].push([R.AT_RULE,X,[B(Y,X,x)]]),re=[],Q=!0;else if(oe==y.SEMICOLON&&J==q.RULE&&H&&!Q)X=re.join("").trim(),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),H=null,fe=!1,re=[],Q=!0,me=!1;else if(oe==y.SEMICOLON&&J==q.RULE&&H&&Q&&me&&!H[2])H.push([R.PROPERTY_VALUE," ",[B(Y," ",x)]]),me=!1,H=null,fe=!1;else if(oe==y.SEMICOLON&&J==q.RULE&&H&&Q)H=null,fe=!1;else if(oe==y.SEMICOLON&&J==q.RULE&&!Q&&re[0]==y.AT)X=re.join(""),$.push([R.AT_RULE,X,[B(Y,X,x)]]),fe=!1,re=[],Q=!0;else if(oe==y.SEMICOLON&&J==q.RULE&&de)de=!1,re=[],Q=!0;else if(!(oe==y.SEMICOLON&&J==q.RULE&&Q))if(oe==y.CLOSE_CURLY_BRACKET&&J==q.RULE&&H&&fe&&!Q&&W.length>0)X=re.join(""),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),H=null,j=W.pop(),$=j[2],J=ie.pop(),fe=!1,re=[],Q=!0;else if(oe==y.CLOSE_CURLY_BRACKET&&J==q.RULE&&H&&!Q&&re[0]==y.AT&&W.length>0)X=re.join(""),j[1].push([R.AT_RULE,X,[B(Y,X,x)]]),H=null,j=W.pop(),$=j[2],J=ie.pop(),fe=!1,re=[],Q=!0;else if(oe==y.CLOSE_CURLY_BRACKET&&J==q.RULE&&H&&W.length>0)H=null,j=W.pop(),$=j[2],J=ie.pop(),fe=!1;else if(oe==y.CLOSE_CURLY_BRACKET&&J==q.RULE&&H&&!Q)X=re.join(""),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),H=null,j=W.pop(),$=D,J=ie.pop(),fe=!1,re=[],Q=!0;else if(oe==y.CLOSE_CURLY_BRACKET&&J==q.RULE&&!Q&&re[0]==y.AT)H=null,j=null,X=re.join("").trim(),$.push([R.AT_RULE,X,[B(Y,X,x)]]),$=D,J=ie.pop(),fe=!1,re=[],Q=!0;else if(oe==y.CLOSE_CURLY_BRACKET&&J==q.RULE&&ie[ie.length-1]==q.RULE)H=null,j=W.pop(),$=j[2],J=ie.pop(),fe=!1,de=!0,re=[],Q=!0;else if(oe==y.CLOSE_CURLY_BRACKET&&J==q.RULE&&me&&H&&!H[2])H.push([R.PROPERTY_VALUE," ",[B(Y," ",x)]]),me=!1,H=null,j=null,$=D,J=ie.pop(),fe=!1,me=!1;else if(oe==y.CLOSE_CURLY_BRACKET&&J==q.RULE)H=null,j=null,$=D,J=ie.pop(),fe=!1,me=!1;else if(oe==y.CLOSE_CURLY_BRACKET&&J==q.BLOCK&&!F&&ue.index<=U.length-1)x.warnings.push("Unexpected '}' at "+E([ue.line,ue.column,ue.source])+"."),re.push(oe),Q=!1;else{if(oe==y.CLOSE_CURLY_BRACKET&&J==q.BLOCK)break;oe==y.OPEN_ROUND_BRACKET&&J==q.RULE&&fe?(re.push(oe),Q=!1,se++):oe==y.CLOSE_ROUND_BRACKET&&J==q.RULE&&fe&&se==1?(re.push(oe),Q=!1,X=re.join("").trim(),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),se--,re=[],Q=!0,me=!1):oe==y.CLOSE_ROUND_BRACKET&&J==q.RULE&&fe?(re.push(oe),Q=!1,me=!1,se--):oe==y.FORWARD_SLASH&&U[ue.index+1]!=y.ASTERISK&&J==q.RULE&&fe&&!Q?(X=re.join("").trim(),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),H.push([R.PROPERTY_VALUE,oe,[[ue.line,ue.column,ue.source]]]),re=[],Q=!0):oe==y.FORWARD_SLASH&&U[ue.index+1]!=y.ASTERISK&&J==q.RULE&&fe?(H.push([R.PROPERTY_VALUE,oe,[[ue.line,ue.column,ue.source]]]),re=[],Q=!0):oe==y.COMMA&&J==q.RULE&&fe&&!Q?(X=re.join("").trim(),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),H.push([R.PROPERTY_VALUE,oe,[[ue.line,ue.column,ue.source]]]),re=[],Q=!0):oe==y.COMMA&&J==q.RULE&&fe?(H.push([R.PROPERTY_VALUE,oe,[[ue.line,ue.column,ue.source]]]),re=[],Q=!0):oe==y.CLOSE_SQUARE_BRACKET&&H&&H.length>1&&!Q&&N(re)?(re.push(oe),X=re.join("").trim(),H[H.length-1][1]+=X,re=[],Q=!0):(ae||he&&!ve)&&J==q.RULE&&fe&&H&&!Q?(X=re.join("").trim(),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),re=[],Q=!0):ve&&J==q.RULE&&fe&&H&&re.length>1?(X=re.join("").trim(),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),re=[],Q=!0):ve&&J==q.RULE&&fe?(re=[],Q=!0):ve&&re.length==1?(re.pop(),Q=re.length===0):(!Q||!ae&&!he&&!ve&&!ge)&&(re.push(oe),Q=!1)}}Se=qe,qe=!Se&&oe==y.BACK_SLASH,be=ce,we=Re,ue.line=ve||he||ge?ue.line+1:ue.line,ue.column=ve||he||ge?0:ue.column+1}return fe&&x.warnings.push("Missing '}' at "+E([ue.line,ue.column,ue.source])+"."),fe&&re.length>0&&(X=re.join("").trimRight().replace(P,"$1").trimRight(),H.push([R.PROPERTY_VALUE,X,[B(Y,X,x)]]),re=[]),re.length>0&&x.warnings.push("Invalid character(s) '"+re.join("")+"' at "+E(Y)+". Ignoring."),D}function L(U){return w.test(U.join("")+y.FORWARD_SLASH)}function I(U){return b.test(U.join("")+y.FORWARD_SLASH)}function B(U,x,K,F){var D=U[2];return K.inputSourceMapTracker.isTracking(D)?K.inputSourceMapTracker.originalPositionFor(U,x.length,F):U}function T(U){var x=U[0]==y.AT||U[0]==y.UNDERSCORE,K=U.join("").split(C)[0];return x&&_.indexOf(K)>-1?R.NESTED_BLOCK:x&&d.indexOf(K)>-1?R.AT_RULE:x?R.AT_RULE_BLOCK:R.RULE}function z(U){if(U==R.RULE)return R.RULE_SCOPE;if(U==R.NESTED_BLOCK)return R.NESTED_BLOCK_SCOPE;if(U==R.AT_RULE_BLOCK)return R.AT_RULE_BLOCK_SCOPE}function V(U){var x=U.join("").trim();return O.indexOf(x)>-1||A.indexOf(x)>-1}function N(U){return S.test(U.join("")+y.CLOSE_SQUARE_BRACKET)}return tokenize_1=M,tokenize_1}var readSources_1,hasRequiredReadSources;function requireReadSources(){if(hasRequiredReadSources)return readSources_1;hasRequiredReadSources=1;var y=requireNoop(),R=requirePathBrowserify(),E=requireApplySourceMaps(),q=requireExtractImportUrlAndMedia(),d=requireIsAllowedResource(),_=requireLoadOriginalSources(),b=requireNormalizePath(),w=requireRebase(),O=requireRebaseLocalMap(),A=requireRebaseRemoteMap(),S=requireRestoreImport(),P=requireTokenize$1(),C=requireToken(),M=requireMarker(),k=requireHasProtocol(),L=requireIsImport(),I=requireIsRemoteResource(),B="uri:unknown",T="file://";function z(ee,Q,X){return V(ee,Q,function(Z){return E(Z,Q,function(){return _(Q,function(){return X(Z)})})})}function V(ee,Q,X){if(typeof ee=="string")return N(ee,Q,X);if(Buffer.isBuffer(ee))return N(ee.toString(),Q,X);if(Array.isArray(ee))return U(ee,Q,X);if(typeof ee=="object")return x(ee,Q,X)}function N(ee,Q,X){return Q.source=void 0,Q.sourcesContent[void 0]=ee,Q.stats.originalSize+=ee.length,j(ee,Q,{inline:Q.options.inline},X)}function U(ee,Q,X){var Z=ee.reduce(function(se,ne){return typeof ne=="string"?K(ne,se):F(ne,Q,se)},[]);return j(Z.join(""),Q,{inline:["all"]},X)}function x(ee,Q,X){var Z=F(ee,Q,[]);return j(Z.join(""),Q,{inline:["all"]},X)}function K(ee,Q){return Q.push(G(D(ee))),Q}function F(ee,Q,X){var Z,se,ne;for(Z in ee)ne=ee[Z],se=D(Z),X.push(G(se)),Q.sourcesContent[se]=ne.styles,ne.sourceMap&&$(ne.sourceMap,se,Q);return X}function D(ee){var Q=R.resolve(""),X,Z,se;return I(ee)?ee:(X=R.isAbsolute(ee)?ee:R.resolve(ee),Z=R.relative(Q,X),se=b(Z),se)}function $(ee,Q,X){var Z=typeof ee=="string"?JSON.parse(ee):ee,se=I(Q)?A(Z,Q):O(Z,Q||B,X.options.rebaseTo);X.inputSourceMapTracker.track(Q,se)}function G(ee){return S("url("+ee+")","")+M.SEMICOLON}function j(ee,Q,X,Z){var se,ne={};return Q.source?I(Q.source)?(ne.fromBase=Q.source,ne.toBase=Q.source):R.isAbsolute(Q.source)?(ne.fromBase=R.dirname(Q.source),ne.toBase=Q.options.rebaseTo):(ne.fromBase=R.dirname(R.resolve(Q.source)),ne.toBase=Q.options.rebaseTo):(ne.fromBase=R.resolve(""),ne.toBase=Q.options.rebaseTo),se=P(ee,Q),se=w(se,Q.options.rebase,Q.validator,ne),W(X.inline)?H(se,Q,X,Z):Z(se)}function W(ee){return!(ee.length==1&&ee[0]=="none")}function H(ee,Q,X,Z){var se={afterContent:!1,callback:Z,errors:Q.errors,externalContext:Q,fetch:Q.options.fetch,inlinedStylesheets:X.inlinedStylesheets||Q.inlinedStylesheets,inline:X.inline,inlineRequest:Q.options.inlineRequest,inlineTimeout:Q.options.inlineTimeout,isRemote:X.isRemote||!1,localOnly:Q.localOnly,outputTokens:[],rebaseTo:Q.options.rebaseTo,sourceTokens:ee,warnings:Q.warnings};return Y(se)}function Y(ee){var Q,X,Z;for(X=0,Z=ee.sourceTokens.length;X<Z;X++){if(Q=ee.sourceTokens[X],Q[0]==C.AT_RULE&&L(Q[1]))return ee.sourceTokens.splice(0,X),te(Q,ee);Q[0]==C.AT_RULE||Q[0]==C.COMMENT?ee.outputTokens.push(Q):(ee.outputTokens.push(Q),ee.afterContent=!0)}return ee.sourceTokens=[],ee.callback(ee.outputTokens)}function te(ee,Q){var X=q(ee[1]),Z=X[0],se=X[1],ne=ee[2];return I(Z)?J(Z,se,ne,Q):ie(Z,se,ne,Q)}function J(ee,Q,X,Z){var se=d(ee,!0,Z.inline),ne=ee,ae=ee in Z.externalContext.sourcesContent,he=!k(ee);if(Z.inlinedStylesheets.indexOf(ee)>-1)return Z.warnings.push('Ignoring remote @import of "'+ee+'" as it has already been imported.'),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z);if(Z.localOnly&&Z.afterContent)return Z.warnings.push('Ignoring remote @import of "'+ee+'" as no callback given and after other content.'),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z);if(he)return Z.warnings.push('Skipping remote @import of "'+ee+'" as no protocol given.'),Z.outputTokens=Z.outputTokens.concat(Z.sourceTokens.slice(0,1)),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z);if(Z.localOnly&&!ae)return Z.warnings.push('Skipping remote @import of "'+ee+'" as no callback given.'),Z.outputTokens=Z.outputTokens.concat(Z.sourceTokens.slice(0,1)),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z);if(!se&&Z.afterContent)return Z.warnings.push('Ignoring remote @import of "'+ee+'" as resource is not allowed and after other content.'),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z);if(!se)return Z.warnings.push('Skipping remote @import of "'+ee+'" as resource is not allowed.'),Z.outputTokens=Z.outputTokens.concat(Z.sourceTokens.slice(0,1)),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z);Z.inlinedStylesheets.push(ee);function ve(ge,ce){return ge?(Z.errors.push('Broken @import declaration of "'+ee+'" - '+ge),process.nextTick(function(){Z.outputTokens=Z.outputTokens.concat(Z.sourceTokens.slice(0,1)),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z)})):(Z.inline=Z.externalContext.options.inline,Z.isRemote=!0,Z.externalContext.source=ne,Z.externalContext.sourcesContent[ee]=ce,Z.externalContext.stats.originalSize+=ce.length,j(ce,Z.externalContext,Z,function(be){return be=re(be,Q,X),Z.outputTokens=Z.outputTokens.concat(be),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z)}))}return ae?ve(null,Z.externalContext.sourcesContent[ee]):Z.fetch(ee,Z.inlineRequest,Z.inlineTimeout,ve)}function ie(ee,Q,X,Z){var se=ee.replace(T,""),ne=R.resolve(""),ae=R.isAbsolute(se)?R.resolve(ne,se[0]=="/"?se.substring(1):se):R.resolve(Z.rebaseTo,se),he=R.relative(ne,ae),ve,ge=d(se,!1,Z.inline),ce=b(he),be=ce in Z.externalContext.sourcesContent;if(Z.inlinedStylesheets.indexOf(ae)>-1)Z.warnings.push('Ignoring local @import of "'+se+'" as it has already been imported.');else if(ge&&!be&&(!y.existsSync(ae)||!y.statSync(ae).isFile()))Z.errors.push('Ignoring local @import of "'+se+'" as resource is missing.');else if(!ge&&Z.afterContent)Z.warnings.push('Ignoring local @import of "'+se+'" as resource is not allowed and after other content.');else if(Z.afterContent)Z.warnings.push('Ignoring local @import of "'+se+'" as after other content.');else if(!ge)Z.warnings.push('Skipping local @import of "'+se+'" as resource is not allowed.'),Z.outputTokens=Z.outputTokens.concat(Z.sourceTokens.slice(0,1));else return ve=be?Z.externalContext.sourcesContent[ce]:y.readFileSync(ae,"utf-8"),ve.charCodeAt(0)===65279&&(ve=ve.substring(1)),Z.inlinedStylesheets.push(ae),Z.inline=Z.externalContext.options.inline,Z.externalContext.source=ce,Z.externalContext.sourcesContent[ce]=ve,Z.externalContext.stats.originalSize+=ve.length,j(ve,Z.externalContext,Z,function(Re){return Re=re(Re,Q,X),Z.outputTokens=Z.outputTokens.concat(Re),Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z)});return Z.sourceTokens=Z.sourceTokens.slice(1),Y(Z)}function re(ee,Q,X){return Q?[[C.NESTED_BLOCK,[[C.NESTED_BLOCK_SCOPE,"@media "+Q,X]],ee]]:ee}return readSources_1=z,readSources_1}var simple,hasRequiredSimple;function requireSimple(){if(hasRequiredSimple)return simple;hasRequiredSimple=1;var y=requireHelpers().all;function R(_,b){var w=typeof b=="string"?b:b[1],O=_.wrap;O(_,w),q(_,w),_.output.push(w)}function E(_,b){_.column+b.length>_.format.wrapAt&&(q(_,_.format.breakWith),_.output.push(_.format.breakWith))}function q(_,b){var w=b.split(` `);_.line+=w.length-1,_.column=w.length>1?0:_.column+w.pop().length}function d(_,b){var w={column:0,format:b.options.format,indentBy:0,indentWith:"",line:1,output:[],spaceAfterClosingBrace:b.options.compatibility.properties.spaceAfterClosingBrace,store:R,wrap:b.options.format.wrapAt?E:function(){}};return y(w,_),{styles:w.output.join("")}}return simple=d,simple}var sourceMaps,hasRequiredSourceMaps;function requireSourceMaps(){if(hasRequiredSourceMaps)return sourceMaps;hasRequiredSourceMaps=1;var y=requireSourceMap().SourceMapGenerator,R=requireHelpers().all,E=requireIsRemoteResource(),q=process.platform=="win32",d=/\//g,_="$stdin",b="\\";function w(M,k){var L=typeof k=="string",I=L?k:k[1],B=L?null:k[2],T=M.wrap;T(M,I),A(M,I,B),M.output.push(I)}function O(M,k){M.column+k.length>M.format.wrapAt&&(A(M,M.format.breakWith,!1),M.output.push(M.format.breakWith))}function A(M,k,L){var I=k.split(` `);L&&S(M,L),M.line+=I.length-1,M.column=I.length>1?0:M.column+I.pop().length}function S(M,k){for(var L=0,I=k.length;L<I;L++)P(M,k[L])}function P(M,k){var L=k[0],I=k[1],B=k[2],T=B,z=T||_;q&&T&&!E(T)&&(z=T.replace(d,b)),M.outputMap.addMapping({generated:{line:M.line,column:M.column},source:z,original:{line:L,column:I}}),M.inlineSources&&B in M.sourcesContent&&M.outputMap.setSourceContent(z,M.sourcesContent[B])}function C(M,k){var L={column:0,format:k.options.format,indentBy:0,indentWith:"",inlineSources:k.options.sourceMapInlineSources,line:1,output:[],outputMap:new y,sourcesContent:k.sourcesContent,spaceAfterClosingBrace:k.options.compatibility.properties.spaceAfterClosingBrace,store:w,wrap:k.options.format.wrapAt?O:function(){}};return R(L,M),{sourceMap:L.outputMap,styles:L.output.join("")}}return sourceMaps=C,sourceMaps}var hasRequiredClean;function requireClean(){if(hasRequiredClean)return clean.exports;hasRequiredClean=1;var y=requireOptimize$3(),R=requireOptimize$2(),E=requireOptimize(),q=requireValidator(),d=requireCompatibility(),_=requireFetch(),b=requireFormat().formatFrom,w=requireInline(),O=requireInlineRequest(),A=requireInlineTimeout(),S=requireOptimizationLevel().OptimizationLevel,P=requireOptimizationLevel().optimizationLevelFrom,C=requirePlugins(),M=requireRebase$1(),k=requireRebaseTo(),L=requireInputSourceMapTracker(),I=requireReadSources(),B=requireSimple(),T=requireSourceMaps(),z=clean.exports=function(j){j=j||{},this.options={batch:!!j.batch,compatibility:d(j.compatibility),explicitRebaseTo:"rebaseTo"in j,fetch:_(j.fetch),format:b(j.format),inline:w(j.inline),inlineRequest:O(j.inlineRequest),inlineTimeout:A(j.inlineTimeout),level:P(j.level),plugins:C(j.plugins),rebase:M(j.rebase,j.rebaseTo),rebaseTo:k(j.rebaseTo),returnPromise:!!j.returnPromise,sourceMap:!!j.sourceMap,sourceMapInlineSources:!!j.sourceMapInlineSources}};z.process=function(G,j){var W,H=j.to;return delete j.to,W=new z(Object.assign({returnPromise:!0,rebaseTo:H},j)),W.minify(G).then(function(Y){return{css:Y.styles}})},z.prototype.minify=function(G,j,W){var H=this.options;return H.returnPromise?new Promise(function(Y,te){V(G,H,j,function(J,ie){return J?te(J):Y(ie)})}):V(G,H,j,W)};function V(G,j,W,H){return j.batch&&Array.isArray(G)?N(G,j,W,H):j.batch&&typeof G=="object"?U(G,j,W,H):x(G,j,W,H)}function N(G,j,W,H){var Y=typeof H=="function"?H:typeof W=="function"?W:null,te=[],J={},ie,re,ee;function Q(X,Z){J=Object.assign(J,Z),X!==null&&(te=te.concat(X))}for(re=0,ee=G.length;re<ee;re++)typeof G[re]=="object"?U(G[re],j,Q):(ie=G[re],J[ie]=x([ie],j),te=te.concat(J[ie].errors));return Y?Y(te.length>0?te:null,J):J}function U(G,j,W,H){var Y=typeof H=="function"?H:typeof W=="function"?W:null,te=[],J={},ie,re;for(ie in G)re=G[ie],J[ie]=x(re.styles,j,re.sourceMap),te=te.concat(J[ie].errors);return Y?Y(te.length>0?te:null,J):J}function x(G,j,W,H){var Y=typeof W!="function"?W:null,te=typeof H=="function"?H:typeof W=="function"?W:null,J={stats:{efficiency:0,minifiedSize:0,originalSize:0,startedAt:Date.now(),timeSpent:0},cache:{specificity:{}},errors:[],inlinedStylesheets:[],inputSourceMapTracker:L(),localOnly:!te,options:j,source:null,sourcesContent:{},validator:q(j.compatibility),warnings:[]},ie;return Y&&J.inputSourceMapTracker.track(void 0,Y),j.rebase&&!j.explicitRebaseTo&&(ie="You have set `rebase: true` without giving `rebaseTo` option, which, in this case, defaults to the current working directory. You are then warned this can lead to unexpected URL rebasing (aka here be dragons)! If you are OK with the clean-css output, then you can get rid of this warning by giving clean-css a `rebaseTo: process.cwd()` option.",J.warnings.push(ie)),K(J.localOnly)(function(){return I(G,J,function(re){var ee=J.options.sourceMap?T:B,Q=F(re,J),X=ee(Q,J),Z=D(X,J);return te?te(J.errors.length>0?J.errors:null,Z):Z})})}function K(G){return G?function(j){return j()}:process.nextTick}function F(G,j){var W=y(G,j);return W=S.One in j.options.level?R(G,j):G,W=S.Two in j.options.level?E(G,j,!0):W,W}function D(G,j){return G.stats=$(G.styles,j),G.errors=j.errors,G.inlinedStylesheets=j.inlinedStylesheets,G.warnings=j.warnings,G}function $(G,j){var W=Date.now(),H=W-j.stats.startedAt;return delete j.stats.startedAt,j.stats.timeSpent=H,j.stats.efficiency=1-G.length/j.stats.originalSize,j.stats.minifiedSize=G.length,j.stats}return clean.exports}var cleanCss,hasRequiredCleanCss;function requireCleanCss(){return hasRequiredCleanCss||(hasRequiredCleanCss=1,cleanCss=requireClean()),cleanCss}var cleanCssExports=requireCleanCss(),CleanCSS=getDefaultExportFromCjs(cleanCssExports),rtlcss$1={exports:{}},picocolors_browser={exports:{}},hasRequiredPicocolors_browser;function requirePicocolors_browser(){if(hasRequiredPicocolors_browser)return picocolors_browser.exports;hasRequiredPicocolors_browser=1;var y=String,R=function(){return{isColorSupported:!1,reset:y,bold:y,dim:y,italic:y,underline:y,inverse:y,hidden:y,strikethrough:y,black:y,red:y,green:y,yellow:y,blue:y,magenta:y,cyan:y,white:y,gray:y,bgBlack:y,bgRed:y,bgGreen:y,bgYellow:y,bgBlue:y,bgMagenta:y,bgCyan:y,bgWhite:y,blackBright:y,redBright:y,greenBright:y,yellowBright:y,blueBright:y,magentaBright:y,cyanBright:y,whiteBright:y,bgBlackBright:y,bgRedBright:y,bgGreenBright:y,bgYellowBright:y,bgBlueBright:y,bgMagentaBright:y,bgCyanBright:y,bgWhiteBright:y}};return picocolors_browser.exports=R(),picocolors_browser.exports.createColors=R,picocolors_browser.exports}var _nodeResolve_empty={},_nodeResolve_empty$1=Object.freeze({__proto__:null,default:_nodeResolve_empty}),require$$1=getAugmentedNamespace(_nodeResolve_empty$1),cssSyntaxError,hasRequiredCssSyntaxError;function requireCssSyntaxError(){if(hasRequiredCssSyntaxError)return cssSyntaxError;hasRequiredCssSyntaxError=1;let y=requirePicocolors_browser(),R=require$$1;class E extends Error{constructor(d,_,b,w,O,A){super(d),this.name="CssSyntaxError",this.reason=d,O&&(this.file=O),w&&(this.source=w),A&&(this.plugin=A),typeof _<"u"&&typeof b<"u"&&(typeof _=="number"?(this.line=_,this.column=b):(this.line=_.line,this.column=_.column,this.endLine=b.line,this.endColumn=b.column)),this.setMessage(),Error.captureStackTrace&&Error.captureStackTrace(this,E)}setMessage(){this.message=this.plugin?this.plugin+": ":"",this.message+=this.file?this.file:"<css input>",typeof this.line<"u"&&(this.message+=":"+this.line+":"+this.column),this.message+=": "+this.reason}showSourceCode(d){if(!this.source)return"";let _=this.source;d==null&&(d=y.isColorSupported);let b=M=>M,w=M=>M,O=M=>M;if(d){let{bold:M,gray:k,red:L}=y.createColors(!0);w=I=>M(L(I)),b=I=>k(I),R&&(O=I=>R(I))}let A=_.split(/\r?\n/),S=Math.max(this.line-3,0),P=Math.min(this.line+2,A.length),C=String(P).length;return A.slice(S,P).map((M,k)=>{let L=S+1+k,I=" "+(" "+L).slice(-C)+" | ";if(L===this.line){if(M.length>160){let T=20,z=Math.max(0,this.column-T),V=Math.max(this.column+T,this.endColumn+T),N=M.slice(z,V),U=b(I.replace(/\d/g," "))+M.slice(0,Math.min(this.column-1,T-1)).replace(/[^\t]/g," ");return w(">")+b(I)+O(N)+` `+U+w("^")}let B=b(I.replace(/\d/g," "))+M.slice(0,this.column-1).replace(/[^\t]/g," ");return w(">")+b(I)+O(M)+` `+B+w("^")}return" "+b(I)+O(M)}).join(` `)}toString(){let d=this.showSourceCode();return d&&(d=` `+d+` `),this.name+": "+this.message+d}}return cssSyntaxError=E,E.default=E,cssSyntaxError}var stringifier,hasRequiredStringifier;function requireStringifier(){if(hasRequiredStringifier)return stringifier;hasRequiredStringifier=1;const y={after:` `,beforeClose:` `,beforeComment:` `,beforeDecl:` `,beforeOpen:" ",beforeRule:` `,colon:": ",commentLeft:" ",commentRight:" ",emptyBody:"",indent:" ",semicolon:!1};function R(q){return q[0].toUpperCase()+q.slice(1)}class E{constructor(d){this.builder=d}atrule(d,_){let b="@"+d.name,w=d.params?this.rawValue(d,"params"):"";if(typeof d.raws.afterName<"u"?b+=d.raws.afterName:w&&(b+=" "),d.nodes)this.block(d,b+w);else{let O=(d.raws.between||"")+(_?";":"");this.builder(b+w+O,d)}}beforeAfter(d,_){let b;d.type==="decl"?b=this.raw(d,null,"beforeDecl"):d.type==="comment"?b=this.raw(d,null,"beforeComment"):_==="before"?b=this.raw(d,null,"beforeRule"):b=this.raw(d,null,"beforeClose");let w=d.parent,O=0;for(;w&&w.type!=="root";)O+=1,w=w.parent;if(b.includes(` `)){let A=this.raw(d,null,"indent");if(A.length)for(let S=0;S<O;S++)b+=A}return b}block(d,_){let b=this.raw(d,"between","beforeOpen");this.builder(_+b+"{",d,"start");let w;d.nodes&&d.nodes.length?(this.body(d),w=this.raw(d,"after")):w=this.raw(d,"after","emptyBody"),w&&this.builder(w),this.builder("}",d,"end")}body(d){let _=d.nodes.length-1;for(;_>0&&d.nodes[_].type==="comment";)_-=1;let b=this.raw(d,"semicolon");for(let w=0;w<d.nodes.length;w++){let O=d.nodes[w],A=this.raw(O,"before");A&&this.builder(A),this.stringify(O,_!==w||b)}}comment(d){let _=this.raw(d,"left","commentLeft"),b=this.raw(d,"right","commentRight");this.builder("/*"+_+d.text+b+"*/",d)}decl(d,_){let b=this.raw(d,"between","colon"),w=d.prop+b+this.rawValue(d,"value");d.important&&(w+=d.raws.important||" !important"),_&&(w+=";"),this.builder(w,d)}document(d){this.body(d)}raw(d,_,b){let w;if(b||(b=_),_&&(w=d.raws[_],typeof w<"u"))return w;let O=d.parent;if(b==="before"&&(!O||O.type==="root"&&O.first===d||O&&O.type==="document"))return"";if(!O)return y[b];let A=d.root();if(A.rawCache||(A.rawCache={}),typeof A.rawCache[b]<"u")return A.rawCache[b];if(b==="before"||b==="after")return this.beforeAfter(d,b);{let S="raw"+R(b);this[S]?w=this[S](A,d):A.walk(P=>{if(w=P.raws[_],typeof w<"u")return!1})}return typeof w>"u"&&(w=y[b]),A.rawCache[b]=w,w}rawBeforeClose(d){let _;return d.walk(b=>{if(b.nodes&&b.nodes.length>0&&typeof b.raws.after<"u")return _=b.raws.after,_.includes(` `)&&(_=_.replace(/[^\n]+$/,"")),!1}),_&&(_=_.replace(/\S/g,"")),_}rawBeforeComment(d,_){let b;return d.walkComments(w=>{if(typeof w.raws.before<"u")return b=w.raws.before,b.includes(` `)&&(b=b.replace(/[^\n]+$/,"")),!1}),typeof b>"u"?b=this.raw(_,null,"beforeDecl"):b&&(b=b.replace(/\S/g,"")),b}rawBeforeDecl(d,_){let b;return d.walkDecls(w=>{if(typeof w.raws.before<"u")return b=w.raws.before,b.includes(` `)&&(b=b.replace(/[^\n]+$/,"")),!1}),typeof b>"u"?b=this.raw(_,null,"beforeRule"):b&&(b=b.replace(/\S/g,"")),b}rawBeforeOpen(d){let _;return d.walk(b=>{if(b.type!=="decl"&&(_=b.raws.between,typeof _<"u"))return!1}),_}rawBeforeRule(d){let _;return d.walk(b=>{if(b.nodes&&(b.parent!==d||d.first!==b)&&typeof b.raws.before<"u")return _=b.raws.before,_.includes(` `)&&(_=_.replace(/[^\n]+$/,"")),!1}),_&&(_=_.replace(/\S/g,"")),_}rawColon(d){let _;return d.walkDecls(b=>{if(typeof b.raws.between<"u")return _=b.raws.between.replace(/[^\s:]/g,""),!1}),_}rawEmptyBody(d){let _;return d.walk(b=>{if(b.nodes&&b.nodes.length===0&&(_=b.raws.after,typeof _<"u"))return!1}),_}rawIndent(d){if(d.raws.indent)return d.raws.indent;let _;return d.walk(b=>{let w=b.parent;if(w&&w!==d&&w.parent&&w.parent===d&&typeof b.raws.before<"u"){let O=b.raws.before.split(` `);return _=O[O.length-1],_=_.replace(/\S/g,""),!1}}),_}rawSemicolon(d){let _;return d.walk(b=>{if(b.nodes&&b.nodes.length&&b.last.type==="decl"&&(_=b.raws.semicolon,typeof _<"u"))return!1}),_}rawValue(d,_){let b=d[_],w=d.raws[_];return w&&w.value===b?w.raw:b}root(d){this.body(d),d.raws.after&&this.builder(d.raws.after)}rule(d){this.block(d,this.rawValue(d,"selector")),d.raws.ownSemicolon&&this.builder(d.raws.ownSemicolon,d,"end")}stringify(d,_){if(!this[d.type])throw new Error("Unknown AST node type "+d.type+". Maybe you need to change PostCSS stringifier.");this[d.type](d,_)}}return stringifier=E,E.default=E,stringifier}var stringify_1,hasRequiredStringify;function requireStringify(){if(hasRequiredStringify)return stringify_1;hasRequiredStringify=1;let y=requireStringifier();function R(E,q){new y(q).stringify(E)}return stringify_1=R,R.default=R,stringify_1}var symbols={},hasRequiredSymbols;function requireSymbols(){return hasRequiredSymbols||(hasRequiredSymbols=1,symbols.isClean=Symbol("isClean"),symbols.my=Symbol("my")),symbols}var node$1,hasRequiredNode$1;function requireNode$1(){if(hasRequiredNode$1)return node$1;hasRequiredNode$1=1;let y=requireCssSyntaxError(),R=requireStringifier(),E=requireStringify(),{isClean:q,my:d}=requireSymbols();function _(O,A){let S=new O.constructor;for(let P in O){if(!Object.prototype.hasOwnProperty.call(O,P)||P==="proxyCache")continue;let C=O[P],M=typeof C;P==="parent"&&M==="object"?A&&(S[P]=A):P==="source"?S[P]=C:Array.isArray(C)?S[P]=C.map(k=>_(k,S)):(M==="object"&&C!==null&&(C=_(C)),S[P]=C)}return S}function b(O,A){if(A&&typeof A.offset<"u")return A.offset;let S=1,P=1,C=0;for(let M=0;M<O.length;M++){if(P===A.line&&S===A.column){C=M;break}O[M]===` `?(S=1,P+=1):S+=1}return C}class w{get proxyOf(){return this}constructor(A={}){this.raws={},this[q]=!1,this[d]=!0;for(let S in A)if(S==="nodes"){this.nodes=[];for(let P of A[S])typeof P.clone=="function"?this.append(P.clone()):this.append(P)}else this[S]=A[S]}addToError(A){if(A.postcssNode=this,A.stack&&this.source&&/\n\s{4}at /.test(A.stack)){let S=this.source;A.stack=A.stack.replace(/\n\s{4}at /,`$&${S.input.from}:${S.start.line}:${S.start.column}$&`)}return A}after(A){return this.parent.insertAfter(this,A),this}assign(A={}){for(let S in A)this[S]=A[S];return this}before(A){return this.parent.insertBefore(this,A),this}cleanRaws(A){delete this.raws.before,delete this.raws.after,A||delete this.raws.between}clone(A={}){let S=_(this);for(let P in A)S[P]=A[P];return S}cloneAfter(A={}){let S=this.clone(A);return this.parent.insertAfter(this,S),S}cloneBefore(A={}){let S=this.clone(A);return this.parent.insertBefore(this,S),S}error(A,S={}){if(this.source){let{end:P,start:C}=this.rangeBy(S);return this.source.input.error(A,{column:C.column,line:C.line},{column:P.column,line:P.line},S)}return new y(A)}getProxyProcessor(){return{get(A,S){return S==="proxyOf"?A:S==="root"?()=>A.root().toProxy():A[S]},set(A,S,P){return A[S]===P||(A[S]=P,(S==="prop"||S==="value"||S==="name"||S==="params"||S==="important"||S==="text")&&A.markDirty()),!0}}}markClean(){this[q]=!0}markDirty(){if(this[q]){this[q]=!1;let A=this;for(;A=A.parent;)A[q]=!1}}next(){if(!this.parent)return;let A=this.parent.index(this);return this.parent.nodes[A+1]}positionBy(A){let S=this.source.start;if(A.index)S=this.positionInside(A.index);else if(A.word){let P="document"in this.source.input?this.source.input.document:this.source.input.css,M=P.slice(b(P,this.source.start),b(P,this.source.end)).indexOf(A.word);M!==-1&&(S=this.positionInside(M))}return S}positionInside(A){let S=this.source.start.column,P=this.source.start.line,C="document"in this.source.input?this.source.input.document:this.source.input.css,M=b(C,this.source.start),k=M+A;for(let L=M;L<k;L++)C[L]===` `?(S=1,P+=1):S+=1;return{column:S,line:P}}prev(){if(!this.parent)return;let A=this.parent.index(this);return this.parent.nodes[A-1]}rangeBy(A){let S={column:this.source.start.column,line:this.source.start.line},P=this.source.end?{column:this.source.end.column+1,line:this.source.end.line}:{column:S.column+1,line:S.line};if(A.word){let C="document"in this.source.input?this.source.input.document:this.source.input.css,k=C.slice(b(C,this.source.start),b(C,this.source.end)).indexOf(A.word);k!==-1&&(S=this.positionInside(k),P=this.positionInside(k+A.word.length))}else A.start?S={column:A.start.column,line:A.start.line}:A.index&&(S=this.positionInside(A.index)),A.end?P={column:A.end.column,line:A.end.line}:typeof A.endIndex=="number"?P=this.positionInside(A.endIndex):A.index&&(P=this.positionInside(A.index+1));return(P.line<S.line||P.line===S.line&&P.column<=S.column)&&(P={column:S.column+1,line:S.line}),{end:P,start:S}}raw(A,S){return new R().raw(this,A,S)}remove(){return this.parent&&this.parent.removeChild(this),this.parent=void 0,this}replaceWith(...A){if(this.parent){let S=this,P=!1;for(let C of A)C===this?P=!0:P?(this.parent.insertAfter(S,C),S=C):this.parent.insertBefore(S,C);P||this.remove()}return this}root(){let A=this;for(;A.parent&&A.parent.type!=="document";)A=A.parent;return A}toJSON(A,S){let P={},C=S==null;S=S||new Map;let M=0;for(let k in this){if(!Object.prototype.hasOwnProperty.call(this,k)||k==="parent"||k==="proxyCache")continue;let L=this[k];if(Array.isArray(L))P[k]=L.map(I=>typeof I=="object"&&I.toJSON?I.toJSON(null,S):I);else if(typeof L=="object"&&L.toJSON)P[k]=L.toJSON(null,S);else if(k==="source"){let I=S.get(L.input);I==null&&(I=M,S.set(L.input,M),M++),P[k]={end:L.end,inputId:I,start:L.start}}else P[k]=L}return C&&(P.inputs=[...S.keys()].map(k=>k.toJSON())),P}toProxy(){return this.proxyCache||(this.proxyCache=new Proxy(this,this.getProxyProcessor())),this.proxyCache}toString(A=E){A.stringify&&(A=A.stringify);let S="";return A(this,P=>{S+=P}),S}warn(A,S,P){let C={node:this};for(let M in P)C[M]=P[M];return A.warn(S,C)}}return node$1=w,w.default=w,node$1}var comment$1,hasRequiredComment$1;function requireComment$1(){if(hasRequiredComment$1)return comment$1;hasRequiredComment$1=1;let y=requireNode$1();class R extends y{constructor(q){super(q),this.type="comment"}}return comment$1=R,R.default=R,comment$1}var declaration$1,hasRequiredDeclaration$1;function requireDeclaration$1(){if(hasRequiredDeclaration$1)return declaration$1;hasRequiredDeclaration$1=1;let y=requireNode$1();class R extends y{get variable(){return this.prop.startsWith("--")||this.prop[0]==="$"}constructor(q){q&&typeof q.value<"u"&&typeof q.value!="string"&&(q={...q,value:String(q.value)}),super(q),this.type="decl"}}return declaration$1=R,R.default=R,declaration$1}var container$1,hasRequiredContainer$1;function requireContainer$1(){if(hasRequiredContainer$1)return container$1;hasRequiredContainer$1=1;let y=requireComment$1(),R=requireDeclaration$1(),E=requireNode$1(),{isClean:q,my:d}=requireSymbols(),_,b,w,O;function A(C){return C.map(M=>(M.nodes&&(M.nodes=A(M.nodes)),delete M.source,M))}function S(C){if(C[q]=!1,C.proxyOf.nodes)for(let M of C.proxyOf.nodes)S(M)}class P extends E{get first(){if(this.proxyOf.nodes)return this.proxyOf.nodes[0]}get last(){if(this.proxyOf.nodes)return this.proxyOf.nodes[this.proxyOf.nodes.length-1]}append(...M){for(let k of M){let L=this.normalize(k,this.last);for(let I of L)this.proxyOf.nodes.push(I)}return this.markDirty(),this}cleanRaws(M){if(super.cleanRaws(M),this.nodes)for(let k of this.nodes)k.cleanRaws(M)}each(M){if(!this.proxyOf.nodes)return;let k=this.getIterator(),L,I;for(;this.indexes[k]<this.proxyOf.nodes.length&&(L=this.indexes[k],I=M(this.proxyOf.nodes[L],L),I!==!1);)this.indexes[k]+=1;return delete this.indexes[k],I}every(M){return this.nodes.every(M)}getIterator(){this.lastEach||(this.lastEach=0),this.indexes||(this.indexes={}),this.lastEach+=1;let M=this.lastEach;return this.indexes[M]=0,M}getProxyProcessor(){return{get(M,k){return k==="proxyOf"?M:M[k]?k==="each"||typeof k=="string"&&k.startsWith("walk")?(...L)=>M[k](...L.map(I=>typeof I=="function"?(B,T)=>I(B.toProxy(),T):I)):k==="every"||k==="some"?L=>M[k]((I,...B)=>L(I.toProxy(),...B)):k==="root"?()=>M.root().toProxy():k==="nodes"?M.nodes.map(L=>L.toProxy()):k==="first"||k==="last"?M[k].toProxy():M[k]:M[k]},set(M,k,L){return M[k]===L||(M[k]=L,(k==="name"||k==="params"||k==="selector")&&M.markDirty()),!0}}}index(M){return typeof M=="number"?M:(M.proxyOf&&(M=M.proxyOf),this.proxyOf.nodes.indexOf(M))}insertAfter(M,k){let L=this.index(M),I=this.normalize(k,this.proxyOf.nodes[L]).reverse();L=this.index(M);for(let T of I)this.proxyOf.nodes.splice(L+1,0,T);let B;for(let T in this.indexes)B=this.indexes[T],L<B&&(this.indexes[T]=B+I.length);return this.markDirty(),this}insertBefore(M,k){let L=this.index(M),I=L===0?"prepend":!1,B=this.normalize(k,this.proxyOf.nodes[L],I).reverse();L=this.index(M);for(let z of B)this.proxyOf.nodes.splice(L,0,z);let T;for(let z in this.indexes)T=this.indexes[z],L<=T&&(this.indexes[z]=T+B.length);return this.markDirty(),this}normalize(M,k){if(typeof M=="string")M=A(b(M).nodes);else if(typeof M>"u")M=[];else if(Array.isArray(M)){M=M.slice(0);for(let I of M)I.parent&&I.parent.removeChild(I,"ignore")}else if(M.type==="root"&&this.type!=="document"){M=M.nodes.slice(0);for(let I of M)I.parent&&I.parent.removeChild(I,"ignore")}else if(M.type)M=[M];else if(M.prop){if(typeof M.value>"u")throw new Error("Value field is missed in node creation");typeof M.value!="string"&&(M.value=String(M.value)),M=[new R(M)]}else if(M.selector||M.selectors)M=[new O(M)];else if(M.name)M=[new _(M)];else if(M.text)M=[new y(M)];else throw new Error("Unknown node type in node creation");return M.map(I=>(I[d]||P.rebuild(I),I=I.proxyOf,I.parent&&I.parent.removeChild(I),I[q]&&S(I),I.raws||(I.raws={}),typeof I.raws.before>"u"&&k&&typeof k.raws.before<"u"&&(I.raws.before=k.raws.before.replace(/\S/g,"")),I.parent=this.proxyOf,I))}prepend(...M){M=M.reverse();for(let k of M){let L=this.normalize(k,this.first,"prepend").reverse();for(let I of L)this.proxyOf.nodes.unshift(I);for(let I in this.indexes)this.indexes[I]=this.indexes[I]+L.length}return this.markDirty(),this}push(M){return M.parent=this,this.proxyOf.nodes.push(M),this}removeAll(){for(let M of this.proxyOf.nodes)M.parent=void 0;return this.proxyOf.nodes=[],this.markDirty(),this}removeChild(M){M=this.index(M),this.proxyOf.nodes[M].parent=void 0,this.proxyOf.nodes.splice(M,1);let k;for(let L in this.indexes)k=this.indexes[L],k>=M&&(this.indexes[L]=k-1);return this.markDirty(),this}replaceValues(M,k,L){return L||(L=k,k={}),this.walkDecls(I=>{k.props&&!k.props.includes(I.prop)||k.fast&&!I.value.includes(k.fast)||(I.value=I.value.replace(M,L))}),this.markDirty(),this}some(M){return this.nodes.some(M)}walk(M){return this.each((k,L)=>{let I;try{I=M(k,L)}catch(B){throw k.addToError(B)}return I!==!1&&k.walk&&(I=k.walk(M)),I})}walkAtRules(M,k){return k?M instanceof RegExp?this.walk((L,I)=>{if(L.type==="atrule"&&M.test(L.name))return k(L,I)}):this.walk((L,I)=>{if(L.type==="atrule"&&L.name===M)return k(L,I)}):(k=M,this.walk((L,I)=>{if(L.type==="atrule")return k(L,I)}))}walkComments(M){return this.walk((k,L)=>{if(k.type==="comment")return M(k,L)})}walkDecls(M,k){return k?M instanceof RegExp?this.walk((L,I)=>{if(L.type==="decl"&&M.test(L.prop))return k(L,I)}):this.walk((L,I)=>{if(L.type==="decl"&&L.prop===M)return k(L,I)}):(k=M,this.walk((L,I)=>{if(L.type==="decl")return k(L,I)}))}walkRules(M,k){return k?M instanceof RegExp?this.walk((L,I)=>{if(L.type==="rule"&&M.test(L.selector))return k(L,I)}):this.walk((L,I)=>{if(L.type==="rule"&&L.selector===M)return k(L,I)}):(k=M,this.walk((L,I)=>{if(L.type==="rule")return k(L,I)}))}}return P.registerParse=C=>{b=C},P.registerRule=C=>{O=C},P.registerAtRule=C=>{_=C},P.registerRoot=C=>{w=C},container$1=P,P.default=P,P.rebuild=C=>{C.type==="atrule"?Object.setPrototypeOf(C,_.prototype):C.type==="rule"?Object.setPrototypeOf(C,O.prototype):C.type==="decl"?Object.setPrototypeOf(C,R.prototype):C.type==="comment"?Object.setPrototypeOf(C,y.prototype):C.type==="root"&&Object.setPrototypeOf(C,w.prototype),C[d]=!0,C.nodes&&C.nodes.forEach(M=>{P.rebuild(M)})},container$1}var atRule,hasRequiredAtRule;function requireAtRule(){if(hasRequiredAtRule)return atRule;hasRequiredAtRule=1;let y=requireContainer$1();class R extends y{constructor(q){super(q),this.type="atrule"}append(...q){return this.proxyOf.nodes||(this.nodes=[]),super.append(...q)}prepend(...q){return this.proxyOf.nodes||(this.nodes=[]),super.prepend(...q)}}return atRule=R,R.default=R,y.registerAtRule(R),atRule}var document,hasRequiredDocument;function requireDocument(){if(hasRequiredDocument)return document;hasRequiredDocument=1;let y=requireContainer$1(),R,E;class q extends y{constructor(_){super({type:"document",..._}),this.nodes||(this.nodes=[])}toResult(_={}){return new R(new E,this,_).stringify()}}return q.registerLazyResult=d=>{R=d},q.registerProcessor=d=>{E=d},document=q,q.default=q,document}var nonSecure,hasRequiredNonSecure;function requireNonSecure(){if(hasRequiredNonSecure)return nonSecure;hasRequiredNonSecure=1;let y="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict";return nonSecure={nanoid:(q=21)=>{let d="",_=q|0;for(;_--;)d+=y[Math.random()*64|0];return d},customAlphabet:(q,d=21)=>(_=d)=>{let b="",w=_|0;for(;w--;)b+=q[Math.random()*q.length|0];return b}},nonSecure}var previousMap,hasRequiredPreviousMap;function requirePreviousMap(){if(hasRequiredPreviousMap)return previousMap;hasRequiredPreviousMap=1;let{existsSync:y,readFileSync:R}=requireNoop(),{dirname:E,join:q}=requirePathBrowserify(),{SourceMapConsumer:d,SourceMapGenerator:_}=require$$1;function b(O){return Buffer?Buffer.from(O,"base64").toString():window.atob(O)}class w{constructor(A,S){if(S.map===!1)return;this.loadAnnotation(A),this.inline=this.startWith(this.annotation,"data:");let P=S.map?S.map.prev:void 0,C=this.loadMap(S.from,P);!this.mapFile&&S.from&&(this.mapFile=S.from),this.mapFile&&(this.root=E(this.mapFile)),C&&(this.text=C)}consumer(){return this.consumerCache||(this.consumerCache=new d(this.text)),this.consumerCache}decodeInline(A){let S=/^data:application\/json;charset=utf-?8;base64,/,P=/^data:application\/json;base64,/,C=/^data:application\/json;charset=utf-?8,/,M=/^data:application\/json,/,k=A.match(C)||A.match(M);if(k)return decodeURIComponent(A.substr(k[0].length));let L=A.match(S)||A.match(P);if(L)return b(A.substr(L[0].length));let I=A.match(/data:application\/json;([^,]+),/)[1];throw new Error("Unsupported source map encoding "+I)}getAnnotationURL(A){return A.replace(/^\/\*\s*# sourceMappingURL=/,"").trim()}isMap(A){return typeof A!="object"?!1:typeof A.mappings=="string"||typeof A._mappings=="string"||Array.isArray(A.sections)}loadAnnotation(A){let S=A.match(/\/\*\s*# sourceMappingURL=/g);if(!S)return;let P=A.lastIndexOf(S.pop()),C=A.indexOf("*/",P);P>-1&&C>-1&&(this.annotation=this.getAnnotationURL(A.substring(P,C)))}loadFile(A){if(this.root=E(A),y(A))return this.mapFile=A,R(A,"utf-8").toString().trim()}loadMap(A,S){if(S===!1)return!1;if(S){if(typeof S=="string")return S;if(typeof S=="function"){let P=S(A);if(P){let C=this.loadFile(P);if(!C)throw new Error("Unable to load previous source map: "+P.toString());return C}}else{if(S instanceof d)return _.fromSourceMap(S).toString();if(S instanceof _)return S.toString();if(this.isMap(S))return JSON.stringify(S);throw new Error("Unsupported previous source map format: "+S.toString())}}else{if(this.inline)return this.decodeInline(this.annotation);if(this.annotation){let P=this.annotation;return A&&(P=q(E(A),P)),this.loadFile(P)}}}startWith(A,S){return A?A.substr(0,S.length)===S:!1}withContent(){return!!(this.consumer().sourcesContent&&this.consumer().sourcesContent.length>0)}}return previousMap=w,w.default=w,previousMap}var input,hasRequiredInput;function requireInput(){if(hasRequiredInput)return input;hasRequiredInput=1;let{nanoid:y}=requireNonSecure(),{isAbsolute:R,resolve:E}=requirePathBrowserify(),{SourceMapConsumer:q,SourceMapGenerator:d}=require$$1,{fileURLToPath:_,pathToFileURL:b}=require$$2,w=requireCssSyntaxError(),O=requirePreviousMap(),A=require$$1,S=Symbol("fromOffsetCache"),P=!!(q&&d),C=!!(E&&R);class M{get from(){return this.file||this.id}constructor(L,I={}){if(L===null||typeof L>"u"||typeof L=="object"&&!L.toString)throw new Error(`PostCSS received ${L} instead of CSS string`);if(this.css=L.toString(),this.css[0]==="\uFEFF"||this.css[0]==="\uFFFE"?(this.hasBOM=!0,this.css=this.css.slice(1)):this.hasBOM=!1,this.document=this.css,I.document&&(this.document=I.document.toString()),I.from&&(!C||/^\w+:\/\//.test(I.from)||R(I.from)?this.file=I.from:this.file=E(I.from)),C&&P){let B=new O(this.css,I);if(B.text){this.map=B;let T=B.consumer().file;!this.file&&T&&(this.file=this.mapResolve(T))}}this.file||(this.id="<input css "+y(6)+">"),this.map&&(this.map.file=this.from)}error(L,I,B,T={}){let z,V,N;if(I&&typeof I=="object"){let x=I,K=B;if(typeof x.offset=="number"){let F=this.fromOffset(x.offset);I=F.line,B=F.col}else I=x.line,B=x.column;if(typeof K.offset=="number"){let F=this.fromOffset(K.offset);V=F.line,z=F.col}else V=K.line,z=K.column}else if(!B){let x=this.fromOffset(I);I=x.line,B=x.col}let U=this.origin(I,B,V,z);return U?N=new w(L,U.endLine===void 0?U.line:{column:U.column,line:U.line},U.endLine===void 0?U.column:{column:U.endColumn,line:U.endLine},U.source,U.file,T.plugin):N=new w(L,V===void 0?I:{column:B,line:I},V===void 0?B:{column:z,line:V},this.css,this.file,T.plugin),N.input={column:B,endColumn:z,endLine:V,line:I,source:this.css},this.file&&(b&&(N.input.url=b(this.file).toString()),N.input.file=this.file),N}fromOffset(L){let I,B;if(this[S])B=this[S];else{let z=this.css.split(` `);B=new Array(z.length);let V=0;for(let N=0,U=z.length;N<U;N++)B[N]=V,V+=z[N].length+1;this[S]=B}I=B[B.length-1];let T=0;if(L>=I)T=B.length-1;else{let z=B.length-2,V;for(;T<z;)if(V=T+(z-T>>1),L<B[V])z=V-1;else if(L>=B[V+1])T=V+1;else{T=V;break}}return{col:L-B[T]+1,line:T+1}}mapResolve(L){return/^\w+:\/\//.test(L)?L:E(this.map.consumer().sourceRoot||this.map.root||".",L)}origin(L,I,B,T){if(!this.map)return!1;let z=this.map.consumer(),V=z.originalPositionFor({column:I,line:L});if(!V.source)return!1;let N;typeof B=="number"&&(N=z.originalPositionFor({column:T,line:B}));let U;R(V.source)?U=b(V.source):U=new URL(V.source,this.map.consumer().sourceRoot||b(this.map.mapFile));let x={column:V.column,endColumn:N&&N.column,endLine:N&&N.line,line:V.line,url:U.toString()};if(U.protocol==="file:")if(_)x.file=_(U);else throw new Error("file: protocol is not available in this PostCSS build");let K=z.sourceContentFor(V.source);return K&&(x.source=K),x}toJSON(){let L={};for(let I of["hasBOM","css","file","id"])this[I]!=null&&(L[I]=this[I]);return this.map&&(L.map={...this.map},L.map.consumerCache&&(L.map.consumerCache=void 0)),L}}return input=M,M.default=M,A&&A.registerInput&&A.registerInput(M),input}var root,hasRequiredRoot;function requireRoot(){if(hasRequiredRoot)return root;hasRequiredRoot=1;let y=requireContainer$1(),R,E;class q extends y{constructor(_){super(_),this.type="root",this.nodes||(this.nodes=[])}normalize(_,b,w){let O=super.normalize(_);if(b){if(w==="prepend")this.nodes.length>1?b.raws.before=this.nodes[1].raws.before:delete b.raws.before;else if(this.first!==b)for(let A of O)A.raws.before=b.raws.before}return O}removeChild(_,b){let w=this.index(_);return!b&&w===0&&this.nodes.length>1&&(this.nodes[1].raws.before=this.nodes[w].raws.before),super.removeChild(_)}toResult(_={}){return new R(new E,this,_).stringify()}}return q.registerLazyResult=d=>{R=d},q.registerProcessor=d=>{E=d},root=q,q.default=q,y.registerRoot(q),root}var list_1,hasRequiredList$1;function requireList$1(){if(hasRequiredList$1)return list_1;hasRequiredList$1=1;let y={comma(R){return y.split(R,[","],!0)},space(R){let E=[" ",` `," "];return y.split(R,E)},split(R,E,q){let d=[],_="",b=!1,w=0,O=!1,A="",S=!1;for(let P of R)S?S=!1:P==="\\"?S=!0:O?P===A&&(O=!1):P==='"'||P==="'"?(O=!0,A=P):P==="("?w+=1:P===")"?w>0&&(w-=1):w===0&&E.includes(P)&&(b=!0),b?(_!==""&&d.push(_.trim()),_="",b=!1):_+=P;return(q||_!=="")&&d.push(_.trim()),d}};return list_1=y,y.default=y,list_1}var rule,hasRequiredRule;function requireRule(){if(hasRequiredRule)return rule;hasRequiredRule=1;let y=requireContainer$1(),R=requireList$1();class E extends y{get selectors(){return R.comma(this.selector)}set selectors(d){let _=this.selector?this.selector.match(/,\s*/):null,b=_?_[0]:","+this.raw("between","beforeOpen");this.selector=d.join(b)}constructor(d){super(d),this.type="rule",this.nodes||(this.nodes=[])}}return rule=E,E.default=E,y.registerRule(E),rule}var fromJSON_1,hasRequiredFromJSON;function requireFromJSON(){if(hasRequiredFromJSON)return fromJSON_1;hasRequiredFromJSON=1;let y=requireAtRule(),R=requireComment$1(),E=requireDeclaration$1(),q=requireInput(),d=requirePreviousMap(),_=requireRoot(),b=requireRule();function w(O,A){if(Array.isArray(O))return O.map(C=>w(C));let{inputs:S,...P}=O;if(S){A=[];for(let C of S){let M={...C,__proto__:q.prototype};M.map&&(M.map={...M.map,__proto__:d.prototype}),A.push(M)}}if(P.nodes&&(P.nodes=O.nodes.map(C=>w(C,A))),P.source){let{inputId:C,...M}=P.source;P.source=M,C!=null&&(P.source.input=A[C])}if(P.type==="root")return new _(P);if(P.type==="decl")return new E(P);if(P.type==="rule")return new b(P);if(P.type==="comment")return new R(P);if(P.type==="atrule")return new y(P);throw new Error("Unknown node type: "+O.type)}return fromJSON_1=w,w.default=w,fromJSON_1}var mapGenerator,hasRequiredMapGenerator;function requireMapGenerator(){if(hasRequiredMapGenerator)return mapGenerator;hasRequiredMapGenerator=1;let{dirname:y,relative:R,resolve:E,sep:q}=requirePathBrowserify(),{SourceMapConsumer:d,SourceMapGenerator:_}=require$$1,{pathToFileURL:b}=require$$2,w=requireInput(),O=!!(d&&_),A=!!(y&&E&&R&&q);class S{constructor(C,M,k,L){this.stringify=C,this.mapOpts=k.map||{},this.root=M,this.opts=k,this.css=L,this.originalCSS=L,this.usesFileUrls=!this.mapOpts.from&&this.mapOpts.absolute,this.memoizedFileURLs=new Map,this.memoizedPaths=new Map,this.memoizedURLs=new Map}addAnnotation(){let C;this.isInline()?C="data:application/json;base64,"+this.toBase64(this.map.toString()):typeof this.mapOpts.annotation=="string"?C=this.mapOpts.annotation:typeof this.mapOpts.annotation=="function"?C=this.mapOpts.annotation(this.opts.to,this.root):C=this.outputFile()+".map";let M=` `;this.css.includes(`\r `)&&(M=`\r `),this.css+=M+"/*# sourceMappingURL="+C+" */"}applyPrevMaps(){for(let C of this.previous()){let M=this.toUrl(this.path(C.file)),k=C.root||y(C.file),L;this.mapOpts.sourcesContent===!1?(L=new d(C.text),L.sourcesContent&&(L.sourcesContent=null)):L=C.consumer(),this.map.applySourceMap(L,M,this.toUrl(this.path(k)))}}clearAnnotation(){if(this.mapOpts.annotation!==!1)if(this.root){let C;for(let M=this.root.nodes.length-1;M>=0;M--)C=this.root.nodes[M],C.type==="comment"&&C.text.startsWith("# sourceMappingURL=")&&this.root.removeChild(M)}else this.css&&(this.css=this.css.replace(/\n*\/\*#[\S\s]*?\*\/$/gm,""))}generate(){if(this.clearAnnotation(),A&&O&&this.isMap())return this.generateMap();{let C="";return this.stringify(this.root,M=>{C+=M}),[C]}}generateMap(){if(this.root)this.generateString();else if(this.previous().length===1){let C=this.previous()[0].consumer();C.file=this.outputFile(),this.map=_.fromSourceMap(C,{ignoreInvalidMapping:!0})}else this.map=new _({file:this.outputFile(),ignoreInvalidMapping:!0}),this.map.addMapping({generated:{column:0,line:1},original:{column:0,line:1},source:this.opts.from?this.toUrl(this.path(this.opts.from)):"<no source>"});return this.isSourcesContent()&&this.setSourcesContent(),this.root&&this.previous().length>0&&this.applyPrevMaps(),this.isAnnotation()&&this.addAnnotation(),this.isInline()?[this.css]:[this.css,this.map]}generateString(){this.css="",this.map=new _({file:this.outputFile(),ignoreInvalidMapping:!0});let C=1,M=1,k="<no source>",L={generated:{column:0,line:0},original:{column:0,line:0},source:""},I,B;this.stringify(this.root,(T,z,V)=>{if(this.css+=T,z&&V!=="end"&&(L.generated.line=C,L.generated.column=M-1,z.source&&z.source.start?(L.source=this.sourcePath(z),L.original.line=z.source.start.line,L.original.column=z.source.start.column-1,this.map.addMapping(L)):(L.source=k,L.original.line=1,L.original.column=0,this.map.addMapping(L))),B=T.match(/\n/g),B?(C+=B.length,I=T.lastIndexOf(` `),M=T.length-I):M+=T.length,z&&V!=="start"){let N=z.parent||{raws:{}};(!(z.type==="decl"||z.type==="atrule"&&!z.nodes)||z!==N.last||N.raws.semicolon)&&(z.source&&z.source.end?(L.source=this.sourcePath(z),L.original.line=z.source.end.line,L.original.column=z.source.end.column-1,L.generated.line=C,L.generated.column=M-2,this.map.addMapping(L)):(L.source=k,L.original.line=1,L.original.column=0,L.generated.line=C,L.generated.column=M-1,this.map.addMapping(L)))}})}isAnnotation(){return this.isInline()?!0:typeof this.mapOpts.annotation<"u"?this.mapOpts.annotation:this.previous().length?this.previous().some(C=>C.annotation):!0}isInline(){if(typeof this.mapOpts.inline<"u")return this.mapOpts.inline;let C=this.mapOpts.annotation;return typeof C<"u"&&C!==!0?!1:this.previous().length?this.previous().some(M=>M.inline):!0}isMap(){return typeof this.opts.map<"u"?!!this.opts.map:this.previous().length>0}isSourcesContent(){return typeof this.mapOpts.sourcesContent<"u"?this.mapOpts.sourcesContent:this.previous().length?this.previous().some(C=>C.withContent()):!0}outputFile(){return this.opts.to?this.path(this.opts.to):this.opts.from?this.path(this.opts.from):"to.css"}path(C){if(this.mapOpts.absolute||C.charCodeAt(0)===60||/^\w+:\/\//.test(C))return C;let M=this.memoizedPaths.get(C);if(M)return M;let k=this.opts.to?y(this.opts.to):".";typeof this.mapOpts.annotation=="string"&&(k=y(E(k,this.mapOpts.annotation)));let L=R(k,C);return this.memoizedPaths.set(C,L),L}previous(){if(!this.previousMaps)if(this.previousMaps=[],this.root)this.root.walk(C=>{if(C.source&&C.source.input.map){let M=C.source.input.map;this.previousMaps.includes(M)||this.previousMaps.push(M)}});else{let C=new w(this.originalCSS,this.opts);C.map&&this.previousMaps.push(C.map)}return this.previousMaps}setSourcesContent(){let C={};if(this.root)this.root.walk(M=>{if(M.source){let k=M.source.input.from;if(k&&!C[k]){C[k]=!0;let L=this.usesFileUrls?this.toFileUrl(k):this.toUrl(this.path(k));this.map.setSourceContent(L,M.source.input.css)}}});else if(this.css){let M=this.opts.from?this.toUrl(this.path(this.opts.from)):"<no source>";this.map.setSourceContent(M,this.css)}}sourcePath(C){return this.mapOpts.from?this.toUrl(this.mapOpts.from):this.usesFileUrls?this.toFileUrl(C.source.input.from):this.toUrl(this.path(C.source.input.from))}toBase64(C){return Buffer?Buffer.from(C).toString("base64"):window.btoa(unescape(encodeURIComponent(C)))}toFileUrl(C){let M=this.memoizedFileURLs.get(C);if(M)return M;if(b){let k=b(C).toString();return this.memoizedFileURLs.set(C,k),k}else throw new Error("`map.absolute` option is not available in this PostCSS build")}toUrl(C){let M=this.memoizedURLs.get(C);if(M)return M;q==="\\"&&(C=C.replace(/\\/g,"/"));let k=encodeURI(C).replace(/[#?]/g,encodeURIComponent);return this.memoizedURLs.set(C,k),k}}return mapGenerator=S,mapGenerator}var tokenize,hasRequiredTokenize;function requireTokenize(){if(hasRequiredTokenize)return tokenize;hasRequiredTokenize=1;const y=39,R=34,E=92,q=47,d=10,_=32,b=12,w=9,O=13,A=91,S=93,P=40,C=41,M=123,k=125,L=59,I=42,B=58,T=64,z=/[\t\n\f\r "#'()/;[\\\]{}]/g,V=/[\t\n\f\r !"#'():;@[\\\]{}]|\/(?=\*)/g,N=/.[\r\n"'(/\\]/,U=/[\da-f]/i;return tokenize=function(K,F={}){let D=K.css.valueOf(),$=F.ignoreErrors,G,j,W,H,Y,te,J,ie,re,ee,Q=D.length,X=0,Z=[],se=[];function ne(){return X}function ae(ce){throw K.error("Unclosed "+ce,X)}function he(){return se.length===0&&X>=Q}function ve(ce){if(se.length)return se.pop();if(X>=Q)return;let be=ce?ce.ignoreUnclosed:!1;switch(G=D.charCodeAt(X),G){case d:case _:case w:case O:case b:{H=X;do H+=1,G=D.charCodeAt(H);while(G===_||G===d||G===w||G===O||G===b);te=["space",D.slice(X,H)],X=H-1;break}case A:case S:case M:case k:case B:case L:case C:{let Re=String.fromCharCode(G);te=[Re,Re,X];break}case P:{if(ee=Z.length?Z.pop()[1]:"",re=D.charCodeAt(X+1),ee==="url"&&re!==y&&re!==R&&re!==_&&re!==d&&re!==w&&re!==b&&re!==O){H=X;do{if(J=!1,H=D.indexOf(")",H+1),H===-1)if($||be){H=X;break}else ae("bracket");for(ie=H;D.charCodeAt(ie-1)===E;)ie-=1,J=!J}while(J);te=["brackets",D.slice(X,H+1),X,H],X=H}else H=D.indexOf(")",X+1),j=D.slice(X,H+1),H===-1||N.test(j)?te=["(","(",X]:(te=["brackets",j,X,H],X=H);break}case y:case R:{Y=G===y?"'":'"',H=X;do{if(J=!1,H=D.indexOf(Y,H+1),H===-1)if($||be){H=X+1;break}else ae("string");for(ie=H;D.charCodeAt(ie-1)===E;)ie-=1,J=!J}while(J);te=["string",D.slice(X,H+1),X,H],X=H;break}case T:{z.lastIndex=X+1,z.test(D),z.lastIndex===0?H=D.length-1:H=z.lastIndex-2,te=["at-word",D.slice(X,H+1),X,H],X=H;break}case E:{for(H=X,W=!0;D.charCodeAt(H+1)===E;)H+=1,W=!W;if(G=D.charCodeAt(H+1),W&&G!==q&&G!==_&&G!==d&&G!==w&&G!==O&&G!==b&&(H+=1,U.test(D.charAt(H)))){for(;U.test(D.charAt(H+1));)H+=1;D.charCodeAt(H+1)===_&&(H+=1)}te=["word",D.slice(X,H+1),X,H],X=H;break}default:{G===q&&D.charCodeAt(X+1)===I?(H=D.indexOf("*/",X+2)+1,H===0&&($||be?H=D.length:ae("comment")),te=["comment",D.slice(X,H+1),X,H],X=H):(V.lastIndex=X+1,V.test(D),V.lastIndex===0?H=D.length-1:H=V.lastIndex-2,te=["word",D.slice(X,H+1),X,H],Z.push(te),X=H);break}}return X++,te}function ge(ce){se.push(ce)}return{back:ge,endOfFile:he,nextToken:ve,position:ne}},tokenize}var parser$1,hasRequiredParser$1;function requireParser$1(){if(hasRequiredParser$1)return parser$1;hasRequiredParser$1=1;let y=requireAtRule(),R=requireComment$1(),E=requireDeclaration$1(),q=requireRoot(),d=requireRule(),_=requireTokenize();const b={empty:!0,space:!0};function w(A){for(let S=A.length-1;S>=0;S--){let P=A[S],C=P[3]||P[2];if(C)return C}}class O{constructor(S){this.input=S,this.root=new q,this.current=this.root,this.spaces="",this.semicolon=!1,this.createTokenizer(),this.root.source={input:S,start:{column:1,line:1,offset:0}}}atrule(S){let P=new y;P.name=S[1].slice(1),P.name===""&&this.unnamedAtrule(P,S),this.init(P,S[2]);let C,M,k,L=!1,I=!1,B=[],T=[];for(;!this.tokenizer.endOfFile();){if(S=this.tokenizer.nextToken(),C=S[0],C==="("||C==="["?T.push(C==="("?")":"]"):C==="{"&&T.length>0?T.push("}"):C===T[T.length-1]&&T.pop(),T.length===0)if(C===";"){P.source.end=this.getPosition(S[2]),P.source.end.offset++,this.semicolon=!0;break}else if(C==="{"){I=!0;break}else if(C==="}"){if(B.length>0){for(k=B.length-1,M=B[k];M&&M[0]==="space";)M=B[--k];M&&(P.source.end=this.getPosition(M[3]||M[2]),P.source.end.offset++)}this.end(S);break}else B.push(S);else B.push(S);if(this.tokenizer.endOfFile()){L=!0;break}}P.raws.between=this.spacesAndCommentsFromEnd(B),B.length?(P.raws.afterName=this.spacesAndCommentsFromStart(B),this.raw(P,"params",B),L&&(S=B[B.length-1],P.source.end=this.getPosition(S[3]||S[2]),P.source.end.offset++,this.spaces=P.raws.between,P.raws.between="")):(P.raws.afterName="",P.params=""),I&&(P.nodes=[],this.current=P)}checkMissedSemicolon(S){let P=this.colon(S);if(P===!1)return;let C=0,M;for(let k=P-1;k>=0&&(M=S[k],!(M[0]!=="space"&&(C+=1,C===2)));k--);throw this.input.error("Missed semicolon",M[0]==="word"?M[3]+1:M[2])}colon(S){let P=0,C,M,k;for(let[L,I]of S.entries()){if(M=I,k=M[0],k==="("&&(P+=1),k===")"&&(P-=1),P===0&&k===":")if(!C)this.doubleColon(M);else{if(C[0]==="word"&&C[1]==="progid")continue;return L}C=M}return!1}comment(S){let P=new R;this.init(P,S[2]),P.source.end=this.getPosition(S[3]||S[2]),P.source.end.offset++;let C=S[1].slice(2,-2);if(/^\s*$/.test(C))P.text="",P.raws.left=C,P.raws.right="";else{let M=C.match(/^(\s*)([^]*\S)(\s*)$/);P.text=M[2],P.raws.left=M[1],P.raws.right=M[3]}}createTokenizer(){this.tokenizer=_(this.input)}decl(S,P){let C=new E;this.init(C,S[0][2]);let M=S[S.length-1];for(M[0]===";"&&(this.semicolon=!0,S.pop()),C.source.end=this.getPosition(M[3]||M[2]||w(S)),C.source.end.offset++;S[0][0]!=="word";)S.length===1&&this.unknownWord(S),C.raws.before+=S.shift()[1];for(C.source.start=this.getPosition(S[0][2]),C.prop="";S.length;){let T=S[0][0];if(T===":"||T==="space"||T==="comment")break;C.prop+=S.shift()[1]}C.raws.between="";let k;for(;S.length;)if(k=S.shift(),k[0]===":"){C.raws.between+=k[1];break}else k[0]==="word"&&/\w/.test(k[1])&&this.unknownWord([k]),C.raws.between+=k[1];(C.prop[0]==="_"||C.prop[0]==="*")&&(C.raws.before+=C.prop[0],C.prop=C.prop.slice(1));let L=[],I;for(;S.length&&(I=S[0][0],!(I!=="space"&&I!=="comment"));)L.push(S.shift());this.precheckMissedSemicolon(S);for(let T=S.length-1;T>=0;T--){if(k=S[T],k[1].toLowerCase()==="!important"){C.important=!0;let z=this.stringFrom(S,T);z=this.spacesFromEnd(S)+z,z!==" !important"&&(C.raws.important=z);break}else if(k[1].toLowerCase()==="important"){let z=S.slice(0),V="";for(let N=T;N>0;N--){let U=z[N][0];if(V.trim().startsWith("!")&&U!=="space")break;V=z.pop()[1]+V}V.trim().startsWith("!")&&(C.important=!0,C.raws.important=V,S=z)}if(k[0]!=="space"&&k[0]!=="comment")break}S.some(T=>T[0]!=="space"&&T[0]!=="comment")&&(C.raws.between+=L.map(T=>T[1]).join(""),L=[]),this.raw(C,"value",L.concat(S),P),C.value.includes(":")&&!P&&this.checkMissedSemicolon(S)}doubleColon(S){throw this.input.error("Double colon",{offset:S[2]},{offset:S[2]+S[1].length})}emptyRule(S){let P=new d;this.init(P,S[2]),P.selector="",P.raws.between="",this.current=P}end(S){this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.semicolon=!1,this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.spaces="",this.current.parent?(this.current.source.end=this.getPosition(S[2]),this.current.source.end.offset++,this.current=this.current.parent):this.unexpectedClose(S)}endFile(){this.current.parent&&this.unclosedBlock(),this.current.nodes&&this.current.nodes.length&&(this.current.raws.semicolon=this.semicolon),this.current.raws.after=(this.current.raws.after||"")+this.spaces,this.root.source.end=this.getPosition(this.tokenizer.position())}freeSemicolon(S){if(this.spaces+=S[1],this.current.nodes){let P=this.current.nodes[this.current.nodes.length-1];P&&P.type==="rule"&&!P.raws.ownSemicolon&&(P.raws.ownSemicolon=this.spaces,this.spaces="",P.source.end=this.getPosition(S[2]),P.source.end.offset+=P.raws.ownSemicolon.length)}}getPosition(S){let P=this.input.fromOffset(S);return{column:P.col,line:P.line,offset:S}}init(S,P){this.current.push(S),S.source={input:this.input,start:this.getPosition(P)},S.raws.before=this.spaces,this.spaces="",S.type!=="comment"&&(this.semicolon=!1)}other(S){let P=!1,C=null,M=!1,k=null,L=[],I=S[1].startsWith("--"),B=[],T=S;for(;T;){if(C=T[0],B.push(T),C==="("||C==="[")k||(k=T),L.push(C==="("?")":"]");else if(I&&M&&C==="{")k||(k=T),L.push("}");else if(L.length===0)if(C===";")if(M){this.decl(B,I);return}else break;else if(C==="{"){this.rule(B);return}else if(C==="}"){this.tokenizer.back(B.pop()),P=!0;break}else C===":"&&(M=!0);else C===L[L.length-1]&&(L.pop(),L.length===0&&(k=null));T=this.tokenizer.nextToken()}if(this.tokenizer.endOfFile()&&(P=!0),L.length>0&&this.unclosedBracket(k),P&&M){if(!I)for(;B.length&&(T=B[B.length-1][0],!(T!=="space"&&T!=="comment"));)this.tokenizer.back(B.pop());this.decl(B,I)}else this.unknownWord(B)}parse(){let S;for(;!this.tokenizer.endOfFile();)switch(S=this.tokenizer.nextToken(),S[0]){case"space":this.spaces+=S[1];break;case";":this.freeSemicolon(S);break;case"}":this.end(S);break;case"comment":this.comment(S);break;case"at-word":this.atrule(S);break;case"{":this.emptyRule(S);break;default:this.other(S);break}this.endFile()}precheckMissedSemicolon(){}raw(S,P,C,M){let k,L,I=C.length,B="",T=!0,z,V;for(let N=0;N<I;N+=1)k=C[N],L=k[0],L==="space"&&N===I-1&&!M?T=!1:L==="comment"?(V=C[N-1]?C[N-1][0]:"empty",z=C[N+1]?C[N+1][0]:"empty",!b[V]&&!b[z]?B.slice(-1)===","?T=!1:B+=k[1]:T=!1):B+=k[1];if(!T){let N=C.reduce((U,x)=>U+x[1],"");S.raws[P]={raw:N,value:B}}S[P]=B}rule(S){S.pop();let P=new d;this.init(P,S[0][2]),P.raws.between=this.spacesAndCommentsFromEnd(S),this.raw(P,"selector",S),this.current=P}spacesAndCommentsFromEnd(S){let P,C="";for(;S.length&&(P=S[S.length-1][0],!(P!=="space"&&P!=="comment"));)C=S.pop()[1]+C;return C}spacesAndCommentsFromStart(S){let P,C="";for(;S.length&&(P=S[0][0],!(P!=="space"&&P!=="comment"));)C+=S.shift()[1];return C}spacesFromEnd(S){let P,C="";for(;S.length&&(P=S[S.length-1][0],P==="space");)C=S.pop()[1]+C;return C}stringFrom(S,P){let C="";for(let M=P;M<S.length;M++)C+=S[M][1];return S.splice(P,S.length-P),C}unclosedBlock(){let S=this.current.source.start;throw this.input.error("Unclosed block",S.line,S.column)}unclosedBracket(S){throw this.input.error("Unclosed bracket",{offset:S[2]},{offset:S[2]+1})}unexpectedClose(S){throw this.input.error("Unexpected }",{offset:S[2]},{offset:S[2]+1})}unknownWord(S){throw this.input.error("Unknown word "+S[0][1],{offset:S[0][2]},{offset:S[0][2]+S[0][1].length})}unnamedAtrule(S,P){throw this.input.error("At-rule without name",{offset:P[2]},{offset:P[2]+P[1].length})}}return parser$1=O,parser$1}var parse_1,hasRequiredParse$1;function requireParse$1(){if(hasRequiredParse$1)return parse_1;hasRequiredParse$1=1;let y=requireContainer$1(),R=requireInput(),E=requireParser$1();function q(d,_){let b=new R(d,_),w=new E(b);try{w.parse()}catch(O){throw O}return w.root}return parse_1=q,q.default=q,y.registerParse(q),parse_1}var warning,hasRequiredWarning;function requireWarning(){if(hasRequiredWarning)return warning;hasRequiredWarning=1;class y{constructor(E,q={}){if(this.type="warning",this.text=E,q.node&&q.node.source){let d=q.node.rangeBy(q);this.line=d.start.line,this.column=d.start.column,this.endLine=d.end.line,this.endColumn=d.end.column}for(let d in q)this[d]=q[d]}toString(){return this.node?this.node.error(this.text,{index:this.index,plugin:this.plugin,word:this.word}).message:this.plugin?this.plugin+": "+this.text:this.text}}return warning=y,y.default=y,warning}var result,hasRequiredResult;function requireResult(){if(hasRequiredResult)return result;hasRequiredResult=1;let y=requireWarning();class R{get content(){return this.css}constructor(q,d,_){this.processor=q,this.messages=[],this.root=d,this.opts=_,this.css=void 0,this.map=void 0}toString(){return this.css}warn(q,d={}){d.plugin||this.lastPlugin&&this.lastPlugin.postcssPlugin&&(d.plugin=this.lastPlugin.postcssPlugin);let _=new y(q,d);return this.messages.push(_),_}warnings(){return this.messages.filter(q=>q.type==="warning")}}return result=R,R.default=R,result}var lazyResult,hasRequiredLazyResult;function requireLazyResult(){if(hasRequiredLazyResult)return lazyResult;hasRequiredLazyResult=1;let y=requireContainer$1(),R=requireDocument(),E=requireMapGenerator(),q=requireParse$1(),d=requireResult(),_=requireRoot(),b=requireStringify(),{isClean:w,my:O}=requireSymbols();const A={atrule:"AtRule",comment:"Comment",decl:"Declaration",document:"Document",root:"Root",rule:"Rule"},S={AtRule:!0,AtRuleExit:!0,Comment:!0,CommentExit:!0,Declaration:!0,DeclarationExit:!0,Document:!0,DocumentExit:!0,Once:!0,OnceExit:!0,postcssPlugin:!0,prepare:!0,Root:!0,RootExit:!0,Rule:!0,RuleExit:!0},P={Once:!0,postcssPlugin:!0,prepare:!0},C=0;function M(z){return typeof z=="object"&&typeof z.then=="function"}function k(z){let V=!1,N=A[z.type];return z.type==="decl"?V=z.prop.toLowerCase():z.type==="atrule"&&(V=z.name.toLowerCase()),V&&z.append?[N,N+"-"+V,C,N+"Exit",N+"Exit-"+V]:V?[N,N+"-"+V,N+"Exit",N+"Exit-"+V]:z.append?[N,C,N+"Exit"]:[N,N+"Exit"]}function L(z){let V;return z.type==="document"?V=["Document",C,"DocumentExit"]:z.type==="root"?V=["Root",C,"RootExit"]:V=k(z),{eventIndex:0,events:V,iterator:0,node:z,visitorIndex:0,visitors:[]}}function I(z){return z[w]=!1,z.nodes&&z.nodes.forEach(V=>I(V)),z}let B={};class T{get content(){return this.stringify().content}get css(){return this.stringify().css}get map(){return this.stringify().map}get messages(){return this.sync().messages}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){return this.sync().root}get[Symbol.toStringTag](){return"LazyResult"}constructor(V,N,U){this.stringified=!1,this.processed=!1;let x;if(typeof N=="object"&&N!==null&&(N.type==="root"||N.type==="document"))x=I(N);else if(N instanceof T||N instanceof d)x=I(N.root),N.map&&(typeof U.map>"u"&&(U.map={}),U.map.inline||(U.map.inline=!1),U.map.prev=N.map);else{let K=q;U.syntax&&(K=U.syntax.parse),U.parser&&(K=U.parser),K.parse&&(K=K.parse);try{x=K(N,U)}catch(F){this.processed=!0,this.error=F}x&&!x[O]&&y.rebuild(x)}this.result=new d(V,x,U),this.helpers={...B,postcss:B,result:this.result},this.plugins=this.processor.plugins.map(K=>typeof K=="object"&&K.prepare?{...K,...K.prepare(this.result)}:K)}async(){return this.error?Promise.reject(this.error):this.processed?Promise.resolve(this.result):(this.processing||(this.processing=this.runAsync()),this.processing)}catch(V){return this.async().catch(V)}finally(V){return this.async().then(V,V)}getAsyncError(){throw new Error("Use process(css).then(cb) to work with async plugins")}handleError(V,N){let U=this.result.lastPlugin;try{N&&N.addToError(V),this.error=V,V.name==="CssSyntaxError"&&!V.plugin?(V.plugin=U.postcssPlugin,V.setMessage()):U.postcssVersion}catch(x){console&&console.error&&console.error(x)}return V}prepareVisitors(){this.listeners={};let V=(N,U,x)=>{this.listeners[U]||(this.listeners[U]=[]),this.listeners[U].push([N,x])};for(let N of this.plugins)if(typeof N=="object")for(let U in N){if(!S[U]&&/^[A-Z]/.test(U))throw new Error(`Unknown event ${U} in ${N.postcssPlugin}. Try to update PostCSS (${this.processor.version} now).`);if(!P[U])if(typeof N[U]=="object")for(let x in N[U])x==="*"?V(N,U,N[U][x]):V(N,U+"-"+x.toLowerCase(),N[U][x]);else typeof N[U]=="function"&&V(N,U,N[U])}this.hasListener=Object.keys(this.listeners).length>0}async runAsync(){this.plugin=0;for(let V=0;V<this.plugins.length;V++){let N=this.plugins[V],U=this.runOnRoot(N);if(M(U))try{await U}catch(x){throw this.handleError(x)}}if(this.prepareVisitors(),this.hasListener){let V=this.result.root;for(;!V[w];){V[w]=!0;let N=[L(V)];for(;N.length>0;){let U=this.visitTick(N);if(M(U))try{await U}catch(x){let K=N[N.length-1].node;throw this.handleError(x,K)}}}if(this.listeners.OnceExit)for(let[N,U]of this.listeners.OnceExit){this.result.lastPlugin=N;try{if(V.type==="document"){let x=V.nodes.map(K=>U(K,this.helpers));await Promise.all(x)}else await U(V,this.helpers)}catch(x){throw this.handleError(x)}}}return this.processed=!0,this.stringify()}runOnRoot(V){this.result.lastPlugin=V;try{if(typeof V=="object"&&V.Once){if(this.result.root.type==="document"){let N=this.result.root.nodes.map(U=>V.Once(U,this.helpers));return M(N[0])?Promise.all(N):N}return V.Once(this.result.root,this.helpers)}else if(typeof V=="function")return V(this.result.root,this.result)}catch(N){throw this.handleError(N)}}stringify(){if(this.error)throw this.error;if(this.stringified)return this.result;this.stringified=!0,this.sync();let V=this.result.opts,N=b;V.syntax&&(N=V.syntax.stringify),V.stringifier&&(N=V.stringifier),N.stringify&&(N=N.stringify);let x=new E(N,this.result.root,this.result.opts).generate();return this.result.css=x[0],this.result.map=x[1],this.result}sync(){if(this.error)throw this.error;if(this.processed)return this.result;if(this.processed=!0,this.processing)throw this.getAsyncError();for(let V of this.plugins){let N=this.runOnRoot(V);if(M(N))throw this.getAsyncError()}if(this.prepareVisitors(),this.hasListener){let V=this.result.root;for(;!V[w];)V[w]=!0,this.walkSync(V);if(this.listeners.OnceExit)if(V.type==="document")for(let N of V.nodes)this.visitSync(this.listeners.OnceExit,N);else this.visitSync(this.listeners.OnceExit,V)}return this.result}then(V,N){return this.async().then(V,N)}toString(){return this.css}visitSync(V,N){for(let[U,x]of V){this.result.lastPlugin=U;let K;try{K=x(N,this.helpers)}catch(F){throw this.handleError(F,N.proxyOf)}if(N.type!=="root"&&N.type!=="document"&&!N.parent)return!0;if(M(K))throw this.getAsyncError()}}visitTick(V){let N=V[V.length-1],{node:U,visitors:x}=N;if(U.type!=="root"&&U.type!=="document"&&!U.parent){V.pop();return}if(x.length>0&&N.visitorIndex<x.length){let[F,D]=x[N.visitorIndex];N.visitorIndex+=1,N.visitorIndex===x.length&&(N.visitors=[],N.visitorIndex=0),this.result.lastPlugin=F;try{return D(U.toProxy(),this.helpers)}catch($){throw this.handleError($,U)}}if(N.iterator!==0){let F=N.iterator,D;for(;D=U.nodes[U.indexes[F]];)if(U.indexes[F]+=1,!D[w]){D[w]=!0,V.push(L(D));return}N.iterator=0,delete U.indexes[F]}let K=N.events;for(;N.eventIndex<K.length;){let F=K[N.eventIndex];if(N.eventIndex+=1,F===C){U.nodes&&U.nodes.length&&(U[w]=!0,N.iterator=U.getIterator());return}else if(this.listeners[F]){N.visitors=this.listeners[F];return}}V.pop()}walkSync(V){V[w]=!0;let N=k(V);for(let U of N)if(U===C)V.nodes&&V.each(x=>{x[w]||this.walkSync(x)});else{let x=this.listeners[U];if(x&&this.visitSync(x,V.toProxy()))return}}warnings(){return this.sync().warnings()}}return T.registerPostcss=z=>{B=z},lazyResult=T,T.default=T,_.registerLazyResult(T),R.registerLazyResult(T),lazyResult}var noWorkResult,hasRequiredNoWorkResult;function requireNoWorkResult(){if(hasRequiredNoWorkResult)return noWorkResult;hasRequiredNoWorkResult=1;let y=requireMapGenerator(),R=requireParse$1();const E=requireResult();let q=requireStringify();class d{get content(){return this.result.css}get css(){return this.result.css}get map(){return this.result.map}get messages(){return[]}get opts(){return this.result.opts}get processor(){return this.result.processor}get root(){if(this._root)return this._root;let b,w=R;try{b=w(this._css,this._opts)}catch(O){this.error=O}if(this.error)throw this.error;return this._root=b,b}get[Symbol.toStringTag](){return"NoWorkResult"}constructor(b,w,O){w=w.toString(),this.stringified=!1,this._processor=b,this._css=w,this._opts=O,this._map=void 0;let A,S=q;this.result=new E(this._processor,A,this._opts),this.result.css=w;let P=this;Object.defineProperty(this.result,"root",{get(){return P.root}});let C=new y(S,A,this._opts,w);if(C.isMap()){let[M,k]=C.generate();M&&(this.result.css=M),k&&(this.result.map=k)}else C.clearAnnotation(),this.result.css=C.css}async(){return this.error?Promise.reject(this.error):Promise.resolve(this.result)}catch(b){return this.async().catch(b)}finally(b){return this.async().then(b,b)}sync(){if(this.error)throw this.error;return this.result}then(b,w){return this.async().then(b,w)}toString(){return this._css}warnings(){return[]}}return noWorkResult=d,d.default=d,noWorkResult}var processor,hasRequiredProcessor;function requireProcessor(){if(hasRequiredProcessor)return processor;hasRequiredProcessor=1;let y=requireDocument(),R=requireLazyResult(),E=requireNoWorkResult(),q=requireRoot();class d{constructor(b=[]){this.version="8.5.3",this.plugins=this.normalize(b)}normalize(b){let w=[];for(let O of b)if(O.postcss===!0?O=O():O.postcss&&(O=O.postcss),typeof O=="object"&&Array.isArray(O.plugins))w=w.concat(O.plugins);else if(typeof O=="object"&&O.postcssPlugin)w.push(O);else if(typeof O=="function")w.push(O);else if(!(typeof O=="object"&&(O.parse||O.stringify)))throw new Error(O+" is not a PostCSS plugin");return w}process(b,w={}){return!this.plugins.length&&!w.parser&&!w.stringifier&&!w.syntax?new E(this,b,w):new R(this,b,w)}use(b){return this.plugins=this.plugins.concat(this.normalize([b])),this}}return processor=d,d.default=d,q.registerProcessor(d),y.registerProcessor(d),processor}var postcss_1,hasRequiredPostcss;function requirePostcss(){if(hasRequiredPostcss)return postcss_1;hasRequiredPostcss=1;let y=requireAtRule(),R=requireComment$1(),E=requireContainer$1(),q=requireCssSyntaxError(),d=requireDeclaration$1(),_=requireDocument(),b=requireFromJSON(),w=requireInput(),O=requireLazyResult(),A=requireList$1(),S=requireNode$1(),P=requireParse$1(),C=requireProcessor(),M=requireResult(),k=requireRoot(),L=requireRule(),I=requireStringify(),B=requireWarning();function T(...z){return z.length===1&&Array.isArray(z[0])&&(z=z[0]),new C(z)}return T.plugin=function(V,N){let U=!1;function x(...F){console&&console.warn&&!U&&(U=!0,console.warn(V+`: postcss.plugin was deprecated. Migration guide: https://evilmartians.com/chronicles/postcss-8-plugin-migration`),process.env.LANG&&process.env.LANG.startsWith("cn")&&console.warn(V+`: \u91CC\u9762 postcss.plugin \u88AB\u5F03\u7528. \u8FC1\u79FB\u6307\u5357: https://www.w3ctech.com/topic/2226`));let D=N(...F);return D.postcssPlugin=V,D.postcssVersion=new C().version,D}let K;return Object.defineProperty(x,"postcss",{get(){return K||(K=x()),K}}),x.process=function(F,D,$){return T([x($)]).process(F,D)},x},T.stringify=I,T.parse=P,T.fromJSON=b,T.list=A,T.comment=z=>new R(z),T.atRule=z=>new y(z),T.decl=z=>new d(z),T.rule=z=>new L(z),T.root=z=>new k(z),T.document=z=>new _(z),T.CssSyntaxError=q,T.Declaration=d,T.Container=E,T.Processor=C,T.Document=_,T.Comment=R,T.Warning=B,T.AtRule=y,T.Result=M,T.Input=w,T.Rule=L,T.Root=k,T.Node=S,O.registerPostcss(T),postcss_1=T,T.default=T,postcss_1}var directiveParser,hasRequiredDirectiveParser;function requireDirectiveParser(){return hasRequiredDirectiveParser||(hasRequiredDirectiveParser=1,directiveParser=y=>{const R=y.text.match(/^\s*!?\s*rtl:/);if(!R)return;let E=y.text.slice(R[0].length),q=E.indexOf(":");const d={source:y,name:"",param:"",begin:!0,end:!0,blacklist:!1,preserve:!1};return q!==-1?(d.name=E.slice(0,q),d.begin=d.name!=="end",d.end=d.name!=="begin",d.name==="begin"||d.name==="end"?(E=E.slice(d.name.length+1),q=E.indexOf(":"),q!==-1?(d.name=E.slice(0,q),d.param=E.slice(q+1)):d.name=E):d.param=E.slice(q+1)):d.name=E,d}),directiveParser}var state,hasRequiredState;function requireState(){if(hasRequiredState)return state;hasRequiredState=1;const y=requireDirectiveParser();return state={stack:[],pop(R){const E=this.stack.indexOf(R);E!==-1&&this.stack.splice(E,1),R.preserve||R.source.remove()},parse(R,E,q){const d=y(R);if(!d)return;let _;!d.begin&&d.end?this.walk(b=>{if(d.name===b.metadata.name)return this.pop(b),_={metadata:d,directive:b.directive,source:R,preserve:b.preserve},!1}):_={metadata:d,directive:null,source:R,preserve:null},_===void 0?E.warn(`found end "${d.name}" without a matching begin.`,{node:R}):q(_)?this.stack.push(_):_.preserve||_.source.remove()},walk(R){let E=this.stack.length;for(;--E>-1&&R(this.stack[E]););}},state}var config={},util={exports:{}},hasRequiredUtil;function requireUtil(){if(hasRequiredUtil)return util.exports;hasRequiredUtil=1;let y,R=0;const E="\uFFFD",q="\xA4",d="\xAB",_="\xBB",b=new RegExp(E,"ig"),w=new RegExp(q,"ig"),O="\\-?(\\d*?\\.\\d+|\\d+)",A="(calc"+q+")|("+O+")(?!d\\()",S=d+"\\d+:\\d+"+_,P="\\w*?"+d+"\\d+:\\d+"+_,C=/\/\*[^]*?\*\//igm,M=/\/\*\s*!?\s*rtl:[^]*?\*\//img,k=/[.*+?^${}()|[\]\\]/g,L=/\([^()]+\)/i,I=/#[a-f0-9]{3,8}/ig,B=/calc/,T=new RegExp(S,"ig"),z=new RegExp(P,"ig"),V=new RegExp(A,"i"),N=new RegExp(A,"ig"),U=new RegExp(A,"i"),x={scope:"*",ignoreCase:!0};function K(D,$,G){return G?D.toLowerCase()===$.toLowerCase():D===$}function F(D){return D.replace(k,"\\$&")}return util.exports={extend(D,$){(typeof D>"u"||typeof D!="object")&&(D={});for(const G in $)Object.prototype.hasOwnProperty.call(D,G)||(D[G]=$[G]);return D},swap(D,$,G,j=x){let W=`${F($)}|${F(G)}`;(Object.prototype.hasOwnProperty.call(j,"greedy")?j.greedy:y.greedy)||(W=`\\b(${W})\\b`);const Y=j.ignoreCase?"img":"mg";return D.replace(new RegExp(W,Y),te=>K(te,$,j.ignoreCase)?G:$)},swapLeftRight(D){return this.swap(D,"left","right")},swapLtrRtl(D){return this.swap(D,"ltr","rtl")},applyStringMap(D,$){let G=D;for(const j of y.stringMap){const W=this.extend(j.options,x);if(W.scope==="*"||$&&W.scope==="url"||!$&&W.scope==="selector"){if(Array.isArray(j.search)&&Array.isArray(j.replace))for(let H=0;H<j.search.length;H++)G=this.swap(G,j.search[H],j.replace[H%j.search.length],W);else G=this.swap(G,j.search,j.replace,W);if(j.exclusive===!0)break}}return G},negate(D){const $=this.saveTokens(D);return $.value=$.value.replace(U,G=>w.test(G)?G.replace(w,j=>"(-1*"+j+")"):Number.parseFloat(G)*-1),this.restoreTokens($)},negateAll(D){const $=this.saveTokens(D);return $.value=$.value.replace(N,G=>w.test(G)?G.replace(w,j=>"(-1*"+j+")"):Number.parseFloat(G)*-1),this.restoreTokens($)},complement(D){const $=this.saveTokens(D);return $.value=$.value.replace(V,G=>w.test(G)?G.replace(w,j=>"(100% - "+j+")"):100-Number.parseFloat(G)),this.restoreTokens($)},flipLength(D){return y.useCalc?`calc(100% - ${D})`:D},save(D,$,G,j,W){const H={value:$,store:[],replacement:G,restorer:j};return H.value=H.value.replace(D,Y=>W&&W.test(Y)?Y:(H.store.push(Y),H.replacement)),H},restore(D){let $=0;const G=D.value.replace(D.restorer,()=>D.store[$++]);return D.store.length=0,G},saveComments(D){return this.save(C,D,E,b)},restoreComments(D){return this.restore(D)},saveTokens(D,$){return $===!0?this.save(z,D,q,w,B):this.save(T,D,q,w)},restoreTokens(D){return this.restore(D)},guard(D,$){const G={value:$,store:[],offset:R++,token:d+R};for(;D.test(G.value);)G.value=G.value.replace(D,j=>(G.store.push(j),`${G.token}:${G.store.length}${_}`));return G},unguard(D,$){const G=new RegExp("(\\w*?)"+D.token+":(\\d+)"+_,"i");for(;G.test(D.value);)D.value=D.value.replace(G,(j,W,H)=>{const Y=D.store[H-1];return typeof $=="function"?W+$(Y,W):W+Y});return D.value},guardHexColors(D){return this.guard(I,D)},unguardHexColors(D,$){return this.unguard(D,$)},guardFunctions(D){return this.guard(L,D)},unguardFunctions(D,$){return this.unguard(D,$)},trimDirective(D){return D.replace(M,"")},regexCache:{},regexDirective(D){return this.regexCache[D]=this.regexCache[D]||new RegExp("(?:\\/\\*\\s*(?:!)?\\s*rtl:"+(D?F(D)+"(?::)?":"")+")([^]*?)(?:\\*\\/)","img"),this.regexCache[D]},regex(D,$){let G="";for(const j of D)switch(j){case"percent":G+=`|(${O}%)`;break;case"length":G+=`|(${O})(?:ex|ch|r?em|vh|vw|vmin|vmax|px|mm|cm|in|pt|pc)?`;break;case"number":G+=`|(${O})`;break;case"position":G+="|(left|center|right|top|bottom)";break;case"calc":G+=`|(calc${S})`;break;case"func":G+=`|(\\w+${S})`;break}return new RegExp(G.slice(1),$)},isLastOfType(D){let $=!0,G=D.next();for(;G;){if(G.type===D.type){$=!1;break}G=G.next()}return $},each(D,$){return!D.some(G=>$(G)===!1)}},util.exports.configure=function(D){return y=D,this},util.exports}var plugin,hasRequiredPlugin;function requirePlugin(){if(hasRequiredPlugin)return plugin;hasRequiredPlugin=1;const config=requireConfig(),util=requireUtil();return plugin={name:"rtlcss",priority:100,directives:{control:{ignore:{expect:{atrule:!0,comment:!0,decl:!0,rule:!0},endNode:null,begin(y,R,E){if(this.endNode===null&&R.begin&&R.end){let q=y;for(;q&&q.nodes;)q=q.nodes[q.nodes.length-1];this.endNode=q}return y.type!=="comment"||!/^\s*!?\s*rtl:end:ignore/.test(y.text)},end(y,R,E){return R.begin!==R.end&&y.type==="comment"||R.begin&&R.end&&y===this.endNode?(this.endNode=null,!0):!1}},rename:{expect:{rule:!0},begin(y,R,E){return y.selector=E.util.applyStringMap(y.selector,!1),!1},end(y,R){return!0}},raw:{expect:{self:!0},begin(y,R,E){const q=E.postcss.parse(R.param,{from:y.source.input.from});return q.walk(d=>{d[E.symbol]=!0}),y.parent.insertBefore(y,q),!0},end(y,R){return!0}},remove:{expect:{atrule:!0,rule:!0,decl:!0},begin(y,R,E){let q=!1;switch(y.type){case"atrule":case"rule":case"decl":q=!0,y.remove()}return q},end(y,R,E){return!0}},options:{expect:{self:!0},stack:[],begin(y,R,E){this.stack.push(util.extend({},E.config));let q;try{q=JSON.parse(R.param)}catch(d){throw y.error("Invalid options object",{details:d})}return E.config=config.configure(q,E.config.plugins),E.util=util.configure(E.config),!0},end(y,R,E){const q=this.stack.pop();return q&&!R.begin&&(E.config=q,E.util=util.configure(E.config)),!0}},config:{expect:{self:!0},stack:[],begin(node,metadata,context){this.stack.push(util.extend({},context.config));let configuration;try{configuration=eval(`(${metadata.param})`)}catch(y){throw node.error("Invalid config object",{details:y})}return context.config=config.configure(configuration.options,configuration.plugins),context.util=util.configure(context.config),!0},end(y,R,E){const q=this.stack.pop();return q&&!R.begin&&(E.config=q,E.util=util.configure(E.config)),!0}}},value:[{name:"ignore",action(y,R,E){return!0}},{name:"prepend",action(y,R,E){let q="";const d=y.raws.value&&y.raws.value.raw;return`${y.raws.between.substr(1).trim()}${d?y.raws.value.raw:y.value}${y.important?y.raws.important.substr(9).trim():""}`.replace(R,(b,w)=>{q+=w}),y.value=d?y.raws.value.raw=q+y.raws.value.raw:q+y.value,!0}},{name:"append",action(y,R,E){let q="";const d=y.raws.value&&y.raws.value.raw;return`${y.raws.between.substr(1).trim()}${d?y.raws.value.raw:y.value}${y.important?y.raws.important.substr(9).trim():""}`.replace(R,(b,w)=>{q=w+q}),y.value=d?y.raws.value.raw+=q:y.value+q,!0}},{name:"insert",action(y,R,E){const q=y.raws.value&&y.raws.value.raw,_=`${y.raws.between.substr(1).trim()}${q?y.raws.value.raw:y.value}${y.important?y.raws.important.substr(9).trim():""}`.replace(R,(b,w)=>w+b);return y.value=q?y.raws.value.raw=_:_,!0}},{name:"",action(y,R,E){const q=y.raws.value&&y.raws.value.raw;return`${y.raws.between.substr(1).trim()}${q?y.raws.value.raw:""}${y.important?y.raws.important.substr(9).trim():""}`.replace(R,(_,b)=>{y.value=q?y.raws.value.raw=b+_:b}),!0}}]},processors:[{name:"variable",expr:/^--/im,action(y,R){return{prop:y,value:R}}},{name:"direction",expr:/direction/im,action(y,R,E){return{prop:y,value:E.util.swapLtrRtl(R)}}},{name:"left",expr:/left/im,action(y,R,E){return{prop:y.replace(this.expr,"right"),value:R}}},{name:"right",expr:/right/im,action(y,R,E){return{prop:y.replace(this.expr,"left"),value:R}}},{name:"four-value syntax",expr:/^(margin|padding|border-(color|style|width))$/ig,cache:null,action(y,R,E){this.cache===null&&(this.cache={match:/[^\s\uFFFD]+/g});const q=E.util.guardFunctions(R),d=q.value.match(this.cache.match);if(d&&d.length===4&&(q.store.length>0||d[1]!==d[3])){let _=0;q.value=q.value.replace(this.cache.match,()=>d[(4-_++)%4])}return{prop:y,value:E.util.unguardFunctions(q)}}},{name:"border radius",expr:/border-radius/ig,cache:null,flip(y){const R=y.match(this.cache.match);if(!R)return y;let E;switch(R.length){case 2:E=1,R[0]!==R[1]&&(y=y.replace(this.cache.match,()=>R[E--]));break;case 3:y=y.replace(this.cache.white,q=>`${q+R[1]} `);break;case 4:E=0,(R[0]!==R[1]||R[2]!==R[3])&&(y=y.replace(this.cache.match,()=>R[(5-E++)%4]));break}return y},action(y,R,E){this.cache===null&&(this.cache={match:/[^\s\uFFFD]+/g,slash:/[^/]+/g,white:/(^\s*)/});const q=E.util.guardFunctions(R);return q.value=q.value.replace(this.cache.slash,d=>this.flip(d)),{prop:y,value:E.util.unguardFunctions(q)}}},{name:"shadow",expr:/shadow/ig,cache:null,action(y,R,E){this.cache===null&&(this.cache={replace:/[^,]+/g});const q=E.util.guardHexColors(R),d=E.util.guardFunctions(q.value);return d.value=d.value.replace(this.cache.replace,_=>E.util.negate(_)),q.value=E.util.unguardFunctions(d),{prop:y,value:E.util.unguardHexColors(q)}}},{name:"transform and perspective origin",expr:/(?:transform|perspective)-origin/ig,cache:null,flip(y,R){return y==="0"?y="100%":y.match(this.cache.percent)?y=R.util.complement(y):y.match(this.cache.length)&&(y=R.util.flipLength(y)),y},action(y,R,E){if(this.cache===null&&(this.cache={match:E.util.regex(["func","percent","length"],"g"),percent:E.util.regex(["func","percent"],"i"),length:E.util.regex(["length"],"gi"),xKeyword:/(left|right|center)/i}),R.match(this.cache.xKeyword))R=E.util.swapLeftRight(R);else{const q=E.util.guardFunctions(R),d=q.value.match(this.cache.match);d&&d.length>0&&(d[0]=this.flip(d[0],E),q.value=q.value.replace(this.cache.match,()=>d.shift()),R=E.util.unguardFunctions(q))}return{prop:y,value:R}}},{name:"transform",expr:/^(?!text-).*?transform$/ig,cache:null,flip(y,R,E){let q=0;return y.replace(this.cache.unit,d=>R(++q,d))},flipMatrix(y,R){return this.flip(y,(E,q)=>E===2||E===3||E===5?R.util.negate(q):q,R)},flipMatrix3D(y,R){return this.flip(y,(E,q)=>E===2||E===4||E===5||E===13?R.util.negate(q):q,R)},flipRotate3D(y,R){return this.flip(y,(E,q)=>E===1||E===4?R.util.negate(q):q,R)},action(y,R,E){this.cache===null&&(this.cache={negatable:/((translate)(x|3d)?|rotate(z|y)?)$/ig,unit:E.util.regex(["func","number"],"g"),matrix:/matrix$/i,matrix3D:/matrix3d$/i,skewXY:/skew(x|y)?$/i,rotate3D:/rotate3d$/i});const q=E.util.guardFunctions(R);return{prop:y,value:E.util.unguardFunctions(q,(d,_)=>(_.length===0||(_.match(this.cache.matrix3D)?d=this.flipMatrix3D(d,E):_.match(this.cache.matrix)?d=this.flipMatrix(d,E):_.match(this.cache.rotate3D)?d=this.flipRotate3D(d,E):_.match(this.cache.skewXY)?d=E.util.negateAll(d):_.match(this.cache.negatable)&&(d=E.util.negate(d))),d))}}},{name:"transition",expr:/transition(-property)?$/i,action(y,R,E){return{prop:y,value:E.util.swapLeftRight(R)}}},{name:"background",expr:/(background|object)(-position(-x)?|-image)?$/i,cache:null,flip(y,R,E){const q=util.saveTokens(y,!0),d=q.value.match(this.cache.match);if(!d||d.length===0)return util.restoreTokens(q);const _=(q.value.match(this.cache.position)||"").length;return d.length>=3||_===2?q.value=util.swapLeftRight(q.value):(d[0]==="0"?d[0]="100%":d[0].match(this.cache.percent)?d[0]=R.util.complement(d[0]):d[0].match(this.cache.length)?E?d[0]=R.util.flipLength(d[0]):d.length===1?d[0]=`right ${d[0]} top 50%`:!_&&d.length===2&&(d[0]=`right ${d[0]}`,d[1]=`top ${d[1]}`):d[0]=R.util.swapLeftRight(d[0]),q.value=q.value.replace(this.cache.match,()=>d.shift())),util.restoreTokens(q)},update(y,R,E){return E.match(this.cache.gradient)?(R=y.util.swapLeftRight(R),R.match(this.cache.angle)&&(R=y.util.negate(R))):(y.config.processUrls===!0||y.config.processUrls.decl===!0)&&E.match(this.cache.url)&&(R=y.util.applyStringMap(R,!0)),R},action(y,R,E){this.cache===null&&(this.cache={match:E.util.regex(["position","percent","length","calc"],"ig"),percent:E.util.regex(["func","percent"],"i"),position:E.util.regex(["position"],"g"),length:E.util.regex(["length"],"gi"),gradient:/gradient$/i,angle:/\d+(deg|g?rad|turn)/i,url:/^url/i});const q=E.util.guardHexColors(R),d=E.util.guardFunctions(q.value),_=d.value.split(","),b=y.toLowerCase();if(b!=="background-image")for(let w=0;w<_.length;w++)_[w]=this.flip(_[w],E,b.endsWith("-x"));return d.value=_.join(","),q.value=E.util.unguardFunctions(d,this.update.bind(this,E)),{prop:y,value:E.util.unguardHexColors(q)}}},{name:"keyword",expr:/float|clear|text-align|justify-(content|items|self)/i,action(y,R,E){return{prop:y,value:E.util.swapLeftRight(R)}}},{name:"cursor",expr:/cursor/i,cache:null,update(y,R,E){return(y.config.processUrls===!0||y.config.processUrls.decl===!0)&&E.match(this.cache.url)?y.util.applyStringMap(R,!0):R},flip(y){return y.replace(this.cache.replace,(R,E)=>R.replace(E,E.replace(this.cache.e,"*").replace(this.cache.w,"e").replace(this.cache.star,"w")))},action(y,R,E){this.cache===null&&(this.cache={replace:/\b(ne|nw|se|sw|nesw|nwse)-resize/ig,url:/^url/i,e:/e/i,w:/w/i,star:/\*/i});const q=E.util.guardFunctions(R);return q.value=q.value.split(",").map(d=>this.flip(d)).join(","),{prop:y,value:E.util.unguardFunctions(q,this.update.bind(this,E))}}}]},plugin}var hasRequiredConfig;function requireConfig(){if(hasRequiredConfig)return config;hasRequiredConfig=1;const y=requirePlugin(),R={autoRename:!1,autoRenameStrict:!1,blacklist:{},clean:!0,greedy:!1,processUrls:!1,stringMap:[],useCalc:!1,aliases:{},processEnv:!0};function E(b){return b.sort((w,O)=>w.priority-O.priority)}function q(b){if(!Array.isArray(b))return;let w=!1,O=!1;for(const A of b){if(w&&O)break;A.name==="left-right"?w=!0:A.name==="ltr-rtl"&&(O=!0)}return w||b.push({name:"left-right",priority:100,exclusive:!1,search:["left","Left","LEFT"],replace:["right","Right","RIGHT"],options:{scope:"*",ignoreCase:!1}}),O||b.push({name:"ltr-rtl",priority:100,exclusive:!1,search:["ltr","Ltr","LTR"],replace:["rtl","Rtl","RTL"],options:{scope:"*",ignoreCase:!1}}),E(b)}function d(b){const w=[];return(!b||!b.some(O=>O.name==="rtlcss"))&&w.push(y),E([...w,...b])}function _(b){const w={pre(){},post(){}};return typeof b.pre=="function"&&(w.pre=b.pre),typeof b.post=="function"&&(w.post=b.post),w}return config.configure=(b={},w=[],O={})=>{const A={...R,...b};return A.stringMap=q(A.stringMap),A.plugins=d(w),A.hooks=_(O),A},config}var hasRequiredRtlcss;function requireRtlcss(){if(hasRequiredRtlcss)return rtlcss$1.exports;hasRequiredRtlcss=1;const y=requirePostcss(),R=requireState(),E=requireConfig(),q=requireUtil();return rtlcss$1.exports=(d,_,b)=>{const w=Symbol("processed"),O=E.configure(d,_,b),A={postcss:y,config:O,util:q.configure(O),symbol:w};let S=0;const P={};function C(M,k){if(M[w])return!1;let L=!1;return R.walk(I=>{!I.metadata.blacklist&&I.directive.expect[M.type]&&(I.directive.begin(M,I.metadata,A)&&(L=!0),I.metadata.end&&I.directive.end(M,I.metadata,A)&&R.pop(I))}),M[w]=!0,!L}return{postcssPlugin:"rtlcss",Once(M){A.config.hooks.pre(M,y),C(M)},Rule(M){C(M)&&(S=0)},AtRule(M){C(M)&&(A.config.processUrls===!0||A.config.processUrls.atrule===!0)&&(M.params=A.util.applyStringMap(M.params,!0))},Comment(M,{result:k}){C(M)&&R.parse(M,k,L=>{let I=!0;return L.directive===null&&(L.preserve=!A.config.clean,A.util.each(A.config.plugins,B=>{const T=A.config.blacklist[B.name];if(T&&T[L.metadata.name]===!0)return L.metadata.blacklist=!0,L.metadata.end&&(I=!1),L.metadata.begin&&k.warn(`directive "${B.name}.${L.metadata.name}" is blacklisted.`,{node:L.source}),!1;if(L.directive=B.directives.control[L.metadata.name],L.directive)return!1})),L.directive?!L.metadata.begin&&L.metadata.end?(L.directive.end(M,L.metadata,A)&&R.pop(L),I=!1):L.directive.expect.self&&L.directive.begin(M,L.metadata,A)&&L.metadata.end&&L.directive.end(M,L.metadata,A)&&(I=!1):L.metadata.blacklist||(I=!1,k.warn(`unsupported directive "${L.metadata.name}".`,{node:L.source})),I})},Declaration(M,{result:k}){if(!C(M)||!A.util.each(A.config.plugins,I=>A.util.each(I.directives.value,B=>{const T=M.raws.value&&M.raws.value.raw,z=A.util.regexDirective(B.name);if(z.test(`${M.raws.between}${T?M.raws.value.raw:M.value}${M.important&&M.raws.important?M.raws.important:""}`)&&(z.lastIndex=0,B.action(M,z,A)))return A.config.clean&&(M.raws.between=A.util.trimDirective(M.raws.between),M.important&&M.raws.important&&(M.raws.important=A.util.trimDirective(M.raws.important)),M.value=T?M.raws.value.raw=A.util.trimDirective(M.raws.value.raw):A.util.trimDirective(M.value)),S++,!1}))||(A.util.each(A.config.plugins,I=>A.util.each(I.processors,B=>{const T=A.config.aliases[M.prop];if((T||M.prop).match(B.expr)){const z=M.raws.value&&M.raws.value.raw?M.raws.value.raw:M.value,V=A.util.saveComments(z);A.config.processEnv&&(V.value=A.util.swap(V.value,"safe-area-inset-left","safe-area-inset-right",{ignoreCase:!1}));const N=B.action(M.prop,V.value,A);return V.value=N.value,N.value=A.util.restoreComments(V),(!T&&N.prop!==M.prop||N.value!==z)&&(S++,M.prop=N.prop,M.value=N.value),!1}})),!(A.config.autoRename&&!S&&M.parent.type==="rule"&&A.util.isLastOfType(M))))return;const L=A.util.applyStringMap(M.parent.selector);if(A.config.autoRenameStrict===!0){const I=P[L];I?(I.selector=M.parent.selector,M.parent.selector=L):P[M.parent.selector]=M.parent}else M.parent.selector=L},OnceExit(M,{result:k}){R.walk(L=>{k.warn(`unclosed directive "${L.metadata.name}".`,{node:L.source})});for(const L of Object.values(P))k.warn("renaming skipped due to lack of a matching pair.",{node:L});A.config.hooks.post(M,y)}}},rtlcss$1.exports.postcss=!0,rtlcss$1.exports.process=function(d,_,b,w){return y([this(_,b,w)]).process(d).css},rtlcss$1.exports.configure=function(d={}){return y([this(d.options,d.plugins,d.hooks)])},rtlcss$1.exports}var rtlcssExports=requireRtlcss(),rtlcss=getDefaultExportFromCjs(rtlcssExports),less={},extendStatics=function(y,R){return extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(E,q){E.__proto__=q}||function(E,q){for(var d in q)Object.prototype.hasOwnProperty.call(q,d)&&(E[d]=q[d])},extendStatics(y,R)};function __extends(y,R){if(typeof R!="function"&&R!==null)throw new TypeError("Class extends value "+String(R)+" is not a constructor or null");extendStatics(y,R);function E(){this.constructor=y}y.prototype=R===null?Object.create(R):(E.prototype=R.prototype,new E)}var __assign=function(){return __assign=Object.assign||function(R){for(var E,q=1,d=arguments.length;q<d;q++){E=arguments[q];for(var _ in E)Object.prototype.hasOwnProperty.call(E,_)&&(R[_]=E[_])}return R},__assign.apply(this,arguments)};function __rest(y,R){var E={};for(var q in y)Object.prototype.hasOwnProperty.call(y,q)&&R.indexOf(q)<0&&(E[q]=y[q]);if(y!=null&&typeof Object.getOwnPropertySymbols=="function")for(var d=0,q=Object.getOwnPropertySymbols(y);d<q.length;d++)R.indexOf(q[d])<0&&Object.prototype.propertyIsEnumerable.call(y,q[d])&&(E[q[d]]=y[q[d]]);return E}function __decorate(y,R,E,q){var d=arguments.length,_=d<3?R:q===null?q=Object.getOwnPropertyDescriptor(R,E):q,b;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")_=Reflect.decorate(y,R,E,q);else for(var w=y.length-1;w>=0;w--)(b=y[w])&&(_=(d<3?b(_):d>3?b(R,E,_):b(R,E))||_);return d>3&&_&&Object.defineProperty(R,E,_),_}function __param(y,R){return function(E,q){R(E,q,y)}}function __esDecorate(y,R,E,q,d,_){function b(B){if(B!==void 0&&typeof B!="function")throw new TypeError("Function expected");return B}for(var w=q.kind,O=w==="getter"?"get":w==="setter"?"set":"value",A=!R&&y?q.static?y:y.prototype:null,S=R||(A?Object.getOwnPropertyDescriptor(A,q.name):{}),P,C=!1,M=E.length-1;M>=0;M--){var k={};for(var L in q)k[L]=L==="access"?{}:q[L];for(var L in q.access)k.access[L]=q.access[L];k.addInitializer=function(B){if(C)throw new TypeError("Cannot add initializers after decoration has completed");_.push(b(B||null))};var I=(0,E[M])(w==="accessor"?{get:S.get,set:S.set}:S[O],k);if(w==="accessor"){if(I===void 0)continue;if(I===null||typeof I!="object")throw new TypeError("Object expected");(P=b(I.get))&&(S.get=P),(P=b(I.set))&&(S.set=P),(P=b(I.init))&&d.unshift(P)}else(P=b(I))&&(w==="field"?d.unshift(P):S[O]=P)}A&&Object.defineProperty(A,q.name,S),C=!0}function __runInitializers(y,R,E){for(var q=arguments.length>2,d=0;d<R.length;d++)E=q?R[d].call(y,E):R[d].call(y);return q?E:void 0}function __propKey(y){return typeof y=="symbol"?y:"".concat(y)}function __setFunctionName(y,R,E){return typeof R=="symbol"&&(R=R.description?"[".concat(R.description,"]"):""),Object.defineProperty(y,"name",{configurable:!0,value:E?"".concat(E," ",R):R})}function __metadata(y,R){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(y,R)}function __awaiter(y,R,E,q){function d(_){return _ instanceof E?_:new E(function(b){b(_)})}return new(E||(E=Promise))(function(_,b){function w(S){try{A(q.next(S))}catch(P){b(P)}}function O(S){try{A(q.throw(S))}catch(P){b(P)}}function A(S){S.done?_(S.value):d(S.value).then(w,O)}A((q=q.apply(y,R||[])).next())})}function __generator(y,R){var E={label:0,sent:function(){if(_[0]&1)throw _[1];return _[1]},trys:[],ops:[]},q,d,_,b=Object.create((typeof Iterator=="function"?Iterator:Object).prototype);return b.next=w(0),b.throw=w(1),b.return=w(2),typeof Symbol=="function"&&(b[Symbol.iterator]=function(){return this}),b;function w(A){return function(S){return O([A,S])}}function O(A){if(q)throw new TypeError("Generator is already executing.");for(;b&&(b=0,A[0]&&(E=0)),E;)try{if(q=1,d&&(_=A[0]&2?d.return:A[0]?d.throw||((_=d.return)&&_.call(d),0):d.next)&&!(_=_.call(d,A[1])).done)return _;switch(d=0,_&&(A=[A[0]&2,_.value]),A[0]){case 0:case 1:_=A;break;case 4:return E.label++,{value:A[1],done:!1};case 5:E.label++,d=A[1],A=[0];continue;case 7:A=E.ops.pop(),E.trys.pop();continue;default:if(_=E.trys,!(_=_.length>0&&_[_.length-1])&&(A[0]===6||A[0]===2)){E=0;continue}if(A[0]===3&&(!_||A[1]>_[0]&&A[1]<_[3])){E.label=A[1];break}if(A[0]===6&&E.label<_[1]){E.label=_[1],_=A;break}if(_&&E.label<_[2]){E.label=_[2],E.ops.push(A);break}_[2]&&E.ops.pop(),E.trys.pop();continue}A=R.call(y,E)}catch(S){A=[6,S],d=0}finally{q=_=0}if(A[0]&5)throw A[1];return{value:A[0]?A[1]:void 0,done:!0}}}var __createBinding=Object.create?(function(y,R,E,q){q===void 0&&(q=E);var d=Object.getOwnPropertyDescriptor(R,E);(!d||("get"in d?!R.__esModule:d.writable||d.configurable))&&(d={enumerable:!0,get:function(){return R[E]}}),Object.defineProperty(y,q,d)}):(function(y,R,E,q){q===void 0&&(q=E),y[q]=R[E]});function __exportStar(y,R){for(var E in y)E!=="default"&&!Object.prototype.hasOwnProperty.call(R,E)&&__createBinding(R,y,E)}function __values(y){var R=typeof Symbol=="function"&&Symbol.iterator,E=R&&y[R],q=0;if(E)return E.call(y);if(y&&typeof y.length=="number")return{next:function(){return y&&q>=y.length&&(y=void 0),{value:y&&y[q++],done:!y}}};throw new TypeError(R?"Object is not iterable.":"Symbol.iterator is not defined.")}function __read(y,R){var E=typeof Symbol=="function"&&y[Symbol.iterator];if(!E)return y;var q=E.call(y),d,_=[],b;try{for(;(R===void 0||R-- >0)&&!(d=q.next()).done;)_.push(d.value)}catch(w){b={error:w}}finally{try{d&&!d.done&&(E=q.return)&&E.call(q)}finally{if(b)throw b.error}}return _}function __spread(){for(var y=[],R=0;R<arguments.length;R++)y=y.concat(__read(arguments[R]));return y}function __spreadArrays(){for(var y=0,R=0,E=arguments.length;R<E;R++)y+=arguments[R].length;for(var q=Array(y),d=0,R=0;R<E;R++)for(var _=arguments[R],b=0,w=_.length;b<w;b++,d++)q[d]=_[b];return q}function __spreadArray(y,R,E){if(E||arguments.length===2)for(var q=0,d=R.length,_;q<d;q++)(_||!(q in R))&&(_||(_=Array.prototype.slice.call(R,0,q)),_[q]=R[q]);return y.concat(_||Array.prototype.slice.call(R))}function __await(y){return this instanceof __await?(this.v=y,this):new __await(y)}function __asyncGenerator(y,R,E){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var q=E.apply(y,R||[]),d,_=[];return d=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),w("next"),w("throw"),w("return",b),d[Symbol.asyncIterator]=function(){return this},d;function b(M){return function(k){return Promise.resolve(k).then(M,P)}}function w(M,k){q[M]&&(d[M]=function(L){return new Promise(function(I,B){_.push([M,L,I,B])>1||O(M,L)})},k&&(d[M]=k(d[M])))}function O(M,k){try{A(q[M](k))}catch(L){C(_[0][3],L)}}function A(M){M.value instanceof __await?Promise.resolve(M.value.v).then(S,P):C(_[0][2],M)}function S(M){O("next",M)}function P(M){O("throw",M)}function C(M,k){M(k),_.shift(),_.length&&O(_[0][0],_[0][1])}}function __asyncDelegator(y){var R,E;return R={},q("next"),q("throw",function(d){throw d}),q("return"),R[Symbol.iterator]=function(){return this},R;function q(d,_){R[d]=y[d]?function(b){return(E=!E)?{value:__await(y[d](b)),done:!1}:_?_(b):b}:_}}function __asyncValues(y){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var R=y[Symbol.asyncIterator],E;return R?R.call(y):(y=typeof __values=="function"?__values(y):y[Symbol.iterator](),E={},q("next"),q("throw"),q("return"),E[Symbol.asyncIterator]=function(){return this},E);function q(_){E[_]=y[_]&&function(b){return new Promise(function(w,O){b=y[_](b),d(w,O,b.done,b.value)})}}function d(_,b,w,O){Promise.resolve(O).then(function(A){_({value:A,done:w})},b)}}function __makeTemplateObject(y,R){return Object.defineProperty?Object.defineProperty(y,"raw",{value:R}):y.raw=R,y}var __setModuleDefault=Object.create?(function(y,R){Object.defineProperty(y,"default",{enumerable:!0,value:R})}):function(y,R){y.default=R},ownKeys=function(y){return ownKeys=Object.getOwnPropertyNames||function(R){var E=[];for(var q in R)Object.prototype.hasOwnProperty.call(R,q)&&(E[E.length]=q);return E},ownKeys(y)};function __importStar(y){if(y&&y.__esModule)return y;var R={};if(y!=null)for(var E=ownKeys(y),q=0;q<E.length;q++)E[q]!=="default"&&__createBinding(R,y,E[q]);return __setModuleDefault(R,y),R}function __importDefault(y){return y&&y.__esModule?y:{default:y}}function __classPrivateFieldGet(y,R,E,q){if(E==="a"&&!q)throw new TypeError("Private accessor was defined without a getter");if(typeof R=="function"?y!==R||!q:!R.has(y))throw new TypeError("Cannot read private member from an object whose class did not declare it");return E==="m"?q:E==="a"?q.call(y):q?q.value:R.get(y)}function __classPrivateFieldSet(y,R,E,q,d){if(q==="m")throw new TypeError("Private method is not writable");if(q==="a"&&!d)throw new TypeError("Private accessor was defined without a setter");if(typeof R=="function"?y!==R||!d:!R.has(y))throw new TypeError("Cannot write private member to an object whose class did not declare it");return q==="a"?d.call(y,E):d?d.value=E:R.set(y,E),E}function __classPrivateFieldIn(y,R){if(R===null||typeof R!="object"&&typeof R!="function")throw new TypeError("Cannot use 'in' operator on non-object");return typeof y=="function"?R===y:y.has(R)}function __addDisposableResource(y,R,E){if(R!=null){if(typeof R!="object"&&typeof R!="function")throw new TypeError("Object expected.");var q,d;if(E){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");q=R[Symbol.asyncDispose]}if(q===void 0){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");q=R[Symbol.dispose],E&&(d=q)}if(typeof q!="function")throw new TypeError("Object not disposable.");d&&(q=function(){try{d.call(this)}catch(_){return Promise.reject(_)}}),y.stack.push({value:R,dispose:q,async:E})}else E&&y.stack.push({async:!0});return R}var _SuppressedError=typeof SuppressedError=="function"?SuppressedError:function(y,R,E){var q=new Error(E);return q.name="SuppressedError",q.error=y,q.suppressed=R,q};function __disposeResources(y){function R(_){y.error=y.hasError?new _SuppressedError(_,y.error,"An error was suppressed during disposal."):_,y.hasError=!0}var E,q=0;function d(){for(;E=y.stack.pop();)try{if(!E.async&&q===1)return q=0,y.stack.push(E),Promise.resolve().then(d);if(E.dispose){var _=E.dispose.call(E.value);if(E.async)return q|=2,Promise.resolve(_).then(d,function(b){return R(b),d()})}else q|=1}catch(b){R(b)}if(q===1)return y.hasError?Promise.reject(y.error):Promise.resolve();if(y.hasError)throw y.error}return d()}function __rewriteRelativeImportExtension(y,R){return typeof y=="string"&&/^\.\.?\//.test(y)?y.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i,function(E,q,d,_,b){return q?R?".jsx":".js":d&&(!_||!b)?E:d+_+"."+b.toLowerCase()+"js"}):y}var tslib_es6={__extends,__assign,__rest,__decorate,__param,__esDecorate,__runInitializers,__propKey,__setFunctionName,__metadata,__awaiter,__generator,__createBinding,__exportStar,__values,__read,__spread,__spreadArrays,__spreadArray,__await,__asyncGenerator,__asyncDelegator,__asyncValues,__makeTemplateObject,__importStar,__importDefault,__classPrivateFieldGet,__classPrivateFieldSet,__classPrivateFieldIn,__addDisposableResource,__disposeResources,__rewriteRelativeImportExtension},tslib_es6$1=Object.freeze({__proto__:null,__addDisposableResource,get __assign(){return __assign},__asyncDelegator,__asyncGenerator,__asyncValues,__await,__awaiter,__classPrivateFieldGet,__classPrivateFieldIn,__classPrivateFieldSet,__createBinding,__decorate,__disposeResources,__esDecorate,__exportStar,__extends,__generator,__importDefault,__importStar,__makeTemplateObject,__metadata,__param,__propKey,__read,__rest,__rewriteRelativeImportExtension,__runInitializers,__setFunctionName,__spread,__spreadArray,__spreadArrays,__values,default:tslib_es6}),require$$0$1=getAugmentedNamespace(tslib_es6$1),environment={},logger={},hasRequiredLogger;function requireLogger(){return hasRequiredLogger||(hasRequiredLogger=1,Object.defineProperty(logger,"__esModule",{value:!0}),logger.default={error:function(y){this._fireEvent("error",y)},warn:function(y){this._fireEvent("warn",y)},info:function(y){this._fireEvent("info",y)},debug:function(y){this._fireEvent("debug",y)},addListener:function(y){this._listeners.push(y)},removeListener:function(y){for(var R=0;R<this._listeners.length;R++)if(this._listeners[R]===y){this._listeners.splice(R,1);return}},_fireEvent:function(y,R){for(var E=0;E<this._listeners.length;E++){var q=this._listeners[E][y];q&&q(R)}},_listeners:[]}),logger}var hasRequiredEnvironment;function requireEnvironment(){if(hasRequiredEnvironment)return environment;hasRequiredEnvironment=1,Object.defineProperty(environment,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireLogger()),E=(function(){function q(d,_){this.fileManagers=_||[],d=d||{};for(var b=["encodeBase64","mimeLookup","charsetLookup","getSourceMapGenerator"],w=[],O=w.concat(b),A=0;A<O.length;A++){var S=O[A],P=d[S];P?this[S]=P.bind(d):A<w.length&&this.warn("missing required function in environment - ".concat(S))}}return q.prototype.getFileManager=function(d,_,b,w,O){d||R.default.warn("getFileManager called with no filename.. Please report this issue. continuing."),_===void 0&&R.default.warn("getFileManager called with null directory.. Please report this issue. continuing.");var A=this.fileManagers;b.pluginManager&&(A=[].concat(A).concat(b.pluginManager.getFileManagers()));for(var S=A.length-1;S>=0;S--){var P=A[S];if(P[O?"supportsSync":"supports"](d,_,b,w))return P}return null},q.prototype.addFileManager=function(d){this.fileManagers.push(d)},q.prototype.clearFileManagers=function(){this.fileManagers=[]},q})();return environment.default=E,environment}var data={},colors={},hasRequiredColors;function requireColors(){return hasRequiredColors||(hasRequiredColors=1,Object.defineProperty(colors,"__esModule",{value:!0}),colors.default={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",rebeccapurple:"#663399",red:"#ff0000",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"}),colors}var unitConversions={},hasRequiredUnitConversions;function requireUnitConversions(){return hasRequiredUnitConversions||(hasRequiredUnitConversions=1,Object.defineProperty(unitConversions,"__esModule",{value:!0}),unitConversions.default={length:{m:1,cm:.01,mm:.001,in:.0254,px:.0254/96,pt:.0254/72,pc:.0254/72*12},duration:{s:1,ms:.001},angle:{rad:1/(2*Math.PI),deg:1/360,grad:1/400,turn:1}}),unitConversions}var hasRequiredData;function requireData(){if(hasRequiredData)return data;hasRequiredData=1,Object.defineProperty(data,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireColors()),E=y.__importDefault(requireUnitConversions());return data.default={colors:R.default,unitConversions:E.default},data}var tree={},node={},hasRequiredNode;function requireNode(){if(hasRequiredNode)return node;hasRequiredNode=1,Object.defineProperty(node,"__esModule",{value:!0});var y=(function(){function R(){this.parent=null,this.visibilityBlocks=void 0,this.nodeVisible=void 0,this.rootNode=null,this.parsed=null}return Object.defineProperty(R.prototype,"currentFileInfo",{get:function(){return this.fileInfo()},enumerable:!1,configurable:!0}),Object.defineProperty(R.prototype,"index",{get:function(){return this.getIndex()},enumerable:!1,configurable:!0}),R.prototype.setParent=function(E,q){function d(_){_&&_ instanceof R&&(_.parent=q)}Array.isArray(E)?E.forEach(d):d(E)},R.prototype.getIndex=function(){return this._index||this.parent&&this.parent.getIndex()||0},R.prototype.fileInfo=function(){return this._fileInfo||this.parent&&this.parent.fileInfo()||{}},R.prototype.isRulesetLike=function(){return!1},R.prototype.toCSS=function(E){var q=[];return this.genCSS(E,{add:function(d,_,b){q.push(d)},isEmpty:function(){return q.length===0}}),q.join("")},R.prototype.genCSS=function(E,q){q.add(this.value)},R.prototype.accept=function(E){this.value=E.visit(this.value)},R.prototype.eval=function(){return this},R.prototype._operate=function(E,q,d,_){switch(q){case"+":return d+_;case"-":return d-_;case"*":return d*_;case"/":return d/_}},R.prototype.fround=function(E,q){var d=E&&E.numPrecision;return d?Number((q+2e-16).toFixed(d)):q},R.compare=function(E,q){if(E.compare&&!(q.type==="Quoted"||q.type==="Anonymous"))return E.compare(q);if(q.compare)return-q.compare(E);if(E.type!==q.type)return;if(E=E.value,q=q.value,!Array.isArray(E))return E===q?0:void 0;if(E.length===q.length){for(var d=0;d<E.length;d++)if(R.compare(E[d],q[d])!==0)return;return 0}},R.numericCompare=function(E,q){return E<q?-1:E===q?0:E>q?1:void 0},R.prototype.blocksVisibility=function(){return this.visibilityBlocks===void 0&&(this.visibilityBlocks=0),this.visibilityBlocks!==0},R.prototype.addVisibilityBlock=function(){this.visibilityBlocks===void 0&&(this.visibilityBlocks=0),this.visibilityBlocks=this.visibilityBlocks+1},R.prototype.removeVisibilityBlock=function(){this.visibilityBlocks===void 0&&(this.visibilityBlocks=0),this.visibilityBlocks=this.visibilityBlocks-1},R.prototype.ensureVisibility=function(){this.nodeVisible=!0},R.prototype.ensureInvisibility=function(){this.nodeVisible=!1},R.prototype.isVisible=function(){return this.nodeVisible},R.prototype.visibilityInfo=function(){return{visibilityBlocks:this.visibilityBlocks,nodeVisible:this.nodeVisible}},R.prototype.copyVisibilityInfo=function(E){E&&(this.visibilityBlocks=E.visibilityBlocks,this.nodeVisible=E.nodeVisible)},R})();return node.default=y,node}var color$1={},hasRequiredColor$1;function requireColor$1(){if(hasRequiredColor$1)return color$1;hasRequiredColor$1=1,Object.defineProperty(color$1,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireColors()),q=function(b,w,O){var A=this;Array.isArray(b)?this.rgb=b:b.length>=6?(this.rgb=[],b.match(/.{2}/g).map(function(S,P){P<3?A.rgb.push(parseInt(S,16)):A.alpha=parseInt(S,16)/255})):(this.rgb=[],b.split("").map(function(S,P){P<3?A.rgb.push(parseInt(S+S,16)):A.alpha=parseInt(S+S,16)/255})),this.alpha=this.alpha||(typeof w=="number"?w:1),typeof O<"u"&&(this.value=O)};q.prototype=Object.assign(new R.default,{type:"Color",luma:function(){var b=this.rgb[0]/255,w=this.rgb[1]/255,O=this.rgb[2]/255;return b=b<=.03928?b/12.92:Math.pow((b+.055)/1.055,2.4),w=w<=.03928?w/12.92:Math.pow((w+.055)/1.055,2.4),O=O<=.03928?O/12.92:Math.pow((O+.055)/1.055,2.4),.2126*b+.7152*w+.0722*O},genCSS:function(b,w){w.add(this.toCSS(b))},toCSS:function(b,w){var O=b&&b.compress&&!w,A,S,P,C=[];if(S=this.fround(b,this.alpha),this.value)if(this.value.indexOf("rgb")===0)S<1&&(P="rgba");else if(this.value.indexOf("hsl")===0)S<1?P="hsla":P="hsl";else return this.value;else S<1&&(P="rgba");switch(P){case"rgba":C=this.rgb.map(function(k){return d(Math.round(k),255)}).concat(d(S,1));break;case"hsla":C.push(d(S,1));case"hsl":A=this.toHSL(),C=[this.fround(b,A.h),"".concat(this.fround(b,A.s*100),"%"),"".concat(this.fround(b,A.l*100),"%")].concat(C)}if(P)return"".concat(P,"(").concat(C.join(",".concat(O?"":" ")),")");if(A=this.toRGB(),O){var M=A.split("");M[1]===M[2]&&M[3]===M[4]&&M[5]===M[6]&&(A="#".concat(M[1]).concat(M[3]).concat(M[5]))}return A},operate:function(b,w,O){for(var A=new Array(3),S=this.alpha*(1-O.alpha)+O.alpha,P=0;P<3;P++)A[P]=this._operate(b,w,this.rgb[P],O.rgb[P]);return new q(A,S)},toRGB:function(){return _(this.rgb)},toHSL:function(){var b=this.rgb[0]/255,w=this.rgb[1]/255,O=this.rgb[2]/255,A=this.alpha,S=Math.max(b,w,O),P=Math.min(b,w,O),C,M,k=(S+P)/2,L=S-P;if(S===P)C=M=0;else{switch(M=k>.5?L/(2-S-P):L/(S+P),S){case b:C=(w-O)/L+(w<O?6:0);break;case w:C=(O-b)/L+2;break;case O:C=(b-w)/L+4;break}C/=6}return{h:C*360,s:M,l:k,a:A}},toHSV:function(){var b=this.rgb[0]/255,w=this.rgb[1]/255,O=this.rgb[2]/255,A=this.alpha,S=Math.max(b,w,O),P=Math.min(b,w,O),C,M,k=S,L=S-P;if(S===0?M=0:M=L/S,S===P)C=0;else{switch(S){case b:C=(w-O)/L+(w<O?6:0);break;case w:C=(O-b)/L+2;break;case O:C=(b-w)/L+4;break}C/=6}return{h:C*360,s:M,v:k,a:A}},toARGB:function(){return _([this.alpha*255].concat(this.rgb))},compare:function(b){return b.rgb&&b.rgb[0]===this.rgb[0]&&b.rgb[1]===this.rgb[1]&&b.rgb[2]===this.rgb[2]&&b.alpha===this.alpha?0:void 0}}),q.fromKeyword=function(b){var w,O=b.toLowerCase();if(E.default.hasOwnProperty(O)?w=new q(E.default[O].slice(1)):O==="transparent"&&(w=new q([0,0,0],0)),w)return w.value=b,w};function d(b,w){return Math.min(Math.max(b,0),w)}function _(b){return"#".concat(b.map(function(w){return w=d(Math.round(w),255),(w<16?"0":"")+w.toString(16)}).join(""))}return color$1.default=q,color$1}var atrule={},selector={},element={},paren={},hasRequiredParen;function requireParen(){if(hasRequiredParen)return paren;hasRequiredParen=1,Object.defineProperty(paren,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=function(q){this.value=q};return E.prototype=Object.assign(new R.default,{type:"Paren",genCSS:function(q,d){d.add("("),this.value.genCSS(q,d),d.add(")")},eval:function(q){var d=new E(this.value.eval(q));return this.noSpacing&&(d.noSpacing=!0),d}}),paren.default=E,paren}var combinator={},hasRequiredCombinator;function requireCombinator(){if(hasRequiredCombinator)return combinator;hasRequiredCombinator=1,Object.defineProperty(combinator,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E={"":!0," ":!0,"|":!0},q=function(d){d===" "?(this.value=" ",this.emptyOrWhitespace=!0):(this.value=d?d.trim():"",this.emptyOrWhitespace=this.value==="")};return q.prototype=Object.assign(new R.default,{type:"Combinator",genCSS:function(d,_){var b=d.compress||E[this.value]?"":" ";_.add(b+this.value+b)}}),combinator.default=q,combinator}var hasRequiredElement;function requireElement(){if(hasRequiredElement)return element;hasRequiredElement=1,Object.defineProperty(element,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireParen()),q=y.__importDefault(requireCombinator()),d=function(_,b,w,O,A,S){this.combinator=_ instanceof q.default?_:new q.default(_),typeof b=="string"?this.value=b.trim():b?this.value=b:this.value="",this.isVariable=w,this._index=O,this._fileInfo=A,this.copyVisibilityInfo(S),this.setParent(this.combinator,this)};return d.prototype=Object.assign(new R.default,{type:"Element",accept:function(_){var b=this.value;this.combinator=_.visit(this.combinator),typeof b=="object"&&(this.value=_.visit(b))},eval:function(_){return new d(this.combinator,this.value.eval?this.value.eval(_):this.value,this.isVariable,this.getIndex(),this.fileInfo(),this.visibilityInfo())},clone:function(){return new d(this.combinator,this.value,this.isVariable,this.getIndex(),this.fileInfo(),this.visibilityInfo())},genCSS:function(_,b){b.add(this.toCSS(_),this.fileInfo(),this.getIndex())},toCSS:function(_){_=_||{};var b=this.value,w=_.firstSelector;return b instanceof E.default&&(_.firstSelector=!0),b=b.toCSS?b.toCSS(_):b,_.firstSelector=w,b===""&&this.combinator.value.charAt(0)==="&"?"":this.combinator.toCSS(_)+b}}),element.default=d,element}var lessError={},utils={},constants={},hasRequiredConstants;function requireConstants(){return hasRequiredConstants||(hasRequiredConstants=1,Object.defineProperty(constants,"__esModule",{value:!0}),constants.RewriteUrls=constants.Math=void 0,constants.Math={ALWAYS:0,PARENS_DIVISION:1,PARENS:2},constants.RewriteUrls={OFF:0,LOCAL:1,ALL:2}),constants}var dist={};function getType(y){return Object.prototype.toString.call(y).slice(8,-1)}function isUndefined(y){return getType(y)==="Undefined"}function isNull(y){return getType(y)==="Null"}function isPlainObject(y){return getType(y)!=="Object"?!1:y.constructor===Object&&Object.getPrototypeOf(y)===Object.prototype}function isObject(y){return isPlainObject(y)}function isEmptyObject(y){return isPlainObject(y)&&Object.keys(y).length===0}function isFullObject(y){return isPlainObject(y)&&Object.keys(y).length>0}function isAnyObject(y){return getType(y)==="Object"}function isObjectLike(y){return isAnyObject(y)}function isFunction(y){return typeof y=="function"}function isArray(y){return getType(y)==="Array"}function isFullArray(y){return isArray(y)&&y.length>0}function isEmptyArray(y){return isArray(y)&&y.length===0}function isString(y){return getType(y)==="String"}function isFullString(y){return isString(y)&&y!==""}function isEmptyString(y){return y===""}function isNumber(y){return getType(y)==="Number"&&!isNaN(y)}function isBoolean(y){return getType(y)==="Boolean"}function isRegExp(y){return getType(y)==="RegExp"}function isMap(y){return getType(y)==="Map"}function isWeakMap(y){return getType(y)==="WeakMap"}function isSet(y){return getType(y)==="Set"}function isWeakSet(y){return getType(y)==="WeakSet"}function isSymbol(y){return getType(y)==="Symbol"}function isDate(y){return getType(y)==="Date"&&!isNaN(y)}function isBlob(y){return getType(y)==="Blob"}function isFile(y){return getType(y)==="File"}function isPromise(y){return getType(y)==="Promise"}function isError(y){return getType(y)==="Error"}function isNaNValue(y){return getType(y)==="Number"&&isNaN(y)}function isPrimitive(y){return isBoolean(y)||isNull(y)||isUndefined(y)||isNumber(y)||isString(y)||isSymbol(y)}var isNullOrUndefined=isOneOf(isNull,isUndefined);function isOneOf(y,R,E,q,d){return function(_){return y(_)||R(_)||!!E&&E(_)||!!q&&q(_)||!!d&&d(_)}}function isType(y,R){if(!(R instanceof Function))throw new TypeError("Type must be a function");if(!Object.prototype.hasOwnProperty.call(R,"prototype"))throw new TypeError("Type is not a class");var E=R.name;return getType(y)===E||!!(y&&y.constructor===R)}var index_esm=Object.freeze({__proto__:null,getType,isAnyObject,isArray,isBlob,isBoolean,isDate,isEmptyArray,isEmptyObject,isEmptyString,isError,isFile,isFullArray,isFullObject,isFullString,isFunction,isMap,isNaNValue,isNull,isNullOrUndefined,isNumber,isObject,isObjectLike,isOneOf,isPlainObject,isPrimitive,isPromise,isRegExp,isSet,isString,isSymbol,isType,isUndefined,isWeakMap,isWeakSet}),require$$0=getAugmentedNamespace(index_esm),hasRequiredDist;function requireDist(){if(hasRequiredDist)return dist;hasRequiredDist=1,Object.defineProperty(dist,"__esModule",{value:!0});var y=require$$0;function R(q,d,_,b,w){const O={}.propertyIsEnumerable.call(b,d)?"enumerable":"nonenumerable";O==="enumerable"&&(q[d]=_),w&&O==="nonenumerable"&&Object.defineProperty(q,d,{value:_,enumerable:!1,writable:!0,configurable:!0})}function E(q,d={}){if(y.isArray(q))return q.map(w=>E(w,d));if(!y.isPlainObject(q))return q;const _=Object.getOwnPropertyNames(q),b=Object.getOwnPropertySymbols(q);return[..._,...b].reduce((w,O)=>{if(y.isArray(d.props)&&!d.props.includes(O))return w;const A=q[O],S=E(A,d);return R(w,O,S,q,d.nonenumerable),w},{})}return dist.copy=E,dist}var hasRequiredUtils;function requireUtils(){if(hasRequiredUtils)return utils;hasRequiredUtils=1,Object.defineProperty(utils,"__esModule",{value:!0}),utils.isNullOrUndefined=utils.flattenArray=utils.merge=utils.copyOptions=utils.defaults=utils.clone=utils.copyArray=utils.getLocation=void 0;var y=require$$0$1,R=y.__importStar(requireConstants()),E=requireDist();function q(P,C){for(var M=P+1,k=null,L=-1;--M>=0&&C.charAt(M)!==` `;)L++;return typeof P=="number"&&(k=(C.slice(0,P).match(/\n/g)||"").length),{line:k,column:L}}utils.getLocation=q;function d(P){var C,M=P.length,k=new Array(M);for(C=0;C<M;C++)k[C]=P[C];return k}utils.copyArray=d;function _(P){var C={};for(var M in P)Object.prototype.hasOwnProperty.call(P,M)&&(C[M]=P[M]);return C}utils.clone=_;function b(P,C){var M=C||{};if(!C._defaults){M={};var k=(0,E.copy)(P);M._defaults=k;var L=C?(0,E.copy)(C):{};Object.assign(M,k,L)}return M}utils.defaults=b;function w(P,C){if(C&&C._defaults)return C;var M=b(P,C);if(M.strictMath&&(M.math=R.Math.PARENS),M.relativeUrls&&(M.rewriteUrls=R.RewriteUrls.ALL),typeof M.math=="string")switch(M.math.toLowerCase()){case"always":M.math=R.Math.ALWAYS;break;case"parens-division":M.math=R.Math.PARENS_DIVISION;break;case"strict":case"parens":M.math=R.Math.PARENS;break;default:M.math=R.Math.PARENS}if(typeof M.rewriteUrls=="string")switch(M.rewriteUrls.toLowerCase()){case"off":M.rewriteUrls=R.RewriteUrls.OFF;break;case"local":M.rewriteUrls=R.RewriteUrls.LOCAL;break;case"all":M.rewriteUrls=R.RewriteUrls.ALL;break}return M}utils.copyOptions=w;function O(P,C){for(var M in C)Object.prototype.hasOwnProperty.call(C,M)&&(P[M]=C[M]);return P}utils.merge=O;function A(P,C){C===void 0&&(C=[]);for(var M=0,k=P.length;M<k;M++){var L=P[M];Array.isArray(L)?A(L,C):L!==void 0&&C.push(L)}return C}utils.flattenArray=A;function S(P){return P==null}return utils.isNullOrUndefined=S,utils}var hasRequiredLessError;function requireLessError(){if(hasRequiredLessError)return lessError;hasRequiredLessError=1,Object.defineProperty(lessError,"__esModule",{value:!0});var y=require$$0$1,R=y.__importStar(requireUtils()),E=/(<anonymous>|Function):(\d+):(\d+)/,q=function(_,b,w){Error.call(this);var O=_.filename||w;if(this.message=_.message,this.stack=_.stack,b&&O){var A=b.contents[O],S=R.getLocation(_.index,A),P=S.line,C=S.column,M=_.call&&R.getLocation(_.call,A).line,k=A?A.split(` `):"";if(this.type=_.type||"Syntax",this.filename=O,this.index=_.index,this.line=typeof P=="number"?P+1:null,this.column=C,!this.line&&this.stack){var L=this.stack.match(E),I=new Function("a","throw new Error()"),B=0;try{I()}catch(z){var T=z.stack.match(E);B=1-parseInt(T[2])}L&&(L[2]&&(this.line=parseInt(L[2])+B),L[3]&&(this.column=parseInt(L[3])))}this.callLine=M+1,this.callExtract=k[M],this.extract=[k[this.line-2],k[this.line-1],k[this.line]]}};if(typeof Object.create>"u"){var d=function(){};d.prototype=Error.prototype,q.prototype=new d}else q.prototype=Object.create(Error.prototype);return q.prototype.constructor=q,q.prototype.toString=function(_){var b;_=_||{};var w=((b=this.type)!==null&&b!==void 0?b:"").toLowerCase().includes("warning"),O=w?this.type:"".concat(this.type,"Error"),A=w?"yellow":"red",S="",P=this.extract||[],C=[],M=function(I){return I};if(_.stylize){var k=typeof _.stylize;if(k!=="function")throw Error("options.stylize should be a function, got a ".concat(k,"!"));M=_.stylize}if(this.line!==null){if(!w&&typeof P[0]=="string"&&C.push(M("".concat(this.line-1," ").concat(P[0]),"grey")),typeof P[1]=="string"){var L="".concat(this.line," ");P[1]&&(L+=P[1].slice(0,this.column)+M(M(M(P[1].substr(this.column,1),"bold")+P[1].slice(this.column+1),"red"),"inverse")),C.push(L)}!w&&typeof P[2]=="string"&&C.push(M("".concat(this.line+1," ").concat(P[2]),"grey")),C="".concat(C.join(` `)+M("","reset"),` `)}return S+=M("".concat(O,": ").concat(this.message),A),this.filename&&(S+=M(" in ",A)+this.filename),this.line&&(S+=M(" on line ".concat(this.line,", column ").concat(this.column+1,":"),"grey")),S+=` `.concat(C),this.callLine&&(S+="".concat(M("from ",A)+(this.filename||""),"/n"),S+="".concat(M(this.callLine,"grey")," ").concat(this.callExtract,"/n")),S},lessError.default=q,lessError}var parser={},visitors={},visitor={},hasRequiredVisitor;function requireVisitor(){if(hasRequiredVisitor)return visitor;hasRequiredVisitor=1,Object.defineProperty(visitor,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireTree()),E={visitDeeper:!0},q=!1;function d(w){return w}function _(w,O){var A,S;for(A in w)switch(S=w[A],typeof S){case"function":S.prototype&&S.prototype.type&&(S.prototype.typeIndex=O++);break;case"object":O=_(S,O);break}return O}var b=(function(){function w(O){this._implementation=O,this._visitInCache={},this._visitOutCache={},q||(_(R.default,1),q=!0)}return w.prototype.visit=function(O){if(!O)return O;var A=O.typeIndex;if(!A)return O.value&&O.value.typeIndex&&this.visit(O.value),O;var S=this._implementation,P=this._visitInCache[A],C=this._visitOutCache[A],M=E,k;if(M.visitDeeper=!0,P||(k="visit".concat(O.type),P=S[k]||d,C=S["".concat(k,"Out")]||d,this._visitInCache[A]=P,this._visitOutCache[A]=C),P!==d){var L=P.call(S,O,M);O&&S.isReplacing&&(O=L)}if(M.visitDeeper&&O)if(O.length)for(var I=0,B=O.length;I<B;I++)O[I].accept&&O[I].accept(this);else O.accept&&O.accept(this);return C!=d&&C.call(S,O),O},w.prototype.visitArray=function(O,A){if(!O)return O;var S=O.length,P;if(A||!this._implementation.isReplacing){for(P=0;P<S;P++)this.visit(O[P]);return O}var C=[];for(P=0;P<S;P++){var M=this.visit(O[P]);M!==void 0&&(M.splice?M.length&&this.flatten(M,C):C.push(M))}return C},w.prototype.flatten=function(O,A){A||(A=[]);var S,P,C,M,k,L;for(P=0,S=O.length;P<S;P++)if(C=O[P],C!==void 0){if(!C.splice){A.push(C);continue}for(k=0,M=C.length;k<M;k++)L=C[k],L!==void 0&&(L.splice?L.length&&this.flatten(L,A):A.push(L))}return A},w})();return visitor.default=b,visitor}var importVisitor={},contexts={},hasRequiredContexts;function requireContexts(){if(hasRequiredContexts)return contexts;hasRequiredContexts=1,Object.defineProperty(contexts,"__esModule",{value:!0});var y=require$$0$1,R={};contexts.default=R;var E=y.__importStar(requireConstants()),q=function(A,S,P){if(A)for(var C=0;C<P.length;C++)Object.prototype.hasOwnProperty.call(A,P[C])&&(S[P[C]]=A[P[C]])},d=["paths","rewriteUrls","rootpath","strictImports","insecure","dumpLineNumbers","compress","syncImport","chunkInput","mime","useFileCache","processImports","pluginManager","quiet"];R.Parse=function(O){q(O,this,d),typeof this.paths=="string"&&(this.paths=[this.paths])};var _=["paths","compress","math","strictUnits","sourceMap","importMultiple","urlArgs","javascriptEnabled","pluginManager","importantScope","rewriteUrls"];R.Eval=function(O,A){q(O,this,_),typeof this.paths=="string"&&(this.paths=[this.paths]),this.frames=A||[],this.importantScope=this.importantScope||[]},R.Eval.prototype.enterCalc=function(){this.calcStack||(this.calcStack=[]),this.calcStack.push(!0),this.inCalc=!0},R.Eval.prototype.exitCalc=function(){this.calcStack.pop(),this.calcStack.length||(this.inCalc=!1)},R.Eval.prototype.inParenthesis=function(){this.parensStack||(this.parensStack=[]),this.parensStack.push(!0)},R.Eval.prototype.outOfParenthesis=function(){this.parensStack.pop()},R.Eval.prototype.inCalc=!1,R.Eval.prototype.mathOn=!0,R.Eval.prototype.isMathOn=function(O){return!this.mathOn||O==="/"&&this.math!==E.Math.ALWAYS&&(!this.parensStack||!this.parensStack.length)?!1:this.math>E.Math.PARENS_DIVISION?this.parensStack&&this.parensStack.length:!0},R.Eval.prototype.pathRequiresRewrite=function(O){var A=this.rewriteUrls===E.RewriteUrls.LOCAL?w:b;return A(O)},R.Eval.prototype.rewritePath=function(O,A){var S;return A=A||"",S=this.normalizePath(A+O),w(O)&&b(A)&&w(S)===!1&&(S="./".concat(S)),S},R.Eval.prototype.normalizePath=function(O){var A=O.split("/").reverse(),S;for(O=[];A.length!==0;)switch(S=A.pop(),S){case".":break;case"..":O.length===0||O[O.length-1]===".."?O.push(S):O.pop();break;default:O.push(S);break}return O.join("/")};function b(O){return!/^(?:[a-z-]+:|\/|#)/i.test(O)}function w(O){return O.charAt(0)==="."}return contexts}var importSequencer={},hasRequiredImportSequencer;function requireImportSequencer(){if(hasRequiredImportSequencer)return importSequencer;hasRequiredImportSequencer=1,Object.defineProperty(importSequencer,"__esModule",{value:!0});var y=(function(){function R(E){this.imports=[],this.variableImports=[],this._onSequencerEmpty=E,this._currentDepth=0}return R.prototype.addImport=function(E){var q=this,d={callback:E,args:null,isReady:!1};return this.imports.push(d),function(){d.args=Array.prototype.slice.call(arguments,0),d.isReady=!0,q.tryRun()}},R.prototype.addVariableImport=function(E){this.variableImports.push(E)},R.prototype.tryRun=function(){this._currentDepth++;try{for(;;){for(;this.imports.length>0;){var E=this.imports[0];if(!E.isReady)return;this.imports=this.imports.slice(1),E.callback.apply(null,E.args)}if(this.variableImports.length===0)break;var q=this.variableImports[0];this.variableImports=this.variableImports.slice(1),q()}}finally{this._currentDepth--}this._currentDepth===0&&this._onSequencerEmpty&&this._onSequencerEmpty()},R})();return importSequencer.default=y,importSequencer}var hasRequiredImportVisitor;function requireImportVisitor(){if(hasRequiredImportVisitor)return importVisitor;hasRequiredImportVisitor=1,Object.defineProperty(importVisitor,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireContexts()),E=y.__importDefault(requireVisitor()),q=y.__importDefault(requireImportSequencer()),d=y.__importStar(requireUtils()),_=function(b,w){this._visitor=new E.default(this),this._importer=b,this._finish=w,this.context=new R.default.Eval,this.importCount=0,this.onceFileDetectionMap={},this.recursionDetector={},this._sequencer=new q.default(this._onSequencerEmpty.bind(this))};return _.prototype={isReplacing:!1,run:function(b){try{this._visitor.visit(b)}catch(w){this.error=w}this.isFinished=!0,this._sequencer.tryRun()},_onSequencerEmpty:function(){this.isFinished&&this._finish(this.error)},visitImport:function(b,w){var O=b.options.inline;if(!b.css||O){var A=new R.default.Eval(this.context,d.copyArray(this.context.frames)),S=A.frames[0];this.importCount++,b.isVariableImport()?this._sequencer.addVariableImport(this.processImportNode.bind(this,b,A,S)):this.processImportNode(b,A,S)}w.visitDeeper=!1},processImportNode:function(b,w,O){var A,S=b.options.inline;try{A=b.evalForImport(w)}catch(L){L.filename||(L.index=b.getIndex(),L.filename=b.fileInfo().filename),b.css=!0,b.error=L}if(A&&(!A.css||S)){A.options.multiple&&(w.importMultiple=!0);for(var P=A.css===void 0,C=0;C<O.rules.length;C++)if(O.rules[C]===b){O.rules[C]=A;break}var M=this.onImported.bind(this,A,w),k=this._sequencer.addImport(M);this._importer.push(A.getPath(),P,A.fileInfo(),A.options,k)}else this.importCount--,this.isFinished&&this._sequencer.tryRun()},onImported:function(b,w,O,A,S,P){O&&(O.filename||(O.index=b.getIndex(),O.filename=b.fileInfo().filename),this.error=O);var C=this,M=b.options.inline,k=b.options.isPlugin,L=b.options.optional,I=S||P in C.recursionDetector;if(w.importMultiple||(I?b.skip=!0:b.skip=function(){return P in C.onceFileDetectionMap?!0:(C.onceFileDetectionMap[P]=!0,!1)}),!P&&L&&(b.skip=!0),A&&(b.root=A,b.importedFilename=P,!M&&!k&&(w.importMultiple||!I))){C.recursionDetector[P]=!0;var B=this.context;this.context=w;try{this._visitor.visit(A)}catch(T){this.error=T}this.context=B}C.importCount--,C.isFinished&&C._sequencer.tryRun()},visitDeclaration:function(b,w){b.value.type==="DetachedRuleset"?this.context.frames.unshift(b):w.visitDeeper=!1},visitDeclarationOut:function(b){b.value.type==="DetachedRuleset"&&this.context.frames.shift()},visitAtRule:function(b,w){b.value?this.context.frames.unshift(b):b.declarations&&b.declarations.length?b.isRooted?this.context.frames.unshift(b):this.context.frames.unshift(b.declarations[0]):b.rules&&b.rules.length&&this.context.frames.unshift(b)},visitAtRuleOut:function(b){this.context.frames.shift()},visitMixinDefinition:function(b,w){this.context.frames.unshift(b)},visitMixinDefinitionOut:function(b){this.context.frames.shift()},visitRuleset:function(b,w){this.context.frames.unshift(b)},visitRulesetOut:function(b){this.context.frames.shift()},visitMedia:function(b,w){this.context.frames.unshift(b.rules[0])},visitMediaOut:function(b){this.context.frames.shift()}},importVisitor.default=_,importVisitor}var setTreeVisibilityVisitor={},hasRequiredSetTreeVisibilityVisitor;function requireSetTreeVisibilityVisitor(){if(hasRequiredSetTreeVisibilityVisitor)return setTreeVisibilityVisitor;hasRequiredSetTreeVisibilityVisitor=1,Object.defineProperty(setTreeVisibilityVisitor,"__esModule",{value:!0});var y=(function(){function R(E){this.visible=E}return R.prototype.run=function(E){this.visit(E)},R.prototype.visitArray=function(E){if(!E)return E;var q=E.length,d;for(d=0;d<q;d++)this.visit(E[d]);return E},R.prototype.visit=function(E){return E&&(E.constructor===Array?this.visitArray(E):(!E.blocksVisibility||E.blocksVisibility()||(this.visible?E.ensureVisibility():E.ensureInvisibility(),E.accept(this)),E))},R})();return setTreeVisibilityVisitor.default=y,setTreeVisibilityVisitor}var extendVisitor={},hasRequiredExtendVisitor;function requireExtendVisitor(){if(hasRequiredExtendVisitor)return extendVisitor;hasRequiredExtendVisitor=1,Object.defineProperty(extendVisitor,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireTree()),E=y.__importDefault(requireVisitor()),q=y.__importDefault(requireLogger()),d=y.__importStar(requireUtils()),_=(function(){function w(){this._visitor=new E.default(this),this.contexts=[],this.allExtendsStack=[[]]}return w.prototype.run=function(O){return O=this._visitor.visit(O),O.allExtends=this.allExtendsStack[0],O},w.prototype.visitDeclaration=function(O,A){A.visitDeeper=!1},w.prototype.visitMixinDefinition=function(O,A){A.visitDeeper=!1},w.prototype.visitRuleset=function(O,A){if(!O.root){var S,P,C,M=[],k,L=O.rules,I=L?L.length:0;for(S=0;S<I;S++)O.rules[S]instanceof R.default.Extend&&(M.push(L[S]),O.extendOnEveryPath=!0);var B=O.paths;for(S=0;S<B.length;S++){var T=B[S],z=T[T.length-1],V=z.extendList;for(k=V?d.copyArray(V).concat(M):M,k&&(k=k.map(function(N){return N.clone()})),P=0;P<k.length;P++)this.foundExtends=!0,C=k[P],C.findSelfSelectors(T),C.ruleset=O,P===0&&(C.firstExtendOnThisSelectorPath=!0),this.allExtendsStack[this.allExtendsStack.length-1].push(C)}this.contexts.push(O.selectors)}},w.prototype.visitRulesetOut=function(O){O.root||(this.contexts.length=this.contexts.length-1)},w.prototype.visitMedia=function(O,A){O.allExtends=[],this.allExtendsStack.push(O.allExtends)},w.prototype.visitMediaOut=function(O){this.allExtendsStack.length=this.allExtendsStack.length-1},w.prototype.visitAtRule=function(O,A){O.allExtends=[],this.allExtendsStack.push(O.allExtends)},w.prototype.visitAtRuleOut=function(O){this.allExtendsStack.length=this.allExtendsStack.length-1},w})(),b=(function(){function w(){this._visitor=new E.default(this)}return w.prototype.run=function(O){var A=new _;if(this.extendIndices={},A.run(O),!A.foundExtends)return O;O.allExtends=O.allExtends.concat(this.doExtendChaining(O.allExtends,O.allExtends)),this.allExtendsStack=[O.allExtends];var S=this._visitor.visit(O);return this.checkExtendsForNonMatched(O.allExtends),S},w.prototype.checkExtendsForNonMatched=function(O){var A=this.extendIndices;O.filter(function(S){return!S.hasFoundMatches&&S.parent_ids.length==1}).forEach(function(S){var P="_unknown_";try{P=S.selector.toCSS({})}catch{}A["".concat(S.index," ").concat(P)]||(A["".concat(S.index," ").concat(P)]=!0,q.default.warn("WARNING: extend '".concat(P,"' has no matches")))})},w.prototype.doExtendChaining=function(O,A,S){var P,C,M,k=[],L,I=this,B,T,z,V;for(S=S||0,P=0;P<O.length;P++)for(C=0;C<A.length;C++)T=O[P],z=A[C],!(T.parent_ids.indexOf(z.object_id)>=0)&&(B=[z.selfSelectors[0]],M=I.findMatch(T,B),M.length&&(T.hasFoundMatches=!0,T.selfSelectors.forEach(function(x){var K=z.visibilityInfo();L=I.extendSelector(M,B,x,T.isVisible()),V=new R.default.Extend(z.selector,z.option,0,z.fileInfo(),K),V.selfSelectors=L,L[L.length-1].extendList=[V],k.push(V),V.ruleset=z.ruleset,V.parent_ids=V.parent_ids.concat(z.parent_ids,T.parent_ids),z.firstExtendOnThisSelectorPath&&(V.firstExtendOnThisSelectorPath=!0,z.ruleset.paths.push(L))})));if(k.length){if(this.extendChainCount++,S>100){var N="{unable to calculate}",U="{unable to calculate}";try{N=k[0].selfSelectors[0].toCSS(),U=k[0].selector.toCSS()}catch{}throw{message:"extend circular reference detected. One of the circular extends is currently:".concat(N,":extend(").concat(U,")")}}return k.concat(I.doExtendChaining(k,A,S+1))}else return k},w.prototype.visitDeclaration=function(O,A){A.visitDeeper=!1},w.prototype.visitMixinDefinition=function(O,A){A.visitDeeper=!1},w.prototype.visitSelector=function(O,A){A.visitDeeper=!1},w.prototype.visitRuleset=function(O,A){if(!O.root){var S,P,C,M=this.allExtendsStack[this.allExtendsStack.length-1],k=[],L=this,I;for(C=0;C<M.length;C++)for(P=0;P<O.paths.length;P++)if(I=O.paths[P],!O.extendOnEveryPath){var B=I[I.length-1].extendList;B&&B.length||(S=this.findMatch(M[C],I),S.length&&(M[C].hasFoundMatches=!0,M[C].selfSelectors.forEach(function(T){var z;z=L.extendSelector(S,I,T,M[C].isVisible()),k.push(z)})))}O.paths=O.paths.concat(k)}},w.prototype.findMatch=function(O,A){var S,P,C,M,k,L,I=this,B=O.selector.elements,T=[],z,V=[];for(S=0;S<A.length;S++)for(P=A[S],C=0;C<P.elements.length;C++)for(M=P.elements[C],(O.allowBefore||S===0&&C===0)&&T.push({pathIndex:S,index:C,matched:0,initialCombinator:M.combinator}),L=0;L<T.length;L++)z=T[L],k=M.combinator.value,k===""&&C===0&&(k=" "),!I.isElementValuesEqual(B[z.matched].value,M.value)||z.matched>0&&B[z.matched].combinator.value!==k?z=null:z.matched++,z&&(z.finished=z.matched===B.length,z.finished&&!O.allowAfter&&(C+1<P.elements.length||S+1<A.length)&&(z=null)),z?z.finished&&(z.length=B.length,z.endPathIndex=S,z.endPathElementIndex=C+1,T.length=0,V.push(z)):(T.splice(L,1),L--);return V},w.prototype.isElementValuesEqual=function(O,A){if(typeof O=="string"||typeof A=="string")return O===A;if(O instanceof R.default.Attribute)return O.op!==A.op||O.key!==A.key?!1:!O.value||!A.value?!(O.value||A.value):(O=O.value.value||O.value,A=A.value.value||A.value,O===A);if(O=O.value,A=A.value,O instanceof R.default.Selector){if(!(A instanceof R.default.Selector)||O.elements.length!==A.elements.length)return!1;for(var S=0;S<O.elements.length;S++)if(O.elements[S].combinator.value!==A.elements[S].combinator.value&&(S!==0||(O.elements[S].combinator.value||" ")!==(A.elements[S].combinator.value||" "))||!this.isElementValuesEqual(O.elements[S].value,A.elements[S].value))return!1;return!0}return!1},w.prototype.extendSelector=function(O,A,S,P){var C=0,M=0,k=[],L,I,B,T,z;for(L=0;L<O.length;L++)T=O[L],I=A[T.pathIndex],B=new R.default.Element(T.initialCombinator,S.elements[0].value,S.elements[0].isVariable,S.elements[0].getIndex(),S.elements[0].fileInfo()),T.pathIndex>C&&M>0&&(k[k.length-1].elements=k[k.length-1].elements.concat(A[C].elements.slice(M)),M=0,C++),z=I.elements.slice(M,T.index).concat([B]).concat(S.elements.slice(1)),C===T.pathIndex&&L>0?k[k.length-1].elements=k[k.length-1].elements.concat(z):(k=k.concat(A.slice(C,T.pathIndex)),k.push(new R.default.Selector(z))),C=T.endPathIndex,M=T.endPathElementIndex,M>=A[C].elements.length&&(M=0,C++);return C<A.length&&M>0&&(k[k.length-1].elements=k[k.length-1].elements.concat(A[C].elements.slice(M)),C++),k=k.concat(A.slice(C,A.length)),k=k.map(function(V){var N=V.createDerived(V.elements);return P?N.ensureVisibility():N.ensureInvisibility(),N}),k},w.prototype.visitMedia=function(O,A){var S=O.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);S=S.concat(this.doExtendChaining(S,O.allExtends)),this.allExtendsStack.push(S)},w.prototype.visitMediaOut=function(O){var A=this.allExtendsStack.length-1;this.allExtendsStack.length=A},w.prototype.visitAtRule=function(O,A){var S=O.allExtends.concat(this.allExtendsStack[this.allExtendsStack.length-1]);S=S.concat(this.doExtendChaining(S,O.allExtends)),this.allExtendsStack.push(S)},w.prototype.visitAtRuleOut=function(O){var A=this.allExtendsStack.length-1;this.allExtendsStack.length=A},w})();return extendVisitor.default=b,extendVisitor}var joinSelectorVisitor={},hasRequiredJoinSelectorVisitor;function requireJoinSelectorVisitor(){if(hasRequiredJoinSelectorVisitor)return joinSelectorVisitor;hasRequiredJoinSelectorVisitor=1,Object.defineProperty(joinSelectorVisitor,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireVisitor()),E=(function(){function q(){this.contexts=[[]],this._visitor=new R.default(this)}return q.prototype.run=function(d){return this._visitor.visit(d)},q.prototype.visitDeclaration=function(d,_){_.visitDeeper=!1},q.prototype.visitMixinDefinition=function(d,_){_.visitDeeper=!1},q.prototype.visitRuleset=function(d,_){var b=this.contexts[this.contexts.length-1],w=[],O;this.contexts.push(w),d.root||(O=d.selectors,O&&(O=O.filter(function(A){return A.getIsOutput()}),d.selectors=O.length?O:O=null,O&&d.joinSelectors(w,b,O)),O||(d.rules=null),d.paths=w)},q.prototype.visitRulesetOut=function(d){this.contexts.length=this.contexts.length-1},q.prototype.visitMedia=function(d,_){var b=this.contexts[this.contexts.length-1];d.rules[0].root=b.length===0||b[0].multiMedia},q.prototype.visitAtRule=function(d,_){var b=this.contexts[this.contexts.length-1];d.declarations&&d.declarations.length?d.declarations[0].root=b.length===0||b[0].multiMedia:d.rules&&d.rules.length&&(d.rules[0].root=d.isRooted||b.length===0||null)},q})();return joinSelectorVisitor.default=E,joinSelectorVisitor}var toCssVisitor={},hasRequiredToCssVisitor;function requireToCssVisitor(){if(hasRequiredToCssVisitor)return toCssVisitor;hasRequiredToCssVisitor=1,Object.defineProperty(toCssVisitor,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireTree()),E=y.__importDefault(requireVisitor()),q=(function(){function _(b){this._visitor=new E.default(this),this._context=b}return _.prototype.containsSilentNonBlockedChild=function(b){var w;if(!b)return!1;for(var O=0;O<b.length;O++)if(w=b[O],w.isSilent&&w.isSilent(this._context)&&!w.blocksVisibility())return!0;return!1},_.prototype.keepOnlyVisibleChilds=function(b){b&&b.rules&&(b.rules=b.rules.filter(function(w){return w.isVisible()}))},_.prototype.isEmpty=function(b){return b&&b.rules?b.rules.length===0:!0},_.prototype.hasVisibleSelector=function(b){return b&&b.paths?b.paths.length>0:!1},_.prototype.resolveVisibility=function(b){if(!b.blocksVisibility())return this.isEmpty(b)?void 0:b;var w=b.rules[0];if(this.keepOnlyVisibleChilds(w),!this.isEmpty(w))return b.ensureVisibility(),b.removeVisibilityBlock(),b},_.prototype.isVisibleRuleset=function(b){return b.firstRoot?!0:!(this.isEmpty(b)||!b.root&&!this.hasVisibleSelector(b))},_})(),d=function(_){this._visitor=new E.default(this),this._context=_,this.utils=new q(_)};return d.prototype={isReplacing:!0,run:function(_){return this._visitor.visit(_)},visitDeclaration:function(_,b){if(!(_.blocksVisibility()||_.variable))return _},visitMixinDefinition:function(_,b){_.frames=[]},visitExtend:function(_,b){},visitComment:function(_,b){if(!(_.blocksVisibility()||_.isSilent(this._context)))return _},visitMedia:function(_,b){var w=_.rules[0].rules;return _.accept(this._visitor),b.visitDeeper=!1,this.utils.resolveVisibility(_,w)},visitImport:function(_,b){if(!_.blocksVisibility())return _},visitAtRule:function(_,b){return _.rules&&_.rules.length?this.visitAtRuleWithBody(_,b):this.visitAtRuleWithoutBody(_,b)},visitAnonymous:function(_,b){if(!_.blocksVisibility())return _.accept(this._visitor),_},visitAtRuleWithBody:function(_,b){function w(S){var P=S.rules;return P.length===1&&(!P[0].paths||P[0].paths.length===0)}function O(S){var P=S.rules;return w(S)?P[0].rules:P}var A=O(_);return _.accept(this._visitor),b.visitDeeper=!1,this.utils.isEmpty(_)||this._mergeRules(_.rules[0].rules),this.utils.resolveVisibility(_,A)},visitAtRuleWithoutBody:function(_,b){if(!_.blocksVisibility()){if(_.name==="@charset"){if(this.charset){if(_.debugInfo){var w=new R.default.Comment("/* ".concat(_.toCSS(this._context).replace(/\n/g,""),` */ `));return w.debugInfo=_.debugInfo,this._visitor.visit(w)}return}this.charset=!0}return _}},checkValidNodes:function(_,b){if(_)for(var w=0;w<_.length;w++){var O=_[w];if(b&&O instanceof R.default.Declaration&&!O.variable)throw{message:"Properties must be inside selector blocks. They cannot be in the root",index:O.getIndex(),filename:O.fileInfo()&&O.fileInfo().filename};if(O instanceof R.default.Call)throw{message:"Function '".concat(O.name,"' did not return a root node"),index:O.getIndex(),filename:O.fileInfo()&&O.fileInfo().filename};if(O.type&&!O.allowRoot)throw{message:"".concat(O.type," node returned by a function is not valid here"),index:O.getIndex(),filename:O.fileInfo()&&O.fileInfo().filename}}},visitRuleset:function(_,b){var w,O=[];if(this.checkValidNodes(_.rules,_.firstRoot),_.root)_.accept(this._visitor),b.visitDeeper=!1;else{this._compileRulesetPaths(_);for(var A=_.rules,S=A?A.length:0,P=0;P<S;){if(w=A[P],w&&w.rules){O.push(this._visitor.visit(w)),A.splice(P,1),S--;continue}P++}S>0?_.accept(this._visitor):_.rules=null,b.visitDeeper=!1}return _.rules&&(this._mergeRules(_.rules),this._removeDuplicateRules(_.rules)),this.utils.isVisibleRuleset(_)&&(_.ensureVisibility(),O.splice(0,0,_)),O.length===1?O[0]:O},_compileRulesetPaths:function(_){_.paths&&(_.paths=_.paths.filter(function(b){var w;for(b[0].elements[0].combinator.value===" "&&(b[0].elements[0].combinator=new R.default.Combinator("")),w=0;w<b.length;w++)if(b[w].isVisible()&&b[w].getIsOutput())return!0;return!1}))},_removeDuplicateRules:function(_){if(_){var b={},w,O,A;for(A=_.length-1;A>=0;A--)if(O=_[A],O instanceof R.default.Declaration)if(!b[O.name])b[O.name]=O;else{w=b[O.name],w instanceof R.default.Declaration&&(w=b[O.name]=[b[O.name].toCSS(this._context)]);var S=O.toCSS(this._context);w.indexOf(S)!==-1?_.splice(A,1):w.push(S)}}},_mergeRules:function(_){if(_){for(var b={},w=[],O=0;O<_.length;O++){var A=_[O];if(A.merge){var S=A.name;b[S]?_.splice(O--,1):w.push(b[S]=[]),b[S].push(A)}}w.forEach(function(P){if(P.length>0){var C=P[0],M=[],k=[new R.default.Expression(M)];P.forEach(function(L){L.merge==="+"&&M.length>0&&k.push(new R.default.Expression(M=[])),M.push(L.value),C.important=C.important||L.important}),C.value=new R.default.Value(k)}})}}},toCssVisitor.default=d,toCssVisitor}var hasRequiredVisitors;function requireVisitors(){if(hasRequiredVisitors)return visitors;hasRequiredVisitors=1,Object.defineProperty(visitors,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireVisitor()),E=y.__importDefault(requireImportVisitor()),q=y.__importDefault(requireSetTreeVisibilityVisitor()),d=y.__importDefault(requireExtendVisitor()),_=y.__importDefault(requireJoinSelectorVisitor()),b=y.__importDefault(requireToCssVisitor());return visitors.default={Visitor:R.default,ImportVisitor:E.default,MarkVisibleSelectorsVisitor:q.default,ExtendVisitor:d.default,JoinSelectorVisitor:_.default,ToCSSVisitor:b.default},visitors}var parserInput={},chunker={},hasRequiredChunker;function requireChunker(){if(hasRequiredChunker)return chunker;hasRequiredChunker=1,Object.defineProperty(chunker,"__esModule",{value:!0});function y(R,E){var q=R.length,d=0,_=0,b,w,O,A,S=[],P=0,C,M,k,L,I;function B(T){var z=C-P;z<512&&!T||!z||(S.push(R.slice(P,C+1)),P=C+1)}for(C=0;C<q;C++)if(k=R.charCodeAt(C),!(k>=97&&k<=122||k<34))switch(k){case 40:_++,w=C;continue;case 41:if(--_<0)return E("missing opening `(`",C);continue;case 59:_||B();continue;case 123:d++,b=C;continue;case 125:if(--d<0)return E("missing opening `{`",C);!d&&!_&&B();continue;case 92:if(C<q-1){C++;continue}return E("unescaped `\\`",C);case 34:case 39:case 96:for(I=0,M=C,C=C+1;C<q;C++)if(L=R.charCodeAt(C),!(L>96)){if(L==k){I=1;break}if(L==92){if(C==q-1)return E("unescaped `\\`",C);C++}}if(I)continue;return E("unmatched `".concat(String.fromCharCode(k),"`"),M);case 47:if(_||C==q-1)continue;if(L=R.charCodeAt(C+1),L==47)for(C=C+2;C<q&&(L=R.charCodeAt(C),!(L<=13&&(L==10||L==13)));C++);else if(L==42){for(O=M=C,C=C+2;C<q-1&&(L=R.charCodeAt(C),L==125&&(A=C),!(L==42&&R.charCodeAt(C+1)==47));C++);if(C==q-1)return E("missing closing `*/`",M);C++}continue;case 42:if(C<q-1&&R.charCodeAt(C+1)==47)return E("unmatched `/*`",C);continue}return d!==0?O>b&&A>O?E("missing closing `}` or `*/`",b):E("missing closing `}`",b):_!==0?E("missing closing `)`",w):(B(!0),S)}return chunker.default=y,chunker}var hasRequiredParserInput;function requireParserInput(){if(hasRequiredParserInput)return parserInput;hasRequiredParserInput=1,Object.defineProperty(parserInput,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireChunker());return parserInput.default=(function(){var E,q,d=[],_,b,w,O,A,S={},P=32,C=9,M=10,k=13,L=43,I=44,B=47,T=57;function z(V){for(var N=S.i,U=q,x=S.i-A,K=S.i+O.length-x,F=S.i+=V,D=E,$,G,j;S.i<K;S.i++){if($=D.charCodeAt(S.i),S.autoCommentAbsorb&&$===B){if(G=D.charAt(S.i+1),G==="/"){j={index:S.i,isLineComment:!0};var W=D.indexOf(` `,S.i+2);W<0&&(W=K),S.i=W,j.text=D.substr(j.index,S.i-j.index),S.commentStore.push(j);continue}else if(G==="*"){var H=D.indexOf("*/",S.i+2);if(H>=0){j={index:S.i,text:D.substr(S.i,H+2-S.i),isLineComment:!1},S.i+=j.text.length-1,S.commentStore.push(j);continue}}break}if($!==P&&$!==M&&$!==C&&$!==k)break}if(O=O.slice(V+S.i-F+x),A=S.i,!O.length){if(q<w.length-1)return O=w[++q],z(0),!0;S.finished=!0}return N!==S.i||U!==q}return S.save=function(){A=S.i,d.push({current:O,i:S.i,j:q})},S.restore=function(V){(S.i>_||S.i===_&&V&&!b)&&(_=S.i,b=V);var N=d.pop();O=N.current,A=S.i=N.i,q=N.j},S.forget=function(){d.pop()},S.isWhitespace=function(V){var N=S.i+(V||0),U=E.charCodeAt(N);return U===P||U===k||U===C||U===M},S.$re=function(V){S.i>A&&(O=O.slice(S.i-A),A=S.i);var N=V.exec(O);return N?(z(N[0].length),typeof N=="string"?N:N.length===1?N[0]:N):null},S.$char=function(V){return E.charAt(S.i)!==V?null:(z(1),V)},S.$peekChar=function(V){return E.charAt(S.i)!==V?null:V},S.$str=function(V){for(var N=V.length,U=0;U<N;U++)if(E.charAt(S.i+U)!==V.charAt(U))return null;return z(N),V},S.$quoted=function(V){var N=V||S.i,U=E.charAt(N);if(!(U!=="'"&&U!=='"')){for(var x=E.length,K=N,F=1;F+K<x;F++){var D=E.charAt(F+K);switch(D){case"\\":F++;continue;case"\r":case` `:break;case U:{var $=E.substr(K,F+1);return!V&&V!==0?(z(F+1),$):[U,$]}}}return null}},S.$parseUntil=function(V){var N="",U=null,x=!1,K=0,F=[],D=[],$=E.length,G=S.i,j=S.i,W=S.i,H=!0,Y;typeof V=="string"?Y=function(ie){return ie===V}:Y=function(ie){return V.test(ie)};do{var te=E.charAt(W);if(K===0&&Y(te))U=E.substr(j,W-j),U?D.push(U):D.push(" "),U=D,z(W-G),H=!1;else{if(x){te==="*"&&E.charAt(W+1)==="/"&&(W++,K--,x=!1),W++;continue}switch(te){case"\\":W++,te=E.charAt(W),D.push(E.substr(j,W-j+1)),j=W+1;break;case"/":E.charAt(W+1)==="*"&&(W++,x=!0,K++);break;case"'":case'"':N=S.$quoted(W),N?(D.push(E.substr(j,W-j),N),W+=N[1].length-1,j=W+1):(z(W-G),U=te,H=!1);break;case"{":F.push("}"),K++;break;case"(":F.push(")"),K++;break;case"[":F.push("]"),K++;break;case"}":case")":case"]":{var J=F.pop();te===J?K--:(z(W-G),U=J,H=!1)}}W++,W>$&&(H=!1)}}while(H);return U||null},S.autoCommentAbsorb=!0,S.commentStore=[],S.finished=!1,S.peek=function(V){if(typeof V=="string"){for(var N=0;N<V.length;N++)if(E.charAt(S.i+N)!==V.charAt(N))return!1;return!0}else return V.test(O)},S.peekChar=function(V){return E.charAt(S.i)===V},S.currentChar=function(){return E.charAt(S.i)},S.prevChar=function(){return E.charAt(S.i-1)},S.getInput=function(){return E},S.peekNotNumeric=function(){var V=E.charCodeAt(S.i);return V>T||V<L||V===B||V===I},S.start=function(V,N,U){E=V,S.i=q=A=_=0,N?w=(0,R.default)(V,U):w=[V],O=w[0],z(0)},S.end=function(){var V,N=S.i>=E.length;return S.i<_&&(V=b,S.i=_),{isFinished:N,furthest:S.i,furthestPossibleErrorMessage:V,furthestReachedEnd:S.i>=E.length-1,furthestChar:E[S.i]}},S}),parserInput}var functionRegistry={},hasRequiredFunctionRegistry;function requireFunctionRegistry(){if(hasRequiredFunctionRegistry)return functionRegistry;hasRequiredFunctionRegistry=1,Object.defineProperty(functionRegistry,"__esModule",{value:!0});function y(R){return{_data:{},add:function(E,q){E=E.toLowerCase(),this._data.hasOwnProperty(E),this._data[E]=q},addMultiple:function(E){var q=this;Object.keys(E).forEach(function(d){q.add(d,E[d])})},get:function(E){return this._data[E]||R&&R.get(E)},getLocalFunctions:function(){return this._data},inherit:function(){return y(this)},create:function(E){return y(E)}}}return functionRegistry.default=y(null),functionRegistry}var atruleSyntax={},hasRequiredAtruleSyntax;function requireAtruleSyntax(){return hasRequiredAtruleSyntax||(hasRequiredAtruleSyntax=1,Object.defineProperty(atruleSyntax,"__esModule",{value:!0}),atruleSyntax.ContainerSyntaxOptions=atruleSyntax.MediaSyntaxOptions=void 0,atruleSyntax.MediaSyntaxOptions={queryInParens:!0},atruleSyntax.ContainerSyntaxOptions={queryInParens:!0}),atruleSyntax}var anonymous={},hasRequiredAnonymous;function requireAnonymous(){if(hasRequiredAnonymous)return anonymous;hasRequiredAnonymous=1,Object.defineProperty(anonymous,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=function(q,d,_,b,w,O){this.value=q,this._index=d,this._fileInfo=_,this.mapLines=b,this.rulesetLike=typeof w>"u"?!1:w,this.allowRoot=!0,this.copyVisibilityInfo(O)};return E.prototype=Object.assign(new R.default,{type:"Anonymous",eval:function(){return new E(this.value,this._index,this._fileInfo,this.mapLines,this.rulesetLike,this.visibilityInfo())},compare:function(q){return q.toCSS&&this.toCSS()===q.toCSS()?0:void 0},isRulesetLike:function(){return this.rulesetLike},genCSS:function(q,d){this.nodeVisible=!!this.value,this.nodeVisible&&d.add(this.value,this._fileInfo,this._index,this.mapLines)}}),anonymous.default=E,anonymous}var hasRequiredParser;function requireParser(){if(hasRequiredParser)return parser;hasRequiredParser=1,Object.defineProperty(parser,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireLessError()),E=y.__importDefault(requireTree()),q=y.__importDefault(requireVisitors()),d=y.__importDefault(requireParserInput()),_=y.__importStar(requireUtils()),b=y.__importDefault(requireFunctionRegistry()),w=requireAtruleSyntax(),O=y.__importDefault(requireLogger()),A=y.__importDefault(requireSelector()),S=y.__importDefault(requireAnonymous()),P=function C(M,k,L,I){I=I||0;var B,T=(0,d.default)();function z(F,D){throw new R.default({index:T.i,filename:L.filename,type:D||"Syntax",message:F},k)}function V(F,D,$){M.quiet||O.default.warn(new R.default({index:D??T.i,filename:L.filename,type:$?"".concat($.toUpperCase()," WARNING"):"WARNING",message:F},k).toString())}function N(F,D){var $=F instanceof Function?F.call(B):T.$re(F);if($)return $;z(D||(typeof F=="string"?"expected '".concat(F,"' got '").concat(T.currentChar(),"'"):"unexpected token"))}function U(F,D){if(T.$char(F))return F;z("expected '".concat(F,"' got '").concat(T.currentChar(),"'"))}function x(F){var D=L.filename;return{lineNumber:_.getLocation(F,T.getInput()).line+1,fileName:D}}function K(F,D,$){var G,j=[],W=T;try{W.start(F,!1,function(ie,re){$({message:ie,index:re+I})});for(var H=0,Y=void 0;Y=D[H];H++)G=B[Y](),j.push(G||null);var te=W.end();te.isFinished?$(null,j):$(!0,null)}catch(J){throw new R.default({index:J.index+I,message:J.message},k,L.filename)}}return{parserInput:T,imports:k,fileInfo:L,parseNode:K,parse:function(F,D,$){var G,j=null,W,H,Y,te="";if($&&$.disablePluginRule&&(B.plugin=function(){var X=T.$re(/^@plugin?\s+/);X&&z("@plugin statements are not allowed when disablePluginRule is set to true")}),W=$&&$.globalVars?"".concat(C.serializeVars($.globalVars),` `):"",H=$&&$.modifyVars?` `.concat(C.serializeVars($.modifyVars)):"",M.pluginManager)for(var J=M.pluginManager.getPreProcessors(),ie=0;ie<J.length;ie++)F=J[ie].process(F,{context:M,imports:k,fileInfo:L});(W||$&&$.banner)&&(te=($&&$.banner?$.banner:"")+W,Y=k.contentsIgnoredChars,Y[L.filename]=Y[L.filename]||0,Y[L.filename]+=te.length),F=F.replace(/\r\n?/g,` `),F=te+F.replace(/^\uFEFF/,"")+H,k.contents[L.filename]=F;try{T.start(F,M.chunkInput,function(Z,se){throw new R.default({index:se,type:"Parse",message:Z,filename:L.filename},k)}),E.default.Node.prototype.parse=this,G=new E.default.Ruleset(null,this.parsers.primary()),E.default.Node.prototype.rootNode=G,G.root=!0,G.firstRoot=!0,G.functionRegistry=b.default.inherit()}catch(X){return D(new R.default(X,k,L.filename))}var re=T.end();if(!re.isFinished){var ee=re.furthestPossibleErrorMessage;ee||(ee="Unrecognised input",re.furthestChar==="}"?ee+=". Possibly missing opening '{'":re.furthestChar===")"?ee+=". Possibly missing opening '('":re.furthestReachedEnd&&(ee+=". Possibly missing something")),j=new R.default({type:"Parse",message:ee,index:re.furthest,filename:L.filename},k)}var Q=function(X){return X=j||X||k.error,X?(X instanceof R.default||(X=new R.default(X,k,L.filename)),D(X)):D(null,G)};if(M.processImports!==!1)new q.default.ImportVisitor(k,Q).run(G);else return Q()},parsers:B={primary:function(){for(var F=this.mixin,D=[],$;;){for(;$=this.comment(),!!$;)D.push($);if(T.finished||T.peek("}"))break;if($=this.extendRule(),$){D=D.concat($);continue}if($=F.definition()||this.declaration()||F.call(!1,!1)||this.ruleset()||this.variableCall()||this.entities.call()||this.atrule(),$)D.push($);else{for(var G=!1;T.$char(";");)G=!0;if(!G)break}}return D},comment:function(){if(T.commentStore.length){var F=T.commentStore.shift();return new E.default.Comment(F.text,F.isLineComment,F.index+I,L)}},entities:{mixinLookup:function(){return B.mixin.call(!0,!0)},quoted:function(F){var D,$=T.i,G=!1;if(T.save(),T.$char("~"))G=!0;else if(F){T.restore();return}if(D=T.$quoted(),!D){T.restore();return}return T.forget(),new E.default.Quoted(D.charAt(0),D.substr(1,D.length-2),G,$+I,L)},keyword:function(){var F=T.$char("%")||T.$re(/^\[?(?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+\]?/);if(F)return E.default.Color.fromKeyword(F)||new E.default.Keyword(F)},call:function(){var F,D,$,G=T.i;if(!T.peek(/^url\(/i)){if(T.save(),F=T.$re(/^([\w-]+|%|~|progid:[\w.]+)\(/),!F){T.forget();return}if(F=F[1],$=this.customFuncCall(F),$&&(D=$.parse(),D&&$.stop))return T.forget(),D;if(D=this.arguments(D),!T.$char(")")){T.restore("Could not parse call arguments or missing ')'");return}return T.forget(),new E.default.Call(F,D,G+I,L)}},declarationCall:function(){var F,D,$=T.i;if(T.save(),F=T.$re(/^[\w]+\(/),!F){T.forget();return}F=F.substring(0,F.length-1);var G=this.ruleProperty(),j;if(G&&(j=this.value()),G&&j&&(D=[new E.default.Declaration(G,j,null,null,T.i+I,L,!0)]),!T.$char(")")){T.restore("Could not parse call arguments or missing ')'");return}return T.forget(),new E.default.Call(F,D,$+I,L)},customFuncCall:function(F){return{alpha:D(B.ieAlpha,!0),boolean:D($),if:D($)}[F.toLowerCase()];function D(G,j){return{parse:G,stop:j}}function $(){return[N(B.condition,"expected condition")]}},arguments:function(F){var D=F||[],$=[],G,j;for(T.save();;){if(F)F=!1;else{if(j=B.detachedRuleset()||this.assignment()||B.expression(),!j)break;j.value&&j.value.length==1&&(j=j.value[0]),D.push(j)}T.$char(",")||(T.$char(";")||G)&&(G=!0,j=D.length<1?D[0]:new E.default.Value(D),$.push(j),D=[])}return T.forget(),G?$:D},literal:function(){return this.dimension()||this.color()||this.quoted()||this.unicodeDescriptor()},assignment:function(){var F,D;if(T.save(),F=T.$re(/^\w+(?=\s?=)/i),!F){T.restore();return}if(!T.$char("=")){T.restore();return}if(D=B.entity(),D)return T.forget(),new E.default.Assignment(F,D);T.restore()},url:function(){var F,D=T.i;if(T.autoCommentAbsorb=!1,!T.$str("url(")){T.autoCommentAbsorb=!0;return}return F=this.quoted()||this.variable()||this.property()||T.$re(/^(?:(?:\\[()'"])|[^()'"])+/)||"",T.autoCommentAbsorb=!0,U(")"),new E.default.URL(F.value!==void 0||F instanceof E.default.Variable||F instanceof E.default.Property?F:new E.default.Anonymous(F,D),D+I,L)},variable:function(){var F,D,$=T.i;if(T.save(),T.currentChar()==="@"&&(D=T.$re(/^@@?[\w-]+/))){if(F=T.currentChar(),F==="("||F==="["&&!T.prevChar().match(/^\s/)){var G=B.variableCall(D);if(G)return T.forget(),G}return T.forget(),new E.default.Variable(D,$+I,L)}T.restore()},variableCurly:function(){var F,D=T.i;if(T.currentChar()==="@"&&(F=T.$re(/^@\{([\w-]+)\}/)))return new E.default.Variable("@".concat(F[1]),D+I,L)},property:function(){var F,D=T.i;if(T.currentChar()==="$"&&(F=T.$re(/^\$[\w-]+/)))return new E.default.Property(F,D+I,L)},propertyCurly:function(){var F,D=T.i;if(T.currentChar()==="$"&&(F=T.$re(/^\$\{([\w-]+)\}/)))return new E.default.Property("$".concat(F[1]),D+I,L)},color:function(){var F;if(T.save(),T.currentChar()==="#"&&(F=T.$re(/^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3,4})([\w.#[])?/))&&!F[2])return T.forget(),new E.default.Color(F[1],void 0,F[0]);T.restore()},colorKeyword:function(){T.save();var F=T.autoCommentAbsorb;T.autoCommentAbsorb=!1;var D=T.$re(/^[_A-Za-z-][_A-Za-z0-9-]+/);if(T.autoCommentAbsorb=F,!D){T.forget();return}T.restore();var $=E.default.Color.fromKeyword(D);if($)return T.$str(D),$},dimension:function(){if(!T.peekNotNumeric()){var F=T.$re(/^([+-]?\d*\.?\d+)(%|[a-z_]+)?/i);if(F)return new E.default.Dimension(F[1],F[2])}},unicodeDescriptor:function(){var F;if(F=T.$re(/^U\+[0-9a-fA-F?]+(-[0-9a-fA-F?]+)?/),F)return new E.default.UnicodeDescriptor(F[0])},javascript:function(){var F,D=T.i;T.save();var $=T.$char("~"),G=T.$char("`");if(!G){T.restore();return}if(F=T.$re(/^[^`]*`/),F)return T.forget(),new E.default.JavaScript(F.substr(0,F.length-1),!!$,D+I,L);T.restore("invalid javascript definition")}},variable:function(){var F;if(T.currentChar()==="@"&&(F=T.$re(/^(@[\w-]+)\s*:/)))return F[1]},variableCall:function(F){var D,$=T.i,G=!!F,j=F;if(T.save(),j||T.currentChar()==="@"&&(j=T.$re(/^(@[\w-]+)(\(\s*\))?/))){if(D=this.mixin.ruleLookups(),!D&&(G&&T.$str("()")!=="()"||j[2]!=="()")){T.restore("Missing '[...]' lookup in variable call");return}G||(j=j[1]);var W=new E.default.VariableCall(j,$,L);return!G&&B.end()?(T.forget(),W):(T.forget(),new E.default.NamespaceValue(W,D,$,L))}T.restore()},extend:function(F){var D,$,G=T.i,j,W,H;if(T.$str(F?"&:extend(":":extend(")){do{j=null,D=null;for(var Y=!0;!(j=T.$re(/^(!?all)(?=\s*(\)|,))/))&&($=this.element(),!!$);)!Y&&$.combinator.value&&V("Targeting complex selectors can have unexpected behavior, and this behavior may change in the future.",G),Y=!1,D?D.push($):D=[$];j=j&&j[1],D||z("Missing target selector for :extend()."),H=new E.default.Extend(new E.default.Selector(D),j,G+I,L),W?W.push(H):W=[H]}while(T.$char(","));return N(/^\)/),F&&N(/^;/),W}},extendRule:function(){return this.extend(!0)},mixin:{call:function(F,D){var $=T.currentChar(),G=!1,j,W=T.i,H,Y,te,J,ie=!1;if(!($!=="."&&$!=="#")){if(T.save(),H=this.elements(),H){if(J=T.i,T.$char("(")&&(ie=T.isWhitespace(-2),Y=this.args(!0).args,U(")"),te=!0,ie&&V("Whitespace between a mixin name and parentheses for a mixin call is deprecated",J,"DEPRECATED")),D!==!1&&(j=this.ruleLookups()),D===!0&&!j){T.restore();return}if(F&&!j&&!te){T.restore();return}if(!F&&B.important()&&(G=!0),F||B.end()){T.forget();var re=new E.default.mixin.Call(H,Y,W+I,L,!j&&G);return j?new E.default.NamespaceValue(re,j):(te||V("Calling a mixin without parentheses is deprecated",J,"DEPRECATED"),re)}}T.restore()}},elements:function(){for(var F,D,$,G,j,W=/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/;j=T.i,D=T.$re(W),!!D;)G=new E.default.Element($,D,!1,j+I,L),F?F.push(G):F=[G],$=T.$char(">");return F},args:function(F){var D=B.entities,$={args:null,variadic:!1},G=[],j=[],W=[],H,Y,te,J,ie,re,ee,Q=!0;for(T.save();;){if(F)re=B.detachedRuleset()||B.expression();else{if(T.commentStore.length=0,T.$str("...")){$.variadic=!0,T.$char(";")&&!H&&(H=!0),(H?j:W).push({variadic:!0});break}re=D.variable()||D.property()||D.literal()||D.keyword()||this.call(!0)}if(!re||!Q)break;J=null,re.throwAwayComments&&re.throwAwayComments(),ie=re;var X=null;if(F?re.value&&re.value.length==1&&(X=re.value[0]):X=re,X&&(X instanceof E.default.Variable||X instanceof E.default.Property))if(T.$char(":")){if(G.length>0&&(H&&z("Cannot mix ; and , as delimiter types"),Y=!0),ie=B.detachedRuleset()||B.expression(),!ie)if(F)z("could not understand value for named argument");else return T.restore(),$.args=[],$;J=te=X.name}else if(T.$str("..."))if(F)ee=!0;else{$.variadic=!0,T.$char(";")&&!H&&(H=!0),(H?j:W).push({name:re.name,variadic:!0});break}else F||(te=J=X.name,ie=null);if(ie&&G.push(ie),W.push({name:J,value:ie,expand:ee}),T.$char(",")){Q=!0;continue}Q=T.$char(";")===";",(Q||H)&&(Y&&z("Cannot mix ; and , as delimiter types"),H=!0,G.length>1&&(ie=new E.default.Value(G)),j.push({name:te,value:ie,expand:ee}),te=null,G=[],Y=!1)}return T.forget(),$.args=H?j:W,$},definition:function(){var F,D=[],$,G,j,W=!1;if(!(T.currentChar()!=="."&&T.currentChar()!=="#"||T.peek(/^[^{]*\}/)))if(T.save(),$=T.$re(/^([#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+)\s*\(/),$){F=$[1];var H=this.args(!1);if(D=H.args,W=H.variadic,!T.$char(")")){T.restore("Missing closing ')'");return}if(T.commentStore.length=0,T.$str("when")&&(j=N(B.conditions,"expected condition")),G=B.block(),G)return T.forget(),new E.default.mixin.Definition(F,D,G,j,W);T.restore()}else T.restore()},ruleLookups:function(){var F,D=[];if(T.currentChar()==="["){for(;;){if(T.save(),F=this.lookupValue(),!F&&F!==""){T.restore();break}D.push(F),T.forget()}if(D.length>0)return D}},lookupValue:function(){if(T.save(),!T.$char("[")){T.restore();return}var F=T.$re(/^(?:[@$]{0,2})[_a-zA-Z0-9-]*/);if(!T.$char("]")){T.restore();return}if(F||F==="")return T.forget(),F;T.restore()}},entity:function(){var F=this.entities;return this.comment()||F.literal()||F.variable()||F.url()||F.property()||F.call()||F.keyword()||this.mixin.call(!0)||F.javascript()},end:function(){return T.$char(";")||T.peek("}")},ieAlpha:function(){var F;if(T.$re(/^opacity=/i))return F=T.$re(/^\d+/),F||(F=N(B.entities.variable,"Could not parse alpha"),F="@{".concat(F.name.slice(1),"}")),U(")"),new E.default.Quoted("","alpha(opacity=".concat(F,")"))},element:function(){var F,D,$,G=T.i;if(D=this.combinator(),F=T.$re(/^(?:\d+\.\d+|\d+)%/)||T.$re(/^(?:[.#]?|:*)(?:[\w-]|[^\x00-\x9f]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/)||T.$char("*")||T.$char("&")||this.attribute()||T.$re(/^\([^&()@]+\)/)||T.$re(/^[.#:](?=@)/)||this.entities.variableCurly(),!F)if(T.save(),T.$char("("))if($=this.selector(!1)){for(var j=[];T.$char(",");)j.push($),j.push(new S.default(",")),$=this.selector(!1);j.push($),T.$char(")")?(j.length>1?F=new E.default.Paren(new A.default(j)):F=new E.default.Paren($),T.forget()):T.restore("Missing closing ')'")}else T.restore("Missing closing ')'");else T.forget();if(F)return new E.default.Element(D,F,F instanceof E.default.Variable,G+I,L)},combinator:function(){var F=T.currentChar();if(F==="/"){T.save();var D=T.$re(/^\/[a-z]+\//i);if(D)return T.forget(),new E.default.Combinator(D);T.restore()}if(F===">"||F==="+"||F==="~"||F==="|"||F==="^"){for(T.i++,F==="^"&&T.currentChar()==="^"&&(F="^^",T.i++);T.isWhitespace();)T.i++;return new E.default.Combinator(F)}else return T.isWhitespace(-1)?new E.default.Combinator(" "):new E.default.Combinator(null)},selector:function(F){var D=T.i,$,G,j,W,H,Y,te;for(F=F!==!1;(F&&(G=this.extend())||F&&(Y=T.$str("when"))||(W=this.element()))&&(Y?te=N(this.conditions,"expected condition"):te?z("CSS guard can only be used at the end of selector"):G?H?H=H.concat(G):H=G:(H&&z("Extend can only be used at the end of selector"),j=T.currentChar(),Array.isArray(W)&&W.forEach(function(J){return $.push(J)}),$?$.push(W):$=[W],W=null),!(j==="{"||j==="}"||j===";"||j===","||j===")")););if($)return new E.default.Selector($,H,te,D+I,L);H&&z("Extend must be used to extend a selector, it cannot be used on its own")},selectors:function(){for(var F,D;F=this.selector(),!(!F||(D?D.push(F):D=[F],T.commentStore.length=0,F.condition&&D.length>1&&z("Guards are only currently allowed on a single selector."),!T.$char(",")));)F.condition&&z("Guards are only currently allowed on a single selector."),T.commentStore.length=0;return D},attribute:function(){if(T.$char("[")){var F=this.entities,D,$,G,j;return(D=F.variableCurly())||(D=N(/^(?:[_A-Za-z0-9-*]*\|)?(?:[_A-Za-z0-9-]|\\.)+/)),G=T.$re(/^[|~*$^]?=/),G&&($=F.quoted()||T.$re(/^[0-9]+%/)||T.$re(/^[\w-]+/)||F.variableCurly(),$&&(j=T.$re(/^[iIsS]/))),U("]"),new E.default.Attribute(D,G,$,j)}},block:function(){var F;if(T.$char("{")&&(F=this.primary())&&T.$char("}"))return F},blockRuleset:function(){var F=this.block();return F&&(F=new E.default.Ruleset(null,F)),F},detachedRuleset:function(){var F,D,$;if(T.save(),T.$re(/^[.#]\(/)&&(F=this.mixin.args(!1),D=F.args,$=F.variadic,!T.$char(")"))){T.restore();return}var G=this.blockRuleset();if(G)return T.forget(),D?new E.default.mixin.Definition(null,D,G,null,$):new E.default.DetachedRuleset(G);T.restore()},ruleset:function(){var F,D,$;if(T.save(),M.dumpLineNumbers&&($=x(T.i)),F=this.selectors(),F&&(D=this.block())){T.forget();var G=new E.default.Ruleset(F,D,M.strictImports);return M.dumpLineNumbers&&(G.debugInfo=$),G}else T.restore()},declaration:function(){var F,D,$=T.i,G,j=T.currentChar(),W,H,Y;if(!(j==="."||j==="#"||j==="&"||j===":"))if(T.save(),F=this.variable()||this.ruleProperty(),F){if(Y=typeof F=="string",Y&&(D=this.detachedRuleset(),D&&(G=!0)),T.commentStore.length=0,!D){if(H=!Y&&F.length>1&&F.pop().value,F[0].value&&F[0].value.slice(0,2)==="--"?T.$char(";")?D=new S.default(""):D=this.permissiveValue(/[;}]/,!0):D=this.anonymousValue(),D)return T.forget(),new E.default.Declaration(F,D,!1,H,$+I,L);D||(D=this.value()),D?W=this.important():Y&&(D=this.permissiveValue())}if(D&&(this.end()||G))return T.forget(),new E.default.Declaration(F,D,W,H,$+I,L);T.restore()}else T.restore()},anonymousValue:function(){var F=T.i,D=T.$re(/^([^.#@$+/'"*`(;{}-]*);/);if(D)return new E.default.Anonymous(D[1],F+I)},permissiveValue:function(F){var D,$,G,j,W=F||";",H=T.i,Y=[];function te(){var Q=T.currentChar();return typeof W=="string"?Q===W:W.test(Q)}if(!te()){j=[];do{if($=this.comment(),$){j.push($);continue}$=this.entity(),$&&j.push($),T.peek(",")&&(j.push(new E.default.Anonymous(",",T.i)),T.$char(","))}while($);if(G=te(),j.length>0){if(j=new E.default.Expression(j),G)return j;Y.push(j),T.prevChar()===" "&&Y.push(new E.default.Anonymous(" ",H))}if(T.save(),j=T.$parseUntil(W),j){if(typeof j=="string"&&z("Expected '".concat(j,"'"),"Parse"),j.length===1&&j[0]===" ")return T.forget(),new E.default.Anonymous("",H);var J=void 0;for(D=0;D<j.length;D++)if(J=j[D],Array.isArray(J))Y.push(new E.default.Quoted(J[0],J[1],!0,H,L));else{D===j.length-1&&(J=J.trim());var ie=new E.default.Quoted("'",J,!0,H,L),re=/@([\w-]+)/g,ee=/\$([\w-]+)/g;re.test(J)&&V("@[ident] in unknown values will not be evaluated as variables in the future. Use @{[ident]}",H,"DEPRECATED"),ee.test(J)&&V("$[ident] in unknown values will not be evaluated as property references in the future. Use ${[ident]}",H,"DEPRECATED"),ie.variableRegex=/@([\w-]+)|@{([\w-]+)}/g,ie.propRegex=/\$([\w-]+)|\${([\w-]+)}/g,Y.push(ie)}return T.forget(),new E.default.Expression(Y,!0)}T.restore()}},import:function(){var F,D,$=T.i,G=T.$re(/^@import\s+/);if(G){var j=(G?this.importOptions():null)||{};if(F=this.entities.quoted()||this.entities.url())return D=this.mediaFeatures({}),T.$char(";")||(T.i=$,z("missing semi-colon or unrecognised media features on import")),D=D&&new E.default.Value(D),new E.default.Import(F,D,j,$+I,L);T.i=$,z("malformed import statement")}},importOptions:function(){var F,D={},$,G;if(!T.$char("("))return null;do if(F=this.importOption(),F){switch($=F,G=!0,$){case"css":$="less",G=!1;break;case"once":$="multiple",G=!1;break}if(D[$]=G,!T.$char(","))break}while(F);return U(")"),D},importOption:function(){var F=T.$re(/^(less|css|multiple|once|inline|reference|optional)/);if(F)return F[1]},mediaFeature:function(F){var D=this.entities,$=[],G,j,W,H=!1;T.save();do T.save(),T.$re(/^[0-9a-z-]*\s+\(/)&&(H=!0),T.restore(),G=D.declarationCall.bind(this)()||D.keyword()||D.variable()||D.mixinLookup(),G?$.push(G):T.$char("(")&&(j=this.property(),T.save(),!j&&F.queryInParens&&T.$re(/^[0-9a-z-]*\s*([<>]=|<=|>=|[<>]|=)/)?(T.restore(),j=this.condition(),T.save(),W=this.atomicCondition(null,j.rvalue),W||T.restore()):(T.restore(),G=this.value()),T.$char(")")?j&&!G?($.push(new E.default.Paren(new E.default.QueryInParens(j.op,j.lvalue,j.rvalue,W?W.op:null,W?W.rvalue:null,j._index))),G=j):j&&G?($.push(new E.default.Paren(new E.default.Declaration(j,G,null,null,T.i+I,L,!0))),H||($[$.length-1].noSpacing=!0),H=!1):G?($.push(new E.default.Paren(G)),H=!1):z("badly formed media feature definition"):z("Missing closing ')'","Parse"));while(G);if(T.forget(),$.length>0)return new E.default.Expression($)},mediaFeatures:function(F){var D=this.entities,$=[],G;do if(G=this.mediaFeature(F),G)if($.push(G),T.$char(","))$[$.length-1].noSpacing||($[$.length-1].noSpacing=!1);else break;else if(G=D.variable()||D.mixinLookup(),G)if($.push(G),T.$char(","))$[$.length-1].noSpacing||($[$.length-1].noSpacing=!1);else break;while(G);return $.length>0?$:null},prepareAndGetNestableAtRule:function(F,D,$,G){var j=this.mediaFeatures(G),W=this.block();W||z("media definitions require block statements after any features"),T.forget();var H=new F(W,j,D+I,L);return M.dumpLineNumbers&&(H.debugInfo=$),H},nestableAtRule:function(){var F,D=T.i;if(M.dumpLineNumbers&&(F=x(D)),T.save(),T.$peekChar("@")){if(T.$str("@media"))return this.prepareAndGetNestableAtRule(E.default.Media,D,F,w.MediaSyntaxOptions);if(T.$str("@container"))return this.prepareAndGetNestableAtRule(E.default.Container,D,F,w.ContainerSyntaxOptions)}T.restore()},plugin:function(){var F,D,$,G=T.i,j=T.$re(/^@plugin\s+/);if(j){if(D=this.pluginArgs(),D?$={pluginArgs:D,isPlugin:!0}:$={isPlugin:!0},F=this.entities.quoted()||this.entities.url())return T.$char(";")||(T.i=G,z("missing semi-colon on @plugin")),new E.default.Import(F,null,$,G+I,L);T.i=G,z("malformed @plugin statement")}},pluginArgs:function(){if(T.save(),!T.$char("("))return T.restore(),null;var F=T.$re(/^\s*([^);]+)\)\s*/);return F[1]?(T.forget(),F[1].trim()):(T.restore(),null)},atruleUnknown:function(F,D,$){return F=this.permissiveValue(/^[{;]/),$=T.currentChar()==="{",F?F.value||(F=null):!$&&T.currentChar()!==";"&&z("".concat(D," rule is missing block or ending semi-colon")),[F,$]},atruleBlock:function(F,D,$,G){if(F=this.blockRuleset(),T.save(),!F&&!$&&(D=this.entity(),F=this.blockRuleset()),!F&&!$){T.restore();var j=[];for(D=this.entity();T.$char(",");)j.push(D),D=this.entity();D&&j.length>0?(j.push(D),D=j,G=!0):F=this.blockRuleset()}else T.forget();return[F,D,G]},atrule:function(){var F=T.i,D,$,G,j,W,H,Y,te=!0,J=!0,ie=!1;if(T.currentChar()==="@"){if($=this.import()||this.plugin()||this.nestableAtRule(),$)return $;if(T.save(),D=T.$re(/^@[a-z-]+/),!!D){switch(j=D,D.charAt(1)=="-"&&D.indexOf("-",2)>0&&(j="@".concat(D.slice(D.indexOf("-",2)+1))),j){case"@charset":W=!0,te=!1;break;case"@namespace":H=!0,te=!1;break;case"@keyframes":case"@counter-style":W=!0;break;case"@document":case"@supports":Y=!0,J=!1;break;case"@starting-style":J=!1;break;case"@layer":J=!1;break;default:Y=!0;break}if(T.commentStore.length=0,W)$=this.entity(),$||z("expected ".concat(D," identifier"));else if(H)$=this.expression(),$||z("expected ".concat(D," expression"));else if(Y){var re=this.atruleUnknown($,D,te);$=re[0],te=re[1]}if(te){var ee=this.atruleBlock(G,$,J,ie);if(G=ee[0],$=ee[1],ie=ee[2],!G&&!Y){T.restore(),D=T.$re(/^@[a-z-]+/);var re=this.atruleUnknown($,D,te);$=re[0],te=re[1],te&&(ee=this.atruleBlock(G,$,J,ie),G=ee[0],$=ee[1],ie=ee[2])}}if(G||ie||!te&&$&&T.$char(";"))return T.forget(),new E.default.AtRule(D,$,G,F+I,L,M.dumpLineNumbers?x(F):null,J);T.restore("at-rule options not recognised")}}},value:function(){var F,D=[],$=T.i;do if(F=this.expression(),F&&(D.push(F),!T.$char(",")))break;while(F);if(D.length>0)return new E.default.Value(D,$+I)},important:function(){if(T.currentChar()==="!")return T.$re(/^! *important/)},sub:function(){var F,D;if(T.save(),T.$char("(")){if(F=this.addition(),F&&T.$char(")"))return T.forget(),D=new E.default.Expression([F]),D.parens=!0,D;T.restore("Expected ')'");return}T.restore()},colorOperand:function(){T.save();var F=T.$re(/^[lchrgbs]\s+/);if(F)return new E.default.Keyword(F[0]);T.restore()},multiplication:function(){var F,D,$,G,j;if(F=this.operand(),F){for(j=T.isWhitespace(-1);!T.peek(/^\/[*/]/);){if(T.save(),$=T.$char("/")||T.$char("*"),!$){var W=T.i;$=T.$str("./"),$&&V("./ operator is deprecated",W,"DEPRECATED")}if(!$){T.forget();break}if(D=this.operand(),!D){T.restore();break}T.forget(),F.parensInOp=!0,D.parensInOp=!0,G=new E.default.Operation($,[G||F,D],j),j=T.isWhitespace(-1)}return G||F}},addition:function(){var F,D,$,G,j;if(F=this.multiplication(),F){for(j=T.isWhitespace(-1);$=T.$re(/^[-+]\s+/)||!j&&(T.$char("+")||T.$char("-")),!(!$||(D=this.multiplication(),!D));)F.parensInOp=!0,D.parensInOp=!0,G=new E.default.Operation($,[G||F,D],j),j=T.isWhitespace(-1);return G||F}},conditions:function(){var F,D,$=T.i,G;if(F=this.condition(!0),F){for(;!(!T.peek(/^,\s*(not\s*)?\(/)||!T.$char(",")||(D=this.condition(!0),!D));)G=new E.default.Condition("or",G||F,D,$+I);return G||F}},condition:function(F){var D,$,G;function j(){return T.$str("or")}if(D=this.conditionAnd(F),!!D){if($=j(),$)if(G=this.condition(F),G)D=new E.default.Condition($,D,G);else return;return D}},conditionAnd:function(F){var D,$,G,j=this;function W(){var Y=j.negatedCondition(F)||j.parenthesisCondition(F);return!Y&&!F?j.atomicCondition(F):Y}function H(){return T.$str("and")}if(D=W(),!!D){if($=H(),$)if(G=this.conditionAnd(F),G)D=new E.default.Condition($,D,G);else return;return D}},negatedCondition:function(F){if(T.$str("not")){var D=this.parenthesisCondition(F);return D&&(D.negate=!D.negate),D}},parenthesisCondition:function(F){function D(G){var j;if(T.save(),j=G.condition(F),!j){T.restore();return}if(!T.$char(")")){T.restore();return}return T.forget(),j}var $;if(T.save(),!T.$str("(")){T.restore();return}if($=D(this),$)return T.forget(),$;if($=this.atomicCondition(F),!$){T.restore();return}if(!T.$char(")")){T.restore("expected ')' got '".concat(T.currentChar(),"'"));return}return T.forget(),$},atomicCondition:function(F,D){var $=this.entities,G=T.i,j,W,H,Y,te=(function(){return this.addition()||$.keyword()||$.quoted()||$.mixinLookup()}).bind(this);if(D?j=D:j=te(),j)return T.$char(">")?T.$char("=")?Y=">=":Y=">":T.$char("<")?T.$char("=")?Y="<=":Y="<":T.$char("=")&&(T.$char(">")?Y="=>":T.$char("<")?Y="=<":Y="="),Y?(W=te(),W?H=new E.default.Condition(Y,j,W,G+I,!1):z("expected expression")):D||(H=new E.default.Condition("=",j,new E.default.Keyword("true"),G+I,!1)),H},operand:function(){var F=this.entities,D;T.peek(/^-[@$(]/)&&(D=T.$char("-"));var $=this.sub()||F.dimension()||F.color()||F.variable()||F.property()||F.call()||F.quoted(!0)||F.colorKeyword()||this.colorOperand()||F.mixinLookup();return D&&($.parensInOp=!0,$=new E.default.Negative($)),$},expression:function(){var F=[],D,$,G=T.i;do{if(D=this.comment(),D&&!D.isLineComment){F.push(D);continue}D=this.addition()||this.entity(),D instanceof E.default.Comment&&(D=null),D&&(F.push(D),T.peek(/^\/[/*]/)||($=T.$char("/"),$&&F.push(new E.default.Anonymous($,G+I))))}while(D);if(F.length>0)return new E.default.Expression(F)},property:function(){var F=T.$re(/^(\*?-?[_a-zA-Z0-9-]+)\s*:/);if(F)return F[1]},ruleProperty:function(){var F=[],D=[],$,G;T.save();var j=T.$re(/^([_a-zA-Z0-9-]+)\s*:/);if(j)return F=[new E.default.Keyword(j[1])],T.forget(),F;function W(H){var Y=T.i,te=T.$re(H);if(te)return D.push(Y),F.push(te[1])}for(W(/^(\*?)/);W(/^((?:[\w-]+)|(?:[@$]\{[\w-]+\}))/););if(F.length>1&&W(/^((?:\+_|\+)?)\s*:/)){for(T.forget(),F[0]===""&&(F.shift(),D.shift()),G=0;G<F.length;G++)$=F[G],F[G]=$.charAt(0)!=="@"&&$.charAt(0)!=="$"?new E.default.Keyword($):$.charAt(0)==="@"?new E.default.Variable("@".concat($.slice(2,-1)),D[G]+I,L):new E.default.Property("$".concat($.slice(2,-1)),D[G]+I,L);return F}T.restore()}}}};return P.serializeVars=function(C){var M="";for(var k in C)if(Object.hasOwnProperty.call(C,k)){var L=C[k];M+="".concat((k[0]==="@"?"":"@")+k,": ").concat(L).concat(String(L).slice(-1)===";"?"":";")}return M},parser.default=P,parser}var hasRequiredSelector;function requireSelector(){if(hasRequiredSelector)return selector;hasRequiredSelector=1,Object.defineProperty(selector,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireElement()),q=y.__importDefault(requireLessError()),d=y.__importStar(requireUtils()),_=y.__importDefault(requireParser()),b=function(w,O,A,S,P,C){this.extendList=O,this.condition=A,this.evaldCondition=!A,this._index=S,this._fileInfo=P,this.elements=this.getElements(w),this.mixinElements_=void 0,this.copyVisibilityInfo(C),this.setParent(this.elements,this)};return b.prototype=Object.assign(new R.default,{type:"Selector",accept:function(w){this.elements&&(this.elements=w.visitArray(this.elements)),this.extendList&&(this.extendList=w.visitArray(this.extendList)),this.condition&&(this.condition=w.visit(this.condition))},createDerived:function(w,O,A){w=this.getElements(w);var S=new b(w,O||this.extendList,null,this.getIndex(),this.fileInfo(),this.visibilityInfo());return S.evaldCondition=d.isNullOrUndefined(A)?this.evaldCondition:A,S.mediaEmpty=this.mediaEmpty,S},getElements:function(w){return w?(typeof w=="string"&&new _.default(this.parse.context,this.parse.importManager,this._fileInfo,this._index).parseNode(w,["selector"],function(O,A){if(O)throw new q.default({index:O.index,message:O.message},this.parse.imports,this._fileInfo.filename);w=A[0].elements}),w):[new E.default("","&",!1,this._index,this._fileInfo)]},createEmptySelectors:function(){var w=new E.default("","&",!1,this._index,this._fileInfo),O=[new b([w],null,null,this._index,this._fileInfo)];return O[0].mediaEmpty=!0,O},match:function(w){var O=this.elements,A=O.length,S,P;if(w=w.mixinElements(),S=w.length,S===0||A<S)return 0;for(P=0;P<S;P++)if(O[P].value!==w[P])return 0;return S},mixinElements:function(){if(this.mixinElements_)return this.mixinElements_;var w=this.elements.map(function(O){return O.combinator.value+(O.value.value||O.value)}).join("").match(/[,&#*.\w-]([\w-]|(\\.))*/g);return w?w[0]==="&"&&w.shift():w=[],this.mixinElements_=w},isJustParentSelector:function(){return!this.mediaEmpty&&this.elements.length===1&&this.elements[0].value==="&"&&(this.elements[0].combinator.value===" "||this.elements[0].combinator.value==="")},eval:function(w){var O=this.condition&&this.condition.eval(w),A=this.elements,S=this.extendList;return A=A&&A.map(function(P){return P.eval(w)}),S=S&&S.map(function(P){return P.eval(w)}),this.createDerived(A,S,O)},genCSS:function(w,O){var A,S;for((!w||!w.firstSelector)&&this.elements[0].combinator.value===""&&O.add(" ",this.fileInfo(),this.getIndex()),A=0;A<this.elements.length;A++)S=this.elements[A],S.genCSS(w,O)},getIsOutput:function(){return this.evaldCondition}}),selector.default=b,selector}var ruleset={},declaration={},value={},hasRequiredValue;function requireValue(){if(hasRequiredValue)return value;hasRequiredValue=1,Object.defineProperty(value,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=function(q){if(!q)throw new Error("Value requires an array argument");Array.isArray(q)?this.value=q:this.value=[q]};return E.prototype=Object.assign(new R.default,{type:"Value",accept:function(q){this.value&&(this.value=q.visitArray(this.value))},eval:function(q){return this.value.length===1?this.value[0].eval(q):new E(this.value.map(function(d){return d.eval(q)}))},genCSS:function(q,d){var _;for(_=0;_<this.value.length;_++)this.value[_].genCSS(q,d),_+1<this.value.length&&d.add(q&&q.compress?",":", ")}}),value.default=E,value}var keyword={},hasRequiredKeyword;function requireKeyword(){if(hasRequiredKeyword)return keyword;hasRequiredKeyword=1,Object.defineProperty(keyword,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=function(q){this.value=q};return E.prototype=Object.assign(new R.default,{type:"Keyword",genCSS:function(q,d){if(this.value==="%")throw{type:"Syntax",message:"Invalid % without number"};d.add(this.value)}}),E.True=new E("true"),E.False=new E("false"),keyword.default=E,keyword}var hasRequiredDeclaration;function requireDeclaration(){if(hasRequiredDeclaration)return declaration;hasRequiredDeclaration=1,Object.defineProperty(declaration,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireValue()),q=y.__importDefault(requireKeyword()),d=y.__importDefault(requireAnonymous()),_=y.__importStar(requireConstants()),b=_.Math;function w(A,S){var P="",C,M=S.length,k={add:function(L){P+=L}};for(C=0;C<M;C++)S[C].eval(A).genCSS(A,k);return P}var O=function(A,S,P,C,M,k,L,I){this.name=A,this.value=S instanceof R.default?S:new E.default([S?new d.default(S):null]),this.important=P?" ".concat(P.trim()):"",this.merge=C,this._index=M,this._fileInfo=k,this.inline=L||!1,this.variable=I!==void 0?I:A.charAt&&A.charAt(0)==="@",this.allowRoot=!0,this.setParent(this.value,this)};return O.prototype=Object.assign(new R.default,{type:"Declaration",genCSS:function(A,S){S.add(this.name+(A.compress?":":": "),this.fileInfo(),this.getIndex());try{this.value.genCSS(A,S)}catch(P){throw P.index=this._index,P.filename=this._fileInfo.filename,P}S.add(this.important+(this.inline||A.lastRule&&A.compress?"":";"),this._fileInfo,this._index)},eval:function(A){var S=!1,P,C=this.name,M,k=this.variable;typeof C!="string"&&(C=C.length===1&&C[0]instanceof q.default?C[0].value:w(A,C),k=!1),C==="font"&&A.math===b.ALWAYS&&(S=!0,P=A.math,A.math=b.PARENS_DIVISION);try{if(A.importantScope.push({}),M=this.value.eval(A),!this.variable&&M.type==="DetachedRuleset")throw{message:"Rulesets cannot be evaluated on a property.",index:this.getIndex(),filename:this.fileInfo().filename};var L=this.important,I=A.importantScope.pop();return!L&&I.important&&(L=I.important),new O(C,M,L,this.merge,this.getIndex(),this.fileInfo(),this.inline,k)}catch(B){throw typeof B.index!="number"&&(B.index=this.getIndex(),B.filename=this.fileInfo().filename),B}finally{S&&(A.math=P)}},makeImportant:function(){return new O(this.name,this.value,"!important",this.merge,this.getIndex(),this.fileInfo(),this.inline)}}),declaration.default=O,declaration}var comment={},debugInfo={},hasRequiredDebugInfo;function requireDebugInfo(){if(hasRequiredDebugInfo)return debugInfo;hasRequiredDebugInfo=1,Object.defineProperty(debugInfo,"__esModule",{value:!0});function y(q){return"/* line ".concat(q.debugInfo.lineNumber,", ").concat(q.debugInfo.fileName,` */ `)}function R(q){var d=q.debugInfo.fileName;return/^[a-z]+:\/\//i.test(d)||(d="file://".concat(d)),"@media -sass-debug-info{filename{font-family:".concat(d.replace(/([.:/\\])/g,function(_){return _=="\\"&&(_="/"),"\\".concat(_)}),"}line{font-family:\\00003").concat(q.debugInfo.lineNumber,`}} `)}function E(q,d,_){var b="";if(q.dumpLineNumbers&&!q.compress)switch(q.dumpLineNumbers){case"comments":b=y(d);break;case"mediaquery":b=R(d);break;case"all":b=y(d)+(_||"")+R(d);break}return b}return debugInfo.default=E,debugInfo}var hasRequiredComment;function requireComment(){if(hasRequiredComment)return comment;hasRequiredComment=1,Object.defineProperty(comment,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireDebugInfo()),q=function(d,_,b,w){this.value=d,this.isLineComment=_,this._index=b,this._fileInfo=w,this.allowRoot=!0};return q.prototype=Object.assign(new R.default,{type:"Comment",genCSS:function(d,_){this.debugInfo&&_.add((0,E.default)(d,this),this.fileInfo(),this.getIndex()),_.add(this.value)},isSilent:function(d){var _=d.compress&&this.value[2]!=="!";return this.isLineComment||_}}),comment.default=q,comment}var _default={},hasRequired_default;function require_default(){if(hasRequired_default)return _default;hasRequired_default=1,Object.defineProperty(_default,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireKeyword()),E=y.__importStar(requireUtils()),q={eval:function(){var d=this.value_,_=this.error_;if(_)throw _;if(!E.isNullOrUndefined(d))return d?R.default.True:R.default.False},value:function(d){this.value_=d},error:function(d){this.error_=d},reset:function(){this.value_=this.error_=null}};return _default.default=q,_default}var hasRequiredRuleset;function requireRuleset(){if(hasRequiredRuleset)return ruleset;hasRequiredRuleset=1,Object.defineProperty(ruleset,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireDeclaration()),q=y.__importDefault(requireKeyword()),d=y.__importDefault(requireComment()),_=y.__importDefault(requireParen()),b=y.__importDefault(requireSelector()),w=y.__importDefault(requireElement()),O=y.__importDefault(requireAnonymous()),A=y.__importDefault(requireContexts()),S=y.__importDefault(requireFunctionRegistry()),P=y.__importDefault(require_default()),C=y.__importDefault(requireDebugInfo()),M=y.__importStar(requireUtils()),k=y.__importDefault(requireParser()),L=function(I,B,T,z){this.selectors=I,this.rules=B,this._lookups={},this._variables=null,this._properties=null,this.strictImports=T,this.copyVisibilityInfo(z),this.allowRoot=!0,this.setParent(this.selectors,this),this.setParent(this.rules,this)};return L.prototype=Object.assign(new R.default,{type:"Ruleset",isRuleset:!0,isRulesetLike:function(){return!0},accept:function(I){this.paths?this.paths=I.visitArray(this.paths,!0):this.selectors&&(this.selectors=I.visitArray(this.selectors)),this.rules&&this.rules.length&&(this.rules=I.visitArray(this.rules))},eval:function(I){var B,T,z,V,N,U=!1;if(this.selectors&&(T=this.selectors.length)){for(B=new Array(T),P.default.error({type:"Syntax",message:"it is currently only allowed in parametric mixin guards,"}),V=0;V<T;V++){z=this.selectors[V].eval(I);for(var x=0;x<z.elements.length;x++)if(z.elements[x].isVariable){N=!0;break}B[V]=z,z.evaldCondition&&(U=!0)}if(N){var K=new Array(T);for(V=0;V<T;V++)z=B[V],K[V]=z.toCSS(I);var F=B[0].getIndex(),D=B[0].fileInfo();new k.default(I,this.parse.importManager,D,F).parseNode(K.join(","),["selectors"],function(ie,re){re&&(B=M.flattenArray(re))})}P.default.reset()}else U=!0;var $=this.rules?M.copyArray(this.rules):null,G=new L(B,$,this.strictImports,this.visibilityInfo()),j,W;G.originalRuleset=this,G.root=this.root,G.firstRoot=this.firstRoot,G.allowImports=this.allowImports,this.debugInfo&&(G.debugInfo=this.debugInfo),U||($.length=0),G.functionRegistry=(function(ie){for(var re=0,ee=ie.length,Q;re!==ee;++re)if(Q=ie[re].functionRegistry,Q)return Q;return S.default})(I.frames).inherit();var H=I.frames;H.unshift(G);var Y=I.selectors;Y||(I.selectors=Y=[]),Y.unshift(this.selectors),(G.root||G.allowImports||!G.strictImports)&&G.evalImports(I);var te=G.rules;for(V=0;j=te[V];V++)j.evalFirst&&(te[V]=j.eval(I));var J=I.mediaBlocks&&I.mediaBlocks.length||0;for(V=0;j=te[V];V++)j.type==="MixinCall"?($=j.eval(I).filter(function(ie){return ie instanceof E.default&&ie.variable?!G.variable(ie.name):!0}),te.splice.apply(te,[V,1].concat($)),V+=$.length-1,G.resetCache()):j.type==="VariableCall"&&($=j.eval(I).rules.filter(function(ie){return!(ie instanceof E.default&&ie.variable)}),te.splice.apply(te,[V,1].concat($)),V+=$.length-1,G.resetCache());for(V=0;j=te[V];V++)j.evalFirst||(te[V]=j=j.eval?j.eval(I):j);for(V=0;j=te[V];V++)if(j instanceof L&&j.selectors&&j.selectors.length===1&&j.selectors[0]&&j.selectors[0].isJustParentSelector()){te.splice(V--,1);for(var x=0;W=j.rules[x];x++)W instanceof R.default&&(W.copyVisibilityInfo(j.visibilityInfo()),(!(W instanceof E.default)||!W.variable)&&te.splice(++V,0,W))}if(H.shift(),Y.shift(),I.mediaBlocks)for(V=J;V<I.mediaBlocks.length;V++)I.mediaBlocks[V].bubbleSelectors(B);return G},evalImports:function(I){var B=this.rules,T,z;if(B)for(T=0;T<B.length;T++)B[T].type==="Import"&&(z=B[T].eval(I),z&&(z.length||z.length===0)?(B.splice.apply(B,[T,1].concat(z)),T+=z.length-1):B.splice(T,1,z),this.resetCache())},makeImportant:function(){var I=new L(this.selectors,this.rules.map(function(B){return B.makeImportant?B.makeImportant():B}),this.strictImports,this.visibilityInfo());return I},matchArgs:function(I){return!I||I.length===0},matchCondition:function(I,B){var T=this.selectors[this.selectors.length-1];return!(!T.evaldCondition||T.condition&&!T.condition.eval(new A.default.Eval(B,B.frames)))},resetCache:function(){this._rulesets=null,this._variables=null,this._properties=null,this._lookups={}},variables:function(){return this._variables||(this._variables=this.rules?this.rules.reduce(function(I,B){if(B instanceof E.default&&B.variable===!0&&(I[B.name]=B),B.type==="Import"&&B.root&&B.root.variables){var T=B.root.variables();for(var z in T)T.hasOwnProperty(z)&&(I[z]=B.root.variable(z))}return I},{}):{}),this._variables},properties:function(){return this._properties||(this._properties=this.rules?this.rules.reduce(function(I,B){if(B instanceof E.default&&B.variable!==!0){var T=B.name.length===1&&B.name[0]instanceof q.default?B.name[0].value:B.name;I["$".concat(T)]?I["$".concat(T)].push(B):I["$".concat(T)]=[B]}return I},{}):{}),this._properties},variable:function(I){var B=this.variables()[I];if(B)return this.parseValue(B)},property:function(I){var B=this.properties()[I];if(B)return this.parseValue(B)},lastDeclaration:function(){for(var I=this.rules.length;I>0;I--){var B=this.rules[I-1];if(B instanceof E.default)return this.parseValue(B)}},parseValue:function(I){var B=this;function T(V){return V.value instanceof O.default&&!V.parsed&&(typeof V.value.value=="string"?new k.default(this.parse.context,this.parse.importManager,V.fileInfo(),V.value.getIndex()).parseNode(V.value.value,["value","important"],function(N,U){N&&(V.parsed=!0),U&&(V.value=U[0],V.important=U[1]||"",V.parsed=!0)}):V.parsed=!0),V}if(Array.isArray(I)){var z=[];return I.forEach(function(V){z.push(T.call(B,V))}),z}else return T.call(B,I)},rulesets:function(){if(!this.rules)return[];var I=[],B=this.rules,T,z;for(T=0;z=B[T];T++)z.isRuleset&&I.push(z);return I},prependRule:function(I){var B=this.rules;B?B.unshift(I):this.rules=[I],this.setParent(I,this)},find:function(I,B,T){B=B||this;var z=[],V,N,U=I.toCSS();return U in this._lookups?this._lookups[U]:(this.rulesets().forEach(function(x){if(x!==B){for(var K=0;K<x.selectors.length;K++)if(V=I.match(x.selectors[K]),V){if(I.elements.length>V){if(!T||T(x)){N=x.find(new b.default(I.elements.slice(V)),B,T);for(var F=0;F<N.length;++F)N[F].path.push(x);Array.prototype.push.apply(z,N)}}else z.push({rule:x,path:[]});break}}}),this._lookups[U]=z,z)},genCSS:function(I,B){var T,z,V=[],N=[],U,x,K;I.tabLevel=I.tabLevel||0,this.root||I.tabLevel++;var F=I.compress?"":Array(I.tabLevel+1).join(" "),D=I.compress?"":Array(I.tabLevel).join(" "),$,G=0,j=0;for(T=0;x=this.rules[T];T++)x instanceof d.default?(j===T&&j++,N.push(x)):x.isCharset&&x.isCharset()?(N.splice(G,0,x),G++,j++):x.type==="Import"?(N.splice(j,0,x),j++):N.push(x);if(N=V.concat(N),!this.root){U=(0,C.default)(I,this,D),U&&(B.add(U),B.add(D));var W=this.paths,H=W.length,Y=void 0;for($=I.compress?",":`, `.concat(D),T=0;T<H;T++)if(K=W[T],!!(Y=K.length))for(T>0&&B.add($),I.firstSelector=!0,K[0].genCSS(I,B),I.firstSelector=!1,z=1;z<Y;z++)K[z].genCSS(I,B);B.add((I.compress?"{":` { `)+F)}for(T=0;x=N[T];T++){T+1===N.length&&(I.lastRule=!0);var te=I.lastRule;x.isRulesetLike(x)&&(I.lastRule=!1),x.genCSS?x.genCSS(I,B):x.value&&B.add(x.value.toString()),I.lastRule=te,!I.lastRule&&x.isVisible()?B.add(I.compress?"":` `.concat(F)):I.lastRule=!1}this.root||(B.add(I.compress?"}":` `.concat(D,"}")),I.tabLevel--),!B.isEmpty()&&!I.compress&&this.firstRoot&&B.add(` `)},joinSelectors:function(I,B,T){for(var z=0;z<T.length;z++)this.joinSelector(I,B,T[z])},joinSelector:function(I,B,T){function z(W,H){var Y,te;if(W.length===0)Y=new _.default(W[0]);else{var J=new Array(W.length);for(te=0;te<W.length;te++)J[te]=new w.default(null,W[te],H.isVariable,H._index,H._fileInfo);Y=new _.default(new b.default(J))}return Y}function V(W,H){var Y,te;return Y=new w.default(null,W,H.isVariable,H._index,H._fileInfo),te=new b.default([Y]),te}function N(W,H,Y,te){var J,ie,re;if(J=[],W.length>0?(J=M.copyArray(W),ie=J.pop(),re=te.createDerived(M.copyArray(ie.elements))):re=te.createDerived([]),H.length>0){var ee=Y.combinator,Q=H[0].elements[0];ee.emptyOrWhitespace&&!Q.combinator.emptyOrWhitespace&&(ee=Q.combinator),re.elements.push(new w.default(ee,Q.value,Y.isVariable,Y._index,Y._fileInfo)),re.elements=re.elements.concat(H[0].elements.slice(1))}if(re.elements.length!==0&&J.push(re),H.length>1){var X=H.slice(1);X=X.map(function(Z){return Z.createDerived(Z.elements,[])}),J=J.concat(X)}return J}function U(W,H,Y,te,J){var ie;for(ie=0;ie<W.length;ie++){var re=N(W[ie],H,Y,te);J.push(re)}return J}function x(W,H){var Y,te;if(W.length!==0){if(H.length===0){H.push([new b.default(W)]);return}for(Y=0;te=H[Y];Y++)te.length>0?te[te.length-1]=te[te.length-1].createDerived(te[te.length-1].elements.concat(W)):te.push(new b.default(W))}}function K(W,H,Y){var te,J,ie,re,ee,Q,X,Z,se=!1,ne,ae;function he(_e){var qe;return!(_e.value instanceof _.default)||(qe=_e.value.value,!(qe instanceof b.default))?null:qe}for(re=[],ee=[[]],te=0;Z=Y.elements[te];te++)if(Z.value!=="&"){var ve=he(Z);if(ve!==null){x(re,ee);var ge=[],ce=void 0,be=[];for(ce=K(ge,H,ve),se=se||ce,ie=0;ie<ge.length;ie++){var Re=V(z(ge[ie],Z),Z);U(ee,[Re],Z,Y,be)}ee=be,re=[]}else re.push(Z)}else{for(se=!0,Q=[],x(re,ee),J=0;J<ee.length;J++)if(X=ee[J],H.length===0)X.length>0&&X[0].elements.push(new w.default(Z.combinator,"",Z.isVariable,Z._index,Z._fileInfo)),Q.push(X);else for(ie=0;ie<H.length;ie++){var we=N(X,H[ie],Z,Y);Q.push(we)}ee=Q,re=[]}for(x(re,ee),te=0;te<ee.length;te++)ne=ee[te].length,ne>0&&(W.push(ee[te]),ae=ee[te][ne-1],ee[te][ne-1]=ae.createDerived(ae.elements,Y.extendList));return se}function F(W,H){var Y=H.createDerived(H.elements,H.extendList,H.evaldCondition);return Y.copyVisibilityInfo(W),Y}var D,$,G;if($=[],G=K($,B,T),!G)if(B.length>0)for($=[],D=0;D<B.length;D++){var j=B[D].map(F.bind(this,T.visibilityInfo()));j.push(T),$.push(j)}else $=[[T]];for(D=0;D<$.length;D++)I.push($[D])}}),ruleset.default=L,ruleset}var nestedAtRule={},expression={},dimension={},unit={},hasRequiredUnit;function requireUnit(){if(hasRequiredUnit)return unit;hasRequiredUnit=1,Object.defineProperty(unit,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireUnitConversions()),q=y.__importStar(requireUtils()),d=function(_,b,w){this.numerator=_?q.copyArray(_).sort():[],this.denominator=b?q.copyArray(b).sort():[],w?this.backupUnit=w:_&&_.length&&(this.backupUnit=_[0])};return d.prototype=Object.assign(new R.default,{type:"Unit",clone:function(){return new d(q.copyArray(this.numerator),q.copyArray(this.denominator),this.backupUnit)},genCSS:function(_,b){var w=_&&_.strictUnits;this.numerator.length===1?b.add(this.numerator[0]):!w&&this.backupUnit?b.add(this.backupUnit):!w&&this.denominator.length&&b.add(this.denominator[0])},toString:function(){var _,b=this.numerator.join("*");for(_=0;_<this.denominator.length;_++)b+="/".concat(this.denominator[_]);return b},compare:function(_){return this.is(_.toString())?0:void 0},is:function(_){return this.toString().toUpperCase()===_.toUpperCase()},isLength:function(){return RegExp("^(px|em|ex|ch|rem|in|cm|mm|pc|pt|ex|vw|vh|vmin|vmax)$","gi").test(this.toCSS())},isEmpty:function(){return this.numerator.length===0&&this.denominator.length===0},isSingular:function(){return this.numerator.length<=1&&this.denominator.length===0},map:function(_){var b;for(b=0;b<this.numerator.length;b++)this.numerator[b]=_(this.numerator[b],!1);for(b=0;b<this.denominator.length;b++)this.denominator[b]=_(this.denominator[b],!0)},usedUnits:function(){var _,b={},w,O;w=function(A){return _.hasOwnProperty(A)&&!b[O]&&(b[O]=A),A};for(O in E.default)E.default.hasOwnProperty(O)&&(_=E.default[O],this.map(w));return b},cancel:function(){var _={},b,w;for(w=0;w<this.numerator.length;w++)b=this.numerator[w],_[b]=(_[b]||0)+1;for(w=0;w<this.denominator.length;w++)b=this.denominator[w],_[b]=(_[b]||0)-1;this.numerator=[],this.denominator=[];for(b in _)if(_.hasOwnProperty(b)){var O=_[b];if(O>0)for(w=0;w<O;w++)this.numerator.push(b);else if(O<0)for(w=0;w<-O;w++)this.denominator.push(b)}this.numerator.sort(),this.denominator.sort()}}),unit.default=d,unit}var hasRequiredDimension;function requireDimension(){if(hasRequiredDimension)return dimension;hasRequiredDimension=1,Object.defineProperty(dimension,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireUnitConversions()),q=y.__importDefault(requireUnit()),d=y.__importDefault(requireColor$1()),_=function(b,w){if(this.value=parseFloat(b),isNaN(this.value))throw new Error("Dimension is not a number.");this.unit=w&&w instanceof q.default?w:new q.default(w?[w]:void 0),this.setParent(this.unit,this)};return _.prototype=Object.assign(new R.default,{type:"Dimension",accept:function(b){this.unit=b.visit(this.unit)},eval:function(b){return this},toColor:function(){return new d.default([this.value,this.value,this.value])},genCSS:function(b,w){if(b&&b.strictUnits&&!this.unit.isSingular())throw new Error("Multiple units in dimension. Correct the units or use the unit function. Bad unit: ".concat(this.unit.toString()));var O=this.fround(b,this.value),A=String(O);if(O!==0&&O<1e-6&&O>-1e-6&&(A=O.toFixed(20).replace(/0+$/,"")),b&&b.compress){if(O===0&&this.unit.isLength()){w.add(A);return}O>0&&O<1&&(A=A.substr(1))}w.add(A),this.unit.genCSS(b,w)},operate:function(b,w,O){var A=this._operate(b,w,this.value,O.value),S=this.unit.clone();if(w==="+"||w==="-"){if(S.numerator.length===0&&S.denominator.length===0)S=O.unit.clone(),this.unit.backupUnit&&(S.backupUnit=this.unit.backupUnit);else if(!(O.unit.numerator.length===0&&S.denominator.length===0)){if(O=O.convertTo(this.unit.usedUnits()),b.strictUnits&&O.unit.toString()!==S.toString())throw new Error("Incompatible units. Change the units or use the unit function. "+"Bad units: '".concat(S.toString(),"' and '").concat(O.unit.toString(),"'."));A=this._operate(b,w,this.value,O.value)}}else w==="*"?(S.numerator=S.numerator.concat(O.unit.numerator).sort(),S.denominator=S.denominator.concat(O.unit.denominator).sort(),S.cancel()):w==="/"&&(S.numerator=S.numerator.concat(O.unit.denominator).sort(),S.denominator=S.denominator.concat(O.unit.numerator).sort(),S.cancel());return new _(A,S)},compare:function(b){var w,O;if(b instanceof _){if(this.unit.isEmpty()||b.unit.isEmpty())w=this,O=b;else if(w=this.unify(),O=b.unify(),w.unit.compare(O.unit)!==0)return;return R.default.numericCompare(w.value,O.value)}},unify:function(){return this.convertTo({length:"px",duration:"s",angle:"rad"})},convertTo:function(b){var w=this.value,O=this.unit.clone(),A,S,P,C,M={},k;if(typeof b=="string"){for(A in E.default)E.default[A].hasOwnProperty(b)&&(M={},M[A]=b);b=M}k=function(L,I){return P.hasOwnProperty(L)?(I?w=w/(P[L]/P[C]):w=w*(P[L]/P[C]),C):L};for(S in b)b.hasOwnProperty(S)&&(C=b[S],P=E.default[S],O.map(k));return O.cancel(),new _(w,O)}}),dimension.default=_,dimension}var hasRequiredExpression;function requireExpression(){if(hasRequiredExpression)return expression;hasRequiredExpression=1,Object.defineProperty(expression,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireParen()),q=y.__importDefault(requireComment()),d=y.__importDefault(requireDimension()),_=y.__importDefault(requireAnonymous()),b=function(w,O){if(this.value=w,this.noSpacing=O,!w)throw new Error("Expression requires an array parameter")};return b.prototype=Object.assign(new R.default,{type:"Expression",accept:function(w){this.value=w.visitArray(this.value)},eval:function(w){var O=this.noSpacing,A,S=w.isMathOn(),P=this.parens,C=!1;return P&&w.inParenthesis(),this.value.length>1?A=new b(this.value.map(function(M){return M.eval?M.eval(w):M}),this.noSpacing):this.value.length===1?(this.value[0].parens&&!this.value[0].parensInOp&&!w.inCalc&&(C=!0),A=this.value[0].eval(w)):A=this,P&&w.outOfParenthesis(),this.parens&&this.parensInOp&&!S&&!C&&!(A instanceof d.default)&&(A=new E.default(A)),A.noSpacing=A.noSpacing||O,A},genCSS:function(w,O){for(var A=0;A<this.value.length;A++)this.value[A].genCSS(w,O),!this.noSpacing&&A+1<this.value.length&&(A+1<this.value.length&&!(this.value[A+1]instanceof _.default)||this.value[A+1]instanceof _.default&&this.value[A+1].value!==",")&&O.add(" ")},throwAwayComments:function(){this.value=this.value.filter(function(w){return!(w instanceof q.default)})}}),expression.default=b,expression}var hasRequiredNestedAtRule;function requireNestedAtRule(){if(hasRequiredNestedAtRule)return nestedAtRule;hasRequiredNestedAtRule=1,Object.defineProperty(nestedAtRule,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireRuleset()),E=y.__importDefault(requireValue()),q=y.__importDefault(requireSelector()),d=y.__importDefault(requireAnonymous()),_=y.__importDefault(requireExpression()),b=y.__importStar(requireUtils()),w={isRulesetLike:function(){return!0},accept:function(O){this.features&&(this.features=O.visit(this.features)),this.rules&&(this.rules=O.visitArray(this.rules))},evalFunction:function(){if(!(!this.features||!Array.isArray(this.features.value)||this.features.value.length<1))for(var O=this.features.value,A,S,P=0;P<O.length;++P)A=O[P],A.type==="Keyword"&&P+1<O.length&&(A.noSpacing||A.noSpacing==null)&&(S=O[P+1],S.type==="Paren"&&S.noSpacing&&(O[P]=new _.default([A,S]),O.splice(P+1,1),O[P].noSpacing=!0))},evalTop:function(O){this.evalFunction();var A=this;if(O.mediaBlocks.length>1){var S=new q.default([],null,null,this.getIndex(),this.fileInfo()).createEmptySelectors();A=new R.default(S,O.mediaBlocks),A.multiMedia=!0,A.copyVisibilityInfo(this.visibilityInfo()),this.setParent(A,this)}return delete O.mediaBlocks,delete O.mediaPath,A},evalNested:function(O){this.evalFunction();var A,S,P=O.mediaPath.concat([this]);for(A=0;A<P.length;A++){if(P[A].type!==this.type)return O.mediaBlocks.splice(A,1),this;S=P[A].features instanceof E.default?P[A].features.value:P[A].features,P[A]=Array.isArray(S)?S:[S]}return this.features=new E.default(this.permute(P).map(function(C){for(C=C.map(function(M){return M.toCSS?M:new d.default(M)}),A=C.length-1;A>0;A--)C.splice(A,0,new d.default("and"));return new _.default(C)})),this.setParent(this.features,this),new R.default([],[])},permute:function(O){if(O.length===0)return[];if(O.length===1)return O[0];for(var A=[],S=this.permute(O.slice(1)),P=0;P<S.length;P++)for(var C=0;C<O[0].length;C++)A.push([O[0][C]].concat(S[P]));return A},bubbleSelectors:function(O){O&&(this.rules=[new R.default(b.copyArray(O),[this.rules[0]])],this.setParent(this.rules,this))}};return nestedAtRule.default=w,nestedAtRule}var hasRequiredAtrule;function requireAtrule(){if(hasRequiredAtrule)return atrule;hasRequiredAtrule=1,Object.defineProperty(atrule,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireSelector()),q=y.__importDefault(requireRuleset()),d=y.__importDefault(requireAnonymous()),_=y.__importDefault(requireNestedAtRule()),b=function(w,O,A,S,P,C,M,k){var L=this,I,B=new E.default([],null,null,this._index,this._fileInfo).createEmptySelectors();if(this.name=w,this.value=O instanceof R.default?O:O&&new d.default(O),A){if(Array.isArray(A)){var T=this.declarationsBlock(A),z=!0;A.forEach(function(V){V.type==="Ruleset"&&V.rules&&(z=z&&L.declarationsBlock(V.rules,!0))}),T&&!M?(this.simpleBlock=!0,this.declarations=A):z&&A.length===1&&!M&&!O?(this.simpleBlock=!0,this.declarations=A[0].rules?A[0].rules:A):this.rules=A}else{var T=this.declarationsBlock(A.rules);T&&!M&&!O?(this.simpleBlock=!0,this.declarations=A.rules):(this.rules=[A],this.rules[0].selectors=new E.default([],null,null,S,P).createEmptySelectors())}if(!this.simpleBlock)for(I=0;I<this.rules.length;I++)this.rules[I].allowImports=!0;this.setParent(B,this),this.setParent(this.rules,this)}this._index=S,this._fileInfo=P,this.debugInfo=C,this.isRooted=M||!1,this.copyVisibilityInfo(k),this.allowRoot=!0};return b.prototype=Object.assign(new R.default,y.__assign(y.__assign({type:"AtRule"},_.default),{declarationsBlock:function(w,O){return O===void 0&&(O=!1),O?w.filter(function(A){return A.type==="Declaration"||A.type==="Comment"}).length===w.length:w.filter(function(A){return(A.type==="Declaration"||A.type==="Comment")&&!A.merge}).length===w.length},keywordList:function(w){return Array.isArray(w)?w.filter(function(O){return O.type==="Keyword"||O.type==="Comment"}).length===w.length:!1},accept:function(w){var O=this.value,A=this.rules,S=this.declarations;A?this.rules=w.visitArray(A):S&&(this.declarations=w.visitArray(S)),O&&(this.value=w.visit(O))},isRulesetLike:function(){return this.rules||!this.isCharset()},isCharset:function(){return this.name==="@charset"},genCSS:function(w,O){var A=this.value,S=this.rules||this.declarations;O.add(this.name,this.fileInfo(),this.getIndex()),A&&(O.add(" "),A.genCSS(w,O)),this.simpleBlock?this.outputRuleset(w,O,this.declarations):S?this.outputRuleset(w,O,S):O.add(";")},eval:function(w){var O,A,S=this.value,P=this.rules||this.declarations;if(O=w.mediaPath,A=w.mediaBlocks,w.mediaPath=[],w.mediaBlocks=[],S&&(S=S.eval(w),S.value&&this.keywordList(S.value)&&(S=new d.default(S.value.map(function(k){return k.value}).join(", "),this.getIndex(),this.fileInfo()))),P&&(P=this.evalRoot(w,P)),Array.isArray(P)&&P[0].rules&&Array.isArray(P[0].rules)&&P[0].rules.length){var C=this.declarationsBlock(P[0].rules,!0);if(C&&!this.isRooted&&!S){var M=w.pluginManager.less.visitors.ToCSSVisitor.prototype._mergeRules;M(P[0].rules),P=P[0].rules,P.forEach(function(k){return k.merge=!1})}}return this.simpleBlock&&P&&(P[0].functionRegistry=w.frames[0].functionRegistry.inherit(),P=P.map(function(k){return k.eval(w)})),w.mediaPath=O,w.mediaBlocks=A,new b(this.name,S,P,this.getIndex(),this.fileInfo(),this.debugInfo,this.isRooted,this.visibilityInfo())},evalRoot:function(w,O){var A=0,S=0,P=!0,C=!1;this.simpleBlock||(O=[O[0].eval(w)]);var M=[];if(w.frames.length>0)for(var k=function(B){var T=w.frames[B];if(T.type==="Ruleset"&&T.rules&&T.rules.length>0&&T&&!T.root&&T.selectors&&T.selectors.length>0&&(M=M.concat(T.selectors)),M.length>0){for(var z="",V={add:function(U){z+=U}},N=0;N<M.length;N++)M[N].genCSS(w,V);/^&+$/.test(z.replace(/\s+/g,""))?(P=!1,S++):(C=!1,A++)}},L=0;L<w.frames.length;L++)k(L);var I=A>0&&S>0&&!C&&!P;return(this.isRooted&&A>0&&S===0&&!C&&P||!I)&&(O[0].root=!0),O},variable:function(w){if(this.rules)return q.default.prototype.variable.call(this.rules[0],w)},find:function(){if(this.rules)return q.default.prototype.find.apply(this.rules[0],arguments)},rulesets:function(){if(this.rules)return q.default.prototype.rulesets.apply(this.rules[0])},outputRuleset:function(w,O,A){var S=A.length,P;if(w.tabLevel=(w.tabLevel|0)+1,w.compress){for(O.add("{"),P=0;P<S;P++)A[P].genCSS(w,O);O.add("}"),w.tabLevel--;return}var C=` `.concat(Array(w.tabLevel).join(" ")),M="".concat(C," ");if(!S)O.add(" {".concat(C,"}"));else{for(O.add(" {".concat(M)),A[0].genCSS(w,O),P=1;P<S;P++)O.add(M),A[P].genCSS(w,O);O.add("".concat(C,"}"))}w.tabLevel--}})),atrule.default=b,atrule}var detachedRuleset={},hasRequiredDetachedRuleset;function requireDetachedRuleset(){if(hasRequiredDetachedRuleset)return detachedRuleset;hasRequiredDetachedRuleset=1,Object.defineProperty(detachedRuleset,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireContexts()),q=y.__importStar(requireUtils()),d=function(_,b){this.ruleset=_,this.frames=b,this.setParent(this.ruleset,this)};return d.prototype=Object.assign(new R.default,{type:"DetachedRuleset",evalFirst:!0,accept:function(_){this.ruleset=_.visit(this.ruleset)},eval:function(_){var b=this.frames||q.copyArray(_.frames);return new d(this.ruleset,b)},callEval:function(_){return this.ruleset.eval(this.frames?new E.default.Eval(_,this.frames.concat(_.frames)):_)}}),detachedRuleset.default=d,detachedRuleset}var operation={},hasRequiredOperation;function requireOperation(){if(hasRequiredOperation)return operation;hasRequiredOperation=1,Object.defineProperty(operation,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireColor$1()),q=y.__importDefault(requireDimension()),d=y.__importStar(requireConstants()),_=d.Math,b=function(w,O,A){this.op=w.trim(),this.operands=O,this.isSpaced=A};return b.prototype=Object.assign(new R.default,{type:"Operation",accept:function(w){this.operands=w.visitArray(this.operands)},eval:function(w){var O=this.operands[0].eval(w),A=this.operands[1].eval(w),S;if(w.isMathOn(this.op)){if(S=this.op==="./"?"/":this.op,O instanceof q.default&&A instanceof E.default&&(O=O.toColor()),A instanceof q.default&&O instanceof E.default&&(A=A.toColor()),!O.operate||!A.operate){if((O instanceof b||A instanceof b)&&O.op==="/"&&w.math===_.PARENS_DIVISION)return new b(this.op,[O,A],this.isSpaced);throw{type:"Operation",message:"Operation on an invalid type"}}return O.operate(w,S,A)}else return new b(this.op,[O,A],this.isSpaced)},genCSS:function(w,O){this.operands[0].genCSS(w,O),this.isSpaced&&O.add(" "),O.add(this.op),this.isSpaced&&O.add(" "),this.operands[1].genCSS(w,O)}}),operation.default=b,operation}var variable={},call={},functionCaller={},hasRequiredFunctionCaller;function requireFunctionCaller(){if(hasRequiredFunctionCaller)return functionCaller;hasRequiredFunctionCaller=1,Object.defineProperty(functionCaller,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireExpression()),E=(function(){function q(d,_,b,w){this.name=d.toLowerCase(),this.index=b,this.context=_,this.currentFileInfo=w,this.func=_.frames[0].functionRegistry.get(this.name)}return q.prototype.isValid=function(){return!!this.func},q.prototype.call=function(d){var _=this;Array.isArray(d)||(d=[d]);var b=this.func.evalArgs;b!==!1&&(d=d.map(function(O){return O.eval(_.context)}));var w=function(O){return O.type!=="Comment"};return d=d.filter(w).map(function(O){if(O.type==="Expression"){var A=O.value.filter(w);return A.length===1?O.parens&&A[0].op==="/"?O:A[0]:new R.default(A)}return O}),b===!1?this.func.apply(this,y.__spreadArray([this.context],d,!1)):this.func.apply(this,d)},q})();return functionCaller.default=E,functionCaller}var hasRequiredCall;function requireCall(){if(hasRequiredCall)return call;hasRequiredCall=1,Object.defineProperty(call,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireAnonymous()),q=y.__importDefault(requireFunctionCaller()),d=function(_,b,w,O){this.name=_,this.args=b,this.calc=_==="calc",this._index=w,this._fileInfo=O};return d.prototype=Object.assign(new R.default,{type:"Call",accept:function(_){this.args&&(this.args=_.visitArray(this.args))},eval:function(_){var b=this,w=_.mathOn;_.mathOn=!this.calc,(this.calc||_.inCalc)&&_.enterCalc();var O=function(){(b.calc||_.inCalc)&&_.exitCalc(),_.mathOn=w},A,S=new q.default(this.name,_,this.getIndex(),this.fileInfo());if(S.isValid())try{A=S.call(this.args),O()}catch(C){throw C.hasOwnProperty("line")&&C.hasOwnProperty("column")?C:{type:C.type||"Runtime",message:"Error evaluating function `".concat(this.name,"`").concat(C.message?": ".concat(C.message):""),index:this.getIndex(),filename:this.fileInfo().filename,line:C.lineNumber,column:C.columnNumber}}if(A!=null)return A instanceof R.default||(!A||A===!0?A=new E.default(null):A=new E.default(A.toString())),A._index=this._index,A._fileInfo=this._fileInfo,A;var P=this.args.map(function(C){return C.eval(_)});return O(),new d(this.name,P,this.getIndex(),this.fileInfo())},genCSS:function(_,b){b.add("".concat(this.name,"("),this.fileInfo(),this.getIndex());for(var w=0;w<this.args.length;w++)this.args[w].genCSS(_,b),w+1<this.args.length&&b.add(", ");b.add(")")}}),call.default=d,call}var hasRequiredVariable;function requireVariable(){if(hasRequiredVariable)return variable;hasRequiredVariable=1,Object.defineProperty(variable,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireCall()),q=function(d,_,b){this.name=d,this._index=_,this._fileInfo=b};return q.prototype=Object.assign(new R.default,{type:"Variable",eval:function(d){var _,b=this.name;if(b.indexOf("@@")===0&&(b="@".concat(new q(b.slice(1),this.getIndex(),this.fileInfo()).eval(d).value)),this.evaluating)throw{type:"Name",message:"Recursive variable definition for ".concat(b),filename:this.fileInfo().filename,index:this.getIndex()};if(this.evaluating=!0,_=this.find(d.frames,function(w){var O=w.variable(b);if(O){if(O.important){var A=d.importantScope[d.importantScope.length-1];A.important=O.important}return d.inCalc?new E.default("_SELF",[O.value]).eval(d):O.value.eval(d)}}),_)return this.evaluating=!1,_;throw{type:"Name",message:"variable ".concat(b," is undefined"),filename:this.fileInfo().filename,index:this.getIndex()}},find:function(d,_){for(var b=0,w=void 0;b<d.length;b++)if(w=_.call(d,d[b]),w)return w;return null}}),variable.default=q,variable}var property={},hasRequiredProperty;function requireProperty(){if(hasRequiredProperty)return property;hasRequiredProperty=1,Object.defineProperty(property,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireDeclaration()),q=function(d,_,b){this.name=d,this._index=_,this._fileInfo=b};return q.prototype=Object.assign(new R.default,{type:"Property",eval:function(d){var _,b=this.name,w=d.pluginManager.less.visitors.ToCSSVisitor.prototype._mergeRules;if(this.evaluating)throw{type:"Name",message:"Recursive property reference for ".concat(b),filename:this.fileInfo().filename,index:this.getIndex()};if(this.evaluating=!0,_=this.find(d.frames,function(O){var A,S=O.property(b);if(S){for(var P=0;P<S.length;P++)A=S[P],S[P]=new E.default(A.name,A.value,A.important,A.merge,A.index,A.currentFileInfo,A.inline,A.variable);if(w(S),A=S[S.length-1],A.important){var C=d.importantScope[d.importantScope.length-1];C.important=A.important}return A=A.value.eval(d),A}}),_)return this.evaluating=!1,_;throw{type:"Name",message:"Property '".concat(b,"' is undefined"),filename:this.currentFileInfo.filename,index:this.index}},find:function(d,_){for(var b=0,w=void 0;b<d.length;b++)if(w=_.call(d,d[b]),w)return w;return null}}),property.default=q,property}var attribute={},hasRequiredAttribute;function requireAttribute(){if(hasRequiredAttribute)return attribute;hasRequiredAttribute=1,Object.defineProperty(attribute,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=function(q,d,_,b){this.key=q,this.op=d,this.value=_,this.cif=b};return E.prototype=Object.assign(new R.default,{type:"Attribute",eval:function(q){return new E(this.key.eval?this.key.eval(q):this.key,this.op,this.value&&this.value.eval?this.value.eval(q):this.value,this.cif)},genCSS:function(q,d){d.add(this.toCSS(q))},toCSS:function(q){var d=this.key.toCSS?this.key.toCSS(q):this.key;return this.op&&(d+=this.op,d+=this.value.toCSS?this.value.toCSS(q):this.value),this.cif&&(d=d+" "+this.cif),"[".concat(d,"]")}}),attribute.default=E,attribute}var quoted={},hasRequiredQuoted;function requireQuoted(){if(hasRequiredQuoted)return quoted;hasRequiredQuoted=1,Object.defineProperty(quoted,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireVariable()),q=y.__importDefault(requireProperty()),d=function(_,b,w,O,A){this.escaped=w===void 0?!0:w,this.value=b||"",this.quote=_.charAt(0),this._index=O,this._fileInfo=A,this.variableRegex=/@\{([\w-]+)\}/g,this.propRegex=/\$\{([\w-]+)\}/g,this.allowRoot=w};return d.prototype=Object.assign(new R.default,{type:"Quoted",genCSS:function(_,b){this.escaped||b.add(this.quote,this.fileInfo(),this.getIndex()),b.add(this.value),this.escaped||b.add(this.quote)},containsVariables:function(){return this.value.match(this.variableRegex)},eval:function(_){var b=this,w=this.value,O=function(P,C,M){var k=new E.default("@".concat(C??M),b.getIndex(),b.fileInfo()).eval(_,!0);return k instanceof d?k.value:k.toCSS()},A=function(P,C,M){var k=new q.default("$".concat(C??M),b.getIndex(),b.fileInfo()).eval(_,!0);return k instanceof d?k.value:k.toCSS()};function S(P,C,M){var k=P;do P=k.toString(),k=P.replace(C,M);while(P!==k);return k}return w=S(w,this.variableRegex,O),w=S(w,this.propRegex,A),new d(this.quote+w+this.quote,w,this.escaped,this.getIndex(),this.fileInfo())},compare:function(_){return _.type==="Quoted"&&!this.escaped&&!_.escaped?R.default.numericCompare(this.value,_.value):_.toCSS&&this.toCSS()===_.toCSS()?0:void 0}}),quoted.default=d,quoted}var url={},hasRequiredUrl;function requireUrl(){if(hasRequiredUrl)return url;hasRequiredUrl=1,Object.defineProperty(url,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode());function E(d){return d.replace(/[()'"\s]/g,function(_){return"\\".concat(_)})}var q=function(d,_,b,w){this.value=d,this._index=_,this._fileInfo=b,this.isEvald=w};return q.prototype=Object.assign(new R.default,{type:"Url",accept:function(d){this.value=d.visit(this.value)},genCSS:function(d,_){_.add("url("),this.value.genCSS(d,_),_.add(")")},eval:function(d){var _=this.value.eval(d),b;if(!this.isEvald&&(b=this.fileInfo()&&this.fileInfo().rootpath,typeof b=="string"&&typeof _.value=="string"&&d.pathRequiresRewrite(_.value)?(_.quote||(b=E(b)),_.value=d.rewritePath(_.value,b)):_.value=d.normalizePath(_.value),d.urlArgs&&!_.value.match(/^\s*data:/))){var w=_.value.indexOf("?")===-1?"?":"&",O=w+d.urlArgs;_.value.indexOf("#")!==-1?_.value=_.value.replace("#","".concat(O,"#")):_.value+=O}return new q(_,this.getIndex(),this.fileInfo(),!0)}}),url.default=q,url}var _import={},media={},hasRequiredMedia;function requireMedia(){if(hasRequiredMedia)return media;hasRequiredMedia=1,Object.defineProperty(media,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireRuleset()),E=y.__importDefault(requireValue()),q=y.__importDefault(requireSelector()),d=y.__importDefault(requireAtrule()),_=y.__importDefault(requireNestedAtRule()),b=function(w,O,A,S,P){this._index=A,this._fileInfo=S;var C=new q.default([],null,null,this._index,this._fileInfo).createEmptySelectors();this.features=new E.default(O),this.rules=[new R.default(C,w)],this.rules[0].allowImports=!0,this.copyVisibilityInfo(P),this.allowRoot=!0,this.setParent(C,this),this.setParent(this.features,this),this.setParent(this.rules,this)};return b.prototype=Object.assign(new d.default,y.__assign(y.__assign({type:"Media"},_.default),{genCSS:function(w,O){O.add("@media ",this._fileInfo,this._index),this.features.genCSS(w,O),this.outputRuleset(w,O,this.rules)},eval:function(w){w.mediaBlocks||(w.mediaBlocks=[],w.mediaPath=[]);var O=new b(null,[],this._index,this._fileInfo,this.visibilityInfo());return this.debugInfo&&(this.rules[0].debugInfo=this.debugInfo,O.debugInfo=this.debugInfo),O.features=this.features.eval(w),w.mediaPath.push(O),w.mediaBlocks.push(O),this.rules[0].functionRegistry=w.frames[0].functionRegistry.inherit(),w.frames.unshift(this.rules[0]),O.rules=[this.rules[0].eval(w)],w.frames.shift(),w.mediaPath.pop(),w.mediaPath.length===0?O.evalTop(w):O.evalNested(w)}})),media.default=b,media}var hasRequired_import;function require_import(){if(hasRequired_import)return _import;hasRequired_import=1,Object.defineProperty(_import,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireMedia()),q=y.__importDefault(requireUrl()),d=y.__importDefault(requireQuoted()),_=y.__importDefault(requireRuleset()),b=y.__importDefault(requireAnonymous()),w=y.__importStar(requireUtils()),O=y.__importDefault(requireLessError()),A=y.__importDefault(requireExpression()),S=function(P,C,M,k,L,I){if(this.options=M,this._index=k,this._fileInfo=L,this.path=P,this.features=C,this.allowRoot=!0,this.options.less!==void 0||this.options.inline)this.css=!this.options.less||this.options.inline;else{var B=this.getPath();B&&/[#.&?]css([?;].*)?$/.test(B)&&(this.css=!0)}this.copyVisibilityInfo(I),this.setParent(this.features,this),this.setParent(this.path,this)};return S.prototype=Object.assign(new R.default,{type:"Import",accept:function(P){this.features&&(this.features=P.visit(this.features)),this.path=P.visit(this.path),!this.options.isPlugin&&!this.options.inline&&this.root&&(this.root=P.visit(this.root))},genCSS:function(P,C){this.css&&this.path._fileInfo.reference===void 0&&(C.add("@import ",this._fileInfo,this._index),this.path.genCSS(P,C),this.features&&(C.add(" "),this.features.genCSS(P,C)),C.add(";"))},getPath:function(){return this.path instanceof q.default?this.path.value.value:this.path.value},isVariableImport:function(){var P=this.path;return P instanceof q.default&&(P=P.value),P instanceof d.default?P.containsVariables():!0},evalForImport:function(P){var C=this.path;return C instanceof q.default&&(C=C.value),new S(C.eval(P),this.features,this.options,this._index,this._fileInfo,this.visibilityInfo())},evalPath:function(P){var C=this.path.eval(P),M=this._fileInfo;if(!(C instanceof q.default)){var k=C.value;M&&k&&P.pathRequiresRewrite(k)?C.value=P.rewritePath(k,M.rootpath):C.value=P.normalizePath(C.value)}return C},eval:function(P){var C=this.doEval(P);return(this.options.reference||this.blocksVisibility())&&(C.length||C.length===0?C.forEach(function(M){M.addVisibilityBlock()}):C.addVisibilityBlock()),C},doEval:function(P){var C,M,k=this.features&&this.features.eval(P);if(this.options.isPlugin){if(this.root&&this.root.eval)try{this.root.eval(P)}catch(V){throw V.message="Plugin error during evaluation",new O.default(V,this.root.imports,this.root.filename)}return M=P.frames[0]&&P.frames[0].functionRegistry,M&&this.root&&this.root.functions&&M.addMultiple(this.root.functions),[]}if(this.skip&&(typeof this.skip=="function"&&(this.skip=this.skip()),this.skip))return[];if(this.features){var L=this.features.value;if(Array.isArray(L)&&L.length>=1){var I=L[0];if(I.type==="Expression"&&Array.isArray(I.value)&&I.value.length>=2){L=I.value;var B=L[0].type==="Keyword"&&L[0].value==="layer"&&L[1].type==="Paren";B&&(this.css=!1)}}}if(this.options.inline){var T=new b.default(this.root,0,{filename:this.importedFilename,reference:this.path._fileInfo&&this.path._fileInfo.reference},!0,!0);return this.features?new E.default([T],this.features.value):[T]}else if(this.css||this.layerCss){var z=new S(this.evalPath(P),k,this.options,this._index);if(this.layerCss&&(z.css=this.layerCss,z.path._fileInfo=this._fileInfo),!z.css&&this.error)throw this.error;return z}else if(this.root){if(this.features){var L=this.features.value;if(Array.isArray(L)&&L.length===1){var I=L[0];if(I.type==="Expression"&&Array.isArray(I.value)&&I.value.length>=2){L=I.value;var B=L[0].type==="Keyword"&&L[0].value==="layer"&&L[1].type==="Paren";if(B)return this.layerCss=!0,L[0]=new A.default(L.slice(0,2)),L.splice(1,1),L[0].noSpacing=!0,this}}}return C=new _.default(null,w.copyArray(this.root.rules)),C.evalImports(P),this.features?new E.default(C.rules,this.features.value):C.rules}else{if(this.features){var L=this.features.value;if(Array.isArray(L)&&L.length>=1&&(L=L[0].value,Array.isArray(L)&&L.length>=2)){var B=L[0].type==="Keyword"&&L[0].value==="layer"&&L[1].type==="Paren";if(B)return this.css=!0,L[0]=new A.default(L.slice(0,2)),L.splice(1,1),L[0].noSpacing=!0,this}}return[]}}}),_import.default=S,_import}var javascript={},jsEvalNode={},hasRequiredJsEvalNode;function requireJsEvalNode(){if(hasRequiredJsEvalNode)return jsEvalNode;hasRequiredJsEvalNode=1,Object.defineProperty(jsEvalNode,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireVariable()),q=function(){};return q.prototype=Object.assign(new R.default,{evaluateJavaScript:function(d,_){var b,w=this,O={};if(!_.javascriptEnabled)throw{message:"Inline JavaScript is not enabled. Is it set in your options?",filename:this.fileInfo().filename,index:this.getIndex()};d=d.replace(/@\{([\w-]+)\}/g,function(P,C){return w.jsify(new E.default("@".concat(C),w.getIndex(),w.fileInfo()).eval(_))});try{d=new Function("return (".concat(d,")"))}catch(P){throw{message:"JavaScript evaluation error: ".concat(P.message," from `").concat(d,"`"),filename:this.fileInfo().filename,index:this.getIndex()}}var A=_.frames[0].variables();for(var S in A)A.hasOwnProperty(S)&&(O[S.slice(1)]={value:A[S].value,toJS:function(){return this.value.eval(_).toCSS()}});try{b=d.call(O)}catch(P){throw{message:"JavaScript evaluation error: '".concat(P.name,": ").concat(P.message.replace(/["]/g,"'"),"'"),filename:this.fileInfo().filename,index:this.getIndex()}}return b},jsify:function(d){return Array.isArray(d.value)&&d.value.length>1?"[".concat(d.value.map(function(_){return _.toCSS()}).join(", "),"]"):d.toCSS()}}),jsEvalNode.default=q,jsEvalNode}var hasRequiredJavascript;function requireJavascript(){if(hasRequiredJavascript)return javascript;hasRequiredJavascript=1,Object.defineProperty(javascript,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireJsEvalNode()),E=y.__importDefault(requireDimension()),q=y.__importDefault(requireQuoted()),d=y.__importDefault(requireAnonymous()),_=function(b,w,O,A){this.escaped=w,this.expression=b,this._index=O,this._fileInfo=A};return _.prototype=Object.assign(new R.default,{type:"JavaScript",eval:function(b){var w=this.evaluateJavaScript(this.expression,b),O=typeof w;return O==="number"&&!isNaN(w)?new E.default(w):O==="string"?new q.default('"'.concat(w,'"'),w,this.escaped,this._index):Array.isArray(w)?new d.default(w.join(", ")):new d.default(w)}}),javascript.default=_,javascript}var assignment={},hasRequiredAssignment;function requireAssignment(){if(hasRequiredAssignment)return assignment;hasRequiredAssignment=1,Object.defineProperty(assignment,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=function(q,d){this.key=q,this.value=d};return E.prototype=Object.assign(new R.default,{type:"Assignment",accept:function(q){this.value=q.visit(this.value)},eval:function(q){return this.value.eval?new E(this.key,this.value.eval(q)):this},genCSS:function(q,d){d.add("".concat(this.key,"=")),this.value.genCSS?this.value.genCSS(q,d):d.add(this.value)}}),assignment.default=E,assignment}var condition={},hasRequiredCondition;function requireCondition(){if(hasRequiredCondition)return condition;hasRequiredCondition=1,Object.defineProperty(condition,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=function(q,d,_,b,w){this.op=q.trim(),this.lvalue=d,this.rvalue=_,this._index=b,this.negate=w};return E.prototype=Object.assign(new R.default,{type:"Condition",accept:function(q){this.lvalue=q.visit(this.lvalue),this.rvalue=q.visit(this.rvalue)},eval:function(q){var d=(function(_,b,w){switch(_){case"and":return b&&w;case"or":return b||w;default:switch(R.default.compare(b,w)){case-1:return _==="<"||_==="=<"||_==="<=";case 0:return _==="="||_===">="||_==="=<"||_==="<=";case 1:return _===">"||_===">=";default:return!1}}})(this.op,this.lvalue.eval(q),this.rvalue.eval(q));return this.negate?!d:d}}),condition.default=E,condition}var queryInParens={},hasRequiredQueryInParens;function requireQueryInParens(){if(hasRequiredQueryInParens)return queryInParens;hasRequiredQueryInParens=1,Object.defineProperty(queryInParens,"__esModule",{value:!0});var y=require$$0$1,R=requireDist(),E=y.__importDefault(requireDeclaration()),q=y.__importDefault(requireNode()),d=function(_,b,w,O,A,S){this.op=_.trim(),this.lvalue=b,this.mvalue=w,this.op2=O?O.trim():null,this.rvalue=A,this._index=S,this.mvalues=[]};return d.prototype=Object.assign(new q.default,{type:"QueryInParens",accept:function(_){this.lvalue=_.visit(this.lvalue),this.mvalue=_.visit(this.mvalue),this.rvalue&&(this.rvalue=_.visit(this.rvalue))},eval:function(_){this.lvalue=this.lvalue.eval(_);for(var b,w,O=0;(w=_.frames[O])&&!(w.type==="Ruleset"&&(b=w.rules.find(function(A){return!!(A instanceof E.default&&A.variable)}),b));O++);return this.mvalueCopy||(this.mvalueCopy=(0,R.copy)(this.mvalue)),b?(this.mvalue=this.mvalueCopy,this.mvalue=this.mvalue.eval(_),this.mvalues.push(this.mvalue)):this.mvalue=this.mvalue.eval(_),this.rvalue&&(this.rvalue=this.rvalue.eval(_)),this},genCSS:function(_,b){this.lvalue.genCSS(_,b),b.add(" "+this.op+" "),this.mvalues.length>0&&(this.mvalue=this.mvalues.shift()),this.mvalue.genCSS(_,b),this.rvalue&&(b.add(" "+this.op2+" "),this.rvalue.genCSS(_,b))}}),queryInParens.default=d,queryInParens}var container={},hasRequiredContainer;function requireContainer(){if(hasRequiredContainer)return container;hasRequiredContainer=1,Object.defineProperty(container,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireRuleset()),E=y.__importDefault(requireValue()),q=y.__importDefault(requireSelector()),d=y.__importDefault(requireAtrule()),_=y.__importDefault(requireNestedAtRule()),b=function(w,O,A,S,P){this._index=A,this._fileInfo=S;var C=new q.default([],null,null,this._index,this._fileInfo).createEmptySelectors();this.features=new E.default(O),this.rules=[new R.default(C,w)],this.rules[0].allowImports=!0,this.copyVisibilityInfo(P),this.allowRoot=!0,this.setParent(C,this),this.setParent(this.features,this),this.setParent(this.rules,this)};return b.prototype=Object.assign(new d.default,y.__assign(y.__assign({type:"Container"},_.default),{genCSS:function(w,O){O.add("@container ",this._fileInfo,this._index),this.features.genCSS(w,O),this.outputRuleset(w,O,this.rules)},eval:function(w){w.mediaBlocks||(w.mediaBlocks=[],w.mediaPath=[]);var O=new b(null,[],this._index,this._fileInfo,this.visibilityInfo());return this.debugInfo&&(this.rules[0].debugInfo=this.debugInfo,O.debugInfo=this.debugInfo),O.features=this.features.eval(w),w.mediaPath.push(O),w.mediaBlocks.push(O),this.rules[0].functionRegistry=w.frames[0].functionRegistry.inherit(),w.frames.unshift(this.rules[0]),O.rules=[this.rules[0].eval(w)],w.frames.shift(),w.mediaPath.pop(),w.mediaPath.length===0?O.evalTop(w):O.evalNested(w)}})),container.default=b,container}var unicodeDescriptor={},hasRequiredUnicodeDescriptor;function requireUnicodeDescriptor(){if(hasRequiredUnicodeDescriptor)return unicodeDescriptor;hasRequiredUnicodeDescriptor=1,Object.defineProperty(unicodeDescriptor,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=function(q){this.value=q};return E.prototype=Object.assign(new R.default,{type:"UnicodeDescriptor"}),unicodeDescriptor.default=E,unicodeDescriptor}var negative={},hasRequiredNegative;function requireNegative(){if(hasRequiredNegative)return negative;hasRequiredNegative=1,Object.defineProperty(negative,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireOperation()),q=y.__importDefault(requireDimension()),d=function(_){this.value=_};return d.prototype=Object.assign(new R.default,{type:"Negative",genCSS:function(_,b){b.add("-"),this.value.genCSS(_,b)},eval:function(_){return _.isMathOn()?new E.default("*",[new q.default(-1),this.value]).eval(_):new d(this.value.eval(_))}}),negative.default=d,negative}var extend={},hasRequiredExtend;function requireExtend(){if(hasRequiredExtend)return extend;hasRequiredExtend=1,Object.defineProperty(extend,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireSelector()),q=function(d,_,b,w,O){switch(this.selector=d,this.option=_,this.object_id=q.next_id++,this.parent_ids=[this.object_id],this._index=b,this._fileInfo=w,this.copyVisibilityInfo(O),this.allowRoot=!0,_){case"!all":case"all":this.allowBefore=!0,this.allowAfter=!0;break;default:this.allowBefore=!1,this.allowAfter=!1;break}this.setParent(this.selector,this)};return q.prototype=Object.assign(new R.default,{type:"Extend",accept:function(d){this.selector=d.visit(this.selector)},eval:function(d){return new q(this.selector.eval(d),this.option,this.getIndex(),this.fileInfo(),this.visibilityInfo())},clone:function(d){return new q(this.selector,this.option,this.getIndex(),this.fileInfo(),this.visibilityInfo())},findSelfSelectors:function(d){var _=[],b,w;for(b=0;b<d.length;b++)w=d[b].elements,b>0&&w.length&&w[0].combinator.value===""&&(w[0].combinator.value=" "),_=_.concat(d[b].elements);this.selfSelectors=[new E.default(_)],this.selfSelectors[0].copyVisibilityInfo(this.visibilityInfo())}}),q.next_id=0,extend.default=q,extend}var variableCall={},hasRequiredVariableCall;function requireVariableCall(){if(hasRequiredVariableCall)return variableCall;hasRequiredVariableCall=1,Object.defineProperty(variableCall,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireVariable()),q=y.__importDefault(requireRuleset()),d=y.__importDefault(requireDetachedRuleset()),_=y.__importDefault(requireLessError()),b=function(w,O,A){this.variable=w,this._index=O,this._fileInfo=A,this.allowRoot=!0};return b.prototype=Object.assign(new R.default,{type:"VariableCall",eval:function(w){var O,A=new E.default(this.variable,this.getIndex(),this.fileInfo()).eval(w),S=new _.default({message:"Could not evaluate variable call ".concat(this.variable)});if(!A.ruleset){if(A.rules)O=A;else if(Array.isArray(A))O=new q.default("",A);else if(Array.isArray(A.value))O=new q.default("",A.value);else throw S;A=new d.default(O)}if(A.ruleset)return A.callEval(w);throw S}}),variableCall.default=b,variableCall}var namespaceValue={},hasRequiredNamespaceValue;function requireNamespaceValue(){if(hasRequiredNamespaceValue)return namespaceValue;hasRequiredNamespaceValue=1,Object.defineProperty(namespaceValue,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireVariable()),q=y.__importDefault(requireRuleset()),d=y.__importDefault(requireSelector()),_=function(b,w,O,A){this.value=b,this.lookups=w,this._index=O,this._fileInfo=A};return _.prototype=Object.assign(new R.default,{type:"NamespaceValue",eval:function(b){var w,O,A=this.value.eval(b);for(w=0;w<this.lookups.length;w++){if(O=this.lookups[w],Array.isArray(A)&&(A=new q.default([new d.default],A)),O==="")A=A.lastDeclaration();else if(O.charAt(0)==="@"){if(O.charAt(1)==="@"&&(O="@".concat(new E.default(O.substr(1)).eval(b).value)),A.variables&&(A=A.variable(O)),!A)throw{type:"Name",message:"variable ".concat(O," not found"),filename:this.fileInfo().filename,index:this.getIndex()}}else{if(O.substring(0,2)==="$@"?O="$".concat(new E.default(O.substr(1)).eval(b).value):O=O.charAt(0)==="$"?O:"$".concat(O),A.properties&&(A=A.property(O)),!A)throw{type:"Name",message:'property "'.concat(O.substr(1),'" not found'),filename:this.fileInfo().filename,index:this.getIndex()};A=A[A.length-1]}A.value&&(A=A.eval(b).value),A.ruleset&&(A=A.ruleset.eval(b))}return A}}),namespaceValue.default=_,namespaceValue}var mixinCall={},mixinDefinition={},hasRequiredMixinDefinition;function requireMixinDefinition(){if(hasRequiredMixinDefinition)return mixinDefinition;hasRequiredMixinDefinition=1,Object.defineProperty(mixinDefinition,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireSelector()),E=y.__importDefault(requireElement()),q=y.__importDefault(requireRuleset()),d=y.__importDefault(requireDeclaration()),_=y.__importDefault(requireDetachedRuleset()),b=y.__importDefault(requireExpression()),w=y.__importDefault(requireContexts()),O=y.__importStar(requireUtils()),A=function(S,P,C,M,k,L,I){this.name=S||"anonymous mixin",this.selectors=[new R.default([new E.default(null,S,!1,this._index,this._fileInfo)])],this.params=P,this.condition=M,this.variadic=k,this.arity=P.length,this.rules=C,this._lookups={};var B=[];this.required=P.reduce(function(T,z){return!z.name||z.name&&!z.value?T+1:(B.push(z.name),T)},0),this.optionalParameters=B,this.frames=L,this.copyVisibilityInfo(I),this.allowRoot=!0};return A.prototype=Object.assign(new q.default,{type:"MixinDefinition",evalFirst:!0,accept:function(S){this.params&&this.params.length&&(this.params=S.visitArray(this.params)),this.rules=S.visitArray(this.rules),this.condition&&(this.condition=S.visit(this.condition))},evalParams:function(S,P,C,M){var k=new q.default(null,null),L,I,B=O.copyArray(this.params),T,z,V,N,U,x,K=0;if(P.frames&&P.frames[0]&&P.frames[0].functionRegistry&&(k.functionRegistry=P.frames[0].functionRegistry.inherit()),P=new w.default.Eval(P,[k].concat(P.frames)),C){for(C=O.copyArray(C),K=C.length,T=0;T<K;T++)if(I=C[T],N=I&&I.name){for(U=!1,z=0;z<B.length;z++)if(!M[z]&&N===B[z].name){M[z]=I.value.eval(S),k.prependRule(new d.default(N,I.value.eval(S))),U=!0;break}if(U){C.splice(T,1),T--;continue}else throw{type:"Runtime",message:"Named argument for ".concat(this.name," ").concat(C[T].name," not found")}}}for(x=0,T=0;T<B.length;T++)if(!M[T]){if(I=C&&C[x],N=B[T].name)if(B[T].variadic){for(L=[],z=x;z<K;z++)L.push(C[z].value.eval(S));k.prependRule(new d.default(N,new b.default(L).eval(S)))}else{if(V=I&&I.value,V)Array.isArray(V)?V=new _.default(new q.default("",V)):V=V.eval(S);else if(B[T].value)V=B[T].value.eval(P),k.resetCache();else throw{type:"Runtime",message:"wrong number of arguments for ".concat(this.name," (").concat(K," for ").concat(this.arity,")")};k.prependRule(new d.default(N,V)),M[T]=V}if(B[T].variadic&&C)for(z=x;z<K;z++)M[z]=C[z].value.eval(S);x++}return k},makeImportant:function(){var S=this.rules?this.rules.map(function(C){return C.makeImportant?C.makeImportant(!0):C}):this.rules,P=new A(this.name,this.params,S,this.condition,this.variadic,this.frames);return P},eval:function(S){return new A(this.name,this.params,this.rules,this.condition,this.variadic,this.frames||O.copyArray(S.frames))},evalCall:function(S,P,C){var M=[],k=this.frames?this.frames.concat(S.frames):S.frames,L=this.evalParams(S,new w.default.Eval(S,k),P,M),I,B;return L.prependRule(new d.default("@arguments",new b.default(M).eval(S))),I=O.copyArray(this.rules),B=new q.default(null,I),B.originalRuleset=this,B=B.eval(new w.default.Eval(S,[this,L].concat(k))),C&&(B=B.makeImportant()),B},matchCondition:function(S,P){return!(this.condition&&!this.condition.eval(new w.default.Eval(P,[this.evalParams(P,new w.default.Eval(P,this.frames?this.frames.concat(P.frames):P.frames),S,[])].concat(this.frames||[]).concat(P.frames))))},matchArgs:function(S,P){var C=S&&S.length||0,M,k=this.optionalParameters,L=S?S.reduce(function(B,T){return k.indexOf(T.name)<0?B+1:B},0):0;if(this.variadic){if(L<this.required-1)return!1}else if(L<this.required||C>this.params.length)return!1;M=Math.min(L,this.arity);for(var I=0;I<M;I++)if(!this.params[I].name&&!this.params[I].variadic&&S[I].value.eval(P).toCSS()!=this.params[I].value.eval(P).toCSS())return!1;return!0}}),mixinDefinition.default=A,mixinDefinition}var hasRequiredMixinCall;function requireMixinCall(){if(hasRequiredMixinCall)return mixinCall;hasRequiredMixinCall=1,Object.defineProperty(mixinCall,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireSelector()),q=y.__importDefault(requireMixinDefinition()),d=y.__importDefault(require_default()),_=function(b,w,O,A,S){this.selector=new E.default(b),this.arguments=w||[],this._index=O,this._fileInfo=A,this.important=S,this.allowRoot=!0,this.setParent(this.selector,this)};return _.prototype=Object.assign(new R.default,{type:"MixinCall",accept:function(b){this.selector&&(this.selector=b.visit(this.selector)),this.arguments.length&&(this.arguments=b.visitArray(this.arguments))},eval:function(b){var w,O,A,S=[],P,C,M=[],k=!1,L,I,B,T,z,V=[],N,U=[],x,K=-1,F=0,D=1,$=2,G,j,W;this.selector=this.selector.eval(b);function H(te,J){var ie,re,ee;for(ie=0;ie<2;ie++){for(U[ie]=!0,d.default.value(ie),re=0;re<J.length&&U[ie];re++)ee=J[re],ee.matchCondition&&(U[ie]=U[ie]&&ee.matchCondition(null,b));te.matchCondition&&(U[ie]=U[ie]&&te.matchCondition(S,b))}return U[0]||U[1]?U[0]!=U[1]?U[1]?D:$:F:K}for(L=0;L<this.arguments.length;L++)if(P=this.arguments[L],C=P.value.eval(b),P.expand&&Array.isArray(C.value))for(C=C.value,I=0;I<C.length;I++)S.push({value:C[I]});else S.push({name:P.name,value:C});for(W=function(te){return te.matchArgs(null,b)},L=0;L<b.frames.length;L++)if((w=b.frames[L].find(this.selector,null,W)).length>0){for(z=!0,I=0;I<w.length;I++){for(O=w[I].rule,A=w[I].path,T=!1,B=0;B<b.frames.length;B++)if(!(O instanceof q.default)&&O===(b.frames[B].originalRuleset||b.frames[B])){T=!0;break}T||O.matchArgs(S,b)&&(N={mixin:O,group:H(O,A)},N.group!==K&&V.push(N),k=!0)}for(d.default.reset(),G=[0,0,0],I=0;I<V.length;I++)G[V[I].group]++;if(G[F]>0)x=$;else if(x=D,G[D]+G[$]>1)throw{type:"Runtime",message:"Ambiguous use of `default()` found when matching for `".concat(this.format(S),"`"),index:this.getIndex(),filename:this.fileInfo().filename};for(I=0;I<V.length;I++)if(N=V[I].group,N===F||N===x)try{O=V[I].mixin,O instanceof q.default||(j=O.originalRuleset||O,O=new q.default("",[],O.rules,null,!1,null,j.visibilityInfo()),O.originalRuleset=j);var Y=O.evalCall(b,S,this.important).rules;this._setVisibilityToReplacement(Y),Array.prototype.push.apply(M,Y)}catch(te){throw{message:te.message,index:this.getIndex(),filename:this.fileInfo().filename,stack:te.stack}}if(k)return M}throw z?{type:"Runtime",message:"No matching definition was found for `".concat(this.format(S),"`"),index:this.getIndex(),filename:this.fileInfo().filename}:{type:"Name",message:"".concat(this.selector.toCSS().trim()," is undefined"),index:this.getIndex(),filename:this.fileInfo().filename}},_setVisibilityToReplacement:function(b){var w,O;if(this.blocksVisibility())for(w=0;w<b.length;w++)O=b[w],O.addVisibilityBlock()},format:function(b){return"".concat(this.selector.toCSS().trim(),"(").concat(b?b.map(function(w){var O="";return w.name&&(O+="".concat(w.name,":")),w.value.toCSS?O+=w.value.toCSS():O+="???",O}).join(", "):"",")")}}),mixinCall.default=_,mixinCall}var hasRequiredTree;function requireTree(){if(hasRequiredTree)return tree;hasRequiredTree=1,Object.defineProperty(tree,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireNode()),E=y.__importDefault(requireColor$1()),q=y.__importDefault(requireAtrule()),d=y.__importDefault(requireDetachedRuleset()),_=y.__importDefault(requireOperation()),b=y.__importDefault(requireDimension()),w=y.__importDefault(requireUnit()),O=y.__importDefault(requireKeyword()),A=y.__importDefault(requireVariable()),S=y.__importDefault(requireProperty()),P=y.__importDefault(requireRuleset()),C=y.__importDefault(requireElement()),M=y.__importDefault(requireAttribute()),k=y.__importDefault(requireCombinator()),L=y.__importDefault(requireSelector()),I=y.__importDefault(requireQuoted()),B=y.__importDefault(requireExpression()),T=y.__importDefault(requireDeclaration()),z=y.__importDefault(requireCall()),V=y.__importDefault(requireUrl()),N=y.__importDefault(require_import()),U=y.__importDefault(requireComment()),x=y.__importDefault(requireAnonymous()),K=y.__importDefault(requireValue()),F=y.__importDefault(requireJavascript()),D=y.__importDefault(requireAssignment()),$=y.__importDefault(requireCondition()),G=y.__importDefault(requireQueryInParens()),j=y.__importDefault(requireParen()),W=y.__importDefault(requireMedia()),H=y.__importDefault(requireContainer()),Y=y.__importDefault(requireUnicodeDescriptor()),te=y.__importDefault(requireNegative()),J=y.__importDefault(requireExtend()),ie=y.__importDefault(requireVariableCall()),re=y.__importDefault(requireNamespaceValue()),ee=y.__importDefault(requireMixinCall()),Q=y.__importDefault(requireMixinDefinition());return tree.default={Node:R.default,Color:E.default,AtRule:q.default,DetachedRuleset:d.default,Operation:_.default,Dimension:b.default,Unit:w.default,Keyword:O.default,Variable:A.default,Property:S.default,Ruleset:P.default,Element:C.default,Attribute:M.default,Combinator:k.default,Selector:L.default,Quoted:I.default,Expression:B.default,Declaration:T.default,Call:z.default,URL:V.default,Import:N.default,Comment:U.default,Anonymous:x.default,Value:K.default,JavaScript:F.default,Assignment:D.default,Condition:$.default,Paren:j.default,Media:W.default,Container:H.default,QueryInParens:G.default,UnicodeDescriptor:Y.default,Negative:te.default,Extend:J.default,VariableCall:ie.default,NamespaceValue:re.default,mixin:{Call:ee.default,Definition:Q.default}},tree}var abstractFileManager={},hasRequiredAbstractFileManager;function requireAbstractFileManager(){if(hasRequiredAbstractFileManager)return abstractFileManager;hasRequiredAbstractFileManager=1,Object.defineProperty(abstractFileManager,"__esModule",{value:!0});var y=(function(){function R(){}return R.prototype.getPath=function(E){var q=E.lastIndexOf("?");return q>0&&(E=E.slice(0,q)),q=E.lastIndexOf("/"),q<0&&(q=E.lastIndexOf("\\")),q<0?"":E.slice(0,q+1)},R.prototype.tryAppendExtension=function(E,q){return/(\.[a-z]*$)|([?;].*)$/.test(E)?E:E+q},R.prototype.tryAppendLessExtension=function(E){return this.tryAppendExtension(E,".less")},R.prototype.supportsSync=function(){return!1},R.prototype.alwaysMakePathsAbsolute=function(){return!1},R.prototype.isPathAbsolute=function(E){return/^(?:[a-z-]+:|\/|\\|#)/i.test(E)},R.prototype.join=function(E,q){return E?E+q:q},R.prototype.pathDiff=function(E,q){var d=this.extractUrlParts(E),_=this.extractUrlParts(q),b,w,O,A,S="";if(d.hostPart!==_.hostPart)return"";for(w=Math.max(_.directories.length,d.directories.length),b=0;b<w&&_.directories[b]===d.directories[b];b++);for(A=_.directories.slice(b),O=d.directories.slice(b),b=0;b<A.length-1;b++)S+="../";for(b=0;b<O.length-1;b++)S+="".concat(O[b],"/");return S},R.prototype.extractUrlParts=function(E,q){var d=/^((?:[a-z-]+:)?\/{2}(?:[^/?#]*\/)|([/\\]))?((?:[^/\\?#]*[/\\])*)([^/\\?#]*)([#?].*)?$/i,_=E.match(d),b={},w=[],O=[],A,S;if(!_)throw new Error("Could not parse sheet href - '".concat(E,"'"));if(q&&(!_[1]||_[2])){if(S=q.match(d),!S)throw new Error("Could not parse page url - '".concat(q,"'"));_[1]=_[1]||S[1]||"",_[2]||(_[3]=S[3]+_[3])}if(_[3])for(w=_[3].replace(/\\/g,"/").split("/"),A=0;A<w.length;A++)w[A]===".."?O.pop():w[A]!=="."&&O.push(w[A]);return b.hostPart=_[1],b.directories=O,b.rawPath=(_[1]||"")+w.join("/"),b.path=(_[1]||"")+O.join("/"),b.filename=_[4],b.fileUrl=b.path+(_[4]||""),b.url=b.fileUrl+(_[5]||""),b},R})();return abstractFileManager.default=y,abstractFileManager}var abstractPluginLoader={},hasRequiredAbstractPluginLoader;function requireAbstractPluginLoader(){if(hasRequiredAbstractPluginLoader)return abstractPluginLoader;hasRequiredAbstractPluginLoader=1,Object.defineProperty(abstractPluginLoader,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireFunctionRegistry()),E=y.__importDefault(requireLessError()),q=(function(){function d(){this.require=function(){return null}}return d.prototype.evalPlugin=function(_,b,w,O,A){var S,P,C,M,k,L,I;k=b.pluginManager,A&&(typeof A=="string"?L=A:L=A.filename);var B=new this.less.FileManager().extractUrlParts(L).filename;if(L&&(C=k.get(L),C)){if(I=this.trySetOptions(C,L,B,O),I)return I;try{C.use&&C.use.call(this.context,C)}catch(z){return z.message=z.message||"Error during @plugin call",new E.default(z,w,L)}return C}M={exports:{},pluginManager:k,fileInfo:A},P=R.default.create();var T=function(z){C=z};try{S=new Function("module","require","registerPlugin","functions","tree","less","fileInfo",_),S(M,this.require(L),T,P,this.less.tree,this.less,A)}catch(z){return new E.default(z,w,L)}if(C||(C=M.exports),C=this.validatePlugin(C,L,B),C instanceof E.default)return C;if(C){if(C.imports=w,C.filename=L,(!C.minVersion||this.compareVersion("3.0.0",C.minVersion)<0)&&(I=this.trySetOptions(C,L,B,O),I)||(k.addPlugin(C,A.filename,P),C.functions=P.getLocalFunctions(),I=this.trySetOptions(C,L,B,O),I))return I;try{C.use&&C.use.call(this.context,C)}catch(z){return z.message=z.message||"Error during @plugin call",new E.default(z,w,L)}}else return new E.default({message:"Not a valid plugin"},w,L);return C},d.prototype.trySetOptions=function(_,b,w,O){if(O&&!_.setOptions)return new E.default({message:"Options have been provided but the plugin ".concat(w," does not support any options.")});try{_.setOptions&&_.setOptions(O)}catch(A){return new E.default(A)}},d.prototype.validatePlugin=function(_,b,w){return _?(typeof _=="function"&&(_=new _),_.minVersion&&this.compareVersion(_.minVersion,this.less.version)<0?new E.default({message:"Plugin ".concat(w," requires version ").concat(this.versionToString(_.minVersion))}):_):null},d.prototype.compareVersion=function(_,b){typeof _=="string"&&(_=_.match(/^(\d+)\.?(\d+)?\.?(\d+)?/),_.shift());for(var w=0;w<_.length;w++)if(_[w]!==b[w])return parseInt(_[w])>parseInt(b[w])?-1:1;return 0},d.prototype.versionToString=function(_){for(var b="",w=0;w<_.length;w++)b+=(b?".":"")+_[w];return b},d.prototype.printUsage=function(_){for(var b=0;b<_.length;b++){var w=_[b];w.printUsage&&w.printUsage()}},d})();return abstractPluginLoader.default=q,abstractPluginLoader}var functions={},boolean={},hasRequiredBoolean;function requireBoolean(){if(hasRequiredBoolean)return boolean;hasRequiredBoolean=1,Object.defineProperty(boolean,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireAnonymous()),E=y.__importDefault(requireKeyword());function q(b){return b?E.default.True:E.default.False}function d(b,w,O,A){return w.eval(b)?O.eval(b):A?A.eval(b):new R.default}d.evalArgs=!1;function _(b,w){try{return w.eval(b),E.default.True}catch{return E.default.False}}return _.evalArgs=!1,boolean.default={isdefined:_,boolean:q,if:d},boolean}var color={},hasRequiredColor;function requireColor(){if(hasRequiredColor)return color;hasRequiredColor=1,Object.defineProperty(color,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireDimension()),E=y.__importDefault(requireColor$1()),q=y.__importDefault(requireQuoted()),d=y.__importDefault(requireAnonymous()),_=y.__importDefault(requireExpression()),b=y.__importDefault(requireOperation()),w;function O(k){return Math.min(1,Math.max(0,k))}function A(k,L){var I=w.hsla(L.h,L.s,L.l,L.a);if(I)return k.value&&/^(rgb|hsl)/.test(k.value)?I.value=k.value:I.value="rgb",I}function S(k){if(k.toHSL)return k.toHSL();throw new Error("Argument cannot be evaluated to a color")}function P(k){if(k.toHSV)return k.toHSV();throw new Error("Argument cannot be evaluated to a color")}function C(k){if(k instanceof R.default)return parseFloat(k.unit.is("%")?k.value/100:k.value);if(typeof k=="number")return k;throw{type:"Argument",message:"color functions take numbers as parameters"}}function M(k,L){return k instanceof R.default&&k.unit.is("%")?parseFloat(k.value*L/100):C(k)}return w={rgb:function(k,L,I){var B=1;if(k instanceof _.default){var T=k.value;if(k=T[0],L=T[1],I=T[2],I instanceof b.default){var z=I;I=z.operands[0],B=z.operands[1]}}var V=w.rgba(k,L,I,B);if(V)return V.value="rgb",V},rgba:function(k,L,I,B){try{if(k instanceof E.default)return L?B=C(L):B=k.alpha,new E.default(k.rgb,B,"rgba");var T=[k,L,I].map(function(z){return M(z,255)});return B=C(B),new E.default(T,B,"rgba")}catch{}},hsl:function(k,L,I){var B=1;if(k instanceof _.default){var T=k.value;if(k=T[0],L=T[1],I=T[2],I instanceof b.default){var z=I;I=z.operands[0],B=z.operands[1]}}var V=w.hsla(k,L,I,B);if(V)return V.value="hsl",V},hsla:function(k,L,I,B){var T,z;function V(U){return U=U<0?U+1:U>1?U-1:U,U*6<1?T+(z-T)*U*6:U*2<1?z:U*3<2?T+(z-T)*(2/3-U)*6:T}try{if(k instanceof E.default)return L?B=C(L):B=k.alpha,new E.default(k.rgb,B,"hsla");k=C(k)%360/360,L=O(C(L)),I=O(C(I)),B=O(C(B)),z=I<=.5?I*(L+1):I+L-I*L,T=I*2-z;var N=[V(k+1/3)*255,V(k)*255,V(k-1/3)*255];return B=C(B),new E.default(N,B,"hsla")}catch{}},hsv:function(k,L,I){return w.hsva(k,L,I,1)},hsva:function(k,L,I,B){k=C(k)%360/360*360,L=C(L),I=C(I),B=C(B);var T,z;T=Math.floor(k/60%6),z=k/60-T;var V=[I,I*(1-L),I*(1-z*L),I*(1-(1-z)*L)],N=[[0,3,1],[2,0,1],[1,0,3],[1,2,0],[3,1,0],[0,1,2]];return w.rgba(V[N[T][0]]*255,V[N[T][1]]*255,V[N[T][2]]*255,B)},hue:function(k){return new R.default(S(k).h)},saturation:function(k){return new R.default(S(k).s*100,"%")},lightness:function(k){return new R.default(S(k).l*100,"%")},hsvhue:function(k){return new R.default(P(k).h)},hsvsaturation:function(k){return new R.default(P(k).s*100,"%")},hsvvalue:function(k){return new R.default(P(k).v*100,"%")},red:function(k){return new R.default(k.rgb[0])},green:function(k){return new R.default(k.rgb[1])},blue:function(k){return new R.default(k.rgb[2])},alpha:function(k){return new R.default(S(k).a)},luma:function(k){return new R.default(k.luma()*k.alpha*100,"%")},luminance:function(k){var L=.2126*k.rgb[0]/255+.7152*k.rgb[1]/255+.0722*k.rgb[2]/255;return new R.default(L*k.alpha*100,"%")},saturate:function(k,L,I){if(!k.rgb)return null;var B=S(k);return typeof I<"u"&&I.value==="relative"?B.s+=B.s*L.value/100:B.s+=L.value/100,B.s=O(B.s),A(k,B)},desaturate:function(k,L,I){var B=S(k);return typeof I<"u"&&I.value==="relative"?B.s-=B.s*L.value/100:B.s-=L.value/100,B.s=O(B.s),A(k,B)},lighten:function(k,L,I){var B=S(k);return typeof I<"u"&&I.value==="relative"?B.l+=B.l*L.value/100:B.l+=L.value/100,B.l=O(B.l),A(k,B)},darken:function(k,L,I){var B=S(k);return typeof I<"u"&&I.value==="relative"?B.l-=B.l*L.value/100:B.l-=L.value/100,B.l=O(B.l),A(k,B)},fadein:function(k,L,I){var B=S(k);return typeof I<"u"&&I.value==="relative"?B.a+=B.a*L.value/100:B.a+=L.value/100,B.a=O(B.a),A(k,B)},fadeout:function(k,L,I){var B=S(k);return typeof I<"u"&&I.value==="relative"?B.a-=B.a*L.value/100:B.a-=L.value/100,B.a=O(B.a),A(k,B)},fade:function(k,L){var I=S(k);return I.a=L.value/100,I.a=O(I.a),A(k,I)},spin:function(k,L){var I=S(k),B=(I.h+L.value)%360;return I.h=B<0?360+B:B,A(k,I)},mix:function(k,L,I){I||(I=new R.default(50));var B=I.value/100,T=B*2-1,z=S(k).a-S(L).a,V=((T*z==-1?T:(T+z)/(1+T*z))+1)/2,N=1-V,U=[k.rgb[0]*V+L.rgb[0]*N,k.rgb[1]*V+L.rgb[1]*N,k.rgb[2]*V+L.rgb[2]*N],x=k.alpha*B+L.alpha*(1-B);return new E.default(U,x)},greyscale:function(k){return w.desaturate(k,new R.default(100))},contrast:function(k,L,I,B){if(!k.rgb)return null;if(typeof I>"u"&&(I=w.rgba(255,255,255,1)),typeof L>"u"&&(L=w.rgba(0,0,0,1)),L.luma()>I.luma()){var T=I;I=L,L=T}return typeof B>"u"?B=.43:B=C(B),k.luma()<B?I:L},argb:function(k){return new d.default(k.toARGB())},color:function(k){if(k instanceof q.default&&/^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3,4})$/i.test(k.value)){var L=k.value.slice(1);return new E.default(L,void 0,"#".concat(L))}if(k instanceof E.default||(k=E.default.fromKeyword(k.value)))return k.value=void 0,k;throw{type:"Argument",message:"argument must be a color keyword or 3|4|6|8 digit hex e.g. #FFF"}},tint:function(k,L){return w.mix(w.rgb(255,255,255),k,L)},shade:function(k,L){return w.mix(w.rgb(0,0,0),k,L)}},color.default=w,color}var colorBlending={},hasRequiredColorBlending;function requireColorBlending(){if(hasRequiredColorBlending)return colorBlending;hasRequiredColorBlending=1,Object.defineProperty(colorBlending,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireColor$1());function E(_,b,w){var O=b.alpha,A,S=w.alpha,P,C,M,k=[];C=S+O*(1-S);for(var L=0;L<3;L++)A=b.rgb[L]/255,P=w.rgb[L]/255,M=_(A,P),C&&(M=(S*P+O*(A-S*(A+P-M)))/C),k[L]=M*255;return new R.default(k,C)}var q={multiply:function(_,b){return _*b},screen:function(_,b){return _+b-_*b},overlay:function(_,b){return _*=2,_<=1?q.multiply(_,b):q.screen(_-1,b)},softlight:function(_,b){var w=1,O=_;return b>.5&&(O=1,w=_>.25?Math.sqrt(_):((16*_-12)*_+4)*_),_-(1-2*b)*O*(w-_)},hardlight:function(_,b){return q.overlay(b,_)},difference:function(_,b){return Math.abs(_-b)},exclusion:function(_,b){return _+b-2*_*b},average:function(_,b){return(_+b)/2},negation:function(_,b){return 1-Math.abs(_+b-1)}};for(var d in q)q.hasOwnProperty(d)&&(E[d]=E.bind(null,q[d]));return colorBlending.default=E,colorBlending}var dataUri={},hasRequiredDataUri;function requireDataUri(){if(hasRequiredDataUri)return dataUri;hasRequiredDataUri=1,Object.defineProperty(dataUri,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireQuoted()),E=y.__importDefault(requireUrl()),q=y.__importStar(requireUtils()),d=y.__importDefault(requireLogger());return dataUri.default=(function(_){var b=function(w,O){return new E.default(O,w.index,w.currentFileInfo).eval(w.context)};return{"data-uri":function(w,O){O||(O=w,w=null);var A=w&&w.value,S=O.value,P=this.currentFileInfo,C=P.rewriteUrls?P.currentDirectory:P.entryPath,M=S.indexOf("#"),k="";M!==-1&&(k=S.slice(M),S=S.slice(0,M));var L=q.clone(this.context);L.rawBuffer=!0;var I=_.getFileManager(S,C,L,_,!0);if(!I)return b(this,O);var B=!1;if(w)B=/;base64$/.test(A);else{if(A=_.mimeLookup(S),A==="image/svg+xml")B=!1;else{var T=_.charsetLookup(A);B=["US-ASCII","UTF-8"].indexOf(T)<0}B&&(A+=";base64")}var z=I.loadFileSync(S,C,L,_);if(!z.contents)return d.default.warn("Skipped data-uri embedding of ".concat(S," because file not found")),b(this,O||w);var V=z.contents;if(B&&!_.encodeBase64)return b(this,O);V=B?_.encodeBase64(V):encodeURIComponent(V);var N="data:".concat(A,",").concat(V).concat(k);return new E.default(new R.default('"'.concat(N,'"'),N,!1,this.index,this.currentFileInfo),this.index,this.currentFileInfo)}}}),dataUri}var list={},hasRequiredList;function requireList(){if(hasRequiredList)return list;hasRequiredList=1,Object.defineProperty(list,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireComment()),E=y.__importDefault(requireNode()),q=y.__importDefault(requireDimension()),d=y.__importDefault(requireDeclaration()),_=y.__importDefault(requireExpression()),b=y.__importDefault(requireRuleset()),w=y.__importDefault(requireSelector()),O=y.__importDefault(requireElement()),A=y.__importDefault(requireQuoted()),S=y.__importDefault(requireValue()),P=function(C){var M=Array.isArray(C.value)?C.value:Array(C);return M};return list.default={_SELF:function(C){return C},"~":function(){for(var C=[],M=0;M<arguments.length;M++)C[M]=arguments[M];return C.length===1?C[0]:new S.default(C)},extract:function(C,M){return M=M.value-1,P(C)[M]},length:function(C){return new q.default(P(C).length)},range:function(C,M,k){var L,I,B=1,T=[];M?(I=M,L=C.value,k&&(B=k.value)):(L=1,I=C);for(var z=L;z<=I.value;z+=B)T.push(new q.default(z,I.unit));return new _.default(T)},each:function(C,M){var k=this,L=[],I,B,T=function(D){return D instanceof E.default?D.eval(k.context):D};C.value&&!(C instanceof A.default)?Array.isArray(C.value)?B=C.value.map(T):B=[T(C.value)]:C.ruleset?B=T(C.ruleset).rules:C.rules?B=C.rules.map(T):Array.isArray(C)?B=C.map(T):B=[T(C)];var z="@value",V="@key",N="@index";M.params?(z=M.params[0]&&M.params[0].name,V=M.params[1]&&M.params[1].name,N=M.params[2]&&M.params[2].name,M=M.rules):M=M.ruleset;for(var U=0;U<B.length;U++){var x=void 0,K=void 0,F=B[U];F instanceof d.default?(x=typeof F.name=="string"?F.name:F.name[0].value,K=F.value):(x=new q.default(U+1),K=F),!(F instanceof R.default)&&(I=M.rules.slice(0),z&&I.push(new d.default(z,K,!1,!1,this.index,this.currentFileInfo)),N&&I.push(new d.default(N,new q.default(U+1),!1,!1,this.index,this.currentFileInfo)),V&&I.push(new d.default(V,x,!1,!1,this.index,this.currentFileInfo)),L.push(new b.default([new w.default([new O.default("","&")])],I,M.strictImports,M.visibilityInfo())))}return new b.default([new w.default([new O.default("","&")])],L,M.strictImports,M.visibilityInfo()).eval(this.context)}},list}var math={},mathHelper={},hasRequiredMathHelper;function requireMathHelper(){if(hasRequiredMathHelper)return mathHelper;hasRequiredMathHelper=1,Object.defineProperty(mathHelper,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireDimension()),E=function(q,d,_){if(!(_ instanceof R.default))throw{type:"Argument",message:"argument must be a number"};return d===null?d=_.unit:_=_.unify(),new R.default(q(parseFloat(_.value)),d)};return mathHelper.default=E,mathHelper}var hasRequiredMath;function requireMath(){if(hasRequiredMath)return math;hasRequiredMath=1,Object.defineProperty(math,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireMathHelper()),E={ceil:null,floor:null,sqrt:null,abs:null,tan:"",sin:"",cos:"",atan:"rad",asin:"rad",acos:"rad"};for(var q in E)E.hasOwnProperty(q)&&(E[q]=R.default.bind(null,Math[q],E[q]));return E.round=function(d,_){var b=typeof _>"u"?0:_.value;return(0,R.default)(function(w){return w.toFixed(b)},null,d)},math.default=E,math}var number={},hasRequiredNumber;function requireNumber(){if(hasRequiredNumber)return number;hasRequiredNumber=1,Object.defineProperty(number,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireDimension()),E=y.__importDefault(requireAnonymous()),q=y.__importDefault(requireMathHelper()),d=function(_,b){var w=this;switch(b=Array.prototype.slice.call(b),b.length){case 0:throw{type:"Argument",message:"one or more arguments required"}}var O,A,S,P,C,M,k,L,I=[],B={};for(O=0;O<b.length;O++){if(S=b[O],!(S instanceof R.default))if(Array.isArray(b[O].value)){Array.prototype.push.apply(b,Array.prototype.slice.call(b[O].value));continue}else throw{type:"Argument",message:"incompatible types"};if(P=S.unit.toString()===""&&L!==void 0?new R.default(S.value,L).unify():S.unify(),M=P.unit.toString()===""&&k!==void 0?k:P.unit.toString(),k=M!==""&&k===void 0||M!==""&&I[0].unify().unit.toString()===""?M:k,L=M!==""&&L===void 0?S.unit.toString():L,A=B[""]!==void 0&&M!==""&&M===k?B[""]:B[M],A===void 0){if(k!==void 0&&M!==k)throw{type:"Argument",message:"incompatible types"};B[M]=I.length,I.push(S);continue}C=I[A].unit.toString()===""&&L!==void 0?new R.default(I[A].value,L).unify():I[A].unify(),(_&&P.value<C.value||!_&&P.value>C.value)&&(I[A]=S)}return I.length==1?I[0]:(b=I.map(function(T){return T.toCSS(w.context)}).join(this.context.compress?",":", "),new E.default("".concat(_?"min":"max","(").concat(b,")")))};return number.default={min:function(){for(var _=[],b=0;b<arguments.length;b++)_[b]=arguments[b];try{return d.call(this,!0,_)}catch{}},max:function(){for(var _=[],b=0;b<arguments.length;b++)_[b]=arguments[b];try{return d.call(this,!1,_)}catch{}},convert:function(_,b){return _.convertTo(b.value)},pi:function(){return new R.default(Math.PI)},mod:function(_,b){return new R.default(_.value%b.value,_.unit)},pow:function(_,b){if(typeof _=="number"&&typeof b=="number")_=new R.default(_),b=new R.default(b);else if(!(_ instanceof R.default)||!(b instanceof R.default))throw{type:"Argument",message:"arguments must be numbers"};return new R.default(Math.pow(_.value,b.value),_.unit)},percentage:function(_){var b=(0,q.default)(function(w){return w*100},"%",_);return b}},number}var string={},hasRequiredString;function requireString(){if(hasRequiredString)return string;hasRequiredString=1,Object.defineProperty(string,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireQuoted()),E=y.__importDefault(requireAnonymous()),q=y.__importDefault(requireJavascript());return string.default={e:function(d){return new R.default('"',d instanceof q.default?d.evaluated:d.value,!0)},escape:function(d){return new E.default(encodeURI(d.value).replace(/=/g,"%3D").replace(/:/g,"%3A").replace(/#/g,"%23").replace(/;/g,"%3B").replace(/\(/g,"%28").replace(/\)/g,"%29"))},replace:function(d,_,b,w){var O=d.value;return b=b.type==="Quoted"?b.value:b.toCSS(),O=O.replace(new RegExp(_.value,w?w.value:""),b),new R.default(d.quote||"",O,d.escaped)},"%":function(d){for(var _=Array.prototype.slice.call(arguments,1),b=d.value,w=function(A){b=b.replace(/%[sda]/i,function(S){var P=_[A].type==="Quoted"&&S.match(/s/i)?_[A].value:_[A].toCSS();return S.match(/[A-Z]$/)?encodeURIComponent(P):P})},O=0;O<_.length;O++)w(O);return b=b.replace(/%%/g,"%"),new R.default(d.quote||"",b,d.escaped)}},string}var svg={},hasRequiredSvg;function requireSvg(){if(hasRequiredSvg)return svg;hasRequiredSvg=1,Object.defineProperty(svg,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireDimension()),E=y.__importDefault(requireColor$1()),q=y.__importDefault(requireExpression()),d=y.__importDefault(requireQuoted()),_=y.__importDefault(requireUrl());return svg.default=(function(){return{"svg-gradient":function(b){var w,O,A="linear",S='x="0" y="0" width="1" height="1"',P={compress:!1},C,M=b.toCSS(P),k,L,I,B,T;function z(){throw{type:"Argument",message:"svg-gradient expects direction, start_color [start_position], [color position,]..., end_color [end_position] or direction, color list"}}switch(arguments.length==2?(arguments[1].value.length<2&&z(),w=arguments[1].value):arguments.length<3?z():w=Array.prototype.slice.call(arguments,1),M){case"to bottom":O='x1="0%" y1="0%" x2="0%" y2="100%"';break;case"to right":O='x1="0%" y1="0%" x2="100%" y2="0%"';break;case"to bottom right":O='x1="0%" y1="0%" x2="100%" y2="100%"';break;case"to top right":O='x1="0%" y1="100%" x2="100%" y2="0%"';break;case"ellipse":case"ellipse at center":A="radial",O='cx="50%" cy="50%" r="75%"',S='x="-50" y="-50" width="101" height="101"';break;default:throw{type:"Argument",message:"svg-gradient direction must be 'to bottom', 'to right', 'to bottom right', 'to top right' or 'ellipse at center'"}}for(C='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1"><'.concat(A,'Gradient id="g" ').concat(O,">"),k=0;k<w.length;k+=1)w[k]instanceof q.default?(L=w[k].value[0],I=w[k].value[1]):(L=w[k],I=void 0),(!(L instanceof E.default)||!((k===0||k+1===w.length)&&I===void 0)&&!(I instanceof R.default))&&z(),B=I?I.toCSS(P):k===0?"0%":"100%",T=L.alpha,C+='<stop offset="'.concat(B,'" stop-color="').concat(L.toRGB(),'"').concat(T<1?' stop-opacity="'.concat(T,'"'):"","/>");return C+="</".concat(A,"Gradient><rect ").concat(S,' fill="url(#g)" /></svg>'),C=encodeURIComponent(C),C="data:image/svg+xml,".concat(C),new _.default(new d.default("'".concat(C,"'"),C,!1,this.index,this.currentFileInfo),this.index,this.currentFileInfo)}}}),svg}var types={},hasRequiredTypes;function requireTypes(){if(hasRequiredTypes)return types;hasRequiredTypes=1,Object.defineProperty(types,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireKeyword()),E=y.__importDefault(requireDetachedRuleset()),q=y.__importDefault(requireDimension()),d=y.__importDefault(requireColor$1()),_=y.__importDefault(requireQuoted()),b=y.__importDefault(requireAnonymous()),w=y.__importDefault(requireUrl()),O=y.__importDefault(requireOperation()),A=function(P,C){return P instanceof C?R.default.True:R.default.False},S=function(P,C){if(C===void 0)throw{type:"Argument",message:"missing the required second argument to isunit."};if(C=typeof C.value=="string"?C.value:C,typeof C!="string")throw{type:"Argument",message:"Second argument to isunit should be a unit or a string."};return P instanceof q.default&&P.unit.is(C)?R.default.True:R.default.False};return types.default={isruleset:function(P){return A(P,E.default)},iscolor:function(P){return A(P,d.default)},isnumber:function(P){return A(P,q.default)},isstring:function(P){return A(P,_.default)},iskeyword:function(P){return A(P,R.default)},isurl:function(P){return A(P,w.default)},ispixel:function(P){return S(P,"px")},ispercentage:function(P){return S(P,"%")},isem:function(P){return S(P,"em")},isunit:S,unit:function(P,C){if(!(P instanceof q.default))throw{type:"Argument",message:"the first argument to unit must be a number".concat(P instanceof O.default?". Have you forgotten parenthesis?":"")};return C?C instanceof R.default?C=C.value:C=C.toCSS():C="",new q.default(P.value,C)},"get-unit":function(P){return new b.default(P.unit)}},types}var style={},hasRequiredStyle;function requireStyle(){if(hasRequiredStyle)return style;hasRequiredStyle=1,Object.defineProperty(style,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireVariable()),E=y.__importDefault(requireVariable()),q=function(d){var _=this;switch(d=Array.prototype.slice.call(d),d.length){case 0:throw{type:"Argument",message:"one or more arguments required"}}var b=[new R.default(d[0].value,this.index,this.currentFileInfo).eval(this.context)];return d=b.map(function(w){return w.toCSS(_.context)}).join(this.context.compress?",":", "),new E.default("style(".concat(d,")"))};return style.default={style:function(){for(var d=[],_=0;_<arguments.length;_++)d[_]=arguments[_];try{return q.call(this,d)}catch{}}},style}var hasRequiredFunctions;function requireFunctions(){if(hasRequiredFunctions)return functions;hasRequiredFunctions=1,Object.defineProperty(functions,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireFunctionRegistry()),E=y.__importDefault(requireFunctionCaller()),q=y.__importDefault(requireBoolean()),d=y.__importDefault(require_default()),_=y.__importDefault(requireColor()),b=y.__importDefault(requireColorBlending()),w=y.__importDefault(requireDataUri()),O=y.__importDefault(requireList()),A=y.__importDefault(requireMath()),S=y.__importDefault(requireNumber()),P=y.__importDefault(requireString()),C=y.__importDefault(requireSvg()),M=y.__importDefault(requireTypes()),k=y.__importDefault(requireStyle());return functions.default=(function(L){var I={functionRegistry:R.default,functionCaller:E.default};return R.default.addMultiple(q.default),R.default.add("default",d.default.eval.bind(d.default)),R.default.addMultiple(_.default),R.default.addMultiple(b.default),R.default.addMultiple((0,w.default)(L)),R.default.addMultiple(O.default),R.default.addMultiple(A.default),R.default.addMultiple(S.default),R.default.addMultiple(P.default),R.default.addMultiple((0,C.default)(L)),R.default.addMultiple(M.default),R.default.addMultiple(k.default),I}),functions}var transformTree={},hasRequiredTransformTree;function requireTransformTree(){if(hasRequiredTransformTree)return transformTree;hasRequiredTransformTree=1,Object.defineProperty(transformTree,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireContexts()),E=y.__importDefault(requireVisitors()),q=y.__importDefault(requireTree());function d(_,b){b=b||{};var w,O=b.variables,A=new R.default.Eval(b);typeof O=="object"&&!Array.isArray(O)&&(O=Object.keys(O).map(function(L){var I=O[L];return I instanceof q.default.Value||(I instanceof q.default.Expression||(I=new q.default.Expression([I])),I=new q.default.Value([I])),new q.default.Declaration("@".concat(L),I,!1,null,0)}),A.frames=[new q.default.Ruleset(null,O)]);var S=[new E.default.JoinSelectorVisitor,new E.default.MarkVisibleSelectorsVisitor(!0),new E.default.ExtendVisitor,new E.default.ToCSSVisitor({compress:!!b.compress})],P=[],C,M;if(b.pluginManager){M=b.pluginManager.visitor();for(var k=0;k<2;k++)for(M.first();C=M.get();)C.isPreEvalVisitor?(k===0||P.indexOf(C)===-1)&&(P.push(C),C.run(_)):(k===0||S.indexOf(C)===-1)&&(C.isPreVisitor?S.unshift(C):S.push(C))}w=_.eval(A);for(var k=0;k<S.length;k++)S[k].run(w);if(b.pluginManager)for(M.first();C=M.get();)S.indexOf(C)===-1&&P.indexOf(C)===-1&&C.run(w);return w}return transformTree.default=d,transformTree}var pluginManager={},hasRequiredPluginManager;function requirePluginManager(){if(hasRequiredPluginManager)return pluginManager;hasRequiredPluginManager=1,Object.defineProperty(pluginManager,"__esModule",{value:!0});var y=(function(){function q(d){this.less=d,this.visitors=[],this.preProcessors=[],this.postProcessors=[],this.installedPlugins=[],this.fileManagers=[],this.iterator=-1,this.pluginCache={},this.Loader=new d.PluginLoader(d)}return q.prototype.addPlugins=function(d){if(d)for(var _=0;_<d.length;_++)this.addPlugin(d[_])},q.prototype.addPlugin=function(d,_,b){this.installedPlugins.push(d),_&&(this.pluginCache[_]=d),d.install&&d.install(this.less,this,b||this.less.functions.functionRegistry)},q.prototype.get=function(d){return this.pluginCache[d]},q.prototype.addVisitor=function(d){this.visitors.push(d)},q.prototype.addPreProcessor=function(d,_){var b;for(b=0;b<this.preProcessors.length&&!(this.preProcessors[b].priority>=_);b++);this.preProcessors.splice(b,0,{preProcessor:d,priority:_})},q.prototype.addPostProcessor=function(d,_){var b;for(b=0;b<this.postProcessors.length&&!(this.postProcessors[b].priority>=_);b++);this.postProcessors.splice(b,0,{postProcessor:d,priority:_})},q.prototype.addFileManager=function(d){this.fileManagers.push(d)},q.prototype.getPreProcessors=function(){for(var d=[],_=0;_<this.preProcessors.length;_++)d.push(this.preProcessors[_].preProcessor);return d},q.prototype.getPostProcessors=function(){for(var d=[],_=0;_<this.postProcessors.length;_++)d.push(this.postProcessors[_].postProcessor);return d},q.prototype.getVisitors=function(){return this.visitors},q.prototype.visitor=function(){var d=this;return{first:function(){return d.iterator=-1,d.visitors[d.iterator]},get:function(){return d.iterator+=1,d.visitors[d.iterator]}}},q.prototype.getFileManagers=function(){return this.fileManagers},q})(),R,E=function(q,d){return(d||!R)&&(R=new y(q)),R};return pluginManager.default=E,pluginManager}var sourceMapOutput={},hasRequiredSourceMapOutput;function requireSourceMapOutput(){if(hasRequiredSourceMapOutput)return sourceMapOutput;hasRequiredSourceMapOutput=1,Object.defineProperty(sourceMapOutput,"__esModule",{value:!0});function y(R){var E=(function(){function q(d){this._css=[],this._rootNode=d.rootNode,this._contentsMap=d.contentsMap,this._contentsIgnoredCharsMap=d.contentsIgnoredCharsMap,d.sourceMapFilename&&(this._sourceMapFilename=d.sourceMapFilename.replace(/\\/g,"/")),this._outputFilename=d.outputFilename,this.sourceMapURL=d.sourceMapURL,d.sourceMapBasepath&&(this._sourceMapBasepath=d.sourceMapBasepath.replace(/\\/g,"/")),d.sourceMapRootpath?(this._sourceMapRootpath=d.sourceMapRootpath.replace(/\\/g,"/"),this._sourceMapRootpath.charAt(this._sourceMapRootpath.length-1)!=="/"&&(this._sourceMapRootpath+="/")):this._sourceMapRootpath="",this._outputSourceFiles=d.outputSourceFiles,this._sourceMapGeneratorConstructor=R.getSourceMapGenerator(),this._lineNumber=0,this._column=0}return q.prototype.removeBasepath=function(d){return this._sourceMapBasepath&&d.indexOf(this._sourceMapBasepath)===0&&(d=d.substring(this._sourceMapBasepath.length),(d.charAt(0)==="\\"||d.charAt(0)==="/")&&(d=d.substring(1))),d},q.prototype.normalizeFilename=function(d){return d=d.replace(/\\/g,"/"),d=this.removeBasepath(d),(this._sourceMapRootpath||"")+d},q.prototype.add=function(d,_,b,w){if(d){var O,A,S,P,C;if(_&&_.filename){var M=this._contentsMap[_.filename];if(this._contentsIgnoredCharsMap[_.filename]&&(b-=this._contentsIgnoredCharsMap[_.filename],b<0&&(b=0),M=M.slice(this._contentsIgnoredCharsMap[_.filename])),M===void 0){this._css.push(d);return}M=M.substring(0,b),A=M.split(` `),P=A[A.length-1]}if(O=d.split(` `),S=O[O.length-1],_&&_.filename)if(!w)this._sourceMapGenerator.addMapping({generated:{line:this._lineNumber+1,column:this._column},original:{line:A.length,column:P.length},source:this.normalizeFilename(_.filename)});else for(C=0;C<O.length;C++)this._sourceMapGenerator.addMapping({generated:{line:this._lineNumber+C+1,column:C===0?this._column:0},original:{line:A.length+C,column:C===0?P.length:0},source:this.normalizeFilename(_.filename)});O.length===1?this._column+=S.length:(this._lineNumber+=O.length-1,this._column=S.length),this._css.push(d)}},q.prototype.isEmpty=function(){return this._css.length===0},q.prototype.toCSS=function(d){if(this._sourceMapGenerator=new this._sourceMapGeneratorConstructor({file:this._outputFilename,sourceRoot:null}),this._outputSourceFiles){for(var _ in this._contentsMap)if(this._contentsMap.hasOwnProperty(_)){var b=this._contentsMap[_];this._contentsIgnoredCharsMap[_]&&(b=b.slice(this._contentsIgnoredCharsMap[_])),this._sourceMapGenerator.setSourceContent(this.normalizeFilename(_),b)}}if(this._rootNode.genCSS(d,this),this._css.length>0){var w=void 0,O=JSON.stringify(this._sourceMapGenerator.toJSON());this.sourceMapURL?w=this.sourceMapURL:this._sourceMapFilename&&(w=this._sourceMapFilename),this.sourceMapURL=w,this.sourceMap=O}return this._css.join("")},q})();return E}return sourceMapOutput.default=y,sourceMapOutput}var sourceMapBuilder={},hasRequiredSourceMapBuilder;function requireSourceMapBuilder(){if(hasRequiredSourceMapBuilder)return sourceMapBuilder;hasRequiredSourceMapBuilder=1,Object.defineProperty(sourceMapBuilder,"__esModule",{value:!0});function y(R,E){var q=(function(){function d(_){this.options=_}return d.prototype.toCSS=function(_,b,w){var O=new R({contentsIgnoredCharsMap:w.contentsIgnoredChars,rootNode:_,contentsMap:w.contents,sourceMapFilename:this.options.sourceMapFilename,sourceMapURL:this.options.sourceMapURL,outputFilename:this.options.sourceMapOutputFilename,sourceMapBasepath:this.options.sourceMapBasepath,sourceMapRootpath:this.options.sourceMapRootpath,outputSourceFiles:this.options.outputSourceFiles,sourceMapGenerator:this.options.sourceMapGenerator,sourceMapFileInline:this.options.sourceMapFileInline,disableSourcemapAnnotation:this.options.disableSourcemapAnnotation}),A=O.toCSS(b);return this.sourceMap=O.sourceMap,this.sourceMapURL=O.sourceMapURL,this.options.sourceMapInputFilename&&(this.sourceMapInputFilename=O.normalizeFilename(this.options.sourceMapInputFilename)),this.options.sourceMapBasepath!==void 0&&this.sourceMapURL!==void 0&&(this.sourceMapURL=O.removeBasepath(this.sourceMapURL)),A+this.getCSSAppendage()},d.prototype.getCSSAppendage=function(){var _=this.sourceMapURL;if(this.options.sourceMapFileInline){if(this.sourceMap===void 0)return"";_="data:application/json;base64,".concat(E.encodeBase64(this.sourceMap))}return this.options.disableSourcemapAnnotation?"":_?"/*# sourceMappingURL=".concat(_," */"):""},d.prototype.getExternalSourceMap=function(){return this.sourceMap},d.prototype.setExternalSourceMap=function(_){this.sourceMap=_},d.prototype.isInline=function(){return this.options.sourceMapFileInline},d.prototype.getSourceMapURL=function(){return this.sourceMapURL},d.prototype.getOutputFilename=function(){return this.options.sourceMapOutputFilename},d.prototype.getInputFilename=function(){return this.sourceMapInputFilename},d})();return q}return sourceMapBuilder.default=y,sourceMapBuilder}var parseTree={},hasRequiredParseTree;function requireParseTree(){if(hasRequiredParseTree)return parseTree;hasRequiredParseTree=1,Object.defineProperty(parseTree,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireLessError()),E=y.__importDefault(requireTransformTree()),q=y.__importDefault(requireLogger());function d(_){var b=(function(){function w(O,A){this.root=O,this.imports=A}return w.prototype.toCSS=function(O){var A,S={},P;try{A=(0,E.default)(this.root,O)}catch(B){throw new R.default(B,this.imports)}try{var C=!!O.compress;C&&q.default.warn("The compress option has been deprecated. We recommend you use a dedicated css minifier, for instance see less-plugin-clean-css.");var M={compress:C,dumpLineNumbers:O.dumpLineNumbers,strictUnits:!!O.strictUnits,numPrecision:8};O.sourceMap?(P=new _(O.sourceMap),S.css=P.toCSS(A,M,this.imports)):S.css=A.toCSS(M)}catch(B){throw new R.default(B,this.imports)}if(O.pluginManager)for(var k=O.pluginManager.getPostProcessors(),L=0;L<k.length;L++)S.css=k[L].process(S.css,{sourceMap:P,options:O,imports:this.imports});O.sourceMap&&(S.map=P.getExternalSourceMap()),S.imports=[];for(var I in this.imports.files)Object.prototype.hasOwnProperty.call(this.imports.files,I)&&I!==this.imports.rootFilename&&S.imports.push(I);return S},w})();return b}return parseTree.default=d,parseTree}var importManager={},hasRequiredImportManager;function requireImportManager(){if(hasRequiredImportManager)return importManager;hasRequiredImportManager=1,Object.defineProperty(importManager,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireContexts()),E=y.__importDefault(requireParser()),q=y.__importDefault(requireLessError()),d=y.__importStar(requireUtils()),_=y.__importDefault(requireLogger());function b(w){var O=(function(){function A(S,P,C){this.less=S,this.rootFilename=C.filename,this.paths=P.paths||[],this.contents={},this.contentsIgnoredChars={},this.mime=P.mime,this.error=null,this.context=P,this.queue=[],this.files={}}return A.prototype.push=function(S,P,C,M,k){var L=this,I=this.context.pluginManager.Loader;this.queue.push(S);var B=function(K,F,D){L.queue.splice(L.queue.indexOf(S),1);var $=D===L.rootFilename;M.optional&&K?(k(null,{rules:[]},!1,null),_.default.info("The file ".concat(D," was skipped because it was not found and the import was marked optional."))):(!L.files[D]&&!M.inline&&(L.files[D]={root:F,options:M}),K&&!L.error&&(L.error=K),k(K,F,$,D))},T={rewriteUrls:this.context.rewriteUrls,entryPath:C.entryPath,rootpath:C.rootpath,rootFilename:C.rootFilename},z=w.getFileManager(S,C.currentDirectory,this.context,w);if(!z){B({message:"Could not find a file-manager for ".concat(S)});return}var V=function(K){var F,D=K.filename,$=K.contents.replace(/^\uFEFF/,"");T.currentDirectory=z.getPath(D),T.rewriteUrls&&(T.rootpath=z.join(L.context.rootpath||"",z.pathDiff(T.currentDirectory,T.entryPath)),!z.isPathAbsolute(T.rootpath)&&z.alwaysMakePathsAbsolute()&&(T.rootpath=z.join(T.entryPath,T.rootpath))),T.filename=D;var G=new R.default.Parse(L.context);G.processImports=!1,L.contents[D]=$,(C.reference||M.reference)&&(T.reference=!0),M.isPlugin?(F=I.evalPlugin($,G,L,M.pluginArgs,T),F instanceof q.default?B(F,null,D):B(null,F,D)):M.inline?B(null,$,D):L.files[D]&&!L.files[D].options.multiple&&!M.multiple?B(null,L.files[D].root,D):new E.default(G,L,T).parse($,function(j,W){B(j,W,D)})},N,U,x=d.clone(this.context);P&&(x.ext=M.isPlugin?".js":".less"),M.isPlugin?(x.mime="application/javascript",x.syncImport?N=I.loadPluginSync(S,C.currentDirectory,x,w,z):U=I.loadPlugin(S,C.currentDirectory,x,w,z)):x.syncImport?N=z.loadFileSync(S,C.currentDirectory,x,w):U=z.loadFile(S,C.currentDirectory,x,w,function(K,F){K?B(K):V(F)}),N?N.filename?V(N):B(N):U&&U.then(V,B)},A})();return O}return importManager.default=b,importManager}var parse={},hasRequiredParse;function requireParse(){if(hasRequiredParse)return parse;hasRequiredParse=1,Object.defineProperty(parse,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireContexts()),E=y.__importDefault(requireParser()),q=y.__importDefault(requirePluginManager()),d=y.__importDefault(requireLessError()),_=y.__importStar(requireUtils());function b(w,O,A){var S=function(P,C,M){if(typeof C=="function"?(M=C,C=_.copyOptions(this.options,{})):C=_.copyOptions(this.options,C||{}),M){var L,I=void 0,B=new q.default(this,!C.reUsePluginManager);if(C.pluginManager=B,L=new R.default.Parse(C),C.rootFileInfo)I=C.rootFileInfo;else{var T=C.filename||"input",z=T.replace(/[^/\\]*$/,"");I={filename:T,rewriteUrls:L.rewriteUrls,rootpath:L.rootpath||"",currentDirectory:z,entryPath:z,rootFilename:T},I.rootpath&&I.rootpath.slice(-1)!=="/"&&(I.rootpath+="/")}var V=new A(this,L,I);this.importManager=V,C.plugins&&C.plugins.forEach(function(N){var U,x;if(N.fileContent){if(x=N.fileContent.replace(/^\uFEFF/,""),U=B.Loader.evalPlugin(x,L,V,N.options,N.filename),U instanceof d.default)return M(U)}else B.addPlugin(N)}),new E.default(L,V,I).parse(P,function(N,U){if(N)return M(N);M(null,U,V,C)},C)}else{var k=this;return new Promise(function(N,U){S.call(k,P,C,function(x,K){x?U(x):N(K)})})}};return S}return parse.default=b,parse}var render$1={},hasRequiredRender;function requireRender(){if(hasRequiredRender)return render$1;hasRequiredRender=1,Object.defineProperty(render$1,"__esModule",{value:!0});var y=require$$0$1,R=y.__importStar(requireUtils());function E(q,d){var _=function(b,w,O){if(typeof w=="function"?(O=w,w=R.copyOptions(this.options,{})):w=R.copyOptions(this.options,w||{}),O)this.parse(b,w,function(S,P,C,M){if(S)return O(S);var k;try{var L=new d(P,C);k=L.toCSS(M)}catch(I){return O(I)}O(null,k)});else{var A=this;return new Promise(function(S,P){_.call(A,b,w,function(C,M){C?P(C):S(M)})})}};return _}return render$1.default=E,render$1}var version="4.4.2",require$$21={version},parseNodeVersion_1,hasRequiredParseNodeVersion;function requireParseNodeVersion(){if(hasRequiredParseNodeVersion)return parseNodeVersion_1;hasRequiredParseNodeVersion=1;function y(R){var E=R.match(/^v(\d{1,2})\.(\d{1,2})\.(\d{1,2})(?:-([0-9A-Za-z-.]+))?(?:\+([0-9A-Za-z-.]+))?$/);if(!E)throw new Error("Unable to parse: "+R);var q={major:parseInt(E[1],10),minor:parseInt(E[2],10),patch:parseInt(E[3],10),pre:E[4]||"",build:E[5]||""};return q}return parseNodeVersion_1=y,parseNodeVersion_1}var hasRequiredLess;function requireLess(){if(hasRequiredLess)return less;hasRequiredLess=1,Object.defineProperty(less,"__esModule",{value:!0});var y=require$$0$1,R=y.__importDefault(requireEnvironment()),E=y.__importDefault(requireData()),q=y.__importDefault(requireTree()),d=y.__importDefault(requireAbstractFileManager()),_=y.__importDefault(requireAbstractPluginLoader()),b=y.__importDefault(requireVisitors()),w=y.__importDefault(requireParser()),O=y.__importDefault(requireFunctions()),A=y.__importDefault(requireContexts()),S=y.__importDefault(requireLessError()),P=y.__importDefault(requireTransformTree()),C=y.__importStar(requireUtils()),M=y.__importDefault(requirePluginManager()),k=y.__importDefault(requireLogger()),L=y.__importDefault(requireSourceMapOutput()),I=y.__importDefault(requireSourceMapBuilder()),B=y.__importDefault(requireParseTree()),T=y.__importDefault(requireImportManager()),z=y.__importDefault(requireParse()),V=y.__importDefault(requireRender()),N=require$$21,U=y.__importDefault(requireParseNodeVersion());function x(K,F){var D,$,G,j;K=new R.default(K,F),D=(0,L.default)(K),$=(0,I.default)(D,K),G=(0,B.default)($),j=(0,T.default)(K);var W=(0,V.default)(K,G,j),H=(0,z.default)(K,G,j),Y=(0,U.default)("v".concat(N.version)),te={version:[Y.major,Y.minor,Y.patch],data:E.default,tree:q.default,Environment:R.default,AbstractFileManager:d.default,AbstractPluginLoader:_.default,environment:K,visitors:b.default,Parser:w.default,functions:(0,O.default)(K),contexts:A.default,SourceMapOutput:D,SourceMapBuilder:$,ParseTree:G,ImportManager:j,render:W,parse:H,LessError:S.default,transformTree:P.default,utils:C,PluginManager:M.default,logger:k.default},J=function(X){return function(){var Z=Object.create(X.prototype);return X.apply(Z,Array.prototype.slice.call(arguments,0)),Z}},ie,re=Object.create(te);for(var ee in te.tree)if(ie=te.tree[ee],typeof ie=="function")re[ee.toLowerCase()]=J(ie);else{re[ee]=Object.create(null);for(var Q in ie)re[ee][Q.toLowerCase()]=J(ie[Q])}return te.parse=te.parse.bind(re),te.render=te.render.bind(re),re}return less.default=x,less}var lessExports=requireLess(),createLess=getDefaultExportFromCjs(lessExports),pathBrowserifyExports=requirePathBrowserify(),path=getDefaultExportFromCjs(pathBrowserifyExports),abstractFileManagerExports=requireAbstractFileManager(),AbstractFileManager=getDefaultExportFromCjs(abstractFileManagerExports);class FileManager extends AbstractFileManager{files=[];resolve(R,E){E&&!this.isPathAbsolute(R)&&(R=E+R);const{url:q}=this.extractUrlParts(R,location.href);return q in this.files?{contents:this.files[q],filename:q,webInfo:{lastModified:new Date}}:null}supports(){return!0}supportsSync(){return!0}loadFileSync(R,E){return this.resolve(R,E)??{}}async loadFile(R,E){const q=this.resolve(R,E);if(q)return q;throw{filename:R,message:`Error loading file ${R}`}}}const fileManager=new FileManager,api=createLess({},[fileManager]);api.staticFiles=function(y){fileManager.files=y},api.rewriteUrls=function(y,R){return y?.replace(/url\s*\(['"]?(.+?)['"]?\)/g,(E,q)=>q.match(/^(https?:|data:|\/\/|%23)/)?E:(R.match(/\/$/)||(R+="/"),E.replace(q,this.relativePath(q,R))))},api.relativePath=(y,R)=>path.relative(R,y),api.logger.addListener({debug:function(y){self.console.debug(y)},info:function(y){self.console.info(y)},warn:function(y){self.console.warn(y)},error:function(y){self.console.error(y)}}),api.PluginLoader=function(){};function register(y){self.addEventListener("message",async({data:[R,E]})=>{try{self.postMessage({id:R,result:await y(E)})}catch(q){self.postMessage({id:R,error:q})}})}var FontsData=[{name:"System Fonts",fonts:[{name:"Default System Font",value:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'},{name:"Consolas/Monaco",value:"Consolas, monaco, monospace"},{name:"Georgia",value:'Georgia, "Times New Roman", Times, serif'},{name:"Helvetica/Arial",value:'"Helvetica Neue", Helvetica, Arial, sans-serif'},{name:"Lucida",value:'"Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif'},{name:"Times New Roman",value:'"Times New Roman", Times, serif'},{name:"Trebuchet",value:'"Trebuchet MS", Verdana, sans-serif'},{name:"Verdana",value:"Verdana, Geneva, sans-serif"},{name:"Inherit",value:"inherit"}]},{name:"Google Fonts",fonts:["ABeeZee","ADLaM Display","AR One Sans","Abel","Abhaya Libre","Aboreto","Abril Fatface","Abyssinica SIL","Aclonica","Acme","Actor","Adamina","Advent Pro","Afacad","Afacad Flux","Agbalumo","Agdasima","Agu Display","Aguafina Script","Akatab","Akaya Kanadaka","Akaya Telivigala","Akronim","Akshar","Aladin","Alan Sans","Alata","Alatsi","Albert Sans","Aldrich","Alef","Alegreya","Alegreya SC","Alegreya Sans","Alegreya Sans SC","Aleo","Alex Brush","Alexandria","Alfa Slab One","Alice","Alike","Alike Angular","Alkalami","Alkatra","Allan","Allerta","Allerta Stencil","Allison","Allura","Almarai","Almendra","Almendra Display","Almendra SC","Alumni Sans","Alumni Sans Collegiate One","Alumni Sans Inline One","Alumni Sans Pinstripe","Alumni Sans SC","Amarante","Amaranth","Amarna","Amatic SC","Amethysta","Amiko","Amiri","Amiri Quran","Amita","Anaheim","Ancizar Sans","Ancizar Serif","Andada Pro","Andika","Anek Bangla","Anek Devanagari","Anek Gujarati","Anek Gurmukhi","Anek Kannada","Anek Latin","Anek Malayalam","Anek Odia","Anek Tamil","Anek Telugu","Angkor","Annapurna SIL","Annie Use Your Telescope","Anonymous Pro","Anta","Antic","Antic Didone","Antic Slab","Anton","Anton SC","Antonio","Anuphan","Anybody","Aoboshi One","Arapey","Arbutus","Arbutus Slab","Architects Daughter","Archivo","Archivo Black","Archivo Narrow","Are You Serious","Aref Ruqaa","Aref Ruqaa Ink","Arima","Arimo","Arizonia","Armata","Arsenal","Arsenal SC","Artifika","Arvo","Arya","Asap","Asap Condensed","Asar","Asimovian","Asset","Assistant","Asta Sans","Astloch","Asul","Athiti","Atkinson Hyperlegible","Atkinson Hyperlegible Mono","Atkinson Hyperlegible Next","Atma","Atomic Age","Aubrey","Audiowide","Autour One","Average","Average Sans","Averia Gruesa Libre","Averia Libre","Averia Sans Libre","Averia Serif Libre","Azeret Mono","B612","B612 Mono","BBH Bartle","BBH Bogle","BBH Hegarty","BIZ UDGothic","BIZ UDMincho","BIZ UDPGothic","BIZ UDPMincho","Babylonica","Bacasime Antique","Bad Script","Badeen Display","Bagel Fat One","Bahiana","Bahianita","Bai Jamjuree","Bakbak One","Ballet","Baloo 2","Baloo Bhai 2","Baloo Bhaijaan 2","Baloo Bhaina 2","Baloo Chettan 2","Baloo Da 2","Baloo Paaji 2","Baloo Tamma 2","Baloo Tammudu 2","Baloo Thambi 2","Balsamiq Sans","Balthazar","Bangers","Barlow","Barlow Condensed","Barlow Semi Condensed","Barriecito","Barrio","Basic","Baskervville","Baskervville SC","Battambang","Baumans","Bayon","Be Vietnam Pro","Beau Rivage","Bebas Neue","Beiruti","Belanosima","Belgrano","Bellefair","Belleza","Bellota","Bellota Text","BenchNine","Benne","Bentham","Berkshire Swash","Besley","Beth Ellen","Bevan","BhuTuka Expanded One","Big Shoulders","Big Shoulders Inline","Big Shoulders Stencil","Bigelow Rules","Bigshot One","Bilbo","Bilbo Swash Caps","BioRhyme","BioRhyme Expanded","Birthstone","Birthstone Bounce","Biryani","Bitcount","Bitcount Grid Double","Bitcount Grid Double Ink","Bitcount Grid Single","Bitcount Grid Single Ink","Bitcount Ink","Bitcount Prop Double","Bitcount Prop Double Ink","Bitcount Prop Single","Bitcount Prop Single Ink","Bitcount Single","Bitcount Single Ink","Bitter","Black And White Picture","Black Han Sans","Black Ops One","Blaka","Blaka Hollow","Blaka Ink","Blinker","Bodoni Moda","Bodoni Moda SC","Bokor","Boldonse","Bona Nova","Bona Nova SC","Bonbon","Bonheur Royale","Boogaloo","Borel","Bowlby One","Bowlby One SC","Braah One","Brawler","Bree Serif","Bricolage Grotesque","Bruno Ace","Bruno Ace SC","Brygada 1918","Bubblegum Sans","Bubbler One","Buda","Buenard","Bungee","Bungee Hairline","Bungee Inline","Bungee Outline","Bungee Shade","Bungee Spice","Bungee Tint","Butcherman","Butterfly Kids","Bytesized","Cabin","Cabin Condensed","Cabin Sketch","Cactus Classical Serif","Caesar Dressing","Cagliostro","Cairo","Cairo Play","Cal Sans","Caladea","Calistoga","Calligraffitti","Cambay","Cambo","Candal","Cantarell","Cantata One","Cantora One","Caprasimo","Capriola","Caramel","Carattere","Cardo","Carlito","Carme","Carrois Gothic","Carrois Gothic SC","Carter One","Cascadia Code","Cascadia Mono","Castoro","Castoro Titling","Catamaran","Caudex","Cause","Caveat","Caveat Brush","Cedarville Cursive","Ceviche One","Chakra Petch","Changa","Changa One","Chango","Charis SIL","Charm","Charmonman","Chathura","Chau Philomene One","Chela One","Chelsea Market","Chenla","Cherish","Cherry Bomb One","Cherry Cream Soda","Cherry Swash","Chewy","Chicle","Chilanka","Chiron GoRound TC","Chiron Hei HK","Chiron Sung HK","Chivo","Chivo Mono","Chocolate Classical Sans","Chokokutai","Chonburi","Cinzel","Cinzel Decorative","Clicker Script","Climate Crisis","Coda","Codystar","Coiny","Combo","Comfortaa","Comforter","Comforter Brush","Comic Neue","Comic Relief","Coming Soon","Comme","Commissioner","Concert One","Condiment","Content","Contrail One","Convergence","Cookie","Copse","Coral Pixels","Corben","Corinthia","Cormorant","Cormorant Garamond","Cormorant Infant","Cormorant SC","Cormorant Unicase","Cormorant Upright","Cossette Texte","Cossette Titre","Courgette","Courier Prime","Cousine","Coustard","Covered By Your Grace","Crafty Girls","Creepster","Crete Round","Crimson Pro","Crimson Text","Croissant One","Crushed","Cuprum","Cute Font","Cutive","Cutive Mono","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dai Banna SIL","Damion","Dancing Script","Danfo","Dangrek","Darker Grotesque","Darumadrop One","David Libre","Dawning of a New Day","Days One","Dekko","Dela Gothic One","Delicious Handrawn","Delius","Delius Swash Caps","Delius Unicase","Della Respira","Denk One","Devonshire","Dhurjati","Didact Gothic","Diphylleia","Diplomata","Diplomata SC","Do Hyeon","Dokdo","Domine","Donegal One","Dongle","Doppio One","Dorsa","Dosis","DotGothic16","Doto","Dr Sugiyama","Duru Sans","DynaPuff","Dynalight","EB Garamond","Eagle Lake","East Sea Dokdo","Eater","Economica","Eczar","Edu AU VIC WA NT Arrows","Edu AU VIC WA NT Dots","Edu AU VIC WA NT Guides","Edu AU VIC WA NT Hand","Edu AU VIC WA NT Pre","Edu NSW ACT Cursive","Edu NSW ACT Foundation","Edu NSW ACT Hand Pre","Edu QLD Beginner","Edu QLD Hand","Edu SA Beginner","Edu SA Hand","Edu TAS Beginner","Edu VIC WA NT Beginner","Edu VIC WA NT Hand","Edu VIC WA NT Hand Pre","El Messiri","Electrolize","Elms Sans","Elsie","Elsie Swash Caps","Emblema One","Emilys Candy","Encode Sans","Encode Sans Condensed","Encode Sans Expanded","Encode Sans SC","Encode Sans Semi Condensed","Encode Sans Semi Expanded","Engagement","Englebert","Enriqueta","Ephesis","Epilogue","Epunda Sans","Epunda Slab","Erica One","Esteban","Estonia","Euphoria Script","Ewert","Exile","Exo","Exo 2","Expletus Sans","Explora","Faculty Glyphic","Fahkwang","Familjen Grotesk","Fanwood Text","Farro","Farsan","Fascinate","Fascinate Inline","Faster One","Fasthand","Fauna One","Faustina","Federant","Federo","Felipa","Fenix","Festive","Figtree","Finger Paint","Finlandica","Fira Code","Fira Mono","Fira Sans","Fira Sans Condensed","Fira Sans Extra Condensed","Fjalla One","Fjord One","Flamenco","Flavors","Fleur De Leah","Flow Block","Flow Circular","Flow Rounded","Foldit","Fondamento","Fontdiner Swanky","Forum","Fragment Mono","Francois One","Frank Ruhl Libre","Fraunces","Freckle Face","Fredericka the Great","Fredoka","Freehand","Freeman","Fresca","Frijole","Fruktur","Fugaz One","Fuggles","Funnel Display","Funnel Sans","Fustat","Fuzzy Bubbles","GFS Didot","GFS Neohellenic","Ga Maamli","Gabarito","Gabriela","Gaegu","Gafata","Gajraj One","Galada","Galdeano","Galindo","Gamja Flower","Gantari","Gasoek One","Gayathri","Geist","Geist Mono","Gelasio","Gemunu Libre","Genos","Gentium Book Plus","Gentium Plus","Geo","Geologica","Geom","Georama","Geostar","Geostar Fill","Germania One","Gideon Roman","Gidole","Gidugu","Gilda Display","Girassol","Give You Glory","Glass Antiqua","Glegoo","Gloock","Gloria Hallelujah","Glory","Gluten","Goblin One","Gochi Hand","Goldman","Golos Text","Google Sans","Google Sans Code","Google Sans Flex","Gorditas","Gothic A1","Gotu","Goudy Bookletter 1911","Gowun Batang","Gowun Dodum","Graduate","Grand Hotel","Grandiflora One","Grandstander","Grape Nuts","Gravitas One","Great Vibes","Grechen Fuemen","Grenze","Grenze Gotisch","Grey Qo","Griffy","Gruppo","Gudea","Gugi","Gulzar","Gupter","Gurajada","Gwendolyn","Habibi","Hachi Maru Pop","Hahmlet","Halant","Hammersmith One","Hanalei","Hanalei Fill","Handjet","Handlee","Hanken Grotesk","Hanuman","Happy Monkey","Harmattan","Headland One","Hedvig Letters Sans","Hedvig Letters Serif","Heebo","Henny Penny","Hepta Slab","Herr Von Muellerhoff","Hi Melody","Hina Mincho","Hind","Hind Guntur","Hind Madurai","Hind Mysuru","Hind Siliguri","Hind Vadodara","Holtwood One SC","Homemade Apple","Homenaje","Honk","Host Grotesk","Hubballi","Hubot Sans","Huninn","Hurricane","IBM Plex Mono","IBM Plex Sans","IBM Plex Sans Arabic","IBM Plex Sans Condensed","IBM Plex Sans Devanagari","IBM Plex Sans Hebrew","IBM Plex Sans JP","IBM Plex Sans KR","IBM Plex Sans Thai","IBM Plex Sans Thai Looped","IBM Plex Serif","IM Fell DW Pica","IM Fell DW Pica SC","IM Fell Double Pica","IM Fell Double Pica SC","IM Fell English","IM Fell English SC","IM Fell French Canon","IM Fell French Canon SC","IM Fell Great Primer","IM Fell Great Primer SC","Iansui","Ibarra Real Nova","Iceberg","Iceland","Imbue","Imperial Script","Imprima","Inclusive Sans","Inconsolata","Inder","Indie Flower","Ingrid Darling","Inika","Inknut Antiqua","Inria Sans","Inria Serif","Inspiration","Instrument Sans","Instrument Serif","Intel One Mono","Inter","Inter Tight","Irish Grover","Island Moments","Istok Web","Italiana","Italianno","Itim","Jacquard 12","Jacquard 12 Charted","Jacquard 24","Jacquard 24 Charted","Jacquarda Bastarda 9","Jacquarda Bastarda 9 Charted","Jacques Francois","Jacques Francois Shadow","Jaini","Jaini Purva","Jaldi","Jaro","Jersey 10","Jersey 10 Charted","Jersey 15","Jersey 15 Charted","Jersey 20","Jersey 20 Charted","Jersey 25","Jersey 25 Charted","JetBrains Mono","Jim Nightshade","Joan","Jockey One","Jolly Lodger","Jomhuria","Jomolhari","Josefin Sans","Josefin Slab","Jost","Joti One","Jua","Judson","Julee","Julius Sans One","Junge","Jura","Just Another Hand","Just Me Again Down Here","K2D","Kablammo","Kadwa","Kaisei Decol","Kaisei HarunoUmi","Kaisei Opti","Kaisei Tokumin","Kalam","Kalnia","Kalnia Glaze","Kameron","Kanchenjunga","Kanit","Kantumruy Pro","Kapakana","Karantina","Karla","Karla Tamil Inclined","Karla Tamil Upright","Karma","Katibeh","Kaushan Script","Kavivanar","Kavoon","Kay Pho Du","Kdam Thmor Pro","Keania One","Kedebideri","Kelly Slab","Kenia","Khand","Khmer","Khula","Kings","Kirang Haerang","Kite One","Kiwi Maru","Klee One","Knewave","KoHo","Kodchasan","Kode Mono","Koh Santepheap","Kolker Brush","Konkhmer Sleokchher","Kosugi","Kosugi Maru","Kotta One","Koulen","Kranky","Kreon","Kristi","Krona One","Krub","Kufam","Kulim Park","Kumar One","Kumar One Outline","Kumbh Sans","Kurale","LXGW Marker Gothic","LXGW WenKai Mono TC","LXGW WenKai TC","La Belle Aurore","Labrada","Lacquer","Laila","Lakki Reddy","Lalezar","Lancelot","Langar","Lateef","Lato","Lavishly Yours","League Gothic","League Script","League Spartan","Leckerli One","Ledger","Lekton","Lemon","Lemonada","Lexend","Lexend Deca","Lexend Exa","Lexend Giga","Lexend Mega","Lexend Peta","Lexend Tera","Lexend Zetta","Libertinus Keyboard","Libertinus Math","Libertinus Mono","Libertinus Sans","Libertinus Serif","Libertinus Serif Display","Libre Barcode 128","Libre Barcode 128 Text","Libre Barcode 39","Libre Barcode 39 Extended","Libre Barcode 39 Extended Text","Libre Barcode 39 Text","Libre Barcode EAN13 Text","Libre Baskerville","Libre Bodoni","Libre Caslon Display","Libre Caslon Text","Libre Franklin","Licorice","Life Savers","Lilex","Lilita One","Lily Script One","Limelight","Linden Hill","Linefont","Lisu Bosa","Liter","Literata","Liu Jian Mao Cao","Livvic","Lobster","Lobster Two","Londrina Outline","Londrina Shadow","Londrina Sketch","Londrina Solid","Long Cang","Lora","Love Light","Love Ya Like A Sister","Loved by the King","Lovers Quarrel","Luckiest Guy","Lugrasimo","Lumanosimo","Lunasima","Lusitana","Lustria","Luxurious Roman","Luxurious Script","M PLUS 1","M PLUS 1 Code","M PLUS 1p","M PLUS 2","M PLUS Code Latin","M PLUS Rounded 1c","Ma Shan Zheng","Macondo","Macondo Swash Caps","Mada","Madimi One","Magra","Maiden Orange","Maitree","Major Mono Display","Mako","Mali","Mallanna","Maname","Mandali","Manjari","Manrope","Mansalva","Manuale","Manufacturing Consent","Marcellus","Marcellus SC","Marck Script","Margarine","Marhey","Markazi Text","Marko One","Marmelad","Martel","Martel Sans","Martian Mono","Marvel","Matangi","Mate","Mate SC","Matemasie","Material Icons","Material Icons Outlined","Material Icons Round","Material Icons Sharp","Material Icons Two Tone","Material Symbols","Material Symbols Outlined","Material Symbols Rounded","Material Symbols Sharp","Maven Pro","McLaren","Mea Culpa","Meddon","MedievalSharp","Medula One","Meera Inimai","Megrim","Meie Script","Menbere","Meow Script","Merienda","Merriweather","Merriweather Sans","Metal","Metal Mania","Metamorphous","Metrophobic","Michroma","Micro 5","Micro 5 Charted","Milonga","Miltonian","Miltonian Tattoo","Mina","Mingzat","Miniver","Miriam Libre","Mirza","Miss Fajardose","Mitr","Mochiy Pop One","Mochiy Pop P One","Modak","Modern Antiqua","Moderustic","Mogra","Mohave","Moirai One","Molengo","Molle","Momo Signature","Momo Trust Display","Momo Trust Sans","Mona Sans","Monda","Monofett","Monomakh","Monomaniac One","Monoton","Monsieur La Doulaise","Montaga","Montagu Slab","MonteCarlo","Montez","Montserrat","Montserrat Alternates","Montserrat Underline","Moo Lah Lah","Mooli","Moon Dance","Moul","Moulpali","Mountains of Christmas","Mouse Memoirs","Mozilla Headline","Mozilla Text","Mr Bedfort","Mr Dafoe","Mr De Haviland","Mrs Saint Delafield","Mrs Sheppards","Ms Madi","Mukta","Mukta Mahee","Mukta Malar","Mukta Vaani","Mulish","Murecho","MuseoModerno","My Soul","Mynerve","Mystery Quest","NTR","Nabla","Namdhinggo","Nanum Brush Script","Nanum Gothic","Nanum Gothic Coding","Nanum Myeongjo","Nanum Pen Script","Narnoor","Nata Sans","National Park","Neonderthaw","Nerko One","Neucha","Neuton","New Amsterdam","New Rocker","New Tegomin","News Cycle","Newsreader","Niconne","Niramit","Nixie One","Nobile","Nokora","Norican","Nosifer","Notable","Nothing You Could Do","Noticia Text","Noto Color Emoji","Noto Emoji","Noto Kufi Arabic","Noto Music","Noto Naskh Arabic","Noto Nastaliq Urdu","Noto Rashi Hebrew","Noto Sans","Noto Sans Adlam","Noto Sans Adlam Unjoined","Noto Sans Anatolian Hieroglyphs","Noto Sans Arabic","Noto Sans Armenian","Noto Sans Avestan","Noto Sans Balinese","Noto Sans Bamum","Noto Sans Bassa Vah","Noto Sans Batak","Noto Sans Bengali","Noto Sans Bhaiksuki","Noto Sans Brahmi","Noto Sans Buginese","Noto Sans Buhid","Noto Sans Canadian Aboriginal","Noto Sans Carian","Noto Sans Caucasian Albanian","Noto Sans Chakma","Noto Sans Cham","Noto Sans Cherokee","Noto Sans Chorasmian","Noto Sans Coptic","Noto Sans Cuneiform","Noto Sans Cypriot","Noto Sans Cypro Minoan","Noto Sans Deseret","Noto Sans Devanagari","Noto Sans Display","Noto Sans Duployan","Noto Sans Egyptian Hieroglyphs","Noto Sans Elbasan","Noto Sans Elymaic","Noto Sans Ethiopic","Noto Sans Georgian","Noto Sans Glagolitic","Noto Sans Gothic","Noto Sans Grantha","Noto Sans Gujarati","Noto Sans Gunjala Gondi","Noto Sans Gurmukhi","Noto Sans HK","Noto Sans Hanifi Rohingya","Noto Sans Hanunoo","Noto Sans Hatran","Noto Sans Hebrew","Noto Sans Imperial Aramaic","Noto Sans Indic Siyaq Numbers","Noto Sans Inscriptional Pahlavi","Noto Sans Inscriptional Parthian","Noto Sans JP","Noto Sans Javanese","Noto Sans KR","Noto Sans Kaithi","Noto Sans Kannada","Noto Sans Kawi","Noto Sans Kayah Li","Noto Sans Kharoshthi","Noto Sans Khmer","Noto Sans Khojki","Noto Sans Khudawadi","Noto Sans Lao","Noto Sans Lao Looped","Noto Sans Lepcha","Noto Sans Limbu","Noto Sans Linear A","Noto Sans Linear B","Noto Sans Lisu","Noto Sans Lycian","Noto Sans Lydian","Noto Sans Mahajani","Noto Sans Malayalam","Noto Sans Mandaic","Noto Sans Manichaean","Noto Sans Marchen","Noto Sans Masaram Gondi","Noto Sans Math","Noto Sans Mayan Numerals","Noto Sans Medefaidrin","Noto Sans Meetei Mayek","Noto Sans Mende Kikakui","Noto Sans Meroitic","Noto Sans Miao","Noto Sans Modi","Noto Sans Mongolian","Noto Sans Mono","Noto Sans Mro","Noto Sans Multani","Noto Sans Myanmar","Noto Sans NKo","Noto Sans NKo Unjoined","Noto Sans Nabataean","Noto Sans Nag Mundari","Noto Sans Nandinagari","Noto Sans New Tai Lue","Noto Sans Newa","Noto Sans Nushu","Noto Sans Ogham","Noto Sans Ol Chiki","Noto Sans Old Hungarian","Noto Sans Old Italic","Noto Sans Old North Arabian","Noto Sans Old Permic","Noto Sans Old Persian","Noto Sans Old Sogdian","Noto Sans Old South Arabian","Noto Sans Old Turkic","Noto Sans Oriya","Noto Sans Osage","Noto Sans Osmanya","Noto Sans Pahawh Hmong","Noto Sans Palmyrene","Noto Sans Pau Cin Hau","Noto Sans PhagsPa","Noto Sans Phoenician","Noto Sans Psalter Pahlavi","Noto Sans Rejang","Noto Sans Runic","Noto Sans SC","Noto Sans Samaritan","Noto Sans Saurashtra","Noto Sans Sharada","Noto Sans Shavian","Noto Sans Siddham","Noto Sans SignWriting","Noto Sans Sinhala","Noto Sans Sogdian","Noto Sans Sora Sompeng","Noto Sans Soyombo","Noto Sans Sundanese","Noto Sans Sunuwar","Noto Sans Syloti Nagri","Noto Sans Symbols","Noto Sans Symbols 2","Noto Sans Syriac","Noto Sans Syriac Eastern","Noto Sans Syriac Western","Noto Sans TC","Noto Sans Tagalog","Noto Sans Tagbanwa","Noto Sans Tai Le","Noto Sans Tai Tham","Noto Sans Tai Viet","Noto Sans Takri","Noto Sans Tamil","Noto Sans Tamil Supplement","Noto Sans Tangsa","Noto Sans Telugu","Noto Sans Thaana","Noto Sans Thai","Noto Sans Thai Looped","Noto Sans Tifinagh","Noto Sans Tirhuta","Noto Sans Ugaritic","Noto Sans Vai","Noto Sans Vithkuqi","Noto Sans Wancho","Noto Sans Warang Citi","Noto Sans Yi","Noto Sans Zanabazar Square","Noto Serif","Noto Serif Ahom","Noto Serif Armenian","Noto Serif Balinese","Noto Serif Bengali","Noto Serif Devanagari","Noto Serif Display","Noto Serif Dives Akuru","Noto Serif Dogra","Noto Serif Ethiopic","Noto Serif Georgian","Noto Serif Grantha","Noto Serif Gujarati","Noto Serif Gurmukhi","Noto Serif HK","Noto Serif Hebrew","Noto Serif Hentaigana","Noto Serif JP","Noto Serif KR","Noto Serif Kannada","Noto Serif Khitan Small Script","Noto Serif Khmer","Noto Serif Khojki","Noto Serif Lao","Noto Serif Makasar","Noto Serif Malayalam","Noto Serif Myanmar","Noto Serif NP Hmong","Noto Serif Old Uyghur","Noto Serif Oriya","Noto Serif Ottoman Siyaq","Noto Serif SC","Noto Serif Sinhala","Noto Serif TC","Noto Serif Tamil","Noto Serif Tangut","Noto Serif Telugu","Noto Serif Thai","Noto Serif Tibetan","Noto Serif Todhri","Noto Serif Toto","Noto Serif Vithkuqi","Noto Serif Yezidi","Noto Traditional Nushu","Noto Znamenny Musical Notation","Nova Cut","Nova Flat","Nova Mono","Nova Oval","Nova Round","Nova Script","Nova Slim","Nova Square","Numans","Nunito","Nunito Sans","Nuosu SIL","Odibee Sans","Odor Mean Chey","Offside","Oi","Ojuju","Old Standard TT","Oldenburg","Ole","Oleo Script","Oleo Script Swash Caps","Onest","Oooh Baby","Open Sans","Oranienbaum","Orbit","Orbitron","Oregano","Orelega One","Orienta","Original Surfer","Oswald","Outfit","Over the Rainbow","Overlock","Overlock SC","Overpass","Overpass Mono","Ovo","Oxanium","Oxygen","Oxygen Mono","PT Mono","PT Sans","PT Sans Caption","PT Sans Narrow","PT Serif","PT Serif Caption","Pacifico","Padauk","Padyakke Expanded One","Palanquin","Palanquin Dark","Palette Mosaic","Pangolin","Paprika","Parastoo","Parisienne","Parkinsans","Passero One","Passion One","Passions Conflict","Pathway Extreme","Pathway Gothic One","Patrick Hand","Patrick Hand SC","Pattaya","Patua One","Pavanam","Paytone One","Peddana","Peralta","Permanent Marker","Petemoss","Petit Formal Script","Petrona","Phetsarath","Philosopher","Phudu","Piazzolla","Piedra","Pinyon Script","Pirata One","Pixelify Sans","Plaster","Platypi","Play","Playball","Playfair","Playfair Display","Playfair Display SC","Playpen Sans","Playpen Sans Arabic","Playpen Sans Deva","Playpen Sans Hebrew","Playpen Sans Thai","Playwrite AR","Playwrite AR Guides","Playwrite AT","Playwrite AT Guides","Playwrite AU NSW","Playwrite AU NSW Guides","Playwrite AU QLD","Playwrite AU QLD Guides","Playwrite AU SA","Playwrite AU SA Guides","Playwrite AU TAS","Playwrite AU TAS Guides","Playwrite AU VIC","Playwrite AU VIC Guides","Playwrite BE VLG","Playwrite BE VLG Guides","Playwrite BE WAL","Playwrite BE WAL Guides","Playwrite BR","Playwrite BR Guides","Playwrite CA","Playwrite CA Guides","Playwrite CL","Playwrite CL Guides","Playwrite CO","Playwrite CO Guides","Playwrite CU","Playwrite CU Guides","Playwrite CZ","Playwrite CZ Guides","Playwrite DE Grund","Playwrite DE Grund Guides","Playwrite DE LA","Playwrite DE LA Guides","Playwrite DE SAS","Playwrite DE SAS Guides","Playwrite DE VA","Playwrite DE VA Guides","Playwrite DK Loopet","Playwrite DK Loopet Guides","Playwrite DK Uloopet","Playwrite DK Uloopet Guides","Playwrite ES","Playwrite ES Deco","Playwrite ES Deco Guides","Playwrite ES Guides","Playwrite FR Moderne","Playwrite FR Moderne Guides","Playwrite FR Trad","Playwrite FR Trad Guides","Playwrite GB J","Playwrite GB J Guides","Playwrite GB S","Playwrite GB S Guides","Playwrite HR","Playwrite HR Guides","Playwrite HR Lijeva","Playwrite HR Lijeva Guides","Playwrite HU","Playwrite HU Guides","Playwrite ID","Playwrite ID Guides","Playwrite IE","Playwrite IE Guides","Playwrite IN","Playwrite IN Guides","Playwrite IS","Playwrite IS Guides","Playwrite IT Moderna","Playwrite IT Moderna Guides","Playwrite IT Trad","Playwrite IT Trad Guides","Playwrite MX","Playwrite MX Guides","Playwrite NG Modern","Playwrite NG Modern Guides","Playwrite NL","Playwrite NL Guides","Playwrite NO","Playwrite NO Guides","Playwrite NZ","Playwrite NZ Guides","Playwrite PE","Playwrite PE Guides","Playwrite PL","Playwrite PL Guides","Playwrite PT","Playwrite PT Guides","Playwrite RO","Playwrite RO Guides","Playwrite SK","Playwrite SK Guides","Playwrite TZ","Playwrite TZ Guides","Playwrite US Modern","Playwrite US Modern Guides","Playwrite US Trad","Playwrite US Trad Guides","Playwrite VN","Playwrite VN Guides","Playwrite ZA","Playwrite ZA Guides","Plus Jakarta Sans","Pochaevsk","Podkova","Poetsen One","Poiret One","Poller One","Poltawski Nowy","Poly","Pompiere","Ponnala","Ponomar","Pontano Sans","Poor Story","Poppins","Port Lligat Sans","Port Lligat Slab","Potta One","Pragati Narrow","Praise","Prata","Preahvihear","Press Start 2P","Pridi","Princess Sofia","Prociono","Prompt","Prosto One","Protest Guerrilla","Protest Revolution","Protest Riot","Protest Strike","Proza Libre","Public Sans","Puppies Play","Puritan","Purple Purse","Qahiri","Quando","Quantico","Quattrocento","Quattrocento Sans","Questrial","Quicksand","Quintessential","Qwigley","Qwitcher Grypen","REM","Racing Sans One","Radio Canada","Radio Canada Big","Radley","Rajdhani","Rakkas","Raleway","Raleway Dots","Ramabhadra","Ramaraja","Rambla","Rammetto One","Rampart One","Ranchers","Rancho","Ranga","Rasa","Rationale","Ravi Prakash","Readex Pro","Recursive","Red Hat Display","Red Hat Mono","Red Hat Text","Red Rose","Redacted","Redacted Script","Reddit Mono","Reddit Sans","Reddit Sans Condensed","Redressed","Reem Kufi","Reem Kufi Fun","Reem Kufi Ink","Reenie Beanie","Reggae One","Rethink Sans","Revalia","Rhodium Libre","Ribeye","Ribeye Marrow","Righteous","Risque","Road Rage","Roboto","Roboto Condensed","Roboto Flex","Roboto Mono","Roboto Serif","Roboto Slab","Rochester","Rock 3D","Rock Salt","RocknRoll One","Rokkitt","Romanesco","Ropa Sans","Rosario","Rosarivo","Rouge Script","Rowdies","Rozha One","Rubik","Rubik 80s Fade","Rubik Beastly","Rubik Broken Fax","Rubik Bubbles","Rubik Burned","Rubik Dirt","Rubik Distressed","Rubik Doodle Shadow","Rubik Doodle Triangles","Rubik Gemstones","Rubik Glitch","Rubik Glitch Pop","Rubik Iso","Rubik Lines","Rubik Maps","Rubik Marker Hatch","Rubik Maze","Rubik Microbe","Rubik Mono One","Rubik Moonrocks","Rubik Pixels","Rubik Puddles","Rubik Scribble","Rubik Spray Paint","Rubik Storm","Rubik Vinyl","Rubik Wet Paint","Ruda","Rufina","Ruge Boogie","Ruluko","Rum Raisin","Ruslan Display","Russo One","Ruthie","Ruwudu","Rye","STIX Two Text","SUSE","SUSE Mono","Sacramento","Sahitya","Sail","Saira","Saira Condensed","Saira Extra Condensed","Saira Semi Condensed","Saira Stencil One","Salsa","Sanchez","Sancreek","Sankofa Display","Sansation","Sansita","Sansita Swashed","Sarabun","Sarala","Sarina","Sarpanch","Sassy Frass","Satisfy","Savate","Sawarabi Gothic","Sawarabi Mincho","Scada","Scheherazade New","Schibsted Grotesk","Schoolbell","Science Gothic","Scope One","Seaweed Script","Secular One","Sedan","Sedan SC","Sedgwick Ave","Sedgwick Ave Display","Sekuya","Sen","Send Flowers","Sevillana","Seymour One","Shadows Into Light","Shadows Into Light Two","Shafarik","Shalimar","Shantell Sans","Shanti","Share","Share Tech","Share Tech Mono","Shippori Antique","Shippori Antique B1","Shippori Mincho","Shippori Mincho B1","Shizuru","Shojumaru","Short Stack","Shrikhand","Siemreap","Sigmar","Sigmar One","Signika","Signika Negative","Silkscreen","Simonetta","Single Day","Sintony","Sirin Stencil","Sirivennela","Six Caps","Sixtyfour","Sixtyfour Convergence","Skranji","Slabo 13px","Slabo 27px","Slackey","Slackside One","Smokum","Smooch","Smooch Sans","Smythe","Sniglet","Snippet","Snowburst One","Sofadi One","Sofia","Sofia Sans","Sofia Sans Condensed","Sofia Sans Extra Condensed","Sofia Sans Semi Condensed","Solitreo","Solway","Sometype Mono","Song Myung","Sono","Sonsie One","Sora","Sorts Mill Goudy","Sour Gummy","Source Code Pro","Source Sans 3","Source Serif 4","Space Grotesk","Space Mono","Special Elite","Special Gothic","Special Gothic Condensed One","Special Gothic Expanded One","Spectral","Spectral SC","Spicy Rice","Spinnaker","Spirax","Splash","Spline Sans","Spline Sans Mono","Squada One","Square Peg","Sree Krushnadevaraya","Sriracha","Srisakdi","Staatliches","Stack Sans Headline","Stack Sans Notch","Stack Sans Text","Stalemate","Stalinist One","Stardos Stencil","Stick","Stick No Bills","Stint Ultra Condensed","Stint Ultra Expanded","Stoke","Story Script","Strait","Style Script","Stylish","Sue Ellen Francisco","Suez One","Sulphur Point","Sumana","Sunflower","Sunshiney","Supermercado One","Sura","Suranna","Suravaram","Suwannaphum","Swanky and Moo Moo","Syncopate","Syne","Syne Mono","Syne Tactile","TASA Explorer","TASA Orbiter","Tac One","Tagesschrift","Tai Heritage Pro","Tajawal","Tangerine","Tapestry","Taprom","Tauri","Taviraj","Teachers","Teko","Tektur","Telex","Tenali Ramakrishna","Tenor Sans","Text Me One","Texturina","Thasadith","The Girl Next Door","The Nautigal","Tienne","TikTok Sans","Tillana","Tilt Neon","Tilt Prism","Tilt Warp","Timmana","Tinos","Tiny5","Tiro Bangla","Tiro Devanagari Hindi","Tiro Devanagari Marathi","Tiro Devanagari Sanskrit","Tiro Gurmukhi","Tiro Kannada","Tiro Tamil","Tiro Telugu","Tirra","Titan One","Titillium Web","Tomorrow","Tourney","Trade Winds","Train One","Triodion","Trirong","Trispace","Trocchi","Trochut","Truculenta","Trykker","Tsukimi Rounded","Tuffy","Tulpen One","Turret Road","Twinkle Star","Ubuntu","Ubuntu Condensed","Ubuntu Mono","Ubuntu Sans","Ubuntu Sans Mono","Uchen","Ultra","Unbounded","Uncial Antiqua","Underdog","Unica One","UnifrakturCook","UnifrakturMaguntia","Unkempt","Unlock","Unna","UoqMunThenKhung","Updock","Urbanist","VT323","Vampiro One","Varela","Varela Round","Varta","Vast Shadow","Vazirmatn","Vend Sans","Vesper Libre","Viaoda Libre","Vibes","Vibur","Victor Mono","Vidaloka","Viga","Vina Sans","Voces","Volkhov","Vollkorn","Vollkorn SC","Voltaire","Vujahday Script","WDXL Lubrifont JP N","WDXL Lubrifont SC","WDXL Lubrifont TC","Waiting for the Sunrise","Wallpoet","Walter Turncoat","Warnes","Water Brush","Waterfall","Wavefont","Wellfleet","Wendy One","Whisper","WindSong","Winky Rough","Winky Sans","Wire One","Wittgenstein","Wix Madefor Display","Wix Madefor Text","Work Sans","Workbench","Xanh Mono","Yaldevi","Yanone Kaffeesatz","Yantramanav","Yarndings 12","Yarndings 12 Charted","Yarndings 20","Yarndings 20 Charted","Yatra One","Yellowtail","Yeon Sung","Yeseva One","Yesteryear","Yomogi","Young Serif","Yrsa","Ysabeau","Ysabeau Infant","Ysabeau Office","Ysabeau SC","Yuji Boku","Yuji Hentaigana Akari","Yuji Hentaigana Akebono","Yuji Mai","Yuji Syuku","Yusei Magic","ZCOOL KuaiLe","ZCOOL QingKe HuangYou","ZCOOL XiaoWei","Zain","Zalando Sans","Zalando Sans Expanded","Zalando Sans SemiExpanded","Zen Antique","Zen Antique Soft","Zen Dots","Zen Kaku Gothic Antique","Zen Kaku Gothic New","Zen Kurenaido","Zen Loop","Zen Maru Gothic","Zen Old Mincho","Zen Tokyo Zoo","Zeyada","Zhi Mang Xing","Zilla Slab","Zilla Slab Highlight"]}];const[,{fonts:googleFonts}]=FontsData;function getInternalFonts(y,R){return toString(parseVars(y).map(E=>({name:E,variants:"",...toVariables(R).find(q=>q.name===E),...toVariables(y["@internal-fonts"]?.value).find(q=>q.name===E)})))}function toString(y){return y.map(R=>`${R.name.replaceAll(" ","+")}${R.variants?`:${R.variants.replaceAll(" ","")}`:""}`).sort().join("|")}function toVariables(y){return y=unquote(y),y?y.split("|").map(R=>{const[E,q=""]=R.split(":");return{name:E.replaceAll("+"," "),variants:q}}).sort((R,E)=>R.name.localeCompare(E.name,"en")):[]}function parseVars(y){const R=new Set;for(const[E,q]of Object.entries(y))E.endsWith("-font-family")&&googleFonts.includes(unquote(q.value||q))&&R.add(unquote(q.value||q));return Array.from(R)}function unquote(y){return y.replace(/^~?(['"]?)(.*?)\1/,"$2")}class LessVariables{isPreEvalVisitor=!0;options={};variables={};components={};errors=[];constructor(R){this.options=R}install(R,E){this.less=R,E.addVisitor(this)}run(R){const E=new VariablesVisitor(this.options.vars);if(new this.less.visitors.Visitor(E).visit(R),this.parseVariables(R,E),this.parseFonts(E),!this.options.css)throw new Error("")}parseVariables(R,{files:E,styleVars:q,variables:d}){const _=createFindValueFn(this.less,R,d);for(const[b,w]of Object.entries(d)){let O;const A=isComputed(w.value);try{O=_(w.value)?.toCSS()}catch(S){console.error(S),O="",this.errors.push(`Unable to parse variable '${w.name}'`)}this.variables[b]={value:O,computed:A,file:E[b],style:q.has(b)}}}parseFonts({fonts:R,variables:E}){const q=R.length?R[R.length-("@internal-fonts"in this.options.vars?2:1)].value.toCSS():"",d=E["@internal-fonts"]||{};d.value=new this.less.tree.Quoted("'",getInternalFonts(this.variables,q));const _=this.variables["@internal-fonts"];_&&(_.value=d.value.toCSS(),_.original=q)}}class VariablesVisitor{fonts=[];variables={};files={};styleVars=new Set;constructor(R={}){"@internal-style"in R&&(this.styleRegex=new RegExp(`${R["@internal-style"]}\\.less$`))}visitMixinDefinition(R,E){E.visitDeeper=!1}visitDeclaration(R){return R.variable&&(this.variables[R.name]=R,R.name==="@internal-fonts"&&this.fonts.push(R),R.name in this.files||(this.files[R.name]=pathBrowserifyExports.basename(R.currentFileInfo.filename,".less")),this.styleRegex?.test(R.currentFileInfo.filename)&&this.styleVars.add(R.name)),R}}function createFindValueFn(y,R,E){const q=new y.contexts.Eval({},[R]);return function d(_){switch(_?.type){case"Declaration":return d(R.parseValue(_).value);case"Call":return _.args=_.args.map(d),_.eval(q);case"Value":case"Expression":return _.value=_.value.map(d),_.eval(q);case"Variable":return d(E[_.name]||R.variable(_.name));case"Operation":{const[b,w]=_.operands;return d(b).operate(q,_.op,d(w))}case"Negative":return d(_.value).operate(q,"*",new y.tree.Dimension(-1))}return _}}function isComputed(y){return y.type==="Variable"?!0:Array.isArray(y.value)?y.value.some(isComputed):y.value?isComputed(y.value):!1}const Commands={css({style:y,input:R,vars:E}){return render({style:y,input:R,vars:E})},rtl({css:y}){return{rtl:toRtl(y)}},vars({style:y,input:R,vars:E}){return render({style:y,input:R,vars:E,css:!1})},minify({style:{desturl:y},css:R}){return R=new CleanCSS({advanced:!1,keepSpecialComments:0,rebase:!1,inline:!1}).minify(api.rewriteUrls(R,y)).styles,{css:R,rtl:toRtl(R)}}};register(({cmd:y,data:R})=>y in Commands?Commands[y](R):Promise.reject(["Invalid command."]));async function render({style:{filename:y,filepath:R,imports:E={},vars:q={}},input:d="",vars:_={},css:b=!0}){api.staticFiles(E);let w,O;({vars:_,errors:O}=await validateVariables({..._,...q}));const A=new LessVariables({css:b,vars:_}),S={filename:y,rootpath:R,rewriteUrls:"all",plugins:[A],modifyVars:_};try{await api.parse(d)}catch(P){d="",O.push(`${P.message} in custom code.`)}try{w=(await api.render(`${E[y]} ${d}`,S)).css}catch(P){P.message&&O.push(`${P.message} in ${P.filename}`)}return{css:w,variables:A.variables,errors:O.concat(A.errors)}}async function validateVariables(y){const R=[];for(const[E,q]of Object.entries(y)){q||(y[E]="~''");try{await api.parse("",{modifyVars:{[E]:q}})}catch(d){R.push(`${d.message} in ${d.filename}`),delete y[E]}}return{vars:y,errors:R}}function toRtl(y){return rtlcss.process(y,{},[{name:"customNegate",priority:50,directives:{control:{},value:[]},processors:[{expr:["--uk-position-translate-x","stroke-dashoffset"].join("|"),action(R,E,q){return{prop:R,value:q.util.negate(E)}}}]}])}})(); styler/package.json000064400000000274151666572120010372 0ustar00{ "name": "@yootheme/less", "version": "1.0.0", "dependencies": { "native-url": "^0.3.4", "process-fast": "^1.0.0", "path-browserify": "^1.0.1" } } utils/src/File.php000064400000023014151666572120010076 0ustar00<?php namespace YOOtheme; /** * A static class which provides utilities for working with the file system. */ abstract class File { /** * Gets an existing file or directory. * * @param string $path * * @return string|null * * @example * File::get('/path/file.php'); * // => '/path/file.php' */ public static function get($path) { $path = Path::resolveAlias($path); return file_exists($path) ? $path : null; } /** * Checks whether file or directory exists. * * @param string $path * * @return bool * * @example * File::exists('/path/resource'); * // => true * * File::exists('/path/with/no/resource'); * // => false */ public static function exists($path) { return !is_null(static::get($path)); } /** * Find file with glob pattern. * * @param string $path * * @return string|null * * @example * File::find('/path/*.php'); * // => '/path/file.php' */ public static function find($path) { return ($files = static::glob($path, GLOB_NOSORT)) ? $files[0] : null; } /** * Glob files with braces support. * * @param string $pattern * @param int $flags * * @return array<string> * * @example * File::glob('/path/{*.ext,*.php}'); * // => ['/path/file.ext', '/path/file.php'] */ public static function glob($pattern, $flags = 0) { $pattern = Path::resolveAlias($pattern); if (defined('GLOB_BRACE') && !str_starts_with($pattern, '{')) { return glob($pattern, $flags | GLOB_BRACE) ?: []; } return static::_glob($pattern, $flags); } /** * Copies file. * * @param string $from * @param string $to * * @return bool * * @example * File::copy('/path/file.ext', '/path/dest/file.ext'); * // => true */ public static function copy($from, $to) { $from = Path::resolveAlias($from); $to = Path::resolve(dirname($from), $to); return copy($from, $to); } /** * Renames a file or directory. * * @param string $from * @param string $to * * @return bool * * @example * File::rename('/path/resource', '/path/renamed'); * // => true */ public static function rename($from, $to) { $from = Path::resolveAlias($from); $to = Path::resolve(dirname($from), $to); return rename($from, $to); } /** * Deletes a file. * * @param string $path * * @return bool * * @example * File::delete('/path/file.ext'); * // => true */ public static function delete($path) { $path = Path::resolveAlias($path); return unlink($path); } /** * List files and directories inside the specified path. * * @param string $path * @param bool|string $prefix * * @return string[]|false * * @example * File::listDir('/path/dir'); * // => ['Dir1', 'Dir2', 'File.txt'] * * File::listDir('/path/dir', true); * // => ['/path/dir/Dir1', '/path/dir/Dir2', '/path/dir/File.txt'] */ public static function listDir($path, $prefix = false) { $path = Path::resolveAlias($path); if (!static::exists($path)) { return false; } if ($prefix === true) { $prefix = $path; } if ($files = scandir($path)) { $files = array_values(array_diff($files, ['.', '..'])); } if ($files && $prefix) { foreach ($files as &$file) { $file = Path::join($prefix, $file); } } return $files; } /** * Makes directory. * * @param string $path * @param int $mode * @param bool $recursive * * @return bool * * @example * File::makeDir('/path/dir/to/make'); * // => true */ public static function makeDir($path, $mode = 0777, $recursive = false) { $path = Path::resolveAlias($path); return is_dir($path) || @mkdir($path, $mode, $recursive) || is_dir($path); } /** * Removes directory recursively. * * @param string $path * * @return bool * * @example * File::deleteDir('/path/dir/to/delete'); * // => true */ public static function deleteDir($path) { $path = Path::resolveAlias($path); $files = static::listDir($path, true); if (is_bool($files)) { return $files; } foreach ($files as $file) { // delete directory recursively if (is_dir($file) && !static::deleteDir($file)) { return false; } // delete file if (is_file($file) && !unlink($file)) { return false; } } return rmdir($path); } /** * Gets the last access time of file. * * @param string $path * * @return int|null * * @example * File::getATime('/path/file.ext'); * // => 1551693515 */ public static function getATime($path) { $path = Path::resolveAlias($path); $time = fileatime($path); return is_int($time) ? $time : null; } /** * Gets the inode change time of file. * * @param string $path * * @return int|null * * @example * File::getCTime('/path/file.ext'); * // => 1551693515 */ public static function getCTime($path) { $path = Path::resolveAlias($path); $time = filectime($path); return is_int($time) ? $time : null; } /** * Gets the last modified time of file. * * @param string $path * * @return int|null * * @example * File::getMTime('/path/file.ext'); * // => 1551693515 */ public static function getMTime($path) { $path = Path::resolveAlias($path); $time = filemtime($path); return is_int($time) ? $time : null; } /** * Gets the file size. * * @param string $path * * @return int|null * * @example * File::getSize('/path/file.ext'); * // => 4 */ public static function getSize($path) { $path = Path::resolveAlias($path); $size = filesize($path); return is_int($size) ? $size : null; } /** * Gets the file mime content type. * * @param string $path * * @return false|string * * @example * File::getMimetype('/path/file.ext'); * // => text/plain */ public static function getMimetype($path) { $path = Path::resolveAlias($path); return function_exists('finfo_file') ? finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path) : mime_content_type($path); } /** * Gets the file extension. * * @param string $path * * @return string * * @example * File::getExtension('/path/file.ext'); * // => ext */ public static function getExtension($path) { $path = Path::resolveAlias($path); return pathinfo($path, PATHINFO_EXTENSION); } /** * Gets the contents from file. * * @param string $path * * @return string|null * * @example * File::getContents('/path/file.ext'); * // => filecontent */ public static function getContents($path) { $path = Path::resolveAlias($path); $data = file_get_contents($path); return is_string($data) ? $data : null; } /** * Writes the contents to file. * * @param string $path * @param mixed $data * @param int $flags * * @return int|null * * @example * File::putContents('/path/file.ext', 'content'); * // => true */ public static function putContents($path, $data, $flags = 0) { $path = Path::resolveAlias($path); $bytes = file_put_contents($path, $data, $flags); return is_int($bytes) ? $bytes : null; } /** * Checks if is a directory. * * @param string $path * * @return bool * * @example * File::isDir('/path/dir'); * // => true */ public static function isDir($path) { $path = Path::resolveAlias($path); return is_dir($path); } /** * Checks if is a file. * * @param string $path * * @return bool * * @example * File::isFile('/path/file.ext'); * // => true */ public static function isFile($path) { $path = Path::resolveAlias($path); return is_file($path); } /** * Checks if is a link. * * @param string $path * * @return bool * * @example * File::isLink('/path/link'); * // => true */ public static function isLink($path) { $path = Path::resolveAlias($path); return is_link($path); } /** * Glob files with braces support (Polyfill). * * @param string $pattern * @param int $flags * * @return array */ protected static function _glob($pattern, $flags = 0) { $files = []; foreach (Str::expandBraces($pattern) as $file) { $files = array_merge($files, glob($file, $flags | GLOB_NOSORT) ?: []); } return $files; } } utils/src/EventDispatcher.php000064400000010271151666572120012310 0ustar00<?php namespace YOOtheme; class EventDispatcher { /** * @var array */ protected $handlers = []; /** * @var array */ protected $listeners = []; /** * Constructor. * * @param array $handlers */ public function __construct(array $handlers = []) { $this->handlers = $handlers + [ 'filter' => [$this, 'handleFilter'], 'default' => [$this, 'handleDefault'], 'middleware' => [$this, 'handleMiddleware'], ]; } /** * Dispatches an event with arguments. * * @param string $event * @param array $arguments * * @return mixed */ public function dispatch($event, ...$arguments) { [$event, $type] = explode('|', $event, 2) + [1 => 'default']; $handler = $this->handlers[$type] ?? $this->handlers['default']; return $handler($this->getListeners($event), $arguments); } /** * Gets the event listeners. * * @param string $event * * @return array */ public function getListeners($event) { return array_merge(...$this->listeners[$event] ?? []); } /** * Adds an event listener. * * @param string $event * @param callable $listener * @param int $priority */ public function addListener($event, $listener, $priority = 0) { $exists = isset($this->listeners[$event][$priority]); $this->listeners[$event][$priority][] = $listener; if (!$exists) { krsort($this->listeners[$event]); } } /** * Removes an event listener. * * @param string $event * @param callable $listener * * @return bool */ public function removeListener($event, $listener = null) { if (($result = is_null($listener)) || !isset($this->listeners[$event])) { $this->listeners[$event] = []; } foreach ($this->listeners[$event] as &$listeners) { if (is_int($key = array_search($listener, $listeners, true))) { array_splice($listeners, $key, 1); return true; } } return $result; } /** * The default handler calls every listener ordered by the priority. * * @param array $listeners * @param array $arguments * * @return mixed */ protected function handleDefault(array $listeners, array $arguments = []) { $result = null; foreach ($listeners as $listener) { $_result = $listener(...$arguments); // stop event propagation? if ($_result === false) { break; } if (isset($_result)) { $result = $_result; } } return $result; } /** * The filter handler calls every listener ordered by the priority. It passes the return value from each listener to the next listener. * * @param array $listeners * @param array $arguments * * @return mixed */ protected function handleFilter(array $listeners, array $arguments = []) { if (!$arguments) { throw new \InvalidArgumentException('Filter must have at least one argument'); } foreach ($listeners as $listener) { $arguments[0] = $listener(...$arguments); } return $arguments[0]; } /** * The middleware handler calls every listener with arguments and a next() function which is invoked to execute the "next" middleware function. * * @param array $listeners * @param array $arguments * * @return mixed */ protected function handleMiddleware(array $listeners, array $arguments = []) { if (!$arguments) { throw new \InvalidArgumentException('Middleware must have at least one argument'); } if (!is_callable($arguments[0])) { throw new \InvalidArgumentException( 'Middleware must have a callable as first argument', ); } $middleware = new Middleware(array_shift($arguments), $listeners); return $middleware(...$arguments); } } utils/src/Url.php000064400000006452151666572120007770 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\Uri; abstract class Url { protected static string $base; protected static ?Uri $baseUri; /** * Gets the base URL. * * @param bool $secure * * @return string */ public static function base($secure = null) { if (is_null($secure)) { return static::getBase()->getPath(); } return (string) static::getBase()->withScheme($secure ? 'https' : 'http'); } /** * Sets the base URL. * * @param string|Uri $base */ public static function setBase($base) { static::$baseUri = null; static::$base = (string) $base; } /** * Generates a URL to a path. * * @param string $path * @param array $parameters * @param bool $secure * * @return string|false */ public static function to($path, array $parameters = [], $secure = null) { try { if (empty($parameters) && is_null($secure) && static::isValid($path)) { return $path; } return (string) Event::emit( 'url.resolve|middleware', [static::class, 'generate'], $path, $parameters, $secure, ); } catch (\Exception $e) { return false; } } /** * Generates a URL to a route. * * @param string $pattern * @param array $parameters * @param bool $secure * * @return string */ public static function route($pattern = '', array $parameters = [], $secure = null) { return (string) Event::emit('url.route', $pattern, $parameters, $secure); } /** * Generates a URL to a path. * * @param string $path * @param array $parameters * @param bool $secure * * @return Uri */ public static function generate($path, array $parameters = [], $secure = null) { $url = new Uri($path); $base = static::getBase(); if (!$url->getHost() && !str_starts_with($url->getPath(), '/')) { $url = $url->withPath(Path::join($base->getPath(), $url->getPath())); } if ($query = array_replace($url->getQueryParams(), $parameters)) { $url = $url->withQueryParams($query); } if (is_bool($secure)) { if (!$url->getHost()) { $url = $url->withHost($base->getHost())->withPort($base->getPort()); } $url = $url->withScheme($secure ? 'https' : 'http'); } return $url; } public static function relative($url, $baseUrl = null) { $baseUrl ??= static::base(); return Path::relative($baseUrl ?: '/', $url); } /** * Checks if the given path is a valid URL. * * @param string $path * * @return bool */ public static function isValid($path) { $valid = ['http://', 'https://', 'mailto:', 'tel:', '//', '#']; return Str::startsWith($path, $valid) || filter_var($path, FILTER_VALIDATE_URL); } /** * Gets the base URL. * * @return Uri */ protected static function getBase() { return static::$baseUri ?? (static::$baseUri = new Uri(static::$base)); } } utils/src/Event.php000064400000002353151666572120010303 0ustar00<?php namespace YOOtheme; abstract class Event { /** * @var EventDispatcher|null */ protected static $dispatcher; /** * Adds an event listener. * * @param string $event * @param callable $listener * @param int $priority */ public static function on($event, $listener, $priority = 0) { static::getDispatcher()->addListener($event, $listener, $priority); } /** * Removes an event listener. * * @param string $event * @param callable $listener * * @return bool */ public static function off($event, $listener = null) { return static::getDispatcher()->removeListener($event, $listener); } /** * Emits an event with arguments. * * @param string $event * @param array $arguments * * @return mixed */ public static function emit($event, ...$arguments) { return static::getDispatcher()->dispatch($event, ...$arguments); } /** * Gets the event dispatcher instance. * * @return EventDispatcher */ public static function getDispatcher() { return static::$dispatcher ?: (static::$dispatcher = new EventDispatcher()); } } utils/src/Memory.php000064400000001624151666572120010472 0ustar00<?php namespace YOOtheme; abstract class Memory { /** * Try to raise memory_limit. * * @param string $memory */ public static function raise($memory = '512M') { $limit = static::toBytes(@ini_get('memory_limit')); if ($limit !== -1 && $limit < static::toBytes($memory)) { @ini_set('memory_limit', $memory); } } /** * Converts a shorthand byte value to an integer byte value. * * @param string|int $value * * @return int */ public static function toBytes($value) { $bytes = (int) $value; $value = substr(strtolower(trim($value)), -1); switch ($value) { case 'g': $bytes *= 1024; case 'm': $bytes *= 1024; case 'k': $bytes *= 1024; } return min($bytes, PHP_INT_MAX); } } utils/src/Hook.php000064400000003374151666572120010126 0ustar00<?php namespace YOOtheme; abstract class Hook { protected static ?HookCollection $collection; /** * Call hooks for given name. * * @param string|string[] $name * @return mixed */ public static function call($name, callable $callback, ...$arguments) { return static::getCollection()->call($name, $callback, ...$arguments); } /** * Add "wrap" hook for given name. */ public static function wrap(string $name, callable $callback): void { static::getCollection()->wrap($name, $callback); } /** * Add "before" hook for given name. */ public static function before(string $name, callable $callback): void { static::getCollection()->before($name, $callback); } /** * Add "after" hook for given name. */ public static function after(string $name, callable $callback): void { static::getCollection()->after($name, $callback); } /** * Add "filter" hook for given name. */ public static function filter(string $name, callable $callback): void { static::getCollection()->filter($name, $callback); } /** * Add "error" hook for given name. */ public static function error(string $name, callable $callback): void { static::getCollection()->error($name, $callback); } /** * Removes hook for given name. */ public static function remove(string $name, callable $callback): void { static::getCollection()->remove($name, $callback); } /** * Returns hook collection. */ public static function getCollection(): HookCollection { return static::$collection ?? (static::$collection = new HookCollection()); } } utils/src/Reflection.php000064400000015370151666572120011317 0ustar00<?php namespace YOOtheme; /** * A static class which provides utilities for working with class reflections. */ abstract class Reflection { public const REGEX_ANNOTATION = '/@(?<name>[\w\\\\]+)(?:\s*(?:\(\s*)?(?<value>.*?)(?:\s*\))?)??\s*(?:\n|\*\/)/'; /** * @var array */ public static $annotations = []; /** * Gets reflector string representation. * * @param \Reflector $reflector * * @return string */ public static function toString(\Reflector $reflector) { $string = $reflector->getName(); if ($reflector instanceof \ReflectionMethod) { $string = "{$reflector->getDeclaringClass()->getName()}::{$string}()"; } if (ini_get('display_errors') && method_exists($reflector, 'getFileName')) { $string .= " in {$reflector->getFileName()}:{$reflector->getStartLine()}-{$reflector->getEndLine()}"; } return $string; } /** * Gets caller info using backtrace. * * @param string $key * @param int $index * * @return mixed */ public static function getCaller($key = null, $index = 1) { $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $index + 1); return $key ? $backtrace[$index][$key] : $backtrace[$index]; } /** * Gets reflection class for given classname. * * @param \ReflectionClass|object|string $class * * @throws \ReflectionException * * @return \ReflectionClass * * @example * Reflection::getClass('ClassName'); */ public static function getClass($class) { return $class instanceof \ReflectionClass ? $class : new \ReflectionClass($class); } /** * Gets the parent reflection classes for a given class. * * @param \ReflectionClass|object|string $class * * @return \ReflectionClass[] * * @example * Reflection::getParentClasses('ClassName'); */ public static function getParentClasses($class) { $class = static::getClass($class); do { $classes[] = $class; } while ($class = $class->getParentClass()); return $classes; } /** * Gets the reflection properties for given class. * * @param \ReflectionClass|object|string $class * * @return \ReflectionProperty[] * * @example * Reflection::getProperties('ClassName'); */ public static function getProperties($class) { $properties = []; foreach (static::getClass($class)->getProperties() as $property) { $property->setAccessible(true); $properties[$property->name] = $property; } return $properties; } /** * Gets the reflection function for given callback. * * @param callable|string $callback * * @throws \ReflectionException * * @return \ReflectionFunctionAbstract * * @example * Reflection::getFunction('ClassName::methodName'); */ public static function getFunction($callback) { if (is_string($callback) && strpos($callback, '::')) { $callback = explode('::', $callback); } if (is_array($callback)) { return new \ReflectionMethod($callback[0], $callback[1]); } if (is_object($callback) && !$callback instanceof \Closure) { return (new \ReflectionObject($callback))->getMethod('__invoke'); } return new \ReflectionFunction($callback); } /** * Gets the reflection parameters for given callback. * * @param callable|string $callback * * @throws \ReflectionException * * @return \ReflectionParameter[] * * @example * Reflection::getParameters('ClassName::methodName'); */ public static function getParameters($callback) { return static::getFunction($callback)->getParameters(); } /** * Gets an annotation by name for given reflector. * * @param \Reflector $reflector * @param string $name * * @return object|void * * @example * $reflector = Reflection::getAnnotation('ClassName'); * Reflection::getAnnotation($reflector, 'tag'); */ public static function getAnnotation(\Reflector $reflector, $name) { if ($annotations = static::getAnnotations($reflector, $name)) { return $annotations[0]; } } /** * Gets all annotations for given reflector. * * @param \Reflector $reflector * @param string $name * * @return array * * @example * $reflector = Reflection::getClass('ClassName'); * Reflection::getAnnotations($reflector); */ public static function getAnnotations(\Reflector $reflector, $name = null) { if ($reflector instanceof \ReflectionClass) { $key = $reflector->name; } elseif ($reflector instanceof \ReflectionProperty) { $key = "{$reflector->class}.{$reflector->name}"; } elseif ($reflector instanceof \ReflectionMethod) { $key = "{$reflector->class}:{$reflector->name}"; } else { $key = null; } if (!isset(static::$annotations[$key])) { $comment = $reflector->getDocComment() ?: ''; if (!$name || strpos($comment, "@{$name}")) { static::$annotations[$key] = static::parseAnnotations($comment); } elseif (!$comment || !strpos($comment, '@')) { return static::$annotations[$key] = []; } else { return []; } } return $name ? static::filterAnnotations(static::$annotations[$key], $name) : static::$annotations[$key]; } /** * Parses all annotations from given string. * * @param string $string * * @return array */ protected static function parseAnnotations($string) { $annotations = []; if (preg_match_all(static::REGEX_ANNOTATION, $string, $matches, PREG_SET_ORDER)) { foreach ($matches as $match) { $annotations[] = (object) [ 'name' => $match['name'], 'value' => $match['value'] ?? null, ]; } } return $annotations; } /** * Filters annotations by given name. * * @param array $annotations * @param mixed $name * * @return array */ protected static function filterAnnotations(array $annotations, $name) { $results = []; foreach ($annotations as $annotation) { if ($annotation->name == $name) { $results[] = $annotation; } } return $results; } } utils/src/HookCollection.php000064400000007344151666572120012143 0ustar00<?php namespace YOOtheme; class HookCollection { protected const WRAP = 'wrap'; protected const BEFORE = 'before'; protected const AFTER = 'after'; protected const FILTER = 'filter'; protected const ERROR = 'error'; protected array $hooks = []; /** * Call hooks for given name. * * @param string|string[] $name * @return mixed */ public function call($name, callable $callback, ...$arguments) { $names = is_array($name) ? array_reverse($name) : [$name]; foreach ($names as $name) { if ($hooks = $this->hooks[$name] ?? null) { $callback = $this->build($callback, $hooks); } } return $callback(...$arguments); } /** * Add "wrap" hook for given name. */ public function wrap(string $name, callable $callback): void { $this->hooks[$name][] = [static::WRAP, $callback]; } /** * Add "before" hook for given name. */ public function before(string $name, callable $callback): void { $this->hooks[$name][] = [static::BEFORE, $callback]; } /** * Add "after" hook for given name. */ public function after(string $name, callable $callback): void { $this->hooks[$name][] = [static::AFTER, $callback]; } /** * Add "filter" hook for given name. */ public function filter(string $name, callable $callback): void { $this->hooks[$name][] = [static::FILTER, $callback]; } /** * Add "error" hook for given name. */ public function error(string $name, callable $callback): void { $this->hooks[$name][] = [static::ERROR, $callback]; } /** * Removes hook for given name. */ public function remove(string $name, callable $callback): void { $this->hooks[$name] = array_filter( $this->hooks[$name] ?? [], fn($hook) => $hook[1] === $callback, ); } /** * Builds a function from given hook array. */ protected function build(callable $method, array $hooks): callable { $errors = []; foreach ($hooks as $i => [$kind, $callback]) { if ($kind === static::ERROR) { $errors[] = [$kind, $callback]; unset($hooks[$i]); } } return array_reduce([...$hooks, ...$errors], [$this, 'reduce'], $method); } /** * Returns a function for given hook. */ protected function reduce(callable $method, array $hook): \Closure { [$kind, $callback] = $hook; if ($kind === static::WRAP) { return function (...$arguments) use ($method, $callback) { return $callback($method, ...$arguments); }; } if ($kind === static::BEFORE) { return function (...$arguments) use ($method, $callback) { $callback(...$arguments); return $method(...$arguments); }; } if ($kind === static::AFTER) { return function (...$arguments) use ($method, $callback) { $callback($result = $method(...$arguments), ...$arguments); return $result; }; } if ($kind === static::FILTER) { return function (...$arguments) use ($method, $callback) { return $callback($method(...$arguments), ...$arguments); }; } return function (...$arguments) use ($method, $callback) { try { $result = $method(...$arguments); } catch (\Throwable $error) { $result = $callback($error, ...$arguments); } return $result; }; } } utils/src/Middleware.php000064400000001351151666572120011274 0ustar00<?php namespace YOOtheme; class Middleware { /** * @var array */ public $stack; /** * Constructor. * * @param callable $kernel * @param callable[] $stack */ public function __construct(callable $kernel, array $stack = []) { $this->stack = $stack; $this->stack[] = $kernel; } /** * Invokes the next middleware callback. * * @param mixed ...$arguments * * @return mixed */ public function __invoke(...$arguments) { $callback = array_shift($this->stack); // add next() as last argument if ($this->stack) { $arguments[] = $this; } return $callback(...$arguments); } } utils/src/Path.php000064400000022073151666572120010117 0ustar00<?php namespace YOOtheme; /** * A static class which provides utilities for working with directory paths. */ abstract class Path { /** * @var array */ protected static $aliases = []; /** * Gets an absolute path by resolving aliases and current directory. * * @param string $path * @param ?string $base * * @return string * * @example * Path::get('~app/dir'); * // => /app/dir */ public static function get($path, $base = null) { $path = static::resolveAlias($path); // path is `.`, `..` or starts with `./`, `../` if (str_starts_with($path, '.') && preg_match('/^\.\.?(?=\/|$)/', $path)) { return static::join($base ?? dirname(Reflection::getCaller('file')), $path); } return $path; } /** * Sets a path alias. * * @param string $alias * @param string $path * * @example * Path::setAlias('~app', '/app'); * * Path::resolveAlias('~app/resource'); * // => /app/resource */ public static function setAlias($alias, $path) { if (!str_starts_with($alias, '~')) { throw new \InvalidArgumentException("The alias '{$alias}' must start with ~"); } $path = rtrim(static::resolveAlias($path), '/'); $alias = rtrim(strtr($alias, '\\', '/'), '/'); [$name] = explode('/', $alias, 2); static::$aliases[$name]["$alias/"] = "$path/"; } /** * Resolve a path with alias. * * @param string $path * * @return string * * @example * Path::setAlias('~app', '/app'); * * Path::resolveAlias('~app/resource'); * // => /app/resource */ public static function resolveAlias($path) { $path = strtr($path, '\\', '/'); [$name] = explode('/', $path, 2); if (!str_starts_with($name, '~')) { return $path; } $trim = !str_ends_with($path, '/'); $path = Event::emit("path {$name}|filter", $path, substr($path, strlen($name))); if (isset(static::$aliases[$name])) { $path = strtr($trim ? "{$path}/" : $path, static::$aliases[$name]); } return $trim ? rtrim($path, '/') : $path; } /** * Resolves a sequence of paths or path segments into an absolute path. All path segments are processed from right to left. * * @param string $paths * * @return string * * @example * Path::resolve('~app/dir/dir', '../resource'); * // => /app/dir/resource */ public static function resolve(...$paths) { $parts = []; foreach (array_reverse($paths) as $path) { $path = static::resolveAlias($path); array_unshift($parts, $path); if (static::isAbsolute($path)) { break; } } $path = static::join(...$parts); return $path !== '/' ? rtrim($path, '/') : $path; } /** * Returns trailing name component of path. * * @param string $path * @param string $suffix * * @return string * * @example * Path::basename('~app/dir/file.php'); * // => file.php */ public static function basename($path, $suffix = '') { return basename(static::resolveAlias($path), $suffix); } /** * Returns the extension of the path. * * @param string $path * * @return string * * @example * Path::extname('~app/dir/file.php'); * // => .php */ public static function extname($path) { $basename = static::basename($path); $position = strrpos($basename, '.'); return $position ? substr($basename, $position) : ''; } /** * Returns a parent directory's path. * * @param string $path * * @return string * * @example * Path::dirname('~app/dir/file.php'); * // => /app/dir */ public static function dirname($path) { return dirname(static::resolveAlias($path)); } /** * Gets the relative path to a given base path. * * @param string $from * @param string $to * * @return string * * @example * Path::relative('/path/dir/test/aaa', '/path/dir/impl/bbb'); * // => ../../impl/bbb */ public static function relative($from, $to) { $from = static::resolveAlias($from); $to = static::resolveAlias($to); if ($to === '') { return $from; } $_from = static::parse($from); $_to = static::parse($to); if ($_from['root'] !== $_to['root']) { throw new \InvalidArgumentException( "The path '{$to}' can\'t be made relative to the path '{$from}'. Path roots aren\'t equal.", ); } $fromParts = explode('/', $_from['pathname']); $toParts = explode('/', $_to['pathname']); $match = true; $prefix = ''; foreach ($fromParts as $i => $fromPart) { if ('' === $fromPart) { continue; } if ($match && isset($toParts[$i]) && $fromPart === $toParts[$i]) { unset($toParts[$i]); continue; } $match = false; $prefix .= '../'; } return rtrim($prefix . join('/', $toParts), '/'); } /** * Normalizes a path, resolving '..' and '.' segments. * * @param string $path * * @return string * * @example * Path::normalize('/path1/.././file.txt'); * // => /file.txt */ public static function normalize($path) { static $cache; if (!$path) { return ''; } if (isset($cache[$path])) { return $cache[$path]; } $result = []; $parsed = static::parse($path); $parts = explode('/', $parsed['pathname']); foreach ($parts as $i => $part) { if ('.' === $part) { continue; } if ('' === $part && isset($parts[$i + 1])) { continue; } if ($part === '..' && $result && end($result) !== '..') { array_pop($result); continue; } if ($part !== '..' || $parsed['root'] === '') { $result[] = $part; } } return $cache[$path] = $parsed['root'] . join('/', $result); } /** * Joins all given path segments together. * * @param string $parts * * @return string * * @example * Path::join('/foo', '/bar', 'baz/asdf', 'quux', '..'); * // => /foo/bar/baz/asdf */ public static function join(...$parts) { return static::normalize(join('/', $parts)); } /** * Returns information about a path. * * @param string $path * * @return array * * @example * Path::parse('/foo/file.txt'); * // => ['root' => '/', 'pathname' => 'foo/file.txt', 'dirname' => '/foo', 'basename' => 'file.txt', 'filename' => 'file', 'extension' => 'txt'] */ public static function parse($path) { $path = strtr($path, '\\', '/'); $root = static::root($path) ?: ''; return pathinfo($path) + [ 'root' => $root, 'pathname' => substr($path, strlen($root)), 'dirname' => null, 'extension' => null, ]; } /** * Checks if path is absolute. * * @param string $path * * @return bool * * @example * Path::isAbsolute('/foo/file.txt'); * // => true */ public static function isAbsolute($path) { return (bool) static::root($path); } /** * Checks if path is relative. * * @param string $path * * @return bool * * @example * Path::isRelative('foo/file.txt'); * // => true */ public static function isRelative($path) { return !static::root($path); } /** * Checks if path is a base path of another path. * * @param string $basePath * @param string $path * * @return bool * * @example * Path::isBasePath('/foo/', '/foo/file.txt'); * // => true * Path::isBasePath('/foo', '/foo'); * // => true * Path::isBasePath('/foo', '/foo/..'); * // => false */ public static function isBasePath($basePath, $path) { $basePath = static::normalize(static::resolveAlias($basePath)); $path = static::normalize(static::resolveAlias($path)); return str_starts_with("{$path}/", rtrim($basePath, '/') . '/'); } /** * Returns path root. * * @param string $path * * @return mixed */ public static function root($path) { $path = strtr($path, '\\', '/'); if ($path && $path[0] === '/') { return '/'; } if (strpos($path, ':') && preg_match('/^([a-z]*:)?(\/\/|\/)/i', $path, $matches)) { return $matches[0]; } } } utils/src/Arr.php000064400000037751151666572120007760 0ustar00<?php namespace YOOtheme; /** * A static class which provides utilities for working with arrays. */ abstract class Arr { /** * Checks if the given key exists. * * @param array|\ArrayAccess $array * @param string|null $key * * @return bool * * @example * $array = ['a' => ['b' => 2]]; * * Arr::has($array, 'a'); * // => true * * Arr::has($array, 'a.b'); * // => true */ public static function has($array, $key) { if (!$array || is_null($key)) { return false; } if (static::exists($array, $key)) { return true; } if (!strpos($key, '.')) { return false; } foreach (explode('.', $key) as $part) { if (static::exists($array, $part)) { $array = $array[$part]; } else { return false; } } return true; } /** * Gets a value by key. * * @param array|\ArrayAccess $array * @param string|null $key * @param mixed $default * * @return mixed * * @example * $array = ['a' => [['b' => ['c' => 3]]]]; * * Arr::get($array, 'a.0.b.c'); * // => 3 * * Arr::get($array, 'a.b.c', 'default'); * // => 'default' */ public static function get($array, $key, $default = null) { if (!static::accessible($array)) { return $default; } if ($key === null) { return $array; } if (static::exists($array, $key)) { return $array[$key]; } if (!strpos($key, '.')) { return $default; } foreach (explode('.', $key) as $part) { if (static::exists($array, $part)) { $array = $array[$part]; } else { return $default; } } return $array; } /** * Sets a value. * * @param array|\ArrayAccess $array * @param string|null $key * @param mixed $value * * @return array|\ArrayAccess * * @example * $array = ['a' => [['b' => ['c' => 3]]]]; * * Arr::set($array, 'a.0.b.c', 4); * // => ['a' => [['b' => ['c' => 4]]]] */ public static function set(&$array, $key, $value) { if ($key === null) { return $array = $value; } $arr = &$array; $parts = explode('.', $key); while (count($parts) > 1) { $part = array_shift($parts); if (!isset($arr[$part]) || !is_array($arr[$part])) { $arr[$part] = []; } $arr = &$arr[$part]; } $arr[array_shift($parts)] = $value; return $array; } /** * Deletes a value from array by key. * * @param array|\ArrayAccess $array * @param string $key * * @example * $array = ['a' => [['b' => ['c' => 3]]]]; * * Arr::del($array, 'a.0.b.c'); * * print_r($array); * // => ['a' => [['b' => []]]] */ public static function del(&$array, $key) { // if the exact key exists in the top-level, delete it if (static::exists($array, $key)) { unset($array[$key]); return; } $parts = explode('.', $key); while (count($parts) > 1) { $part = array_shift($parts); if (isset($array[$part]) && is_array($array[$part])) { $array = &$array[$part]; } else { return; } } unset($array[array_shift($parts)]); } /** * Get a value from the array, and delete it. * * @param array|\ArrayAccess $array * @param string $key * @param mixed $default * * @return mixed * * @example * $array = ['a' => [['b' => ['c' => 3]]]]; * * Arr::pull($array, 'a.0.b.c'); * // => 3 * * print_r($array); * // => ['a' => [['b' => []]]] */ public static function pull(&$array, $key, $default = null) { $value = static::get($array, $key, $default); static::del($array, $key); return $value; } /** * Set a value using an update callback. * * @param array|\ArrayAccess $array * @param string $key * @param callable $callback * * @return array * * @example * $array = ['a' => [['b' => ['c' => 3]]]]; * * Arr::update($array, 'a.0.b.c', function($n) { return $n * $n; }); * * print_r($array); * // => ['a' => [['b' => ['c' => 9]]]] */ public static function update(&$array, $key, callable $callback) { return static::set($array, $key, $callback(static::get($array, $key))); } /** * Checks if all values pass the predicate truth test. * * @param array $array * @param array|callable $predicate * * @return bool * * @example * $collection = [ * ['user' => 'barney', 'role' => 'editor', 'age' => 36, 'active' => false], * ['user' => 'joana', 'role' => 'editor', 'age' => 23, 'active' => true] * ]; * * Arr::every($collection, ['role' => 'editor']); * // true * * Arr::every($collection, function($v) { return $v['active']; }); * // false */ public static function every($array, $predicate) { $callback = is_callable($predicate) ? $predicate : static::matches($predicate); foreach ($array as $key => $value) { if (!$callback($value, $key)) { return false; } } return true; } /** * Checks if some values pass the predicate truth test. * * @param array|\ArrayAccess $array * @param array|callable $predicate * * @return bool * * @example * $collection = [ * ['user' => 'barney', 'role' => 'editor', 'age' => 36, 'active' => false], * ['user' => 'joana', 'role' => 'editor', 'age' => 23, 'active' => true] * ]; * * Arr::some($collection, ['user' => 'barney']); * // true * * Arr::some($collection, function($v) { return $v['active']; }); * // true */ public static function some($array, $predicate) { $callback = is_callable($predicate) ? $predicate : static::matches($predicate); foreach ($array as $key => $value) { if ($callback($value, $key)) { return true; } } return false; } /** * Gets the picked values from the given array. * * @param array $array * @param string|array|callable $predicate * * @return array * * @example * $array = ['a' => 1, 'b' => 2, 'c' => 3]; * * Arr::pick($array, ['a', 'c']); * // ['a' => 1, 'c' => 3]; */ public static function pick($array, $predicate) { if (is_callable($predicate)) { return array_filter($array, $predicate, ARRAY_FILTER_USE_BOTH); } return array_intersect_key($array, array_flip((array) $predicate)); } /** * Gets an array composed of the properties of the given array that are not omitted. * * @param array $array * @param string|array|callable $predicate * * @return array * * @example * $array = ['a' => 1, 'b' => 2, 'c' => 3]; * * Arr::omit($array, ['b']); * // ['a' => 1, 'c' => 3]; */ public static function omit($array, $predicate) { if (is_callable($predicate)) { return array_diff_key($array, array_filter($array, $predicate, ARRAY_FILTER_USE_BOTH)); } return array_diff_key($array, array_flip((array) $predicate)); } /** * Gets the first value in an array passing the predicate truth test. * * @param array|\ArrayAccess $array * @param array|callable $predicate * * @return mixed * * @example * $collection = [ * ['user' => 'barney', 'role' => 'editor', 'age' => 36, 'active' => false], * ['user' => 'joana', 'role' => 'editor', 'age' => 23, 'active' => true] * ]; * * Arr::find($collection, ['user' => 'barney']); * // $collection[0] * * Arr::find($collection, function($v) { return $v['age'] === 23; }); * // $collection[1] */ public static function find($array, $predicate) { $callback = is_callable($predicate) ? $predicate : static::matches($predicate); foreach ($array as $key => $value) { if ($callback($value, $key)) { return $value; } } } /** * Gets all values in an array passing the predicate truth test. * * @param array $array * @param array|callable $predicate * * @return array * * @example * $collection = [ * ['user' => 'barney', 'role' => 'editor', 'age' => 36, 'active' => false], * ['user' => 'joana', 'role' => 'editor', 'age' => 23, 'active' => true], * ['user' => 'fred', 'role' => 'editor', 'age' => 40, 'active' => false] * ]; * * Arr::filter($collection, ['active' => true]); * // [$collection[1]] * * Arr::filter($collection, function($v) { return $v['age'] > 30; }); * // [$collection[0], $collection[2]] */ public static function filter($array, $predicate = null) { if (is_null($predicate)) { return array_filter($array); } $callback = is_callable($predicate) ? $predicate : static::matches($predicate); return array_filter($array, $callback, ARRAY_FILTER_USE_BOTH); } /** * Merges two arrays recursively. * * @param array|\ArrayAccess $array1 * @param array|\ArrayAccess $array2 * * @return array|\ArrayAccess * * @example * $array = ['a' => [['b' => 2], ['d' => 4]]]; * $other = ['a' => [['c' => 3], ['e' => 5]]]; * * Arr::merge($array, $other); * // =>['a' => [['b' => 2], ['d' => 4], ['c' => 3], ['e' => 5]]] */ public static function merge($array1, $array2) { foreach ($array2 as $key => $value) { if (isset($array1[$key])) { if (is_int($key)) { $array1[] = $value; } elseif (static::accessible($value) && static::accessible($array1[$key])) { $array1[$key] = static::merge($array1[$key], $value); } else { $array1[$key] = $value; } } else { $array1[$key] = $value; } } return $array1; } /** * Flatten a multi-dimensional array into a single level. * * @param array $array * @param int $depth * * @return array * * @example * $array = [1, [2, [3, [4]], 5]]; * * Arr::flatten($array); * // => [1, 2, 3, 4, 5] * * Arr::flatten($array, 1); * // => [1, 2, [3, [4]], 5] */ public static function flatten($array, $depth = 0) { $result = []; foreach ($array as $item) { if (!is_array($item)) { $result[] = $item; } elseif ($depth === 1) { $result = array_merge($result, array_values($item)); } else { $result = array_merge($result, static::flatten($item, $depth - 1)); } } return $result; } /** * Chunks an array evenly into columns. * * @param array $array * @param int $columns * * @return array * * @example * $array = [1, 2, 3, 4, 5]; * * Arr::columns($array, 2); * // => [[1, 2, 3], [4, 5]] * * Arr::columns($array, 4); * // => [[1, 2], [3], [4], [5]] */ public static function columns($array, $columns) { $count = count($array); $columns = min($count, $columns); $rows = (int) ceil($count / $columns); $remainder = $count % $columns; if (!$remainder) { return array_chunk($array, $rows); } $result = []; for ($i = 0; $i < $columns; $i++) { $result[] = array_slice( $array, $i * $rows - max($i - $remainder, 0), $rows - ($i >= $remainder ? 1 : 0), ); } return $result; } /** * Checks if the given key exists. * * @param array|\ArrayAccess $array * @param string $key * * @return bool */ public static function exists($array, $key) { if (!static::accessible($array)) { return false; } if ($array instanceof \ArrayAccess) { return $array->offsetExists($key); } return array_key_exists($key, $array); } /** * Wraps given value in array, if it is not one. * * @param mixed $value * * @return array */ public static function wrap($value) { if (is_null($value)) { return []; } return is_array($value) ? $value : [$value]; } /** * Checks if the given value is array accessible. * * @param mixed $value * * @return bool */ public static function accessible($value) { return is_array($value) || $value instanceof \ArrayAccess; } /** * Removes a portion of the array and replaces it with something else, preserving keys. * * @param array $array * @param int|null $offset * @param int|null $length * @param mixed $replacement * * @return array * * @example * $array = ['a' => 1, 'b' => 2, 'c' => 3]; * * Arr::splice($array, 1, 1); * // => ['a' => 1, 'c' => 3] * * Arr::splice($array, 1, 2, ['d' => 4]); * // => ['a' => 1, 'd' => 4] */ public static function splice(&$array, $offset, $length, $replacement) { $result = $offset !== null && $length ? array_slice($array, $offset, $length, true) : []; $array = array_merge( array_slice($array, 0, $offset, true), static::wrap($replacement), $offset !== null ? array_slice($array, $offset + $length, null, true) : [], ); return $result; } /** * Renames keys in an array. It does not preserve key order. * * @param array $array * @param array $keys * * @return array * * @example * $array = ['a' => 1, 'b' => 2, 'c' => 3]; * * Arr::rename($array, ['b' => 'd']); * // => ['a' => 1, 'c' => 3, 'd' => 2] */ public static function updateKeys(&$array, $keys) { foreach ($keys as $oldKey => $newKey) { if (static::has($array, $oldKey)) { $value = static::get($array, $oldKey); static::del($array, $oldKey); if (is_callable($newKey)) { foreach ($newKey($value) ?: [] as $key => $value) { static::set($array, $key, $value); } } else { static::set($array, $newKey, $value); } } } return $array; } /** * Creates a callback function to match array values. * * @param array $predicate * * @return callable */ protected static function matches(array $predicate) { return function ($array) use ($predicate) { if (!static::accessible($array)) { return false; } foreach ($predicate as $key => $value) { if (!static::exists($array, $key)) { return false; } if ($array[$key] != $value) { return false; } } return true; }; } } utils/src/Str.php000064400000025074151666572120007777 0ustar00<?php namespace YOOtheme; /** * A static class which provides utilities for working with strings. */ abstract class Str { /** * @var string */ public static $encoding = 'UTF-8'; /** * Checks if string matches a given pattern. * * @param string $pattern * @param string $string * * @return bool * * @example * Str::is('foo/*', 'foo/bar/baz'); * // => true */ public static function is($pattern, $string) { static $cache; $string = (string) $string; $pattern = (string) $pattern; if ($pattern === $string) { return true; } if (empty($cache[$pattern])) { $regexp = addcslashes($pattern, '/\\.+^$()=!<>|#'); $regexp = strtr($regexp, ['*' => '.*', '?' => '.?']); $regexp = static::convertBraces($regexp); $cache[$pattern] = "#^{$regexp}$#s"; } return (bool) preg_match($cache[$pattern], $string); } /** * Checks if string contains a given substring. * * @param string $haystack * @param string|array $needles * * @return bool * * @example * Str::contains('taylor', 'ylo'); * // => true */ public static function contains($haystack, $needles) { foreach ((array) $needles as $needle) { if ($needle !== '' && mb_strpos($haystack, $needle, 0, static::$encoding) !== false) { return true; } } return false; } /** * Checks if string starts with a given substring. * * @param string $haystack * @param string|array $needles * * @return bool * * @example * Str::startsWith('jason', 'jas'); * // => true */ public static function startsWith($haystack, $needles) { foreach ((array) $needles as $needle) { if (str_starts_with((string) $haystack, (string) $needle)) { return true; } } return false; } /** * Checks if string ends with a given substring. * * @param string $haystack * @param string|array $needles * * @return bool * * @example * Str::endsWith('jason', 'on'); * // => true */ public static function endsWith($haystack, $needles) { foreach ((array) $needles as $needle) { if (str_ends_with((string) $haystack, (string) $needle)) { return true; } } return false; } /** * Returns the string length. * * @param string $string * * @return int * * @example * Str::length('foo bar baz'); * // => 11 */ public static function length($string) { return mb_strlen(strval($string), static::$encoding); } /** * Convert string to lower case. * * @param string $string * * @return string * * @example * Str::lower('fOo Bar bAz'); * // => foo bar baz */ public static function lower($string) { return mb_strtolower($string, static::$encoding); } /** * Converts the first character of string to lower case. * * @param string $string * * @return string * * @example * Str::lowerFirst('FOO BAR BAZ'); * // => fOO BAR BAZ */ public static function lowerFirst($string) { return static::lower(static::substr($string, 0, 1)) . static::substr($string, 1); } /** * Converts string to upper case. * * @param string $string * * @return string * * @example * Str::upper('fOo Bar bAz'); * // => FOO BAR BAZ */ public static function upper($string) { return mb_strtoupper($string, static::$encoding); } /** * Converts the first character of string to upper case. * * @param string $string * * @return string * * @example * Str::upperFirst('foo bar baz'); * // => Foo bar baz */ public static function upperFirst($string) { return static::upper(static::substr($string, 0, 1)) . static::substr($string, 1); } /** * Converts string to title case. * * @param string|string[] $string * * @return string * * @example * Str::titleCase('jefferson costella'); * // => Jefferson Costella */ public static function titleCase($string) { return mb_convert_case(join(' ', (array) $string), MB_CASE_TITLE, static::$encoding); } /** * Converts string to camel case (https://en.wikipedia.org/wiki/Camel_case). * * @param string|string[] $string * @param bool $upper * * @return string * * @example * Str::camelCase('Yootheme Framework'); * // => yoothemeFramework */ public static function camelCase($string, $upper = false) { $string = join(' ', (array) $string); $string = str_replace(['-', '_'], ' ', $string); $string = str_replace(' ', '', ucwords($string)); return $upper ? $string : lcfirst($string); } /** * Converts string to snake case (https://en.wikipedia.org/wiki/Snake_case). * * @param string|string[] $string * @param string $delimiter * * @return string * * @example * Str::snakeCase('Yootheme Framework'); * // => yootheme_framework */ public static function snakeCase($string, $delimiter = '_') { $string = join(' ', (array) $string); if (!ctype_lower($string)) { $string = preg_replace('/[^a-zA-Z0-9]/u', ' ', $string); $string = preg_replace('/\s+/u', '', ucwords($string)); $string = static::lower( preg_replace( '/([a-z])(?=[A-Z0-9])|([0-9]+)(?=[a-zA-Z])|([A-Z]+)(?=[A-Z])/u', "$0{$delimiter}", $string, ), ); } return $string; } /** * Returns part of a string. * * @param string $string * @param int $start * @param int|null $length * * @return string * * @example * Str::substr('Yootheme Framework', 3, 5); * // => theme */ public static function substr($string, $start, $length = null) { return mb_substr($string, $start, $length, static::$encoding); } /** * Limit the number of characters in a string. * * @param string $string * @param int $length * @param string $omission * @param bool $exact * * @return string * * @example * Str::limit('hi-diddly-ho there, neighborino', 24); * // => hi-diddly-ho there, n... */ public static function limit($string, $length = 100, $omission = '...', $exact = true) { $strLength = mb_strwidth($string, static::$encoding); $omitLength = $length - mb_strwidth($omission, static::$encoding); if ($omitLength <= 0) { return ''; } if ($strLength <= $length) { return $string; } $trimmed = rtrim( mb_strimwidth($string, 0, $omitLength, '', static::$encoding), " \n\r\t\v\x00,.!?:", // Remove trailing whitespace and punctuation ); if ($exact || mb_substr($string, mb_strwidth($trimmed), 1, static::$encoding) === ' ') { return $trimmed . $omission; } return preg_replace('/(.*)\s.*/s', '$1', ltrim($trimmed)) . $omission; } /** * Limit the number of words in a string. * * @param string $string * @param int $words * @param string $omission * * @return string * * @example * Str::words('Taylor Otwell', 1); * // => Taylor... */ public static function words($string, $words = 100, $omission = '...') { preg_match('/^\s*+(?:\S++\s*+){1,' . $words . '}/u', $string, $matches); if (!isset($matches[0]) || strlen($string) === strlen($matches[0])) { return $string; } return rtrim($matches[0]) . $omission; } /** * Generates a "random" alphanumeric string. * * @param int $length * * @throws \Exception * * @return string * * @example * Str::random(); * // => X2wvU09F1j4ZCzKD */ public static function random($length = 16) { $string = ''; while (($len = strlen($string)) < $length) { $bytes = random_bytes($size = $length - $len); $string .= substr(str_replace(['/', '+', '='], '', base64_encode($bytes)), 0, $size); } return $string; } /** * Expands glob braces to array. * * @param string $pattern * * @return array * * @example * Str::expandBraces('foo/{2,3}/bar'); * // => ['foo/2/bar', 'foo/3/bar'] */ public static function expandBraces($pattern) { $braces = []; $expanded = []; $callback = function ($matches) use (&$braces) { $index = '{' . count($braces) . '}'; $braces[$index] = $matches[0]; return $index; }; if ( preg_match($regex = '/{((?:[^{}]+|(?R))*)}/', $pattern, $matches, PREG_OFFSET_CAPTURE) ) { [$matches, [$replaces]] = $matches; foreach ( explode(',', preg_replace_callback($regex, $callback, $replaces)) as $replace ) { $expand = substr_replace( $pattern, strtr($replace, $braces), $matches[1], strlen($matches[0]), ); $expanded = array_merge($expanded, static::expandBraces($expand)); } } return $expanded ?: [$pattern]; } /** * Converts glob braces to a regex. * * @param string $pattern * * @return string * * @example * Str::convertBraces('foo/{2,3}/bar'); * // => foo/(2|3)/bar */ public static function convertBraces($pattern) { if (preg_match_all('/{((?:[^{}]+|(?R))*)}/', $pattern, $matches, PREG_OFFSET_CAPTURE)) { [$matches, $replaces] = $matches; foreach ($matches as $i => $m) { $replace = str_replace(',', '|', static::convertBraces($replaces[$i][0])); $pattern = substr_replace($pattern, "({$replace})", $m[1], strlen($m[0])); } } return $pattern; } } builder-joomla-search/bootstrap.php000064400000001026151666572120013454 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search; use Joomla\CMS\Component\ComponentHelper; if (!ComponentHelper::isEnabled('com_search')) { return []; } return [ 'events' => [ 'source.init' => [Listener\LoadSourceTypes::class => 'handle'], 'builder.template' => [Listener\MatchTemplate::class => '@handle'], 'builder.template.load' => [Listener\LoadTemplateUrl::class => '@handle'], ], 'actions' => [ 'onContentPrepare' => [Listener\LoadSearchArticle::class => 'handle'], ], ]; builder-joomla-search/src/Type/SearchItemsQueryType.php000064400000005752151666572120017260 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search\Type; use function YOOtheme\trans; class SearchItemsQueryType { protected static $view = ['com_search.search']; /** * @return array */ public static function config() { return [ 'fields' => [ 'searchItems' => [ 'type' => [ 'listOf' => 'SearchItem', ], 'args' => [ 'offset' => [ 'type' => 'Int', ], 'limit' => [ 'type' => 'Int', ], ], 'metadata' => [ 'label' => trans('Items'), 'view' => static::$view, 'group' => trans('Page'), 'fields' => [ '_offset' => [ 'description' => trans( 'Set the starting point and limit the number of items.', ), 'type' => 'grid', 'width' => '1-2', 'fields' => [ 'offset' => [ 'label' => trans('Start'), 'type' => 'number', 'default' => 0, 'modifier' => 1, 'attrs' => [ 'min' => 1, 'required' => true, ], ], 'limit' => [ 'label' => trans('Quantity'), 'type' => 'limit', 'attrs' => [ 'placeholder' => trans('No limit'), 'min' => 0, ], ], ], ], ], ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root, array $args) { $args += [ 'offset' => 0, 'limit' => null, ]; if (in_array($root['template'] ?? '', static::$view)) { $items = $root['items'] ?? []; if ($args['offset'] || $args['limit']) { $items = array_slice($items, (int) $args['offset'], (int) $args['limit'] ?: null); } return $items; } } } builder-joomla-search/src/Type/SearchItemType.php000064400000004426151666572120016044 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search\Type; use Joomla\CMS\Categories\Categories; use function YOOtheme\trans; class SearchItemType { /** * @return array */ public static function config() { return [ 'fields' => [ 'title' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Title'), 'filters' => ['limit', 'preserve'], ], ], 'text' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Content'), 'filters' => ['limit', 'preserve'], ], ], 'created' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Created Date'), 'filters' => ['date'], ], 'extensions' => [ 'call' => __CLASS__ . '::created', ], ], 'category' => [ 'type' => 'Category', 'metadata' => [ 'label' => trans('Category'), ], 'extensions' => [ 'call' => __CLASS__ . '::category', ], ], 'href' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Link'), ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Search Item'), ], ]; } public static function category($item) { if (empty($item->catid)) { return; } return Categories::getInstance('content', ['countItems' => true])->get($item->catid); } public static function created($item) { if (empty($item->created)) { return; } if (!empty($item->created_raw)) { return $item->created_raw; } return strtotime($item->created) ?: null; } } builder-joomla-search/src/Type/SearchType.php000064400000001735151666572120015225 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search\Type; use function YOOtheme\trans; class SearchType { /** * @return array */ public static function config() { return [ 'fields' => [ 'searchword' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Search Word'), ], ], 'total' => [ 'type' => 'Int', 'metadata' => [ 'label' => trans('Item Count'), ], ], 'error' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Error'), ], ], ], 'metadata' => [ 'type' => true, 'label' => trans('Search'), ], ]; } } builder-joomla-search/src/Type/SearchQueryType.php000064400000001606151666572120016250 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search\Type; use function YOOtheme\trans; class SearchQueryType { protected static $view = ['com_search.search']; /** * @return array */ public static function config() { return [ 'fields' => [ 'search' => [ 'type' => 'Search', 'metadata' => [ 'label' => trans('Search'), 'view' => static::$view, 'group' => trans('Page'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolve', ], ], ], ]; } public static function resolve($root) { if (in_array($root['template'] ?? '', static::$view)) { return $root['search']; } } } builder-joomla-search/src/Listener/LoadSearchArticle.php000064400000000552151666572120017327 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search\Listener; class LoadSearchArticle { public static function handle($event): void { $context = $event->getArgument('context'); $item = $event->getArgument('subject'); if ($context === 'com_search.search.article') { $item->created_raw = $item->created; } } } builder-joomla-search/src/Listener/LoadTemplateUrl.php000064400000001047151666572120017054 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search\Listener; use Joomla\CMS\Router\SiteRouter; class LoadTemplateUrl { public SiteRouter $router; public function __construct(SiteRouter $router) { $this->router = $router; } public function handle(array $template): array { if (($template['type'] ?? '') === 'com_search.search') { $template['url'] = (string) $this->router->build( 'index.php?option=com_search&view=search', ); } return $template; } } builder-joomla-search/src/Listener/MatchTemplate.php000064400000002262151666572120016546 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search\Listener; use Joomla\CMS\Document\Document; class MatchTemplate { public string $language; public function __construct(?Document $document) { $this->language = $document->language ?? 'en-gb'; } public function handle($view, $tpl): ?array { if ($tpl) { return null; } $context = $view->get('context'); if ($context === 'com_search.search') { $pagination = $view->get('pagination'); return [ 'type' => $context, 'query' => [ 'pages' => $pagination->pagesCurrent === 1 ? 'first' : 'except_first', 'lang' => $this->language, ], 'params' => [ 'search' => [ 'searchword' => $view->searchword, 'total' => $view->total, 'error' => $view->error ?: null, ], 'items' => $view->get('results') ?? [], 'pagination' => $pagination, ], ]; } return null; } } builder-joomla-search/src/Listener/LoadSourceTypes.php000064400000001121151666572120017074 0ustar00<?php namespace YOOtheme\Builder\Joomla\Search\Listener; use YOOtheme\Builder\Joomla\Search\Type; class LoadSourceTypes { public static function handle($source): void { $query = [Type\SearchQueryType::config(), Type\SearchItemsQueryType::config()]; $types = [ ['Search', Type\SearchType::config()], ['SearchItem', Type\SearchItemType::config()], ]; foreach ($query as $args) { $source->queryType($args); } foreach ($types as $args) { $source->objectType(...$args); } } } theme-joomla-finder/src/FinderConfig.php000064400000002566151666572120014253 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\User\User; use YOOtheme\ConfigObject; use YOOtheme\Joomla\Media; class FinderConfig extends ConfigObject { /** * Constructor. */ public function __construct(User $user) { $params = ComponentHelper::getParams('com_media'); // allow all allowable file extensions and MIME types in input field $accept = []; if ($params->get('restrict_uploads', true)) { foreach (explode(',', $params->get('upload_extensions', '')) as $extension) { $accept[] = '.' . trim($extension); } if ($params->get('check_mime', true)) { foreach (explode(',', $params->get('upload_mime', '')) as $mime) { $accept[] = trim($mime); } } } parent::__construct([ 'accept' => implode(',', $accept), 'roots' => Media::getRootPaths(), 'legacy' => version_compare(JVERSION, '4.0', '<'), 'canCreate' => $user->authorise('core.manage', 'com_media') || $user->authorise('core.create', 'com_media'), 'canDelete' => $user->authorise('core.manage', 'com_media') || $user->authorise('core.delete', 'com_media'), ]); } } theme-joomla-finder/src/FinderController.php000064400000005376151666572120015173 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Filesystem\File as JFile; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\User\User; use Joomla\Input\Input; use YOOtheme\Config; use YOOtheme\File; use YOOtheme\Http\Request; use YOOtheme\Http\Response; use YOOtheme\Joomla\Media; use YOOtheme\Path; class FinderController { public static function index(Request $request, Response $response, Input $input) { // get media root and current path $root = Media::getRoot($input->getString('root', '')); $path = Path::join($root, $input->getString('folder', '')); if (!str_starts_with($path, $root)) { $path = $root; } $files = []; foreach (File::listDir($path, true) ?: [] as $file) { $filename = basename($file); // ignore hidden files if (str_starts_with($filename, '.')) { continue; } $files[] = [ 'name' => $filename, 'path' => Path::relative($root, $file), 'url' => Path::relative(JPATH_ROOT, $file), 'type' => File::isDir($file) ? 'folder' : 'file', 'size' => HTMLHelper::_('number.bytes', File::getSize($file)), ]; } return $response->withJson($files); } /** * Legacy Joomla 3 */ public static function rename(Request $request, Response $response, Config $config, User $user) { if ( !$user->authorise('core.create', 'com_media') || !$user->authorise('core.delete', 'com_media') ) { $request->abort(403, 'Insufficient User Rights.'); } $allowed = ComponentHelper::getParams('com_media')->get('upload_extensions') . ',svg'; $newName = $request->getParam('newName'); $extension = File::getExtension($newName); $isValidFilename = !empty($newName) && (empty($extension) || in_array($extension, explode(',', $allowed))) && (defined('PHP_WINDOWS_VERSION_MAJOR') ? !preg_match('#[\\/:"*?<>|]#', $newName) : !str_contains($newName, '/')); $request->abortIf(!$isValidFilename, 400, 'Invalid file name.'); $root = $config('app.uploadDir'); $oldFile = Path::join($root, $request->getParam('oldFile')); $newFile = Path::join(dirname($oldFile), $newName); $request->abortIf( !str_starts_with($oldFile, $root) || dirname($oldFile) !== dirname($newFile), 400, 'Invalid path.', ); $request->abortIf(!JFile::move($oldFile, $newFile), 500, 'Error writing file.'); return $response->withJson('Successfully renamed.'); } } theme-joomla-finder/src/Listener/LoadFinderData.php000064400000000740151666572120016274 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; use YOOtheme\Theme\Joomla\FinderConfig; class LoadFinderData { public Config $config; public FinderConfig $finder; public function __construct(Config $config, FinderConfig $finder) { $this->config = $config; $this->finder = $finder; } public function handle(): void { $this->config->add('customizer', ['media' => $this->finder->getArrayCopy()]); } } theme-joomla-finder/src/Listener/AddJsonMimeType.php000064400000002050151666572120016463 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Application\CMSApplication; class AddJsonMimeType { public CMSApplication $joomla; public function __construct(CMSApplication $joomla) { $this->joomla = $joomla; } public function handle(): void { if ( version_compare(JVERSION, '4.0', '>') || $this->joomla->input->getMethod() !== 'POST' || $this->joomla->input->getCmd('option') !== 'com_media' || !str_contains( $this->joomla->input->server->getString('HTTP_ACCEPT', ''), 'application/json', ) || headers_sent() ) { return; } $this->joomla->clearHeaders(); $this->joomla->setHeader('Status', '200'); $this->joomla->mimeType = 'application/json'; $this->joomla->setBody(json_encode($this->joomla->getMessageQueue(true))); $this->joomla->set('gzip', false); $this->joomla->getSession()->set('application.queue', []); } } theme-joomla-finder/bootstrap.php000064400000000645151666572120013140 0ustar00<?php namespace YOOtheme\Theme\Joomla; return [ 'routes' => [ ['get', '/finder', [FinderController::class, 'index']], ['post', '/finder/rename', [FinderController::class, 'rename']], ], 'events' => [ 'customizer.init' => [Listener\LoadFinderData::class => '@handle'], ], 'actions' => [ 'onBeforeRespond' => [Listener\AddJsonMimeType::class => '@handle'], ], ]; theme-joomla/config/theme.json000064400000003103151666572120012377 0ustar00{ "defaults": { "menu": { "positions": { "navbar": { "menu": "mainmenu" }, "dialog-mobile": { "menu": "mainmenu" } } }, "post": { "width": "default", "padding": "", "content_width": "", "image_align": "top", "image_margin": "medium", "image_width": "", "image_height": "", "header_align": 0, "title_margin": "default", "meta_margin": "default", "meta_style": "sentence", "content_margin": "medium", "content_dropcap": 0 }, "blog": { "width": "default", "padding": "", "grid_column_gap": "", "grid_row_gap": "", "grid_breakpoint": "m", "image_align": "top", "image_margin": "medium", "image_width": "", "image_height": "", "header_align": 0, "title_style": "", "title_margin": "default", "meta_margin": "default", "content_excerpt": 0, "content_length": "", "content_margin": "medium", "content_align": 0, "button_style": "default", "button_margin": "medium", "navigation": "pagination" }, "media_folder": "yootheme", "search_module": "mod_search", "bootstrap": true, "fontawesome": true } } theme-joomla/config/customizer.json000064400000146662151666572120013523 0ustar00{ "id": "${theme.id}", "title": "${theme.title}", "cookie": "${theme.cookie}", "default": "${theme.default}", "template": "${theme.template}", "admin": "${app.isAdmin}", "root": "${req.baseUrl}", "site": "${req.rootUrl}/index.php", "token": "${session.token}", "sections": { "layout": { "help": [ { "title": "Using the Sidebar", "src": "https://www.youtube-nocookie.com/watch?v=nZm-qEyGaP4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:55", "documentation": "support/yootheme-pro/joomla/customizer#save,-cancel-and-close", "support": "support/search?tags=125&q=customizer%20save" }, { "title": "Using the Contextual Help", "src": "https://www.youtube-nocookie.com/watch?v=BGgRZvlJVXI&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:37", "documentation": "support/yootheme-pro/joomla/customizer#contextual-help", "support": "support/search?tags=125&q=contextual%20help" }, { "title": "Using the Device Preview Buttons", "src": "https://www.youtube-nocookie.com/watch?v=hGErRJcl9ts&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:42", "documentation": "support/yootheme-pro/joomla/customizer#device-preview-buttons", "support": "support/search?tags=125&q=customizer%20device%20preview" }, { "title": "Hide and Adjust the Sidebar", "src": "https://www.youtube-nocookie.com/watch?v=xzc6tuF500w&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:34", "documentation": "support/yootheme-pro/joomla/customizer#hide-and-adjust-sidebar", "support": "support/search?tags=125&q=customizer%20hide%20sidebar" } ] }, "builder-pages": { "help": { "Pages": [ { "title": "Managing Pages", "src": "https://www.youtube-nocookie.com/watch?v=o20CQhzLP1k&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:57", "documentation": "support/yootheme-pro/joomla/pages", "support": "support/search?tags=125&q=pages%20builder" }, { "title": "Adding a New Page", "src": "https://www.youtube-nocookie.com/watch?v=0VbdT8usYvY&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:25", "documentation": "support/yootheme-pro/joomla/pages#add-a-new-page", "support": "support/search?tags=125&q=page%20builder" }, { "title": "Creating Individual Post Layouts", "src": "https://www.youtube-nocookie.com/watch?v=Fr7dXusK9xI&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "2:22", "documentation": "support/yootheme-pro/joomla/pages#individual-post-layout", "support": "support/search?tags=125&q=post%20builder" } ], "Customizer": [ { "title": "Using the Sidebar", "src": "https://www.youtube-nocookie.com/watch?v=nZm-qEyGaP4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:55", "documentation": "support/yootheme-pro/joomla/customizer#save,-cancel-and-close", "support": "support/search?tags=125&q=customizer%20save" }, { "title": "Using the Contextual Help", "src": "https://www.youtube-nocookie.com/watch?v=BGgRZvlJVXI&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:37", "documentation": "support/yootheme-pro/joomla/customizer#contextual-help", "support": "support/search?tags=125&q=contextual%20help" }, { "title": "Using the Device Preview Buttons", "src": "https://www.youtube-nocookie.com/watch?v=hGErRJcl9ts&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:42", "documentation": "support/yootheme-pro/joomla/customizer#device-preview-buttons", "support": "support/search?tags=125&q=customizer%20device%20preview" }, { "title": "Hide and Adjust the Sidebar", "src": "https://www.youtube-nocookie.com/watch?v=xzc6tuF500w&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:34", "documentation": "support/yootheme-pro/joomla/customizer#hide-and-adjust-sidebar", "support": "support/search?tags=125&q=customizer%20hide%20sidebar" } ] } }, "builder-templates": { "help": { "Templates": [ { "title": "Managing Templates", "src": "https://www.youtube-nocookie.com/watch?v=tNpo1YYWWas&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:46", "documentation": "support/yootheme-pro/joomla/templates", "support": "support/search?tags=125&q=templates" }, { "title": "Assigning Templates to Pages", "src": "https://www.youtube-nocookie.com/watch?v=d2WX0hGXsDE&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "4:38", "documentation": "support/yootheme-pro/joomla/templates#page-assignment", "support": "support/search?tags=125&q=template%20page%20assigment" }, { "title": "Setting the Template Loading Priority", "src": "https://www.youtube-nocookie.com/watch?v=03aUKEABQNQ&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:41", "documentation": "support/yootheme-pro/joomla/templates#loading-priority", "support": "support/search?tags=125&q=template%20priority" }, { "title": "Setting the Template Status", "src": "https://www.youtube-nocookie.com/watch?v=VxuDCh-NE_U&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:02", "documentation": "support/yootheme-pro/joomla/templates#status", "support": "support/search?tags=125&q=template%20status" } ] } }, "settings": { "help": [ { "title": "Using the Sidebar", "src": "https://www.youtube-nocookie.com/watch?v=nZm-qEyGaP4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:55", "documentation": "support/yootheme-pro/joomla/customizer#save,-cancel-and-close", "support": "support/search?tags=125&q=customizer%20save" }, { "title": "Using the Contextual Help", "src": "https://www.youtube-nocookie.com/watch?v=BGgRZvlJVXI&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:37", "documentation": "support/yootheme-pro/joomla/customizer#contextual-help", "support": "support/search?tags=125&q=contextual%20help" }, { "title": "Using the Device Preview Buttons", "src": "https://www.youtube-nocookie.com/watch?v=hGErRJcl9ts&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:42", "documentation": "support/yootheme-pro/joomla/customizer#device-preview-buttons", "support": "support/search?tags=125&q=customizer%20device%20preview" }, { "title": "Hide and Adjust the Sidebar", "src": "https://www.youtube-nocookie.com/watch?v=xzc6tuF500w&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:34", "documentation": "support/yootheme-pro/joomla/customizer#hide-and-adjust-sidebar", "support": "support/search?tags=125&q=customizer%20hide%20sidebar" } ] } }, "panels": { "site": { "help": { "Site": [ { "title": "Adding the Logo", "src": "https://www.youtube-nocookie.com/watch?v=UItCS_pSAXA&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "2:25", "documentation": "support/yootheme-pro/joomla/site-and-logo#logo", "support": "support/search?tags=125&q=logo" }, { "title": "Setting the Page Layout", "src": "https://www.youtube-nocookie.com/watch?v=ScYJ-bVJ94s&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:35", "documentation": "support/yootheme-pro/joomla/site-and-logo#layout", "support": "support/search?tags=125&q=site%20layout" }, { "title": "Using the Toolbar", "src": "https://www.youtube-nocookie.com/watch?v=uigKZP3xu-4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:58", "documentation": "support/yootheme-pro/joomla/site-and-logo#toolbar", "support": "support/search?tags=125&q=toolbar" }, { "title": "Displaying the Breadcrumbs", "src": "https://www.youtube-nocookie.com/watch?v=Eiw_1rf3hHE&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:04", "documentation": "support/yootheme-pro/joomla/site-and-logo#breadcrumbs", "support": "support/search?tags=125&q=breadcrumbs" }, { "title": "Setting the Main Section Height", "src": "https://www.youtube-nocookie.com/watch?v=CDeYl5TIfZQ&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:46", "documentation": "support/yootheme-pro/joomla/site-and-logo#main-section", "support": "support/search?tags=125&q=main%20section" } ], "Image Field": [ { "title": "Using Images", "src": "https://www.youtube-nocookie.com/watch?v=NHpFpn4UiUM&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "4:37", "documentation": "support/yootheme-pro/joomla/files-and-images#images", "support": "support/search?tags=125&q=image%20field" }, { "title": "Using the Media Manager", "src": "https://www.youtube-nocookie.com/watch?v=2Sgp4BBMTc8&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:32", "documentation": "support/yootheme-pro/joomla/files-and-images#media-manager", "support": "support/search?tags=125&q=media%20manager" }, { "title": "Using the Unsplash Library", "src": "https://www.youtube-nocookie.com/watch?v=6piYezAI4dU&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:50", "documentation": "support/yootheme-pro/joomla/files-and-images#unsplash-library", "support": "support/search?tags=125&q=unsplash" } ] } }, "header": { "help": [ { "title": "Setting the Header Layout", "src": "https://www.youtube-nocookie.com/watch?v=5KazxjAM_TA&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "3:51", "documentation": "support/yootheme-pro/joomla/header-and-navbar#header-layout", "support": "support/search?tags=125&q=header%20layout" }, { "title": "Setting the Navbar", "src": "https://www.youtube-nocookie.com/watch?v=oQ1ja29Tl1Y&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:09", "documentation": "support/yootheme-pro/joomla/header-and-navbar#navbar", "support": "support/search?tags=125&q=navbar" }, { "title": "Using the Dropdown Menu", "src": "https://www.youtube-nocookie.com/watch?v=98MdMe3CVFM&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:12", "documentation": "support/yootheme-pro/joomla/header-and-navbar#dropdown", "support": "support/search?tags=125&q=navbar%20dropdown" }, { "title": "Setting the Dialog Layout", "src": "https://www.youtube-nocookie.com/watch?v=UFx8UeiZv04&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "5:07", "documentation": "support/yootheme-pro/joomla/header-and-navbar#dialog-layouts", "support": "support/search?tags=125&q=dialog%20layout" }, { "title": "Adding the Search", "src": "https://www.youtube-nocookie.com/watch?v=rxmuuMeWWoo&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:12", "documentation": "support/yootheme-pro/joomla/header-and-navbar#search", "support": "support/search?tags=125&q=header%20search" }, { "title": "Adding the Social Icons", "src": "https://www.youtube-nocookie.com/watch?v=dlZA9cGlsOg&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:55", "documentation": "support/yootheme-pro/joomla/header-and-navbar#social-icons", "support": "support/search?tags=125&q=header%20social" } ] }, "mobile": { "help": [ { "title": "Displaying the Mobile Header", "src": "https://www.youtube-nocookie.com/watch?v=CDmPjGek9gU&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:59", "documentation": "support/yootheme-pro/joomla/mobile-header#visibility", "support": "support/search?tags=125&q=mobile%20header%20visibility" }, { "title": "Setting the Mobile Header Layout", "src": "https://www.youtube-nocookie.com/watch?v=M7lmXtclWaI&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:43", "documentation": "support/yootheme-pro/joomla/mobile-header#header-layout", "support": "support/search?tags=125&q=mobile%20header%20layout" }, { "title": "Setting the Mobile Navbar", "src": "https://www.youtube-nocookie.com/watch?v=LfmHQnco4_s&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:58", "documentation": "support/yootheme-pro/joomla/mobile-header#navbar", "support": "support/search?tags=125&q=mobile%20header%20navbar" }, { "title": "Setting the Mobile Dialog Layout", "src": "https://www.youtube-nocookie.com/watch?v=dkbYQgttefg&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "4:23", "documentation": "support/yootheme-pro/joomla/mobile-header#dialog-layout", "support": "support/search?tags=125&q=mobile%20dialog%20layouts" }, { "title": "Setting the Mobile Search", "src": "https://www.youtube-nocookie.com/watch?v=KDbITztgtTE&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:59", "documentation": "support/yootheme-pro/joomla/mobile-header#search", "support": "support/search?tags=125&q=mobile%20search" }, { "title": "Adding the Social Icons", "src": "https://www.youtube-nocookie.com/watch?v=uVSjfP4kNqM&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:29", "documentation": "support/yootheme-pro/joomla/mobile-header#social-icons", "support": "support/search?tags=125&q=mobile%20social%20icons" } ] }, "top": { "help": { "Top and Bottom": [ { "title": "Setting the Top and Bottom Positions", "src": "https://www.youtube-nocookie.com/watch?v=aTsFHYaS9Z8&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:42", "documentation": "support/yootheme-pro/joomla/top-bottom-and-sidebar#top-and-bottom", "support": "support/search?tags=125&q=top%20bottom%20position%20settings" } ], "Image Field": [ { "title": "Using Images", "src": "https://www.youtube-nocookie.com/watch?v=NHpFpn4UiUM&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "4:37", "documentation": "support/yootheme-pro/joomla/files-and-images#images", "support": "support/search?tags=125&q=image%20field" }, { "title": "Using the Media Manager", "src": "https://www.youtube-nocookie.com/watch?v=2Sgp4BBMTc8&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:32", "documentation": "support/yootheme-pro/joomla/files-and-images#media-manager", "support": "support/search?tags=125&q=media%20manager" }, { "title": "Using the Unsplash Library", "src": "https://www.youtube-nocookie.com/watch?v=6piYezAI4dU&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:50", "documentation": "support/yootheme-pro/joomla/files-and-images#unsplash-library", "support": "support/search?tags=125&q=unsplash" } ], "Builder": [ { "title": "The Position Element", "src": "https://www.youtube-nocookie.com/watch?v=DsFY9zkG7Vk&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:55", "documentation": "support/yootheme-pro/joomla/system-elements#position-element", "support": "support/search?tags=125&q=position%20element" }, { "title": "Collapsing Layouts", "src": "https://www.youtube-nocookie.com/watch?v=UT6PODf7p3o&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:44", "documentation": "support/yootheme-pro/joomla/collapsing-layouts", "support": "support/search?tags=125&q=collapsing" } ] } }, "sidebar": { "help": { "Sidebar": [ { "title": "Setting the Sidebar Position", "src": "https://www.youtube-nocookie.com/watch?v=_U5BgaiM4RI&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:31", "documentation": "support/yootheme-pro/joomla/top-bottom-and-sidebar#sidebar", "support": "support/search?tags=125&q=sidebar%20position%20settings" } ], "Builder": [ { "title": "The Position Element", "src": "https://www.youtube-nocookie.com/watch?v=DsFY9zkG7Vk&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:55", "documentation": "support/yootheme-pro/joomla/system-elements#position-element", "support": "support/search?tags=125&q=position%20element" }, { "title": "Collapsing Layouts", "src": "https://www.youtube-nocookie.com/watch?v=UT6PODf7p3o&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:44", "documentation": "support/yootheme-pro/joomla/collapsing-layouts", "support": "support/search?tags=125&q=collapsing" } ] } }, "bottom": { "help": { "Top and Bottom": [ { "title": "Setting the Top and Bottom Positions", "src": "https://www.youtube-nocookie.com/watch?v=aTsFHYaS9Z8&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:42", "documentation": "support/yootheme-pro/joomla/top-bottom-and-sidebar#top-and-bottom", "support": "support/search?tags=125&q=top%20bottom%20position%20settings" } ], "Image Field": [ { "title": "Using Images", "src": "https://www.youtube-nocookie.com/watch?v=NHpFpn4UiUM&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "4:37", "documentation": "support/yootheme-pro/joomla/files-and-images#images", "support": "support/search?tags=125&q=image%20field" }, { "title": "Using the Media Manager", "src": "https://www.youtube-nocookie.com/watch?v=2Sgp4BBMTc8&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:32", "documentation": "support/yootheme-pro/joomla/files-and-images#media-manager", "support": "support/search?tags=125&q=media%20manager" }, { "title": "Using the Unsplash Library", "src": "https://www.youtube-nocookie.com/watch?v=6piYezAI4dU&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:50", "documentation": "support/yootheme-pro/joomla/files-and-images#unsplash-library", "support": "support/search?tags=125&q=unsplash" } ], "Builder": [ { "title": "The Position Element", "src": "https://www.youtube-nocookie.com/watch?v=DsFY9zkG7Vk&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:55", "documentation": "support/yootheme-pro/joomla/system-elements#position-element", "support": "support/search?tags=125&q=position%20element" }, { "title": "Collapsing Layouts", "src": "https://www.youtube-nocookie.com/watch?v=UT6PODf7p3o&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:44", "documentation": "support/yootheme-pro/joomla/collapsing-layouts", "support": "support/search?tags=125&q=collapsing" } ] } }, "footer-builder": { "help": { "Footer Builder": [ { "title": "Using the Footer Builder", "src": "https://www.youtube-nocookie.com/watch?v=vcfQUk7uDlQ&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:59", "documentation": "support/yootheme-pro/joomla/footer-builder", "support": "support/search?tags=125&q=footer%20builder" } ], "Builder Module": [ { "title": "Using the Builder Module", "src": "https://www.youtube-nocookie.com/watch?v=msRBkqxnZ18&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:58", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#builder-module", "support": "support/search?tags=125&q=builder%20module" }, { "title": "Creating Advanced Module Layouts", "src": "https://www.youtube-nocookie.com/watch?v=jr09mnXDbIA&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "4:16", "documentation": "support/yootheme-pro/joomla/widgets-and-modules#advanced-layouts", "support": "support/search?tags=125&q=builder%20module" } ] } }, "api-key": { "help": [ { "title": "Updating YOOtheme Pro", "src": "https://www.youtube-nocookie.com/watch?v=ErgFc1Zq9j4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:20", "documentation": "support/yootheme-pro/joomla/updating", "support": "support/search?tags=125&q=update%20yootheme%20pro" }, { "title": "Setting the Minimum Stability", "src": "https://www.youtube-nocookie.com/watch?v=MOc5vLImCLw&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:47", "documentation": "support/yootheme-pro/joomla/updating#minimum-stability", "support": "support/search?tags=125&q=minimum%20stability" } ] }, "advanced": { "fields": { "child_theme": { "label": "Child Theme", "description": "Select a child theme. Note that different template files will be loaded, and theme settings will be updated respectively. To create a child theme, add a new folder <code>yootheme_NAME</code> in the templates directory, for example <code>yootheme_mytheme</code>.", "type": "select", "options": "${theme.child_themes}" }, "media_folder": { "label": "Media Folder", "description": "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder." }, "page_category": { "label": "Page Category", "description": "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.", "type": "select", "options": [ { "text": "None", "value": "" }, { "evaluate": "yootheme.builder.categories" } ] }, "search_module": { "label": "Search Component", "description": "Select whether the default Search or Smart Search is used by the search module and builder element.", "type": "select", "options": { "Search": "mod_search", "Smart Search": "mod_finder" } }, "com_finder_filter": { "label": "Search Filter", "description": "Select the smart search filter.", "type": "select", "options": [ { "text": "None", "value": "" }, { "evaluate": "yootheme.builder['com_finder.filters']" } ] }, "bootstrap": { "label": "System Assets", "text": "Load Bootstrap", "type": "checkbox" }, "fontawesome": { "text": "Load Font Awesome", "type": "checkbox" }, "jquery": { "description": "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.", "text": "Load jQuery", "type": "checkbox" } } }, "about": { "help": [ { "title": "Opening the Changelog", "src": "https://www.youtube-nocookie.com/watch?v=qK4D2RsfBY4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:05", "documentation": "support/yootheme-pro/joomla/updating#changelog", "support": "support/search?tags=125&q=changelog" } ] }, "system-post": { "title": "Post", "width": 400, "fields": { "post.width": { "label": "Width", "description": "Set the post width. The image and content can't expand beyond this width.", "type": "select", "options": { "X-Small": "xsmall", "Small": "small", "Default": "default", "Large": "large", "X-Large": "xlarge", "Expand": "expand", "None": "" } }, "post.padding": { "label": "Padding", "description": "Set the vertical padding.", "type": "select", "options": { "Default": "", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge" } }, "post.padding_remove": { "type": "checkbox", "text": "Remove top padding" }, "post.content_width": { "label": "Content Width", "description": "Set an optional content width which doesn't affect the image.", "type": "select", "options": { "Auto": "", "X-Small": "xsmall", "Small": "small" }, "enable": "post.width != 'xsmall'" }, "post.image_align": { "label": "Image Alignment", "description": "Align the image to the top or place it between the title and the content.", "type": "select", "options": { "Top": "top", "Between": "between" } }, "post.image_margin": { "label": "Image Margin", "description": "Set the top margin if the image is aligned between the title and the content.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "post.image_align == 'between'" }, "post.image_dimension": { "type": "grid", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "fields": { "post.image_width": { "label": "Image Width", "width": "1-2", "attrs": { "placeholder": "auto", "lazy": true } }, "post.image_height": { "label": "Image Height", "width": "1-2", "attrs": { "placeholder": "auto", "lazy": true } } } }, "post.header_align": { "label": "Alignment", "description": "Align the title and meta text.", "type": "checkbox", "text": "Center the title and meta text" }, "post.title_margin": { "label": "Title Margin", "description": "Set the top margin.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" } }, "post.meta_margin": { "label": "Meta Margin", "description": "Set the top margin.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" } }, "post.meta_style": { "label": "Meta Style", "description": "Display the meta text in a sentence or a horizontal list.", "type": "select", "options": { "List": "list", "Sentence": "sentence" } }, "post.content_margin": { "label": "Content Margin", "description": "Set the top margin.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" } }, "post.content_dropcap": { "label": "Drop Cap", "description": "Set a large initial letter that drops below the first line of the first paragraph.", "type": "checkbox", "text": "Show drop cap" } }, "help": { "Post": [ { "title": "Setting the Post Layout", "src": "https://www.youtube-nocookie.com/watch?v=pb9MCdJOz7U&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:48", "documentation": "support/yootheme-pro/joomla/blog-and-post#post-layout", "support": "support/search?tags=125&q=post" }, { "title": "Setting the Post Image", "src": "https://www.youtube-nocookie.com/watch?v=6EZtYya-gEY&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:54", "documentation": "support/yootheme-pro/joomla/blog-and-post#post-image", "support": "support/search?tags=125&q=post" }, { "title": "Setting the Post Content", "src": "https://www.youtube-nocookie.com/watch?v=R-d6cuP0l9Y&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:50", "documentation": "support/yootheme-pro/joomla/blog-and-post#post-content", "support": "support/search?tags=125&q=post" } ], "Creating Individual Post Layouts": [ { "title": "Creating Individual Post Layouts", "src": "https://www.youtube-nocookie.com/watch?v=Fr7dXusK9xI&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "2:22", "documentation": "support/yootheme-pro/joomla/pages#individual-post-layout", "support": "support/search?tags=125&q=builder" } ] } }, "system-blog": { "title": "Blog", "width": 400, "fields": { "blog.width": { "label": "Width", "description": "Set the blog width.", "type": "select", "options": { "Default": "default", "Small": "small", "Large": "large", "X-Large": "xlarge", "Expand": "expand" } }, "blog.padding": { "label": "Padding", "description": "Set the vertical padding.", "type": "select", "options": { "Default": "", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge" } }, "blog.grid_column_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "blog.grid_row_gap": { "label": "Row Gap", "description": "Set the size of the gap between the grid rows.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "blog.grid_breakpoint": { "label": "Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } }, "blog.grid_masonry": { "label": "Masonry", "description": "The masonry effect creates a layout free of gaps even if grid items have different heights. ", "type": "checkbox", "text": "Enable masonry effect" }, "blog.grid_parallax": { "label": "Parallax", "description": "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels.", "type": "range", "attrs": { "min": 0, "max": 600, "step": 10 } }, "blog.image_align": { "label": "Image Alignment", "description": "Align the image to the top or place it between the title and the content.", "type": "select", "options": { "Top": "top", "Between": "between" } }, "blog.image_margin": { "label": "Image Margin", "description": "Set the top margin if the image is aligned between the title and the content.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "blog.image_align == 'between'" }, "blog.image_dimension": { "type": "grid", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "fields": { "blog.image_width": { "label": "Image Width", "width": "1-2", "attrs": { "placeholder": "auto", "lazy": true } }, "blog.image_height": { "label": "Image Height", "width": "1-2", "attrs": { "placeholder": "auto", "lazy": true } } } }, "blog.header_align": { "label": "Alignment", "description": "Align the title and meta text as well as the continue reading button.", "type": "checkbox", "text": "Center the title, meta text and button" }, "blog.title_style": { "label": "Title Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "H1": "h1", "H2": "h2", "H3": "h3", "H4": "h4" } }, "blog.title_margin": { "label": "Title Margin", "description": "Set the top margin.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" } }, "blog.meta_margin": { "label": "Meta Margin", "description": "Set the top margin.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" } }, "blog.content_length": { "label": "Content Length", "description": "Limit the content length to a number of characters. All HTML elements will be stripped.", "type": "number", "attrs": { "placeholder": "No limit." } }, "blog.content_margin": { "label": "Content Margin", "description": "Set the top margin.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" } }, "blog.content_align": { "label": "Content Alignment", "type": "checkbox", "text": "Center the content" }, "blog.button_style": { "label": "Button", "description": "Select a style for the continue reading button.", "type": "select", "options": { "Default": "default", "Primary": "primary", "Secondary": "secondary", "Danger": "danger", "Text": "text" } }, "blog.button_margin": { "label": "Button Margin", "description": "Set the top margin.", "type": "select", "options": { "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" } }, "blog.navigation": { "label": "Navigation", "description": "Use a numeric pagination or previous/next links to move between blog pages.", "type": "select", "options": { "Pagination": "pagination", "Previous/Next": "previous/next" } }, "blog.pagination_startend": { "type": "checkbox", "text": "Show Start/End links", "show": "blog.navigation == 'pagination'" } }, "help": { "Blog": [ { "title": "Setting the Blog Layout", "src": "https://www.youtube-nocookie.com/watch?v=ZFRieS43jv8&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "2:14", "documentation": "support/yootheme-pro/joomla/blog-and-post#blog-layout", "support": "support/search?tags=125&q=blog" }, { "title": "Setting the Blog Image", "src": "https://www.youtube-nocookie.com/watch?v=vCx5khrkzuc&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:54", "documentation": "support/yootheme-pro/joomla/blog-and-post#blog-image", "support": "support/search?tags=125&q=blog" }, { "title": "Setting the Blog Content", "src": "https://www.youtube-nocookie.com/watch?v=h6zX_rMe1K4&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:05", "documentation": "support/yootheme-pro/joomla/blog-and-post#blog-content", "support": "support/search?tags=125&q=blog" }, { "title": "Setting the Blog Navigation", "src": "https://www.youtube-nocookie.com/watch?v=mT0hItNR4C8&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "0:18", "documentation": "support/yootheme-pro/joomla/blog-and-post#blog-navigation", "support": "support/search?tags=125&q=navigation" }, { "title": "Displaying the Excerpt", "src": "https://www.youtube-nocookie.com/watch?v=96pqkDnG74g&list=PLrqT0WH0HPdPfykSwhMt6Jl2_RgJ6ixU-", "duration": "1:14", "documentation": "support/yootheme-pro/joomla/blog-and-post#excerpt", "support": "support/search?tags=125&q=excerpt" } ] } } } } theme-joomla/bootstrap.php000064400000010351151666572120011666 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Text; use Joomla\CMS\Version; use YOOtheme\Config; use YOOtheme\Theme\SystemCheck as BaseSystemCheck; use YOOtheme\Theme\Updater; use YOOtheme\Theme\ViewHelper as BaseViewHelper; use YOOtheme\View; return [ 'theme' => function (Config $config) { $config->set('theme.styles.vars.@internal-joomla-version', (string) Version::MAJOR_VERSION); return $config->loadFile(__DIR__ . '/config/theme.json'); }, 'routes' => [ ['get', '/customizer', [CustomizerController::class, 'index'], ['customizer' => true]], ['post', '/customizer', [CustomizerController::class, 'save']], ], 'events' => [ 'app.request' => [Listener\CheckUserPermission::class => '@handle'], 'url.resolve' => [Listener\AddCustomizeParameter::class => '@handle'], 'theme.head' => [ Listener\LoadThemeI18n::class => '@handle', Listener\LoadFontAwesome::class => '@handle', ], 'theme.init' => [ Listener\LoadViewsObject::class => ['@handle', 20], Listener\AddPageCategory::class => ['@handle', 10], Listener\LoadChildTheme::class => ['@handle', -10], Listener\LoadCustomizerSession::class => ['@handle', -20], ], 'customizer.init' => [ Listener\LoadCustomizer::class => ['@handle', 10], Listener\LoadCustomizerScript::class => ['@handle', 30], Listener\LoadChildThemeNames::class => ['@handle', 20], ], 'config.save' => [ Listener\AlterParamsColumnType::class => '@handle', Listener\SaveInstallerApiKey::class => '@handle', ], 'styler.imports' => [Listener\LoadStylerImports::class => '@handle'], // Joomla 3.x only (see ViewsObject) 'view.init' => [ Listener\LoadTemplate::class => ['@handle', -10], Listener\LoadChildThemeTemplate::class => '@handle', ], ], 'actions' => [ 'onAfterRoute' => [ThemeLoader::class => ['initTheme', 50]], 'onBeforeDisplay' => [ Listener\LoadTemplate::class => ['@handle', -10], Listener\LoadChildThemeTemplate::class => '@handle', ], 'onLoadTemplate' => [ Listener\AddPageLayout::class => '@handle', Listener\LoadAssets::class => ['@handle', -20], Listener\LoadConfigCache::class => ['@handle', -20], ], 'onAfterDispatch' => [ Listener\LoadConfigCache::class => '@load', Listener\LoadThemeHead::class => '@handle', Listener\LoadChildThemeConfig::class => '@handle', ], 'onBeforeCompileHead' => [Listener\LoadCustomizerData::class => '@handle'], 'onContentPrepareData' => [Listener\LoadCustomizerContext::class => '@handle'], 'onAfterCleanModuleList' => [ Listener\AddSiteUrl::class => '@handle', Listener\LoadChildThemeModules::class => ['@handle', -5], ], ], 'extend' => [ View::class => function (View $view, $app) { $view->addLoader([UrlLoader::class, 'resolveRelativeUrl']); $view->addLoader($app(PositionLoader::class), '~theme/templates/position'); $view->addFunction('trans', [Text::class, '_']); $view->addFunction( 'formatBytes', fn($bytes, $precision = 0) => HTMLHelper::_( 'number.bytes', $bytes, 'auto', $precision, ), ); // cleanImageURL shim for Joomla 3.x if (version_compare(JVERSION, '4.0', '<')) { HTMLHelper::register('cleanImageURL', fn($url) => (object) ['url' => $url]); } }, Updater::class => function (Updater $updater) { $updater->add(__DIR__ . '/updates.php'); }, ], 'services' => [ ThemeLoader::class => '', BaseViewHelper::class => ViewHelper::class, BaseSystemCheck::class => SystemCheck::class, Listener\AddCustomizeParameter::class => '', ], 'loaders' => [ 'theme' => [ThemeLoader::class, 'load'], ], ]; theme-joomla/updates.php000064400000006156151666572120011326 0ustar00<?php namespace YOOtheme; use Joomla\Database\DatabaseDriver; return [ '3.0.0-beta.1.5' => function ($config) { /** @var DatabaseDriver $db */ $db = app(DatabaseDriver::class); $modules = $db->setQuery('SELECT id, params FROM `#__modules`')->loadObjectList(); foreach ($modules as $module) { $params = json_decode($module->params); if (empty($params->yoo_config)) { continue; } $conf = json_decode($params->yoo_config, true); Arr::updateKeys($conf, ['menu_style' => 'menu_type']); $params->yoo_config = json_encode($conf); $module->params = json_encode($params); $db->updateObject('#__modules', $module, 'id'); } return $config; }, '2.8.0-beta.0.4' => function ($config) { Arr::updateKeys($config, ['menu.positions.mobile' => 'menu.positions.dialog-mobile']); /** @var DatabaseDriver $db */ $db = app(DatabaseDriver::class); $db->setQuery( "UPDATE `#__modules` SET position = {$db->quote( 'dialog-mobile', )} WHERE client_id=0 AND position = {$db->quote('mobile')}", )->execute(); return $config; }, '2.8.0-beta.0.1' => function ($config, array $params) { if (preg_match('/(offcanvas|modal)/', Arr::get($params['config'], 'header.layout'))) { Arr::updateKeys($config, ['menu.positions.navbar' => 'menu.positions.dialog']); // Ensure empty instead of default value Arr::set($config, 'menu.positions.navbar', ''); /** @var DatabaseDriver $db */ $db = app(DatabaseDriver::class); $db->setQuery( "UPDATE `#__modules` SET position = {$db->quote( 'dialog', )} WHERE client_id=0 AND position = {$db->quote('navbar')}", )->execute(); } // Check child theme's "theme.js" for jQuery if ( !empty($config['child_theme']) && !isset($config['jquery']) && ($contents = @file_get_contents( $params['app'](Config::class)->get('theme.rootDir') . "_{$config['child_theme']}/js/theme.js", )) && str_contains($contents, 'jQuery') ) { $config['jquery'] = true; } return $config; }, '1.20.0-beta.6' => function ($config) { // Deprecated Blog settings if (!Arr::has($config, 'post.image_margin')) { Arr::set($config, 'post.title_margin', 'large'); Arr::set($config, 'blog.title_margin', 'large'); if (Arr::get($config, 'post.content_width') === true) { Arr::set($config, 'post.content_width', 'small'); } if (Arr::get($config, 'post.content_width') === false) { Arr::set($config, 'post.content_width', ''); } if (Arr::get($config, 'post.header_align') === true) { Arr::set($config, 'blog.header_align', 1); } } return $config; }, ]; theme-joomla/src/ThemeLoader.php000064400000010463151666572120012635 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Application\CMSApplication; use Joomla\Database\DatabaseDriver; use Joomla\Registry\Registry; use YOOtheme\Application; use YOOtheme\Arr; use YOOtheme\Config; use YOOtheme\Container; use YOOtheme\Event; use YOOtheme\Path; use YOOtheme\Theme\Updater; class ThemeLoader { protected static $configs = []; /** * Load theme configurations. */ public static function load(Container $container, array $configs) { static::$configs = array_merge(static::$configs, $configs); } /** * Initialize current theme. */ public static function initTheme(Application $app, Config $config) { $template = static::getTemplate($app); // is template active? if (!empty($template->params['yootheme'])) { static::loadConfiguration($app, $config, $template); Event::emit('theme.init'); } } protected static function loadConfiguration(Application $app, Config $config, object $template) { // get theme config $themeConfig = $template->params->get('config', ''); $themeConfig = json_decode($themeConfig, true) ?: []; // load child theme config if (!empty($themeConfig['child_theme'])) { $app->load( Path::get( "~/templates/{$template->template}_{$themeConfig['child_theme']}/config.php", ), ); } // add configurations $config->add('theme', [ 'id' => $template->id, 'active' => true, 'default' => !empty($template->home), 'template' => $template->template, ]); foreach (static::$configs as $conf) { if ($conf instanceof \Closure) { $conf = $conf($config, $app); } $config->add('theme', (array) $conf); } // handle empty config if (empty($themeConfig)) { $themeConfig['version'] = $config('theme.version'); } // merge defaults with configuration $config->set( '~theme', Arr::merge( $config('theme.defaults', []), static::updateConfig($app, $template, $themeConfig), ), ); } /** * Gets the current template. * * @return object|null */ protected static function getTemplate(Application $app) { /** @var CMSApplication $joomla */ $joomla = $app(CMSApplication::class); $template = $joomla->getTemplate(true); // get site template if ($joomla->isClient('administrator')) { $view = $joomla->input->getCmd('view') === 'style'; $option = $joomla->input->getCmd('option') === 'com_templates'; $style = $joomla->input->getInt($view && $option ? 'id' : 'templateStyle'); /** @var DatabaseDriver $db */ $db = $app(DatabaseDriver::class); $query = 'SELECT * FROM #__template_styles WHERE ' . ($style ? "id = {$style}" : "client_id = 0 AND home = '1'"); if ($template = $db->setQuery($query)->loadObject()) { $template->params = new Registry($template->params); } } return $template; } protected static function updateConfig(Application $app, object $template, array $themeConfig) { /** @var Updater $updater */ $updater = $app(Updater::class); $version = $themeConfig['version'] ?? null; $themeConfig = $updater->update($themeConfig, ['app' => $app, 'config' => $themeConfig]); if (empty($version) || $version !== $themeConfig['version']) { $style = (object) [ 'id' => $template->id, 'params' => json_encode( [ 'config' => json_encode( $themeConfig, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES, ), ] + $template->params->toArray(), ), ]; /** @var DatabaseDriver $db */ $db = $app(DatabaseDriver::class); $db->updateObject('#__template_styles', $style, 'id'); } return $themeConfig; } } theme-joomla/src/StreamWrapper.php000064400000010620151666572120013233 0ustar00<?php namespace YOOtheme\Theme\Joomla; class StreamWrapper { /** * @var resource|null * @link https://github.com/phpspec/phpspec/pull/1435 */ public $context; /** * @var array|false */ protected $stat; /** * @var int */ protected $length; /** * @var int */ protected $position; /** * @var string */ protected $output; /** * @var string[] */ protected static $outputs = []; /** * @var callable[] */ protected static $objects = []; /** * Retrieve information about a file. */ public function url_stat($path) { if (is_callable($object = static::getObject($path))) { static::setOutput($path, $object($path)); } if (is_string($output = static::getOutput($path))) { return static::getStat($output); } return false; } /** * Function to open file or url */ public function stream_open($path) { if (!is_string($output = static::getOutput($path))) { return false; } $this->stat = static::getStat($output); $this->length = strlen($output); $this->position = 0; $this->output = $output; return true; } /** * Read stream */ public function stream_read($count) { $result = substr($this->output, $this->position, $count); $this->position += $count; return $result; } /** * Retrieve information about a file resource */ public function stream_stat() { return $this->stat; } /** * Function to get the current position of the stream */ public function stream_tell() { return $this->position; } /** * Function to test for end of file pointer */ public function stream_eof() { return $this->position >= $this->length; } /** * The read write position updates in response to $offset and $whence */ public function stream_seek($offset, $whence) { switch ($whence) { case \SEEK_SET: if ($offset < $this->length && $offset >= 0) { $this->position = $offset; return true; } break; case \SEEK_CUR: if ($offset >= 0) { $this->position += $offset; return true; } break; case \SEEK_END: if ($this->length + $offset >= 0) { $this->position = $this->length + $offset; return true; } break; } return false; } /** * Change stream options */ public function stream_set_option() { return true; } /** * Sets a object */ public static function setObject($object) { $key = spl_object_hash($object); static::$objects[$key] = $object; return $key; } /** * Gets an object */ protected static function getObject($path) { $path = substr($path, strpos($path, '://') + 3); foreach (static::$objects as $key => $object) { if (str_starts_with($path, $key)) { return $object; } } return null; } /** * Sets an output */ protected static function setOutput($path, $output) { if (is_string($output)) { $output = var_export($output, true); $output = "<?php echo $output;"; } static::$outputs[$path] = $output; } /** * Gets an output */ protected static function getOutput($path) { return static::$outputs[$path] ?? null; } /** * Retrieve file information for a string */ protected static function getStat($string) { $time = time(); $length = strlen($string); return [ 'dev' => 0, 'ino' => 0, 'mode' => 0, 'nlink' => 1, 'uid' => 0, 'gid' => 0, 'rdev' => 0, 'size' => $length, 'atime' => $time, 'mtime' => $time, 'ctime' => $time, 'blksize' => '512', 'blocks' => ceil($length / 512), ]; } } theme-joomla/src/PositionLoader.php000064400000001430151666572120013371 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Factory; use YOOtheme\Application; use YOOtheme\Config; use YOOtheme\Joomla\Platform; class PositionLoader { public Application $app; public Config $config; public function __construct(Application $app, Config $config) { $this->app = $app; $this->config = $config; } /** * Add assets for Joomla progressive caching. */ public function __invoke(string $name, array $parameters, callable $next) { $result = $next($name, $parameters); // Make assets cacheable (e.g. maps.min.js) if ((int) Factory::getApplication()->get('caching', 0) === 2) { $this->app->call([Platform::class, 'registerAssets']); } return $result; } } theme-joomla/src/SystemCheck.php000064400000004475151666572120012674 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Component\ComponentHelper; use Joomla\Database\DatabaseDriver; use YOOtheme\Theme\SystemCheck as BaseSystemCheck; use function YOOtheme\trans; class SystemCheck extends BaseSystemCheck { protected ApiKey $apiKey; protected DatabaseDriver $db; /** * Constructor. */ public function __construct(DatabaseDriver $db, ApiKey $apiKey) { $this->db = $db; $this->apiKey = $apiKey; } /** * @inheritdoc */ public function getRequirements() { $res = []; // Check for debug mode if (constant('JDEBUG')) { $res[] = trans( 'The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.', ); } // Check for SEBLOD Plugin and setting $components = ComponentHelper::getComponents(); $cck = $components['com_cck'] ?? false; if ($cck && $cck->enabled == 1) { if ($cck->getParams()->get('hide_edit_icon')) { $res[] = trans( 'The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href="index.php?option=com_config&view=component&component=com_cck" target="_blank">SEBLOD configuration</a>.', ); } } try { // Check for RSFirewall settings @TODO check if enabled? $rsfw = $this->db ->setQuery( sprintf( 'SELECT value FROM #__rsfirewall_configuration WHERE name = %s', $this->db->quote('verify_emails'), ), ) ->loadResult(); if ($rsfw == 1) { $res[] = trans( 'The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href="index.php?option=com_rsfirewall&view=configuration" target="_blank">RSFirewall configuration</a>.', ); } } catch (\Exception $e) { } return array_merge($res, parent::getRequirements()); } protected function hasApiKey() { return $this->apiKey->get(); } } theme-joomla/src/CustomizerController.php000064400000005364151666572120014660 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Document\Document; use Joomla\CMS\Document\HtmlDocument; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\User\User; use Joomla\Database\DatabaseDriver; use YOOtheme\Config; use YOOtheme\Event; use YOOtheme\Http\Request; use YOOtheme\Path; use YOOtheme\Url; class CustomizerController { public static function index( Request $request, User $user, Config $config, Document $document, CMSApplication $joomla ) { $request->abortIf(!$document instanceof HtmlDocument, 400, 'Bad Request'); HTMLHelper::_('behavior.keepalive'); // init customizer Event::emit('customizer.init'); // init config $config->add('customizer', [ 'config' => $config('~theme'), 'return' => $request->getQueryParam('return') ?: Url::to('administrator/index.php'), ]); // api key editable? if ( !$user->authorise('core.edit', 'com_installer') || !$user->authorise('core.manage', 'com_installer') ) { $config->del('customizer.sections.settings.fields.settings.items.api-key'); } // set system template $joomla->set('theme', 'system'); $joomla->input->set('tmpl', 'component'); // set document title/icon $document->setTitle("Website Builder - {$joomla->get('sitename')}"); $document->addFavicon(Url::to(Path::get('../assets/images/favicon.png', __DIR__))); $document->setBuffer('<div id="customizer"></div>', [ 'type' => 'component', 'name' => null, 'title' => null, ]); } public static function save(Request $request, User $user, Config $config, DatabaseDriver $db) { $request->abortIf( !$user->authorise('core.edit', 'com_templates'), 403, 'Insufficient User Rights.', ); // get config values $values = Event::emit('config.save|filter', $request->getParam('config', [])); // fetch current style params $params = $db ->setQuery( sprintf('SELECT params FROM #__template_styles WHERE id = %d', $config('theme.id')), ) ->loadResult(); // prepare style params $params = ['config' => json_encode($values, JSON_UNESCAPED_SLASHES)] + (json_decode($params, true) ?: []); // update style params $style = (object) [ 'id' => $config('theme.id'), 'params' => json_encode($params, JSON_UNESCAPED_SLASHES), ]; $db->updateObject('#__template_styles', $style, 'id'); return 'success'; } } theme-joomla/src/ViewsObject.php000064400000002266151666572120012672 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\MVC\Controller\BaseController; use Joomla\Event\Event as JoomlaEvent; use YOOtheme\Event; /** * Only needed for Joomla 3.x because it has no "onBeforeDisplay" event. */ class ViewsObject extends \ArrayObject { /** * Returns the value at the specified index. * * @param string $index * * @return mixed */ #[\ReturnTypeWillChange] public function offsetGet($index) { if (!$this->offsetExists($index)) { $this->offsetSet($index, new \ArrayObject()); } $views = parent::offsetGet($index); foreach ($views['html'] ?? [] as $view) { Event::emit('view.init', new JoomlaEvent('onBeforeDisplay', ['subject' => $view])); } return $views; } /** * Register views object as cache array. * * @return void */ public static function register() { $class = new \ReflectionClass(BaseController::class); if ($class->hasProperty('views')) { $views = $class->getProperty('views'); $views->setAccessible(true); $views->setValue(new self()); } } } theme-joomla/src/ApiKey.php000064400000003446151666572120011631 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\Database\DatabaseDriver; class ApiKey { public const ELEMENT = 'pkg_yootheme'; protected DatabaseDriver $db; /** * Constructor. */ public function __construct(DatabaseDriver $db) { $this->db = $db; } public function get(): string { $updateSite = $this->getUpdateSite(static::ELEMENT); parse_str($updateSite->extra_query ?? '', $params); return $params['key'] ?? ''; } public function set($key): void { $key = "key={$key}"; $updateSite = $this->getUpdateSite(static::ELEMENT); if ($updateSite && $updateSite->extra_query !== $key) { $query = $this->db ->getQuery(true) ->update('#__update_sites') ->set("extra_query = {$this->db->quote($key)}") ->where("update_site_id = {$updateSite->update_site_id}"); $this->db->setQuery($query)->execute(); } } protected function getUpdateSite( $element, $type = 'package', $folder = '', $clientId = 0 ): ?object { $query = $this->db ->getQuery(true) ->select(['us.update_site_id', 'us.extra_query']) ->from('#__extensions AS e') ->innerJoin('#__update_sites_extensions AS se ON e.extension_id = se.extension_id') ->innerJoin('#__update_sites AS us ON se.update_site_id = us.update_site_id') ->where([ "e.type = {$this->db->quote($type)}", "e.folder = {$this->db->quote($folder)}", "e.element = {$this->db->quote($element)}", "e.client_id = {$clientId}", ]); return $this->db->setQuery($query)->loadObject(); } } theme-joomla/src/Listener/LoadFontAwesome.php000064400000001237151666572120015257 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; use YOOtheme\Metadata; class LoadFontAwesome { public Config $config; public Metadata $metadata; public function __construct(Config $config, Metadata $metadata) { $this->config = $config; $this->metadata = $metadata; } public function handle(): void { if (version_compare(JVERSION, '4.0', '<') || !$this->config->get('~theme.fontawesome')) { return; } $this->metadata->set('style:fontawesome', [ 'href' => '~/media/system/css/joomla-fontawesome.min.css', 'defer' => true, ]); } } theme-joomla/src/Listener/AlterParamsColumnType.php000064400000001712151666572120016461 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\Database\DatabaseDriver; class AlterParamsColumnType { protected DatabaseDriver $db; /** * Constructor. */ public function __construct(DatabaseDriver $db) { $this->db = $db; } /** * Alter params type to MEDIUMTEXT only in MySQL database */ public function handle(array $values): array { if (!str_contains($this->db->getName(), 'mysql')) { return $values; } if ( $this->db ->setQuery( "SHOW FIELDS FROM #__template_styles WHERE Field = 'params' AND Type = 'text'", ) ->loadRow() ) { $this->db ->setQuery( 'ALTER TABLE #__template_styles CHANGE `params` `params` MEDIUMTEXT NOT NULL', ) ->execute(); } return $values; } } theme-joomla/src/Listener/LoadViewsObject.php000064400000001307151666572120015252 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Component\ComponentHelper; use YOOtheme\Config; use YOOtheme\Theme\Joomla\ViewsObject; class LoadViewsObject { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle(): void { // register views cache array if (version_compare(JVERSION, '4.0', '<') && $this->config->get('app.isSite')) { ViewsObject::register(); } // Joomla 4 does not distribute com_search if (!ComponentHelper::isEnabled('com_search')) { $this->config->set('~theme.search_module', 'mod_finder'); } } } theme-joomla/src/Listener/AddCustomizeParameter.php000064400000001260151666572120016460 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; use YOOtheme\Http\Uri; class AddCustomizeParameter { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($path, $parameters, $secure, callable $next) { /** @var Uri $uri */ $uri = $next($path, $parameters, $secure); if (str_starts_with((string) $uri->getQueryParam('p'), 'theme/')) { $query = $uri->getQueryParams(); $query['templateStyle'] = $this->config->get('theme.id'); $uri = $uri->withQueryParams($query); } return $uri; } } theme-joomla/src/Listener/LoadConfigCache.php000064400000002765151666572120015170 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Document\Document; use Joomla\CMS\Document\HtmlDocument; use YOOtheme\Config; class LoadConfigCache { public array $keys = [ 'app.isBuilder', 'app.template.type', '~theme.page_layout', 'header.section.transparent', ]; public bool $caching; public Config $config; public ?HtmlDocument $document; public function __construct(Config $config, CMSApplication $joomla, ?Document $document) { $this->config = $config; $this->document = $document instanceof HtmlDocument ? $document : null; $this->caching = $this->document && $joomla->get('caching'); } /** * Add to Joomla caching. */ public function handle(): void { if (!$this->caching) { return; } foreach ($this->keys as $key) { $value = $this->config->get($key); if (isset($value)) { $this->document->_custom[$key] = $value; } } } /** * Load from Joomla caching. */ public function load(): void { if (!$this->caching) { return; } foreach ($this->keys as $key) { $value = $this->document->_custom[$key] ?? null; if (isset($value)) { $this->config->set($key, $value); unset($this->document->_custom[$key]); } } } } theme-joomla/src/Listener/LoadStylerImports.php000064400000001352151666572120015666 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Path; use YOOtheme\Theme\Styler\Styler; class LoadStylerImports { public Styler $styler; public function __construct(Styler $styler) { $this->styler = $styler; } public function handle(array $imports): array { if (version_compare(JVERSION, '4.0', '<')) { $bootstrap = Path::get( '~theme/packages/theme-joomla/assets/less/bootstrap-joomla3/bootstrap.less', ); foreach ($this->styler->resolveImports($bootstrap) as $file => $content) { $imports[str_replace('/bootstrap-joomla3/', '/bootstrap/', $file)] = $content; } } return $imports; } } theme-joomla/src/Listener/LoadAssets.php000064400000001347151666572120014274 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Document\HtmlDocument; use YOOtheme\Application; use YOOtheme\Joomla\Platform; class LoadAssets { public Application $app; public CMSApplication $joomla; public function __construct(Application $app, CMSApplication $joomla) { $this->app = $app; $this->joomla = $joomla; } /** * Make assets cacheable (e.g. maps.min.js). */ public function handle(): void { $document = $this->joomla->getDocument(); if ($document instanceof HtmlDocument && $this->joomla->get('caching')) { $this->app->call([Platform::class, 'registerAssets']); } } } theme-joomla/src/Listener/LoadChildTheme.php000064400000001461151666572120015035 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; use YOOtheme\Event; use YOOtheme\File; class LoadChildTheme { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle(): void { if (empty(($child = $this->config->get('~theme.child_theme')))) { return; } if (!file_exists($childDir = "{$this->config->get('theme.rootDir')}_{$child}")) { return; } // add childDir to config $this->config->set('theme.childDir', $childDir); // add ~theme alias resolver Event::on( 'path ~theme', fn($path, $file) => $file && File::find($childDir . $file) ? $childDir . $file : $path, ); } } theme-joomla/src/Listener/LoadChildThemeConfig.php000064400000002307151666572120016163 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Factory; use YOOtheme\Config; class LoadChildThemeConfig { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle(): void { if ( !$this->config->get('app.isAdmin') && ($childDir = $this->config->get('theme.childDir')) && ($themeFile = $this->getThemeFile()) && file_exists($file = "{$childDir}/{$themeFile}") ) { Factory::getApplication()->set('theme', basename(dirname($file))); } } /** * @see SiteApplication::render */ protected function getThemeFile(): ?string { $joomla = Factory::getApplication(); if ($joomla->getDocument()->getType() === 'feed') { return null; } $file = $joomla->input->get('tmpl', 'index'); if ($file === 'offline' && !$joomla->get('offline')) { return 'index.php'; } if ($joomla->get('offline') && !Factory::getUser()->authorise('core.login.offline')) { return 'offline.php'; } return "{$file}.php"; } } theme-joomla/src/Listener/LoadCustomizer.php000064400000001741151666572120015174 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\User\User; use YOOtheme\Config; use YOOtheme\Path; use YOOtheme\Theme\Joomla\ApiKey; class LoadCustomizer { public User $user; public Config $config; public ApiKey $apiKey; public function __construct(Config $config, ApiKey $apiKey, User $user) { $this->user = $user; $this->config = $config; $this->apiKey = $apiKey; } public function handle(): void { $this->config->addFile('customizer', Path::get('../../config/customizer.json', __DIR__)); $this->config->add('customizer', [ 'config' => ['yootheme_apikey' => $this->apiKey->get()], 'user_id' => $this->user->id, ]); // Joomla 4 does not distribute com_search if (!ComponentHelper::isEnabled('com_search')) { $this->config->del('customizer.panels.advanced.fields.search_module'); } } } theme-joomla/src/Listener/LoadTemplate.php000064400000003002151666572120014573 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Factory; use YOOtheme\Config; use YOOtheme\Theme\Joomla\StreamWrapper; class LoadTemplate { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($event): void { if ($this->config->get('app.isAdmin') || !$this->config->get('theme.active')) { return; } $view = $event->getArgument('subject'); // loader callback for template event $loader = function ($path) use ($view) { // Clone view to avoid mutations on the original view $copy = clone $view; $copy->set('_output', null); $copy->set('context', basename($copy->get('_basePath')) . ".{$copy->getName()}"); $tpl = substr(basename($path, '.php'), strlen($copy->getLayout()) + 1) ?: null; Factory::getApplication()->triggerEvent('onLoadTemplate', [$copy, $tpl]); return $copy->get('_output'); }; // register the stream wrapper if (!in_array('views', stream_get_wrappers())) { stream_wrapper_register('views', StreamWrapper::class); } // add loader using a stream reference // check if path is available (StackIdeas com_payplan) if ($path = $view->get('_path')) { array_unshift($path['template'], 'views://' . StreamWrapper::setObject($loader)); $view->set('_path', $path); } } } theme-joomla/src/Listener/LoadThemeHead.php000064400000005522151666572120014655 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\Document\Document; use Joomla\CMS\Document\HtmlDocument; use Joomla\CMS\HTML\HTMLHelper; use Joomla\CMS\Language\Language; use Joomla\CMS\Plugin\PluginHelper; use YOOtheme\Config; use YOOtheme\Event; class LoadThemeHead { public Config $config; public Document $document; public Language $language; public ?SiteApplication $joomla; public function __construct( Config $config, Document $document, Language $language, ?SiteApplication $joomla ) { $this->config = $config; $this->joomla = $joomla; $this->document = $document; $this->language = $language; } public function handle(): void { if (!$this->isThemeActive()) { return; } $this->language->load('tpl_yootheme', $this->config->get('theme.rootDir')); $this->config->add('~theme', [ 'direction' => $this->document->getDirection(), 'page_class' => $this->joomla->getParams()->get('pageclass_sfx'), ]); if ( version_compare(JVERSION, '4.0', '<') && PluginHelper::isEnabled('content', 'emailcloak') ) { $this->fixEmailCloak($this->document); } $custom = $this->config->get('~theme.custom_js', ''); if ($custom && $this->document instanceof HtmlDocument) { $this->addCustomScript($this->document, $custom); } if ($this->config->get('~theme.jquery') || str_contains($custom, 'jQuery')) { HTMLHelper::_('jquery.framework'); } Event::emit('theme.head'); } protected function isThemeActive(): bool { return isset($this->joomla) && $this->joomla->input->getCmd('tmpl') !== 'component' && $this->joomla->input->getCmd('option') !== 'com_ajax' && $this->config->get('theme.active'); } protected function fixEmailCloak(Document $document): void { $document->addScriptDeclaration("document.addEventListener('DOMContentLoaded', function() { Array.prototype.slice.call(document.querySelectorAll('a span[id^=\"cloak\"]')).forEach(function(span) { span.innerText = span.textContent; }); });"); } protected function addCustomScript(HtmlDocument $document, $script): void { $script = trim($script); // Check for </script> for backwards compatibility (Will be dropped in the future) if (!str_starts_with($script, '<') || str_starts_with($script, '</script>')) { $attrs = $this->config->get('app.isCustomizer') ? ' data-preview="diff"' : ''; $script = "<script{$attrs}>{$script}</script>"; } $document->addCustomTag($script); } } theme-joomla/src/Listener/CheckUserPermission.php000064400000004704151666572120016157 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Router\Route; use Joomla\CMS\User\User; use YOOtheme\Config; use YOOtheme\Http\Request; use YOOtheme\Http\Response; use function YOOtheme\app; class CheckUserPermission { public User $user; public Config $config; public static array $themeRoutes = [ '/builder/template' => ['GET', 'POST', 'DELETE'], '/builder/template/reorder' => ['POST'], '/cache' => ['GET'], '/cache/clear' => ['POST'], '/import' => ['POST'], '/styler/library' => ['GET', 'POST', 'DELETE'], '/systemcheck' => ['GET'], '/theme/style' => ['GET', 'POST'], '/theme/styles' => ['GET'], ]; public function __construct(Config $config, User $user) { $this->user = $user; $this->config = $config; } /** * Check permission of current user. * * @param Request $request * @param callable $next */ public function handle($request, callable $next): Response { if (!$request->getAttribute('allowed') && !$this->hasPermission($request)) { // redirect guest user to user login if ( $this->user->guest && str_contains($request->getHeaderLine('Accept'), 'text/html') ) { $url = Route::_( $this->config->get('app.isAdmin') ? 'index.php?option=com_login' : 'index.php?option=com_users&view=login', false, ); return app(Response::class)->withRedirect($url); } $request->abort(403, 'Insufficient User Rights.'); } return $next($request); } protected function hasPermission($request): bool { if ($this->user->authorise('core.edit', 'com_templates')) { return true; } $route = $request->getAttribute('route'); if (in_array($request->getMethod(), static::$themeRoutes[$route->getPath()] ?? [])) { return false; } if ( $request->getAttribute('customizer') && $request->getQueryParam('section') !== 'builder' ) { return false; } return $this->user->authorise('core.edit', 'com_content') || $this->user->authorise('core.edit.own', 'com_content') || $this->user->authorise('core.edit', 'com_modules'); } } theme-joomla/src/Listener/LoadCustomizerSession.php000064400000003644151666572120016544 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Application\CMSApplication; use Joomla\CMS\Session\Session; use YOOtheme\Arr; use YOOtheme\Config; class LoadCustomizerSession { public Config $config; public Session $session; public CMSApplication $joomla; public function __construct(Config $config, CMSApplication $joomla, Session $session) { $this->config = $config; $this->joomla = $joomla; $this->session = $session; } public function handle(): void { $cookie = hash_hmac( 'md5', $this->config->get('theme.template'), $this->config->get('app.secret'), ); // If not customizer route if ($this->joomla->input->get('p') !== 'customizer') { // Is frontend request and has customizer cookie if (!$this->config->get('app.isSite') || !$this->joomla->input->cookie->get($cookie)) { return; } // Get params from frontend session $params = $this->session->get($cookie) ?: []; // Get customizer config from request if ($custom = $this->joomla->input->getBase64('customizer')) { $params = array_replace($params, json_decode(base64_decode($custom), true)); $this->session->set($cookie, Arr::pick($params, ['config', 'admin', 'user_id'])); } // Override theme config if (isset($params['config'])) { $this->config->set('~theme', $params['config']); } // Pass through e.g. page, modules and template params $this->config->add('req.customizer', $params); } $this->joomla->set('caching', 0); $this->config->set('app.isCustomizer', true); $this->config->set('theme.cookie', $cookie); $this->config->set('customizer.id', $this->config->get('theme.id')); } } theme-joomla/src/Listener/LoadCustomizerData.php000064400000001771151666572120015771 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Application\CMSApplication; use YOOtheme\Config; use YOOtheme\Metadata; class LoadCustomizerData { public Config $config; public Metadata $metadata; public CMSApplication $joomla; public function __construct(Config $config, CMSApplication $joomla, Metadata $metadata) { $this->config = $config; $this->joomla = $joomla; $this->metadata = $metadata; } public function handle(): void { if ( $this->joomla->get('themeFile') !== 'offline.php' && ($data = $this->config->get('customizer')) ) { $this->metadata->set( 'script:customizer-data', sprintf( 'window.yootheme ||= {}; var $customizer = yootheme.customizer = JSON.parse(atob("%s"));', base64_encode(json_encode($data)), ), ['id' => 'customizer-data'], ); } } } theme-joomla/src/Listener/LoadChildThemeModules.php000064400000001701151666572120016363 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; class LoadChildThemeModules { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($event): void { $childDir = $this->config->get('theme.childDir'); if (!$childDir || $this->config->get('app.isAdmin')) { return; } $modules = $event->getArgument('modules'); foreach ($modules as $module) { $params = json_decode($module->params ?? '{}'); $layout = is_string($params->layout ?? null) ? str_replace('_:', '', $params->layout) : 'default'; if (file_exists("{$childDir}/html/{$module->module}/{$layout}.php")) { $params->layout = basename($childDir) . ":{$layout}"; $module->params = json_encode($params); } } } } theme-joomla/src/Listener/AddSiteUrl.php000064400000001750151666572120014230 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Application\SiteApplication; use Joomla\CMS\Router\Route; use YOOtheme\Config; class AddSiteUrl { public Config $config; public ?SiteApplication $joomla; public function __construct(Config $config, ?SiteApplication $joomla) { $this->config = $config; $this->joomla = $joomla; } public function handle(): void { if (!$this->isThemeActive()) { return; } $itemId = ($item = $this->joomla->getMenu()->getDefault()) ? $item->id : 0; $siteUrl = Route::_("index.php?Itemid={$itemId}", false, 0, true); $this->config->set('~theme.site_url', $siteUrl); } protected function isThemeActive(): bool { return isset($this->joomla) && $this->joomla->input->getCmd('tmpl') !== 'component' && $this->joomla->input->getCmd('option') !== 'com_ajax' && $this->config->get('theme.active'); } } theme-joomla/src/Listener/AddPageCategory.php000064400000001433151666572120015211 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\Database\DatabaseDriver; use YOOtheme\Config; class AddPageCategory { public Config $config; public DatabaseDriver $db; public function __construct(Config $config, DatabaseDriver $db) { $this->db = $db; $this->config = $config; } public function handle(): void { $catid = $this->config->get('~theme.page_category'); if ($catid === '' || is_numeric($catid)) { return; } $result = $this->db ->setQuery( "SELECT id FROM #__categories WHERE alias = 'uncategorised' AND extension = 'com_content'", ) ->loadResult(); $this->config->set('~theme.page_category', strval($result)); } } theme-joomla/src/Listener/LoadThemeI18n.php000064400000003552151666572120014534 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\Language\Text; use YOOtheme\Config; class LoadThemeI18n { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle(): void { $this->config->add('theme.data.i18n', [ 'close' => ['label' => Text::_('TPL_YOOTHEME_CLOSE')], 'totop' => ['label' => Text::_('TPL_YOOTHEME_BACK_TO_TOP')], 'marker' => ['label' => Text::_('TPL_YOOTHEME_OPEN')], 'navbarToggleIcon' => ['label' => Text::_('TPL_YOOTHEME_OPEN_MENU')], 'paginationPrevious' => ['label' => Text::_('TPL_YOOTHEME_PREVIOUS_PAGE')], 'paginationNext' => ['label' => Text::_('TPL_YOOTHEME_NEXT_PAGE')], 'searchIcon' => [ 'toggle' => Text::_('TPL_YOOTHEME_OPEN_SEARCH'), 'submit' => Text::_('TPL_YOOTHEME_SUBMIT_SEARCH'), ], 'slider' => [ 'next' => Text::_('TPL_YOOTHEME_NEXT_SLIDE'), 'previous' => Text::_('TPL_YOOTHEME_PREVIOUS_SLIDE'), 'slideX' => Text::_('TPL_YOOTHEME_SLIDE_%S'), 'slideLabel' => Text::_('TPL_YOOTHEME_%S_OF_%S'), ], 'slideshow' => [ 'next' => Text::_('TPL_YOOTHEME_NEXT_SLIDE'), 'previous' => Text::_('TPL_YOOTHEME_PREVIOUS_SLIDE'), 'slideX' => Text::_('TPL_YOOTHEME_SLIDE_%S'), 'slideLabel' => Text::_('TPL_YOOTHEME_%S_OF_%S'), ], 'lightboxPanel' => [ 'next' => Text::_('TPL_YOOTHEME_NEXT_SLIDE'), 'previous' => Text::_('TPL_YOOTHEME_PREVIOUS_SLIDE'), 'slideLabel' => Text::_('TPL_YOOTHEME_%S_OF_%S'), 'close' => Text::_('TPL_YOOTHEME_CLOSE'), ], ]); } } theme-joomla/src/Listener/LoadChildThemeTemplate.php000064400000001713151666572120016531 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; class LoadChildThemeTemplate { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($event): void { $childDir = $this->config->get('theme.childDir'); if (!$childDir || $this->config->get('app.isAdmin')) { return; } $view = $event->getArgument('subject'); $paths = $view->get('_path'); if ($path = $paths['template'][0] ?? false) { $theme = $this->config->get('theme.template'); if (str_contains($path, DIRECTORY_SEPARATOR . $theme . DIRECTORY_SEPARATOR)) { array_unshift( $paths['template'], preg_replace("/({$theme}(?!.*{$theme}.*))/", basename($childDir), $path), ); } } $view->set('_path', $paths); } } theme-joomla/src/Listener/AddPageLayout.php000064400000001524151666572120014712 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; class AddPageLayout { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($event): void { [$view] = $event->getArguments(); $layout = $view->getLayout(); $context = $view->get('context'); if (in_array($context, ['com_content.category', 'com_content.featured', 'com_tags.tag'])) { $this->config->set('~theme.page_layout', 'blog'); } if ($context === 'com_content.article' && $layout === 'default') { $item = $view->get('item'); if ($this->config->get('~theme.page_category') != $item->catid) { $this->config->set('~theme.page_layout', 'post'); } } } } theme-joomla/src/Listener/LoadChildThemeNames.php000064400000001534151666572120016022 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; class LoadChildThemeNames { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle(): void { $this->config->set( 'theme.child_themes', array_merge( ['None' => ''], $this->getChildThemes($this->config->get('theme.rootDir', '')), ), ); } protected function getChildThemes(string $root): array { $dir = dirname($root); $name = basename($root); $themes = []; foreach (glob("{$dir}/{$name}_*") as $child) { $child = str_replace("{$name}_", '', basename($child)); $themes[ucfirst($child)] = $child; } return $themes; } } theme-joomla/src/Listener/SaveInstallerApiKey.php000064400000001410151666572120016100 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use Joomla\CMS\User\User; use YOOtheme\Theme\Joomla\ApiKey; class SaveInstallerApiKey { public User $user; public ApiKey $apiKey; public function __construct(User $user, ApiKey $apiKey) { $this->user = $user; $this->apiKey = $apiKey; } public function handle(array $values): array { if (!isset($values['yootheme_apikey'])) { return $values; } if ( $this->user->authorise('core.edit', 'com_installer') && $this->user->authorise('core.manage', 'com_installer') ) { $this->apiKey->set($values['yootheme_apikey']); } unset($values['yootheme_apikey']); return $values; } } theme-joomla/src/Listener/LoadCustomizerScript.php000064400000001136151666572120016357 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Metadata; use YOOtheme\Path; class LoadCustomizerScript { public Metadata $metadata; public function __construct(Metadata $metadata) { $this->metadata = $metadata; } public function handle(): void { $this->metadata->set('style:customizer', [ 'href' => Path::get('../../assets/css/admin.css', __DIR__), ]); $this->metadata->set('script:customizer', [ 'src' => Path::get('../../app/customizer.min.js', __DIR__), 'defer' => true, ]); } } theme-joomla/src/Listener/LoadCustomizerContext.php000064400000001543151666572120016541 0ustar00<?php namespace YOOtheme\Theme\Joomla\Listener; use YOOtheme\Config; use YOOtheme\Theme\Joomla\ApiKey; use YOOtheme\Url; class LoadCustomizerContext { public Config $config; public ApiKey $apiKey; public function __construct(Config $config, ApiKey $apiKey) { $this->config = $config; $this->apiKey = $apiKey; } public function handle($event): void { $context = $event->getArgument('context'); $data = $event->getArgument('data'); if ($context !== 'com_templates.style') { return; } $this->config->add('customizer', [ 'context' => $context, 'apikey' => $this->apiKey->get(), 'url' => Url::route('customizer', [ 'templateStyle' => $data->id, 'format' => 'html', ]), ]); } } theme-joomla/src/ViewHelper.php000064400000001745151666572120012521 0ustar00<?php namespace YOOtheme\Theme\Joomla; use Joomla\CMS\HTML\HTMLHelper; use YOOtheme\Theme\ViewHelper as BaseViewHelper; class ViewHelper extends BaseViewHelper { /** * @inheritdoc */ public function image($url, array $attrs = []) { $url = (array) $url; $url[0] = $this->cleanImageUrl($url[0]); return parent::image($url, $attrs); } /** * @inheritdoc */ public function bgImage($url, array $params = []) { return parent::bgImage($this->cleanImageUrl($url), $params); } /** * @inheritdoc */ public function comImage($element, array $params = []) { if (!empty($element->attrs['src'])) { $element->attrs['src'] = $this->cleanImageUrl($element->attrs['src']); } parent::comImage($element, $params); } protected function cleanImageUrl($url) { return $this->isAbsolute($url) ? $url : HTMLHelper::_('cleanImageURL', $url)->url; } } theme-joomla/src/UrlLoader.php000064400000002700151666572120012330 0ustar00<?php namespace YOOtheme\Theme\Joomla; use YOOtheme\Url; class UrlLoader { public const REGEX_URL = '/ \s # match a space (?<attr>(?:data-)?(?:src|poster))= # match the attribute (["\']) # start with a single or double quote (?!\/|\#|[a-z0-9-.]+:) # make sure it is a relative path (?<url>[^"\'>]+) # match the actual src value \2 # match the previous quote /xiU'; public static function resolveRelativeUrl($name, $parameters, callable $next) { if (!is_string($content = $next($name, $parameters))) { return $content; } // Apply to root template view only if (empty($parameters['_root'])) { return $content; } // Ignore rendering builder with context 'content' if (isset($parameters['builder']) && ($parameters['context'] ?? '') === 'content') { return $content; } return preg_replace_callback( static::REGEX_URL, fn($matches) => sprintf( ' %s="%s"', $matches['attr'], htmlentities(Url::to(html_entity_decode($matches['url']))), ), $content, ); } } theme-joomla/app/customizer.min.js000064400003762207151666572120013265 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ var CQ=ke=>{throw TypeError(ke)};var Im=(ke,nr,Yc)=>nr.has(ke)?CQ("Cannot add the same private member more than once"):nr instanceof WeakSet?nr.add(ke):nr.set(ke,Yc);(function(ke,nr){"use strict";var Rp,Dp;const Yc="application/json",Lm="Content-Type",La=Symbol(),Rm=Symbol();function Dm(t={}){var e;const r=t instanceof Array?Object.fromEntries(t):t;return(e=Object.entries(r).find(([n])=>n.toLowerCase()===Lm.toLowerCase()))===null||e===void 0?void 0:e[1]}function Mm(t){return/^application\/.*json.*/.test(t)}const qi=function(t,e,r=!1){return Object.entries(e).reduce((n,[a,o])=>{const c=t[a];return Array.isArray(c)&&Array.isArray(o)?n[a]=r?[...c,...o]:o:typeof c=="object"&&typeof o=="object"?n[a]=qi(c,o,r):n[a]=o,n},{...t})},Ra={options:{},errorType:"text",polyfills:{},polyfill(t,e=!0,r=!1,...n){const a=this.polyfills[t]||(typeof self<"u"?self[t]:null)||(typeof global<"u"?global[t]:null);if(e&&!a)throw new Error(t+" is not defined");return r&&a?new a(...n):a}};function EC(t,e=!1){Ra.options=e?t:qi(Ra.options,t)}function TC(t,e=!1){Ra.polyfills=e?t:qi(Ra.polyfills,t)}function CC(t){Ra.errorType=t}const wC=t=>e=>t.reduceRight((r,n)=>n(r),e)||e;class $m extends Error{}const SC=t=>{const e=Object.create(null);t=t._addons.reduce((S,P)=>P.beforeRequest&&P.beforeRequest(S,t._options,e)||S,t);const{_url:r,_options:n,_config:a,_catchers:o,_resolvers:c,_middlewares:d,_addons:p}=t,v=new Map(o),b=qi(a.options,n);let C=r;const T=wC(d)((S,P)=>(C=S,a.polyfill("fetch")(S,P)))(r,b),A=new Error,F=T.catch(S=>{throw{[La]:S}}).then(S=>{var P;if(!S.ok){const R=new $m;if(R.cause=A,R.stack=R.stack+` CAUSE: `+A.stack,R.response=S,R.status=S.status,R.url=C,S.type==="opaque")throw R;const B=a.errorType==="json"||((P=S.headers.get("Content-Type"))===null||P===void 0?void 0:P.split(";")[0])==="application/json";return(a.errorType?B?S.text():S[a.errorType]():Promise.resolve(S.body)).then(le=>{throw R.message=typeof le=="string"?le:S.statusText,le&&(B&&typeof le=="string"?(R.text=le,R.json=JSON.parse(le)):R[a.errorType]=le),R})}return S}),G=S=>S.catch(P=>{const R=Object.prototype.hasOwnProperty.call(P,La),B=R?P[La]:P,q=B?.status&&v.get(B.status)||v.get(B?.name)||R&&v.has(La)&&v.get(La);if(q)return q(B,t);const le=v.get(Rm);if(le)return le(B,t);throw B}),j=S=>P=>G(S?F.then(R=>R&&R[S]()).then(R=>P?P(R):R):F.then(R=>P?P(R):R)),O={_wretchReq:t,_fetchReq:T,_sharedState:e,res:j(null),json:j("json"),blob:j("blob"),formData:j("formData"),arrayBuffer:j("arrayBuffer"),text:j("text"),error(S,P){return v.set(S,P),this},badRequest(S){return this.error(400,S)},unauthorized(S){return this.error(401,S)},forbidden(S){return this.error(403,S)},notFound(S){return this.error(404,S)},timeout(S){return this.error(408,S)},internalError(S){return this.error(500,S)},fetchError(S){return this.error(La,S)}},x=p.reduce((S,P)=>({...S,...typeof P.resolver=="function"?P.resolver(S):P.resolver}),O);return c.reduce((S,P)=>P(S,t),x)},xC={_url:"",_options:{},_config:Ra,_catchers:new Map,_resolvers:[],_deferred:[],_middlewares:[],_addons:[],addon(t){return{...this,_addons:[...this._addons,t],...t.wretch}},errorType(t){return{...this,_config:{...this._config,errorType:t}}},polyfills(t,e=!1){return{...this,_config:{...this._config,polyfills:e?t:qi(this._config.polyfills,t)}}},url(t,e=!1){if(e)return{...this,_url:t};const r=this._url.split("?");return{...this,_url:r.length>1?r[0]+t+"?"+r[1]:this._url+t}},options(t,e=!1){return{...this,_options:e?t:qi(this._options,t)}},headers(t){const e=t?Array.isArray(t)?Object.fromEntries(t):"entries"in t?Object.fromEntries(t.entries()):t:{};return{...this,_options:qi(this._options,{headers:e})}},accept(t){return this.headers({Accept:t})},content(t){return this.headers({[Lm]:t})},auth(t){return this.headers({Authorization:t})},catcher(t,e){const r=new Map(this._catchers);return r.set(t,e),{...this,_catchers:r}},catcherFallback(t){return this.catcher(Rm,t)},resolve(t,e=!1){return{...this,_resolvers:e?[t]:[...this._resolvers,t]}},defer(t,e=!1){return{...this,_deferred:e?[t]:[...this._deferred,t]}},middlewares(t,e=!1){return{...this,_middlewares:e?t:[...this._middlewares,...t]}},fetch(t=this._options.method,e="",r=null){let n=this.url(e).options({method:t});const a=Dm(n._options.headers),o=this._config.polyfill("FormData",!1),c=typeof r=="object"&&!(o&&r instanceof o)&&(!n._options.headers||!a||Mm(a));return n=r?c?n.json(r,a):n.body(r):n,SC(n._deferred.reduce((d,p)=>p(d,d._url,d._options),n))},get(t=""){return this.fetch("GET",t)},delete(t=""){return this.fetch("DELETE",t)},put(t,e=""){return this.fetch("PUT",e,t)},post(t,e=""){return this.fetch("POST",e,t)},patch(t,e=""){return this.fetch("PATCH",e,t)},head(t=""){return this.fetch("HEAD",t)},opts(t=""){return this.fetch("OPTIONS",t)},body(t){return{...this,_options:{...this._options,body:t}}},json(t,e){const r=Dm(this._options.headers);return this.content(e||Mm(r)&&r||Yc).body(JSON.stringify(t))}};function Yi(t="",e={}){return{...xC,_url:t,_options:e}}Yi.default=Yi,Yi.options=EC,Yi.errorType=CC,Yi.polyfills=TC,Yi.WretchError=$m;const AC=()=>({beforeRequest(t,e,r){const n=t._config.polyfill("AbortController",!1,!0);!e.signal&&n&&(e.signal=n.signal);const a={ref:null,clear(){a.ref&&(clearTimeout(a.ref),a.ref=null)}};return r.abort={timeout:a,fetchController:n},t},wretch:{signal(t){return{...this,_options:{...this._options,signal:t.signal}}}},resolver:{setTimeout(t,e=this._sharedState.abort.fetchController){const{timeout:r}=this._sharedState.abort;return r.clear(),r.ref=setTimeout(()=>e.abort(),t),this},controller(){return[this._sharedState.abort.fetchController,this]},onAbort(t){return this.error("AbortError",t)}}});function Fm(t,e=!1,r,n=r.polyfill("FormData",!0,!0),a=[]){return Object.entries(t).forEach(([o,c])=>{let d=a.reduce((p,v)=>p?`${p}[${v}]`:v,null);if(d=d?`${d}[${o}]`:o,c instanceof Array||globalThis.FileList&&c instanceof FileList)for(const p of c)n.append(d,p);else e&&typeof c=="object"&&(!(e instanceof Array)||!e.includes(o))?c!==null&&Fm(c,e,r,n,[...a,o]):n.append(d,c)}),n}const OC={wretch:{formData(t,e=!1){return this.body(Fm(t,e,this._config))}}};function Bm(t,e){return encodeURIComponent(t)+"="+encodeURIComponent(typeof e=="object"?JSON.stringify(e):""+e)}function NC(t){return Object.keys(t).map(e=>{const r=t[e];return r instanceof Array?r.map(n=>Bm(e,n)).join("&"):Bm(e,r)}).join("&")}const PC={wretch:{formUrl(t){return this.body(typeof t=="string"?t:NC(t)).content("application/x-www-form-urlencoded")}}};var Lu=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Da(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}function IC(t){if(Object.prototype.hasOwnProperty.call(t,"__esModule"))return t;var e=t.default;if(typeof e=="function"){var r=function n(){var a=!1;try{a=this instanceof n}catch{}return a?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};r.prototype=e.prototype}else r={};return Object.defineProperty(r,"__esModule",{value:!0}),Object.keys(t).forEach(function(n){var a=Object.getOwnPropertyDescriptor(t,n);Object.defineProperty(r,n,a.get?a:{enumerable:!0,get:function(){return t[n]}})}),r}var Ru={exports:{}},LC=Ru.exports,Hm;function RC(){return Hm||(Hm=1,(function(t,e){(function(r,n){t.exports=n()})(LC,function(){return function(r){return r===void 0&&(r=""),r.replace(/(\b|\B)\s+(\b|\B)/gm," ").replace(/(\B)\s+(\B)|(\b)\s+(\B)|(\B)\s+(\b)/gm,"").trim()}})})(Ru)),Ru.exports}RC();function DC(t){const e=/^(query|mutation|fragment)\s+(\w+)/,r={};for(const n of t){const a=n.match(e);if(a){const[,o,c]=a;r[o]={...r[o],[c]:n}}}return r}function MC({query:t,mutation:e,fragment:r}){const n={};for(const[a,o]of Object.entries({...t,...e}))n[a]=[o,...Object.values(Um(o,r))].join(" ");return n}function Um(t,e={}){const r={};for(const[n,a]of Object.entries(e))t.match(new RegExp(`\\.{3}${n}[\\s}]`))&&Object.assign(r,{[n]:a},Um(a,e));return r}function $C(t,{wretch:e,resolver:r}){return function(n){return e.post({query:t,variables:n}).json(r)}}class FC{constructor(e,r){for(const[n,a]of Object.entries(MC(DC(e))))this[n]=$C(a,r)}}const BC={wretch:{graphql(t,e){return new FC(t,{...e,wretch:this})}}},HC=(t,e,r,n)=>{let a;if(typeof e=="string")a=e;else{const c=n.polyfill("URLSearchParams",!0,!0);for(const[d,p]of Object.entries(e))if(Array.isArray(p))for(const v of p)c.append(`${d}[]`,v??"");else if(typeof p=="object"&&p!==null)for(const[v,b]of Object.entries(p))c.append(`${d}[${v}]`,b??"");else c.append(d,p??"");a=c.toString()}const o=t.split("?");return a?r||o.length<2?o[0]+"?"+a:t+"&"+a:r?o[0]:t},UC={wretch:{query(t,e=!1){return{...this,_url:HC(this._url,t,e,this._config)}}}};function Ks(t,e){return[...Ks.addons,AC(),OC,PC,UC,BC].reduce((r,n)=>r.addon(n),Yi(t,{...Ks.options,...e}))}var Ue=Object.assign(Ks,{addons:[],options:{}});function Du(t){"@babel/helpers - typeof";return Du=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Du(t)}var jC=/^\s+/,WC=/\s+$/;function Ne(t,e){if(t=t||"",e=e||{},t instanceof Ne)return t;if(!(this instanceof Ne))return new Ne(t,e);var r=GC(t);this._originalInput=t,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=Math.round(100*this._a)/100,this._format=e.format||r.format,this._gradientType=e.gradientType,this._r<1&&(this._r=Math.round(this._r)),this._g<1&&(this._g=Math.round(this._g)),this._b<1&&(this._b=Math.round(this._b)),this._ok=r.ok}Ne.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var e=this.toRgb();return(e.r*299+e.g*587+e.b*114)/1e3},getLuminance:function(){var e=this.toRgb(),r,n,a,o,c,d;return r=e.r/255,n=e.g/255,a=e.b/255,r<=.03928?o=r/12.92:o=Math.pow((r+.055)/1.055,2.4),n<=.03928?c=n/12.92:c=Math.pow((n+.055)/1.055,2.4),a<=.03928?d=a/12.92:d=Math.pow((a+.055)/1.055,2.4),.2126*o+.7152*c+.0722*d},setAlpha:function(e){return this._a=Ym(e),this._roundA=Math.round(100*this._a)/100,this},toHsv:function(){var e=Wm(this._r,this._g,this._b);return{h:e.h*360,s:e.s,v:e.v,a:this._a}},toHsvString:function(){var e=Wm(this._r,this._g,this._b),r=Math.round(e.h*360),n=Math.round(e.s*100),a=Math.round(e.v*100);return this._a==1?"hsv("+r+", "+n+"%, "+a+"%)":"hsva("+r+", "+n+"%, "+a+"%, "+this._roundA+")"},toHsl:function(){var e=jm(this._r,this._g,this._b);return{h:e.h*360,s:e.s,l:e.l,a:this._a}},toHslString:function(){var e=jm(this._r,this._g,this._b),r=Math.round(e.h*360),n=Math.round(e.s*100),a=Math.round(e.l*100);return this._a==1?"hsl("+r+", "+n+"%, "+a+"%)":"hsla("+r+", "+n+"%, "+a+"%, "+this._roundA+")"},toHex:function(e){return Gm(this._r,this._g,this._b,e)},toHexString:function(e){return"#"+this.toHex(e)},toHex8:function(e){return KC(this._r,this._g,this._b,this._a,e)},toHex8String:function(e){return"#"+this.toHex8(e)},toRgb:function(){return{r:Math.round(this._r),g:Math.round(this._g),b:Math.round(this._b),a:this._a}},toRgbString:function(){return this._a==1?"rgb("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+")":"rgba("+Math.round(this._r)+", "+Math.round(this._g)+", "+Math.round(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:Math.round(Tt(this._r,255)*100)+"%",g:Math.round(Tt(this._g,255)*100)+"%",b:Math.round(Tt(this._b,255)*100)+"%",a:this._a}},toPercentageRgbString:function(){return this._a==1?"rgb("+Math.round(Tt(this._r,255)*100)+"%, "+Math.round(Tt(this._g,255)*100)+"%, "+Math.round(Tt(this._b,255)*100)+"%)":"rgba("+Math.round(Tt(this._r,255)*100)+"%, "+Math.round(Tt(this._g,255)*100)+"%, "+Math.round(Tt(this._b,255)*100)+"%, "+this._roundA+")"},toName:function(){return this._a===0?"transparent":this._a<1?!1:sw[Gm(this._r,this._g,this._b,!0)]||!1},toFilter:function(e){var r="#"+zm(this._r,this._g,this._b,this._a),n=r,a=this._gradientType?"GradientType = 1, ":"";if(e){var o=Ne(e);n="#"+zm(o._r,o._g,o._b,o._a)}return"progid:DXImageTransform.Microsoft.gradient("+a+"startColorstr="+r+",endColorstr="+n+")"},toString:function(e){var r=!!e;e=e||this._format;var n=!1,a=this._a<1&&this._a>=0,o=!r&&a&&(e==="hex"||e==="hex6"||e==="hex3"||e==="hex4"||e==="hex8"||e==="name");return o?e==="name"&&this._a===0?this.toName():this.toRgbString():(e==="rgb"&&(n=this.toRgbString()),e==="prgb"&&(n=this.toPercentageRgbString()),(e==="hex"||e==="hex6")&&(n=this.toHexString()),e==="hex3"&&(n=this.toHexString(!0)),e==="hex4"&&(n=this.toHex8String(!0)),e==="hex8"&&(n=this.toHex8String()),e==="name"&&(n=this.toName()),e==="hsl"&&(n=this.toHslString()),e==="hsv"&&(n=this.toHsvString()),n||this.toHexString())},clone:function(){return Ne(this.toString())},_applyModification:function(e,r){var n=e.apply(null,[this].concat([].slice.call(r)));return this._r=n._r,this._g=n._g,this._b=n._b,this.setAlpha(n._a),this},lighten:function(){return this._applyModification(JC,arguments)},brighten:function(){return this._applyModification(ZC,arguments)},darken:function(){return this._applyModification(ew,arguments)},desaturate:function(){return this._applyModification(XC,arguments)},saturate:function(){return this._applyModification(VC,arguments)},greyscale:function(){return this._applyModification(QC,arguments)},spin:function(){return this._applyModification(tw,arguments)},_applyCombination:function(e,r){return e.apply(null,[this].concat([].slice.call(r)))},analogous:function(){return this._applyCombination(iw,arguments)},complement:function(){return this._applyCombination(rw,arguments)},monochromatic:function(){return this._applyCombination(aw,arguments)},splitcomplement:function(){return this._applyCombination(nw,arguments)},triad:function(){return this._applyCombination(qm,[3])},tetrad:function(){return this._applyCombination(qm,[4])}},Ne.fromRatio=function(t,e){if(Du(t)=="object"){var r={};for(var n in t)t.hasOwnProperty(n)&&(n==="a"?r[n]=t[n]:r[n]=Xs(t[n]));t=r}return Ne(t,e)};function GC(t){var e={r:0,g:0,b:0},r=1,n=null,a=null,o=null,c=!1,d=!1;return typeof t=="string"&&(t=cw(t)),Du(t)=="object"&&($n(t.r)&&$n(t.g)&&$n(t.b)?(e=zC(t.r,t.g,t.b),c=!0,d=String(t.r).substr(-1)==="%"?"prgb":"rgb"):$n(t.h)&&$n(t.s)&&$n(t.v)?(n=Xs(t.s),a=Xs(t.v),e=YC(t.h,n,a),c=!0,d="hsv"):$n(t.h)&&$n(t.s)&&$n(t.l)&&(n=Xs(t.s),o=Xs(t.l),e=qC(t.h,n,o),c=!0,d="hsl"),t.hasOwnProperty("a")&&(r=t.a)),r=Ym(r),{ok:c,format:t.format||d,r:Math.min(255,Math.max(e.r,0)),g:Math.min(255,Math.max(e.g,0)),b:Math.min(255,Math.max(e.b,0)),a:r}}function zC(t,e,r){return{r:Tt(t,255)*255,g:Tt(e,255)*255,b:Tt(r,255)*255}}function jm(t,e,r){t=Tt(t,255),e=Tt(e,255),r=Tt(r,255);var n=Math.max(t,e,r),a=Math.min(t,e,r),o,c,d=(n+a)/2;if(n==a)o=c=0;else{var p=n-a;switch(c=d>.5?p/(2-n-a):p/(n+a),n){case t:o=(e-r)/p+(e<r?6:0);break;case e:o=(r-t)/p+2;break;case r:o=(t-e)/p+4;break}o/=6}return{h:o,s:c,l:d}}function qC(t,e,r){var n,a,o;t=Tt(t,360),e=Tt(e,100),r=Tt(r,100);function c(v,b,C){return C<0&&(C+=1),C>1&&(C-=1),C<1/6?v+(b-v)*6*C:C<1/2?b:C<2/3?v+(b-v)*(2/3-C)*6:v}if(e===0)n=a=o=r;else{var d=r<.5?r*(1+e):r+e-r*e,p=2*r-d;n=c(p,d,t+1/3),a=c(p,d,t),o=c(p,d,t-1/3)}return{r:n*255,g:a*255,b:o*255}}function Wm(t,e,r){t=Tt(t,255),e=Tt(e,255),r=Tt(r,255);var n=Math.max(t,e,r),a=Math.min(t,e,r),o,c,d=n,p=n-a;if(c=n===0?0:p/n,n==a)o=0;else{switch(n){case t:o=(e-r)/p+(e<r?6:0);break;case e:o=(r-t)/p+2;break;case r:o=(t-e)/p+4;break}o/=6}return{h:o,s:c,v:d}}function YC(t,e,r){t=Tt(t,360)*6,e=Tt(e,100),r=Tt(r,100);var n=Math.floor(t),a=t-n,o=r*(1-e),c=r*(1-a*e),d=r*(1-(1-a)*e),p=n%6,v=[r,c,o,o,d,r][p],b=[d,r,r,c,o,o][p],C=[o,o,d,r,r,c][p];return{r:v*255,g:b*255,b:C*255}}function Gm(t,e,r,n){var a=[en(Math.round(t).toString(16)),en(Math.round(e).toString(16)),en(Math.round(r).toString(16))];return n&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0):a.join("")}function KC(t,e,r,n,a){var o=[en(Math.round(t).toString(16)),en(Math.round(e).toString(16)),en(Math.round(r).toString(16)),en(Km(n))];return a&&o[0].charAt(0)==o[0].charAt(1)&&o[1].charAt(0)==o[1].charAt(1)&&o[2].charAt(0)==o[2].charAt(1)&&o[3].charAt(0)==o[3].charAt(1)?o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0):o.join("")}function zm(t,e,r,n){var a=[en(Km(n)),en(Math.round(t).toString(16)),en(Math.round(e).toString(16)),en(Math.round(r).toString(16))];return a.join("")}Ne.equals=function(t,e){return!t||!e?!1:Ne(t).toRgbString()==Ne(e).toRgbString()},Ne.random=function(){return Ne.fromRatio({r:Math.random(),g:Math.random(),b:Math.random()})};function XC(t,e){e=e===0?0:e||10;var r=Ne(t).toHsl();return r.s-=e/100,r.s=Mu(r.s),Ne(r)}function VC(t,e){e=e===0?0:e||10;var r=Ne(t).toHsl();return r.s+=e/100,r.s=Mu(r.s),Ne(r)}function QC(t){return Ne(t).desaturate(100)}function JC(t,e){e=e===0?0:e||10;var r=Ne(t).toHsl();return r.l+=e/100,r.l=Mu(r.l),Ne(r)}function ZC(t,e){e=e===0?0:e||10;var r=Ne(t).toRgb();return r.r=Math.max(0,Math.min(255,r.r-Math.round(255*-(e/100)))),r.g=Math.max(0,Math.min(255,r.g-Math.round(255*-(e/100)))),r.b=Math.max(0,Math.min(255,r.b-Math.round(255*-(e/100)))),Ne(r)}function ew(t,e){e=e===0?0:e||10;var r=Ne(t).toHsl();return r.l-=e/100,r.l=Mu(r.l),Ne(r)}function tw(t,e){var r=Ne(t).toHsl(),n=(r.h+e)%360;return r.h=n<0?360+n:n,Ne(r)}function rw(t){var e=Ne(t).toHsl();return e.h=(e.h+180)%360,Ne(e)}function qm(t,e){if(isNaN(e)||e<=0)throw new Error("Argument to polyad must be a positive number");for(var r=Ne(t).toHsl(),n=[Ne(t)],a=360/e,o=1;o<e;o++)n.push(Ne({h:(r.h+o*a)%360,s:r.s,l:r.l}));return n}function nw(t){var e=Ne(t).toHsl(),r=e.h;return[Ne(t),Ne({h:(r+72)%360,s:e.s,l:e.l}),Ne({h:(r+216)%360,s:e.s,l:e.l})]}function iw(t,e,r){e=e||6,r=r||30;var n=Ne(t).toHsl(),a=360/r,o=[Ne(t)];for(n.h=(n.h-(a*e>>1)+720)%360;--e;)n.h=(n.h+a)%360,o.push(Ne(n));return o}function aw(t,e){e=e||6;for(var r=Ne(t).toHsv(),n=r.h,a=r.s,o=r.v,c=[],d=1/e;e--;)c.push(Ne({h:n,s:a,v:o})),o=(o+d)%1;return c}Ne.mix=function(t,e,r){r=r===0?0:r||50;var n=Ne(t).toRgb(),a=Ne(e).toRgb(),o=r/100,c={r:(a.r-n.r)*o+n.r,g:(a.g-n.g)*o+n.g,b:(a.b-n.b)*o+n.b,a:(a.a-n.a)*o+n.a};return Ne(c)},Ne.readability=function(t,e){var r=Ne(t),n=Ne(e);return(Math.max(r.getLuminance(),n.getLuminance())+.05)/(Math.min(r.getLuminance(),n.getLuminance())+.05)},Ne.isReadable=function(t,e,r){var n=Ne.readability(t,e),a,o;switch(o=!1,a=fw(r),a.level+a.size){case"AAsmall":case"AAAlarge":o=n>=4.5;break;case"AAlarge":o=n>=3;break;case"AAAsmall":o=n>=7;break}return o},Ne.mostReadable=function(t,e,r){var n=null,a=0,o,c,d,p;r=r||{},c=r.includeFallbackColors,d=r.level,p=r.size;for(var v=0;v<e.length;v++)o=Ne.readability(t,e[v]),o>a&&(a=o,n=Ne(e[v]));return Ne.isReadable(t,n,{level:d,size:p})||!c?n:(r.includeFallbackColors=!1,Ne.mostReadable(t,["#fff","#000"],r))};var Kc=Ne.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},sw=Ne.hexNames=ow(Kc);function ow(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}function Ym(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function Tt(t,e){uw(t)&&(t="100%");var r=lw(t);return t=Math.min(e,Math.max(0,parseFloat(t))),r&&(t=parseInt(t*e,10)/100),Math.abs(t-e)<1e-6?1:t%e/parseFloat(e)}function Mu(t){return Math.min(1,Math.max(0,t))}function Fr(t){return parseInt(t,16)}function uw(t){return typeof t=="string"&&t.indexOf(".")!=-1&&parseFloat(t)===1}function lw(t){return typeof t=="string"&&t.indexOf("%")!=-1}function en(t){return t.length==1?"0"+t:""+t}function Xs(t){return t<=1&&(t=t*100+"%"),t}function Km(t){return Math.round(parseFloat(t)*255).toString(16)}function Xm(t){return Fr(t)/255}var tn=(function(){var t="[-\\+]?\\d+%?",e="[-\\+]?\\d*\\.\\d+%?",r="(?:"+e+")|(?:"+t+")",n="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?",a="[\\s|\\(]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")[,|\\s]+("+r+")\\s*\\)?";return{CSS_UNIT:new RegExp(r),rgb:new RegExp("rgb"+n),rgba:new RegExp("rgba"+a),hsl:new RegExp("hsl"+n),hsla:new RegExp("hsla"+a),hsv:new RegExp("hsv"+n),hsva:new RegExp("hsva"+a),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}})();function $n(t){return!!tn.CSS_UNIT.exec(t)}function cw(t){t=t.replace(jC,"").replace(WC,"").toLowerCase();var e=!1;if(Kc[t])t=Kc[t],e=!0;else if(t=="transparent")return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=tn.rgb.exec(t))?{r:r[1],g:r[2],b:r[3]}:(r=tn.rgba.exec(t))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=tn.hsl.exec(t))?{h:r[1],s:r[2],l:r[3]}:(r=tn.hsla.exec(t))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=tn.hsv.exec(t))?{h:r[1],s:r[2],v:r[3]}:(r=tn.hsva.exec(t))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=tn.hex8.exec(t))?{r:Fr(r[1]),g:Fr(r[2]),b:Fr(r[3]),a:Xm(r[4]),format:e?"name":"hex8"}:(r=tn.hex6.exec(t))?{r:Fr(r[1]),g:Fr(r[2]),b:Fr(r[3]),format:e?"name":"hex"}:(r=tn.hex4.exec(t))?{r:Fr(r[1]+""+r[1]),g:Fr(r[2]+""+r[2]),b:Fr(r[3]+""+r[3]),a:Xm(r[4]+""+r[4]),format:e?"name":"hex8"}:(r=tn.hex3.exec(t))?{r:Fr(r[1]+""+r[1]),g:Fr(r[2]+""+r[2]),b:Fr(r[3]+""+r[3]),format:e?"name":"hex"}:!1}function fw(t){var e,r;return t=t||{level:"AA",size:"small"},e=(t.level||"AA").toUpperCase(),r=(t.size||"small").toLowerCase(),e!=="AA"&&e!=="AAA"&&(e="AA"),r!=="small"&&r!=="large"&&(r="small"),{level:e,size:r}}function Ma(t,e){e===void 0&&(e={});var r=e.insertAt;if(!(!t||typeof document>"u")){var n=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css",r==="top"&&n.firstChild?n.insertBefore(a,n.firstChild):n.appendChild(a),a.styleSheet?a.styleSheet.cssText=t:a.appendChild(document.createTextNode(t))}}var dw=".vc-checkerboard{background-size:contain;bottom:0;left:0;position:absolute;right:0;top:0}";Ma(dw);function Q(t,e,r,n,a,o,c,d){var p=typeof t=="function"?t.options:t;return e&&(p.render=e,p.staticRenderFns=r,p._compiled=!0),n&&(p.functional=!0),{exports:t,options:p}}let Xc={};const hw={name:"Checkboard",props:{size:{type:[Number,String],default:8},white:{type:String,default:"#fff"},grey:{type:String,default:"#e6e6e6"}},computed:{bgStyle(){return{"background-image":"url("+mw(this.white,this.grey,this.size)+")"}}}};function pw(t,e,r){if(typeof document>"u")return null;var n=document.createElement("canvas");n.width=n.height=r*2;var a=n.getContext("2d");return a?(a.fillStyle=t,a.fillRect(0,0,n.width,n.height),a.fillStyle=e,a.fillRect(0,0,r,r),a.translate(r,r),a.fillRect(0,0,r,r),n.toDataURL()):null}function mw(t,e,r){var n=t+","+e+","+r;if(Xc[n])return Xc[n];var a=pw(t,e,r);return Xc[n]=a,a}var vw=function(){var e=this,r=e._self._c;return r("div",{staticClass:"vc-checkerboard",style:e.bgStyle})},gw=[],_w=Q(hw,vw,gw,!1),Vm=_w.exports,bw=".vc-alpha,.vc-alpha-checkboard-wrap{bottom:0;left:0;position:absolute;right:0;top:0}.vc-alpha-checkboard-wrap{overflow:hidden}.vc-alpha-gradient{bottom:0;left:0;position:absolute;right:0;top:0}.vc-alpha-container{cursor:pointer;height:100%;margin:0 3px;position:relative;z-index:2}.vc-alpha-pointer{position:absolute;z-index:2}.vc-alpha-picker{background:#fff;border-radius:1px;box-shadow:0 0 2px rgba(0,0,0,.6);cursor:pointer;height:8px;margin-top:1px;transform:translateX(-2px);width:4px}";Ma(bw);const yw={name:"Alpha",props:{value:Object,onChange:Function},components:{checkboard:Vm},computed:{colors(){return this.value},gradientColor(){var t=this.colors.rgba,e=[t.r,t.g,t.b].join(",");return"linear-gradient(to right, rgba("+e+", 0) 0%, rgba("+e+", 1) 100%)"}},methods:{handleChange(t,e){!e&&t.preventDefault();var r=this.$refs.container;if(r){var n=r.clientWidth,a=r.getBoundingClientRect().left+window.pageXOffset,o=t.pageX||(t.touches?t.touches[0].pageX:0),c=o-a,d;c<0?d=0:c>n?d=1:d=Math.round(c*100/n)/100,this.colors.a!==d&&this.$emit("change",{h:this.colors.hsl.h,s:this.colors.hsl.s,l:this.colors.hsl.l,a:d,source:"rgba"})}},handleMouseDown(t){this.handleChange(t,!0),window.addEventListener("mousemove",this.handleChange),window.addEventListener("mouseup",this.handleMouseUp)},handleMouseUp(){this.unbindEventListeners()},unbindEventListeners(){window.removeEventListener("mousemove",this.handleChange),window.removeEventListener("mouseup",this.handleMouseUp)}}};var kw=function(){var e=this,r=e._self._c;return r("div",{staticClass:"vc-alpha"},[r("div",{staticClass:"vc-alpha-checkboard-wrap"},[r("checkboard")],1),e._v(" "),r("div",{staticClass:"vc-alpha-gradient",style:{background:e.gradientColor}}),e._v(" "),r("div",{ref:"container",staticClass:"vc-alpha-container",on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[r("div",{staticClass:"vc-alpha-pointer",style:{left:e.colors.a*100+"%"}},[r("div",{staticClass:"vc-alpha-picker"})])])])},Ew=[],Tw=Q(yw,kw,Ew,!1),Cw=Tw.exports,ww=".vc-editable-input{position:relative}.vc-input__input{border:0;outline:none;padding:0}.vc-input__label{text-transform:capitalize}";Ma(ww);const Sw={name:"editableInput",props:{label:String,labelText:String,desc:String,value:[String,Number],max:Number,min:Number,arrowOffset:{type:Number,default:1}},computed:{val:{get(){return this.value},set(t){if(this.max!==void 0&&+t>this.max)this.$refs.input.value=this.max;else return t}},labelId(){return`input__label__${this.label}__${Math.random().toString().slice(2,5)}`},labelSpanText(){return this.labelText||this.label}},methods:{update(t){this.handleChange(t.target.value)},handleChange(t){let e={};e[this.label]=t,e.hex===void 0&&e["#"]===void 0?this.$emit("change",e):t.length>5&&this.$emit("change",e)},handleKeyDown(t){let e=this.val,r=Number(e);if(r){let n=this.arrowOffset||1;t.keyCode===38&&(e=r+n,this.handleChange(e),t.preventDefault()),t.keyCode===40&&(e=r-n,this.handleChange(e),t.preventDefault())}}}};var xw=function(){var e=this,r=e._self._c;return r("div",{staticClass:"vc-editable-input"},[r("input",{directives:[{name:"model",rawName:"v-model",value:e.val,expression:"val"}],ref:"input",staticClass:"vc-input__input",attrs:{"aria-labelledby":e.labelId},domProps:{value:e.val},on:{keydown:e.handleKeyDown,input:[function(n){n.target.composing||(e.val=n.target.value)},e.update]}}),e._v(" "),r("span",{staticClass:"vc-input__label",attrs:{for:e.label,id:e.labelId}},[e._v(e._s(e.labelSpanText))]),e._v(" "),r("span",{staticClass:"vc-input__desc"},[e._v(e._s(e.desc))])])},Aw=[],Ow=Q(Sw,xw,Aw,!1),Nw=Ow.exports,Pw=".vc-hue{border-radius:2px;bottom:0;left:0;position:absolute;right:0;top:0}.vc-hue--horizontal{background:linear-gradient(90deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vc-hue--vertical{background:linear-gradient(0deg,red 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,red)}.vc-hue-container{cursor:pointer;height:100%;margin:0 2px;position:relative}.vc-hue-pointer{position:absolute;z-index:2}.vc-hue-picker{background:#fff;border-radius:1px;box-shadow:0 0 2px rgba(0,0,0,.6);cursor:pointer;height:8px;margin-top:1px;transform:translateX(-2px);width:4px}";Ma(Pw);const Iw={name:"Hue",props:{value:Object,direction:{type:String,default:"horizontal"}},data(){return{oldHue:0,pullDirection:""}},computed:{colors(){const t=this.value.hsl.h;return t!==0&&t-this.oldHue>0&&(this.pullDirection="right"),t!==0&&t-this.oldHue<0&&(this.pullDirection="left"),this.oldHue=t,this.value},directionClass(){return{"vc-hue--horizontal":this.direction==="horizontal","vc-hue--vertical":this.direction==="vertical"}},pointerTop(){return this.direction==="vertical"?this.colors.hsl.h===0&&this.pullDirection==="right"?0:-(this.colors.hsl.h*100/360)+100+"%":0},pointerLeft(){return this.direction==="vertical"?0:this.colors.hsl.h===0&&this.pullDirection==="right"?"100%":this.colors.hsl.h*100/360+"%"}},methods:{handleChange(t,e){!e&&t.preventDefault();var r=this.$refs.container;if(r){var n=r.clientWidth,a=r.clientHeight,o=r.getBoundingClientRect().left+window.pageXOffset,c=r.getBoundingClientRect().top+window.pageYOffset,d=t.pageX||(t.touches?t.touches[0].pageX:0),p=t.pageY||(t.touches?t.touches[0].pageY:0),v=d-o,b=p-c,C,T;this.direction==="vertical"?(b<0?C=360:b>a?C=0:(T=-(b*100/a)+100,C=360*T/100),this.colors.hsl.h!==C&&this.$emit("change",{h:C,s:this.colors.hsl.s,l:this.colors.hsl.l,a:this.colors.hsl.a,source:"hsl"})):(v<0?C=0:v>n?C=360:(T=v*100/n,C=360*T/100),this.colors.hsl.h!==C&&this.$emit("change",{h:C,s:this.colors.hsl.s,l:this.colors.hsl.l,a:this.colors.hsl.a,source:"hsl"}))}},handleMouseDown(t){this.handleChange(t,!0),window.addEventListener("mousemove",this.handleChange),window.addEventListener("mouseup",this.handleMouseUp)},handleMouseUp(t){this.unbindEventListeners()},unbindEventListeners(){window.removeEventListener("mousemove",this.handleChange),window.removeEventListener("mouseup",this.handleMouseUp)}}};var Lw=function(){var e=this,r=e._self._c;return r("div",{class:["vc-hue",e.directionClass]},[r("div",{ref:"container",staticClass:"vc-hue-container",attrs:{role:"slider","aria-valuenow":e.colors.hsl.h,"aria-valuemin":"0","aria-valuemax":"360"},on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[r("div",{staticClass:"vc-hue-pointer",style:{top:e.pointerTop,left:e.pointerLeft},attrs:{role:"presentation"}},[r("div",{staticClass:"vc-hue-picker"})])])])},Rw=[],Dw=Q(Iw,Lw,Rw,!1),Mw=Dw.exports,Vc,Qm;function $w(){if(Qm)return Vc;Qm=1,Vc=t;function t(e,r,n){return r<n?e<r?r:e>n?n:e:e<n?n:e>r?r:e}return Vc}var Fw=$w(),Qc=Da(Fw),Jc,Jm;function Bw(){if(Jm)return Jc;Jm=1;var t="Expected a function",e=NaN,r="[object Symbol]",n=/^\s+|\s+$/g,a=/^[-+]0x[0-9a-f]+$/i,o=/^0b[01]+$/i,c=/^0o[0-7]+$/i,d=parseInt,p=typeof Lu=="object"&&Lu&&Lu.Object===Object&&Lu,v=typeof self=="object"&&self&&self.Object===Object&&self,b=p||v||Function("return this")(),C=Object.prototype,T=C.toString,A=Math.max,F=Math.min,G=function(){return b.Date.now()};function j(B,q,le){var ae,Z,ne,U,N,W,E=0,ee=!1,V=!1,fe=!0;if(typeof B!="function")throw new TypeError(t);q=R(q)||0,x(le)&&(ee=!!le.leading,V="maxWait"in le,ne=V?A(R(le.maxWait)||0,q):ne,fe="trailing"in le?!!le.trailing:fe);function he(Se){var Le=ae,xe=Z;return ae=Z=void 0,E=Se,U=B.apply(xe,Le),U}function Ie(Se){return E=Se,N=setTimeout(We,q),ee?he(Se):U}function Ge(Se){var Le=Se-W,xe=Se-E,Ee=q-Le;return V?F(Ee,ne-xe):Ee}function He(Se){var Le=Se-W,xe=Se-E;return W===void 0||Le>=q||Le<0||V&&xe>=ne}function We(){var Se=G();if(He(Se))return at(Se);N=setTimeout(We,Ge(Se))}function at(Se){return N=void 0,fe&&ae?he(Se):(ae=Z=void 0,U)}function Ve(){N!==void 0&&clearTimeout(N),E=0,ae=W=Z=N=void 0}function Pe(){return N===void 0?U:at(G())}function Te(){var Se=G(),Le=He(Se);if(ae=arguments,Z=this,W=Se,Le){if(N===void 0)return Ie(W);if(V)return N=setTimeout(We,q),he(W)}return N===void 0&&(N=setTimeout(We,q)),U}return Te.cancel=Ve,Te.flush=Pe,Te}function O(B,q,le){var ae=!0,Z=!0;if(typeof B!="function")throw new TypeError(t);return x(le)&&(ae="leading"in le?!!le.leading:ae,Z="trailing"in le?!!le.trailing:Z),j(B,q,{leading:ae,maxWait:q,trailing:Z})}function x(B){var q=typeof B;return!!B&&(q=="object"||q=="function")}function S(B){return!!B&&typeof B=="object"}function P(B){return typeof B=="symbol"||S(B)&&T.call(B)==r}function R(B){if(typeof B=="number")return B;if(P(B))return e;if(x(B)){var q=typeof B.valueOf=="function"?B.valueOf():B;B=x(q)?q+"":q}if(typeof B!="string")return B===0?B:+B;B=B.replace(n,"");var le=o.test(B);return le||c.test(B)?d(B.slice(2),le?2:8):a.test(B)?e:+B}return Jc=O,Jc}var Hw=Bw(),Uw=Da(Hw),jw=".vc-saturation,.vc-saturation--black,.vc-saturation--white{bottom:0;cursor:pointer;left:0;position:absolute;right:0;top:0}.vc-saturation--white{background:linear-gradient(90deg,#fff,hsla(0,0%,100%,0))}.vc-saturation--black{background:linear-gradient(0deg,#000,transparent)}.vc-saturation-pointer{cursor:pointer;position:absolute}.vc-saturation-circle{border-radius:50%;box-shadow:0 0 0 1.6px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);cursor:pointer;height:4px;transform:translate(-2px,-2px);width:4px}";Ma(jw);const Ww={name:"Saturation",props:{value:Object},computed:{colors(){return this.value},bgColor(){return`hsl(${this.colors.hsv.h}, 100%, 50%)`},pointerTop(){return-(this.colors.hsv.v*100)+1+100+"%"},pointerLeft(){return this.colors.hsv.s*100+"%"}},beforeDestroy(){this.unbindEventListeners()},methods:{throttle:Uw((t,e)=>{t(e)},20,{leading:!0,trailing:!1}),handleChange(t,e){!e&&t.preventDefault();var r=this.$refs.container;if(r){var n=r.clientWidth,a=r.clientHeight,o=r.getBoundingClientRect().left+window.pageXOffset,c=r.getBoundingClientRect().top+window.pageYOffset,d=t.pageX||(t.touches?t.touches[0].pageX:0),p=t.pageY||(t.touches?t.touches[0].pageY:0),v=Qc(d-o,0,n),b=Qc(p-c,0,a),C=v/n,T=Qc(-(b/a)+1,0,1);this.throttle(this.onChange,{h:this.colors.hsv.h,s:C,v:T,a:this.colors.hsv.a,source:"hsva"})}},onChange(t){this.$emit("change",t)},handleMouseDown(t){window.addEventListener("mousemove",this.handleChange),window.addEventListener("mouseup",this.handleChange),window.addEventListener("mouseup",this.handleMouseUp)},handleMouseUp(t){this.unbindEventListeners()},unbindEventListeners(){window.removeEventListener("mousemove",this.handleChange),window.removeEventListener("mouseup",this.handleChange),window.removeEventListener("mouseup",this.handleMouseUp)}}};var Gw=function(){var e=this,r=e._self._c;return r("div",{ref:"container",staticClass:"vc-saturation",style:{background:e.bgColor},on:{mousedown:e.handleMouseDown,touchmove:e.handleChange,touchstart:e.handleChange}},[r("div",{staticClass:"vc-saturation--white"}),e._v(" "),r("div",{staticClass:"vc-saturation--black"}),e._v(" "),r("div",{staticClass:"vc-saturation-pointer",style:{top:e.pointerTop,left:e.pointerLeft}},[r("div",{staticClass:"vc-saturation-circle"})])])},zw=[],qw=Q(Ww,Gw,zw,!1),Yw=qw.exports;function Zc(t,e){var r=t&&t.a,n;t&&t.hsl?n=Ne(t.hsl):t&&t.hex&&t.hex.length>0?n=Ne(t.hex):t&&t.hsv?n=Ne(t.hsv):t&&t.rgba?n=Ne(t.rgba):t&&t.rgb?n=Ne(t.rgb):n=Ne(t),n&&(n._a===void 0||n._a===null)&&n.setAlpha(r||1);var a=n.toHsl(),o=n.toHsv();return a.s===0&&(o.h=a.h=t.h||t.hsl&&t.hsl.h||e||0),{hsl:a,hex:n.toHexString().toUpperCase(),hex8:n.toHex8String().toUpperCase(),rgba:n.toRgb(),hsv:o,oldHue:t.h||e||a.h,source:t.source,a:t.a||n.getAlpha()}}var Kw={props:["value"],data(){return{val:Zc(this.value)}},computed:{colors:{get(){return this.val},set(t){this.val=t,this.$emit("input",t)}}},watch:{value(t){this.val=Zc(t)}},methods:{colorChange(t,e){this.oldHue=this.colors.hsl.h,this.colors=Zc(t,e||this.oldHue)},isValidHex(t){return Ne(t).isValid()},simpleCheckForValidColor(t){for(var e=["r","g","b","a","h","s","l","v"],r=0,n=0,a=0;a<e.length;a++){var o=e[a];t[o]&&(r++,isNaN(t[o])||n++)}if(r===n)return t},paletteUpperCase(t){return t.map(e=>e.toUpperCase())},isTransparent(t){return Ne(t).getAlpha()===0}}};const Xw={name:"ColorPicker",components:{Saturation:Yw,Hue:Mw,Alpha:Cw,EditableInput:Nw,Checkboard:Vm},mixins:[{...Kw,computed:{colors:{get(){return this.val},set(t){if(this.val=t,this.disableSaturation&&t.source==="hsl"&&(t.hsl.s!==1||t.hsl.l!==.5)){this.colorChange({h:t.hsl.h,s:1,l:.5,source:"hsl"});return}const e=Zm(this.keywordField)===t.hex8;e&&!tS(this.keywordField)?this.$emit("input",this.keywordField):this.$emit("input",Vw(t,this.index)),e||(this.keywordField=t.a<1?t.hex8:t.hex)}}}}],props:{value:{type:String,default:""},allowEmpty:{type:Boolean,default:!0},disableAlpha:{type:Boolean,default:!1},disableFields:{type:Boolean,default:!1},disableSaturation:{type:Boolean,default:!1}},data:({value:t})=>({index:Qw(t),keywordField:ev(t)||tv(t)?eS(t)?Zm(t):Zw(t):t}),computed:{hsl(){const{h:t,s:e,l:r}=this.colors.hsl;return{h:t.toFixed(),s:`${(e*100).toFixed()}%`,l:`${(r*100).toFixed()}%`}},isValidColor(){return Ki(this.value)||""}},created(){this.current=this.value},mounted(){ke.on(this.$el,"pointerdown",t=>t.target.setPointerCapture(t.pointerId)),ke.on(this.$el,"pointerup pointercancel",t=>t.target.releasePointerCapture(t.pointerId))},methods:{toRgb:Jw,inputChange(t){if(t.r||t.g||t.b||t.a)this.colorChange({r:t.r||this.colors.rgba.r,g:t.g||this.colors.rgba.g,b:t.b||this.colors.rgba.b,a:t.a||this.colors.rgba.a,source:"rgba"});else if(t.h||t.s||t.l){const e=t.s?t.s.replace("%","")/100:this.colors.hsl.s,r=t.l?t.l.replace("%","")/100:this.colors.hsl.l;this.colorChange({h:t.h||this.colors.hsl.h,s:e,l:r,source:"hsl"})}},keywordChange({target:{value:t}}){this.keywordField=t,this.colorChange(t)},setEmpty(){this.$emit("input",void 0),this.keywordField=""}}};function Vw(t,e){return t=Ne(t.hsv),e===0&&t.getAlpha()===1?t.toHexString().toUpperCase():e<2?t.toRgbString():t.toHslString()}function Qw(t){if(t&&Ki(t)){if(tv(t))return 2;if(ev(t))return 1}return 0}function Jw(t){return Ne(t).toRgbString()}function Zw(t){return Ne(t).toHexString().toUpperCase()}function Zm(t){return Ne(t).toHex8String().toUpperCase()}function Ki(t){return Ne(t).isValid()}function eS(t){return Ki(t)&&Ne(t).getAlpha()<1}function tS(t){return Ki(t)&&t.match(/^#(([\da-f]{2}){2,4}|[\da-f]{3})$/i)}function ev(t){return Ki(t)&&t.match(/^rgb/i)}function tv(t){return Ki(t)&&t.match(/^hsl/i)}var rS=function(){var e=this,r=e._self._c;return r("div",{class:["vc-yootheme"]},[e.disableSaturation?e._e():r("div",{staticClass:"vc-yootheme-saturation-wrap"},[r("Saturation",{attrs:{value:e.colors},on:{change:e.colorChange}})],1),e._v(" "),r("div",{staticClass:"vc-yootheme-controls"},[r("div",{staticClass:"vc-yootheme-sliders"},[r("div",{staticClass:"vc-yootheme-hue-wrap"},[r("Hue",{attrs:{value:e.colors},on:{change:e.colorChange}})],1),e._v(" "),e.disableAlpha?e._e():r("div",{staticClass:"vc-yootheme-alpha-wrap"},[r("Alpha",{attrs:{value:e.colors},on:{change:e.colorChange}})],1)]),e._v(" "),r("div",{staticClass:"vc-yootheme-color-wrap"},[r("div",{staticClass:"vc-yootheme-active-color",class:{"vc-yootheme-nocolor":!e.isValidColor},style:{backgroundColor:e.toRgb(e.colors.hex8)}}),e._v(" "),r("div",{staticClass:"vc-yootheme-previous-color",class:{"vc-yootheme-nocolor":!e.current},style:{backgroundColor:e.toRgb(e.current)},on:{click:function(n){e.current?e.colorChange(e.current):e.setEmpty()}}}),e._v(" "),r("Checkboard")],1),e._v(" "),e.allowEmpty&&e.disableFields?r("div",{staticClass:"vc-yootheme-nocolor-box vc-yootheme-nocolor",on:{click:e.setEmpty}}):e._e()]),e._v(" "),e.disableFields?e._e():r("div",{staticClass:"vc-yootheme-fields",on:{keypress:function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"enter",13,n.key,"Enter")?null:e.$emit("resolve")}}},[e.index===0?[r("div",{staticClass:"vc-yootheme-field",on:{"!input":function(n){return e.keywordChange.apply(null,arguments)}}},[r("EditableInput",{attrs:{value:e.keywordField,label:e.$t("hex / keyword")}})],1)]:e._e(),e._v(" "),e.index===1?[r("div",{staticClass:"vc-yootheme-field"},[r("EditableInput",{attrs:{value:e.isValidColor&&e.colors.rgba.r,label:e.$t("r")},on:{change:e.inputChange}})],1),e._v(" "),r("div",{staticClass:"vc-yootheme-field"},[r("EditableInput",{attrs:{value:e.isValidColor&&e.colors.rgba.g,label:e.$t("g")},on:{change:e.inputChange}})],1),e._v(" "),r("div",{staticClass:"vc-yootheme-field"},[r("EditableInput",{attrs:{value:e.isValidColor&&e.colors.rgba.b,label:e.$t("b")},on:{change:e.inputChange}})],1),e._v(" "),e.disableAlpha?e._e():r("div",{staticClass:"vc-yootheme-field"},[r("EditableInput",{attrs:{value:e.isValidColor&&e.colors.a,"arrow-offset":.01,max:1,label:e.$t("a")},on:{change:e.inputChange}})],1)]:e._e(),e._v(" "),e.index===2?[r("div",{staticClass:"vc-yootheme-field"},[r("EditableInput",{attrs:{value:e.isValidColor&&e.hsl.h,label:e.$t("h")},on:{change:e.inputChange}})],1),e._v(" "),r("div",{staticClass:"vc-yootheme-field"},[r("EditableInput",{attrs:{value:e.isValidColor&&e.hsl.s,label:e.$t("s")},on:{change:e.inputChange}})],1),e._v(" "),r("div",{staticClass:"vc-yootheme-field"},[r("EditableInput",{attrs:{value:e.isValidColor&&e.hsl.l,label:e.$t("l")},on:{change:e.inputChange}})],1),e._v(" "),e.disableAlpha?e._e():r("div",{staticClass:"vc-yootheme-field"},[r("EditableInput",{attrs:{value:e.isValidColor&&e.colors.a,"arrow-offset":.01,max:1,label:e.$t("a")},on:{change:e.inputChange}})],1)]:e._e(),e._v(" "),r("div",{on:{click:function(n){n.preventDefault(),e.index=(e.index+1)%3}}},[r("div",{staticClass:"vc-yootheme-toggle-icon"},[r("svg",{attrs:{width:"10",height:"18",viewbox:"0 0 10 18"}},[r("path",{attrs:{fill:"#333",d:"M5,15.17 L1.83,12 L0.42,13.41 L5,18 L9.59,13.41 L8.17,12 L5,15.17 Z M5,2.83 L8.17,6 L9.58,4.59 L5,0 L0.41,4.59 L1.83,6 L5,2.83 Z"}})])])]),e._v(" "),e.allowEmpty?r("div",{staticClass:"vc-yootheme-nocolor-box vc-yootheme-nocolor",on:{click:e.setEmpty}}):e._e()],2)])},nS=[],iS=Q(Xw,rS,nS,!1),ef=iS.exports;const $u={none:"",inset:"",offsetX:"1px",offsetY:"1px",blur:"0",spread:"0",color:""},aS={components:{ColorPicker:ef},props:{value:{type:String,default:""},fields:{type:Array,default:()=>["inset","offsetX","offsetY","blur","spread","color"]}},computed:{shadow(){return rv(this.value)}},methods:{hasField(t){return this.fields.includes(t)},input(){this.$emit("input",this.shadow.color&&this.fields.map(t=>this.shadow[t]||$u[t]).join(" ").trim()||"none")}}};function rv(t=""){const e={...$u},r=t.split(/,(?![^(]*\))/)[0].split(/ +(?![^(]*\))/);return r[0]==="none"&&(e.none=r.shift()),r[0]==="inset"&&(e.inset=r.shift()),e.color=r.pop()||$u.color,["offsetX","offsetY","blur","spread"].forEach(n=>e[n]=r.shift()||$u[n]),e}var sS=function(){var e=this,r=e._self._c;return r("div",[r("div",{staticClass:"uk-form-stacked uk-grid uk-grid-small uk-child-width-expand uk-flex-nowrap uk-margin-small-bottom yo-colorpicker-boxshadow"},[e.hasField("offsetX")?r("div",[r("div",{staticClass:"uk-panel"},[r("label",{staticClass:"uk-form-label",attrs:{for:"form-boxshadow-offset-x"}},[e._v(e._s(e.$t("X")))]),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:e.shadow.offsetX,expression:"shadow.offsetX"}],staticClass:"uk-input uk-form-small",attrs:{id:"form-boxshadow-offset-x",type:"text"},domProps:{value:e.shadow.offsetX},on:{input:[function(n){n.target.composing||e.$set(e.shadow,"offsetX",n.target.value)},e.input]}})])]):e._e(),e._v(" "),e.hasField("offsetY")?r("div",[r("div",{staticClass:"uk-panel"},[r("label",{staticClass:"uk-form-label",attrs:{for:"form-boxshadow-offset-y"}},[e._v(e._s(e.$t("Y")))]),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:e.shadow.offsetY,expression:"shadow.offsetY"}],staticClass:"uk-input uk-form-small",attrs:{id:"form-boxshadow-offset-y",type:"text"},domProps:{value:e.shadow.offsetY},on:{input:[function(n){n.target.composing||e.$set(e.shadow,"offsetY",n.target.value)},e.input]}})])]):e._e(),e._v(" "),e.hasField("blur")?r("div",[r("div",{staticClass:"uk-panel"},[r("label",{staticClass:"uk-form-label",attrs:{for:"form-boxshadow-blur"}},[e._v(e._s(e.$t("Blur")))]),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:e.shadow.blur,expression:"shadow.blur"}],staticClass:"uk-input uk-form-small",attrs:{id:"form-boxshadow-blur",type:"text"},domProps:{value:e.shadow.blur},on:{input:[function(n){n.target.composing||e.$set(e.shadow,"blur",n.target.value)},e.input]}})])]):e._e(),e._v(" "),e.hasField("spread")?r("div",[r("div",{staticClass:"uk-panel"},[r("label",{staticClass:"uk-form-label",attrs:{for:"form-boxshadow-spread"}},[e._v(e._s(e.$t("Spread")))]),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:e.shadow.spread,expression:"shadow.spread"}],staticClass:"uk-input uk-form-small",attrs:{id:"form-boxshadow-spread",type:"text"},domProps:{value:e.shadow.spread},on:{input:[function(n){n.target.composing||e.$set(e.shadow,"spread",n.target.value)},e.input]}})])]):e._e(),e._v(" "),e.hasField("inset")?r("div",[r("div",{staticClass:"uk-panel uk-text-center"},[r("label",{staticClass:"uk-form-label",attrs:{for:"form-boxshadow-inset"}},[e._v(e._s(e.$t("Inset")))]),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:e.shadow.inset,expression:"shadow.inset"}],staticClass:"uk-checkbox uk-margin-remove",attrs:{id:"form-boxshadow-inset","true-value":"inset","false-value":"",type:"checkbox"},domProps:{checked:Array.isArray(e.shadow.inset)?e._i(e.shadow.inset,null)>-1:e._q(e.shadow.inset,"inset")},on:{change:[function(n){var a=e.shadow.inset,o=n.target,c=o.checked?"inset":"";if(Array.isArray(a)){var d=null,p=e._i(a,d);o.checked?p<0&&e.$set(e.shadow,"inset",a.concat([d])):p>-1&&e.$set(e.shadow,"inset",a.slice(0,p).concat(a.slice(p+1)))}else e.$set(e.shadow,"inset",c)},e.input]}})])]):e._e()]),e._v(" "),e.hasField("color")?r("ColorPicker",{on:{input:e.input},model:{value:e.shadow.color,callback:function(n){e.$set(e.shadow,"color",n)},expression:"shadow.color"}}):e._e()],1)},oS=[],uS=Q(aS,sS,oS,!1),nv=uS.exports;const lS={data:()=>({hover:!1})};var cS=function(){var e=this,r=e._self._c;return r("div",{class:{"uk-dragover":e.hover},on:{dragenter:function(n){n.stopPropagation(),n.preventDefault()},dragover:function(n){n.stopPropagation(),n.preventDefault(),e.hover=!0},dragleave:function(n){n.stopPropagation(),n.preventDefault(),e.hover=!1},drop:function(n){n.stopPropagation(),n.preventDefault(),e.$emit("drop",n),e.hover=!1}}},[e._t("default")],2)},fS=[],dS=Q(lS,cS,fS,!1),tf=dS.exports;const hS={name:"Dropdown",provide(){return{Dropdown:this}},props:{component:{type:Function,required:!0},props:{type:Object,required:!0}},data:()=>({classes:""}),beforeDestroy(){this.dropdown?.$destroy(!0)},methods:{show(t,e={}){return ke.hasClass(t.nextElementSibling,"uk-dropdown")?(ke.trigger(t.nextElementSibling,"toggle"),Promise.resolve()):(this.classes=`uk-open ${e.classes??""}`,this.dropdown=nr.drop(ke.after(t,this.$el),{toggle:!1,mode:"click",animation:!1,stretch:"x",boundaryX:t,autoUpdate:!1,target:t,...e}),this.dropdown.targetEl=t,this.dropdown.show(),new Promise((r,n)=>{this.promise={resolve:r,reject:n}}))},hide(){return this.dropdown?.hide(!1)},hidden(){this.promise.resolve(),this.$nextTick(this.$destroy)},resolve(t){this.promise.resolve(t),this.hide()},reject(t){this.promise.reject(t),this.hide()}}};var pS=function(){var e=this,r=e._self._c;return r("div",{class:["uk-dropdown","uk-drop",e.classes],on:{show:function(n){return n.target!==n.currentTarget?null:e.$emit("show")},hide:function(n){return n.target!==n.currentTarget?null:e.$emit("hide")},hidden:function(n){return n.target!==n.currentTarget?null:e.hidden.apply(null,arguments)}}},[r(e.component,e._b({tag:"component",on:{resolve:e.resolve,reject:e.reject}},"component",e.props,!1))],1)},mS=[],vS=Q(hS,pS,mS,!1),iv=vS.exports,av={exports:{}},Fu={exports:{}},gS=Fu.exports,sv;function En(){return sv||(sv=1,(function(t,e){(function(r,n){t.exports=n()})(gS,(function(){var r=navigator.userAgent,n=navigator.platform,a=/gecko\/\d/i.test(r),o=/MSIE \d/.test(r),c=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(r),d=/Edge\/(\d+)/.exec(r),p=o||c||d,v=p&&(o?document.documentMode||6:+(d||c)[1]),b=!d&&/WebKit\//.test(r),C=b&&/Qt\/\d+\.\d+/.test(r),T=!d&&/Chrome\/(\d+)/.exec(r),A=T&&+T[1],F=/Opera\//.test(r),G=/Apple Computer/.test(navigator.vendor),j=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(r),O=/PhantomJS/.test(r),x=G&&(/Mobile\/\w+/.test(r)||navigator.maxTouchPoints>2),S=/Android/.test(r),P=x||S||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(r),R=x||/Mac/.test(n),B=/\bCrOS\b/.test(r),q=/win/i.test(n),le=F&&r.match(/Version\/(\d*\.\d*)/);le&&(le=Number(le[1])),le&&le>=15&&(F=!1,b=!0);var ae=R&&(C||F&&(le==null||le<12.11)),Z=a||p&&v>=9;function ne(i){return new RegExp("(^|\\s)"+i+"(?:$|\\s)\\s*")}var U=function(i,s){var l=i.className,u=ne(s).exec(l);if(u){var f=l.slice(u.index+u[0].length);i.className=l.slice(0,u.index)+(f?u[1]+f:"")}};function N(i){for(var s=i.childNodes.length;s>0;--s)i.removeChild(i.firstChild);return i}function W(i,s){return N(i).appendChild(s)}function E(i,s,l,u){var f=document.createElement(i);if(l&&(f.className=l),u&&(f.style.cssText=u),typeof s=="string")f.appendChild(document.createTextNode(s));else if(s)for(var h=0;h<s.length;++h)f.appendChild(s[h]);return f}function ee(i,s,l,u){var f=E(i,s,l,u);return f.setAttribute("role","presentation"),f}var V;document.createRange?V=function(i,s,l,u){var f=document.createRange();return f.setEnd(u||i,l),f.setStart(i,s),f}:V=function(i,s,l){var u=document.body.createTextRange();try{u.moveToElementText(i.parentNode)}catch{return u}return u.collapse(!0),u.moveEnd("character",l),u.moveStart("character",s),u};function fe(i,s){if(s.nodeType==3&&(s=s.parentNode),i.contains)return i.contains(s);do if(s.nodeType==11&&(s=s.host),s==i)return!0;while(s=s.parentNode)}function he(i){var s=i.ownerDocument||i,l;try{l=i.activeElement}catch{l=s.body||null}for(;l&&l.shadowRoot&&l.shadowRoot.activeElement;)l=l.shadowRoot.activeElement;return l}function Ie(i,s){var l=i.className;ne(s).test(l)||(i.className+=(l?" ":"")+s)}function Ge(i,s){for(var l=i.split(" "),u=0;u<l.length;u++)l[u]&&!ne(l[u]).test(s)&&(s+=" "+l[u]);return s}var He=function(i){i.select()};x?He=function(i){i.selectionStart=0,i.selectionEnd=i.value.length}:p&&(He=function(i){try{i.select()}catch{}});function We(i){return i.display.wrapper.ownerDocument}function at(i){return Ve(i.display.wrapper)}function Ve(i){return i.getRootNode?i.getRootNode():i.ownerDocument}function Pe(i){return We(i).defaultView}function Te(i){var s=Array.prototype.slice.call(arguments,1);return function(){return i.apply(null,s)}}function Se(i,s,l){s||(s={});for(var u in i)i.hasOwnProperty(u)&&(l!==!1||!s.hasOwnProperty(u))&&(s[u]=i[u]);return s}function Le(i,s,l,u,f){s==null&&(s=i.search(/[^\s\u00a0]/),s==-1&&(s=i.length));for(var h=u||0,g=f||0;;){var _=i.indexOf(" ",h);if(_<0||_>=s)return g+(s-h);g+=_-h,g+=l-g%l,h=_+1}}var xe=function(){this.id=null,this.f=null,this.time=0,this.handler=Te(this.onTimeout,this)};xe.prototype.onTimeout=function(i){i.id=0,i.time<=+new Date?i.f():setTimeout(i.handler,i.time-+new Date)},xe.prototype.set=function(i,s){this.f=s;var l=+new Date+i;(!this.id||l<this.time)&&(clearTimeout(this.id),this.id=setTimeout(this.handler,i),this.time=l)};function Ee(i,s){for(var l=0;l<i.length;++l)if(i[l]==s)return l;return-1}var Qe=50,ut={toString:function(){return"CodeMirror.Pass"}},dt={scroll:!1},Nt={origin:"*mouse"},ze={origin:"+move"};function tt(i,s,l){for(var u=0,f=0;;){var h=i.indexOf(" ",u);h==-1&&(h=i.length);var g=h-u;if(h==i.length||f+g>=s)return u+Math.min(g,s-f);if(f+=h-u,f+=l-f%l,u=h+1,f>=s)return u}}var lt=[""];function $t(i){for(;lt.length<=i;)lt.push(Ye(lt)+" ");return lt[i]}function Ye(i){return i[i.length-1]}function rt(i,s){for(var l=[],u=0;u<i.length;u++)l[u]=s(i[u],u);return l}function X(i,s,l){for(var u=0,f=l(s);u<i.length&&l(i[u])<=f;)u++;i.splice(u,0,s)}function me(){}function ie(i,s){var l;return Object.create?l=Object.create(i):(me.prototype=i,l=new me),s&&Se(s,l),l}var it=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;function ir(i){return/\w/.test(i)||i>"\x80"&&(i.toUpperCase()!=i.toLowerCase()||it.test(i))}function ei(i,s){return s?s.source.indexOf("\\w")>-1&&ir(i)?!0:s.test(i):ir(i)}function hc(i){for(var s in i)if(i.hasOwnProperty(s)&&i[s])return!1;return!0}var ti=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function Ft(i){return i.charCodeAt(0)>=768&&ti.test(i)}function Ni(i,s,l){for(;(l<0?s>0:s<i.length)&&Ft(i.charAt(s));)s+=l;return s}function Pn(i,s,l){for(var u=s>l?-1:1;;){if(s==l)return s;var f=(s+l)/2,h=u<0?Math.ceil(f):Math.floor(f);if(h==s)return i(h)?s:l;i(h)?l=h:s=h+u}}function Pi(i,s,l,u){if(!i)return u(s,l,"ltr",0);for(var f=!1,h=0;h<i.length;++h){var g=i[h];(g.from<l&&g.to>s||s==l&&g.to==s)&&(u(Math.max(g.from,s),Math.min(g.to,l),g.level==1?"rtl":"ltr",h),f=!0)}f||u(s,l,"ltr")}var ka=null;function Ii(i,s,l){var u;ka=null;for(var f=0;f<i.length;++f){var h=i[f];if(h.from<s&&h.to>s)return f;h.to==s&&(h.from!=h.to&&l=="before"?u=f:ka=f),h.from==s&&(h.from!=h.to&&l!="before"?u=f:ka=f)}return u??ka}var Mp=(function(){var i="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",s="nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111";function l(k){return k<=247?i.charAt(k):1424<=k&&k<=1524?"R":1536<=k&&k<=1785?s.charAt(k-1536):1774<=k&&k<=2220?"r":8192<=k&&k<=8203?"w":k==8204?"b":"L"}var u=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,f=/[stwN]/,h=/[LRr]/,g=/[Lb1n]/,_=/[1n]/;function y(k,L,$){this.level=k,this.from=L,this.to=$}return function(k,L){var $=L=="ltr"?"L":"R";if(k.length==0||L=="ltr"&&!u.test(k))return!1;for(var Y=k.length,z=[],te=0;te<Y;++te)z.push(l(k.charCodeAt(te)));for(var de=0,ge=$;de<Y;++de){var be=z[de];be=="m"?z[de]=ge:ge=be}for(var we=0,ye=$;we<Y;++we){var Oe=z[we];Oe=="1"&&ye=="r"?z[we]="n":h.test(Oe)&&(ye=Oe,Oe=="r"&&(z[we]="R"))}for(var Fe=1,De=z[0];Fe<Y-1;++Fe){var Je=z[Fe];Je=="+"&&De=="1"&&z[Fe+1]=="1"?z[Fe]="1":Je==","&&De==z[Fe+1]&&(De=="1"||De=="n")&&(z[Fe]=De),De=Je}for(var vt=0;vt<Y;++vt){var Vt=z[vt];if(Vt==",")z[vt]="N";else if(Vt=="%"){var At=void 0;for(At=vt+1;At<Y&&z[At]=="%";++At);for(var $r=vt&&z[vt-1]=="!"||At<Y&&z[At]=="1"?"1":"N",Sr=vt;Sr<At;++Sr)z[Sr]=$r;vt=At-1}}for(var Bt=0,xr=$;Bt<Y;++Bt){var rr=z[Bt];xr=="L"&&rr=="1"?z[Bt]="L":h.test(rr)&&(xr=rr)}for(var jt=0;jt<Y;++jt)if(f.test(z[jt])){var Ht=void 0;for(Ht=jt+1;Ht<Y&&f.test(z[Ht]);++Ht);for(var Rt=(jt?z[jt-1]:$)=="L",Ar=(Ht<Y?z[Ht]:$)=="L",qs=Rt==Ar?Rt?"L":"R":$,zi=jt;zi<Ht;++zi)z[zi]=qs;jt=Ht-1}for(var ur=[],Mn,Qt=0;Qt<Y;)if(g.test(z[Qt])){var Nm=Qt;for(++Qt;Qt<Y&&g.test(z[Qt]);++Qt);ur.push(new y(0,Nm,Qt))}else{var li=Qt,Pa=ur.length,Ia=L=="rtl"?1:0;for(++Qt;Qt<Y&&z[Qt]!="L";++Qt);for(var mr=li;mr<Qt;)if(_.test(z[mr])){li<mr&&(ur.splice(Pa,0,new y(1,li,mr)),Pa+=Ia);var Ys=mr;for(++mr;mr<Qt&&_.test(z[mr]);++mr);ur.splice(Pa,0,new y(2,Ys,mr)),Pa+=Ia,li=mr}else++mr;li<Qt&&ur.splice(Pa,0,new y(1,li,Qt))}return L=="ltr"&&(ur[0].level==1&&(Mn=k.match(/^\s+/))&&(ur[0].from=Mn[0].length,ur.unshift(new y(0,0,Mn[0].length))),Ye(ur).level==1&&(Mn=k.match(/\s+$/))&&(Ye(ur).to-=Mn[0].length,ur.push(new y(0,Y-Mn[0].length,Y)))),L=="rtl"?ur.reverse():ur}})();function nt(i,s){var l=i.order;return l==null&&(l=i.order=Mp(i.text,s)),l}var pc=[],$e=function(i,s,l){if(i.addEventListener)i.addEventListener(s,l,!1);else if(i.attachEvent)i.attachEvent("on"+s,l);else{var u=i._handlers||(i._handlers={});u[s]=(u[s]||pc).concat(l)}};function ri(i,s){return i._handlers&&i._handlers[s]||pc}function ar(i,s,l){if(i.removeEventListener)i.removeEventListener(s,l,!1);else if(i.detachEvent)i.detachEvent("on"+s,l);else{var u=i._handlers,f=u&&u[s];if(f){var h=Ee(f,l);h>-1&&(u[s]=f.slice(0,h).concat(f.slice(h+1)))}}}function Pt(i,s){var l=ri(i,s);if(l.length)for(var u=Array.prototype.slice.call(arguments,2),f=0;f<l.length;++f)l[f].apply(null,u)}function It(i,s,l){return typeof s=="string"&&(s={type:s,preventDefault:function(){this.defaultPrevented=!0}}),Pt(i,l||s.type,i,s),Er(s)||s.codemirrorIgnore}function Jr(i){var s=i._handlers&&i._handlers.cursorActivity;if(s)for(var l=i.curOp.cursorActivityHandlers||(i.curOp.cursorActivityHandlers=[]),u=0;u<s.length;++u)Ee(l,s[u])==-1&&l.push(s[u])}function Dr(i,s){return ri(i,s).length>0}function hn(i){i.prototype.on=function(s,l){$e(this,s,l)},i.prototype.off=function(s,l){ar(this,s,l)}}function sr(i){i.preventDefault?i.preventDefault():i.returnValue=!1}function ks(i){i.stopPropagation?i.stopPropagation():i.cancelBubble=!0}function Er(i){return i.defaultPrevented!=null?i.defaultPrevented:i.returnValue==!1}function Li(i){sr(i),ks(i)}function ru(i){return i.target||i.srcElement}function pn(i){var s=i.which;return s==null&&(i.button&1?s=1:i.button&2?s=3:i.button&4&&(s=2)),R&&i.ctrlKey&&s==1&&(s=3),s}var $p=(function(){if(p&&v<9)return!1;var i=E("div");return"draggable"in i||"dragDrop"in i})(),Es;function mc(i){if(Es==null){var s=E("span","\u200B");W(i,E("span",[s,document.createTextNode("x")])),i.firstChild.offsetHeight!=0&&(Es=s.offsetWidth<=1&&s.offsetHeight>2&&!(p&&v<8))}var l=Es?E("span","\u200B"):E("span","\xA0",null,"display: inline-block; width: 1px; margin-right: -1px");return l.setAttribute("cm-text",""),l}var nu;function Ri(i){if(nu!=null)return nu;var s=W(i,document.createTextNode("A\u062EA")),l=V(s,0,1).getBoundingClientRect(),u=V(s,1,2).getBoundingClientRect();return N(i),!l||l.left==l.right?!1:nu=u.right-l.right<3}var Zr=` b`.split(/\n/).length!=3?function(i){for(var s=0,l=[],u=i.length;s<=u;){var f=i.indexOf(` `,s);f==-1&&(f=i.length);var h=i.slice(s,i.charAt(f-1)=="\r"?f-1:f),g=h.indexOf("\r");g!=-1?(l.push(h.slice(0,g)),s+=g+1):(l.push(h),s=f+1)}return l}:function(i){return i.split(/\r\n?|\n/)},Di=window.getSelection?function(i){try{return i.selectionStart!=i.selectionEnd}catch{return!1}}:function(i){var s;try{s=i.ownerDocument.selection.createRange()}catch{}return!s||s.parentElement()!=i?!1:s.compareEndPoints("StartToEnd",s)!=0},vc=(function(){var i=E("div");return"oncopy"in i?!0:(i.setAttribute("oncopy","return;"),typeof i.oncopy=="function")})(),mn=null;function Fp(i){if(mn!=null)return mn;var s=W(i,E("span","x")),l=s.getBoundingClientRect(),u=V(s,0,1).getBoundingClientRect();return mn=Math.abs(l.left-u.left)>1}var Ts={},vn={};function gn(i,s){arguments.length>2&&(s.dependencies=Array.prototype.slice.call(arguments,2)),Ts[i]=s}function Ea(i,s){vn[i]=s}function Cs(i){if(typeof i=="string"&&vn.hasOwnProperty(i))i=vn[i];else if(i&&typeof i.name=="string"&&vn.hasOwnProperty(i.name)){var s=vn[i.name];typeof s=="string"&&(s={name:s}),i=ie(s,i),i.name=s.name}else{if(typeof i=="string"&&/^[\w\-]+\/[\w\-]+\+xml$/.test(i))return Cs("application/xml");if(typeof i=="string"&&/^[\w\-]+\/[\w\-]+\+json$/.test(i))return Cs("application/json")}return typeof i=="string"?{name:i}:i||{name:"null"}}function ws(i,s){s=Cs(s);var l=Ts[s.name];if(!l)return ws(i,"text/plain");var u=l(i,s);if(Mi.hasOwnProperty(s.name)){var f=Mi[s.name];for(var h in f)f.hasOwnProperty(h)&&(u.hasOwnProperty(h)&&(u["_"+h]=u[h]),u[h]=f[h])}if(u.name=s.name,s.helperType&&(u.helperType=s.helperType),s.modeProps)for(var g in s.modeProps)u[g]=s.modeProps[g];return u}var Mi={};function Ss(i,s){var l=Mi.hasOwnProperty(i)?Mi[i]:Mi[i]={};Se(s,l)}function In(i,s){if(s===!0)return s;if(i.copyState)return i.copyState(s);var l={};for(var u in s){var f=s[u];f instanceof Array&&(f=f.concat([])),l[u]=f}return l}function iu(i,s){for(var l;i.innerMode&&(l=i.innerMode(s),!(!l||l.mode==i));)s=l.state,i=l.mode;return l||{mode:i,state:s}}function xs(i,s,l){return i.startState?i.startState(s,l):!0}var Lt=function(i,s,l){this.pos=this.start=0,this.string=i,this.tabSize=s||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=l};Lt.prototype.eol=function(){return this.pos>=this.string.length},Lt.prototype.sol=function(){return this.pos==this.lineStart},Lt.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Lt.prototype.next=function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},Lt.prototype.eat=function(i){var s=this.string.charAt(this.pos),l;if(typeof i=="string"?l=s==i:l=s&&(i.test?i.test(s):i(s)),l)return++this.pos,s},Lt.prototype.eatWhile=function(i){for(var s=this.pos;this.eat(i););return this.pos>s},Lt.prototype.eatSpace=function(){for(var i=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>i},Lt.prototype.skipToEnd=function(){this.pos=this.string.length},Lt.prototype.skipTo=function(i){var s=this.string.indexOf(i,this.pos);if(s>-1)return this.pos=s,!0},Lt.prototype.backUp=function(i){this.pos-=i},Lt.prototype.column=function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Le(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?Le(this.string,this.lineStart,this.tabSize):0)},Lt.prototype.indentation=function(){return Le(this.string,null,this.tabSize)-(this.lineStart?Le(this.string,this.lineStart,this.tabSize):0)},Lt.prototype.match=function(i,s,l){if(typeof i=="string"){var u=function(g){return l?g.toLowerCase():g},f=this.string.substr(this.pos,i.length);if(u(f)==u(i))return s!==!1&&(this.pos+=i.length),!0}else{var h=this.string.slice(this.pos).match(i);return h&&h.index>0?null:(h&&s!==!1&&(this.pos+=h[0].length),h)}},Lt.prototype.current=function(){return this.string.slice(this.start,this.pos)},Lt.prototype.hideFirstChars=function(i,s){this.lineStart+=i;try{return s()}finally{this.lineStart-=i}},Lt.prototype.lookAhead=function(i){var s=this.lineOracle;return s&&s.lookAhead(i)},Lt.prototype.baseToken=function(){var i=this.lineOracle;return i&&i.baseToken(this.pos)};function Re(i,s){if(s-=i.first,s<0||s>=i.size)throw new Error("There is no line "+(s+i.first)+" in the document.");for(var l=i;!l.lines;)for(var u=0;;++u){var f=l.children[u],h=f.chunkSize();if(s<h){l=f;break}s-=h}return l.lines[s]}function ni(i,s,l){var u=[],f=s.line;return i.iter(s.line,l.line+1,function(h){var g=h.text;f==l.line&&(g=g.slice(0,l.ch)),f==s.line&&(g=g.slice(s.ch)),u.push(g),++f}),u}function au(i,s,l){var u=[];return i.iter(s,l,function(f){u.push(f.text)}),u}function Gr(i,s){var l=s-i.height;if(l)for(var u=i;u;u=u.parent)u.height+=l}function w(i){if(i.parent==null)return null;for(var s=i.parent,l=Ee(s.lines,i),u=s.parent;u;s=u,u=u.parent)for(var f=0;u.children[f]!=s;++f)l+=u.children[f].chunkSize();return l+s.first}function M(i,s){var l=i.first;e:do{for(var u=0;u<i.children.length;++u){var f=i.children[u],h=f.height;if(s<h){i=f;continue e}s-=h,l+=f.chunkSize()}return l}while(!i.lines);for(var g=0;g<i.lines.length;++g){var _=i.lines[g],y=_.height;if(s<y)break;s-=y}return l+g}function ce(i,s){return s>=i.first&&s<i.first+i.size}function ve(i,s){return String(i.lineNumberFormatter(s+i.firstLineNumber))}function J(i,s,l){if(l===void 0&&(l=null),!(this instanceof J))return new J(i,s,l);this.line=i,this.ch=s,this.sticky=l}function Ce(i,s){return i.line-s.line||i.ch-s.ch}function ct(i,s){return i.sticky==s.sticky&&Ce(i,s)==0}function qt(i){return J(i.line,i.ch)}function Tr(i,s){return Ce(i,s)<0?s:i}function As(i,s){return Ce(i,s)<0?i:s}function TE(i,s){return Math.max(i.first,Math.min(s,i.first+i.size-1))}function Ke(i,s){if(s.line<i.first)return J(i.first,0);var l=i.first+i.size-1;return s.line>l?J(l,Re(i,l).text.length):wX(s,Re(i,s.line).text.length)}function wX(i,s){var l=i.ch;return l==null||l>s?J(i.line,s):l<0?J(i.line,0):i}function CE(i,s){for(var l=[],u=0;u<s.length;u++)l[u]=Ke(i,s[u]);return l}var gc=function(i,s){this.state=i,this.lookAhead=s},Ln=function(i,s,l,u){this.state=s,this.doc=i,this.line=l,this.maxLookAhead=u||0,this.baseTokens=null,this.baseTokenPos=1};Ln.prototype.lookAhead=function(i){var s=this.doc.getLine(this.line+i);return s!=null&&i>this.maxLookAhead&&(this.maxLookAhead=i),s},Ln.prototype.baseToken=function(i){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=i;)this.baseTokenPos+=2;var s=this.baseTokens[this.baseTokenPos+1];return{type:s&&s.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-i}},Ln.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},Ln.fromSaved=function(i,s,l){return s instanceof gc?new Ln(i,In(i.mode,s.state),l,s.lookAhead):new Ln(i,In(i.mode,s),l)},Ln.prototype.save=function(i){var s=i!==!1?In(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new gc(s,this.maxLookAhead):s};function wE(i,s,l,u){var f=[i.state.modeGen],h={};PE(i,s.text,i.doc.mode,l,function(k,L){return f.push(k,L)},h,u);for(var g=l.state,_=function(k){l.baseTokens=f;var L=i.state.overlays[k],$=1,Y=0;l.state=!0,PE(i,s.text,L.mode,l,function(z,te){for(var de=$;Y<z;){var ge=f[$];ge>z&&f.splice($,1,z,f[$+1],ge),$+=2,Y=Math.min(z,ge)}if(te)if(L.opaque)f.splice(de,$-de,z,"overlay "+te),$=de+2;else for(;de<$;de+=2){var be=f[de+1];f[de+1]=(be?be+" ":"")+"overlay "+te}},h),l.state=g,l.baseTokens=null,l.baseTokenPos=1},y=0;y<i.state.overlays.length;++y)_(y);return{styles:f,classes:h.bgClass||h.textClass?h:null}}function SE(i,s,l){if(!s.styles||s.styles[0]!=i.state.modeGen){var u=su(i,w(s)),f=s.text.length>i.options.maxHighlightLength&&In(i.doc.mode,u.state),h=wE(i,s,u);f&&(u.state=f),s.stateAfter=u.save(!f),s.styles=h.styles,h.classes?s.styleClasses=h.classes:s.styleClasses&&(s.styleClasses=null),l===i.doc.highlightFrontier&&(i.doc.modeFrontier=Math.max(i.doc.modeFrontier,++i.doc.highlightFrontier))}return s.styles}function su(i,s,l){var u=i.doc,f=i.display;if(!u.mode.startState)return new Ln(u,!0,s);var h=SX(i,s,l),g=h>u.first&&Re(u,h-1).stateAfter,_=g?Ln.fromSaved(u,g,h):new Ln(u,xs(u.mode),h);return u.iter(h,s,function(y){Bp(i,y.text,_);var k=_.line;y.stateAfter=k==s-1||k%5==0||k>=f.viewFrom&&k<f.viewTo?_.save():null,_.nextLine()}),l&&(u.modeFrontier=_.line),_}function Bp(i,s,l,u){var f=i.doc.mode,h=new Lt(s,i.options.tabSize,l);for(h.start=h.pos=u||0,s==""&&xE(f,l.state);!h.eol();)Hp(f,h,l.state),h.start=h.pos}function xE(i,s){if(i.blankLine)return i.blankLine(s);if(i.innerMode){var l=iu(i,s);if(l.mode.blankLine)return l.mode.blankLine(l.state)}}function Hp(i,s,l,u){for(var f=0;f<10;f++){u&&(u[0]=iu(i,l).mode);var h=i.token(s,l);if(s.pos>s.start)return h}throw new Error("Mode "+i.name+" failed to advance stream.")}var AE=function(i,s,l){this.start=i.start,this.end=i.pos,this.string=i.current(),this.type=s||null,this.state=l};function OE(i,s,l,u){var f=i.doc,h=f.mode,g;s=Ke(f,s);var _=Re(f,s.line),y=su(i,s.line,l),k=new Lt(_.text,i.options.tabSize,y),L;for(u&&(L=[]);(u||k.pos<s.ch)&&!k.eol();)k.start=k.pos,g=Hp(h,k,y.state),u&&L.push(new AE(k,g,In(f.mode,y.state)));return u?L:new AE(k,g,y.state)}function NE(i,s){if(i)for(;;){var l=i.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!l)break;i=i.slice(0,l.index)+i.slice(l.index+l[0].length);var u=l[1]?"bgClass":"textClass";s[u]==null?s[u]=l[2]:new RegExp("(?:^|\\s)"+l[2]+"(?:$|\\s)").test(s[u])||(s[u]+=" "+l[2])}return i}function PE(i,s,l,u,f,h,g){var _=l.flattenSpans;_==null&&(_=i.options.flattenSpans);var y=0,k=null,L=new Lt(s,i.options.tabSize,u),$,Y=i.options.addModeClass&&[null];for(s==""&&NE(xE(l,u.state),h);!L.eol();){if(L.pos>i.options.maxHighlightLength?(_=!1,g&&Bp(i,s,u,L.pos),L.pos=s.length,$=null):$=NE(Hp(l,L,u.state,Y),h),Y){var z=Y[0].name;z&&($="m-"+($?z+" "+$:z))}if(!_||k!=$){for(;y<L.start;)y=Math.min(L.start,y+5e3),f(y,k);k=$}L.start=L.pos}for(;y<L.pos;){var te=Math.min(L.pos,y+5e3);f(te,k),y=te}}function SX(i,s,l){for(var u,f,h=i.doc,g=l?-1:s-(i.doc.mode.innerMode?1e3:100),_=s;_>g;--_){if(_<=h.first)return h.first;var y=Re(h,_-1),k=y.stateAfter;if(k&&(!l||_+(k instanceof gc?k.lookAhead:0)<=h.modeFrontier))return _;var L=Le(y.text,null,i.options.tabSize);(f==null||u>L)&&(f=_-1,u=L)}return f}function xX(i,s){if(i.modeFrontier=Math.min(i.modeFrontier,s),!(i.highlightFrontier<s-10)){for(var l=i.first,u=s-1;u>l;u--){var f=Re(i,u).stateAfter;if(f&&(!(f instanceof gc)||u+f.lookAhead<s)){l=u+1;break}}i.highlightFrontier=Math.min(i.highlightFrontier,l)}}var IE=!1,ii=!1;function AX(){IE=!0}function OX(){ii=!0}function _c(i,s,l){this.marker=i,this.from=s,this.to=l}function ou(i,s){if(i)for(var l=0;l<i.length;++l){var u=i[l];if(u.marker==s)return u}}function NX(i,s){for(var l,u=0;u<i.length;++u)i[u]!=s&&(l||(l=[])).push(i[u]);return l}function PX(i,s,l){var u=l&&window.WeakSet&&(l.markedSpans||(l.markedSpans=new WeakSet));u&&i.markedSpans&&u.has(i.markedSpans)?i.markedSpans.push(s):(i.markedSpans=i.markedSpans?i.markedSpans.concat([s]):[s],u&&u.add(i.markedSpans)),s.marker.attachLine(i)}function IX(i,s,l){var u;if(i)for(var f=0;f<i.length;++f){var h=i[f],g=h.marker,_=h.from==null||(g.inclusiveLeft?h.from<=s:h.from<s);if(_||h.from==s&&g.type=="bookmark"&&(!l||!h.marker.insertLeft)){var y=h.to==null||(g.inclusiveRight?h.to>=s:h.to>s);(u||(u=[])).push(new _c(g,h.from,y?null:h.to))}}return u}function LX(i,s,l){var u;if(i)for(var f=0;f<i.length;++f){var h=i[f],g=h.marker,_=h.to==null||(g.inclusiveRight?h.to>=s:h.to>s);if(_||h.from==s&&g.type=="bookmark"&&(!l||h.marker.insertLeft)){var y=h.from==null||(g.inclusiveLeft?h.from<=s:h.from<s);(u||(u=[])).push(new _c(g,y?null:h.from-s,h.to==null?null:h.to-s))}}return u}function Up(i,s){if(s.full)return null;var l=ce(i,s.from.line)&&Re(i,s.from.line).markedSpans,u=ce(i,s.to.line)&&Re(i,s.to.line).markedSpans;if(!l&&!u)return null;var f=s.from.ch,h=s.to.ch,g=Ce(s.from,s.to)==0,_=IX(l,f,g),y=LX(u,h,g),k=s.text.length==1,L=Ye(s.text).length+(k?f:0);if(_)for(var $=0;$<_.length;++$){var Y=_[$];if(Y.to==null){var z=ou(y,Y.marker);z?k&&(Y.to=z.to==null?null:z.to+L):Y.to=f}}if(y)for(var te=0;te<y.length;++te){var de=y[te];if(de.to!=null&&(de.to+=L),de.from==null){var ge=ou(_,de.marker);ge||(de.from=L,k&&(_||(_=[])).push(de))}else de.from+=L,k&&(_||(_=[])).push(de)}_&&(_=LE(_)),y&&y!=_&&(y=LE(y));var be=[_];if(!k){var we=s.text.length-2,ye;if(we>0&&_)for(var Oe=0;Oe<_.length;++Oe)_[Oe].to==null&&(ye||(ye=[])).push(new _c(_[Oe].marker,null,null));for(var Fe=0;Fe<we;++Fe)be.push(ye);be.push(y)}return be}function LE(i){for(var s=0;s<i.length;++s){var l=i[s];l.from!=null&&l.from==l.to&&l.marker.clearWhenEmpty!==!1&&i.splice(s--,1)}return i.length?i:null}function RX(i,s,l){var u=null;if(i.iter(s.line,l.line+1,function(z){if(z.markedSpans)for(var te=0;te<z.markedSpans.length;++te){var de=z.markedSpans[te].marker;de.readOnly&&(!u||Ee(u,de)==-1)&&(u||(u=[])).push(de)}}),!u)return null;for(var f=[{from:s,to:l}],h=0;h<u.length;++h)for(var g=u[h],_=g.find(0),y=0;y<f.length;++y){var k=f[y];if(!(Ce(k.to,_.from)<0||Ce(k.from,_.to)>0)){var L=[y,1],$=Ce(k.from,_.from),Y=Ce(k.to,_.to);($<0||!g.inclusiveLeft&&!$)&&L.push({from:k.from,to:_.from}),(Y>0||!g.inclusiveRight&&!Y)&&L.push({from:_.to,to:k.to}),f.splice.apply(f,L),y+=L.length-3}}return f}function RE(i){var s=i.markedSpans;if(s){for(var l=0;l<s.length;++l)s[l].marker.detachLine(i);i.markedSpans=null}}function DE(i,s){if(s){for(var l=0;l<s.length;++l)s[l].marker.attachLine(i);i.markedSpans=s}}function bc(i){return i.inclusiveLeft?-1:0}function yc(i){return i.inclusiveRight?1:0}function jp(i,s){var l=i.lines.length-s.lines.length;if(l!=0)return l;var u=i.find(),f=s.find(),h=Ce(u.from,f.from)||bc(i)-bc(s);if(h)return-h;var g=Ce(u.to,f.to)||yc(i)-yc(s);return g||s.id-i.id}function ME(i,s){var l=ii&&i.markedSpans,u;if(l)for(var f=void 0,h=0;h<l.length;++h)f=l[h],f.marker.collapsed&&(s?f.from:f.to)==null&&(!u||jp(u,f.marker)<0)&&(u=f.marker);return u}function $E(i){return ME(i,!0)}function kc(i){return ME(i,!1)}function DX(i,s){var l=ii&&i.markedSpans,u;if(l)for(var f=0;f<l.length;++f){var h=l[f];h.marker.collapsed&&(h.from==null||h.from<s)&&(h.to==null||h.to>s)&&(!u||jp(u,h.marker)<0)&&(u=h.marker)}return u}function FE(i,s,l,u,f){var h=Re(i,s),g=ii&&h.markedSpans;if(g)for(var _=0;_<g.length;++_){var y=g[_];if(y.marker.collapsed){var k=y.marker.find(0),L=Ce(k.from,l)||bc(y.marker)-bc(f),$=Ce(k.to,u)||yc(y.marker)-yc(f);if(!(L>=0&&$<=0||L<=0&&$>=0)&&(L<=0&&(y.marker.inclusiveRight&&f.inclusiveLeft?Ce(k.to,l)>=0:Ce(k.to,l)>0)||L>=0&&(y.marker.inclusiveRight&&f.inclusiveLeft?Ce(k.from,u)<=0:Ce(k.from,u)<0)))return!0}}}function _n(i){for(var s;s=$E(i);)i=s.find(-1,!0).line;return i}function MX(i){for(var s;s=kc(i);)i=s.find(1,!0).line;return i}function $X(i){for(var s,l;s=kc(i);)i=s.find(1,!0).line,(l||(l=[])).push(i);return l}function Wp(i,s){var l=Re(i,s),u=_n(l);return l==u?s:w(u)}function BE(i,s){if(s>i.lastLine())return s;var l=Re(i,s),u;if(!$i(i,l))return s;for(;u=kc(l);)l=u.find(1,!0).line;return w(l)+1}function $i(i,s){var l=ii&&s.markedSpans;if(l){for(var u=void 0,f=0;f<l.length;++f)if(u=l[f],!!u.marker.collapsed){if(u.from==null)return!0;if(!u.marker.widgetNode&&u.from==0&&u.marker.inclusiveLeft&&Gp(i,s,u))return!0}}}function Gp(i,s,l){if(l.to==null){var u=l.marker.find(1,!0);return Gp(i,u.line,ou(u.line.markedSpans,l.marker))}if(l.marker.inclusiveRight&&l.to==s.text.length)return!0;for(var f=void 0,h=0;h<s.markedSpans.length;++h)if(f=s.markedSpans[h],f.marker.collapsed&&!f.marker.widgetNode&&f.from==l.to&&(f.to==null||f.to!=l.from)&&(f.marker.inclusiveLeft||l.marker.inclusiveRight)&&Gp(i,s,f))return!0}function ai(i){i=_n(i);for(var s=0,l=i.parent,u=0;u<l.lines.length;++u){var f=l.lines[u];if(f==i)break;s+=f.height}for(var h=l.parent;h;l=h,h=l.parent)for(var g=0;g<h.children.length;++g){var _=h.children[g];if(_==l)break;s+=_.height}return s}function Ec(i){if(i.height==0)return 0;for(var s=i.text.length,l,u=i;l=$E(u);){var f=l.find(0,!0);u=f.from.line,s+=f.from.ch-f.to.ch}for(u=i;l=kc(u);){var h=l.find(0,!0);s-=u.text.length-h.from.ch,u=h.to.line,s+=u.text.length-h.to.ch}return s}function zp(i){var s=i.display,l=i.doc;s.maxLine=Re(l,l.first),s.maxLineLength=Ec(s.maxLine),s.maxLineChanged=!0,l.iter(function(u){var f=Ec(u);f>s.maxLineLength&&(s.maxLineLength=f,s.maxLine=u)})}var Os=function(i,s,l){this.text=i,DE(this,s),this.height=l?l(this):1};Os.prototype.lineNo=function(){return w(this)},hn(Os);function FX(i,s,l,u){i.text=s,i.stateAfter&&(i.stateAfter=null),i.styles&&(i.styles=null),i.order!=null&&(i.order=null),RE(i),DE(i,l);var f=u?u(i):1;f!=i.height&&Gr(i,f)}function BX(i){i.parent=null,RE(i)}var HX={},UX={};function HE(i,s){if(!i||/^\s*$/.test(i))return null;var l=s.addModeClass?UX:HX;return l[i]||(l[i]=i.replace(/\S+/g,"cm-$&"))}function UE(i,s){var l=ee("span",null,null,b?"padding-right: .1px":null),u={pre:ee("pre",[l],"CodeMirror-line"),content:l,col:0,pos:0,cm:i,trailingSpace:!1,splitSpaces:i.getOption("lineWrapping")};s.measure={};for(var f=0;f<=(s.rest?s.rest.length:0);f++){var h=f?s.rest[f-1]:s.line,g=void 0;u.pos=0,u.addToken=WX,Ri(i.display.measure)&&(g=nt(h,i.doc.direction))&&(u.addToken=zX(u.addToken,g)),u.map=[];var _=s!=i.display.externalMeasured&&w(h);qX(h,u,SE(i,h,_)),h.styleClasses&&(h.styleClasses.bgClass&&(u.bgClass=Ge(h.styleClasses.bgClass,u.bgClass||"")),h.styleClasses.textClass&&(u.textClass=Ge(h.styleClasses.textClass,u.textClass||""))),u.map.length==0&&u.map.push(0,0,u.content.appendChild(mc(i.display.measure))),f==0?(s.measure.map=u.map,s.measure.cache={}):((s.measure.maps||(s.measure.maps=[])).push(u.map),(s.measure.caches||(s.measure.caches=[])).push({}))}if(b){var y=u.content.lastChild;(/\bcm-tab\b/.test(y.className)||y.querySelector&&y.querySelector(".cm-tab"))&&(u.content.className="cm-tab-wrap-hack")}return Pt(i,"renderLine",i,s.line,u.pre),u.pre.className&&(u.textClass=Ge(u.pre.className,u.textClass||"")),u}function jX(i){var s=E("span","\u2022","cm-invalidchar");return s.title="\\u"+i.charCodeAt(0).toString(16),s.setAttribute("aria-label",s.title),s}function WX(i,s,l,u,f,h,g){if(s){var _=i.splitSpaces?GX(s,i.trailingSpace):s,y=i.cm.state.specialChars,k=!1,L;if(!y.test(s))i.col+=s.length,L=document.createTextNode(_),i.map.push(i.pos,i.pos+s.length,L),p&&v<9&&(k=!0),i.pos+=s.length;else{L=document.createDocumentFragment();for(var $=0;;){y.lastIndex=$;var Y=y.exec(s),z=Y?Y.index-$:s.length-$;if(z){var te=document.createTextNode(_.slice($,$+z));p&&v<9?L.appendChild(E("span",[te])):L.appendChild(te),i.map.push(i.pos,i.pos+z,te),i.col+=z,i.pos+=z}if(!Y)break;$+=z+1;var de=void 0;if(Y[0]==" "){var ge=i.cm.options.tabSize,be=ge-i.col%ge;de=L.appendChild(E("span",$t(be),"cm-tab")),de.setAttribute("role","presentation"),de.setAttribute("cm-text"," "),i.col+=be}else Y[0]=="\r"||Y[0]==` `?(de=L.appendChild(E("span",Y[0]=="\r"?"\u240D":"\u2424","cm-invalidchar")),de.setAttribute("cm-text",Y[0]),i.col+=1):(de=i.cm.options.specialCharPlaceholder(Y[0]),de.setAttribute("cm-text",Y[0]),p&&v<9?L.appendChild(E("span",[de])):L.appendChild(de),i.col+=1);i.map.push(i.pos,i.pos+1,de),i.pos++}}if(i.trailingSpace=_.charCodeAt(s.length-1)==32,l||u||f||k||h||g){var we=l||"";u&&(we+=u),f&&(we+=f);var ye=E("span",[L],we,h);if(g)for(var Oe in g)g.hasOwnProperty(Oe)&&Oe!="style"&&Oe!="class"&&ye.setAttribute(Oe,g[Oe]);return i.content.appendChild(ye)}i.content.appendChild(L)}}function GX(i,s){if(i.length>1&&!/ /.test(i))return i;for(var l=s,u="",f=0;f<i.length;f++){var h=i.charAt(f);h==" "&&l&&(f==i.length-1||i.charCodeAt(f+1)==32)&&(h="\xA0"),u+=h,l=h==" "}return u}function zX(i,s){return function(l,u,f,h,g,_,y){f=f?f+" cm-force-border":"cm-force-border";for(var k=l.pos,L=k+u.length;;){for(var $=void 0,Y=0;Y<s.length&&($=s[Y],!($.to>k&&$.from<=k));Y++);if($.to>=L)return i(l,u,f,h,g,_,y);i(l,u.slice(0,$.to-k),f,h,null,_,y),h=null,u=u.slice($.to-k),k=$.to}}}function jE(i,s,l,u){var f=!u&&l.widgetNode;f&&i.map.push(i.pos,i.pos+s,f),!u&&i.cm.display.input.needsContentAttribute&&(f||(f=i.content.appendChild(document.createElement("span"))),f.setAttribute("cm-marker",l.id)),f&&(i.cm.display.input.setUneditable(f),i.content.appendChild(f)),i.pos+=s,i.trailingSpace=!1}function qX(i,s,l){var u=i.markedSpans,f=i.text,h=0;if(!u){for(var g=1;g<l.length;g+=2)s.addToken(s,f.slice(h,h=l[g]),HE(l[g+1],s.cm.options));return}for(var _=f.length,y=0,k=1,L="",$,Y,z=0,te,de,ge,be,we;;){if(z==y){te=de=ge=Y="",we=null,be=null,z=1/0;for(var ye=[],Oe=void 0,Fe=0;Fe<u.length;++Fe){var De=u[Fe],Je=De.marker;if(Je.type=="bookmark"&&De.from==y&&Je.widgetNode)ye.push(Je);else if(De.from<=y&&(De.to==null||De.to>y||Je.collapsed&&De.to==y&&De.from==y)){if(De.to!=null&&De.to!=y&&z>De.to&&(z=De.to,de=""),Je.className&&(te+=" "+Je.className),Je.css&&(Y=(Y?Y+";":"")+Je.css),Je.startStyle&&De.from==y&&(ge+=" "+Je.startStyle),Je.endStyle&&De.to==z&&(Oe||(Oe=[])).push(Je.endStyle,De.to),Je.title&&((we||(we={})).title=Je.title),Je.attributes)for(var vt in Je.attributes)(we||(we={}))[vt]=Je.attributes[vt];Je.collapsed&&(!be||jp(be.marker,Je)<0)&&(be=De)}else De.from>y&&z>De.from&&(z=De.from)}if(Oe)for(var Vt=0;Vt<Oe.length;Vt+=2)Oe[Vt+1]==z&&(de+=" "+Oe[Vt]);if(!be||be.from==y)for(var At=0;At<ye.length;++At)jE(s,0,ye[At]);if(be&&(be.from||0)==y){if(jE(s,(be.to==null?_+1:be.to)-y,be.marker,be.from==null),be.to==null)return;be.to==y&&(be=!1)}}if(y>=_)break;for(var $r=Math.min(_,z);;){if(L){var Sr=y+L.length;if(!be){var Bt=Sr>$r?L.slice(0,$r-y):L;s.addToken(s,Bt,$?$+te:te,ge,y+Bt.length==z?de:"",Y,we)}if(Sr>=$r){L=L.slice($r-y),y=$r;break}y=Sr,ge=""}L=f.slice(h,h=l[k++]),$=HE(l[k++],s.cm.options)}}}function WE(i,s,l){this.line=s,this.rest=$X(s),this.size=this.rest?w(Ye(this.rest))-l+1:1,this.node=this.text=null,this.hidden=$i(i,s)}function Tc(i,s,l){for(var u=[],f,h=s;h<l;h=f){var g=new WE(i.doc,Re(i.doc,h),h);f=h+g.size,u.push(g)}return u}var Ns=null;function YX(i){Ns?Ns.ops.push(i):i.ownsGroup=Ns={ops:[i],delayedCallbacks:[]}}function KX(i){var s=i.delayedCallbacks,l=0;do{for(;l<s.length;l++)s[l].call(null);for(var u=0;u<i.ops.length;u++){var f=i.ops[u];if(f.cursorActivityHandlers)for(;f.cursorActivityCalled<f.cursorActivityHandlers.length;)f.cursorActivityHandlers[f.cursorActivityCalled++].call(null,f.cm)}}while(l<s.length)}function XX(i,s){var l=i.ownsGroup;if(l)try{KX(l)}finally{Ns=null,s(l)}}var uu=null;function Yt(i,s){var l=ri(i,s);if(l.length){var u=Array.prototype.slice.call(arguments,2),f;Ns?f=Ns.delayedCallbacks:uu?f=uu:(f=uu=[],setTimeout(VX,0));for(var h=function(_){f.push(function(){return l[_].apply(null,u)})},g=0;g<l.length;++g)h(g)}}function VX(){var i=uu;uu=null;for(var s=0;s<i.length;++s)i[s]()}function GE(i,s,l,u){for(var f=0;f<s.changes.length;f++){var h=s.changes[f];h=="text"?JX(i,s):h=="gutter"?qE(i,s,l,u):h=="class"?qp(i,s):h=="widget"&&ZX(i,s,u)}s.changes=null}function lu(i){return i.node==i.text&&(i.node=E("div",null,null,"position: relative"),i.text.parentNode&&i.text.parentNode.replaceChild(i.node,i.text),i.node.appendChild(i.text),p&&v<8&&(i.node.style.zIndex=2)),i.node}function QX(i,s){var l=s.bgClass?s.bgClass+" "+(s.line.bgClass||""):s.line.bgClass;if(l&&(l+=" CodeMirror-linebackground"),s.background)l?s.background.className=l:(s.background.parentNode.removeChild(s.background),s.background=null);else if(l){var u=lu(s);s.background=u.insertBefore(E("div",null,l),u.firstChild),i.display.input.setUneditable(s.background)}}function zE(i,s){var l=i.display.externalMeasured;return l&&l.line==s.line?(i.display.externalMeasured=null,s.measure=l.measure,l.built):UE(i,s)}function JX(i,s){var l=s.text.className,u=zE(i,s);s.text==s.node&&(s.node=u.pre),s.text.parentNode.replaceChild(u.pre,s.text),s.text=u.pre,u.bgClass!=s.bgClass||u.textClass!=s.textClass?(s.bgClass=u.bgClass,s.textClass=u.textClass,qp(i,s)):l&&(s.text.className=l)}function qp(i,s){QX(i,s),s.line.wrapClass?lu(s).className=s.line.wrapClass:s.node!=s.text&&(s.node.className="");var l=s.textClass?s.textClass+" "+(s.line.textClass||""):s.line.textClass;s.text.className=l||""}function qE(i,s,l,u){if(s.gutter&&(s.node.removeChild(s.gutter),s.gutter=null),s.gutterBackground&&(s.node.removeChild(s.gutterBackground),s.gutterBackground=null),s.line.gutterClass){var f=lu(s);s.gutterBackground=E("div",null,"CodeMirror-gutter-background "+s.line.gutterClass,"left: "+(i.options.fixedGutter?u.fixedPos:-u.gutterTotalWidth)+"px; width: "+u.gutterTotalWidth+"px"),i.display.input.setUneditable(s.gutterBackground),f.insertBefore(s.gutterBackground,s.text)}var h=s.line.gutterMarkers;if(i.options.lineNumbers||h){var g=lu(s),_=s.gutter=E("div",null,"CodeMirror-gutter-wrapper","left: "+(i.options.fixedGutter?u.fixedPos:-u.gutterTotalWidth)+"px");if(_.setAttribute("aria-hidden","true"),i.display.input.setUneditable(_),g.insertBefore(_,s.text),s.line.gutterClass&&(_.className+=" "+s.line.gutterClass),i.options.lineNumbers&&(!h||!h["CodeMirror-linenumbers"])&&(s.lineNumber=_.appendChild(E("div",ve(i.options,l),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+u.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+i.display.lineNumInnerWidth+"px"))),h)for(var y=0;y<i.display.gutterSpecs.length;++y){var k=i.display.gutterSpecs[y].className,L=h.hasOwnProperty(k)&&h[k];L&&_.appendChild(E("div",[L],"CodeMirror-gutter-elt","left: "+u.gutterLeft[k]+"px; width: "+u.gutterWidth[k]+"px"))}}}function ZX(i,s,l){s.alignable&&(s.alignable=null);for(var u=ne("CodeMirror-linewidget"),f=s.node.firstChild,h=void 0;f;f=h)h=f.nextSibling,u.test(f.className)&&s.node.removeChild(f);YE(i,s,l)}function eV(i,s,l,u){var f=zE(i,s);return s.text=s.node=f.pre,f.bgClass&&(s.bgClass=f.bgClass),f.textClass&&(s.textClass=f.textClass),qp(i,s),qE(i,s,l,u),YE(i,s,u),s.node}function YE(i,s,l){if(KE(i,s.line,s,l,!0),s.rest)for(var u=0;u<s.rest.length;u++)KE(i,s.rest[u],s,l,!1)}function KE(i,s,l,u,f){if(s.widgets)for(var h=lu(l),g=0,_=s.widgets;g<_.length;++g){var y=_[g],k=E("div",[y.node],"CodeMirror-linewidget"+(y.className?" "+y.className:""));y.handleMouseEvents||k.setAttribute("cm-ignore-events","true"),tV(y,k,l,u),i.display.input.setUneditable(k),f&&y.above?h.insertBefore(k,l.gutter||l.text):h.appendChild(k),Yt(y,"redraw")}}function tV(i,s,l,u){if(i.noHScroll){(l.alignable||(l.alignable=[])).push(s);var f=u.wrapperWidth;s.style.left=u.fixedPos+"px",i.coverGutter||(f-=u.gutterTotalWidth,s.style.paddingLeft=u.gutterTotalWidth+"px"),s.style.width=f+"px"}i.coverGutter&&(s.style.zIndex=5,s.style.position="relative",i.noHScroll||(s.style.marginLeft=-u.gutterTotalWidth+"px"))}function cu(i){if(i.height!=null)return i.height;var s=i.doc.cm;if(!s)return 0;if(!fe(document.body,i.node)){var l="position: relative;";i.coverGutter&&(l+="margin-left: -"+s.display.gutters.offsetWidth+"px;"),i.noHScroll&&(l+="width: "+s.display.wrapper.clientWidth+"px;"),W(s.display.measure,E("div",[i.node],null,l))}return i.height=i.node.parentNode.offsetHeight}function si(i,s){for(var l=ru(s);l!=i.wrapper;l=l.parentNode)if(!l||l.nodeType==1&&l.getAttribute("cm-ignore-events")=="true"||l.parentNode==i.sizer&&l!=i.mover)return!0}function Cc(i){return i.lineSpace.offsetTop}function Yp(i){return i.mover.offsetHeight-i.lineSpace.offsetHeight}function XE(i){if(i.cachedPaddingH)return i.cachedPaddingH;var s=W(i.measure,E("pre","x","CodeMirror-line-like")),l=window.getComputedStyle?window.getComputedStyle(s):s.currentStyle,u={left:parseInt(l.paddingLeft),right:parseInt(l.paddingRight)};return!isNaN(u.left)&&!isNaN(u.right)&&(i.cachedPaddingH=u),u}function Rn(i){return Qe-i.display.nativeBarWidth}function Ta(i){return i.display.scroller.clientWidth-Rn(i)-i.display.barWidth}function Kp(i){return i.display.scroller.clientHeight-Rn(i)-i.display.barHeight}function rV(i,s,l){var u=i.options.lineWrapping,f=u&&Ta(i);if(!s.measure.heights||u&&s.measure.width!=f){var h=s.measure.heights=[];if(u){s.measure.width=f;for(var g=s.text.firstChild.getClientRects(),_=0;_<g.length-1;_++){var y=g[_],k=g[_+1];Math.abs(y.bottom-k.bottom)>2&&h.push((y.bottom+k.top)/2-l.top)}}h.push(l.bottom-l.top)}}function VE(i,s,l){if(i.line==s)return{map:i.measure.map,cache:i.measure.cache};if(i.rest){for(var u=0;u<i.rest.length;u++)if(i.rest[u]==s)return{map:i.measure.maps[u],cache:i.measure.caches[u]};for(var f=0;f<i.rest.length;f++)if(w(i.rest[f])>l)return{map:i.measure.maps[f],cache:i.measure.caches[f],before:!0}}}function nV(i,s){s=_n(s);var l=w(s),u=i.display.externalMeasured=new WE(i.doc,s,l);u.lineN=l;var f=u.built=UE(i,u);return u.text=f.pre,W(i.display.lineMeasure,f.pre),u}function QE(i,s,l,u){return Dn(i,Ps(i,s),l,u)}function Xp(i,s){if(s>=i.display.viewFrom&&s<i.display.viewTo)return i.display.view[Sa(i,s)];var l=i.display.externalMeasured;if(l&&s>=l.lineN&&s<l.lineN+l.size)return l}function Ps(i,s){var l=w(s),u=Xp(i,l);u&&!u.text?u=null:u&&u.changes&&(GE(i,u,l,em(i)),i.curOp.forceUpdate=!0),u||(u=nV(i,s));var f=VE(u,s,l);return{line:s,view:u,rect:null,map:f.map,cache:f.cache,before:f.before,hasHeights:!1}}function Dn(i,s,l,u,f){s.before&&(l=-1);var h=l+(u||""),g;return s.cache.hasOwnProperty(h)?g=s.cache[h]:(s.rect||(s.rect=s.view.text.getBoundingClientRect()),s.hasHeights||(rV(i,s.view,s.rect),s.hasHeights=!0),g=aV(i,s,l,u),g.bogus||(s.cache[h]=g)),{left:g.left,right:g.right,top:f?g.rtop:g.top,bottom:f?g.rbottom:g.bottom}}var JE={left:0,right:0,top:0,bottom:0};function ZE(i,s,l){for(var u,f,h,g,_,y,k=0;k<i.length;k+=3)if(_=i[k],y=i[k+1],s<_?(f=0,h=1,g="left"):s<y?(f=s-_,h=f+1):(k==i.length-3||s==y&&i[k+3]>s)&&(h=y-_,f=h-1,s>=y&&(g="right")),f!=null){if(u=i[k+2],_==y&&l==(u.insertLeft?"left":"right")&&(g=l),l=="left"&&f==0)for(;k&&i[k-2]==i[k-3]&&i[k-1].insertLeft;)u=i[(k-=3)+2],g="left";if(l=="right"&&f==y-_)for(;k<i.length-3&&i[k+3]==i[k+4]&&!i[k+5].insertLeft;)u=i[(k+=3)+2],g="right";break}return{node:u,start:f,end:h,collapse:g,coverStart:_,coverEnd:y}}function iV(i,s){var l=JE;if(s=="left")for(var u=0;u<i.length&&(l=i[u]).left==l.right;u++);else for(var f=i.length-1;f>=0&&(l=i[f]).left==l.right;f--);return l}function aV(i,s,l,u){var f=ZE(s.map,l,u),h=f.node,g=f.start,_=f.end,y=f.collapse,k;if(h.nodeType==3){for(var L=0;L<4;L++){for(;g&&Ft(s.line.text.charAt(f.coverStart+g));)--g;for(;f.coverStart+_<f.coverEnd&&Ft(s.line.text.charAt(f.coverStart+_));)++_;if(p&&v<9&&g==0&&_==f.coverEnd-f.coverStart?k=h.parentNode.getBoundingClientRect():k=iV(V(h,g,_).getClientRects(),u),k.left||k.right||g==0)break;_=g,g=g-1,y="right"}p&&v<11&&(k=sV(i.display.measure,k))}else{g>0&&(y=u="right");var $;i.options.lineWrapping&&($=h.getClientRects()).length>1?k=$[u=="right"?$.length-1:0]:k=h.getBoundingClientRect()}if(p&&v<9&&!g&&(!k||!k.left&&!k.right)){var Y=h.parentNode.getClientRects()[0];Y?k={left:Y.left,right:Y.left+Ls(i.display),top:Y.top,bottom:Y.bottom}:k=JE}for(var z=k.top-s.rect.top,te=k.bottom-s.rect.top,de=(z+te)/2,ge=s.view.measure.heights,be=0;be<ge.length-1&&!(de<ge[be]);be++);var we=be?ge[be-1]:0,ye=ge[be],Oe={left:(y=="right"?k.right:k.left)-s.rect.left,right:(y=="left"?k.left:k.right)-s.rect.left,top:we,bottom:ye};return!k.left&&!k.right&&(Oe.bogus=!0),i.options.singleCursorHeightPerLine||(Oe.rtop=z,Oe.rbottom=te),Oe}function sV(i,s){if(!window.screen||screen.logicalXDPI==null||screen.logicalXDPI==screen.deviceXDPI||!Fp(i))return s;var l=screen.logicalXDPI/screen.deviceXDPI,u=screen.logicalYDPI/screen.deviceYDPI;return{left:s.left*l,right:s.right*l,top:s.top*u,bottom:s.bottom*u}}function eT(i){if(i.measure&&(i.measure.cache={},i.measure.heights=null,i.rest))for(var s=0;s<i.rest.length;s++)i.measure.caches[s]={}}function tT(i){i.display.externalMeasure=null,N(i.display.lineMeasure);for(var s=0;s<i.display.view.length;s++)eT(i.display.view[s])}function fu(i){tT(i),i.display.cachedCharWidth=i.display.cachedTextHeight=i.display.cachedPaddingH=null,i.options.lineWrapping||(i.display.maxLineChanged=!0),i.display.lineNumChars=null}function rT(i){return T&&S?-(i.body.getBoundingClientRect().left-parseInt(getComputedStyle(i.body).marginLeft)):i.defaultView.pageXOffset||(i.documentElement||i.body).scrollLeft}function nT(i){return T&&S?-(i.body.getBoundingClientRect().top-parseInt(getComputedStyle(i.body).marginTop)):i.defaultView.pageYOffset||(i.documentElement||i.body).scrollTop}function Vp(i){var s=_n(i),l=s.widgets,u=0;if(l)for(var f=0;f<l.length;++f)l[f].above&&(u+=cu(l[f]));return u}function wc(i,s,l,u,f){if(!f){var h=Vp(s);l.top+=h,l.bottom+=h}if(u=="line")return l;u||(u="local");var g=ai(s);if(u=="local"?g+=Cc(i.display):g-=i.display.viewOffset,u=="page"||u=="window"){var _=i.display.lineSpace.getBoundingClientRect();g+=_.top+(u=="window"?0:nT(We(i)));var y=_.left+(u=="window"?0:rT(We(i)));l.left+=y,l.right+=y}return l.top+=g,l.bottom+=g,l}function iT(i,s,l){if(l=="div")return s;var u=s.left,f=s.top;if(l=="page")u-=rT(We(i)),f-=nT(We(i));else if(l=="local"||!l){var h=i.display.sizer.getBoundingClientRect();u+=h.left,f+=h.top}var g=i.display.lineSpace.getBoundingClientRect();return{left:u-g.left,top:f-g.top}}function Sc(i,s,l,u,f){return u||(u=Re(i.doc,s.line)),wc(i,u,QE(i,u,s.ch,f),l)}function bn(i,s,l,u,f,h){u=u||Re(i.doc,s.line),f||(f=Ps(i,u));function g(te,de){var ge=Dn(i,f,te,de?"right":"left",h);return de?ge.left=ge.right:ge.right=ge.left,wc(i,u,ge,l)}var _=nt(u,i.doc.direction),y=s.ch,k=s.sticky;if(y>=u.text.length?(y=u.text.length,k="before"):y<=0&&(y=0,k="after"),!_)return g(k=="before"?y-1:y,k=="before");function L(te,de,ge){var be=_[de],we=be.level==1;return g(ge?te-1:te,we!=ge)}var $=Ii(_,y,k),Y=ka,z=L(y,$,k=="before");return Y!=null&&(z.other=L(y,Y,k!="before")),z}function aT(i,s){var l=0;s=Ke(i.doc,s),i.options.lineWrapping||(l=Ls(i.display)*s.ch);var u=Re(i.doc,s.line),f=ai(u)+Cc(i.display);return{left:l,right:l,top:f,bottom:f+u.height}}function Qp(i,s,l,u,f){var h=J(i,s,l);return h.xRel=f,u&&(h.outside=u),h}function Jp(i,s,l){var u=i.doc;if(l+=i.display.viewOffset,l<0)return Qp(u.first,0,null,-1,-1);var f=M(u,l),h=u.first+u.size-1;if(f>h)return Qp(u.first+u.size-1,Re(u,h).text.length,null,1,1);s<0&&(s=0);for(var g=Re(u,f);;){var _=oV(i,g,f,s,l),y=DX(g,_.ch+(_.xRel>0||_.outside>0?1:0));if(!y)return _;var k=y.find(1);if(k.line==f)return k;g=Re(u,f=k.line)}}function sT(i,s,l,u){u-=Vp(s);var f=s.text.length,h=Pn(function(g){return Dn(i,l,g-1).bottom<=u},f,0);return f=Pn(function(g){return Dn(i,l,g).top>u},h,f),{begin:h,end:f}}function oT(i,s,l,u){l||(l=Ps(i,s));var f=wc(i,s,Dn(i,l,u),"line").top;return sT(i,s,l,f)}function Zp(i,s,l,u){return i.bottom<=l?!1:i.top>l?!0:(u?i.left:i.right)>s}function oV(i,s,l,u,f){f-=ai(s);var h=Ps(i,s),g=Vp(s),_=0,y=s.text.length,k=!0,L=nt(s,i.doc.direction);if(L){var $=(i.options.lineWrapping?lV:uV)(i,s,l,h,L,u,f);k=$.level!=1,_=k?$.from:$.to-1,y=k?$.to:$.from-1}var Y=null,z=null,te=Pn(function(Fe){var De=Dn(i,h,Fe);return De.top+=g,De.bottom+=g,Zp(De,u,f,!1)?(De.top<=f&&De.left<=u&&(Y=Fe,z=De),!0):!1},_,y),de,ge,be=!1;if(z){var we=u-z.left<z.right-u,ye=we==k;te=Y+(ye?0:1),ge=ye?"after":"before",de=we?z.left:z.right}else{!k&&(te==y||te==_)&&te++,ge=te==0?"after":te==s.text.length?"before":Dn(i,h,te-(k?1:0)).bottom+g<=f==k?"after":"before";var Oe=bn(i,J(l,te,ge),"line",s,h);de=Oe.left,be=f<Oe.top?-1:f>=Oe.bottom?1:0}return te=Ni(s.text,te,1),Qp(l,te,ge,be,u-de)}function uV(i,s,l,u,f,h,g){var _=Pn(function($){var Y=f[$],z=Y.level!=1;return Zp(bn(i,J(l,z?Y.to:Y.from,z?"before":"after"),"line",s,u),h,g,!0)},0,f.length-1),y=f[_];if(_>0){var k=y.level!=1,L=bn(i,J(l,k?y.from:y.to,k?"after":"before"),"line",s,u);Zp(L,h,g,!0)&&L.top>g&&(y=f[_-1])}return y}function lV(i,s,l,u,f,h,g){var _=sT(i,s,u,g),y=_.begin,k=_.end;/\s/.test(s.text.charAt(k-1))&&k--;for(var L=null,$=null,Y=0;Y<f.length;Y++){var z=f[Y];if(!(z.from>=k||z.to<=y)){var te=z.level!=1,de=Dn(i,u,te?Math.min(k,z.to)-1:Math.max(y,z.from)).right,ge=de<h?h-de+1e9:de-h;(!L||$>ge)&&(L=z,$=ge)}}return L||(L=f[f.length-1]),L.from<y&&(L={from:y,to:L.to,level:L.level}),L.to>k&&(L={from:L.from,to:k,level:L.level}),L}var Ca;function Is(i){if(i.cachedTextHeight!=null)return i.cachedTextHeight;if(Ca==null){Ca=E("pre",null,"CodeMirror-line-like");for(var s=0;s<49;++s)Ca.appendChild(document.createTextNode("x")),Ca.appendChild(E("br"));Ca.appendChild(document.createTextNode("x"))}W(i.measure,Ca);var l=Ca.offsetHeight/50;return l>3&&(i.cachedTextHeight=l),N(i.measure),l||1}function Ls(i){if(i.cachedCharWidth!=null)return i.cachedCharWidth;var s=E("span","xxxxxxxxxx"),l=E("pre",[s],"CodeMirror-line-like");W(i.measure,l);var u=s.getBoundingClientRect(),f=(u.right-u.left)/10;return f>2&&(i.cachedCharWidth=f),f||10}function em(i){for(var s=i.display,l={},u={},f=s.gutters.clientLeft,h=s.gutters.firstChild,g=0;h;h=h.nextSibling,++g){var _=i.display.gutterSpecs[g].className;l[_]=h.offsetLeft+h.clientLeft+f,u[_]=h.clientWidth}return{fixedPos:tm(s),gutterTotalWidth:s.gutters.offsetWidth,gutterLeft:l,gutterWidth:u,wrapperWidth:s.wrapper.clientWidth}}function tm(i){return i.scroller.getBoundingClientRect().left-i.sizer.getBoundingClientRect().left}function uT(i){var s=Is(i.display),l=i.options.lineWrapping,u=l&&Math.max(5,i.display.scroller.clientWidth/Ls(i.display)-3);return function(f){if($i(i.doc,f))return 0;var h=0;if(f.widgets)for(var g=0;g<f.widgets.length;g++)f.widgets[g].height&&(h+=f.widgets[g].height);return l?h+(Math.ceil(f.text.length/u)||1)*s:h+s}}function rm(i){var s=i.doc,l=uT(i);s.iter(function(u){var f=l(u);f!=u.height&&Gr(u,f)})}function wa(i,s,l,u){var f=i.display;if(!l&&ru(s).getAttribute("cm-not-content")=="true")return null;var h,g,_=f.lineSpace.getBoundingClientRect();try{h=s.clientX-_.left,g=s.clientY-_.top}catch{return null}var y=Jp(i,h,g),k;if(u&&y.xRel>0&&(k=Re(i.doc,y.line).text).length==y.ch){var L=Le(k,k.length,i.options.tabSize)-k.length;y=J(y.line,Math.max(0,Math.round((h-XE(i.display).left)/Ls(i.display))-L))}return y}function Sa(i,s){if(s>=i.display.viewTo||(s-=i.display.viewFrom,s<0))return null;for(var l=i.display.view,u=0;u<l.length;u++)if(s-=l[u].size,s<0)return u}function Cr(i,s,l,u){s==null&&(s=i.doc.first),l==null&&(l=i.doc.first+i.doc.size),u||(u=0);var f=i.display;if(u&&l<f.viewTo&&(f.updateLineNumbers==null||f.updateLineNumbers>s)&&(f.updateLineNumbers=s),i.curOp.viewChanged=!0,s>=f.viewTo)ii&&Wp(i.doc,s)<f.viewTo&&Bi(i);else if(l<=f.viewFrom)ii&&BE(i.doc,l+u)>f.viewFrom?Bi(i):(f.viewFrom+=u,f.viewTo+=u);else if(s<=f.viewFrom&&l>=f.viewTo)Bi(i);else if(s<=f.viewFrom){var h=xc(i,l,l+u,1);h?(f.view=f.view.slice(h.index),f.viewFrom=h.lineN,f.viewTo+=u):Bi(i)}else if(l>=f.viewTo){var g=xc(i,s,s,-1);g?(f.view=f.view.slice(0,g.index),f.viewTo=g.lineN):Bi(i)}else{var _=xc(i,s,s,-1),y=xc(i,l,l+u,1);_&&y?(f.view=f.view.slice(0,_.index).concat(Tc(i,_.lineN,y.lineN)).concat(f.view.slice(y.index)),f.viewTo+=u):Bi(i)}var k=f.externalMeasured;k&&(l<k.lineN?k.lineN+=u:s<k.lineN+k.size&&(f.externalMeasured=null))}function Fi(i,s,l){i.curOp.viewChanged=!0;var u=i.display,f=i.display.externalMeasured;if(f&&s>=f.lineN&&s<f.lineN+f.size&&(u.externalMeasured=null),!(s<u.viewFrom||s>=u.viewTo)){var h=u.view[Sa(i,s)];if(h.node!=null){var g=h.changes||(h.changes=[]);Ee(g,l)==-1&&g.push(l)}}}function Bi(i){i.display.viewFrom=i.display.viewTo=i.doc.first,i.display.view=[],i.display.viewOffset=0}function xc(i,s,l,u){var f=Sa(i,s),h,g=i.display.view;if(!ii||l==i.doc.first+i.doc.size)return{index:f,lineN:l};for(var _=i.display.viewFrom,y=0;y<f;y++)_+=g[y].size;if(_!=s){if(u>0){if(f==g.length-1)return null;h=_+g[f].size-s,f++}else h=_-s;s+=h,l+=h}for(;Wp(i.doc,l)!=l;){if(f==(u<0?0:g.length-1))return null;l+=u*g[f-(u<0?1:0)].size,f+=u}return{index:f,lineN:l}}function cV(i,s,l){var u=i.display,f=u.view;f.length==0||s>=u.viewTo||l<=u.viewFrom?(u.view=Tc(i,s,l),u.viewFrom=s):(u.viewFrom>s?u.view=Tc(i,s,u.viewFrom).concat(u.view):u.viewFrom<s&&(u.view=u.view.slice(Sa(i,s))),u.viewFrom=s,u.viewTo<l?u.view=u.view.concat(Tc(i,u.viewTo,l)):u.viewTo>l&&(u.view=u.view.slice(0,Sa(i,l)))),u.viewTo=l}function lT(i){for(var s=i.display.view,l=0,u=0;u<s.length;u++){var f=s[u];!f.hidden&&(!f.node||f.changes)&&++l}return l}function du(i){i.display.input.showSelection(i.display.input.prepareSelection())}function cT(i,s){s===void 0&&(s=!0);var l=i.doc,u={},f=u.cursors=document.createDocumentFragment(),h=u.selection=document.createDocumentFragment(),g=i.options.$customCursor;g&&(s=!0);for(var _=0;_<l.sel.ranges.length;_++)if(!(!s&&_==l.sel.primIndex)){var y=l.sel.ranges[_];if(!(y.from().line>=i.display.viewTo||y.to().line<i.display.viewFrom)){var k=y.empty();if(g){var L=g(i,y);L&&nm(i,L,f)}else(k||i.options.showCursorWhenSelecting)&&nm(i,y.head,f);k||fV(i,y,h)}}return u}function nm(i,s,l){var u=bn(i,s,"div",null,null,!i.options.singleCursorHeightPerLine),f=l.appendChild(E("div","\xA0","CodeMirror-cursor"));if(f.style.left=u.left+"px",f.style.top=u.top+"px",f.style.height=Math.max(0,u.bottom-u.top)*i.options.cursorHeight+"px",/\bcm-fat-cursor\b/.test(i.getWrapperElement().className)){var h=Sc(i,s,"div",null,null),g=h.right-h.left;f.style.width=(g>0?g:i.defaultCharWidth())+"px"}if(u.other){var _=l.appendChild(E("div","\xA0","CodeMirror-cursor CodeMirror-secondarycursor"));_.style.display="",_.style.left=u.other.left+"px",_.style.top=u.other.top+"px",_.style.height=(u.other.bottom-u.other.top)*.85+"px"}}function Ac(i,s){return i.top-s.top||i.left-s.left}function fV(i,s,l){var u=i.display,f=i.doc,h=document.createDocumentFragment(),g=XE(i.display),_=g.left,y=Math.max(u.sizerWidth,Ta(i)-u.sizer.offsetLeft)-g.right,k=f.direction=="ltr";function L(ye,Oe,Fe,De){Oe<0&&(Oe=0),Oe=Math.round(Oe),De=Math.round(De),h.appendChild(E("div",null,"CodeMirror-selected","position: absolute; left: "+ye+`px; top: `+Oe+"px; width: "+(Fe??y-ye)+`px; height: `+(De-Oe)+"px"))}function $(ye,Oe,Fe){var De=Re(f,ye),Je=De.text.length,vt,Vt;function At(Bt,xr){return Sc(i,J(ye,Bt),"div",De,xr)}function $r(Bt,xr,rr){var jt=oT(i,De,null,Bt),Ht=xr=="ltr"==(rr=="after")?"left":"right",Rt=rr=="after"?jt.begin:jt.end-(/\s/.test(De.text.charAt(jt.end-1))?2:1);return At(Rt,Ht)[Ht]}var Sr=nt(De,f.direction);return Pi(Sr,Oe||0,Fe??Je,function(Bt,xr,rr,jt){var Ht=rr=="ltr",Rt=At(Bt,Ht?"left":"right"),Ar=At(xr-1,Ht?"right":"left"),qs=Oe==null&&Bt==0,zi=Fe==null&&xr==Je,ur=jt==0,Mn=!Sr||jt==Sr.length-1;if(Ar.top-Rt.top<=3){var Qt=(k?qs:zi)&&ur,Nm=(k?zi:qs)&&Mn,li=Qt?_:(Ht?Rt:Ar).left,Pa=Nm?y:(Ht?Ar:Rt).right;L(li,Rt.top,Pa-li,Rt.bottom)}else{var Ia,mr,Ys,Pm;Ht?(Ia=k&&qs&&ur?_:Rt.left,mr=k?y:$r(Bt,rr,"before"),Ys=k?_:$r(xr,rr,"after"),Pm=k&&zi&&Mn?y:Ar.right):(Ia=k?$r(Bt,rr,"before"):_,mr=!k&&qs&&ur?y:Rt.right,Ys=!k&&zi&&Mn?_:Ar.left,Pm=k?$r(xr,rr,"after"):y),L(Ia,Rt.top,mr-Ia,Rt.bottom),Rt.bottom<Ar.top&&L(_,Rt.bottom,null,Ar.top),L(Ys,Ar.top,Pm-Ys,Ar.bottom)}(!vt||Ac(Rt,vt)<0)&&(vt=Rt),Ac(Ar,vt)<0&&(vt=Ar),(!Vt||Ac(Rt,Vt)<0)&&(Vt=Rt),Ac(Ar,Vt)<0&&(Vt=Ar)}),{start:vt,end:Vt}}var Y=s.from(),z=s.to();if(Y.line==z.line)$(Y.line,Y.ch,z.ch);else{var te=Re(f,Y.line),de=Re(f,z.line),ge=_n(te)==_n(de),be=$(Y.line,Y.ch,ge?te.text.length+1:null).end,we=$(z.line,ge?0:null,z.ch).start;ge&&(be.top<we.top-2?(L(be.right,be.top,null,be.bottom),L(_,we.top,we.left,we.bottom)):L(be.right,be.top,we.left-be.right,be.bottom)),be.bottom<we.top&&L(_,be.bottom,null,we.top)}l.appendChild(h)}function im(i){if(i.state.focused){var s=i.display;clearInterval(s.blinker);var l=!0;s.cursorDiv.style.visibility="",i.options.cursorBlinkRate>0?s.blinker=setInterval(function(){i.hasFocus()||Rs(i),s.cursorDiv.style.visibility=(l=!l)?"":"hidden"},i.options.cursorBlinkRate):i.options.cursorBlinkRate<0&&(s.cursorDiv.style.visibility="hidden")}}function fT(i){i.hasFocus()||(i.display.input.focus(),i.state.focused||sm(i))}function am(i){i.state.delayingBlurEvent=!0,setTimeout(function(){i.state.delayingBlurEvent&&(i.state.delayingBlurEvent=!1,i.state.focused&&Rs(i))},100)}function sm(i,s){i.state.delayingBlurEvent&&!i.state.draggingText&&(i.state.delayingBlurEvent=!1),i.options.readOnly!="nocursor"&&(i.state.focused||(Pt(i,"focus",i,s),i.state.focused=!0,Ie(i.display.wrapper,"CodeMirror-focused"),!i.curOp&&i.display.selForContextMenu!=i.doc.sel&&(i.display.input.reset(),b&&setTimeout(function(){return i.display.input.reset(!0)},20)),i.display.input.receivedFocus()),im(i))}function Rs(i,s){i.state.delayingBlurEvent||(i.state.focused&&(Pt(i,"blur",i,s),i.state.focused=!1,U(i.display.wrapper,"CodeMirror-focused")),clearInterval(i.display.blinker),setTimeout(function(){i.state.focused||(i.display.shift=!1)},150))}function Oc(i){for(var s=i.display,l=s.lineDiv.offsetTop,u=Math.max(0,s.scroller.getBoundingClientRect().top),f=s.lineDiv.getBoundingClientRect().top,h=0,g=0;g<s.view.length;g++){var _=s.view[g],y=i.options.lineWrapping,k=void 0,L=0;if(!_.hidden){if(f+=_.line.height,p&&v<8){var $=_.node.offsetTop+_.node.offsetHeight;k=$-l,l=$}else{var Y=_.node.getBoundingClientRect();k=Y.bottom-Y.top,!y&&_.text.firstChild&&(L=_.text.firstChild.getBoundingClientRect().right-Y.left-1)}var z=_.line.height-k;if((z>.005||z<-.005)&&(f<u&&(h-=z),Gr(_.line,k),dT(_.line),_.rest))for(var te=0;te<_.rest.length;te++)dT(_.rest[te]);if(L>i.display.sizerWidth){var de=Math.ceil(L/Ls(i.display));de>i.display.maxLineLength&&(i.display.maxLineLength=de,i.display.maxLine=_.line,i.display.maxLineChanged=!0)}}}Math.abs(h)>2&&(s.scroller.scrollTop+=h)}function dT(i){if(i.widgets)for(var s=0;s<i.widgets.length;++s){var l=i.widgets[s],u=l.node.parentNode;u&&(l.height=u.offsetHeight)}}function Nc(i,s,l){var u=l&&l.top!=null?Math.max(0,l.top):i.scroller.scrollTop;u=Math.floor(u-Cc(i));var f=l&&l.bottom!=null?l.bottom:u+i.wrapper.clientHeight,h=M(s,u),g=M(s,f);if(l&&l.ensure){var _=l.ensure.from.line,y=l.ensure.to.line;_<h?(h=_,g=M(s,ai(Re(s,_))+i.wrapper.clientHeight)):Math.min(y,s.lastLine())>=g&&(h=M(s,ai(Re(s,y))-i.wrapper.clientHeight),g=y)}return{from:h,to:Math.max(g,h+1)}}function dV(i,s){if(!It(i,"scrollCursorIntoView")){var l=i.display,u=l.sizer.getBoundingClientRect(),f=null,h=l.wrapper.ownerDocument;if(s.top+u.top<0?f=!0:s.bottom+u.top>(h.defaultView.innerHeight||h.documentElement.clientHeight)&&(f=!1),f!=null&&!O){var g=E("div","\u200B",null,`position: absolute; top: `+(s.top-l.viewOffset-Cc(i.display))+`px; height: `+(s.bottom-s.top+Rn(i)+l.barHeight)+`px; left: `+s.left+"px; width: "+Math.max(2,s.right-s.left)+"px;");i.display.lineSpace.appendChild(g),g.scrollIntoView(f),i.display.lineSpace.removeChild(g)}}}function hV(i,s,l,u){u==null&&(u=0);var f;!i.options.lineWrapping&&s==l&&(l=s.sticky=="before"?J(s.line,s.ch+1,"before"):s,s=s.ch?J(s.line,s.sticky=="before"?s.ch-1:s.ch,"after"):s);for(var h=0;h<5;h++){var g=!1,_=bn(i,s),y=!l||l==s?_:bn(i,l);f={left:Math.min(_.left,y.left),top:Math.min(_.top,y.top)-u,right:Math.max(_.left,y.left),bottom:Math.max(_.bottom,y.bottom)+u};var k=om(i,f),L=i.doc.scrollTop,$=i.doc.scrollLeft;if(k.scrollTop!=null&&(pu(i,k.scrollTop),Math.abs(i.doc.scrollTop-L)>1&&(g=!0)),k.scrollLeft!=null&&(xa(i,k.scrollLeft),Math.abs(i.doc.scrollLeft-$)>1&&(g=!0)),!g)break}return f}function pV(i,s){var l=om(i,s);l.scrollTop!=null&&pu(i,l.scrollTop),l.scrollLeft!=null&&xa(i,l.scrollLeft)}function om(i,s){var l=i.display,u=Is(i.display);s.top<0&&(s.top=0);var f=i.curOp&&i.curOp.scrollTop!=null?i.curOp.scrollTop:l.scroller.scrollTop,h=Kp(i),g={};s.bottom-s.top>h&&(s.bottom=s.top+h);var _=i.doc.height+Yp(l),y=s.top<u,k=s.bottom>_-u;if(s.top<f)g.scrollTop=y?0:s.top;else if(s.bottom>f+h){var L=Math.min(s.top,(k?_:s.bottom)-h);L!=f&&(g.scrollTop=L)}var $=i.options.fixedGutter?0:l.gutters.offsetWidth,Y=i.curOp&&i.curOp.scrollLeft!=null?i.curOp.scrollLeft:l.scroller.scrollLeft-$,z=Ta(i)-l.gutters.offsetWidth,te=s.right-s.left>z;return te&&(s.right=s.left+z),s.left<10?g.scrollLeft=0:s.left<Y?g.scrollLeft=Math.max(0,s.left+$-(te?0:10)):s.right>z+Y-3&&(g.scrollLeft=s.right+(te?0:10)-z),g}function um(i,s){s!=null&&(Pc(i),i.curOp.scrollTop=(i.curOp.scrollTop==null?i.doc.scrollTop:i.curOp.scrollTop)+s)}function Ds(i){Pc(i);var s=i.getCursor();i.curOp.scrollToPos={from:s,to:s,margin:i.options.cursorScrollMargin}}function hu(i,s,l){(s!=null||l!=null)&&Pc(i),s!=null&&(i.curOp.scrollLeft=s),l!=null&&(i.curOp.scrollTop=l)}function mV(i,s){Pc(i),i.curOp.scrollToPos=s}function Pc(i){var s=i.curOp.scrollToPos;if(s){i.curOp.scrollToPos=null;var l=aT(i,s.from),u=aT(i,s.to);hT(i,l,u,s.margin)}}function hT(i,s,l,u){var f=om(i,{left:Math.min(s.left,l.left),top:Math.min(s.top,l.top)-u,right:Math.max(s.right,l.right),bottom:Math.max(s.bottom,l.bottom)+u});hu(i,f.scrollLeft,f.scrollTop)}function pu(i,s){Math.abs(i.doc.scrollTop-s)<2||(a||cm(i,{top:s}),pT(i,s,!0),a&&cm(i),gu(i,100))}function pT(i,s,l){s=Math.max(0,Math.min(i.display.scroller.scrollHeight-i.display.scroller.clientHeight,s)),!(i.display.scroller.scrollTop==s&&!l)&&(i.doc.scrollTop=s,i.display.scrollbars.setScrollTop(s),i.display.scroller.scrollTop!=s&&(i.display.scroller.scrollTop=s))}function xa(i,s,l,u){s=Math.max(0,Math.min(s,i.display.scroller.scrollWidth-i.display.scroller.clientWidth)),!((l?s==i.doc.scrollLeft:Math.abs(i.doc.scrollLeft-s)<2)&&!u)&&(i.doc.scrollLeft=s,bT(i),i.display.scroller.scrollLeft!=s&&(i.display.scroller.scrollLeft=s),i.display.scrollbars.setScrollLeft(s))}function mu(i){var s=i.display,l=s.gutters.offsetWidth,u=Math.round(i.doc.height+Yp(i.display));return{clientHeight:s.scroller.clientHeight,viewHeight:s.wrapper.clientHeight,scrollWidth:s.scroller.scrollWidth,clientWidth:s.scroller.clientWidth,viewWidth:s.wrapper.clientWidth,barLeft:i.options.fixedGutter?l:0,docHeight:u,scrollHeight:u+Rn(i)+s.barHeight,nativeBarWidth:s.nativeBarWidth,gutterWidth:l}}var Aa=function(i,s,l){this.cm=l;var u=this.vert=E("div",[E("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),f=this.horiz=E("div",[E("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");u.tabIndex=f.tabIndex=-1,i(u),i(f),$e(u,"scroll",function(){u.clientHeight&&s(u.scrollTop,"vertical")}),$e(f,"scroll",function(){f.clientWidth&&s(f.scrollLeft,"horizontal")}),this.checkedZeroWidth=!1,p&&v<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Aa.prototype.update=function(i){var s=i.scrollWidth>i.clientWidth+1,l=i.scrollHeight>i.clientHeight+1,u=i.nativeBarWidth;if(l){this.vert.style.display="block",this.vert.style.bottom=s?u+"px":"0";var f=i.viewHeight-(s?u:0);this.vert.firstChild.style.height=Math.max(0,i.scrollHeight-i.clientHeight+f)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(s){this.horiz.style.display="block",this.horiz.style.right=l?u+"px":"0",this.horiz.style.left=i.barLeft+"px";var h=i.viewWidth-i.barLeft-(l?u:0);this.horiz.firstChild.style.width=Math.max(0,i.scrollWidth-i.clientWidth+h)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&i.clientHeight>0&&(u==0&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:l?u:0,bottom:s?u:0}},Aa.prototype.setScrollLeft=function(i){this.horiz.scrollLeft!=i&&(this.horiz.scrollLeft=i),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Aa.prototype.setScrollTop=function(i){this.vert.scrollTop!=i&&(this.vert.scrollTop=i),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Aa.prototype.zeroWidthHack=function(){var i=R&&!j?"12px":"18px";this.horiz.style.height=this.vert.style.width=i,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new xe,this.disableVert=new xe},Aa.prototype.enableZeroWidthBar=function(i,s,l){i.style.visibility="";function u(){var f=i.getBoundingClientRect(),h=l=="vert"?document.elementFromPoint(f.right-1,(f.top+f.bottom)/2):document.elementFromPoint((f.right+f.left)/2,f.bottom-1);h!=i?i.style.visibility="hidden":s.set(1e3,u)}s.set(1e3,u)},Aa.prototype.clear=function(){var i=this.horiz.parentNode;i.removeChild(this.horiz),i.removeChild(this.vert)};var vu=function(){};vu.prototype.update=function(){return{bottom:0,right:0}},vu.prototype.setScrollLeft=function(){},vu.prototype.setScrollTop=function(){},vu.prototype.clear=function(){};function Ms(i,s){s||(s=mu(i));var l=i.display.barWidth,u=i.display.barHeight;mT(i,s);for(var f=0;f<4&&l!=i.display.barWidth||u!=i.display.barHeight;f++)l!=i.display.barWidth&&i.options.lineWrapping&&Oc(i),mT(i,mu(i)),l=i.display.barWidth,u=i.display.barHeight}function mT(i,s){var l=i.display,u=l.scrollbars.update(s);l.sizer.style.paddingRight=(l.barWidth=u.right)+"px",l.sizer.style.paddingBottom=(l.barHeight=u.bottom)+"px",l.heightForcer.style.borderBottom=u.bottom+"px solid transparent",u.right&&u.bottom?(l.scrollbarFiller.style.display="block",l.scrollbarFiller.style.height=u.bottom+"px",l.scrollbarFiller.style.width=u.right+"px"):l.scrollbarFiller.style.display="",u.bottom&&i.options.coverGutterNextToScrollbar&&i.options.fixedGutter?(l.gutterFiller.style.display="block",l.gutterFiller.style.height=u.bottom+"px",l.gutterFiller.style.width=s.gutterWidth+"px"):l.gutterFiller.style.display=""}var vT={native:Aa,null:vu};function gT(i){i.display.scrollbars&&(i.display.scrollbars.clear(),i.display.scrollbars.addClass&&U(i.display.wrapper,i.display.scrollbars.addClass)),i.display.scrollbars=new vT[i.options.scrollbarStyle](function(s){i.display.wrapper.insertBefore(s,i.display.scrollbarFiller),$e(s,"mousedown",function(){i.state.focused&&setTimeout(function(){return i.display.input.focus()},0)}),s.setAttribute("cm-not-content","true")},function(s,l){l=="horizontal"?xa(i,s):pu(i,s)},i),i.display.scrollbars.addClass&&Ie(i.display.wrapper,i.display.scrollbars.addClass)}var vV=0;function Oa(i){i.curOp={cm:i,viewChanged:!1,startHeight:i.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++vV,markArrays:null},YX(i.curOp)}function Na(i){var s=i.curOp;s&&XX(s,function(l){for(var u=0;u<l.ops.length;u++)l.ops[u].cm.curOp=null;gV(l)})}function gV(i){for(var s=i.ops,l=0;l<s.length;l++)_V(s[l]);for(var u=0;u<s.length;u++)bV(s[u]);for(var f=0;f<s.length;f++)yV(s[f]);for(var h=0;h<s.length;h++)kV(s[h]);for(var g=0;g<s.length;g++)EV(s[g])}function _V(i){var s=i.cm,l=s.display;CV(s),i.updateMaxLine&&zp(s),i.mustUpdate=i.viewChanged||i.forceUpdate||i.scrollTop!=null||i.scrollToPos&&(i.scrollToPos.from.line<l.viewFrom||i.scrollToPos.to.line>=l.viewTo)||l.maxLineChanged&&s.options.lineWrapping,i.update=i.mustUpdate&&new Ic(s,i.mustUpdate&&{top:i.scrollTop,ensure:i.scrollToPos},i.forceUpdate)}function bV(i){i.updatedDisplay=i.mustUpdate&&lm(i.cm,i.update)}function yV(i){var s=i.cm,l=s.display;i.updatedDisplay&&Oc(s),i.barMeasure=mu(s),l.maxLineChanged&&!s.options.lineWrapping&&(i.adjustWidthTo=QE(s,l.maxLine,l.maxLine.text.length).left+3,s.display.sizerWidth=i.adjustWidthTo,i.barMeasure.scrollWidth=Math.max(l.scroller.clientWidth,l.sizer.offsetLeft+i.adjustWidthTo+Rn(s)+s.display.barWidth),i.maxScrollLeft=Math.max(0,l.sizer.offsetLeft+i.adjustWidthTo-Ta(s))),(i.updatedDisplay||i.selectionChanged)&&(i.preparedSelection=l.input.prepareSelection())}function kV(i){var s=i.cm;i.adjustWidthTo!=null&&(s.display.sizer.style.minWidth=i.adjustWidthTo+"px",i.maxScrollLeft<s.doc.scrollLeft&&xa(s,Math.min(s.display.scroller.scrollLeft,i.maxScrollLeft),!0),s.display.maxLineChanged=!1);var l=i.focus&&i.focus==he(at(s));i.preparedSelection&&s.display.input.showSelection(i.preparedSelection,l),(i.updatedDisplay||i.startHeight!=s.doc.height)&&Ms(s,i.barMeasure),i.updatedDisplay&&dm(s,i.barMeasure),i.selectionChanged&&im(s),s.state.focused&&i.updateInput&&s.display.input.reset(i.typing),l&&fT(i.cm)}function EV(i){var s=i.cm,l=s.display,u=s.doc;if(i.updatedDisplay&&_T(s,i.update),l.wheelStartX!=null&&(i.scrollTop!=null||i.scrollLeft!=null||i.scrollToPos)&&(l.wheelStartX=l.wheelStartY=null),i.scrollTop!=null&&pT(s,i.scrollTop,i.forceScroll),i.scrollLeft!=null&&xa(s,i.scrollLeft,!0,!0),i.scrollToPos){var f=hV(s,Ke(u,i.scrollToPos.from),Ke(u,i.scrollToPos.to),i.scrollToPos.margin);dV(s,f)}var h=i.maybeHiddenMarkers,g=i.maybeUnhiddenMarkers;if(h)for(var _=0;_<h.length;++_)h[_].lines.length||Pt(h[_],"hide");if(g)for(var y=0;y<g.length;++y)g[y].lines.length&&Pt(g[y],"unhide");l.wrapper.offsetHeight&&(u.scrollTop=s.display.scroller.scrollTop),i.changeObjs&&Pt(s,"changes",s,i.changeObjs),i.update&&i.update.finish()}function Mr(i,s){if(i.curOp)return s();Oa(i);try{return s()}finally{Na(i)}}function Kt(i,s){return function(){if(i.curOp)return s.apply(i,arguments);Oa(i);try{return s.apply(i,arguments)}finally{Na(i)}}}function pr(i){return function(){if(this.curOp)return i.apply(this,arguments);Oa(this);try{return i.apply(this,arguments)}finally{Na(this)}}}function Xt(i){return function(){var s=this.cm;if(!s||s.curOp)return i.apply(this,arguments);Oa(s);try{return i.apply(this,arguments)}finally{Na(s)}}}function gu(i,s){i.doc.highlightFrontier<i.display.viewTo&&i.state.highlight.set(s,Te(TV,i))}function TV(i){var s=i.doc;if(!(s.highlightFrontier>=i.display.viewTo)){var l=+new Date+i.options.workTime,u=su(i,s.highlightFrontier),f=[];s.iter(u.line,Math.min(s.first+s.size,i.display.viewTo+500),function(h){if(u.line>=i.display.viewFrom){var g=h.styles,_=h.text.length>i.options.maxHighlightLength?In(s.mode,u.state):null,y=wE(i,h,u,!0);_&&(u.state=_),h.styles=y.styles;var k=h.styleClasses,L=y.classes;L?h.styleClasses=L:k&&(h.styleClasses=null);for(var $=!g||g.length!=h.styles.length||k!=L&&(!k||!L||k.bgClass!=L.bgClass||k.textClass!=L.textClass),Y=0;!$&&Y<g.length;++Y)$=g[Y]!=h.styles[Y];$&&f.push(u.line),h.stateAfter=u.save(),u.nextLine()}else h.text.length<=i.options.maxHighlightLength&&Bp(i,h.text,u),h.stateAfter=u.line%5==0?u.save():null,u.nextLine();if(+new Date>l)return gu(i,i.options.workDelay),!0}),s.highlightFrontier=u.line,s.modeFrontier=Math.max(s.modeFrontier,u.line),f.length&&Mr(i,function(){for(var h=0;h<f.length;h++)Fi(i,f[h],"text")})}}var Ic=function(i,s,l){var u=i.display;this.viewport=s,this.visible=Nc(u,i.doc,s),this.editorIsHidden=!u.wrapper.offsetWidth,this.wrapperHeight=u.wrapper.clientHeight,this.wrapperWidth=u.wrapper.clientWidth,this.oldDisplayWidth=Ta(i),this.force=l,this.dims=em(i),this.events=[]};Ic.prototype.signal=function(i,s){Dr(i,s)&&this.events.push(arguments)},Ic.prototype.finish=function(){for(var i=0;i<this.events.length;i++)Pt.apply(null,this.events[i])};function CV(i){var s=i.display;!s.scrollbarsClipped&&s.scroller.offsetWidth&&(s.nativeBarWidth=s.scroller.offsetWidth-s.scroller.clientWidth,s.heightForcer.style.height=Rn(i)+"px",s.sizer.style.marginBottom=-s.nativeBarWidth+"px",s.sizer.style.borderRightWidth=Rn(i)+"px",s.scrollbarsClipped=!0)}function wV(i){if(i.hasFocus())return null;var s=he(at(i));if(!s||!fe(i.display.lineDiv,s))return null;var l={activeElt:s};if(window.getSelection){var u=Pe(i).getSelection();u.anchorNode&&u.extend&&fe(i.display.lineDiv,u.anchorNode)&&(l.anchorNode=u.anchorNode,l.anchorOffset=u.anchorOffset,l.focusNode=u.focusNode,l.focusOffset=u.focusOffset)}return l}function SV(i){if(!(!i||!i.activeElt||i.activeElt==he(Ve(i.activeElt)))&&(i.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(i.activeElt.nodeName)&&i.anchorNode&&fe(document.body,i.anchorNode)&&fe(document.body,i.focusNode))){var s=i.activeElt.ownerDocument,l=s.defaultView.getSelection(),u=s.createRange();u.setEnd(i.anchorNode,i.anchorOffset),u.collapse(!1),l.removeAllRanges(),l.addRange(u),l.extend(i.focusNode,i.focusOffset)}}function lm(i,s){var l=i.display,u=i.doc;if(s.editorIsHidden)return Bi(i),!1;if(!s.force&&s.visible.from>=l.viewFrom&&s.visible.to<=l.viewTo&&(l.updateLineNumbers==null||l.updateLineNumbers>=l.viewTo)&&l.renderedView==l.view&&lT(i)==0)return!1;yT(i)&&(Bi(i),s.dims=em(i));var f=u.first+u.size,h=Math.max(s.visible.from-i.options.viewportMargin,u.first),g=Math.min(f,s.visible.to+i.options.viewportMargin);l.viewFrom<h&&h-l.viewFrom<20&&(h=Math.max(u.first,l.viewFrom)),l.viewTo>g&&l.viewTo-g<20&&(g=Math.min(f,l.viewTo)),ii&&(h=Wp(i.doc,h),g=BE(i.doc,g));var _=h!=l.viewFrom||g!=l.viewTo||l.lastWrapHeight!=s.wrapperHeight||l.lastWrapWidth!=s.wrapperWidth;cV(i,h,g),l.viewOffset=ai(Re(i.doc,l.viewFrom)),i.display.mover.style.top=l.viewOffset+"px";var y=lT(i);if(!_&&y==0&&!s.force&&l.renderedView==l.view&&(l.updateLineNumbers==null||l.updateLineNumbers>=l.viewTo))return!1;var k=wV(i);return y>4&&(l.lineDiv.style.display="none"),xV(i,l.updateLineNumbers,s.dims),y>4&&(l.lineDiv.style.display=""),l.renderedView=l.view,SV(k),N(l.cursorDiv),N(l.selectionDiv),l.gutters.style.height=l.sizer.style.minHeight=0,_&&(l.lastWrapHeight=s.wrapperHeight,l.lastWrapWidth=s.wrapperWidth,gu(i,400)),l.updateLineNumbers=null,!0}function _T(i,s){for(var l=s.viewport,u=!0;;u=!1){if(!u||!i.options.lineWrapping||s.oldDisplayWidth==Ta(i)){if(l&&l.top!=null&&(l={top:Math.min(i.doc.height+Yp(i.display)-Kp(i),l.top)}),s.visible=Nc(i.display,i.doc,l),s.visible.from>=i.display.viewFrom&&s.visible.to<=i.display.viewTo)break}else u&&(s.visible=Nc(i.display,i.doc,l));if(!lm(i,s))break;Oc(i);var f=mu(i);du(i),Ms(i,f),dm(i,f),s.force=!1}s.signal(i,"update",i),(i.display.viewFrom!=i.display.reportedViewFrom||i.display.viewTo!=i.display.reportedViewTo)&&(s.signal(i,"viewportChange",i,i.display.viewFrom,i.display.viewTo),i.display.reportedViewFrom=i.display.viewFrom,i.display.reportedViewTo=i.display.viewTo)}function cm(i,s){var l=new Ic(i,s);if(lm(i,l)){Oc(i),_T(i,l);var u=mu(i);du(i),Ms(i,u),dm(i,u),l.finish()}}function xV(i,s,l){var u=i.display,f=i.options.lineNumbers,h=u.lineDiv,g=h.firstChild;function _(te){var de=te.nextSibling;return b&&R&&i.display.currentWheelTarget==te?te.style.display="none":te.parentNode.removeChild(te),de}for(var y=u.view,k=u.viewFrom,L=0;L<y.length;L++){var $=y[L];if(!$.hidden)if(!$.node||$.node.parentNode!=h){var Y=eV(i,$,k,l);h.insertBefore(Y,g)}else{for(;g!=$.node;)g=_(g);var z=f&&s!=null&&s<=k&&$.lineNumber;$.changes&&(Ee($.changes,"gutter")>-1&&(z=!1),GE(i,$,k,l)),z&&(N($.lineNumber),$.lineNumber.appendChild(document.createTextNode(ve(i.options,k)))),g=$.node.nextSibling}k+=$.size}for(;g;)g=_(g)}function fm(i){var s=i.gutters.offsetWidth;i.sizer.style.marginLeft=s+"px",Yt(i,"gutterChanged",i)}function dm(i,s){i.display.sizer.style.minHeight=s.docHeight+"px",i.display.heightForcer.style.top=s.docHeight+"px",i.display.gutters.style.height=s.docHeight+i.display.barHeight+Rn(i)+"px"}function bT(i){var s=i.display,l=s.view;if(!(!s.alignWidgets&&(!s.gutters.firstChild||!i.options.fixedGutter))){for(var u=tm(s)-s.scroller.scrollLeft+i.doc.scrollLeft,f=s.gutters.offsetWidth,h=u+"px",g=0;g<l.length;g++)if(!l[g].hidden){i.options.fixedGutter&&(l[g].gutter&&(l[g].gutter.style.left=h),l[g].gutterBackground&&(l[g].gutterBackground.style.left=h));var _=l[g].alignable;if(_)for(var y=0;y<_.length;y++)_[y].style.left=h}i.options.fixedGutter&&(s.gutters.style.left=u+f+"px")}}function yT(i){if(!i.options.lineNumbers)return!1;var s=i.doc,l=ve(i.options,s.first+s.size-1),u=i.display;if(l.length!=u.lineNumChars){var f=u.measure.appendChild(E("div",[E("div",l)],"CodeMirror-linenumber CodeMirror-gutter-elt")),h=f.firstChild.offsetWidth,g=f.offsetWidth-h;return u.lineGutter.style.width="",u.lineNumInnerWidth=Math.max(h,u.lineGutter.offsetWidth-g)+1,u.lineNumWidth=u.lineNumInnerWidth+g,u.lineNumChars=u.lineNumInnerWidth?l.length:-1,u.lineGutter.style.width=u.lineNumWidth+"px",fm(i.display),!0}return!1}function hm(i,s){for(var l=[],u=!1,f=0;f<i.length;f++){var h=i[f],g=null;if(typeof h!="string"&&(g=h.style,h=h.className),h=="CodeMirror-linenumbers")if(s)u=!0;else continue;l.push({className:h,style:g})}return s&&!u&&l.push({className:"CodeMirror-linenumbers",style:null}),l}function kT(i){var s=i.gutters,l=i.gutterSpecs;N(s),i.lineGutter=null;for(var u=0;u<l.length;++u){var f=l[u],h=f.className,g=f.style,_=s.appendChild(E("div",null,"CodeMirror-gutter "+h));g&&(_.style.cssText=g),h=="CodeMirror-linenumbers"&&(i.lineGutter=_,_.style.width=(i.lineNumWidth||1)+"px")}s.style.display=l.length?"":"none",fm(i)}function _u(i){kT(i.display),Cr(i),bT(i)}function AV(i,s,l,u){var f=this;this.input=l,f.scrollbarFiller=E("div",null,"CodeMirror-scrollbar-filler"),f.scrollbarFiller.setAttribute("cm-not-content","true"),f.gutterFiller=E("div",null,"CodeMirror-gutter-filler"),f.gutterFiller.setAttribute("cm-not-content","true"),f.lineDiv=ee("div",null,"CodeMirror-code"),f.selectionDiv=E("div",null,null,"position: relative; z-index: 1"),f.cursorDiv=E("div",null,"CodeMirror-cursors"),f.measure=E("div",null,"CodeMirror-measure"),f.lineMeasure=E("div",null,"CodeMirror-measure"),f.lineSpace=ee("div",[f.measure,f.lineMeasure,f.selectionDiv,f.cursorDiv,f.lineDiv],null,"position: relative; outline: none");var h=ee("div",[f.lineSpace],"CodeMirror-lines");f.mover=E("div",[h],null,"position: relative"),f.sizer=E("div",[f.mover],"CodeMirror-sizer"),f.sizerWidth=null,f.heightForcer=E("div",null,null,"position: absolute; height: "+Qe+"px; width: 1px;"),f.gutters=E("div",null,"CodeMirror-gutters"),f.lineGutter=null,f.scroller=E("div",[f.sizer,f.heightForcer,f.gutters],"CodeMirror-scroll"),f.scroller.setAttribute("tabIndex","-1"),f.wrapper=E("div",[f.scrollbarFiller,f.gutterFiller,f.scroller],"CodeMirror"),T&&A===105&&(f.wrapper.style.clipPath="inset(0px)"),f.wrapper.setAttribute("translate","no"),p&&v<8&&(f.gutters.style.zIndex=-1,f.scroller.style.paddingRight=0),!b&&!(a&&P)&&(f.scroller.draggable=!0),i&&(i.appendChild?i.appendChild(f.wrapper):i(f.wrapper)),f.viewFrom=f.viewTo=s.first,f.reportedViewFrom=f.reportedViewTo=s.first,f.view=[],f.renderedView=null,f.externalMeasured=null,f.viewOffset=0,f.lastWrapHeight=f.lastWrapWidth=0,f.updateLineNumbers=null,f.nativeBarWidth=f.barHeight=f.barWidth=0,f.scrollbarsClipped=!1,f.lineNumWidth=f.lineNumInnerWidth=f.lineNumChars=null,f.alignWidgets=!1,f.cachedCharWidth=f.cachedTextHeight=f.cachedPaddingH=null,f.maxLine=null,f.maxLineLength=0,f.maxLineChanged=!1,f.wheelDX=f.wheelDY=f.wheelStartX=f.wheelStartY=null,f.shift=!1,f.selForContextMenu=null,f.activeTouch=null,f.gutterSpecs=hm(u.gutters,u.lineNumbers),kT(f),l.init(f)}var Lc=0,oi=null;p?oi=-.53:a?oi=15:T?oi=-.7:G&&(oi=-1/3);function ET(i){var s=i.wheelDeltaX,l=i.wheelDeltaY;return s==null&&i.detail&&i.axis==i.HORIZONTAL_AXIS&&(s=i.detail),l==null&&i.detail&&i.axis==i.VERTICAL_AXIS?l=i.detail:l==null&&(l=i.wheelDelta),{x:s,y:l}}function OV(i){var s=ET(i);return s.x*=oi,s.y*=oi,s}function TT(i,s){T&&A==102&&(i.display.chromeScrollHack==null?i.display.sizer.style.pointerEvents="none":clearTimeout(i.display.chromeScrollHack),i.display.chromeScrollHack=setTimeout(function(){i.display.chromeScrollHack=null,i.display.sizer.style.pointerEvents=""},100));var l=ET(s),u=l.x,f=l.y,h=oi;s.deltaMode===0&&(u=s.deltaX,f=s.deltaY,h=1);var g=i.display,_=g.scroller,y=_.scrollWidth>_.clientWidth,k=_.scrollHeight>_.clientHeight;if(u&&y||f&&k){if(f&&R&&b){e:for(var L=s.target,$=g.view;L!=_;L=L.parentNode)for(var Y=0;Y<$.length;Y++)if($[Y].node==L){i.display.currentWheelTarget=L;break e}}if(u&&!a&&!F&&h!=null){f&&k&&pu(i,Math.max(0,_.scrollTop+f*h)),xa(i,Math.max(0,_.scrollLeft+u*h)),(!f||f&&k)&&sr(s),g.wheelStartX=null;return}if(f&&h!=null){var z=f*h,te=i.doc.scrollTop,de=te+g.wrapper.clientHeight;z<0?te=Math.max(0,te+z-50):de=Math.min(i.doc.height,de+z+50),cm(i,{top:te,bottom:de})}Lc<20&&s.deltaMode!==0&&(g.wheelStartX==null?(g.wheelStartX=_.scrollLeft,g.wheelStartY=_.scrollTop,g.wheelDX=u,g.wheelDY=f,setTimeout(function(){if(g.wheelStartX!=null){var ge=_.scrollLeft-g.wheelStartX,be=_.scrollTop-g.wheelStartY,we=be&&g.wheelDY&&be/g.wheelDY||ge&&g.wheelDX&&ge/g.wheelDX;g.wheelStartX=g.wheelStartY=null,we&&(oi=(oi*Lc+we)/(Lc+1),++Lc)}},200)):(g.wheelDX+=u,g.wheelDY+=f))}}var zr=function(i,s){this.ranges=i,this.primIndex=s};zr.prototype.primary=function(){return this.ranges[this.primIndex]},zr.prototype.equals=function(i){if(i==this)return!0;if(i.primIndex!=this.primIndex||i.ranges.length!=this.ranges.length)return!1;for(var s=0;s<this.ranges.length;s++){var l=this.ranges[s],u=i.ranges[s];if(!ct(l.anchor,u.anchor)||!ct(l.head,u.head))return!1}return!0},zr.prototype.deepCopy=function(){for(var i=[],s=0;s<this.ranges.length;s++)i[s]=new ft(qt(this.ranges[s].anchor),qt(this.ranges[s].head));return new zr(i,this.primIndex)},zr.prototype.somethingSelected=function(){for(var i=0;i<this.ranges.length;i++)if(!this.ranges[i].empty())return!0;return!1},zr.prototype.contains=function(i,s){s||(s=i);for(var l=0;l<this.ranges.length;l++){var u=this.ranges[l];if(Ce(s,u.from())>=0&&Ce(i,u.to())<=0)return l}return-1};var ft=function(i,s){this.anchor=i,this.head=s};ft.prototype.from=function(){return As(this.anchor,this.head)},ft.prototype.to=function(){return Tr(this.anchor,this.head)},ft.prototype.empty=function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch};function yn(i,s,l){var u=i&&i.options.selectionsMayTouch,f=s[l];s.sort(function(Y,z){return Ce(Y.from(),z.from())}),l=Ee(s,f);for(var h=1;h<s.length;h++){var g=s[h],_=s[h-1],y=Ce(_.to(),g.from());if(u&&!g.empty()?y>0:y>=0){var k=As(_.from(),g.from()),L=Tr(_.to(),g.to()),$=_.empty()?g.from()==g.head:_.from()==_.head;h<=l&&--l,s.splice(--h,2,new ft($?L:k,$?k:L))}}return new zr(s,l)}function Hi(i,s){return new zr([new ft(i,s||i)],0)}function Ui(i){return i.text?J(i.from.line+i.text.length-1,Ye(i.text).length+(i.text.length==1?i.from.ch:0)):i.to}function CT(i,s){if(Ce(i,s.from)<0)return i;if(Ce(i,s.to)<=0)return Ui(s);var l=i.line+s.text.length-(s.to.line-s.from.line)-1,u=i.ch;return i.line==s.to.line&&(u+=Ui(s).ch-s.to.ch),J(l,u)}function pm(i,s){for(var l=[],u=0;u<i.sel.ranges.length;u++){var f=i.sel.ranges[u];l.push(new ft(CT(f.anchor,s),CT(f.head,s)))}return yn(i.cm,l,i.sel.primIndex)}function wT(i,s,l){return i.line==s.line?J(l.line,i.ch-s.ch+l.ch):J(l.line+(i.line-s.line),i.ch)}function NV(i,s,l){for(var u=[],f=J(i.first,0),h=f,g=0;g<s.length;g++){var _=s[g],y=wT(_.from,f,h),k=wT(Ui(_),f,h);if(f=_.to,h=k,l=="around"){var L=i.sel.ranges[g],$=Ce(L.head,L.anchor)<0;u[g]=new ft($?k:y,$?y:k)}else u[g]=new ft(y,y)}return new zr(u,i.sel.primIndex)}function mm(i){i.doc.mode=ws(i.options,i.doc.modeOption),bu(i)}function bu(i){i.doc.iter(function(s){s.stateAfter&&(s.stateAfter=null),s.styles&&(s.styles=null)}),i.doc.modeFrontier=i.doc.highlightFrontier=i.doc.first,gu(i,100),i.state.modeGen++,i.curOp&&Cr(i)}function ST(i,s){return s.from.ch==0&&s.to.ch==0&&Ye(s.text)==""&&(!i.cm||i.cm.options.wholeLineUpdateBefore)}function vm(i,s,l,u){function f(we){return l?l[we]:null}function h(we,ye,Oe){FX(we,ye,Oe,u),Yt(we,"change",we,s)}function g(we,ye){for(var Oe=[],Fe=we;Fe<ye;++Fe)Oe.push(new Os(k[Fe],f(Fe),u));return Oe}var _=s.from,y=s.to,k=s.text,L=Re(i,_.line),$=Re(i,y.line),Y=Ye(k),z=f(k.length-1),te=y.line-_.line;if(s.full)i.insert(0,g(0,k.length)),i.remove(k.length,i.size-k.length);else if(ST(i,s)){var de=g(0,k.length-1);h($,$.text,z),te&&i.remove(_.line,te),de.length&&i.insert(_.line,de)}else if(L==$)if(k.length==1)h(L,L.text.slice(0,_.ch)+Y+L.text.slice(y.ch),z);else{var ge=g(1,k.length-1);ge.push(new Os(Y+L.text.slice(y.ch),z,u)),h(L,L.text.slice(0,_.ch)+k[0],f(0)),i.insert(_.line+1,ge)}else if(k.length==1)h(L,L.text.slice(0,_.ch)+k[0]+$.text.slice(y.ch),f(0)),i.remove(_.line+1,te);else{h(L,L.text.slice(0,_.ch)+k[0],f(0)),h($,Y+$.text.slice(y.ch),z);var be=g(1,k.length-1);te>1&&i.remove(_.line+1,te-1),i.insert(_.line+1,be)}Yt(i,"change",i,s)}function ji(i,s,l){function u(f,h,g){if(f.linked)for(var _=0;_<f.linked.length;++_){var y=f.linked[_];if(y.doc!=h){var k=g&&y.sharedHist;l&&!k||(s(y.doc,k),u(y.doc,f,k))}}}u(i,null,!0)}function xT(i,s){if(s.cm)throw new Error("This document is already in use.");i.doc=s,s.cm=i,rm(i),mm(i),AT(i),i.options.direction=s.direction,i.options.lineWrapping||zp(i),i.options.mode=s.modeOption,Cr(i)}function AT(i){(i.doc.direction=="rtl"?Ie:U)(i.display.lineDiv,"CodeMirror-rtl")}function PV(i){Mr(i,function(){AT(i),Cr(i)})}function Rc(i){this.done=[],this.undone=[],this.undoDepth=i?i.undoDepth:1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=i?i.maxGeneration:1}function gm(i,s){var l={from:qt(s.from),to:Ui(s),text:ni(i,s.from,s.to)};return PT(i,l,s.from.line,s.to.line+1),ji(i,function(u){return PT(u,l,s.from.line,s.to.line+1)},!0),l}function OT(i){for(;i.length;){var s=Ye(i);if(s.ranges)i.pop();else break}}function IV(i,s){if(s)return OT(i.done),Ye(i.done);if(i.done.length&&!Ye(i.done).ranges)return Ye(i.done);if(i.done.length>1&&!i.done[i.done.length-2].ranges)return i.done.pop(),Ye(i.done)}function NT(i,s,l,u){var f=i.history;f.undone.length=0;var h=+new Date,g,_;if((f.lastOp==u||f.lastOrigin==s.origin&&s.origin&&(s.origin.charAt(0)=="+"&&f.lastModTime>h-(i.cm?i.cm.options.historyEventDelay:500)||s.origin.charAt(0)=="*"))&&(g=IV(f,f.lastOp==u)))_=Ye(g.changes),Ce(s.from,s.to)==0&&Ce(s.from,_.to)==0?_.to=Ui(s):g.changes.push(gm(i,s));else{var y=Ye(f.done);for((!y||!y.ranges)&&Dc(i.sel,f.done),g={changes:[gm(i,s)],generation:f.generation},f.done.push(g);f.done.length>f.undoDepth;)f.done.shift(),f.done[0].ranges||f.done.shift()}f.done.push(l),f.generation=++f.maxGeneration,f.lastModTime=f.lastSelTime=h,f.lastOp=f.lastSelOp=u,f.lastOrigin=f.lastSelOrigin=s.origin,_||Pt(i,"historyAdded")}function LV(i,s,l,u){var f=s.charAt(0);return f=="*"||f=="+"&&l.ranges.length==u.ranges.length&&l.somethingSelected()==u.somethingSelected()&&new Date-i.history.lastSelTime<=(i.cm?i.cm.options.historyEventDelay:500)}function RV(i,s,l,u){var f=i.history,h=u&&u.origin;l==f.lastSelOp||h&&f.lastSelOrigin==h&&(f.lastModTime==f.lastSelTime&&f.lastOrigin==h||LV(i,h,Ye(f.done),s))?f.done[f.done.length-1]=s:Dc(s,f.done),f.lastSelTime=+new Date,f.lastSelOrigin=h,f.lastSelOp=l,u&&u.clearRedo!==!1&&OT(f.undone)}function Dc(i,s){var l=Ye(s);l&&l.ranges&&l.equals(i)||s.push(i)}function PT(i,s,l,u){var f=s["spans_"+i.id],h=0;i.iter(Math.max(i.first,l),Math.min(i.first+i.size,u),function(g){g.markedSpans&&((f||(f=s["spans_"+i.id]={}))[h]=g.markedSpans),++h})}function DV(i){if(!i)return null;for(var s,l=0;l<i.length;++l)i[l].marker.explicitlyCleared?s||(s=i.slice(0,l)):s&&s.push(i[l]);return s?s.length?s:null:i}function MV(i,s){var l=s["spans_"+i.id];if(!l)return null;for(var u=[],f=0;f<s.text.length;++f)u.push(DV(l[f]));return u}function IT(i,s){var l=MV(i,s),u=Up(i,s);if(!l)return u;if(!u)return l;for(var f=0;f<l.length;++f){var h=l[f],g=u[f];if(h&&g)e:for(var _=0;_<g.length;++_){for(var y=g[_],k=0;k<h.length;++k)if(h[k].marker==y.marker)continue e;h.push(y)}else g&&(l[f]=g)}return l}function $s(i,s,l){for(var u=[],f=0;f<i.length;++f){var h=i[f];if(h.ranges){u.push(l?zr.prototype.deepCopy.call(h):h);continue}var g=h.changes,_=[];u.push({changes:_});for(var y=0;y<g.length;++y){var k=g[y],L=void 0;if(_.push({from:k.from,to:k.to,text:k.text}),s)for(var $ in k)(L=$.match(/^spans_(\d+)$/))&&Ee(s,Number(L[1]))>-1&&(Ye(_)[$]=k[$],delete k[$])}}return u}function _m(i,s,l,u){if(u){var f=i.anchor;if(l){var h=Ce(s,f)<0;h!=Ce(l,f)<0?(f=s,s=l):h!=Ce(s,l)<0&&(s=l)}return new ft(f,s)}else return new ft(l||s,s)}function Mc(i,s,l,u,f){f==null&&(f=i.cm&&(i.cm.display.shift||i.extend)),or(i,new zr([_m(i.sel.primary(),s,l,f)],0),u)}function LT(i,s,l){for(var u=[],f=i.cm&&(i.cm.display.shift||i.extend),h=0;h<i.sel.ranges.length;h++)u[h]=_m(i.sel.ranges[h],s[h],null,f);var g=yn(i.cm,u,i.sel.primIndex);or(i,g,l)}function bm(i,s,l,u){var f=i.sel.ranges.slice(0);f[s]=l,or(i,yn(i.cm,f,i.sel.primIndex),u)}function RT(i,s,l,u){or(i,Hi(s,l),u)}function $V(i,s,l){var u={ranges:s.ranges,update:function(f){this.ranges=[];for(var h=0;h<f.length;h++)this.ranges[h]=new ft(Ke(i,f[h].anchor),Ke(i,f[h].head))},origin:l&&l.origin};return Pt(i,"beforeSelectionChange",i,u),i.cm&&Pt(i.cm,"beforeSelectionChange",i.cm,u),u.ranges!=s.ranges?yn(i.cm,u.ranges,u.ranges.length-1):s}function DT(i,s,l){var u=i.history.done,f=Ye(u);f&&f.ranges?(u[u.length-1]=s,$c(i,s,l)):or(i,s,l)}function or(i,s,l){$c(i,s,l),RV(i,i.sel,i.cm?i.cm.curOp.id:NaN,l)}function $c(i,s,l){(Dr(i,"beforeSelectionChange")||i.cm&&Dr(i.cm,"beforeSelectionChange"))&&(s=$V(i,s,l));var u=l&&l.bias||(Ce(s.primary().head,i.sel.primary().head)<0?-1:1);MT(i,FT(i,s,u,!0)),!(l&&l.scroll===!1)&&i.cm&&i.cm.getOption("readOnly")!="nocursor"&&Ds(i.cm)}function MT(i,s){s.equals(i.sel)||(i.sel=s,i.cm&&(i.cm.curOp.updateInput=1,i.cm.curOp.selectionChanged=!0,Jr(i.cm)),Yt(i,"cursorActivity",i))}function $T(i){MT(i,FT(i,i.sel,null,!1))}function FT(i,s,l,u){for(var f,h=0;h<s.ranges.length;h++){var g=s.ranges[h],_=s.ranges.length==i.sel.ranges.length&&i.sel.ranges[h],y=Fc(i,g.anchor,_&&_.anchor,l,u),k=g.head==g.anchor?y:Fc(i,g.head,_&&_.head,l,u);(f||y!=g.anchor||k!=g.head)&&(f||(f=s.ranges.slice(0,h)),f[h]=new ft(y,k))}return f?yn(i.cm,f,s.primIndex):s}function Fs(i,s,l,u,f){var h=Re(i,s.line);if(h.markedSpans)for(var g=0;g<h.markedSpans.length;++g){var _=h.markedSpans[g],y=_.marker,k="selectLeft"in y?!y.selectLeft:y.inclusiveLeft,L="selectRight"in y?!y.selectRight:y.inclusiveRight;if((_.from==null||(k?_.from<=s.ch:_.from<s.ch))&&(_.to==null||(L?_.to>=s.ch:_.to>s.ch))){if(f&&(Pt(y,"beforeCursorEnter"),y.explicitlyCleared))if(h.markedSpans){--g;continue}else break;if(!y.atomic)continue;if(l){var $=y.find(u<0?1:-1),Y=void 0;if((u<0?L:k)&&($=BT(i,$,-u,$&&$.line==s.line?h:null)),$&&$.line==s.line&&(Y=Ce($,l))&&(u<0?Y<0:Y>0))return Fs(i,$,s,u,f)}var z=y.find(u<0?-1:1);return(u<0?k:L)&&(z=BT(i,z,u,z.line==s.line?h:null)),z?Fs(i,z,s,u,f):null}}return s}function Fc(i,s,l,u,f){var h=u||1,g=Fs(i,s,l,h,f)||!f&&Fs(i,s,l,h,!0)||Fs(i,s,l,-h,f)||!f&&Fs(i,s,l,-h,!0);return g||(i.cantEdit=!0,J(i.first,0))}function BT(i,s,l,u){return l<0&&s.ch==0?s.line>i.first?Ke(i,J(s.line-1)):null:l>0&&s.ch==(u||Re(i,s.line)).text.length?s.line<i.first+i.size-1?J(s.line+1,0):null:new J(s.line,s.ch+l)}function HT(i){i.setSelection(J(i.firstLine(),0),J(i.lastLine()),dt)}function UT(i,s,l){var u={canceled:!1,from:s.from,to:s.to,text:s.text,origin:s.origin,cancel:function(){return u.canceled=!0}};return l&&(u.update=function(f,h,g,_){f&&(u.from=Ke(i,f)),h&&(u.to=Ke(i,h)),g&&(u.text=g),_!==void 0&&(u.origin=_)}),Pt(i,"beforeChange",i,u),i.cm&&Pt(i.cm,"beforeChange",i.cm,u),u.canceled?(i.cm&&(i.cm.curOp.updateInput=2),null):{from:u.from,to:u.to,text:u.text,origin:u.origin}}function Bs(i,s,l){if(i.cm){if(!i.cm.curOp)return Kt(i.cm,Bs)(i,s,l);if(i.cm.state.suppressEdits)return}if(!((Dr(i,"beforeChange")||i.cm&&Dr(i.cm,"beforeChange"))&&(s=UT(i,s,!0),!s))){var u=IE&&!l&&RX(i,s.from,s.to);if(u)for(var f=u.length-1;f>=0;--f)jT(i,{from:u[f].from,to:u[f].to,text:f?[""]:s.text,origin:s.origin});else jT(i,s)}}function jT(i,s){if(!(s.text.length==1&&s.text[0]==""&&Ce(s.from,s.to)==0)){var l=pm(i,s);NT(i,s,l,i.cm?i.cm.curOp.id:NaN),yu(i,s,l,Up(i,s));var u=[];ji(i,function(f,h){!h&&Ee(u,f.history)==-1&&(qT(f.history,s),u.push(f.history)),yu(f,s,null,Up(f,s))})}}function Bc(i,s,l){var u=i.cm&&i.cm.state.suppressEdits;if(!(u&&!l)){for(var f=i.history,h,g=i.sel,_=s=="undo"?f.done:f.undone,y=s=="undo"?f.undone:f.done,k=0;k<_.length&&(h=_[k],!(l?h.ranges&&!h.equals(i.sel):!h.ranges));k++);if(k!=_.length){for(f.lastOrigin=f.lastSelOrigin=null;;)if(h=_.pop(),h.ranges){if(Dc(h,y),l&&!h.equals(i.sel)){or(i,h,{clearRedo:!1});return}g=h}else if(u){_.push(h);return}else break;var L=[];Dc(g,y),y.push({changes:L,generation:f.generation}),f.generation=h.generation||++f.maxGeneration;for(var $=Dr(i,"beforeChange")||i.cm&&Dr(i.cm,"beforeChange"),Y=function(de){var ge=h.changes[de];if(ge.origin=s,$&&!UT(i,ge,!1))return _.length=0,{};L.push(gm(i,ge));var be=de?pm(i,ge):Ye(_);yu(i,ge,be,IT(i,ge)),!de&&i.cm&&i.cm.scrollIntoView({from:ge.from,to:Ui(ge)});var we=[];ji(i,function(ye,Oe){!Oe&&Ee(we,ye.history)==-1&&(qT(ye.history,ge),we.push(ye.history)),yu(ye,ge,null,IT(ye,ge))})},z=h.changes.length-1;z>=0;--z){var te=Y(z);if(te)return te.v}}}}function WT(i,s){if(s!=0&&(i.first+=s,i.sel=new zr(rt(i.sel.ranges,function(f){return new ft(J(f.anchor.line+s,f.anchor.ch),J(f.head.line+s,f.head.ch))}),i.sel.primIndex),i.cm)){Cr(i.cm,i.first,i.first-s,s);for(var l=i.cm.display,u=l.viewFrom;u<l.viewTo;u++)Fi(i.cm,u,"gutter")}}function yu(i,s,l,u){if(i.cm&&!i.cm.curOp)return Kt(i.cm,yu)(i,s,l,u);if(s.to.line<i.first){WT(i,s.text.length-1-(s.to.line-s.from.line));return}if(!(s.from.line>i.lastLine())){if(s.from.line<i.first){var f=s.text.length-1-(i.first-s.from.line);WT(i,f),s={from:J(i.first,0),to:J(s.to.line+f,s.to.ch),text:[Ye(s.text)],origin:s.origin}}var h=i.lastLine();s.to.line>h&&(s={from:s.from,to:J(h,Re(i,h).text.length),text:[s.text[0]],origin:s.origin}),s.removed=ni(i,s.from,s.to),l||(l=pm(i,s)),i.cm?FV(i.cm,s,u):vm(i,s,u),$c(i,l,dt),i.cantEdit&&Fc(i,J(i.firstLine(),0))&&(i.cantEdit=!1)}}function FV(i,s,l){var u=i.doc,f=i.display,h=s.from,g=s.to,_=!1,y=h.line;i.options.lineWrapping||(y=w(_n(Re(u,h.line))),u.iter(y,g.line+1,function(z){if(z==f.maxLine)return _=!0,!0})),u.sel.contains(s.from,s.to)>-1&&Jr(i),vm(u,s,l,uT(i)),i.options.lineWrapping||(u.iter(y,h.line+s.text.length,function(z){var te=Ec(z);te>f.maxLineLength&&(f.maxLine=z,f.maxLineLength=te,f.maxLineChanged=!0,_=!1)}),_&&(i.curOp.updateMaxLine=!0)),xX(u,h.line),gu(i,400);var k=s.text.length-(g.line-h.line)-1;s.full?Cr(i):h.line==g.line&&s.text.length==1&&!ST(i.doc,s)?Fi(i,h.line,"text"):Cr(i,h.line,g.line+1,k);var L=Dr(i,"changes"),$=Dr(i,"change");if($||L){var Y={from:h,to:g,text:s.text,removed:s.removed,origin:s.origin};$&&Yt(i,"change",i,Y),L&&(i.curOp.changeObjs||(i.curOp.changeObjs=[])).push(Y)}i.display.selForContextMenu=null}function Hs(i,s,l,u,f){var h;u||(u=l),Ce(u,l)<0&&(h=[u,l],l=h[0],u=h[1]),typeof s=="string"&&(s=i.splitLines(s)),Bs(i,{from:l,to:u,text:s,origin:f})}function GT(i,s,l,u){l<i.line?i.line+=u:s<i.line&&(i.line=s,i.ch=0)}function zT(i,s,l,u){for(var f=0;f<i.length;++f){var h=i[f],g=!0;if(h.ranges){h.copied||(h=i[f]=h.deepCopy(),h.copied=!0);for(var _=0;_<h.ranges.length;_++)GT(h.ranges[_].anchor,s,l,u),GT(h.ranges[_].head,s,l,u);continue}for(var y=0;y<h.changes.length;++y){var k=h.changes[y];if(l<k.from.line)k.from=J(k.from.line+u,k.from.ch),k.to=J(k.to.line+u,k.to.ch);else if(s<=k.to.line){g=!1;break}}g||(i.splice(0,f+1),f=0)}}function qT(i,s){var l=s.from.line,u=s.to.line,f=s.text.length-(u-l)-1;zT(i.done,l,u,f),zT(i.undone,l,u,f)}function ku(i,s,l,u){var f=s,h=s;return typeof s=="number"?h=Re(i,TE(i,s)):f=w(s),f==null?null:(u(h,f)&&i.cm&&Fi(i.cm,f,l),h)}function Eu(i){this.lines=i,this.parent=null;for(var s=0,l=0;l<i.length;++l)i[l].parent=this,s+=i[l].height;this.height=s}Eu.prototype={chunkSize:function(){return this.lines.length},removeInner:function(i,s){for(var l=i,u=i+s;l<u;++l){var f=this.lines[l];this.height-=f.height,BX(f),Yt(f,"delete")}this.lines.splice(i,s)},collapse:function(i){i.push.apply(i,this.lines)},insertInner:function(i,s,l){this.height+=l,this.lines=this.lines.slice(0,i).concat(s).concat(this.lines.slice(i));for(var u=0;u<s.length;++u)s[u].parent=this},iterN:function(i,s,l){for(var u=i+s;i<u;++i)if(l(this.lines[i]))return!0}};function Tu(i){this.children=i;for(var s=0,l=0,u=0;u<i.length;++u){var f=i[u];s+=f.chunkSize(),l+=f.height,f.parent=this}this.size=s,this.height=l,this.parent=null}Tu.prototype={chunkSize:function(){return this.size},removeInner:function(i,s){this.size-=s;for(var l=0;l<this.children.length;++l){var u=this.children[l],f=u.chunkSize();if(i<f){var h=Math.min(s,f-i),g=u.height;if(u.removeInner(i,h),this.height-=g-u.height,f==h&&(this.children.splice(l--,1),u.parent=null),(s-=h)==0)break;i=0}else i-=f}if(this.size-s<25&&(this.children.length>1||!(this.children[0]instanceof Eu))){var _=[];this.collapse(_),this.children=[new Eu(_)],this.children[0].parent=this}},collapse:function(i){for(var s=0;s<this.children.length;++s)this.children[s].collapse(i)},insertInner:function(i,s,l){this.size+=s.length,this.height+=l;for(var u=0;u<this.children.length;++u){var f=this.children[u],h=f.chunkSize();if(i<=h){if(f.insertInner(i,s,l),f.lines&&f.lines.length>50){for(var g=f.lines.length%25+25,_=g;_<f.lines.length;){var y=new Eu(f.lines.slice(_,_+=25));f.height-=y.height,this.children.splice(++u,0,y),y.parent=this}f.lines=f.lines.slice(0,g),this.maybeSpill()}break}i-=h}},maybeSpill:function(){if(!(this.children.length<=10)){var i=this;do{var s=i.children.splice(i.children.length-5,5),l=new Tu(s);if(i.parent){i.size-=l.size,i.height-=l.height;var f=Ee(i.parent.children,i);i.parent.children.splice(f+1,0,l)}else{var u=new Tu(i.children);u.parent=i,i.children=[u,l],i=u}l.parent=i.parent}while(i.children.length>10);i.parent.maybeSpill()}},iterN:function(i,s,l){for(var u=0;u<this.children.length;++u){var f=this.children[u],h=f.chunkSize();if(i<h){var g=Math.min(s,h-i);if(f.iterN(i,g,l))return!0;if((s-=g)==0)break;i=0}else i-=h}}};var Cu=function(i,s,l){if(l)for(var u in l)l.hasOwnProperty(u)&&(this[u]=l[u]);this.doc=i,this.node=s};Cu.prototype.clear=function(){var i=this.doc.cm,s=this.line.widgets,l=this.line,u=w(l);if(!(u==null||!s)){for(var f=0;f<s.length;++f)s[f]==this&&s.splice(f--,1);s.length||(l.widgets=null);var h=cu(this);Gr(l,Math.max(0,l.height-h)),i&&(Mr(i,function(){YT(i,l,-h),Fi(i,u,"widget")}),Yt(i,"lineWidgetCleared",i,this,u))}},Cu.prototype.changed=function(){var i=this,s=this.height,l=this.doc.cm,u=this.line;this.height=null;var f=cu(this)-s;f&&($i(this.doc,u)||Gr(u,u.height+f),l&&Mr(l,function(){l.curOp.forceUpdate=!0,YT(l,u,f),Yt(l,"lineWidgetChanged",l,i,w(u))}))},hn(Cu);function YT(i,s,l){ai(s)<(i.curOp&&i.curOp.scrollTop||i.doc.scrollTop)&&um(i,l)}function BV(i,s,l,u){var f=new Cu(i,l,u),h=i.cm;return h&&f.noHScroll&&(h.display.alignWidgets=!0),ku(i,s,"widget",function(g){var _=g.widgets||(g.widgets=[]);if(f.insertAt==null?_.push(f):_.splice(Math.min(_.length,Math.max(0,f.insertAt)),0,f),f.line=g,h&&!$i(i,g)){var y=ai(g)<i.scrollTop;Gr(g,g.height+cu(f)),y&&um(h,f.height),h.curOp.forceUpdate=!0}return!0}),h&&Yt(h,"lineWidgetAdded",h,f,typeof s=="number"?s:w(s)),f}var KT=0,Wi=function(i,s){this.lines=[],this.type=s,this.doc=i,this.id=++KT};Wi.prototype.clear=function(){if(!this.explicitlyCleared){var i=this.doc.cm,s=i&&!i.curOp;if(s&&Oa(i),Dr(this,"clear")){var l=this.find();l&&Yt(this,"clear",l.from,l.to)}for(var u=null,f=null,h=0;h<this.lines.length;++h){var g=this.lines[h],_=ou(g.markedSpans,this);i&&!this.collapsed?Fi(i,w(g),"text"):i&&(_.to!=null&&(f=w(g)),_.from!=null&&(u=w(g))),g.markedSpans=NX(g.markedSpans,_),_.from==null&&this.collapsed&&!$i(this.doc,g)&&i&&Gr(g,Is(i.display))}if(i&&this.collapsed&&!i.options.lineWrapping)for(var y=0;y<this.lines.length;++y){var k=_n(this.lines[y]),L=Ec(k);L>i.display.maxLineLength&&(i.display.maxLine=k,i.display.maxLineLength=L,i.display.maxLineChanged=!0)}u!=null&&i&&this.collapsed&&Cr(i,u,f+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,i&&$T(i.doc)),i&&Yt(i,"markerCleared",i,this,u,f),s&&Na(i),this.parent&&this.parent.clear()}},Wi.prototype.find=function(i,s){i==null&&this.type=="bookmark"&&(i=1);for(var l,u,f=0;f<this.lines.length;++f){var h=this.lines[f],g=ou(h.markedSpans,this);if(g.from!=null&&(l=J(s?h:w(h),g.from),i==-1))return l;if(g.to!=null&&(u=J(s?h:w(h),g.to),i==1))return u}return l&&{from:l,to:u}},Wi.prototype.changed=function(){var i=this,s=this.find(-1,!0),l=this,u=this.doc.cm;!s||!u||Mr(u,function(){var f=s.line,h=w(s.line),g=Xp(u,h);if(g&&(eT(g),u.curOp.selectionChanged=u.curOp.forceUpdate=!0),u.curOp.updateMaxLine=!0,!$i(l.doc,f)&&l.height!=null){var _=l.height;l.height=null;var y=cu(l)-_;y&&Gr(f,f.height+y)}Yt(u,"markerChanged",u,i)})},Wi.prototype.attachLine=function(i){if(!this.lines.length&&this.doc.cm){var s=this.doc.cm.curOp;(!s.maybeHiddenMarkers||Ee(s.maybeHiddenMarkers,this)==-1)&&(s.maybeUnhiddenMarkers||(s.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(i)},Wi.prototype.detachLine=function(i){if(this.lines.splice(Ee(this.lines,i),1),!this.lines.length&&this.doc.cm){var s=this.doc.cm.curOp;(s.maybeHiddenMarkers||(s.maybeHiddenMarkers=[])).push(this)}},hn(Wi);function Us(i,s,l,u,f){if(u&&u.shared)return HV(i,s,l,u,f);if(i.cm&&!i.cm.curOp)return Kt(i.cm,Us)(i,s,l,u,f);var h=new Wi(i,f),g=Ce(s,l);if(u&&Se(u,h,!1),g>0||g==0&&h.clearWhenEmpty!==!1)return h;if(h.replacedWith&&(h.collapsed=!0,h.widgetNode=ee("span",[h.replacedWith],"CodeMirror-widget"),u.handleMouseEvents||h.widgetNode.setAttribute("cm-ignore-events","true"),u.insertLeft&&(h.widgetNode.insertLeft=!0)),h.collapsed){if(FE(i,s.line,s,l,h)||s.line!=l.line&&FE(i,l.line,s,l,h))throw new Error("Inserting collapsed marker partially overlapping an existing one");OX()}h.addToHistory&&NT(i,{from:s,to:l,origin:"markText"},i.sel,NaN);var _=s.line,y=i.cm,k;if(i.iter(_,l.line+1,function($){y&&h.collapsed&&!y.options.lineWrapping&&_n($)==y.display.maxLine&&(k=!0),h.collapsed&&_!=s.line&&Gr($,0),PX($,new _c(h,_==s.line?s.ch:null,_==l.line?l.ch:null),i.cm&&i.cm.curOp),++_}),h.collapsed&&i.iter(s.line,l.line+1,function($){$i(i,$)&&Gr($,0)}),h.clearOnEnter&&$e(h,"beforeCursorEnter",function(){return h.clear()}),h.readOnly&&(AX(),(i.history.done.length||i.history.undone.length)&&i.clearHistory()),h.collapsed&&(h.id=++KT,h.atomic=!0),y){if(k&&(y.curOp.updateMaxLine=!0),h.collapsed)Cr(y,s.line,l.line+1);else if(h.className||h.startStyle||h.endStyle||h.css||h.attributes||h.title)for(var L=s.line;L<=l.line;L++)Fi(y,L,"text");h.atomic&&$T(y.doc),Yt(y,"markerAdded",y,h)}return h}var wu=function(i,s){this.markers=i,this.primary=s;for(var l=0;l<i.length;++l)i[l].parent=this};wu.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var i=0;i<this.markers.length;++i)this.markers[i].clear();Yt(this,"clear")}},wu.prototype.find=function(i,s){return this.primary.find(i,s)},hn(wu);function HV(i,s,l,u,f){u=Se(u),u.shared=!1;var h=[Us(i,s,l,u,f)],g=h[0],_=u.widgetNode;return ji(i,function(y){_&&(u.widgetNode=_.cloneNode(!0)),h.push(Us(y,Ke(y,s),Ke(y,l),u,f));for(var k=0;k<y.linked.length;++k)if(y.linked[k].isParent)return;g=Ye(h)}),new wu(h,g)}function XT(i){return i.findMarks(J(i.first,0),i.clipPos(J(i.lastLine())),function(s){return s.parent})}function UV(i,s){for(var l=0;l<s.length;l++){var u=s[l],f=u.find(),h=i.clipPos(f.from),g=i.clipPos(f.to);if(Ce(h,g)){var _=Us(i,h,g,u.primary,u.primary.type);u.markers.push(_),_.parent=u}}}function jV(i){for(var s=function(u){var f=i[u],h=[f.primary.doc];ji(f.primary.doc,function(y){return h.push(y)});for(var g=0;g<f.markers.length;g++){var _=f.markers[g];Ee(h,_.doc)==-1&&(_.parent=null,f.markers.splice(g--,1))}},l=0;l<i.length;l++)s(l)}var WV=0,wr=function(i,s,l,u,f){if(!(this instanceof wr))return new wr(i,s,l,u,f);l==null&&(l=0),Tu.call(this,[new Eu([new Os("",null)])]),this.first=l,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.modeFrontier=this.highlightFrontier=l;var h=J(l,0);this.sel=Hi(h),this.history=new Rc(null),this.id=++WV,this.modeOption=s,this.lineSep=u,this.direction=f=="rtl"?"rtl":"ltr",this.extend=!1,typeof i=="string"&&(i=this.splitLines(i)),vm(this,{from:h,to:h,text:i}),or(this,Hi(h),dt)};wr.prototype=ie(Tu.prototype,{constructor:wr,iter:function(i,s,l){l?this.iterN(i-this.first,s-i,l):this.iterN(this.first,this.first+this.size,i)},insert:function(i,s){for(var l=0,u=0;u<s.length;++u)l+=s[u].height;this.insertInner(i-this.first,s,l)},remove:function(i,s){this.removeInner(i-this.first,s)},getValue:function(i){var s=au(this,this.first,this.first+this.size);return i===!1?s:s.join(i||this.lineSeparator())},setValue:Xt(function(i){var s=J(this.first,0),l=this.first+this.size-1;Bs(this,{from:s,to:J(l,Re(this,l).text.length),text:this.splitLines(i),origin:"setValue",full:!0},!0),this.cm&&hu(this.cm,0,0),or(this,Hi(s),dt)}),replaceRange:function(i,s,l,u){s=Ke(this,s),l=l?Ke(this,l):s,Hs(this,i,s,l,u)},getRange:function(i,s,l){var u=ni(this,Ke(this,i),Ke(this,s));return l===!1?u:l===""?u.join(""):u.join(l||this.lineSeparator())},getLine:function(i){var s=this.getLineHandle(i);return s&&s.text},getLineHandle:function(i){if(ce(this,i))return Re(this,i)},getLineNumber:function(i){return w(i)},getLineHandleVisualStart:function(i){return typeof i=="number"&&(i=Re(this,i)),_n(i)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(i){return Ke(this,i)},getCursor:function(i){var s=this.sel.primary(),l;return i==null||i=="head"?l=s.head:i=="anchor"?l=s.anchor:i=="end"||i=="to"||i===!1?l=s.to():l=s.from(),l},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Xt(function(i,s,l){RT(this,Ke(this,typeof i=="number"?J(i,s||0):i),null,l)}),setSelection:Xt(function(i,s,l){RT(this,Ke(this,i),Ke(this,s||i),l)}),extendSelection:Xt(function(i,s,l){Mc(this,Ke(this,i),s&&Ke(this,s),l)}),extendSelections:Xt(function(i,s){LT(this,CE(this,i),s)}),extendSelectionsBy:Xt(function(i,s){var l=rt(this.sel.ranges,i);LT(this,CE(this,l),s)}),setSelections:Xt(function(i,s,l){if(i.length){for(var u=[],f=0;f<i.length;f++)u[f]=new ft(Ke(this,i[f].anchor),Ke(this,i[f].head||i[f].anchor));s==null&&(s=Math.min(i.length-1,this.sel.primIndex)),or(this,yn(this.cm,u,s),l)}}),addSelection:Xt(function(i,s,l){var u=this.sel.ranges.slice(0);u.push(new ft(Ke(this,i),Ke(this,s||i))),or(this,yn(this.cm,u,u.length-1),l)}),getSelection:function(i){for(var s=this.sel.ranges,l,u=0;u<s.length;u++){var f=ni(this,s[u].from(),s[u].to());l=l?l.concat(f):f}return i===!1?l:l.join(i||this.lineSeparator())},getSelections:function(i){for(var s=[],l=this.sel.ranges,u=0;u<l.length;u++){var f=ni(this,l[u].from(),l[u].to());i!==!1&&(f=f.join(i||this.lineSeparator())),s[u]=f}return s},replaceSelection:function(i,s,l){for(var u=[],f=0;f<this.sel.ranges.length;f++)u[f]=i;this.replaceSelections(u,s,l||"+input")},replaceSelections:Xt(function(i,s,l){for(var u=[],f=this.sel,h=0;h<f.ranges.length;h++){var g=f.ranges[h];u[h]={from:g.from(),to:g.to(),text:this.splitLines(i[h]),origin:l}}for(var _=s&&s!="end"&&NV(this,u,s),y=u.length-1;y>=0;y--)Bs(this,u[y]);_?DT(this,_):this.cm&&Ds(this.cm)}),undo:Xt(function(){Bc(this,"undo")}),redo:Xt(function(){Bc(this,"redo")}),undoSelection:Xt(function(){Bc(this,"undo",!0)}),redoSelection:Xt(function(){Bc(this,"redo",!0)}),setExtending:function(i){this.extend=i},getExtending:function(){return this.extend},historySize:function(){for(var i=this.history,s=0,l=0,u=0;u<i.done.length;u++)i.done[u].ranges||++s;for(var f=0;f<i.undone.length;f++)i.undone[f].ranges||++l;return{undo:s,redo:l}},clearHistory:function(){var i=this;this.history=new Rc(this.history),ji(this,function(s){return s.history=i.history},!0)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(i){return i&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(i){return this.history.generation==(i||this.cleanGeneration)},getHistory:function(){return{done:$s(this.history.done),undone:$s(this.history.undone)}},setHistory:function(i){var s=this.history=new Rc(this.history);s.done=$s(i.done.slice(0),null,!0),s.undone=$s(i.undone.slice(0),null,!0)},setGutterMarker:Xt(function(i,s,l){return ku(this,i,"gutter",function(u){var f=u.gutterMarkers||(u.gutterMarkers={});return f[s]=l,!l&&hc(f)&&(u.gutterMarkers=null),!0})}),clearGutter:Xt(function(i){var s=this;this.iter(function(l){l.gutterMarkers&&l.gutterMarkers[i]&&ku(s,l,"gutter",function(){return l.gutterMarkers[i]=null,hc(l.gutterMarkers)&&(l.gutterMarkers=null),!0})})}),lineInfo:function(i){var s;if(typeof i=="number"){if(!ce(this,i)||(s=i,i=Re(this,i),!i))return null}else if(s=w(i),s==null)return null;return{line:s,handle:i,text:i.text,gutterMarkers:i.gutterMarkers,textClass:i.textClass,bgClass:i.bgClass,wrapClass:i.wrapClass,widgets:i.widgets}},addLineClass:Xt(function(i,s,l){return ku(this,i,s=="gutter"?"gutter":"class",function(u){var f=s=="text"?"textClass":s=="background"?"bgClass":s=="gutter"?"gutterClass":"wrapClass";if(!u[f])u[f]=l;else{if(ne(l).test(u[f]))return!1;u[f]+=" "+l}return!0})}),removeLineClass:Xt(function(i,s,l){return ku(this,i,s=="gutter"?"gutter":"class",function(u){var f=s=="text"?"textClass":s=="background"?"bgClass":s=="gutter"?"gutterClass":"wrapClass",h=u[f];if(h)if(l==null)u[f]=null;else{var g=h.match(ne(l));if(!g)return!1;var _=g.index+g[0].length;u[f]=h.slice(0,g.index)+(!g.index||_==h.length?"":" ")+h.slice(_)||null}else return!1;return!0})}),addLineWidget:Xt(function(i,s,l){return BV(this,i,s,l)}),removeLineWidget:function(i){i.clear()},markText:function(i,s,l){return Us(this,Ke(this,i),Ke(this,s),l,l&&l.type||"range")},setBookmark:function(i,s){var l={replacedWith:s&&(s.nodeType==null?s.widget:s),insertLeft:s&&s.insertLeft,clearWhenEmpty:!1,shared:s&&s.shared,handleMouseEvents:s&&s.handleMouseEvents};return i=Ke(this,i),Us(this,i,i,l,"bookmark")},findMarksAt:function(i){i=Ke(this,i);var s=[],l=Re(this,i.line).markedSpans;if(l)for(var u=0;u<l.length;++u){var f=l[u];(f.from==null||f.from<=i.ch)&&(f.to==null||f.to>=i.ch)&&s.push(f.marker.parent||f.marker)}return s},findMarks:function(i,s,l){i=Ke(this,i),s=Ke(this,s);var u=[],f=i.line;return this.iter(i.line,s.line+1,function(h){var g=h.markedSpans;if(g)for(var _=0;_<g.length;_++){var y=g[_];!(y.to!=null&&f==i.line&&i.ch>=y.to||y.from==null&&f!=i.line||y.from!=null&&f==s.line&&y.from>=s.ch)&&(!l||l(y.marker))&&u.push(y.marker.parent||y.marker)}++f}),u},getAllMarks:function(){var i=[];return this.iter(function(s){var l=s.markedSpans;if(l)for(var u=0;u<l.length;++u)l[u].from!=null&&i.push(l[u].marker)}),i},posFromIndex:function(i){var s,l=this.first,u=this.lineSeparator().length;return this.iter(function(f){var h=f.text.length+u;if(h>i)return s=i,!0;i-=h,++l}),Ke(this,J(l,s))},indexFromPos:function(i){i=Ke(this,i);var s=i.ch;if(i.line<this.first||i.ch<0)return 0;var l=this.lineSeparator().length;return this.iter(this.first,i.line,function(u){s+=u.text.length+l}),s},copy:function(i){var s=new wr(au(this,this.first,this.first+this.size),this.modeOption,this.first,this.lineSep,this.direction);return s.scrollTop=this.scrollTop,s.scrollLeft=this.scrollLeft,s.sel=this.sel,s.extend=!1,i&&(s.history.undoDepth=this.history.undoDepth,s.setHistory(this.getHistory())),s},linkedDoc:function(i){i||(i={});var s=this.first,l=this.first+this.size;i.from!=null&&i.from>s&&(s=i.from),i.to!=null&&i.to<l&&(l=i.to);var u=new wr(au(this,s,l),i.mode||this.modeOption,s,this.lineSep,this.direction);return i.sharedHist&&(u.history=this.history),(this.linked||(this.linked=[])).push({doc:u,sharedHist:i.sharedHist}),u.linked=[{doc:this,isParent:!0,sharedHist:i.sharedHist}],UV(u,XT(this)),u},unlinkDoc:function(i){if(i instanceof Et&&(i=i.doc),this.linked)for(var s=0;s<this.linked.length;++s){var l=this.linked[s];if(l.doc==i){this.linked.splice(s,1),i.unlinkDoc(this),jV(XT(this));break}}if(i.history==this.history){var u=[i.id];ji(i,function(f){return u.push(f.id)},!0),i.history=new Rc(null),i.history.done=$s(this.history.done,u),i.history.undone=$s(this.history.undone,u)}},iterLinkedDocs:function(i){ji(this,i)},getMode:function(){return this.mode},getEditor:function(){return this.cm},splitLines:function(i){return this.lineSep?i.split(this.lineSep):Zr(i)},lineSeparator:function(){return this.lineSep||` `},setDirection:Xt(function(i){i!="rtl"&&(i="ltr"),i!=this.direction&&(this.direction=i,this.iter(function(s){return s.order=null}),this.cm&&PV(this.cm))})}),wr.prototype.eachLine=wr.prototype.iter;var VT=0;function GV(i){var s=this;if(QT(s),!(It(s,i)||si(s.display,i))){sr(i),p&&(VT=+new Date);var l=wa(s,i,!0),u=i.dataTransfer.files;if(!(!l||s.isReadOnly()))if(u&&u.length&&window.FileReader&&window.File)for(var f=u.length,h=Array(f),g=0,_=function(){++g==f&&Kt(s,function(){l=Ke(s.doc,l);var z={from:l,to:l,text:s.doc.splitLines(h.filter(function(te){return te!=null}).join(s.doc.lineSeparator())),origin:"paste"};Bs(s.doc,z),DT(s.doc,Hi(Ke(s.doc,l),Ke(s.doc,Ui(z))))})()},y=function(z,te){if(s.options.allowDropFileTypes&&Ee(s.options.allowDropFileTypes,z.type)==-1){_();return}var de=new FileReader;de.onerror=function(){return _()},de.onload=function(){var ge=de.result;if(/[\x00-\x08\x0e-\x1f]{2}/.test(ge)){_();return}h[te]=ge,_()},de.readAsText(z)},k=0;k<u.length;k++)y(u[k],k);else{if(s.state.draggingText&&s.doc.sel.contains(l)>-1){s.state.draggingText(i),setTimeout(function(){return s.display.input.focus()},20);return}try{var L=i.dataTransfer.getData("Text");if(L){var $;if(s.state.draggingText&&!s.state.draggingText.copy&&($=s.listSelections()),$c(s.doc,Hi(l,l)),$)for(var Y=0;Y<$.length;++Y)Hs(s.doc,"",$[Y].anchor,$[Y].head,"drag");s.replaceSelection(L,"around","paste"),s.display.input.focus()}}catch{}}}}function zV(i,s){if(p&&(!i.state.draggingText||+new Date-VT<100)){Li(s);return}if(!(It(i,s)||si(i.display,s))&&(s.dataTransfer.setData("Text",i.getSelection()),s.dataTransfer.effectAllowed="copyMove",s.dataTransfer.setDragImage&&!G)){var l=E("img",null,null,"position: fixed; left: 0; top: 0;");l.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",F&&(l.width=l.height=1,i.display.wrapper.appendChild(l),l._top=l.offsetTop),s.dataTransfer.setDragImage(l,0,0),F&&l.parentNode.removeChild(l)}}function qV(i,s){var l=wa(i,s);if(l){var u=document.createDocumentFragment();nm(i,l,u),i.display.dragCursor||(i.display.dragCursor=E("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),i.display.lineSpace.insertBefore(i.display.dragCursor,i.display.cursorDiv)),W(i.display.dragCursor,u)}}function QT(i){i.display.dragCursor&&(i.display.lineSpace.removeChild(i.display.dragCursor),i.display.dragCursor=null)}function JT(i){if(document.getElementsByClassName){for(var s=document.getElementsByClassName("CodeMirror"),l=[],u=0;u<s.length;u++){var f=s[u].CodeMirror;f&&l.push(f)}l.length&&l[0].operation(function(){for(var h=0;h<l.length;h++)i(l[h])})}}var ZT=!1;function YV(){ZT||(KV(),ZT=!0)}function KV(){var i;$e(window,"resize",function(){i==null&&(i=setTimeout(function(){i=null,JT(XV)},100))}),$e(window,"blur",function(){return JT(Rs)})}function XV(i){var s=i.display;s.cachedCharWidth=s.cachedTextHeight=s.cachedPaddingH=null,s.scrollbarsClipped=!1,i.setSize()}for(var Gi={3:"Pause",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",106:"*",107:"=",109:"-",110:".",111:"/",145:"ScrollLock",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",224:"Mod",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"},Su=0;Su<10;Su++)Gi[Su+48]=Gi[Su+96]=String(Su);for(var Hc=65;Hc<=90;Hc++)Gi[Hc]=String.fromCharCode(Hc);for(var xu=1;xu<=12;xu++)Gi[xu+111]=Gi[xu+63235]="F"+xu;var ui={};ui.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},ui.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},ui.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},ui.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},ui.default=R?ui.macDefault:ui.pcDefault;function VV(i){var s=i.split(/-(?!$)/);i=s[s.length-1];for(var l,u,f,h,g=0;g<s.length-1;g++){var _=s[g];if(/^(cmd|meta|m)$/i.test(_))h=!0;else if(/^a(lt)?$/i.test(_))l=!0;else if(/^(c|ctrl|control)$/i.test(_))u=!0;else if(/^s(hift)?$/i.test(_))f=!0;else throw new Error("Unrecognized modifier name: "+_)}return l&&(i="Alt-"+i),u&&(i="Ctrl-"+i),h&&(i="Cmd-"+i),f&&(i="Shift-"+i),i}function QV(i){var s={};for(var l in i)if(i.hasOwnProperty(l)){var u=i[l];if(/^(name|fallthrough|(de|at)tach)$/.test(l))continue;if(u=="..."){delete i[l];continue}for(var f=rt(l.split(" "),VV),h=0;h<f.length;h++){var g=void 0,_=void 0;h==f.length-1?(_=f.join(" "),g=u):(_=f.slice(0,h+1).join(" "),g="...");var y=s[_];if(!y)s[_]=g;else if(y!=g)throw new Error("Inconsistent bindings for "+_)}delete i[l]}for(var k in s)i[k]=s[k];return i}function js(i,s,l,u){s=Uc(s);var f=s.call?s.call(i,u):s[i];if(f===!1)return"nothing";if(f==="...")return"multi";if(f!=null&&l(f))return"handled";if(s.fallthrough){if(Object.prototype.toString.call(s.fallthrough)!="[object Array]")return js(i,s.fallthrough,l,u);for(var h=0;h<s.fallthrough.length;h++){var g=js(i,s.fallthrough[h],l,u);if(g)return g}}}function eC(i){var s=typeof i=="string"?i:Gi[i.keyCode];return s=="Ctrl"||s=="Alt"||s=="Shift"||s=="Mod"}function tC(i,s,l){var u=i;return s.altKey&&u!="Alt"&&(i="Alt-"+i),(ae?s.metaKey:s.ctrlKey)&&u!="Ctrl"&&(i="Ctrl-"+i),(ae?s.ctrlKey:s.metaKey)&&u!="Mod"&&(i="Cmd-"+i),!l&&s.shiftKey&&u!="Shift"&&(i="Shift-"+i),i}function rC(i,s){if(F&&i.keyCode==34&&i.char)return!1;var l=Gi[i.keyCode];return l==null||i.altGraphKey?!1:(i.keyCode==3&&i.code&&(l=i.code),tC(l,i,s))}function Uc(i){return typeof i=="string"?ui[i]:i}function Ws(i,s){for(var l=i.doc.sel.ranges,u=[],f=0;f<l.length;f++){for(var h=s(l[f]);u.length&&Ce(h.from,Ye(u).to)<=0;){var g=u.pop();if(Ce(g.from,h.from)<0){h.from=g.from;break}}u.push(h)}Mr(i,function(){for(var _=u.length-1;_>=0;_--)Hs(i.doc,"",u[_].from,u[_].to,"+delete");Ds(i)})}function ym(i,s,l){var u=Ni(i.text,s+l,l);return u<0||u>i.text.length?null:u}function km(i,s,l){var u=ym(i,s.ch,l);return u==null?null:new J(s.line,u,l<0?"after":"before")}function Em(i,s,l,u,f){if(i){s.doc.direction=="rtl"&&(f=-f);var h=nt(l,s.doc.direction);if(h){var g=f<0?Ye(h):h[0],_=f<0==(g.level==1),y=_?"after":"before",k;if(g.level>0||s.doc.direction=="rtl"){var L=Ps(s,l);k=f<0?l.text.length-1:0;var $=Dn(s,L,k).top;k=Pn(function(Y){return Dn(s,L,Y).top==$},f<0==(g.level==1)?g.from:g.to-1,k),y=="before"&&(k=ym(l,k,1))}else k=f<0?g.to:g.from;return new J(u,k,y)}}return new J(u,f<0?l.text.length:0,f<0?"before":"after")}function JV(i,s,l,u){var f=nt(s,i.doc.direction);if(!f)return km(s,l,u);l.ch>=s.text.length?(l.ch=s.text.length,l.sticky="before"):l.ch<=0&&(l.ch=0,l.sticky="after");var h=Ii(f,l.ch,l.sticky),g=f[h];if(i.doc.direction=="ltr"&&g.level%2==0&&(u>0?g.to>l.ch:g.from<l.ch))return km(s,l,u);var _=function(be,we){return ym(s,be instanceof J?be.ch:be,we)},y,k=function(be){return i.options.lineWrapping?(y=y||Ps(i,s),oT(i,s,y,be)):{begin:0,end:s.text.length}},L=k(l.sticky=="before"?_(l,-1):l.ch);if(i.doc.direction=="rtl"||g.level==1){var $=g.level==1==u<0,Y=_(l,$?1:-1);if(Y!=null&&($?Y<=g.to&&Y<=L.end:Y>=g.from&&Y>=L.begin)){var z=$?"before":"after";return new J(l.line,Y,z)}}var te=function(be,we,ye){for(var Oe=function(vt,Vt){return Vt?new J(l.line,_(vt,1),"before"):new J(l.line,vt,"after")};be>=0&&be<f.length;be+=we){var Fe=f[be],De=we>0==(Fe.level!=1),Je=De?ye.begin:_(ye.end,-1);if(Fe.from<=Je&&Je<Fe.to||(Je=De?Fe.from:_(Fe.to,-1),ye.begin<=Je&&Je<ye.end))return Oe(Je,De)}},de=te(h+u,u,L);if(de)return de;var ge=u>0?L.end:_(L.begin,-1);return ge!=null&&!(u>0&&ge==s.text.length)&&(de=te(u>0?0:f.length-1,u,k(ge)),de)?de:null}var Au={selectAll:HT,singleSelection:function(i){return i.setSelection(i.getCursor("anchor"),i.getCursor("head"),dt)},killLine:function(i){return Ws(i,function(s){if(s.empty()){var l=Re(i.doc,s.head.line).text.length;return s.head.ch==l&&s.head.line<i.lastLine()?{from:s.head,to:J(s.head.line+1,0)}:{from:s.head,to:J(s.head.line,l)}}else return{from:s.from(),to:s.to()}})},deleteLine:function(i){return Ws(i,function(s){return{from:J(s.from().line,0),to:Ke(i.doc,J(s.to().line+1,0))}})},delLineLeft:function(i){return Ws(i,function(s){return{from:J(s.from().line,0),to:s.from()}})},delWrappedLineLeft:function(i){return Ws(i,function(s){var l=i.charCoords(s.head,"div").top+5,u=i.coordsChar({left:0,top:l},"div");return{from:u,to:s.from()}})},delWrappedLineRight:function(i){return Ws(i,function(s){var l=i.charCoords(s.head,"div").top+5,u=i.coordsChar({left:i.display.lineDiv.offsetWidth+100,top:l},"div");return{from:s.from(),to:u}})},undo:function(i){return i.undo()},redo:function(i){return i.redo()},undoSelection:function(i){return i.undoSelection()},redoSelection:function(i){return i.redoSelection()},goDocStart:function(i){return i.extendSelection(J(i.firstLine(),0))},goDocEnd:function(i){return i.extendSelection(J(i.lastLine()))},goLineStart:function(i){return i.extendSelectionsBy(function(s){return nC(i,s.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(i){return i.extendSelectionsBy(function(s){return iC(i,s.head)},{origin:"+move",bias:1})},goLineEnd:function(i){return i.extendSelectionsBy(function(s){return ZV(i,s.head.line)},{origin:"+move",bias:-1})},goLineRight:function(i){return i.extendSelectionsBy(function(s){var l=i.cursorCoords(s.head,"div").top+5;return i.coordsChar({left:i.display.lineDiv.offsetWidth+100,top:l},"div")},ze)},goLineLeft:function(i){return i.extendSelectionsBy(function(s){var l=i.cursorCoords(s.head,"div").top+5;return i.coordsChar({left:0,top:l},"div")},ze)},goLineLeftSmart:function(i){return i.extendSelectionsBy(function(s){var l=i.cursorCoords(s.head,"div").top+5,u=i.coordsChar({left:0,top:l},"div");return u.ch<i.getLine(u.line).search(/\S/)?iC(i,s.head):u},ze)},goLineUp:function(i){return i.moveV(-1,"line")},goLineDown:function(i){return i.moveV(1,"line")},goPageUp:function(i){return i.moveV(-1,"page")},goPageDown:function(i){return i.moveV(1,"page")},goCharLeft:function(i){return i.moveH(-1,"char")},goCharRight:function(i){return i.moveH(1,"char")},goColumnLeft:function(i){return i.moveH(-1,"column")},goColumnRight:function(i){return i.moveH(1,"column")},goWordLeft:function(i){return i.moveH(-1,"word")},goGroupRight:function(i){return i.moveH(1,"group")},goGroupLeft:function(i){return i.moveH(-1,"group")},goWordRight:function(i){return i.moveH(1,"word")},delCharBefore:function(i){return i.deleteH(-1,"codepoint")},delCharAfter:function(i){return i.deleteH(1,"char")},delWordBefore:function(i){return i.deleteH(-1,"word")},delWordAfter:function(i){return i.deleteH(1,"word")},delGroupBefore:function(i){return i.deleteH(-1,"group")},delGroupAfter:function(i){return i.deleteH(1,"group")},indentAuto:function(i){return i.indentSelection("smart")},indentMore:function(i){return i.indentSelection("add")},indentLess:function(i){return i.indentSelection("subtract")},insertTab:function(i){return i.replaceSelection(" ")},insertSoftTab:function(i){for(var s=[],l=i.listSelections(),u=i.options.tabSize,f=0;f<l.length;f++){var h=l[f].from(),g=Le(i.getLine(h.line),h.ch,u);s.push($t(u-g%u))}i.replaceSelections(s)},defaultTab:function(i){i.somethingSelected()?i.indentSelection("add"):i.execCommand("insertTab")},transposeChars:function(i){return Mr(i,function(){for(var s=i.listSelections(),l=[],u=0;u<s.length;u++)if(s[u].empty()){var f=s[u].head,h=Re(i.doc,f.line).text;if(h){if(f.ch==h.length&&(f=new J(f.line,f.ch-1)),f.ch>0)f=new J(f.line,f.ch+1),i.replaceRange(h.charAt(f.ch-1)+h.charAt(f.ch-2),J(f.line,f.ch-2),f,"+transpose");else if(f.line>i.doc.first){var g=Re(i.doc,f.line-1).text;g&&(f=new J(f.line,1),i.replaceRange(h.charAt(0)+i.doc.lineSeparator()+g.charAt(g.length-1),J(f.line-1,g.length-1),f,"+transpose"))}}l.push(new ft(f,f))}i.setSelections(l)})},newlineAndIndent:function(i){return Mr(i,function(){for(var s=i.listSelections(),l=s.length-1;l>=0;l--)i.replaceRange(i.doc.lineSeparator(),s[l].anchor,s[l].head,"+input");s=i.listSelections();for(var u=0;u<s.length;u++)i.indentLine(s[u].from().line,null,!0);Ds(i)})},openLine:function(i){return i.replaceSelection(` `,"start")},toggleOverwrite:function(i){return i.toggleOverwrite()}};function nC(i,s){var l=Re(i.doc,s),u=_n(l);return u!=l&&(s=w(u)),Em(!0,i,u,s,1)}function ZV(i,s){var l=Re(i.doc,s),u=MX(l);return u!=l&&(s=w(u)),Em(!0,i,l,s,-1)}function iC(i,s){var l=nC(i,s.line),u=Re(i.doc,l.line),f=nt(u,i.doc.direction);if(!f||f[0].level==0){var h=Math.max(l.ch,u.text.search(/\S/)),g=s.line==l.line&&s.ch<=h&&s.ch;return J(l.line,g?0:h,l.sticky)}return l}function jc(i,s,l){if(typeof s=="string"&&(s=Au[s],!s))return!1;i.display.input.ensurePolled();var u=i.display.shift,f=!1;try{i.isReadOnly()&&(i.state.suppressEdits=!0),l&&(i.display.shift=!1),f=s(i)!=ut}finally{i.display.shift=u,i.state.suppressEdits=!1}return f}function eQ(i,s,l){for(var u=0;u<i.state.keyMaps.length;u++){var f=js(s,i.state.keyMaps[u],l,i);if(f)return f}return i.options.extraKeys&&js(s,i.options.extraKeys,l,i)||js(s,i.options.keyMap,l,i)}var tQ=new xe;function Ou(i,s,l,u){var f=i.state.keySeq;if(f){if(eC(s))return"handled";if(/\'$/.test(s)?i.state.keySeq=null:tQ.set(50,function(){i.state.keySeq==f&&(i.state.keySeq=null,i.display.input.reset())}),aC(i,f+" "+s,l,u))return!0}return aC(i,s,l,u)}function aC(i,s,l,u){var f=eQ(i,s,u);return f=="multi"&&(i.state.keySeq=s),f=="handled"&&Yt(i,"keyHandled",i,s,l),(f=="handled"||f=="multi")&&(sr(l),im(i)),!!f}function sC(i,s){var l=rC(s,!0);return l?s.shiftKey&&!i.state.keySeq?Ou(i,"Shift-"+l,s,function(u){return jc(i,u,!0)})||Ou(i,l,s,function(u){if(typeof u=="string"?/^go[A-Z]/.test(u):u.motion)return jc(i,u)}):Ou(i,l,s,function(u){return jc(i,u)}):!1}function rQ(i,s,l){return Ou(i,"'"+l+"'",s,function(u){return jc(i,u,!0)})}var Tm=null;function oC(i){var s=this;if(!(i.target&&i.target!=s.display.input.getField())&&(s.curOp.focus=he(at(s)),!It(s,i))){p&&v<11&&i.keyCode==27&&(i.returnValue=!1);var l=i.keyCode;s.display.shift=l==16||i.shiftKey;var u=sC(s,i);F&&(Tm=u?l:null,!u&&l==88&&!vc&&(R?i.metaKey:i.ctrlKey)&&s.replaceSelection("",null,"cut")),a&&!R&&!u&&l==46&&i.shiftKey&&!i.ctrlKey&&document.execCommand&&document.execCommand("cut"),l==18&&!/\bCodeMirror-crosshair\b/.test(s.display.lineDiv.className)&&nQ(s)}}function nQ(i){var s=i.display.lineDiv;Ie(s,"CodeMirror-crosshair");function l(u){(u.keyCode==18||!u.altKey)&&(U(s,"CodeMirror-crosshair"),ar(document,"keyup",l),ar(document,"mouseover",l))}$e(document,"keyup",l),$e(document,"mouseover",l)}function uC(i){i.keyCode==16&&(this.doc.sel.shift=!1),It(this,i)}function lC(i){var s=this;if(!(i.target&&i.target!=s.display.input.getField())&&!(si(s.display,i)||It(s,i)||i.ctrlKey&&!i.altKey||R&&i.metaKey)){var l=i.keyCode,u=i.charCode;if(F&&l==Tm){Tm=null,sr(i);return}if(!(F&&(!i.which||i.which<10)&&sC(s,i))){var f=String.fromCharCode(u??l);f!="\b"&&(rQ(s,i,f)||s.display.input.onKeyPress(i))}}}var iQ=400,Cm=function(i,s,l){this.time=i,this.pos=s,this.button=l};Cm.prototype.compare=function(i,s,l){return this.time+iQ>i&&Ce(s,this.pos)==0&&l==this.button};var Nu,Pu;function aQ(i,s){var l=+new Date;return Pu&&Pu.compare(l,i,s)?(Nu=Pu=null,"triple"):Nu&&Nu.compare(l,i,s)?(Pu=new Cm(l,i,s),Nu=null,"double"):(Nu=new Cm(l,i,s),Pu=null,"single")}function cC(i){var s=this,l=s.display;if(!(It(s,i)||l.activeTouch&&l.input.supportsTouch())){if(l.input.ensurePolled(),l.shift=i.shiftKey,si(l,i)){b||(l.scroller.draggable=!1,setTimeout(function(){return l.scroller.draggable=!0},100));return}if(!wm(s,i)){var u=wa(s,i),f=pn(i),h=u?aQ(u,f):"single";Pe(s).focus(),f==1&&s.state.selectingText&&s.state.selectingText(i),!(u&&sQ(s,f,u,h,i))&&(f==1?u?uQ(s,u,h,i):ru(i)==l.scroller&&sr(i):f==2?(u&&Mc(s.doc,u),setTimeout(function(){return l.input.focus()},20)):f==3&&(Z?s.display.input.onContextMenu(i):am(s)))}}}function sQ(i,s,l,u,f){var h="Click";return u=="double"?h="Double"+h:u=="triple"&&(h="Triple"+h),h=(s==1?"Left":s==2?"Middle":"Right")+h,Ou(i,tC(h,f),f,function(g){if(typeof g=="string"&&(g=Au[g]),!g)return!1;var _=!1;try{i.isReadOnly()&&(i.state.suppressEdits=!0),_=g(i,l)!=ut}finally{i.state.suppressEdits=!1}return _})}function oQ(i,s,l){var u=i.getOption("configureMouse"),f=u?u(i,s,l):{};if(f.unit==null){var h=B?l.shiftKey&&l.metaKey:l.altKey;f.unit=h?"rectangle":s=="single"?"char":s=="double"?"word":"line"}return(f.extend==null||i.doc.extend)&&(f.extend=i.doc.extend||l.shiftKey),f.addNew==null&&(f.addNew=R?l.metaKey:l.ctrlKey),f.moveOnDrag==null&&(f.moveOnDrag=!(R?l.altKey:l.ctrlKey)),f}function uQ(i,s,l,u){p?setTimeout(Te(fT,i),0):i.curOp.focus=he(at(i));var f=oQ(i,l,u),h=i.doc.sel,g;i.options.dragDrop&&$p&&!i.isReadOnly()&&l=="single"&&(g=h.contains(s))>-1&&(Ce((g=h.ranges[g]).from(),s)<0||s.xRel>0)&&(Ce(g.to(),s)>0||s.xRel<0)?lQ(i,u,s,f):cQ(i,u,s,f)}function lQ(i,s,l,u){var f=i.display,h=!1,g=Kt(i,function(k){b&&(f.scroller.draggable=!1),i.state.draggingText=!1,i.state.delayingBlurEvent&&(i.hasFocus()?i.state.delayingBlurEvent=!1:am(i)),ar(f.wrapper.ownerDocument,"mouseup",g),ar(f.wrapper.ownerDocument,"mousemove",_),ar(f.scroller,"dragstart",y),ar(f.scroller,"drop",g),h||(sr(k),u.addNew||Mc(i.doc,l,null,null,u.extend),b&&!G||p&&v==9?setTimeout(function(){f.wrapper.ownerDocument.body.focus({preventScroll:!0}),f.input.focus()},20):f.input.focus())}),_=function(k){h=h||Math.abs(s.clientX-k.clientX)+Math.abs(s.clientY-k.clientY)>=10},y=function(){return h=!0};b&&(f.scroller.draggable=!0),i.state.draggingText=g,g.copy=!u.moveOnDrag,$e(f.wrapper.ownerDocument,"mouseup",g),$e(f.wrapper.ownerDocument,"mousemove",_),$e(f.scroller,"dragstart",y),$e(f.scroller,"drop",g),i.state.delayingBlurEvent=!0,setTimeout(function(){return f.input.focus()},20),f.scroller.dragDrop&&f.scroller.dragDrop()}function fC(i,s,l){if(l=="char")return new ft(s,s);if(l=="word")return i.findWordAt(s);if(l=="line")return new ft(J(s.line,0),Ke(i.doc,J(s.line+1,0)));var u=l(i,s);return new ft(u.from,u.to)}function cQ(i,s,l,u){p&&am(i);var f=i.display,h=i.doc;sr(s);var g,_,y=h.sel,k=y.ranges;if(u.addNew&&!u.extend?(_=h.sel.contains(l),_>-1?g=k[_]:g=new ft(l,l)):(g=h.sel.primary(),_=h.sel.primIndex),u.unit=="rectangle")u.addNew||(g=new ft(l,l)),l=wa(i,s,!0,!0),_=-1;else{var L=fC(i,l,u.unit);u.extend?g=_m(g,L.anchor,L.head,u.extend):g=L}u.addNew?_==-1?(_=k.length,or(h,yn(i,k.concat([g]),_),{scroll:!1,origin:"*mouse"})):k.length>1&&k[_].empty()&&u.unit=="char"&&!u.extend?(or(h,yn(i,k.slice(0,_).concat(k.slice(_+1)),0),{scroll:!1,origin:"*mouse"}),y=h.sel):bm(h,_,g,Nt):(_=0,or(h,new zr([g],0),Nt),y=h.sel);var $=l;function Y(ye){if(Ce($,ye)!=0)if($=ye,u.unit=="rectangle"){for(var Oe=[],Fe=i.options.tabSize,De=Le(Re(h,l.line).text,l.ch,Fe),Je=Le(Re(h,ye.line).text,ye.ch,Fe),vt=Math.min(De,Je),Vt=Math.max(De,Je),At=Math.min(l.line,ye.line),$r=Math.min(i.lastLine(),Math.max(l.line,ye.line));At<=$r;At++){var Sr=Re(h,At).text,Bt=tt(Sr,vt,Fe);vt==Vt?Oe.push(new ft(J(At,Bt),J(At,Bt))):Sr.length>Bt&&Oe.push(new ft(J(At,Bt),J(At,tt(Sr,Vt,Fe))))}Oe.length||Oe.push(new ft(l,l)),or(h,yn(i,y.ranges.slice(0,_).concat(Oe),_),{origin:"*mouse",scroll:!1}),i.scrollIntoView(ye)}else{var xr=g,rr=fC(i,ye,u.unit),jt=xr.anchor,Ht;Ce(rr.anchor,jt)>0?(Ht=rr.head,jt=As(xr.from(),rr.anchor)):(Ht=rr.anchor,jt=Tr(xr.to(),rr.head));var Rt=y.ranges.slice(0);Rt[_]=fQ(i,new ft(Ke(h,jt),Ht)),or(h,yn(i,Rt,_),Nt)}}var z=f.wrapper.getBoundingClientRect(),te=0;function de(ye){var Oe=++te,Fe=wa(i,ye,!0,u.unit=="rectangle");if(Fe)if(Ce(Fe,$)!=0){i.curOp.focus=he(at(i)),Y(Fe);var De=Nc(f,h);(Fe.line>=De.to||Fe.line<De.from)&&setTimeout(Kt(i,function(){te==Oe&&de(ye)}),150)}else{var Je=ye.clientY<z.top?-20:ye.clientY>z.bottom?20:0;Je&&setTimeout(Kt(i,function(){te==Oe&&(f.scroller.scrollTop+=Je,de(ye))}),50)}}function ge(ye){i.state.selectingText=!1,te=1/0,ye&&(sr(ye),f.input.focus()),ar(f.wrapper.ownerDocument,"mousemove",be),ar(f.wrapper.ownerDocument,"mouseup",we),h.history.lastSelOrigin=null}var be=Kt(i,function(ye){ye.buttons===0||!pn(ye)?ge(ye):de(ye)}),we=Kt(i,ge);i.state.selectingText=we,$e(f.wrapper.ownerDocument,"mousemove",be),$e(f.wrapper.ownerDocument,"mouseup",we)}function fQ(i,s){var l=s.anchor,u=s.head,f=Re(i.doc,l.line);if(Ce(l,u)==0&&l.sticky==u.sticky)return s;var h=nt(f);if(!h)return s;var g=Ii(h,l.ch,l.sticky),_=h[g];if(_.from!=l.ch&&_.to!=l.ch)return s;var y=g+(_.from==l.ch==(_.level!=1)?0:1);if(y==0||y==h.length)return s;var k;if(u.line!=l.line)k=(u.line-l.line)*(i.doc.direction=="ltr"?1:-1)>0;else{var L=Ii(h,u.ch,u.sticky),$=L-g||(u.ch-l.ch)*(_.level==1?-1:1);L==y-1||L==y?k=$<0:k=$>0}var Y=h[y+(k?-1:0)],z=k==(Y.level==1),te=z?Y.from:Y.to,de=z?"after":"before";return l.ch==te&&l.sticky==de?s:new ft(new J(l.line,te,de),u)}function dC(i,s,l,u){var f,h;if(s.touches)f=s.touches[0].clientX,h=s.touches[0].clientY;else try{f=s.clientX,h=s.clientY}catch{return!1}if(f>=Math.floor(i.display.gutters.getBoundingClientRect().right))return!1;u&&sr(s);var g=i.display,_=g.lineDiv.getBoundingClientRect();if(h>_.bottom||!Dr(i,l))return Er(s);h-=_.top-g.viewOffset;for(var y=0;y<i.display.gutterSpecs.length;++y){var k=g.gutters.childNodes[y];if(k&&k.getBoundingClientRect().right>=f){var L=M(i.doc,h),$=i.display.gutterSpecs[y];return Pt(i,l,i,L,$.className,s),Er(s)}}}function wm(i,s){return dC(i,s,"gutterClick",!0)}function hC(i,s){si(i.display,s)||dQ(i,s)||It(i,s,"contextmenu")||Z||i.display.input.onContextMenu(s)}function dQ(i,s){return Dr(i,"gutterContextMenu")?dC(i,s,"gutterContextMenu",!1):!1}function pC(i){i.display.wrapper.className=i.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+i.options.theme.replace(/(^|\s)\s*/g," cm-s-"),fu(i)}var Gs={toString:function(){return"CodeMirror.Init"}},mC={},Wc={};function hQ(i){var s=i.optionHandlers;function l(u,f,h,g){i.defaults[u]=f,h&&(s[u]=g?function(_,y,k){k!=Gs&&h(_,y,k)}:h)}i.defineOption=l,i.Init=Gs,l("value","",function(u,f){return u.setValue(f)},!0),l("mode",null,function(u,f){u.doc.modeOption=f,mm(u)},!0),l("indentUnit",2,mm,!0),l("indentWithTabs",!1),l("smartIndent",!0),l("tabSize",4,function(u){bu(u),fu(u),Cr(u)},!0),l("lineSeparator",null,function(u,f){if(u.doc.lineSep=f,!!f){var h=[],g=u.doc.first;u.doc.iter(function(y){for(var k=0;;){var L=y.text.indexOf(f,k);if(L==-1)break;k=L+f.length,h.push(J(g,L))}g++});for(var _=h.length-1;_>=0;_--)Hs(u.doc,f,h[_],J(h[_].line,h[_].ch+f.length))}}),l("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,function(u,f,h){u.state.specialChars=new RegExp(f.source+(f.test(" ")?"":"| "),"g"),h!=Gs&&u.refresh()}),l("specialCharPlaceholder",jX,function(u){return u.refresh()},!0),l("electricChars",!0),l("inputStyle",P?"contenteditable":"textarea",function(){throw new Error("inputStyle can not (yet) be changed in a running editor")},!0),l("spellcheck",!1,function(u,f){return u.getInputField().spellcheck=f},!0),l("autocorrect",!1,function(u,f){return u.getInputField().autocorrect=f},!0),l("autocapitalize",!1,function(u,f){return u.getInputField().autocapitalize=f},!0),l("rtlMoveVisually",!q),l("wholeLineUpdateBefore",!0),l("theme","default",function(u){pC(u),_u(u)},!0),l("keyMap","default",function(u,f,h){var g=Uc(f),_=h!=Gs&&Uc(h);_&&_.detach&&_.detach(u,g),g.attach&&g.attach(u,_||null)}),l("extraKeys",null),l("configureMouse",null),l("lineWrapping",!1,mQ,!0),l("gutters",[],function(u,f){u.display.gutterSpecs=hm(f,u.options.lineNumbers),_u(u)},!0),l("fixedGutter",!0,function(u,f){u.display.gutters.style.left=f?tm(u.display)+"px":"0",u.refresh()},!0),l("coverGutterNextToScrollbar",!1,function(u){return Ms(u)},!0),l("scrollbarStyle","native",function(u){gT(u),Ms(u),u.display.scrollbars.setScrollTop(u.doc.scrollTop),u.display.scrollbars.setScrollLeft(u.doc.scrollLeft)},!0),l("lineNumbers",!1,function(u,f){u.display.gutterSpecs=hm(u.options.gutters,f),_u(u)},!0),l("firstLineNumber",1,_u,!0),l("lineNumberFormatter",function(u){return u},_u,!0),l("showCursorWhenSelecting",!1,du,!0),l("resetSelectionOnContextMenu",!0),l("lineWiseCopyCut",!0),l("pasteLinesPerSelection",!0),l("selectionsMayTouch",!1),l("readOnly",!1,function(u,f){f=="nocursor"&&(Rs(u),u.display.input.blur()),u.display.input.readOnlyChanged(f)}),l("screenReaderLabel",null,function(u,f){f=f===""?null:f,u.display.input.screenReaderLabelChanged(f)}),l("disableInput",!1,function(u,f){f||u.display.input.reset()},!0),l("dragDrop",!0,pQ),l("allowDropFileTypes",null),l("cursorBlinkRate",530),l("cursorScrollMargin",0),l("cursorHeight",1,du,!0),l("singleCursorHeightPerLine",!0,du,!0),l("workTime",100),l("workDelay",100),l("flattenSpans",!0,bu,!0),l("addModeClass",!1,bu,!0),l("pollInterval",100),l("undoDepth",200,function(u,f){return u.doc.history.undoDepth=f}),l("historyEventDelay",1250),l("viewportMargin",10,function(u){return u.refresh()},!0),l("maxHighlightLength",1e4,bu,!0),l("moveInputWithCursor",!0,function(u,f){f||u.display.input.resetPosition()}),l("tabindex",null,function(u,f){return u.display.input.getField().tabIndex=f||""}),l("autofocus",null),l("direction","ltr",function(u,f){return u.doc.setDirection(f)},!0),l("phrases",null)}function pQ(i,s,l){var u=l&&l!=Gs;if(!s!=!u){var f=i.display.dragFunctions,h=s?$e:ar;h(i.display.scroller,"dragstart",f.start),h(i.display.scroller,"dragenter",f.enter),h(i.display.scroller,"dragover",f.over),h(i.display.scroller,"dragleave",f.leave),h(i.display.scroller,"drop",f.drop)}}function mQ(i){i.options.lineWrapping?(Ie(i.display.wrapper,"CodeMirror-wrap"),i.display.sizer.style.minWidth="",i.display.sizerWidth=null):(U(i.display.wrapper,"CodeMirror-wrap"),zp(i)),rm(i),Cr(i),fu(i),setTimeout(function(){return Ms(i)},100)}function Et(i,s){var l=this;if(!(this instanceof Et))return new Et(i,s);this.options=s=s?Se(s):{},Se(mC,s,!1);var u=s.value;typeof u=="string"?u=new wr(u,s.mode,null,s.lineSeparator,s.direction):s.mode&&(u.modeOption=s.mode),this.doc=u;var f=new Et.inputStyles[s.inputStyle](this),h=this.display=new AV(i,u,f,s);h.wrapper.CodeMirror=this,pC(this),s.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),gT(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new xe,keySeq:null,specialChars:null},s.autofocus&&!P&&h.input.focus(),p&&v<11&&setTimeout(function(){return l.display.input.reset(!0)},20),vQ(this),YV(),Oa(this),this.curOp.forceUpdate=!0,xT(this,u),s.autofocus&&!P||this.hasFocus()?setTimeout(function(){l.hasFocus()&&!l.state.focused&&sm(l)},20):Rs(this);for(var g in Wc)Wc.hasOwnProperty(g)&&Wc[g](this,s[g],Gs);yT(this),s.finishInit&&s.finishInit(this);for(var _=0;_<Sm.length;++_)Sm[_](this);Na(this),b&&s.lineWrapping&&getComputedStyle(h.lineDiv).textRendering=="optimizelegibility"&&(h.lineDiv.style.textRendering="auto")}Et.defaults=mC,Et.optionHandlers=Wc;function vQ(i){var s=i.display;$e(s.scroller,"mousedown",Kt(i,cC)),p&&v<11?$e(s.scroller,"dblclick",Kt(i,function(y){if(!It(i,y)){var k=wa(i,y);if(!(!k||wm(i,y)||si(i.display,y))){sr(y);var L=i.findWordAt(k);Mc(i.doc,L.anchor,L.head)}}})):$e(s.scroller,"dblclick",function(y){return It(i,y)||sr(y)}),$e(s.scroller,"contextmenu",function(y){return hC(i,y)}),$e(s.input.getField(),"contextmenu",function(y){s.scroller.contains(y.target)||hC(i,y)});var l,u={end:0};function f(){s.activeTouch&&(l=setTimeout(function(){return s.activeTouch=null},1e3),u=s.activeTouch,u.end=+new Date)}function h(y){if(y.touches.length!=1)return!1;var k=y.touches[0];return k.radiusX<=1&&k.radiusY<=1}function g(y,k){if(k.left==null)return!0;var L=k.left-y.left,$=k.top-y.top;return L*L+$*$>400}$e(s.scroller,"touchstart",function(y){if(!It(i,y)&&!h(y)&&!wm(i,y)){s.input.ensurePolled(),clearTimeout(l);var k=+new Date;s.activeTouch={start:k,moved:!1,prev:k-u.end<=300?u:null},y.touches.length==1&&(s.activeTouch.left=y.touches[0].pageX,s.activeTouch.top=y.touches[0].pageY)}}),$e(s.scroller,"touchmove",function(){s.activeTouch&&(s.activeTouch.moved=!0)}),$e(s.scroller,"touchend",function(y){var k=s.activeTouch;if(k&&!si(s,y)&&k.left!=null&&!k.moved&&new Date-k.start<300){var L=i.coordsChar(s.activeTouch,"page"),$;!k.prev||g(k,k.prev)?$=new ft(L,L):!k.prev.prev||g(k,k.prev.prev)?$=i.findWordAt(L):$=new ft(J(L.line,0),Ke(i.doc,J(L.line+1,0))),i.setSelection($.anchor,$.head),i.focus(),sr(y)}f()}),$e(s.scroller,"touchcancel",f),$e(s.scroller,"scroll",function(){s.scroller.clientHeight&&(pu(i,s.scroller.scrollTop),xa(i,s.scroller.scrollLeft,!0),Pt(i,"scroll",i))}),$e(s.scroller,"mousewheel",function(y){return TT(i,y)}),$e(s.scroller,"DOMMouseScroll",function(y){return TT(i,y)}),$e(s.wrapper,"scroll",function(){return s.wrapper.scrollTop=s.wrapper.scrollLeft=0}),s.dragFunctions={enter:function(y){It(i,y)||Li(y)},over:function(y){It(i,y)||(qV(i,y),Li(y))},start:function(y){return zV(i,y)},drop:Kt(i,GV),leave:function(y){It(i,y)||QT(i)}};var _=s.input.getField();$e(_,"keyup",function(y){return uC.call(i,y)}),$e(_,"keydown",Kt(i,oC)),$e(_,"keypress",Kt(i,lC)),$e(_,"focus",function(y){return sm(i,y)}),$e(_,"blur",function(y){return Rs(i,y)})}var Sm=[];Et.defineInitHook=function(i){return Sm.push(i)};function Iu(i,s,l,u){var f=i.doc,h;l==null&&(l="add"),l=="smart"&&(f.mode.indent?h=su(i,s).state:l="prev");var g=i.options.tabSize,_=Re(f,s),y=Le(_.text,null,g);_.stateAfter&&(_.stateAfter=null);var k=_.text.match(/^\s*/)[0],L;if(!u&&!/\S/.test(_.text))L=0,l="not";else if(l=="smart"&&(L=f.mode.indent(h,_.text.slice(k.length),_.text),L==ut||L>150)){if(!u)return;l="prev"}l=="prev"?s>f.first?L=Le(Re(f,s-1).text,null,g):L=0:l=="add"?L=y+i.options.indentUnit:l=="subtract"?L=y-i.options.indentUnit:typeof l=="number"&&(L=y+l),L=Math.max(0,L);var $="",Y=0;if(i.options.indentWithTabs)for(var z=Math.floor(L/g);z;--z)Y+=g,$+=" ";if(Y<L&&($+=$t(L-Y)),$!=k)return Hs(f,$,J(s,0),J(s,k.length),"+input"),_.stateAfter=null,!0;for(var te=0;te<f.sel.ranges.length;te++){var de=f.sel.ranges[te];if(de.head.line==s&&de.head.ch<k.length){var ge=J(s,k.length);bm(f,te,new ft(ge,ge));break}}}var kn=null;function Gc(i){kn=i}function xm(i,s,l,u,f){var h=i.doc;i.display.shift=!1,u||(u=h.sel);var g=+new Date-200,_=f=="paste"||i.state.pasteIncoming>g,y=Zr(s),k=null;if(_&&u.ranges.length>1)if(kn&&kn.text.join(` `)==s){if(u.ranges.length%kn.text.length==0){k=[];for(var L=0;L<kn.text.length;L++)k.push(h.splitLines(kn.text[L]))}}else y.length==u.ranges.length&&i.options.pasteLinesPerSelection&&(k=rt(y,function(be){return[be]}));for(var $=i.curOp.updateInput,Y=u.ranges.length-1;Y>=0;Y--){var z=u.ranges[Y],te=z.from(),de=z.to();z.empty()&&(l&&l>0?te=J(te.line,te.ch-l):i.state.overwrite&&!_?de=J(de.line,Math.min(Re(h,de.line).text.length,de.ch+Ye(y).length)):_&&kn&&kn.lineWise&&kn.text.join(` `)==y.join(` `)&&(te=de=J(te.line,0)));var ge={from:te,to:de,text:k?k[Y%k.length]:y,origin:f||(_?"paste":i.state.cutIncoming>g?"cut":"+input")};Bs(i.doc,ge),Yt(i,"inputRead",i,ge)}s&&!_&&gC(i,s),Ds(i),i.curOp.updateInput<2&&(i.curOp.updateInput=$),i.curOp.typing=!0,i.state.pasteIncoming=i.state.cutIncoming=-1}function vC(i,s){var l=i.clipboardData&&i.clipboardData.getData("Text");if(l)return i.preventDefault(),!s.isReadOnly()&&!s.options.disableInput&&s.hasFocus()&&Mr(s,function(){return xm(s,l,0,null,"paste")}),!0}function gC(i,s){if(!(!i.options.electricChars||!i.options.smartIndent))for(var l=i.doc.sel,u=l.ranges.length-1;u>=0;u--){var f=l.ranges[u];if(!(f.head.ch>100||u&&l.ranges[u-1].head.line==f.head.line)){var h=i.getModeAt(f.head),g=!1;if(h.electricChars){for(var _=0;_<h.electricChars.length;_++)if(s.indexOf(h.electricChars.charAt(_))>-1){g=Iu(i,f.head.line,"smart");break}}else h.electricInput&&h.electricInput.test(Re(i.doc,f.head.line).text.slice(0,f.head.ch))&&(g=Iu(i,f.head.line,"smart"));g&&Yt(i,"electricInput",i,f.head.line)}}}function _C(i){for(var s=[],l=[],u=0;u<i.doc.sel.ranges.length;u++){var f=i.doc.sel.ranges[u].head.line,h={anchor:J(f,0),head:J(f+1,0)};l.push(h),s.push(i.getRange(h.anchor,h.head))}return{text:s,ranges:l}}function Am(i,s,l,u){i.setAttribute("autocorrect",l?"on":"off"),i.setAttribute("autocapitalize",u?"on":"off"),i.setAttribute("spellcheck",!!s)}function bC(){var i=E("textarea",null,null,"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none"),s=E("div",[i],null,"overflow: hidden; position: relative; width: 3px; height: 0px;");return b?i.style.width="1000px":i.setAttribute("wrap","off"),x&&(i.style.border="1px solid black"),s}function gQ(i){var s=i.optionHandlers,l=i.helpers={};i.prototype={constructor:i,focus:function(){Pe(this).focus(),this.display.input.focus()},setOption:function(u,f){var h=this.options,g=h[u];h[u]==f&&u!="mode"||(h[u]=f,s.hasOwnProperty(u)&&Kt(this,s[u])(this,f,g),Pt(this,"optionChange",this,u))},getOption:function(u){return this.options[u]},getDoc:function(){return this.doc},addKeyMap:function(u,f){this.state.keyMaps[f?"push":"unshift"](Uc(u))},removeKeyMap:function(u){for(var f=this.state.keyMaps,h=0;h<f.length;++h)if(f[h]==u||f[h].name==u)return f.splice(h,1),!0},addOverlay:pr(function(u,f){var h=u.token?u:i.getMode(this.options,u);if(h.startState)throw new Error("Overlays may not be stateful.");X(this.state.overlays,{mode:h,modeSpec:u,opaque:f&&f.opaque,priority:f&&f.priority||0},function(g){return g.priority}),this.state.modeGen++,Cr(this)}),removeOverlay:pr(function(u){for(var f=this.state.overlays,h=0;h<f.length;++h){var g=f[h].modeSpec;if(g==u||typeof u=="string"&&g.name==u){f.splice(h,1),this.state.modeGen++,Cr(this);return}}}),indentLine:pr(function(u,f,h){typeof f!="string"&&typeof f!="number"&&(f==null?f=this.options.smartIndent?"smart":"prev":f=f?"add":"subtract"),ce(this.doc,u)&&Iu(this,u,f,h)}),indentSelection:pr(function(u){for(var f=this.doc.sel.ranges,h=-1,g=0;g<f.length;g++){var _=f[g];if(_.empty())_.head.line>h&&(Iu(this,_.head.line,u,!0),h=_.head.line,g==this.doc.sel.primIndex&&Ds(this));else{var y=_.from(),k=_.to(),L=Math.max(h,y.line);h=Math.min(this.lastLine(),k.line-(k.ch?0:1))+1;for(var $=L;$<h;++$)Iu(this,$,u);var Y=this.doc.sel.ranges;y.ch==0&&f.length==Y.length&&Y[g].from().ch>0&&bm(this.doc,g,new ft(y,Y[g].to()),dt)}}}),getTokenAt:function(u,f){return OE(this,u,f)},getLineTokens:function(u,f){return OE(this,J(u),f,!0)},getTokenTypeAt:function(u){u=Ke(this.doc,u);var f=SE(this,Re(this.doc,u.line)),h=0,g=(f.length-1)/2,_=u.ch,y;if(_==0)y=f[2];else for(;;){var k=h+g>>1;if((k?f[k*2-1]:0)>=_)g=k;else if(f[k*2+1]<_)h=k+1;else{y=f[k*2+2];break}}var L=y?y.indexOf("overlay "):-1;return L<0?y:L==0?null:y.slice(0,L-1)},getModeAt:function(u){var f=this.doc.mode;return f.innerMode?i.innerMode(f,this.getTokenAt(u).state).mode:f},getHelper:function(u,f){return this.getHelpers(u,f)[0]},getHelpers:function(u,f){var h=[];if(!l.hasOwnProperty(f))return h;var g=l[f],_=this.getModeAt(u);if(typeof _[f]=="string")g[_[f]]&&h.push(g[_[f]]);else if(_[f])for(var y=0;y<_[f].length;y++){var k=g[_[f][y]];k&&h.push(k)}else _.helperType&&g[_.helperType]?h.push(g[_.helperType]):g[_.name]&&h.push(g[_.name]);for(var L=0;L<g._global.length;L++){var $=g._global[L];$.pred(_,this)&&Ee(h,$.val)==-1&&h.push($.val)}return h},getStateAfter:function(u,f){var h=this.doc;return u=TE(h,u??h.first+h.size-1),su(this,u+1,f).state},cursorCoords:function(u,f){var h,g=this.doc.sel.primary();return u==null?h=g.head:typeof u=="object"?h=Ke(this.doc,u):h=u?g.from():g.to(),bn(this,h,f||"page")},charCoords:function(u,f){return Sc(this,Ke(this.doc,u),f||"page")},coordsChar:function(u,f){return u=iT(this,u,f||"page"),Jp(this,u.left,u.top)},lineAtHeight:function(u,f){return u=iT(this,{top:u,left:0},f||"page").top,M(this.doc,u+this.display.viewOffset)},heightAtLine:function(u,f,h){var g=!1,_;if(typeof u=="number"){var y=this.doc.first+this.doc.size-1;u<this.doc.first?u=this.doc.first:u>y&&(u=y,g=!0),_=Re(this.doc,u)}else _=u;return wc(this,_,{top:0,left:0},f||"page",h||g).top+(g?this.doc.height-ai(_):0)},defaultTextHeight:function(){return Is(this.display)},defaultCharWidth:function(){return Ls(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(u,f,h,g,_){var y=this.display;u=bn(this,Ke(this.doc,u));var k=u.bottom,L=u.left;if(f.style.position="absolute",f.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(f),y.sizer.appendChild(f),g=="over")k=u.top;else if(g=="above"||g=="near"){var $=Math.max(y.wrapper.clientHeight,this.doc.height),Y=Math.max(y.sizer.clientWidth,y.lineSpace.clientWidth);(g=="above"||u.bottom+f.offsetHeight>$)&&u.top>f.offsetHeight?k=u.top-f.offsetHeight:u.bottom+f.offsetHeight<=$&&(k=u.bottom),L+f.offsetWidth>Y&&(L=Y-f.offsetWidth)}f.style.top=k+"px",f.style.left=f.style.right="",_=="right"?(L=y.sizer.clientWidth-f.offsetWidth,f.style.right="0px"):(_=="left"?L=0:_=="middle"&&(L=(y.sizer.clientWidth-f.offsetWidth)/2),f.style.left=L+"px"),h&&pV(this,{left:L,top:k,right:L+f.offsetWidth,bottom:k+f.offsetHeight})},triggerOnKeyDown:pr(oC),triggerOnKeyPress:pr(lC),triggerOnKeyUp:uC,triggerOnMouseDown:pr(cC),execCommand:function(u){if(Au.hasOwnProperty(u))return Au[u].call(null,this)},triggerElectric:pr(function(u){gC(this,u)}),findPosH:function(u,f,h,g){var _=1;f<0&&(_=-1,f=-f);for(var y=Ke(this.doc,u),k=0;k<f&&(y=Om(this.doc,y,_,h,g),!y.hitSide);++k);return y},moveH:pr(function(u,f){var h=this;this.extendSelectionsBy(function(g){return h.display.shift||h.doc.extend||g.empty()?Om(h.doc,g.head,u,f,h.options.rtlMoveVisually):u<0?g.from():g.to()},ze)}),deleteH:pr(function(u,f){var h=this.doc.sel,g=this.doc;h.somethingSelected()?g.replaceSelection("",null,"+delete"):Ws(this,function(_){var y=Om(g,_.head,u,f,!1);return u<0?{from:y,to:_.head}:{from:_.head,to:y}})}),findPosV:function(u,f,h,g){var _=1,y=g;f<0&&(_=-1,f=-f);for(var k=Ke(this.doc,u),L=0;L<f;++L){var $=bn(this,k,"div");if(y==null?y=$.left:$.left=y,k=yC(this,$,_,h),k.hitSide)break}return k},moveV:pr(function(u,f){var h=this,g=this.doc,_=[],y=!this.display.shift&&!g.extend&&g.sel.somethingSelected();if(g.extendSelectionsBy(function(L){if(y)return u<0?L.from():L.to();var $=bn(h,L.head,"div");L.goalColumn!=null&&($.left=L.goalColumn),_.push($.left);var Y=yC(h,$,u,f);return f=="page"&&L==g.sel.primary()&&um(h,Sc(h,Y,"div").top-$.top),Y},ze),_.length)for(var k=0;k<g.sel.ranges.length;k++)g.sel.ranges[k].goalColumn=_[k]}),findWordAt:function(u){var f=this.doc,h=Re(f,u.line).text,g=u.ch,_=u.ch;if(h){var y=this.getHelper(u,"wordChars");(u.sticky=="before"||_==h.length)&&g?--g:++_;for(var k=h.charAt(g),L=ei(k,y)?function($){return ei($,y)}:/\s/.test(k)?function($){return/\s/.test($)}:function($){return!/\s/.test($)&&!ei($)};g>0&&L(h.charAt(g-1));)--g;for(;_<h.length&&L(h.charAt(_));)++_}return new ft(J(u.line,g),J(u.line,_))},toggleOverwrite:function(u){u!=null&&u==this.state.overwrite||((this.state.overwrite=!this.state.overwrite)?Ie(this.display.cursorDiv,"CodeMirror-overwrite"):U(this.display.cursorDiv,"CodeMirror-overwrite"),Pt(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return this.display.input.getField()==he(at(this))},isReadOnly:function(){return!!(this.options.readOnly||this.doc.cantEdit)},scrollTo:pr(function(u,f){hu(this,u,f)}),getScrollInfo:function(){var u=this.display.scroller;return{left:u.scrollLeft,top:u.scrollTop,height:u.scrollHeight-Rn(this)-this.display.barHeight,width:u.scrollWidth-Rn(this)-this.display.barWidth,clientHeight:Kp(this),clientWidth:Ta(this)}},scrollIntoView:pr(function(u,f){u==null?(u={from:this.doc.sel.primary().head,to:null},f==null&&(f=this.options.cursorScrollMargin)):typeof u=="number"?u={from:J(u,0),to:null}:u.from==null&&(u={from:u,to:null}),u.to||(u.to=u.from),u.margin=f||0,u.from.line!=null?mV(this,u):hT(this,u.from,u.to,u.margin)}),setSize:pr(function(u,f){var h=this,g=function(y){return typeof y=="number"||/^\d+$/.test(String(y))?y+"px":y};u!=null&&(this.display.wrapper.style.width=g(u)),f!=null&&(this.display.wrapper.style.height=g(f)),this.options.lineWrapping&&tT(this);var _=this.display.viewFrom;this.doc.iter(_,this.display.viewTo,function(y){if(y.widgets){for(var k=0;k<y.widgets.length;k++)if(y.widgets[k].noHScroll){Fi(h,_,"widget");break}}++_}),this.curOp.forceUpdate=!0,Pt(this,"refresh",this)}),operation:function(u){return Mr(this,u)},startOperation:function(){return Oa(this)},endOperation:function(){return Na(this)},refresh:pr(function(){var u=this.display.cachedTextHeight;Cr(this),this.curOp.forceUpdate=!0,fu(this),hu(this,this.doc.scrollLeft,this.doc.scrollTop),fm(this.display),(u==null||Math.abs(u-Is(this.display))>.5||this.options.lineWrapping)&&rm(this),Pt(this,"refresh",this)}),swapDoc:pr(function(u){var f=this.doc;return f.cm=null,this.state.selectingText&&this.state.selectingText(),xT(this,u),fu(this),this.display.input.reset(),hu(this,u.scrollLeft,u.scrollTop),this.curOp.forceScroll=!0,Yt(this,"swapDoc",this,f),f}),phrase:function(u){var f=this.options.phrases;return f&&Object.prototype.hasOwnProperty.call(f,u)?f[u]:u},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},hn(i),i.registerHelper=function(u,f,h){l.hasOwnProperty(u)||(l[u]=i[u]={_global:[]}),l[u][f]=h},i.registerGlobalHelper=function(u,f,h,g){i.registerHelper(u,f,g),l[u]._global.push({pred:h,val:g})}}function Om(i,s,l,u,f){var h=s,g=l,_=Re(i,s.line),y=f&&i.direction=="rtl"?-l:l;function k(){var we=s.line+y;return we<i.first||we>=i.first+i.size?!1:(s=new J(we,s.ch,s.sticky),_=Re(i,we))}function L(we){var ye;if(u=="codepoint"){var Oe=_.text.charCodeAt(s.ch+(l>0?0:-1));if(isNaN(Oe))ye=null;else{var Fe=l>0?Oe>=55296&&Oe<56320:Oe>=56320&&Oe<57343;ye=new J(s.line,Math.max(0,Math.min(_.text.length,s.ch+l*(Fe?2:1))),-l)}}else f?ye=JV(i.cm,_,s,l):ye=km(_,s,l);if(ye==null)if(!we&&k())s=Em(f,i.cm,_,s.line,y);else return!1;else s=ye;return!0}if(u=="char"||u=="codepoint")L();else if(u=="column")L(!0);else if(u=="word"||u=="group")for(var $=null,Y=u=="group",z=i.cm&&i.cm.getHelper(s,"wordChars"),te=!0;!(l<0&&!L(!te));te=!1){var de=_.text.charAt(s.ch)||` `,ge=ei(de,z)?"w":Y&&de==` `?"n":!Y||/\s/.test(de)?null:"p";if(Y&&!te&&!ge&&(ge="s"),$&&$!=ge){l<0&&(l=1,L(),s.sticky="after");break}if(ge&&($=ge),l>0&&!L(!te))break}var be=Fc(i,s,h,g,!0);return ct(h,be)&&(be.hitSide=!0),be}function yC(i,s,l,u){var f=i.doc,h=s.left,g;if(u=="page"){var _=Math.min(i.display.wrapper.clientHeight,Pe(i).innerHeight||f(i).documentElement.clientHeight),y=Math.max(_-.5*Is(i.display),3);g=(l>0?s.bottom:s.top)+l*y}else u=="line"&&(g=l>0?s.bottom+3:s.top-3);for(var k;k=Jp(i,h,g),!!k.outside;){if(l<0?g<=0:g>=f.height){k.hitSide=!0;break}g+=l*5}return k}var ht=function(i){this.cm=i,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new xe,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};ht.prototype.init=function(i){var s=this,l=this,u=l.cm,f=l.div=i.lineDiv;f.contentEditable=!0,Am(f,u.options.spellcheck,u.options.autocorrect,u.options.autocapitalize);function h(_){for(var y=_.target;y;y=y.parentNode){if(y==f)return!0;if(/\bCodeMirror-(?:line)?widget\b/.test(y.className))break}return!1}$e(f,"paste",function(_){!h(_)||It(u,_)||vC(_,u)||v<=11&&setTimeout(Kt(u,function(){return s.updateFromDOM()}),20)}),$e(f,"compositionstart",function(_){s.composing={data:_.data,done:!1}}),$e(f,"compositionupdate",function(_){s.composing||(s.composing={data:_.data,done:!1})}),$e(f,"compositionend",function(_){s.composing&&(_.data!=s.composing.data&&s.readFromDOMSoon(),s.composing.done=!0)}),$e(f,"touchstart",function(){return l.forceCompositionEnd()}),$e(f,"input",function(){s.composing||s.readFromDOMSoon()});function g(_){if(!(!h(_)||It(u,_))){if(u.somethingSelected())Gc({lineWise:!1,text:u.getSelections()}),_.type=="cut"&&u.replaceSelection("",null,"cut");else if(u.options.lineWiseCopyCut){var y=_C(u);Gc({lineWise:!0,text:y.text}),_.type=="cut"&&u.operation(function(){u.setSelections(y.ranges,0,dt),u.replaceSelection("",null,"cut")})}else return;if(_.clipboardData){_.clipboardData.clearData();var k=kn.text.join(` `);if(_.clipboardData.setData("Text",k),_.clipboardData.getData("Text")==k){_.preventDefault();return}}var L=bC(),$=L.firstChild;Am($),u.display.lineSpace.insertBefore(L,u.display.lineSpace.firstChild),$.value=kn.text.join(` `);var Y=he(Ve(f));He($),setTimeout(function(){u.display.lineSpace.removeChild(L),Y.focus(),Y==f&&l.showPrimarySelection()},50)}}$e(f,"copy",g),$e(f,"cut",g)},ht.prototype.screenReaderLabelChanged=function(i){i?this.div.setAttribute("aria-label",i):this.div.removeAttribute("aria-label")},ht.prototype.prepareSelection=function(){var i=cT(this.cm,!1);return i.focus=he(Ve(this.div))==this.div,i},ht.prototype.showSelection=function(i,s){!i||!this.cm.display.view.length||((i.focus||s)&&this.showPrimarySelection(),this.showMultipleSelections(i))},ht.prototype.getSelection=function(){return this.cm.display.wrapper.ownerDocument.getSelection()},ht.prototype.showPrimarySelection=function(){var i=this.getSelection(),s=this.cm,l=s.doc.sel.primary(),u=l.from(),f=l.to();if(s.display.viewTo==s.display.viewFrom||u.line>=s.display.viewTo||f.line<s.display.viewFrom){i.removeAllRanges();return}var h=zc(s,i.anchorNode,i.anchorOffset),g=zc(s,i.focusNode,i.focusOffset);if(!(h&&!h.bad&&g&&!g.bad&&Ce(As(h,g),u)==0&&Ce(Tr(h,g),f)==0)){var _=s.display.view,y=u.line>=s.display.viewFrom&&kC(s,u)||{node:_[0].measure.map[2],offset:0},k=f.line<s.display.viewTo&&kC(s,f);if(!k){var L=_[_.length-1].measure,$=L.maps?L.maps[L.maps.length-1]:L.map;k={node:$[$.length-1],offset:$[$.length-2]-$[$.length-3]}}if(!y||!k){i.removeAllRanges();return}var Y=i.rangeCount&&i.getRangeAt(0),z;try{z=V(y.node,y.offset,k.offset,k.node)}catch{}z&&(!a&&s.state.focused?(i.collapse(y.node,y.offset),z.collapsed||(i.removeAllRanges(),i.addRange(z))):(i.removeAllRanges(),i.addRange(z)),Y&&i.anchorNode==null?i.addRange(Y):a&&this.startGracePeriod()),this.rememberSelection()}},ht.prototype.startGracePeriod=function(){var i=this;clearTimeout(this.gracePeriod),this.gracePeriod=setTimeout(function(){i.gracePeriod=!1,i.selectionChanged()&&i.cm.operation(function(){return i.cm.curOp.selectionChanged=!0})},20)},ht.prototype.showMultipleSelections=function(i){W(this.cm.display.cursorDiv,i.cursors),W(this.cm.display.selectionDiv,i.selection)},ht.prototype.rememberSelection=function(){var i=this.getSelection();this.lastAnchorNode=i.anchorNode,this.lastAnchorOffset=i.anchorOffset,this.lastFocusNode=i.focusNode,this.lastFocusOffset=i.focusOffset},ht.prototype.selectionInEditor=function(){var i=this.getSelection();if(!i.rangeCount)return!1;var s=i.getRangeAt(0).commonAncestorContainer;return fe(this.div,s)},ht.prototype.focus=function(){this.cm.options.readOnly!="nocursor"&&((!this.selectionInEditor()||he(Ve(this.div))!=this.div)&&this.showSelection(this.prepareSelection(),!0),this.div.focus())},ht.prototype.blur=function(){this.div.blur()},ht.prototype.getField=function(){return this.div},ht.prototype.supportsTouch=function(){return!0},ht.prototype.receivedFocus=function(){var i=this,s=this;this.selectionInEditor()?setTimeout(function(){return i.pollSelection()},20):Mr(this.cm,function(){return s.cm.curOp.selectionChanged=!0});function l(){s.cm.state.focused&&(s.pollSelection(),s.polling.set(s.cm.options.pollInterval,l))}this.polling.set(this.cm.options.pollInterval,l)},ht.prototype.selectionChanged=function(){var i=this.getSelection();return i.anchorNode!=this.lastAnchorNode||i.anchorOffset!=this.lastAnchorOffset||i.focusNode!=this.lastFocusNode||i.focusOffset!=this.lastFocusOffset},ht.prototype.pollSelection=function(){if(!(this.readDOMTimeout!=null||this.gracePeriod||!this.selectionChanged())){var i=this.getSelection(),s=this.cm;if(S&&T&&this.cm.display.gutterSpecs.length&&_Q(i.anchorNode)){this.cm.triggerOnKeyDown({type:"keydown",keyCode:8,preventDefault:Math.abs}),this.blur(),this.focus();return}if(!this.composing){this.rememberSelection();var l=zc(s,i.anchorNode,i.anchorOffset),u=zc(s,i.focusNode,i.focusOffset);l&&u&&Mr(s,function(){or(s.doc,Hi(l,u),dt),(l.bad||u.bad)&&(s.curOp.selectionChanged=!0)})}}},ht.prototype.pollContent=function(){this.readDOMTimeout!=null&&(clearTimeout(this.readDOMTimeout),this.readDOMTimeout=null);var i=this.cm,s=i.display,l=i.doc.sel.primary(),u=l.from(),f=l.to();if(u.ch==0&&u.line>i.firstLine()&&(u=J(u.line-1,Re(i.doc,u.line-1).length)),f.ch==Re(i.doc,f.line).text.length&&f.line<i.lastLine()&&(f=J(f.line+1,0)),u.line<s.viewFrom||f.line>s.viewTo-1)return!1;var h,g,_;u.line==s.viewFrom||(h=Sa(i,u.line))==0?(g=w(s.view[0].line),_=s.view[0].node):(g=w(s.view[h].line),_=s.view[h-1].node.nextSibling);var y=Sa(i,f.line),k,L;if(y==s.view.length-1?(k=s.viewTo-1,L=s.lineDiv.lastChild):(k=w(s.view[y+1].line)-1,L=s.view[y+1].node.previousSibling),!_)return!1;for(var $=i.doc.splitLines(bQ(i,_,L,g,k)),Y=ni(i.doc,J(g,0),J(k,Re(i.doc,k).text.length));$.length>1&&Y.length>1;)if(Ye($)==Ye(Y))$.pop(),Y.pop(),k--;else if($[0]==Y[0])$.shift(),Y.shift(),g++;else break;for(var z=0,te=0,de=$[0],ge=Y[0],be=Math.min(de.length,ge.length);z<be&&de.charCodeAt(z)==ge.charCodeAt(z);)++z;for(var we=Ye($),ye=Ye(Y),Oe=Math.min(we.length-($.length==1?z:0),ye.length-(Y.length==1?z:0));te<Oe&&we.charCodeAt(we.length-te-1)==ye.charCodeAt(ye.length-te-1);)++te;if($.length==1&&Y.length==1&&g==u.line)for(;z&&z>u.ch&&we.charCodeAt(we.length-te-1)==ye.charCodeAt(ye.length-te-1);)z--,te++;$[$.length-1]=we.slice(0,we.length-te).replace(/^\u200b+/,""),$[0]=$[0].slice(z).replace(/\u200b+$/,"");var Fe=J(g,z),De=J(k,Y.length?Ye(Y).length-te:0);if($.length>1||$[0]||Ce(Fe,De))return Hs(i.doc,$,Fe,De,"+input"),!0},ht.prototype.ensurePolled=function(){this.forceCompositionEnd()},ht.prototype.reset=function(){this.forceCompositionEnd()},ht.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},ht.prototype.readFromDOMSoon=function(){var i=this;this.readDOMTimeout==null&&(this.readDOMTimeout=setTimeout(function(){if(i.readDOMTimeout=null,i.composing)if(i.composing.done)i.composing=null;else return;i.updateFromDOM()},80))},ht.prototype.updateFromDOM=function(){var i=this;(this.cm.isReadOnly()||!this.pollContent())&&Mr(this.cm,function(){return Cr(i.cm)})},ht.prototype.setUneditable=function(i){i.contentEditable="false"},ht.prototype.onKeyPress=function(i){i.charCode==0||this.composing||(i.preventDefault(),this.cm.isReadOnly()||Kt(this.cm,xm)(this.cm,String.fromCharCode(i.charCode==null?i.keyCode:i.charCode),0))},ht.prototype.readOnlyChanged=function(i){this.div.contentEditable=String(i!="nocursor")},ht.prototype.onContextMenu=function(){},ht.prototype.resetPosition=function(){},ht.prototype.needsContentAttribute=!0;function kC(i,s){var l=Xp(i,s.line);if(!l||l.hidden)return null;var u=Re(i.doc,s.line),f=VE(l,u,s.line),h=nt(u,i.doc.direction),g="left";if(h){var _=Ii(h,s.ch);g=_%2?"right":"left"}var y=ZE(f.map,s.ch,g);return y.offset=y.collapse=="right"?y.end:y.start,y}function _Q(i){for(var s=i;s;s=s.parentNode)if(/CodeMirror-gutter-wrapper/.test(s.className))return!0;return!1}function zs(i,s){return s&&(i.bad=!0),i}function bQ(i,s,l,u,f){var h="",g=!1,_=i.doc.lineSeparator(),y=!1;function k(z){return function(te){return te.id==z}}function L(){g&&(h+=_,y&&(h+=_),g=y=!1)}function $(z){z&&(L(),h+=z)}function Y(z){if(z.nodeType==1){var te=z.getAttribute("cm-text");if(te){$(te);return}var de=z.getAttribute("cm-marker"),ge;if(de){var be=i.findMarks(J(u,0),J(f+1,0),k(+de));be.length&&(ge=be[0].find(0))&&$(ni(i.doc,ge.from,ge.to).join(_));return}if(z.getAttribute("contenteditable")=="false")return;var we=/^(pre|div|p|li|table|br)$/i.test(z.nodeName);if(!/^br$/i.test(z.nodeName)&&z.textContent.length==0)return;we&&L();for(var ye=0;ye<z.childNodes.length;ye++)Y(z.childNodes[ye]);/^(pre|p)$/i.test(z.nodeName)&&(y=!0),we&&(g=!0)}else z.nodeType==3&&$(z.nodeValue.replace(/\u200b/g,"").replace(/\u00a0/g," "))}for(;Y(s),s!=l;)s=s.nextSibling,y=!1;return h}function zc(i,s,l){var u;if(s==i.display.lineDiv){if(u=i.display.lineDiv.childNodes[l],!u)return zs(i.clipPos(J(i.display.viewTo-1)),!0);s=null,l=0}else for(u=s;;u=u.parentNode){if(!u||u==i.display.lineDiv)return null;if(u.parentNode&&u.parentNode==i.display.lineDiv)break}for(var f=0;f<i.display.view.length;f++){var h=i.display.view[f];if(h.node==u)return yQ(h,s,l)}}function yQ(i,s,l){var u=i.text.firstChild,f=!1;if(!s||!fe(u,s))return zs(J(w(i.line),0),!0);if(s==u&&(f=!0,s=u.childNodes[l],l=0,!s)){var h=i.rest?Ye(i.rest):i.line;return zs(J(w(h),h.text.length),f)}var g=s.nodeType==3?s:null,_=s;for(!g&&s.childNodes.length==1&&s.firstChild.nodeType==3&&(g=s.firstChild,l&&(l=g.nodeValue.length));_.parentNode!=u;)_=_.parentNode;var y=i.measure,k=y.maps;function L(ge,be,we){for(var ye=-1;ye<(k?k.length:0);ye++)for(var Oe=ye<0?y.map:k[ye],Fe=0;Fe<Oe.length;Fe+=3){var De=Oe[Fe+2];if(De==ge||De==be){var Je=w(ye<0?i.line:i.rest[ye]),vt=Oe[Fe]+we;return(we<0||De!=ge)&&(vt=Oe[Fe+(we?1:0)]),J(Je,vt)}}}var $=L(g,_,l);if($)return zs($,f);for(var Y=_.nextSibling,z=g?g.nodeValue.length-l:0;Y;Y=Y.nextSibling){if($=L(Y,Y.firstChild,0),$)return zs(J($.line,$.ch-z),f);z+=Y.textContent.length}for(var te=_.previousSibling,de=l;te;te=te.previousSibling){if($=L(te,te.firstChild,-1),$)return zs(J($.line,$.ch+de),f);de+=te.textContent.length}}var Mt=function(i){this.cm=i,this.prevInput="",this.pollingFast=!1,this.polling=new xe,this.hasSelection=!1,this.composing=null,this.resetting=!1};Mt.prototype.init=function(i){var s=this,l=this,u=this.cm;this.createField(i);var f=this.textarea;i.wrapper.insertBefore(this.wrapper,i.wrapper.firstChild),x&&(f.style.width="0px"),$e(f,"input",function(){p&&v>=9&&s.hasSelection&&(s.hasSelection=null),l.poll()}),$e(f,"paste",function(g){It(u,g)||vC(g,u)||(u.state.pasteIncoming=+new Date,l.fastPoll())});function h(g){if(!It(u,g)){if(u.somethingSelected())Gc({lineWise:!1,text:u.getSelections()});else if(u.options.lineWiseCopyCut){var _=_C(u);Gc({lineWise:!0,text:_.text}),g.type=="cut"?u.setSelections(_.ranges,null,dt):(l.prevInput="",f.value=_.text.join(` `),He(f))}else return;g.type=="cut"&&(u.state.cutIncoming=+new Date)}}$e(f,"cut",h),$e(f,"copy",h),$e(i.scroller,"paste",function(g){if(!(si(i,g)||It(u,g))){if(!f.dispatchEvent){u.state.pasteIncoming=+new Date,l.focus();return}var _=new Event("paste");_.clipboardData=g.clipboardData,f.dispatchEvent(_)}}),$e(i.lineSpace,"selectstart",function(g){si(i,g)||sr(g)}),$e(f,"compositionstart",function(){var g=u.getCursor("from");l.composing&&l.composing.range.clear(),l.composing={start:g,range:u.markText(g,u.getCursor("to"),{className:"CodeMirror-composing"})}}),$e(f,"compositionend",function(){l.composing&&(l.poll(),l.composing.range.clear(),l.composing=null)})},Mt.prototype.createField=function(i){this.wrapper=bC(),this.textarea=this.wrapper.firstChild;var s=this.cm.options;Am(this.textarea,s.spellcheck,s.autocorrect,s.autocapitalize)},Mt.prototype.screenReaderLabelChanged=function(i){i?this.textarea.setAttribute("aria-label",i):this.textarea.removeAttribute("aria-label")},Mt.prototype.prepareSelection=function(){var i=this.cm,s=i.display,l=i.doc,u=cT(i);if(i.options.moveInputWithCursor){var f=bn(i,l.sel.primary().head,"div"),h=s.wrapper.getBoundingClientRect(),g=s.lineDiv.getBoundingClientRect();u.teTop=Math.max(0,Math.min(s.wrapper.clientHeight-10,f.top+g.top-h.top)),u.teLeft=Math.max(0,Math.min(s.wrapper.clientWidth-10,f.left+g.left-h.left))}return u},Mt.prototype.showSelection=function(i){var s=this.cm,l=s.display;W(l.cursorDiv,i.cursors),W(l.selectionDiv,i.selection),i.teTop!=null&&(this.wrapper.style.top=i.teTop+"px",this.wrapper.style.left=i.teLeft+"px")},Mt.prototype.reset=function(i){if(!(this.contextMenuPending||this.composing&&i)){var s=this.cm;if(this.resetting=!0,s.somethingSelected()){this.prevInput="";var l=s.getSelection();this.textarea.value=l,s.state.focused&&He(this.textarea),p&&v>=9&&(this.hasSelection=l)}else i||(this.prevInput=this.textarea.value="",p&&v>=9&&(this.hasSelection=null));this.resetting=!1}},Mt.prototype.getField=function(){return this.textarea},Mt.prototype.supportsTouch=function(){return!1},Mt.prototype.focus=function(){if(this.cm.options.readOnly!="nocursor"&&(!P||he(Ve(this.textarea))!=this.textarea))try{this.textarea.focus()}catch{}},Mt.prototype.blur=function(){this.textarea.blur()},Mt.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Mt.prototype.receivedFocus=function(){this.slowPoll()},Mt.prototype.slowPoll=function(){var i=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,function(){i.poll(),i.cm.state.focused&&i.slowPoll()})},Mt.prototype.fastPoll=function(){var i=!1,s=this;s.pollingFast=!0;function l(){var u=s.poll();!u&&!i?(i=!0,s.polling.set(60,l)):(s.pollingFast=!1,s.slowPoll())}s.polling.set(20,l)},Mt.prototype.poll=function(){var i=this,s=this.cm,l=this.textarea,u=this.prevInput;if(this.contextMenuPending||this.resetting||!s.state.focused||Di(l)&&!u&&!this.composing||s.isReadOnly()||s.options.disableInput||s.state.keySeq)return!1;var f=l.value;if(f==u&&!s.somethingSelected())return!1;if(p&&v>=9&&this.hasSelection===f||R&&/[\uf700-\uf7ff]/.test(f))return s.display.input.reset(),!1;if(s.doc.sel==s.display.selForContextMenu){var h=f.charCodeAt(0);if(h==8203&&!u&&(u="\u200B"),h==8666)return this.reset(),this.cm.execCommand("undo")}for(var g=0,_=Math.min(u.length,f.length);g<_&&u.charCodeAt(g)==f.charCodeAt(g);)++g;return Mr(s,function(){xm(s,f.slice(g),u.length-g,null,i.composing?"*compose":null),f.length>1e3||f.indexOf(` `)>-1?l.value=i.prevInput="":i.prevInput=f,i.composing&&(i.composing.range.clear(),i.composing.range=s.markText(i.composing.start,s.getCursor("to"),{className:"CodeMirror-composing"}))}),!0},Mt.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Mt.prototype.onKeyPress=function(){p&&v>=9&&(this.hasSelection=null),this.fastPoll()},Mt.prototype.onContextMenu=function(i){var s=this,l=s.cm,u=l.display,f=s.textarea;s.contextMenuPending&&s.contextMenuPending();var h=wa(l,i),g=u.scroller.scrollTop;if(!h||F)return;var _=l.options.resetSelectionOnContextMenu;_&&l.doc.sel.contains(h)==-1&&Kt(l,or)(l.doc,Hi(h),dt);var y=f.style.cssText,k=s.wrapper.style.cssText,L=s.wrapper.offsetParent.getBoundingClientRect();s.wrapper.style.cssText="position: static",f.style.cssText=`position: absolute; width: 30px; height: 30px; top: `+(i.clientY-L.top-5)+"px; left: "+(i.clientX-L.left-5)+`px; z-index: 1000; background: `+(p?"rgba(255, 255, 255, .05)":"transparent")+`; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);`;var $;b&&($=f.ownerDocument.defaultView.scrollY),u.input.focus(),b&&f.ownerDocument.defaultView.scrollTo(null,$),u.input.reset(),l.somethingSelected()||(f.value=s.prevInput=" "),s.contextMenuPending=z,u.selForContextMenu=l.doc.sel,clearTimeout(u.detectingSelectAll);function Y(){if(f.selectionStart!=null){var de=l.somethingSelected(),ge="\u200B"+(de?f.value:"");f.value="\u21DA",f.value=ge,s.prevInput=de?"":"\u200B",f.selectionStart=1,f.selectionEnd=ge.length,u.selForContextMenu=l.doc.sel}}function z(){if(s.contextMenuPending==z&&(s.contextMenuPending=!1,s.wrapper.style.cssText=k,f.style.cssText=y,p&&v<9&&u.scrollbars.setScrollTop(u.scroller.scrollTop=g),f.selectionStart!=null)){(!p||p&&v<9)&&Y();var de=0,ge=function(){u.selForContextMenu==l.doc.sel&&f.selectionStart==0&&f.selectionEnd>0&&s.prevInput=="\u200B"?Kt(l,HT)(l):de++<10?u.detectingSelectAll=setTimeout(ge,500):(u.selForContextMenu=null,u.input.reset())};u.detectingSelectAll=setTimeout(ge,200)}}if(p&&v>=9&&Y(),Z){Li(i);var te=function(){ar(window,"mouseup",te),setTimeout(z,20)};$e(window,"mouseup",te)}else setTimeout(z,50)},Mt.prototype.readOnlyChanged=function(i){i||this.reset(),this.textarea.disabled=i=="nocursor",this.textarea.readOnly=!!i},Mt.prototype.setUneditable=function(){},Mt.prototype.needsContentAttribute=!1;function kQ(i,s){if(s=s?Se(s):{},s.value=i.value,!s.tabindex&&i.tabIndex&&(s.tabindex=i.tabIndex),!s.placeholder&&i.placeholder&&(s.placeholder=i.placeholder),s.autofocus==null){var l=he(Ve(i));s.autofocus=l==i||i.getAttribute("autofocus")!=null&&l==document.body}function u(){i.value=_.getValue()}var f;if(i.form&&($e(i.form,"submit",u),!s.leaveSubmitMethodAlone)){var h=i.form;f=h.submit;try{var g=h.submit=function(){u(),h.submit=f,h.submit(),h.submit=g}}catch{}}s.finishInit=function(y){y.save=u,y.getTextArea=function(){return i},y.toTextArea=function(){y.toTextArea=isNaN,u(),i.parentNode.removeChild(y.getWrapperElement()),i.style.display="",i.form&&(ar(i.form,"submit",u),!s.leaveSubmitMethodAlone&&typeof i.form.submit=="function"&&(i.form.submit=f))}},i.style.display="none";var _=Et(function(y){return i.parentNode.insertBefore(y,i.nextSibling)},s);return _}function EQ(i){i.off=ar,i.on=$e,i.wheelEventPixels=OV,i.Doc=wr,i.splitLines=Zr,i.countColumn=Le,i.findColumn=tt,i.isWordChar=ir,i.Pass=ut,i.signal=Pt,i.Line=Os,i.changeEnd=Ui,i.scrollbarModel=vT,i.Pos=J,i.cmpPos=Ce,i.modes=Ts,i.mimeModes=vn,i.resolveMode=Cs,i.getMode=ws,i.modeExtensions=Mi,i.extendMode=Ss,i.copyState=In,i.startState=xs,i.innerMode=iu,i.commands=Au,i.keyMap=ui,i.keyName=rC,i.isModifierKey=eC,i.lookupKey=js,i.normalizeKeyMap=QV,i.StringStream=Lt,i.SharedTextMarker=wu,i.TextMarker=Wi,i.LineWidget=Cu,i.e_preventDefault=sr,i.e_stopPropagation=ks,i.e_stop=Li,i.addClass=Ie,i.contains=fe,i.rmClass=U,i.keyNames=Gi}hQ(Et),gQ(Et);var TQ="iter insert remove copy getEditor constructor".split(" ");for(var qc in wr.prototype)wr.prototype.hasOwnProperty(qc)&&Ee(TQ,qc)<0&&(Et.prototype[qc]=(function(i){return function(){return i.apply(this.doc,arguments)}})(wr.prototype[qc]));return hn(wr),Et.inputStyles={textarea:Mt,contenteditable:ht},Et.defineMode=function(i){!Et.defaults.mode&&i!="null"&&(Et.defaults.mode=i),gn.apply(this,arguments)},Et.defineMIME=Ea,Et.defineMode("null",function(){return{token:function(i){return i.skipToEnd()}}}),Et.defineMIME("text/plain","null"),Et.defineExtension=function(i,s){Et.prototype[i]=s},Et.defineDocExtension=function(i,s){wr.prototype[i]=s},Et.fromTextArea=kQ,EQ(Et),Et.version="5.65.20",Et}))})(Fu)),Fu.exports}var ov;function _S(){return ov||(ov=1,(function(t,e){(function(r){r(En())})(function(r){r.defineOption("placeholder","",function(v,b,C){var T=C&&C!=r.Init;if(b&&!T)v.on("blur",c),v.on("change",d),v.on("swapDoc",d),r.on(v.getInputField(),"compositionupdate",v.state.placeholderCompose=function(){o(v)}),d(v);else if(!b&&T){v.off("blur",c),v.off("change",d),v.off("swapDoc",d),r.off(v.getInputField(),"compositionupdate",v.state.placeholderCompose),n(v);var A=v.getWrapperElement();A.className=A.className.replace(" CodeMirror-empty","")}b&&!v.hasFocus()&&c(v)});function n(v){v.state.placeholder&&(v.state.placeholder.parentNode.removeChild(v.state.placeholder),v.state.placeholder=null)}function a(v){n(v);var b=v.state.placeholder=document.createElement("pre");b.style.cssText="height: 0; overflow: visible",b.style.direction=v.getOption("direction"),b.className="CodeMirror-placeholder CodeMirror-line-like";var C=v.getOption("placeholder");typeof C=="string"&&(C=document.createTextNode(C)),b.appendChild(C),v.display.lineSpace.insertBefore(b,v.display.lineSpace.firstChild)}function o(v){setTimeout(function(){var b=!1;if(v.lineCount()==1){var C=v.getInputField();b=C.nodeName=="TEXTAREA"?!v.getLine(0).length:!/[^\u200b]/.test(C.querySelector(".CodeMirror-line").textContent)}b?a(v):n(v)},20)}function c(v){p(v)&&a(v)}function d(v){var b=v.getWrapperElement(),C=p(v);b.className=b.className.replace(" CodeMirror-empty","")+(C?" CodeMirror-empty":""),C?a(v):n(v)}function p(v){return v.lineCount()===1&&v.getLine(0)===""}})})()),av.exports}_S();var uv={exports:{}},lv={exports:{}},cv;function rf(){return cv||(cv=1,(function(t,e){(function(r){r(En())})(function(r){r.defineMode("css",function(Z,ne){var U=ne.inline;ne.propertyKeywords||(ne=r.resolveMode("text/css"));var N=Z.indentUnit,W=ne.tokenHooks,E=ne.documentTypes||{},ee=ne.mediaTypes||{},V=ne.mediaFeatures||{},fe=ne.mediaValueKeywords||{},he=ne.propertyKeywords||{},Ie=ne.nonStandardPropertyKeywords||{},Ge=ne.fontProperties||{},He=ne.counterDescriptors||{},We=ne.colorKeywords||{},at=ne.valueKeywords||{},Ve=ne.allowNested,Pe=ne.lineComment,Te=ne.supportsAtComponent===!0,Se=Z.highlightNonStandardPropertyKeywords!==!1,Le,xe;function Ee(X,me){return Le=me,X}function Qe(X,me){var ie=X.next();if(W[ie]){var it=W[ie](X,me);if(it!==!1)return it}if(ie=="@")return X.eatWhile(/[\w\\\-]/),Ee("def",X.current());if(ie=="="||(ie=="~"||ie=="|")&&X.eat("="))return Ee(null,"compare");if(ie=='"'||ie=="'")return me.tokenize=ut(ie),me.tokenize(X,me);if(ie=="#")return X.eatWhile(/[\w\\\-]/),Ee("atom","hash");if(ie=="!")return X.match(/^\s*\w*/),Ee("keyword","important");if(/\d/.test(ie)||ie=="."&&X.eat(/\d/))return X.eatWhile(/[\w.%]/),Ee("number","unit");if(ie==="-"){if(/[\d.]/.test(X.peek()))return X.eatWhile(/[\w.%]/),Ee("number","unit");if(X.match(/^-[\w\\\-]*/))return X.eatWhile(/[\w\\\-]/),X.match(/^\s*:/,!1)?Ee("variable-2","variable-definition"):Ee("variable-2","variable");if(X.match(/^\w+-/))return Ee("meta","meta")}else return/[,+>*\/]/.test(ie)?Ee(null,"select-op"):ie=="."&&X.match(/^-?[_a-z][_a-z0-9-]*/i)?Ee("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(ie)?Ee(null,ie):X.match(/^[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/i.test(X.current())&&(me.tokenize=dt),Ee("variable callee","variable")):/[\w\\\-]/.test(ie)?(X.eatWhile(/[\w\\\-]/),Ee("property","word")):Ee(null,null)}function ut(X){return function(me,ie){for(var it=!1,ir;(ir=me.next())!=null;){if(ir==X&&!it){X==")"&&me.backUp(1);break}it=!it&&ir=="\\"}return(ir==X||!it&&X!=")")&&(ie.tokenize=null),Ee("string","string")}}function dt(X,me){return X.next(),X.match(/^\s*[\"\')]/,!1)?me.tokenize=null:me.tokenize=ut(")"),Ee(null,"(")}function Nt(X,me,ie){this.type=X,this.indent=me,this.prev=ie}function ze(X,me,ie,it){return X.context=new Nt(ie,me.indentation()+(it===!1?0:N),X.context),ie}function tt(X){return X.context.prev&&(X.context=X.context.prev),X.context.type}function lt(X,me,ie){return rt[ie.context.type](X,me,ie)}function $t(X,me,ie,it){for(var ir=it||1;ir>0;ir--)ie.context=ie.context.prev;return lt(X,me,ie)}function Ye(X){var me=X.current().toLowerCase();at.hasOwnProperty(me)?xe="atom":We.hasOwnProperty(me)?xe="keyword":xe="variable"}var rt={};return rt.top=function(X,me,ie){if(X=="{")return ze(ie,me,"block");if(X=="}"&&ie.context.prev)return tt(ie);if(Te&&/@component/i.test(X))return ze(ie,me,"atComponentBlock");if(/^@(-moz-)?document$/i.test(X))return ze(ie,me,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(X))return ze(ie,me,"atBlock");if(/^@(font-face|counter-style)/i.test(X))return ie.stateArg=X,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(X))return"keyframes";if(X&&X.charAt(0)=="@")return ze(ie,me,"at");if(X=="hash")xe="builtin";else if(X=="word")xe="tag";else{if(X=="variable-definition")return"maybeprop";if(X=="interpolation")return ze(ie,me,"interpolation");if(X==":")return"pseudo";if(Ve&&X=="(")return ze(ie,me,"parens")}return ie.context.type},rt.block=function(X,me,ie){if(X=="word"){var it=me.current().toLowerCase();return he.hasOwnProperty(it)?(xe="property","maybeprop"):Ie.hasOwnProperty(it)?(xe=Se?"string-2":"property","maybeprop"):Ve?(xe=me.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(xe+=" error","maybeprop")}else return X=="meta"?"block":!Ve&&(X=="hash"||X=="qualifier")?(xe="error","block"):rt.top(X,me,ie)},rt.maybeprop=function(X,me,ie){return X==":"?ze(ie,me,"prop"):lt(X,me,ie)},rt.prop=function(X,me,ie){if(X==";")return tt(ie);if(X=="{"&&Ve)return ze(ie,me,"propBlock");if(X=="}"||X=="{")return $t(X,me,ie);if(X=="(")return ze(ie,me,"parens");if(X=="hash"&&!/^#([0-9a-fA-F]{3,4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/.test(me.current()))xe+=" error";else if(X=="word")Ye(me);else if(X=="interpolation")return ze(ie,me,"interpolation");return"prop"},rt.propBlock=function(X,me,ie){return X=="}"?tt(ie):X=="word"?(xe="property","maybeprop"):ie.context.type},rt.parens=function(X,me,ie){return X=="{"||X=="}"?$t(X,me,ie):X==")"?tt(ie):X=="("?ze(ie,me,"parens"):X=="interpolation"?ze(ie,me,"interpolation"):(X=="word"&&Ye(me),"parens")},rt.pseudo=function(X,me,ie){return X=="meta"?"pseudo":X=="word"?(xe="variable-3",ie.context.type):lt(X,me,ie)},rt.documentTypes=function(X,me,ie){return X=="word"&&E.hasOwnProperty(me.current())?(xe="tag",ie.context.type):rt.atBlock(X,me,ie)},rt.atBlock=function(X,me,ie){if(X=="(")return ze(ie,me,"atBlock_parens");if(X=="}"||X==";")return $t(X,me,ie);if(X=="{")return tt(ie)&&ze(ie,me,Ve?"block":"top");if(X=="interpolation")return ze(ie,me,"interpolation");if(X=="word"){var it=me.current().toLowerCase();it=="only"||it=="not"||it=="and"||it=="or"?xe="keyword":ee.hasOwnProperty(it)?xe="attribute":V.hasOwnProperty(it)?xe="property":fe.hasOwnProperty(it)?xe="keyword":he.hasOwnProperty(it)?xe="property":Ie.hasOwnProperty(it)?xe=Se?"string-2":"property":at.hasOwnProperty(it)?xe="atom":We.hasOwnProperty(it)?xe="keyword":xe="error"}return ie.context.type},rt.atComponentBlock=function(X,me,ie){return X=="}"?$t(X,me,ie):X=="{"?tt(ie)&&ze(ie,me,Ve?"block":"top",!1):(X=="word"&&(xe="error"),ie.context.type)},rt.atBlock_parens=function(X,me,ie){return X==")"?tt(ie):X=="{"||X=="}"?$t(X,me,ie,2):rt.atBlock(X,me,ie)},rt.restricted_atBlock_before=function(X,me,ie){return X=="{"?ze(ie,me,"restricted_atBlock"):X=="word"&&ie.stateArg=="@counter-style"?(xe="variable","restricted_atBlock_before"):lt(X,me,ie)},rt.restricted_atBlock=function(X,me,ie){return X=="}"?(ie.stateArg=null,tt(ie)):X=="word"?(ie.stateArg=="@font-face"&&!Ge.hasOwnProperty(me.current().toLowerCase())||ie.stateArg=="@counter-style"&&!He.hasOwnProperty(me.current().toLowerCase())?xe="error":xe="property","maybeprop"):"restricted_atBlock"},rt.keyframes=function(X,me,ie){return X=="word"?(xe="variable","keyframes"):X=="{"?ze(ie,me,"top"):lt(X,me,ie)},rt.at=function(X,me,ie){return X==";"?tt(ie):X=="{"||X=="}"?$t(X,me,ie):(X=="word"?xe="tag":X=="hash"&&(xe="builtin"),"at")},rt.interpolation=function(X,me,ie){return X=="}"?tt(ie):X=="{"||X==";"?$t(X,me,ie):(X=="word"?xe="variable":X!="variable"&&X!="("&&X!=")"&&(xe="error"),"interpolation")},{startState:function(X){return{tokenize:null,state:U?"block":"top",stateArg:null,context:new Nt(U?"block":"top",X||0,null)}},token:function(X,me){if(!me.tokenize&&X.eatSpace())return null;var ie=(me.tokenize||Qe)(X,me);return ie&&typeof ie=="object"&&(Le=ie[1],ie=ie[0]),xe=ie,Le!="comment"&&(me.state=rt[me.state](Le,X,me)),xe},indent:function(X,me){var ie=X.context,it=me&&me.charAt(0),ir=ie.indent;return ie.type=="prop"&&(it=="}"||it==")")&&(ie=ie.prev),ie.prev&&(it=="}"&&(ie.type=="block"||ie.type=="top"||ie.type=="interpolation"||ie.type=="restricted_atBlock")?(ie=ie.prev,ir=ie.indent):(it==")"&&(ie.type=="parens"||ie.type=="atBlock_parens")||it=="{"&&(ie.type=="at"||ie.type=="atBlock"))&&(ir=Math.max(0,ie.indent-N))),ir},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:Pe,fold:"brace"}});function n(Z){for(var ne={},U=0;U<Z.length;++U)ne[Z[U].toLowerCase()]=!0;return ne}var a=["domain","regexp","url","url-prefix"],o=n(a),c=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],d=n(c),p=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover","prefers-color-scheme","dynamic-range","video-dynamic-range"],v=n(p),b=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive","dark","light","standard","high"],C=n(b),T=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","all","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","binding","bleed","block-size","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-content","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","gap","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","inset","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-height-step","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotate","rotation","rotation-point","row-gap","ruby-align","ruby-overhang","ruby-position","ruby-span","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-type","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-orientation","text-outline","text-overflow","text-rendering","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","touch-action","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","paint-order","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],A=n(T),F=["accent-color","aspect-ratio","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","content-visibility","margin-block","margin-block-end","margin-block-start","margin-inline","margin-inline-end","margin-inline-start","overflow-anchor","overscroll-behavior","padding-block","padding-block-end","padding-block-start","padding-inline","padding-inline-end","padding-inline-start","scroll-snap-stop","scrollbar-3d-light-color","scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-track-color","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","shape-inside","zoom"],G=n(F),j=["font-display","font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],O=n(j),x=["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"],S=n(x),P=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],R=n(P),B=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","axis-pan","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","blur","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","brightness","bullets","button","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","conic-gradient","contain","content","contents","content-box","context-menu","continuous","contrast","copy","counter","counters","cover","crop","cross","crosshair","cubic-bezier","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","drop-shadow","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fill-box","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","grayscale","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","hue-rotate","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","manipulation","match","matrix","matrix3d","media-play-button","media-slider","media-sliderthumb","media-volume-slider","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiple_mask_images","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","pinch-zoom","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeating-conic-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturate","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","sepia","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","stroke-box","sub","subpixel-antialiased","svg_masks","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unidirectional-pan","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","view-box","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],q=n(B),le=a.concat(c).concat(p).concat(b).concat(T).concat(F).concat(P).concat(B);r.registerHelper("hintWords","css",le);function ae(Z,ne){for(var U=!1,N;(N=Z.next())!=null;){if(U&&N=="/"){ne.tokenize=null;break}U=N=="*"}return["comment","comment"]}r.defineMIME("text/css",{documentTypes:o,mediaTypes:d,mediaFeatures:v,mediaValueKeywords:C,propertyKeywords:A,nonStandardPropertyKeywords:G,fontProperties:O,counterDescriptors:S,colorKeywords:R,valueKeywords:q,tokenHooks:{"/":function(Z,ne){return Z.eat("*")?(ne.tokenize=ae,ae(Z,ne)):!1}},name:"css"}),r.defineMIME("text/x-scss",{mediaTypes:d,mediaFeatures:v,mediaValueKeywords:C,propertyKeywords:A,nonStandardPropertyKeywords:G,colorKeywords:R,valueKeywords:q,fontProperties:O,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(Z,ne){return Z.eat("/")?(Z.skipToEnd(),["comment","comment"]):Z.eat("*")?(ne.tokenize=ae,ae(Z,ne)):["operator","operator"]},":":function(Z){return Z.match(/^\s*\{/,!1)?[null,null]:!1},$:function(Z){return Z.match(/^[\w-]+/),Z.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(Z){return Z.eat("{")?[null,"interpolation"]:!1}},name:"css",helperType:"scss"}),r.defineMIME("text/x-less",{mediaTypes:d,mediaFeatures:v,mediaValueKeywords:C,propertyKeywords:A,nonStandardPropertyKeywords:G,colorKeywords:R,valueKeywords:q,fontProperties:O,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(Z,ne){return Z.eat("/")?(Z.skipToEnd(),["comment","comment"]):Z.eat("*")?(ne.tokenize=ae,ae(Z,ne)):["operator","operator"]},"@":function(Z){return Z.eat("{")?[null,"interpolation"]:Z.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)?!1:(Z.eatWhile(/[\w\\\-]/),Z.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),r.defineMIME("text/x-gss",{documentTypes:o,mediaTypes:d,mediaFeatures:v,propertyKeywords:A,nonStandardPropertyKeywords:G,fontProperties:O,counterDescriptors:S,colorKeywords:R,valueKeywords:q,supportsAtComponent:!0,tokenHooks:{"/":function(Z,ne){return Z.eat("*")?(ne.tokenize=ae,ae(Z,ne)):!1}},name:"css",helperType:"gss"})})})()),lv.exports}var fv;function bS(){return fv||(fv=1,(function(t,e){(function(r){r(En(),rf())})(function(r){var n={active:1,after:1,before:1,checked:1,default:1,disabled:1,empty:1,enabled:1,"first-child":1,"first-letter":1,"first-line":1,"first-of-type":1,focus:1,hover:1,"in-range":1,indeterminate:1,invalid:1,lang:1,"last-child":1,"last-of-type":1,link:1,not:1,"nth-child":1,"nth-last-child":1,"nth-last-of-type":1,"nth-of-type":1,"only-of-type":1,"only-child":1,optional:1,"out-of-range":1,placeholder:1,"read-only":1,"read-write":1,required:1,root:1,selection:1,target:1,valid:1,visited:1};r.registerHelper("hint","css",function(a){var o=a.getCursor(),c=a.getTokenAt(o),d=r.innerMode(a.getMode(),c.state);if(d.mode.name!="css")return;if(c.type=="keyword"&&"!important".indexOf(c.string)==0)return{list:["!important"],from:r.Pos(o.line,c.start),to:r.Pos(o.line,c.end)};var p=c.start,v=o.ch,b=c.string.slice(0,v-p);/[^\w$_-]/.test(b)&&(b="",p=v=o.ch);var C=r.resolveMode("text/css"),T=[];function A(G){for(var j in G)(!b||j.lastIndexOf(b,0)==0)&&T.push(j)}var F=d.state.state;if(F=="pseudo"||c.type=="variable-3"?A(n):F=="block"||F=="maybeprop"?A(C.propertyKeywords):F=="prop"||F=="parens"||F=="at"||F=="params"?(A(C.valueKeywords),A(C.colorKeywords)):(F=="media"||F=="media_parens")&&(A(C.mediaTypes),A(C.mediaFeatures)),T.length)return{list:T,from:r.Pos(o.line,p),to:r.Pos(o.line,v)}})})})()),uv.exports}bS();var dv={exports:{}},hv={exports:{}},pv;function mv(){return pv||(pv=1,(function(t,e){(function(r){r(En())})(function(r){var n=r.Pos;function a(c,d,p){return p?c.indexOf(d)>=0:c.lastIndexOf(d,0)==0}function o(c,d){var p=d&&d.schemaInfo,v=d&&d.quoteChar||'"',b=d&&d.matchInMiddle;if(!p)return;var C=c.getCursor(),T=c.getTokenAt(C);T.end>C.ch&&(T.end=C.ch,T.string=T.string.slice(0,C.ch-T.start));var A=r.innerMode(c.getMode(),T.state);if(!A.mode.xmlCurrentTag)return;var F=[],G=!1,j,O=/\btag\b/.test(T.type)&&!/>$/.test(T.string),x=O&&/^\w/.test(T.string),S;if(x){var P=c.getLine(C.line).slice(Math.max(0,T.start-2),T.start),R=/<\/$/.test(P)?"close":/<$/.test(P)?"open":null;R&&(S=T.start-(R=="close"?2:1))}else O&&T.string=="<"?R="open":O&&T.string=="</"&&(R="close");var B=A.mode.xmlCurrentTag(A.state);if(!O&&!B||R){x&&(j=T.string),G=R;var q=A.mode.xmlCurrentContext?A.mode.xmlCurrentContext(A.state):[],A=q.length&&q[q.length-1],le=A&&p[A],ae=A?le&&le.children:p["!top"];if(ae&&R!="close")for(var Z=0;Z<ae.length;++Z)(!j||a(ae[Z],j,b))&&F.push("<"+ae[Z]);else if(R!="close")for(var ne in p)p.hasOwnProperty(ne)&&ne!="!top"&&ne!="!attrs"&&(!j||a(ne,j,b))&&F.push("<"+ne);A&&(!j||R=="close"&&a(A,j,b))&&F.push("</"+A+">")}else{var le=B&&p[B.name],U=le&&le.attrs,N=p["!attrs"];if(!U&&!N)return;if(!U)U=N;else if(N){var W={};for(var E in N)N.hasOwnProperty(E)&&(W[E]=N[E]);for(var E in U)U.hasOwnProperty(E)&&(W[E]=U[E]);U=W}if(T.type=="string"||T.string=="="){var P=c.getRange(n(C.line,Math.max(0,C.ch-60)),n(C.line,T.type=="string"?T.start:T.end)),ee=P.match(/([^\s\u00a0=<>\"\']+)=$/),V;if(!ee||!U.hasOwnProperty(ee[1])||!(V=U[ee[1]]))return;if(typeof V=="function"&&(V=V.call(this,c)),T.type=="string"){j=T.string;var fe=0;/['"]/.test(T.string.charAt(0))&&(v=T.string.charAt(0),j=T.string.slice(1),fe++);var he=T.string.length;if(/['"]/.test(T.string.charAt(he-1))&&(v=T.string.charAt(he-1),j=T.string.substr(fe,he-2)),fe){var Ie=c.getLine(C.line);Ie.length>T.end&&Ie.charAt(T.end)==v&&T.end++}G=!0}var Ge=function(Pe){if(Pe)for(var Te=0;Te<Pe.length;++Te)(!j||a(Pe[Te],j,b))&&F.push(v+Pe[Te]+v);return We()};return V&&V.then?V.then(Ge):Ge(V)}else{T.type=="attribute"&&(j=T.string,G=!0);for(var He in U)U.hasOwnProperty(He)&&(!j||a(He,j,b))&&F.push(He)}}function We(){return{list:F,from:G?n(C.line,S??T.start):C,to:G?n(C.line,T.end):C}}return We()}r.registerHelper("hint","xml",o)})})()),hv.exports}var vv;function yS(){return vv||(vv=1,(function(t,e){(function(r){r(En(),mv())})(function(r){var n="ab aa af ak sq am ar an hy as av ae ay az bm ba eu be bn bh bi bs br bg my ca ch ce ny zh cv kw co cr hr cs da dv nl dz en eo et ee fo fj fi fr ff gl ka de el gn gu ht ha he hz hi ho hu ia id ie ga ig ik io is it iu ja jv kl kn kr ks kk km ki rw ky kv kg ko ku kj la lb lg li ln lo lt lu lv gv mk mg ms ml mt mi mr mh mn na nv nb nd ne ng nn no ii nr oc oj cu om or os pa pi fa pl ps pt qu rm rn ro ru sa sc sd se sm sg sr gd sn si sk sl so st es su sw ss sv ta te tg th ti bo tk tl tn to tr ts tt tw ty ug uk ur uz ve vi vo wa cy wo fy xh yi yo za zu".split(" "),a=["_blank","_self","_top","_parent"],o=["ascii","utf-8","utf-16","latin1","latin1"],c=["get","post","put","delete"],d=["application/x-www-form-urlencoded","multipart/form-data","text/plain"],p=["all","screen","print","embossed","braille","handheld","print","projection","screen","tty","tv","speech","3d-glasses","resolution [>][<][=] [X]","device-aspect-ratio: X/Y","orientation:portrait","orientation:landscape","device-height: [X]","device-width: [X]"],v={attrs:{}},b={a:{attrs:{href:null,ping:null,type:null,media:p,target:a,hreflang:n}},abbr:v,acronym:v,address:v,applet:v,area:{attrs:{alt:null,coords:null,href:null,target:null,ping:null,media:p,hreflang:n,type:null,shape:["default","rect","circle","poly"]}},article:v,aside:v,audio:{attrs:{src:null,mediagroup:null,crossorigin:["anonymous","use-credentials"],preload:["none","metadata","auto"],autoplay:["","autoplay"],loop:["","loop"],controls:["","controls"]}},b:v,base:{attrs:{href:null,target:a}},basefont:v,bdi:v,bdo:v,big:v,blockquote:{attrs:{cite:null}},body:v,br:v,button:{attrs:{form:null,formaction:null,name:null,value:null,autofocus:["","autofocus"],disabled:["","autofocus"],formenctype:d,formmethod:c,formnovalidate:["","novalidate"],formtarget:a,type:["submit","reset","button"]}},canvas:{attrs:{width:null,height:null}},caption:v,center:v,cite:v,code:v,col:{attrs:{span:null}},colgroup:{attrs:{span:null}},command:{attrs:{type:["command","checkbox","radio"],label:null,icon:null,radiogroup:null,command:null,title:null,disabled:["","disabled"],checked:["","checked"]}},data:{attrs:{value:null}},datagrid:{attrs:{disabled:["","disabled"],multiple:["","multiple"]}},datalist:{attrs:{data:null}},dd:v,del:{attrs:{cite:null,datetime:null}},details:{attrs:{open:["","open"]}},dfn:v,dir:v,div:v,dialog:{attrs:{open:null}},dl:v,dt:v,em:v,embed:{attrs:{src:null,type:null,width:null,height:null}},eventsource:{attrs:{src:null}},fieldset:{attrs:{disabled:["","disabled"],form:null,name:null}},figcaption:v,figure:v,font:v,footer:v,form:{attrs:{action:null,name:null,"accept-charset":o,autocomplete:["on","off"],enctype:d,method:c,novalidate:["","novalidate"],target:a}},frame:v,frameset:v,h1:v,h2:v,h3:v,h4:v,h5:v,h6:v,head:{attrs:{},children:["title","base","link","style","meta","script","noscript","command"]},header:v,hgroup:v,hr:v,html:{attrs:{manifest:null},children:["head","body"]},i:v,iframe:{attrs:{src:null,srcdoc:null,name:null,width:null,height:null,sandbox:["allow-top-navigation","allow-same-origin","allow-forms","allow-scripts"],seamless:["","seamless"]}},img:{attrs:{alt:null,src:null,ismap:null,usemap:null,width:null,height:null,crossorigin:["anonymous","use-credentials"]}},input:{attrs:{alt:null,dirname:null,form:null,formaction:null,height:null,list:null,max:null,maxlength:null,min:null,name:null,pattern:null,placeholder:null,size:null,src:null,step:null,value:null,width:null,accept:["audio/*","video/*","image/*"],autocomplete:["on","off"],autofocus:["","autofocus"],checked:["","checked"],disabled:["","disabled"],formenctype:d,formmethod:c,formnovalidate:["","novalidate"],formtarget:a,multiple:["","multiple"],readonly:["","readonly"],required:["","required"],type:["hidden","text","search","tel","url","email","password","datetime","date","month","week","time","datetime-local","number","range","color","checkbox","radio","file","submit","image","reset","button"]}},ins:{attrs:{cite:null,datetime:null}},kbd:v,keygen:{attrs:{challenge:null,form:null,name:null,autofocus:["","autofocus"],disabled:["","disabled"],keytype:["RSA"]}},label:{attrs:{for:null,form:null}},legend:v,li:{attrs:{value:null}},link:{attrs:{href:null,type:null,hreflang:n,media:p,sizes:["all","16x16","16x16 32x32","16x16 32x32 64x64"]}},map:{attrs:{name:null}},mark:v,menu:{attrs:{label:null,type:["list","context","toolbar"]}},meta:{attrs:{content:null,charset:o,name:["viewport","application-name","author","description","generator","keywords"],"http-equiv":["content-language","content-type","default-style","refresh"]}},meter:{attrs:{value:null,min:null,low:null,high:null,max:null,optimum:null}},nav:v,noframes:v,noscript:v,object:{attrs:{data:null,type:null,name:null,usemap:null,form:null,width:null,height:null,typemustmatch:["","typemustmatch"]}},ol:{attrs:{reversed:["","reversed"],start:null,type:["1","a","A","i","I"]}},optgroup:{attrs:{disabled:["","disabled"],label:null}},option:{attrs:{disabled:["","disabled"],label:null,selected:["","selected"],value:null}},output:{attrs:{for:null,form:null,name:null}},p:v,param:{attrs:{name:null,value:null}},pre:v,progress:{attrs:{value:null,max:null}},q:{attrs:{cite:null}},rp:v,rt:v,ruby:v,s:v,samp:v,script:{attrs:{type:["text/javascript"],src:null,async:["","async"],defer:["","defer"],charset:o}},section:v,select:{attrs:{form:null,name:null,size:null,autofocus:["","autofocus"],disabled:["","disabled"],multiple:["","multiple"]}},small:v,source:{attrs:{src:null,type:null,media:null}},span:v,strike:v,strong:v,style:{attrs:{type:["text/css"],media:p,scoped:null}},sub:v,summary:v,sup:v,table:v,tbody:v,td:{attrs:{colspan:null,rowspan:null,headers:null}},textarea:{attrs:{dirname:null,form:null,maxlength:null,name:null,placeholder:null,rows:null,cols:null,autofocus:["","autofocus"],disabled:["","disabled"],readonly:["","readonly"],required:["","required"],wrap:["soft","hard"]}},tfoot:v,th:{attrs:{colspan:null,rowspan:null,headers:null,scope:["row","col","rowgroup","colgroup"]}},thead:v,time:{attrs:{datetime:null}},title:v,tr:v,track:{attrs:{src:null,label:null,default:null,kind:["subtitles","captions","descriptions","chapters","metadata"],srclang:n}},tt:v,u:v,ul:v,var:v,video:{attrs:{src:null,poster:null,width:null,height:null,crossorigin:["anonymous","use-credentials"],preload:["auto","metadata","none"],autoplay:["","autoplay"],mediagroup:["movie"],muted:["","muted"],controls:["","controls"]}},wbr:v},C={accesskey:["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","0","1","2","3","4","5","6","7","8","9"],class:null,contenteditable:["true","false"],contextmenu:null,dir:["ltr","rtl","auto"],draggable:["true","false","auto"],dropzone:["copy","move","link","string:","file:"],hidden:["hidden"],id:null,inert:["inert"],itemid:null,itemprop:null,itemref:null,itemscope:["itemscope"],itemtype:null,lang:["en","es"],spellcheck:["true","false"],autocorrect:["true","false"],autocapitalize:["true","false"],style:null,tabindex:["1","2","3","4","5","6","7","8","9"],title:null,translate:["yes","no"],onclick:null,rel:["stylesheet","alternate","author","bookmark","help","license","next","nofollow","noreferrer","prefetch","prev","search","tag"]};function T(G){for(var j in C)C.hasOwnProperty(j)&&(G.attrs[j]=C[j])}T(v);for(var A in b)b.hasOwnProperty(A)&&b[A]!=v&&T(b[A]);r.htmlSchema=b;function F(G,j){var O={schemaInfo:b};if(j)for(var x in j)O[x]=j[x];return r.hint.xml(G,O)}r.registerHelper("hint","html",F)})})()),dv.exports}yS();var gv={exports:{}},_v;function kS(){return _v||(_v=1,(function(t,e){(function(r){r(En())})(function(r){var n="CodeMirror-hint",a="CodeMirror-hint-active";r.showHint=function(O,x,S){if(!x)return O.showHint(S);S&&S.async&&(x.async=!0);var P={hint:x};if(S)for(var R in S)P[R]=S[R];return O.showHint(P)},r.defineExtension("showHint",function(O){O=p(this,this.getCursor("start"),O);var x=this.listSelections();if(!(x.length>1)){if(this.somethingSelected()){if(!O.hint.supportsSelection)return;for(var S=0;S<x.length;S++)if(x[S].head.line!=x[S].anchor.line)return}this.state.completionActive&&this.state.completionActive.close();var P=this.state.completionActive=new o(this,O);P.options.hint&&(r.signal(this,"startCompletion",this),P.update(!0))}}),r.defineExtension("closeHint",function(){this.state.completionActive&&this.state.completionActive.close()});function o(O,x){if(this.cm=O,this.options=x,this.widget=null,this.debounce=0,this.tick=0,this.startPos=this.cm.getCursor("start"),this.startLen=this.cm.getLine(this.startPos.line).length-this.cm.getSelection().length,this.options.updateOnCursorActivity){var S=this;O.on("cursorActivity",this.activityFunc=function(){S.cursorActivity()})}}var c=window.requestAnimationFrame||function(O){return setTimeout(O,1e3/60)},d=window.cancelAnimationFrame||clearTimeout;o.prototype={close:function(){this.active()&&(this.cm.state.completionActive=null,this.tick=null,this.options.updateOnCursorActivity&&this.cm.off("cursorActivity",this.activityFunc),this.widget&&this.data&&r.signal(this.data,"close"),this.widget&&this.widget.close(),r.signal(this.cm,"endCompletion",this.cm))},active:function(){return this.cm.state.completionActive==this},pick:function(O,x){var S=O.list[x],P=this;this.cm.operation(function(){S.hint?S.hint(P.cm,O,S):P.cm.replaceRange(v(S),S.from||O.from,S.to||O.to,"complete"),r.signal(O,"pick",S),P.cm.scrollIntoView()}),this.options.closeOnPick&&this.close()},cursorActivity:function(){this.debounce&&(d(this.debounce),this.debounce=0);var O=this.startPos;this.data&&(O=this.data.from);var x=this.cm.getCursor(),S=this.cm.getLine(x.line);if(x.line!=this.startPos.line||S.length-x.ch!=this.startLen-this.startPos.ch||x.ch<O.ch||this.cm.somethingSelected()||!x.ch||this.options.closeCharacters.test(S.charAt(x.ch-1)))this.close();else{var P=this;this.debounce=c(function(){P.update()}),this.widget&&this.widget.disable()}},update:function(O){if(this.tick!=null){var x=this,S=++this.tick;F(this.options.hint,this.cm,this.options,function(P){x.tick==S&&x.finishUpdate(P,O)})}},finishUpdate:function(O,x){this.data&&r.signal(this.data,"update");var S=this.widget&&this.widget.picked||x&&this.options.completeSingle;this.widget&&this.widget.close(),this.data=O,O&&O.list.length&&(S&&O.list.length==1?this.pick(O,0):(this.widget=new T(this,O),r.signal(O,"shown")))}};function p(O,x,S){var P=O.options.hintOptions,R={};for(var B in j)R[B]=j[B];if(P)for(var B in P)P[B]!==void 0&&(R[B]=P[B]);if(S)for(var B in S)S[B]!==void 0&&(R[B]=S[B]);return R.hint.resolve&&(R.hint=R.hint.resolve(O,x)),R}function v(O){return typeof O=="string"?O:O.text}function b(O,x){var S={Up:function(){x.moveFocus(-1)},Down:function(){x.moveFocus(1)},PageUp:function(){x.moveFocus(-x.menuSize()+1,!0)},PageDown:function(){x.moveFocus(x.menuSize()-1,!0)},Home:function(){x.setFocus(0)},End:function(){x.setFocus(x.length-1)},Enter:x.pick,Tab:x.pick,Esc:x.close},P=/Mac/.test(navigator.platform);P&&(S["Ctrl-P"]=function(){x.moveFocus(-1)},S["Ctrl-N"]=function(){x.moveFocus(1)});var R=O.options.customKeys,B=R?{}:S;function q(Z,ne){var U;typeof ne!="string"?U=function(N){return ne(N,x)}:S.hasOwnProperty(ne)?U=S[ne]:U=ne,B[Z]=U}if(R)for(var le in R)R.hasOwnProperty(le)&&q(le,R[le]);var ae=O.options.extraKeys;if(ae)for(var le in ae)ae.hasOwnProperty(le)&&q(le,ae[le]);return B}function C(O,x){for(;x&&x!=O;){if(x.nodeName.toUpperCase()==="LI"&&x.parentNode==O)return x;x=x.parentNode}}function T(O,x){this.id="cm-complete-"+Math.floor(Math.random(1e6)),this.completion=O,this.data=x,this.picked=!1;var S=this,P=O.cm,R=P.getInputField().ownerDocument,B=R.defaultView||R.parentWindow,q=this.hints=R.createElement("ul");q.setAttribute("role","listbox"),q.setAttribute("aria-expanded","true"),q.id=this.id;var le=O.cm.options.theme;q.className="CodeMirror-hints "+le,this.selectedHint=x.selectedHint||0;for(var ae=x.list,Z=0;Z<ae.length;++Z){var ne=q.appendChild(R.createElement("li")),U=ae[Z],N=n+(Z!=this.selectedHint?"":" "+a);U.className!=null&&(N=U.className+" "+N),ne.className=N,Z==this.selectedHint&&ne.setAttribute("aria-selected","true"),ne.id=this.id+"-"+Z,ne.setAttribute("role","option"),U.render?U.render(ne,x,U):ne.appendChild(R.createTextNode(U.displayText||v(U))),ne.hintId=Z}var W=O.options.container||R.body,E=P.cursorCoords(O.options.alignWithWord?x.from:null),ee=E.left,V=E.bottom,fe=!0,he=0,Ie=0;if(W!==R.body){var Ge=["absolute","relative","fixed"].indexOf(B.getComputedStyle(W).position)!==-1,He=Ge?W:W.offsetParent,We=He.getBoundingClientRect(),at=R.body.getBoundingClientRect();he=We.left-at.left-He.scrollLeft,Ie=We.top-at.top-He.scrollTop}q.style.left=ee-he+"px",q.style.top=V-Ie+"px";var Ve=B.innerWidth||Math.max(R.body.offsetWidth,R.documentElement.offsetWidth),Pe=B.innerHeight||Math.max(R.body.offsetHeight,R.documentElement.offsetHeight);W.appendChild(q),P.getInputField().setAttribute("aria-autocomplete","list"),P.getInputField().setAttribute("aria-owns",this.id),P.getInputField().setAttribute("aria-activedescendant",this.id+"-"+this.selectedHint);var Te=O.options.moveOnOverlap?q.getBoundingClientRect():new DOMRect,Se=O.options.paddingForScrollbar?q.scrollHeight>q.clientHeight+1:!1,Le;setTimeout(function(){Le=P.getScrollInfo()});var xe=Te.bottom-Pe;if(xe>0){var Ee=Te.bottom-Te.top,Qe=Te.top-(E.bottom-E.top)-2;Pe-Te.top<Qe?(Ee>Qe&&(q.style.height=(Ee=Qe)+"px"),q.style.top=(V=E.top-Ee)-Ie+"px",fe=!1):q.style.height=Pe-Te.top-2+"px"}var ut=Te.right-Ve;if(Se&&(ut+=P.display.nativeBarWidth),ut>0&&(Te.right-Te.left>Ve&&(q.style.width=Ve-5+"px",ut-=Te.right-Te.left-Ve),q.style.left=(ee=Math.max(E.left-ut-he,0))+"px"),Se)for(var dt=q.firstChild;dt;dt=dt.nextSibling)dt.style.paddingRight=P.display.nativeBarWidth+"px";if(P.addKeyMap(this.keyMap=b(O,{moveFocus:function(tt,lt){S.changeActive(S.selectedHint+tt,lt)},setFocus:function(tt){S.changeActive(tt)},menuSize:function(){return S.screenAmount()},length:ae.length,close:function(){O.close()},pick:function(){S.pick()},data:x})),O.options.closeOnUnfocus){var Nt;P.on("blur",this.onBlur=function(){Nt=setTimeout(function(){O.close()},100)}),P.on("focus",this.onFocus=function(){clearTimeout(Nt)})}P.on("scroll",this.onScroll=function(){var tt=P.getScrollInfo(),lt=P.getWrapperElement().getBoundingClientRect();Le||(Le=P.getScrollInfo());var $t=V+Le.top-tt.top,Ye=$t-(B.pageYOffset||(R.documentElement||R.body).scrollTop);if(fe||(Ye+=q.offsetHeight),Ye<=lt.top||Ye>=lt.bottom)return O.close();q.style.top=$t+"px",q.style.left=ee+Le.left-tt.left+"px"}),r.on(q,"dblclick",function(tt){var lt=C(q,tt.target||tt.srcElement);lt&<.hintId!=null&&(S.changeActive(lt.hintId),S.pick())}),r.on(q,"click",function(tt){var lt=C(q,tt.target||tt.srcElement);lt&<.hintId!=null&&(S.changeActive(lt.hintId),O.options.completeOnSingleClick&&S.pick())}),r.on(q,"mousedown",function(){setTimeout(function(){P.focus()},20)});var ze=this.getSelectedHintRange();return(ze.from!==0||ze.to!==0)&&this.scrollToActive(),r.signal(x,"select",ae[this.selectedHint],q.childNodes[this.selectedHint]),!0}T.prototype={close:function(){if(this.completion.widget==this){this.completion.widget=null,this.hints.parentNode&&this.hints.parentNode.removeChild(this.hints),this.completion.cm.removeKeyMap(this.keyMap);var O=this.completion.cm.getInputField();O.removeAttribute("aria-activedescendant"),O.removeAttribute("aria-owns");var x=this.completion.cm;this.completion.options.closeOnUnfocus&&(x.off("blur",this.onBlur),x.off("focus",this.onFocus)),x.off("scroll",this.onScroll)}},disable:function(){this.completion.cm.removeKeyMap(this.keyMap);var O=this;this.keyMap={Enter:function(){O.picked=!0}},this.completion.cm.addKeyMap(this.keyMap)},pick:function(){this.completion.pick(this.data,this.selectedHint)},changeActive:function(O,x){if(O>=this.data.list.length?O=x?this.data.list.length-1:0:O<0&&(O=x?0:this.data.list.length-1),this.selectedHint!=O){var S=this.hints.childNodes[this.selectedHint];S&&(S.className=S.className.replace(" "+a,""),S.removeAttribute("aria-selected")),S=this.hints.childNodes[this.selectedHint=O],S.className+=" "+a,S.setAttribute("aria-selected","true"),this.completion.cm.getInputField().setAttribute("aria-activedescendant",S.id),this.scrollToActive(),r.signal(this.data,"select",this.data.list[this.selectedHint],S)}},scrollToActive:function(){var O=this.getSelectedHintRange(),x=this.hints.childNodes[O.from],S=this.hints.childNodes[O.to],P=this.hints.firstChild;x.offsetTop<this.hints.scrollTop?this.hints.scrollTop=x.offsetTop-P.offsetTop:S.offsetTop+S.offsetHeight>this.hints.scrollTop+this.hints.clientHeight&&(this.hints.scrollTop=S.offsetTop+S.offsetHeight-this.hints.clientHeight+P.offsetTop)},screenAmount:function(){return Math.floor(this.hints.clientHeight/this.hints.firstChild.offsetHeight)||1},getSelectedHintRange:function(){var O=this.completion.options.scrollMargin||0;return{from:Math.max(0,this.selectedHint-O),to:Math.min(this.data.list.length-1,this.selectedHint+O)}}};function A(O,x){if(!O.somethingSelected())return x;for(var S=[],P=0;P<x.length;P++)x[P].supportsSelection&&S.push(x[P]);return S}function F(O,x,S,P){if(O.async)O(x,P,S);else{var R=O(x,S);R&&R.then?R.then(P):P(R)}}function G(O,x){var S=O.getHelpers(x,"hint"),P;if(S.length){var R=function(B,q,le){var ae=A(B,S);function Z(ne){if(ne==ae.length)return q(null);F(ae[ne],B,le,function(U){U&&U.list.length>0?q(U):Z(ne+1)})}Z(0)};return R.async=!0,R.supportsSelection=!0,R}else return(P=O.getHelper(O.getCursor(),"hintWords"))?function(B){return r.hint.fromList(B,{words:P})}:r.hint.anyword?function(B,q){return r.hint.anyword(B,q)}:function(){}}r.registerHelper("hint","auto",{resolve:G}),r.registerHelper("hint","fromList",function(O,x){var S=O.getCursor(),P=O.getTokenAt(S),R,B=r.Pos(S.line,P.start),q=S;P.start<S.ch&&/\w/.test(P.string.charAt(S.ch-P.start-1))?R=P.string.substr(0,S.ch-P.start):(R="",B=S);for(var le=[],ae=0;ae<x.words.length;ae++){var Z=x.words[ae];Z.slice(0,R.length)==R&&le.push(Z)}if(le.length)return{list:le,from:B,to:q}}),r.commands.autocomplete=r.showHint;var j={hint:r.hint.auto,completeSingle:!0,alignWithWord:!0,closeCharacters:/[\s()\[\]{};:>,]/,closeOnPick:!0,closeOnUnfocus:!0,updateOnCursorActivity:!0,completeOnSingleClick:!0,container:null,customKeys:null,extraKeys:null,paddingForScrollbar:!0,moveOnOverlap:!0};r.defineOption("hintOptions",null)})})()),gv.exports}kS(),mv();var ES=En(),ci=Da(ES);rf();var bv={exports:{}},yv={exports:{}},kv;function Ev(){return kv||(kv=1,(function(t,e){(function(r){r(En())})(function(r){var n={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},a={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};r.defineMode("xml",function(o,c){var d=o.indentUnit,p={},v=c.htmlMode?n:a;for(var b in v)p[b]=v[b];for(var b in c)p[b]=c[b];var C,T;function A(E,ee){function V(Ie){return ee.tokenize=Ie,Ie(E,ee)}var fe=E.next();if(fe=="<")return E.eat("!")?E.eat("[")?E.match("CDATA[")?V(j("atom","]]>")):null:E.match("--")?V(j("comment","-->")):E.match("DOCTYPE",!0,!0)?(E.eatWhile(/[\w\._\-]/),V(O(1))):null:E.eat("?")?(E.eatWhile(/[\w\._\-]/),ee.tokenize=j("meta","?>"),"meta"):(C=E.eat("/")?"closeTag":"openTag",ee.tokenize=F,"tag bracket");if(fe=="&"){var he;return E.eat("#")?E.eat("x")?he=E.eatWhile(/[a-fA-F\d]/)&&E.eat(";"):he=E.eatWhile(/[\d]/)&&E.eat(";"):he=E.eatWhile(/[\w\.\-:]/)&&E.eat(";"),he?"atom":"error"}else return E.eatWhile(/[^&<]/),null}A.isInText=!0;function F(E,ee){var V=E.next();if(V==">"||V=="/"&&E.eat(">"))return ee.tokenize=A,C=V==">"?"endTag":"selfcloseTag","tag bracket";if(V=="=")return C="equals",null;if(V=="<"){ee.tokenize=A,ee.state=B,ee.tagName=ee.tagStart=null;var fe=ee.tokenize(E,ee);return fe?fe+" tag error":"tag error"}else return/[\'\"]/.test(V)?(ee.tokenize=G(V),ee.stringStartCol=E.column(),ee.tokenize(E,ee)):(E.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function G(E){var ee=function(V,fe){for(;!V.eol();)if(V.next()==E){fe.tokenize=F;break}return"string"};return ee.isInAttribute=!0,ee}function j(E,ee){return function(V,fe){for(;!V.eol();){if(V.match(ee)){fe.tokenize=A;break}V.next()}return E}}function O(E){return function(ee,V){for(var fe;(fe=ee.next())!=null;){if(fe=="<")return V.tokenize=O(E+1),V.tokenize(ee,V);if(fe==">")if(E==1){V.tokenize=A;break}else return V.tokenize=O(E-1),V.tokenize(ee,V)}return"meta"}}function x(E){return E&&E.toLowerCase()}function S(E,ee,V){this.prev=E.context,this.tagName=ee||"",this.indent=E.indented,this.startOfLine=V,(p.doNotIndent.hasOwnProperty(ee)||E.context&&E.context.noIndent)&&(this.noIndent=!0)}function P(E){E.context&&(E.context=E.context.prev)}function R(E,ee){for(var V;;){if(!E.context||(V=E.context.tagName,!p.contextGrabbers.hasOwnProperty(x(V))||!p.contextGrabbers[x(V)].hasOwnProperty(x(ee))))return;P(E)}}function B(E,ee,V){return E=="openTag"?(V.tagStart=ee.column(),q):E=="closeTag"?le:B}function q(E,ee,V){return E=="word"?(V.tagName=ee.current(),T="tag",ne):p.allowMissingTagName&&E=="endTag"?(T="tag bracket",ne(E,ee,V)):(T="error",q)}function le(E,ee,V){if(E=="word"){var fe=ee.current();return V.context&&V.context.tagName!=fe&&p.implicitlyClosed.hasOwnProperty(x(V.context.tagName))&&P(V),V.context&&V.context.tagName==fe||p.matchClosing===!1?(T="tag",ae):(T="tag error",Z)}else return p.allowMissingTagName&&E=="endTag"?(T="tag bracket",ae(E,ee,V)):(T="error",Z)}function ae(E,ee,V){return E!="endTag"?(T="error",ae):(P(V),B)}function Z(E,ee,V){return T="error",ae(E,ee,V)}function ne(E,ee,V){if(E=="word")return T="attribute",U;if(E=="endTag"||E=="selfcloseTag"){var fe=V.tagName,he=V.tagStart;return V.tagName=V.tagStart=null,E=="selfcloseTag"||p.autoSelfClosers.hasOwnProperty(x(fe))?R(V,fe):(R(V,fe),V.context=new S(V,fe,he==V.indented)),B}return T="error",ne}function U(E,ee,V){return E=="equals"?N:(p.allowMissing||(T="error"),ne(E,ee,V))}function N(E,ee,V){return E=="string"?W:E=="word"&&p.allowUnquoted?(T="string",ne):(T="error",ne(E,ee,V))}function W(E,ee,V){return E=="string"?W:ne(E,ee,V)}return{startState:function(E){var ee={tokenize:A,state:B,indented:E||0,tagName:null,tagStart:null,context:null};return E!=null&&(ee.baseIndent=E),ee},token:function(E,ee){if(!ee.tagName&&E.sol()&&(ee.indented=E.indentation()),E.eatSpace())return null;C=null;var V=ee.tokenize(E,ee);return(V||C)&&V!="comment"&&(T=null,ee.state=ee.state(C||V,E,ee),T&&(V=T=="error"?V+" error":T)),V},indent:function(E,ee,V){var fe=E.context;if(E.tokenize.isInAttribute)return E.tagStart==E.indented?E.stringStartCol+1:E.indented+d;if(fe&&fe.noIndent)return r.Pass;if(E.tokenize!=F&&E.tokenize!=A)return V?V.match(/^(\s*)/)[0].length:0;if(E.tagName)return p.multilineTagIndentPastTag!==!1?E.tagStart+E.tagName.length+2:E.tagStart+d*(p.multilineTagIndentFactor||1);if(p.alignCDATA&&/<!\[CDATA\[/.test(ee))return 0;var he=ee&&/^<(\/)?([\w_:\.-]*)/.exec(ee);if(he&&he[1])for(;fe;)if(fe.tagName==he[2]){fe=fe.prev;break}else if(p.implicitlyClosed.hasOwnProperty(x(fe.tagName)))fe=fe.prev;else break;else if(he)for(;fe;){var Ie=p.contextGrabbers[x(fe.tagName)];if(Ie&&Ie.hasOwnProperty(x(he[2])))fe=fe.prev;else break}for(;fe&&fe.prev&&!fe.startOfLine;)fe=fe.prev;return fe?fe.indent+d:E.baseIndent||0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:p.htmlMode?"html":"xml",helperType:p.htmlMode?"html":"xml",skipAttribute:function(E){E.state==N&&(E.state=ne)},xmlCurrentTag:function(E){return E.tagName?{name:E.tagName,close:E.type=="closeTag"}:null},xmlCurrentContext:function(E){for(var ee=[],V=E.context;V;V=V.prev)ee.push(V.tagName);return ee.reverse()}}}),r.defineMIME("text/xml","xml"),r.defineMIME("application/xml","xml"),r.mimeModes.hasOwnProperty("text/html")||r.defineMIME("text/html",{name:"xml",htmlMode:!0})})})()),yv.exports}var Tv={exports:{}},Cv;function wv(){return Cv||(Cv=1,(function(t,e){(function(r){r(En())})(function(r){r.defineMode("javascript",function(n,a){var o=n.indentUnit,c=a.statementIndent,d=a.jsonld,p=a.json||d,v=a.trackScope!==!1,b=a.typescript,C=a.wordCharacters||/[\w$\xa1-\uffff]/,T=(function(){function w(qt){return{type:qt,style:"keyword"}}var M=w("keyword a"),ce=w("keyword b"),ve=w("keyword c"),J=w("keyword d"),Ce=w("operator"),ct={type:"atom",style:"atom"};return{if:w("if"),while:M,with:M,else:ce,do:ce,try:ce,finally:ce,return:J,break:J,continue:J,new:w("new"),delete:ve,void:ve,throw:ve,debugger:w("debugger"),var:w("var"),const:w("var"),let:w("var"),function:w("function"),catch:w("catch"),for:w("for"),switch:w("switch"),case:w("case"),default:w("default"),in:Ce,typeof:Ce,instanceof:Ce,true:ct,false:ct,null:ct,undefined:ct,NaN:ct,Infinity:ct,this:w("this"),class:w("class"),super:w("atom"),yield:ve,export:w("export"),import:w("import"),extends:ve,await:ve}})(),A=/[+\-*&%=<>!?|~^@]/,F=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function G(w){for(var M=!1,ce,ve=!1;(ce=w.next())!=null;){if(!M){if(ce=="/"&&!ve)return;ce=="["?ve=!0:ve&&ce=="]"&&(ve=!1)}M=!M&&ce=="\\"}}var j,O;function x(w,M,ce){return j=w,O=ce,M}function S(w,M){var ce=w.next();if(ce=='"'||ce=="'")return M.tokenize=P(ce),M.tokenize(w,M);if(ce=="."&&w.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return x("number","number");if(ce=="."&&w.match(".."))return x("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(ce))return x(ce);if(ce=="="&&w.eat(">"))return x("=>","operator");if(ce=="0"&&w.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return x("number","number");if(/\d/.test(ce))return w.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),x("number","number");if(ce=="/")return w.eat("*")?(M.tokenize=R,R(w,M)):w.eat("/")?(w.skipToEnd(),x("comment","comment")):Gr(w,M,1)?(G(w),w.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),x("regexp","string-2")):(w.eat("="),x("operator","operator",w.current()));if(ce=="`")return M.tokenize=B,B(w,M);if(ce=="#"&&w.peek()=="!")return w.skipToEnd(),x("meta","meta");if(ce=="#"&&w.eatWhile(C))return x("variable","property");if(ce=="<"&&w.match("!--")||ce=="-"&&w.match("->")&&!/\S/.test(w.string.slice(0,w.start)))return w.skipToEnd(),x("comment","comment");if(A.test(ce))return(ce!=">"||!M.lexical||M.lexical.type!=">")&&(w.eat("=")?(ce=="!"||ce=="=")&&w.eat("="):/[<>*+\-|&?]/.test(ce)&&(w.eat(ce),ce==">"&&w.eat(ce))),ce=="?"&&w.eat(".")?x("."):x("operator","operator",w.current());if(C.test(ce)){w.eatWhile(C);var ve=w.current();if(M.lastType!="."){if(T.propertyIsEnumerable(ve)){var J=T[ve];return x(J.type,J.style,ve)}if(ve=="async"&&w.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return x("async","keyword",ve)}return x("variable","variable",ve)}}function P(w){return function(M,ce){var ve=!1,J;if(d&&M.peek()=="@"&&M.match(F))return ce.tokenize=S,x("jsonld-keyword","meta");for(;(J=M.next())!=null&&!(J==w&&!ve);)ve=!ve&&J=="\\";return ve||(ce.tokenize=S),x("string","string")}}function R(w,M){for(var ce=!1,ve;ve=w.next();){if(ve=="/"&&ce){M.tokenize=S;break}ce=ve=="*"}return x("comment","comment")}function B(w,M){for(var ce=!1,ve;(ve=w.next())!=null;){if(!ce&&(ve=="`"||ve=="$"&&w.eat("{"))){M.tokenize=S;break}ce=!ce&&ve=="\\"}return x("quasi","string-2",w.current())}var q="([{}])";function le(w,M){M.fatArrowAt&&(M.fatArrowAt=null);var ce=w.string.indexOf("=>",w.start);if(!(ce<0)){if(b){var ve=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(w.string.slice(w.start,ce));ve&&(ce=ve.index)}for(var J=0,Ce=!1,ct=ce-1;ct>=0;--ct){var qt=w.string.charAt(ct),Tr=q.indexOf(qt);if(Tr>=0&&Tr<3){if(!J){++ct;break}if(--J==0){qt=="("&&(Ce=!0);break}}else if(Tr>=3&&Tr<6)++J;else if(C.test(qt))Ce=!0;else if(/["'\/`]/.test(qt))for(;;--ct){if(ct==0)return;var As=w.string.charAt(ct-1);if(As==qt&&w.string.charAt(ct-2)!="\\"){ct--;break}}else if(Ce&&!J){++ct;break}}Ce&&!J&&(M.fatArrowAt=ct)}}var ae={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,import:!0,"jsonld-keyword":!0};function Z(w,M,ce,ve,J,Ce){this.indented=w,this.column=M,this.type=ce,this.prev=J,this.info=Ce,ve!=null&&(this.align=ve)}function ne(w,M){if(!v)return!1;for(var ce=w.localVars;ce;ce=ce.next)if(ce.name==M)return!0;for(var ve=w.context;ve;ve=ve.prev)for(var ce=ve.vars;ce;ce=ce.next)if(ce.name==M)return!0}function U(w,M,ce,ve,J){var Ce=w.cc;for(N.state=w,N.stream=J,N.marked=null,N.cc=Ce,N.style=M,w.lexical.hasOwnProperty("align")||(w.lexical.align=!0);;){var ct=Ce.length?Ce.pop():p?Ee:Le;if(ct(ce,ve)){for(;Ce.length&&Ce[Ce.length-1].lex;)Ce.pop()();return N.marked?N.marked:ce=="variable"&&ne(w,ve)?"variable-2":M}}}var N={state:null,marked:null,cc:null};function W(){for(var w=arguments.length-1;w>=0;w--)N.cc.push(arguments[w])}function E(){return W.apply(null,arguments),!0}function ee(w,M){for(var ce=M;ce;ce=ce.next)if(ce.name==w)return!0;return!1}function V(w){var M=N.state;if(N.marked="def",!!v){if(M.context){if(M.lexical.info=="var"&&M.context&&M.context.block){var ce=fe(w,M.context);if(ce!=null){M.context=ce;return}}else if(!ee(w,M.localVars)){M.localVars=new Ge(w,M.localVars);return}}a.globalVars&&!ee(w,M.globalVars)&&(M.globalVars=new Ge(w,M.globalVars))}}function fe(w,M){if(M)if(M.block){var ce=fe(w,M.prev);return ce?ce==M.prev?M:new Ie(ce,M.vars,!0):null}else return ee(w,M.vars)?M:new Ie(M.prev,new Ge(w,M.vars),!1);else return null}function he(w){return w=="public"||w=="private"||w=="protected"||w=="abstract"||w=="readonly"}function Ie(w,M,ce){this.prev=w,this.vars=M,this.block=ce}function Ge(w,M){this.name=w,this.next=M}var He=new Ge("this",new Ge("arguments",null));function We(){N.state.context=new Ie(N.state.context,N.state.localVars,!1),N.state.localVars=He}function at(){N.state.context=new Ie(N.state.context,N.state.localVars,!0),N.state.localVars=null}We.lex=at.lex=!0;function Ve(){N.state.localVars=N.state.context.vars,N.state.context=N.state.context.prev}Ve.lex=!0;function Pe(w,M){var ce=function(){var ve=N.state,J=ve.indented;if(ve.lexical.type=="stat")J=ve.lexical.indented;else for(var Ce=ve.lexical;Ce&&Ce.type==")"&&Ce.align;Ce=Ce.prev)J=Ce.indented;ve.lexical=new Z(J,N.stream.column(),w,null,ve.lexical,M)};return ce.lex=!0,ce}function Te(){var w=N.state;w.lexical.prev&&(w.lexical.type==")"&&(w.indented=w.lexical.indented),w.lexical=w.lexical.prev)}Te.lex=!0;function Se(w){function M(ce){return ce==w?E():w==";"||ce=="}"||ce==")"||ce=="]"?W():E(M)}return M}function Le(w,M){return w=="var"?E(Pe("vardef",M),ks,Se(";"),Te):w=="keyword a"?E(Pe("form"),ut,Le,Te):w=="keyword b"?E(Pe("form"),Le,Te):w=="keyword d"?N.stream.match(/^\s*$/,!1)?E():E(Pe("stat"),Nt,Se(";"),Te):w=="debugger"?E(Se(";")):w=="{"?E(Pe("}"),at,Pn,Te,Ve):w==";"?E():w=="if"?(N.state.lexical.info=="else"&&N.state.cc[N.state.cc.length-1]==Te&&N.state.cc.pop()(),E(Pe("form"),ut,Le,Te,Es)):w=="function"?E(Zr):w=="for"?E(Pe("form"),at,mc,Le,Ve,Te):w=="class"||b&&M=="interface"?(N.marked="keyword",E(Pe("form",w=="class"?w:M),Ts,Te)):w=="variable"?b&&M=="declare"?(N.marked="keyword",E(Le)):b&&(M=="module"||M=="enum"||M=="type")&&N.stream.match(/^\s*\w/,!1)?(N.marked="keyword",M=="enum"?E(Re):M=="type"?E(vc,Se("operator"),nt,Se(";")):E(Pe("form"),Er,Se("{"),Pe("}"),Pn,Te,Te)):b&&M=="namespace"?(N.marked="keyword",E(Pe("form"),Ee,Le,Te)):b&&M=="abstract"?(N.marked="keyword",E(Le)):E(Pe("stat"),it):w=="switch"?E(Pe("form"),ut,Se("{"),Pe("}","switch"),at,Pn,Te,Te,Ve):w=="case"?E(Ee,Se(":")):w=="default"?E(Se(":")):w=="catch"?E(Pe("form"),We,xe,Le,Te,Ve):w=="export"?E(Pe("stat"),Cs,Te):w=="import"?E(Pe("stat"),Mi,Te):w=="async"?E(Le):M=="@"?E(Ee,Le):W(Pe("stat"),Ee,Se(";"),Te)}function xe(w){if(w=="(")return E(mn,Se(")"))}function Ee(w,M){return dt(w,M,!1)}function Qe(w,M){return dt(w,M,!0)}function ut(w){return w!="("?W():E(Pe(")"),Nt,Se(")"),Te)}function dt(w,M,ce){if(N.state.fatArrowAt==N.stream.start){var ve=ce?rt:Ye;if(w=="(")return E(We,Pe(")"),Ft(mn,")"),Te,Se("=>"),ve,Ve);if(w=="variable")return W(We,Er,Se("=>"),ve,Ve)}var J=ce?tt:ze;return ae.hasOwnProperty(w)?E(J):w=="function"?E(Zr,J):w=="class"||b&&M=="interface"?(N.marked="keyword",E(Pe("form"),Fp,Te)):w=="keyword c"||w=="async"?E(ce?Qe:Ee):w=="("?E(Pe(")"),Nt,Se(")"),Te,J):w=="operator"||w=="spread"?E(ce?Qe:Ee):w=="["?E(Pe("]"),Lt,Te,J):w=="{"?Ni(ei,"}",null,J):w=="quasi"?W(lt,J):w=="new"?E(X(ce)):E()}function Nt(w){return w.match(/[;\}\)\],]/)?W():W(Ee)}function ze(w,M){return w==","?E(Nt):tt(w,M,!1)}function tt(w,M,ce){var ve=ce==!1?ze:tt,J=ce==!1?Ee:Qe;if(w=="=>")return E(We,ce?rt:Ye,Ve);if(w=="operator")return/\+\+|--/.test(M)||b&&M=="!"?E(ve):b&&M=="<"&&N.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?E(Pe(">"),Ft(nt,">"),Te,ve):M=="?"?E(Ee,Se(":"),J):E(J);if(w=="quasi")return W(lt,ve);if(w!=";"){if(w=="(")return Ni(Qe,")","call",ve);if(w==".")return E(ir,ve);if(w=="[")return E(Pe("]"),Nt,Se("]"),Te,ve);if(b&&M=="as")return N.marked="keyword",E(nt,ve);if(w=="regexp")return N.state.lastType=N.marked="operator",N.stream.backUp(N.stream.pos-N.stream.start-1),E(J)}}function lt(w,M){return w!="quasi"?W():M.slice(M.length-2)!="${"?E(lt):E(Nt,$t)}function $t(w){if(w=="}")return N.marked="string-2",N.state.tokenize=B,E(lt)}function Ye(w){return le(N.stream,N.state),W(w=="{"?Le:Ee)}function rt(w){return le(N.stream,N.state),W(w=="{"?Le:Qe)}function X(w){return function(M){return M=="."?E(w?ie:me):M=="variable"&&b?E(Dr,w?tt:ze):W(w?Qe:Ee)}}function me(w,M){if(M=="target")return N.marked="keyword",E(ze)}function ie(w,M){if(M=="target")return N.marked="keyword",E(tt)}function it(w){return w==":"?E(Te,Le):W(ze,Se(";"),Te)}function ir(w){if(w=="variable")return N.marked="property",E()}function ei(w,M){if(w=="async")return N.marked="property",E(ei);if(w=="variable"||N.style=="keyword"){if(N.marked="property",M=="get"||M=="set")return E(hc);var ce;return b&&N.state.fatArrowAt==N.stream.start&&(ce=N.stream.match(/^\s*:\s*/,!1))&&(N.state.fatArrowAt=N.stream.pos+ce[0].length),E(ti)}else{if(w=="number"||w=="string")return N.marked=d?"property":N.style+" property",E(ti);if(w=="jsonld-keyword")return E(ti);if(b&&he(M))return N.marked="keyword",E(ei);if(w=="[")return E(Ee,Pi,Se("]"),ti);if(w=="spread")return E(Qe,ti);if(M=="*")return N.marked="keyword",E(ei);if(w==":")return W(ti)}}function hc(w){return w!="variable"?W(ti):(N.marked="property",E(Zr))}function ti(w){if(w==":")return E(Qe);if(w=="(")return W(Zr)}function Ft(w,M,ce){function ve(J,Ce){if(ce?ce.indexOf(J)>-1:J==","){var ct=N.state.lexical;return ct.info=="call"&&(ct.pos=(ct.pos||0)+1),E(function(qt,Tr){return qt==M||Tr==M?W():W(w)},ve)}return J==M||Ce==M?E():ce&&ce.indexOf(";")>-1?W(w):E(Se(M))}return function(J,Ce){return J==M||Ce==M?E():W(w,ve)}}function Ni(w,M,ce){for(var ve=3;ve<arguments.length;ve++)N.cc.push(arguments[ve]);return E(Pe(M,ce),Ft(w,M),Te)}function Pn(w){return w=="}"?E():W(Le,Pn)}function Pi(w,M){if(b){if(w==":")return E(nt);if(M=="?")return E(Pi)}}function ka(w,M){if(b&&(w==":"||M=="in"))return E(nt)}function Ii(w){if(b&&w==":")return N.stream.match(/^\s*\w+\s+is\b/,!1)?E(Ee,Mp,nt):E(nt)}function Mp(w,M){if(M=="is")return N.marked="keyword",E()}function nt(w,M){if(M=="keyof"||M=="typeof"||M=="infer"||M=="readonly")return N.marked="keyword",E(M=="typeof"?Qe:nt);if(w=="variable"||M=="void")return N.marked="type",E(Jr);if(M=="|"||M=="&")return E(nt);if(w=="string"||w=="number"||w=="atom")return E(Jr);if(w=="[")return E(Pe("]"),Ft(nt,"]",","),Te,Jr);if(w=="{")return E(Pe("}"),$e,Te,Jr);if(w=="(")return E(Ft(It,")"),pc,Jr);if(w=="<")return E(Ft(nt,">"),nt);if(w=="quasi")return W(ar,Jr)}function pc(w){if(w=="=>")return E(nt)}function $e(w){return w.match(/[\}\)\]]/)?E():w==","||w==";"?E($e):W(ri,$e)}function ri(w,M){if(w=="variable"||N.style=="keyword")return N.marked="property",E(ri);if(M=="?"||w=="number"||w=="string")return E(ri);if(w==":")return E(nt);if(w=="[")return E(Se("variable"),ka,Se("]"),ri);if(w=="(")return W(Di,ri);if(!w.match(/[;\}\)\],]/))return E()}function ar(w,M){return w!="quasi"?W():M.slice(M.length-2)!="${"?E(ar):E(nt,Pt)}function Pt(w){if(w=="}")return N.marked="string-2",N.state.tokenize=B,E(ar)}function It(w,M){return w=="variable"&&N.stream.match(/^\s*[?:]/,!1)||M=="?"?E(It):w==":"?E(nt):w=="spread"?E(It):W(nt)}function Jr(w,M){if(M=="<")return E(Pe(">"),Ft(nt,">"),Te,Jr);if(M=="|"||w=="."||M=="&")return E(nt);if(w=="[")return E(nt,Se("]"),Jr);if(M=="extends"||M=="implements")return N.marked="keyword",E(nt);if(M=="?")return E(nt,Se(":"),nt)}function Dr(w,M){if(M=="<")return E(Pe(">"),Ft(nt,">"),Te,Jr)}function hn(){return W(nt,sr)}function sr(w,M){if(M=="=")return E(nt)}function ks(w,M){return M=="enum"?(N.marked="keyword",E(Re)):W(Er,Pi,pn,$p)}function Er(w,M){if(b&&he(M))return N.marked="keyword",E(Er);if(w=="variable")return V(M),E();if(w=="spread")return E(Er);if(w=="[")return Ni(ru,"]");if(w=="{")return Ni(Li,"}")}function Li(w,M){return w=="variable"&&!N.stream.match(/^\s*:/,!1)?(V(M),E(pn)):(w=="variable"&&(N.marked="property"),w=="spread"?E(Er):w=="}"?W():w=="["?E(Ee,Se("]"),Se(":"),Li):E(Se(":"),Er,pn))}function ru(){return W(Er,pn)}function pn(w,M){if(M=="=")return E(Qe)}function $p(w){if(w==",")return E(ks)}function Es(w,M){if(w=="keyword b"&&M=="else")return E(Pe("form","else"),Le,Te)}function mc(w,M){if(M=="await")return E(mc);if(w=="(")return E(Pe(")"),nu,Te)}function nu(w){return w=="var"?E(ks,Ri):w=="variable"?E(Ri):W(Ri)}function Ri(w,M){return w==")"?E():w==";"?E(Ri):M=="in"||M=="of"?(N.marked="keyword",E(Ee,Ri)):W(Ee,Ri)}function Zr(w,M){if(M=="*")return N.marked="keyword",E(Zr);if(w=="variable")return V(M),E(Zr);if(w=="(")return E(We,Pe(")"),Ft(mn,")"),Te,Ii,Le,Ve);if(b&&M=="<")return E(Pe(">"),Ft(hn,">"),Te,Zr)}function Di(w,M){if(M=="*")return N.marked="keyword",E(Di);if(w=="variable")return V(M),E(Di);if(w=="(")return E(We,Pe(")"),Ft(mn,")"),Te,Ii,Ve);if(b&&M=="<")return E(Pe(">"),Ft(hn,">"),Te,Di)}function vc(w,M){if(w=="keyword"||w=="variable")return N.marked="type",E(vc);if(M=="<")return E(Pe(">"),Ft(hn,">"),Te)}function mn(w,M){return M=="@"&&E(Ee,mn),w=="spread"?E(mn):b&&he(M)?(N.marked="keyword",E(mn)):b&&w=="this"?E(Pi,pn):W(Er,Pi,pn)}function Fp(w,M){return w=="variable"?Ts(w,M):vn(w,M)}function Ts(w,M){if(w=="variable")return V(M),E(vn)}function vn(w,M){if(M=="<")return E(Pe(">"),Ft(hn,">"),Te,vn);if(M=="extends"||M=="implements"||b&&w==",")return M=="implements"&&(N.marked="keyword"),E(b?nt:Ee,vn);if(w=="{")return E(Pe("}"),gn,Te)}function gn(w,M){if(w=="async"||w=="variable"&&(M=="static"||M=="get"||M=="set"||b&&he(M))&&N.stream.match(/^\s+#?[\w$\xa1-\uffff]/,!1))return N.marked="keyword",E(gn);if(w=="variable"||N.style=="keyword")return N.marked="property",E(Ea,gn);if(w=="number"||w=="string")return E(Ea,gn);if(w=="[")return E(Ee,Pi,Se("]"),Ea,gn);if(M=="*")return N.marked="keyword",E(gn);if(b&&w=="(")return W(Di,gn);if(w==";"||w==",")return E(gn);if(w=="}")return E();if(M=="@")return E(Ee,gn)}function Ea(w,M){if(M=="!"||M=="?")return E(Ea);if(w==":")return E(nt,pn);if(M=="=")return E(Qe);var ce=N.state.lexical.prev,ve=ce&&ce.info=="interface";return W(ve?Di:Zr)}function Cs(w,M){return M=="*"?(N.marked="keyword",E(xs,Se(";"))):M=="default"?(N.marked="keyword",E(Ee,Se(";"))):w=="{"?E(Ft(ws,"}"),xs,Se(";")):W(Le)}function ws(w,M){if(M=="as")return N.marked="keyword",E(Se("variable"));if(w=="variable")return W(Qe,ws)}function Mi(w){return w=="string"?E():w=="("?W(Ee):w=="."?W(ze):W(Ss,In,xs)}function Ss(w,M){return w=="{"?Ni(Ss,"}"):(w=="variable"&&V(M),M=="*"&&(N.marked="keyword"),E(iu))}function In(w){if(w==",")return E(Ss,In)}function iu(w,M){if(M=="as")return N.marked="keyword",E(Ss)}function xs(w,M){if(M=="from")return N.marked="keyword",E(Ee)}function Lt(w){return w=="]"?E():W(Ft(Qe,"]"))}function Re(){return W(Pe("form"),Er,Se("{"),Pe("}"),Ft(ni,"}"),Te,Te)}function ni(){return W(Er,pn)}function au(w,M){return w.lastType=="operator"||w.lastType==","||A.test(M.charAt(0))||/[,.]/.test(M.charAt(0))}function Gr(w,M,ce){return M.tokenize==S&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(M.lastType)||M.lastType=="quasi"&&/\{\s*$/.test(w.string.slice(0,w.pos-(ce||0)))}return{startState:function(w){var M={tokenize:S,lastType:"sof",cc:[],lexical:new Z((w||0)-o,0,"block",!1),localVars:a.localVars,context:a.localVars&&new Ie(null,null,!1),indented:w||0};return a.globalVars&&typeof a.globalVars=="object"&&(M.globalVars=a.globalVars),M},token:function(w,M){if(w.sol()&&(M.lexical.hasOwnProperty("align")||(M.lexical.align=!1),M.indented=w.indentation(),le(w,M)),M.tokenize!=R&&w.eatSpace())return null;var ce=M.tokenize(w,M);return j=="comment"?ce:(M.lastType=j=="operator"&&(O=="++"||O=="--")?"incdec":j,U(M,ce,j,O,w))},indent:function(w,M){if(w.tokenize==R||w.tokenize==B)return r.Pass;if(w.tokenize!=S)return 0;var ce=M&&M.charAt(0),ve=w.lexical,J;if(!/^\s*else\b/.test(M))for(var Ce=w.cc.length-1;Ce>=0;--Ce){var ct=w.cc[Ce];if(ct==Te)ve=ve.prev;else if(ct!=Es&&ct!=Ve)break}for(;(ve.type=="stat"||ve.type=="form")&&(ce=="}"||(J=w.cc[w.cc.length-1])&&(J==ze||J==tt)&&!/^[,\.=+\-*:?[\(]/.test(M));)ve=ve.prev;c&&ve.type==")"&&ve.prev.type=="stat"&&(ve=ve.prev);var qt=ve.type,Tr=ce==qt;return qt=="vardef"?ve.indented+(w.lastType=="operator"||w.lastType==","?ve.info.length+1:0):qt=="form"&&ce=="{"?ve.indented:qt=="form"?ve.indented+o:qt=="stat"?ve.indented+(au(w,M)?c||o:0):ve.info=="switch"&&!Tr&&a.doubleIndentSwitch!=!1?ve.indented+(/^(?:case|default)\b/.test(M)?o:2*o):ve.align?ve.column+(Tr?0:1):ve.indented+(Tr?0:o)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:p?null:"/*",blockCommentEnd:p?null:"*/",blockCommentContinue:p?null:" * ",lineComment:p?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:p?"json":"javascript",jsonldMode:d,jsonMode:p,expressionAllowed:Gr,skipExpression:function(w){U(w,"atom","atom","true",new r.StringStream("",2,null))}}}),r.registerHelper("wordChars","javascript",/[\w$]/),r.defineMIME("text/javascript","javascript"),r.defineMIME("text/ecmascript","javascript"),r.defineMIME("application/javascript","javascript"),r.defineMIME("application/x-javascript","javascript"),r.defineMIME("application/ecmascript","javascript"),r.defineMIME("application/json",{name:"javascript",json:!0}),r.defineMIME("application/x-json",{name:"javascript",json:!0}),r.defineMIME("application/manifest+json",{name:"javascript",json:!0}),r.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),r.defineMIME("text/typescript",{name:"javascript",typescript:!0}),r.defineMIME("application/typescript",{name:"javascript",typescript:!0})})})()),Tv.exports}var Sv;function TS(){return Sv||(Sv=1,(function(t,e){(function(r){r(En(),Ev(),wv(),rf())})(function(r){var n={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};function a(C,T,A){var F=C.current(),G=F.search(T);return G>-1?C.backUp(F.length-G):F.match(/<\/?$/)&&(C.backUp(F.length),C.match(T,!1)||C.match(F)),A}var o={};function c(C){var T=o[C];return T||(o[C]=new RegExp("\\s+"+C+`\\s*=\\s*('|")?([^'"]+)('|")?\\s*`))}function d(C,T){var A=C.match(c(T));return A?/^\s*(.*?)\s*$/.exec(A[2])[1]:""}function p(C,T){return new RegExp((T?"^":"")+"</\\s*"+C+"\\s*>","i")}function v(C,T){for(var A in C)for(var F=T[A]||(T[A]=[]),G=C[A],j=G.length-1;j>=0;j--)F.unshift(G[j])}function b(C,T){for(var A=0;A<C.length;A++){var F=C[A];if(!F[0]||F[1].test(d(T,F[0])))return F[2]}}r.defineMode("htmlmixed",function(C,T){var A=r.getMode(C,{name:"xml",htmlMode:!0,multilineTagIndentFactor:T.multilineTagIndentFactor,multilineTagIndentPastTag:T.multilineTagIndentPastTag,allowMissingTagName:T.allowMissingTagName}),F={},G=T&&T.tags,j=T&&T.scriptTypes;if(v(n,F),G&&v(G,F),j)for(var O=j.length-1;O>=0;O--)F.script.unshift(["type",j[O].matches,j[O].mode]);function x(S,P){var R=A.token(S,P.htmlState),B=/\btag\b/.test(R),q;if(B&&!/[<>\s\/]/.test(S.current())&&(q=P.htmlState.tagName&&P.htmlState.tagName.toLowerCase())&&F.hasOwnProperty(q))P.inTag=q+" ";else if(P.inTag&&B&&/>$/.test(S.current())){var le=/^([\S]+) (.*)/.exec(P.inTag);P.inTag=null;var ae=S.current()==">"&&b(F[le[1]],le[2]),Z=r.getMode(C,ae),ne=p(le[1],!0),U=p(le[1],!1);P.token=function(N,W){return N.match(ne,!1)?(W.token=x,W.localState=W.localMode=null,null):a(N,U,W.localMode.token(N,W.localState))},P.localMode=Z,P.localState=r.startState(Z,A.indent(P.htmlState,"",""))}else P.inTag&&(P.inTag+=S.current(),S.eol()&&(P.inTag+=" "));return R}return{startState:function(){var S=r.startState(A);return{token:x,inTag:null,localMode:null,localState:null,htmlState:S}},copyState:function(S){var P;return S.localState&&(P=r.copyState(S.localMode,S.localState)),{token:S.token,inTag:S.inTag,localMode:S.localMode,localState:P,htmlState:r.copyState(A,S.htmlState)}},token:function(S,P){return P.token(S,P)},indent:function(S,P,R){return!S.localMode||/^\s*<\//.test(P)?A.indent(S.htmlState,P,R):S.localMode.indent?S.localMode.indent(S.localState,P,R):r.Pass},innerMode:function(S){return{state:S.localState||S.htmlState,mode:S.localMode||A}}}},"xml","javascript","css"),r.defineMIME("text/html","htmlmixed")})})()),bv.exports}TS(),wv(),Ev();var CS='.CodeMirror{color:#000;direction:ltr;font-family:monospace;height:300px}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{background-color:#f7f7f7;border-right:1px solid #ddd;white-space:nowrap}.CodeMirror-linenumber{color:#999;min-width:20px;padding:0 3px 0 5px;text-align:right;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{background:#7e7;border:0!important;width:auto}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:transparent}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:transparent}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{bottom:0;left:0;overflow:hidden;position:absolute;right:0;top:-50px}.CodeMirror-ruler{border-left:1px solid #ccc;bottom:0;position:absolute;top:0}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{background:#fff;overflow:hidden;position:relative}.CodeMirror-scroll{height:100%;margin-bottom:-50px;margin-right:-50px;outline:none;overflow:scroll!important;padding-bottom:50px;position:relative;z-index:0}.CodeMirror-sizer{border-right:50px solid transparent;position:relative}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{display:none;outline:none;position:absolute;z-index:6}.CodeMirror-vscrollbar{overflow-x:hidden;overflow-y:scroll;right:0;top:0}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-x:scroll;overflow-y:hidden}.CodeMirror-scrollbar-filler{bottom:0;right:0}.CodeMirror-gutter-filler{bottom:0;left:0}.CodeMirror-gutters{left:0;min-height:100%;position:absolute;top:0;z-index:3}.CodeMirror-gutter{display:inline-block;height:100%;margin-bottom:-50px;vertical-align:top;white-space:normal}.CodeMirror-gutter-wrapper{background:none!important;border:none!important;position:absolute;z-index:4}.CodeMirror-gutter-background{bottom:0;position:absolute;top:0;z-index:4}.CodeMirror-gutter-elt{cursor:default;position:absolute;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{word-wrap:normal;-webkit-tap-highlight-color:transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;color:inherit;font-family:inherit;font-size:inherit;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual;line-height:inherit;margin:0;overflow:visible;position:relative;white-space:pre;z-index:2}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{bottom:0;left:0;position:absolute;right:0;top:0;z-index:0}.CodeMirror-linewidget{padding:.1px;position:relative;z-index:2}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:none}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{height:0;overflow:hidden;position:absolute;visibility:hidden;width:100%}.CodeMirror-cursor{pointer-events:none;position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{position:relative;visibility:hidden;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:""}span.CodeMirror-selectedtext{background:none}.CodeMirror-hints{background:#fff;border:1px solid silver;border-radius:3px;-webkit-box-shadow:2px 3px 5px rgba(0,0,0,.2);-moz-box-shadow:2px 3px 5px rgba(0,0,0,.2);box-shadow:2px 3px 5px rgba(0,0,0,.2);box-sizing:border-box;font-family:monospace;font-size:90%;list-style:none;margin:0;max-height:20em;overflow:hidden;overflow-y:auto;padding:2px;position:absolute;z-index:10}.CodeMirror-hint{border-radius:2px;color:#000;cursor:pointer;margin:0;padding:0 4px;white-space:pre}li.CodeMirror-hint-active{background:#08f;color:#fff}.CodeMirror-hints{z-index:100000000000000}';Ma(CS);const wS={props:{mode:{type:String,default:"text/html"},value:{type:String,default:""},attrs:{type:Object,default:()=>({})}},watch:{value(t){this.setValue(t)}},mounted(){this.editor=ci(this.$el,{autoCloseBrackets:!0,autoCloseTags:!0,autofocus:!1,dragDrop:!1,indentUnit:4,indentWithTabs:!1,lineNumbers:!0,lineWrapping:!0,matchBrackets:!0,matchTags:!0,mode:this.mode,tabSize:4,viewportMargin:2,placeholder:this.attrs.placeholder}),this.setValue(this.value),this.attrs.height&&this.$nextTick(()=>{this.editor.setSize(null,this.attrs.height)}),this.editor.on("change",()=>this.$emit("input",this.editor.getValue())),this.editor.on("inputRead",t=>{const e=t.getCursor(),r=t.getTokenAt(e),n=ci.innerMode(t.getMode(),r.state).mode.name;!["xml","css","less"].includes(n)||!r.string.trim()||(n==="xml"&&(r.string.startsWith("<")||r.type==="attribute")?ci.showHint(t,ci.hint.html,{completeSingle:!1}):(r.type&&n==="css"||n==="less")&&ci.showHint(t,()=>{let a=ci.hint.css(t);if(!a){const o=(this.attrs.hints||[]).filter(c=>c.startsWith(r.string));o.length&&(a={from:ci.Pos(e.line,r.start),to:ci.Pos(e.line,r.end),list:o})}return a},{completeSingle:!1}))})},methods:{setValue(t){this.editor.getValue()!==t&&this.editor.setValue(t||""),this.editor.refresh()},refresh(){this.editor.refresh()}}};var SS=function(){var e=this,r=e._self._c;return r("div")},xS=[],AS=Q(wS,SS,xS,!1),OS=AS.exports;var Or=Object.freeze({}),et=Array.isArray;function Xe(t){return t==null}function re(t){return t!=null}function Ot(t){return t===!0}function NS(t){return t===!1}function Vs(t){return typeof t=="string"||typeof t=="number"||typeof t=="symbol"||typeof t=="boolean"}function pt(t){return typeof t=="function"}function lr(t){return t!==null&&typeof t=="object"}var nf=Object.prototype.toString;function Br(t){return nf.call(t)==="[object Object]"}function PS(t){return nf.call(t)==="[object RegExp]"}function xv(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e&&isFinite(t)}function af(t){return re(t)&&typeof t.then=="function"&&typeof t.catch=="function"}function IS(t){return t==null?"":Array.isArray(t)||Br(t)&&t.toString===nf?JSON.stringify(t,null,2):String(t)}function Qs(t){var e=parseFloat(t);return isNaN(e)?t:e}function rn(t,e){for(var r=Object.create(null),n=t.split(","),a=0;a<n.length;a++)r[n[a]]=!0;return e?function(o){return r[o.toLowerCase()]}:function(o){return r[o]}}rn("slot,component",!0);var LS=rn("key,ref,slot,slot-scope,is");function fi(t,e){var r=t.length;if(r){if(e===t[r-1]){t.length=r-1;return}var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}var RS=Object.prototype.hasOwnProperty;function vr(t,e){return RS.call(t,e)}function Xi(t){var e=Object.create(null);return function(n){var a=e[n];return a||(e[n]=t(n))}}var DS=/-(\w)/g,Vi=Xi(function(t){return t.replace(DS,function(e,r){return r?r.toUpperCase():""})}),MS=Xi(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),$S=/\B([A-Z])/g,Js=Xi(function(t){return t.replace($S,"-$1").toLowerCase()});function FS(t,e){function r(n){var a=arguments.length;return a?a>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return r._length=t.length,r}function BS(t,e){return t.bind(e)}var Av=Function.prototype.bind?BS:FS;function sf(t,e){e=e||0;for(var r=t.length-e,n=new Array(r);r--;)n[r]=t[r+e];return n}function bt(t,e){for(var r in e)t[r]=e[r];return t}function Ov(t){for(var e={},r=0;r<t.length;r++)t[r]&&bt(e,t[r]);return e}function Ct(t,e,r){}var Bu=function(t,e,r){return!1},Nv=function(t){return t};function Qi(t,e){if(t===e)return!0;var r=lr(t),n=lr(e);if(r&&n)try{var a=Array.isArray(t),o=Array.isArray(e);if(a&&o)return t.length===e.length&&t.every(function(p,v){return Qi(p,e[v])});if(t instanceof Date&&e instanceof Date)return t.getTime()===e.getTime();if(!a&&!o){var c=Object.keys(t),d=Object.keys(e);return c.length===d.length&&c.every(function(p){return Qi(t[p],e[p])})}else return!1}catch{return!1}else return!r&&!n?String(t)===String(e):!1}function Pv(t,e){for(var r=0;r<t.length;r++)if(Qi(t[r],e))return r;return-1}function Hu(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function of(t,e){return t===e?t===0&&1/t!==1/e:t===t||e===e}var Iv="data-server-rendered",Uu=["component","directive","filter"],Lv=["beforeCreate","created","beforeMount","mounted","beforeUpdate","updated","beforeDestroy","destroyed","activated","deactivated","errorCaptured","serverPrefetch","renderTracked","renderTriggered"],qr={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,warnHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Bu,isReservedAttr:Bu,isUnknownElement:Bu,getTagNamespace:Ct,parsePlatformTagName:Nv,mustUseProp:Bu,async:!0,_lifecycleHooks:Lv},HS=/a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;function Rv(t){var e=(t+"").charCodeAt(0);return e===36||e===95}function gr(t,e,r,n){Object.defineProperty(t,e,{value:r,enumerable:!1,writable:!0,configurable:!0})}var US=new RegExp("[^".concat(HS.source,".$_\\d]"));function jS(t){if(!US.test(t)){var e=t.split(".");return function(r){for(var n=0;n<e.length;n++){if(!r)return;r=r[e[n]]}return r}}}var WS="__proto__"in{},Hr=typeof window<"u",Yr=Hr&&window.navigator.userAgent.toLowerCase(),$a=Yr&&/msie|trident/.test(Yr),Fa=Yr&&Yr.indexOf("msie 9.0")>0,Dv=Yr&&Yr.indexOf("edge/")>0;Yr&&Yr.indexOf("android")>0;var GS=Yr&&/iphone|ipad|ipod|ios/.test(Yr),Mv=Yr&&Yr.match(/firefox\/(\d+)/),uf={}.watch,$v=!1;if(Hr)try{var Fv={};Object.defineProperty(Fv,"passive",{get:function(){$v=!0}}),window.addEventListener("test-passive",null,Fv)}catch{}var ju,di=function(){return ju===void 0&&(!Hr&&typeof global<"u"?ju=global.process&&global.process.env.VUE_ENV==="server":ju=!1),ju},Wu=Hr&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function Ba(t){return typeof t=="function"&&/native code/.test(t.toString())}var Zs=typeof Symbol<"u"&&Ba(Symbol)&&typeof Reflect<"u"&&Ba(Reflect.ownKeys),eo;typeof Set<"u"&&Ba(Set)?eo=Set:eo=(function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(e){return this.set[e]===!0},t.prototype.add=function(e){this.set[e]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t})();var _r=null;function to(){return _r&&{proxy:_r}}function hi(t){t===void 0&&(t=null),t||_r&&_r._scope.off(),_r=t,t&&t._scope.on()}var Ur=(function(){function t(e,r,n,a,o,c,d,p){this.tag=e,this.data=r,this.children=n,this.text=a,this.elm=o,this.ns=void 0,this.context=c,this.fnContext=void 0,this.fnOptions=void 0,this.fnScopeId=void 0,this.key=r&&r.key,this.componentOptions=d,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1,this.asyncFactory=p,this.asyncMeta=void 0,this.isAsyncPlaceholder=!1}return Object.defineProperty(t.prototype,"child",{get:function(){return this.componentInstance},enumerable:!1,configurable:!0}),t})(),Ji=function(t){t===void 0&&(t="");var e=new Ur;return e.text=t,e.isComment=!0,e};function Ha(t){return new Ur(void 0,void 0,void 0,String(t))}function lf(t){var e=new Ur(t.tag,t.data,t.children&&t.children.slice(),t.text,t.elm,t.context,t.componentOptions,t.asyncFactory);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.fnContext=t.fnContext,e.fnOptions=t.fnOptions,e.fnScopeId=t.fnScopeId,e.asyncMeta=t.asyncMeta,e.isCloned=!0,e}var zS=0,Gu=[],qS=function(){for(var t=0;t<Gu.length;t++){var e=Gu[t];e.subs=e.subs.filter(function(r){return r}),e._pending=!1}Gu.length=0},Fn=(function(){function t(){this._pending=!1,this.id=zS++,this.subs=[]}return t.prototype.addSub=function(e){this.subs.push(e)},t.prototype.removeSub=function(e){this.subs[this.subs.indexOf(e)]=null,this._pending||(this._pending=!0,Gu.push(this))},t.prototype.depend=function(e){t.target&&t.target.addDep(this)},t.prototype.notify=function(e){for(var r=this.subs.filter(function(c){return c}),n=0,a=r.length;n<a;n++){var o=r[n];o.update()}},t})();Fn.target=null;var zu=[];function Ua(t){zu.push(t),Fn.target=t}function ja(){zu.pop(),Fn.target=zu[zu.length-1]}var Bv=Array.prototype,qu=Object.create(Bv),YS=["push","pop","shift","unshift","splice","sort","reverse"];YS.forEach(function(t){var e=Bv[t];gr(qu,t,function(){for(var n=[],a=0;a<arguments.length;a++)n[a]=arguments[a];var o=e.apply(this,n),c=this.__ob__,d;switch(t){case"push":case"unshift":d=n;break;case"splice":d=n.slice(2);break}return d&&c.observeArray(d),c.dep.notify(),o})});var Hv=Object.getOwnPropertyNames(qu),Uv={},cf=!0;function pi(t){cf=t}var KS={notify:Ct,depend:Ct,addSub:Ct,removeSub:Ct},jv=(function(){function t(e,r,n){if(r===void 0&&(r=!1),n===void 0&&(n=!1),this.value=e,this.shallow=r,this.mock=n,this.dep=n?KS:new Fn,this.vmCount=0,gr(e,"__ob__",this),et(e)){if(!n)if(WS)e.__proto__=qu;else for(var a=0,o=Hv.length;a<o;a++){var c=Hv[a];gr(e,c,qu[c])}r||this.observeArray(e)}else for(var d=Object.keys(e),a=0;a<d.length;a++){var c=d[a];mi(e,c,Uv,void 0,r,n)}}return t.prototype.observeArray=function(e){for(var r=0,n=e.length;r<n;r++)Bn(e[r],!1,this.mock)},t})();function Bn(t,e,r){if(t&&vr(t,"__ob__")&&t.__ob__ instanceof jv)return t.__ob__;if(cf&&(r||!di())&&(et(t)||Br(t))&&Object.isExtensible(t)&&!t.__v_skip&&!Wt(t)&&!(t instanceof Ur))return new jv(t,e,r)}function mi(t,e,r,n,a,o){var c=new Fn,d=Object.getOwnPropertyDescriptor(t,e);if(!(d&&d.configurable===!1)){var p=d&&d.get,v=d&&d.set;(!p||v)&&(r===Uv||arguments.length===2)&&(r=t[e]);var b=!a&&Bn(r,!1,o);return Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){var T=p?p.call(t):r;return Fn.target&&(c.depend(),b&&(b.dep.depend(),et(T)&&Wv(T))),Wt(T)&&!a?T.value:T},set:function(T){var A=p?p.call(t):r;if(of(A,T)){if(v)v.call(t,T);else{if(p)return;if(!a&&Wt(A)&&!Wt(T)){A.value=T;return}else r=T}b=!a&&Bn(T,!1,o),c.notify()}}}),c}}function mt(t,e,r){if(!Yu(t)){var n=t.__ob__;return et(t)&&xv(e)?(t.length=Math.max(t.length,e),t.splice(e,1,r),n&&!n.shallow&&n.mock&&Bn(r,!1,!0),r):e in t&&!(e in Object.prototype)?(t[e]=r,r):t._isVue||n&&n.vmCount?r:n?(mi(n.value,e,r,void 0,n.shallow,n.mock),n.dep.notify(),r):(t[e]=r,r)}}function Zi(t,e){if(et(t)&&xv(e)){t.splice(e,1);return}var r=t.__ob__;t._isVue||r&&r.vmCount||Yu(t)||vr(t,e)&&(delete t[e],r&&r.dep.notify())}function Wv(t){for(var e=void 0,r=0,n=t.length;r<n;r++)e=t[r],e&&e.__ob__&&e.__ob__.dep.depend(),et(e)&&Wv(e)}function Jt(t){return zv(t,!1),t}function Gv(t){return zv(t,!0),gr(t,"__v_isShallow",!0),t}function zv(t,e){Yu(t)||Bn(t,e,di())}function Wa(t){return Yu(t)?Wa(t.__v_raw):!!(t&&t.__ob__)}function qv(t){return!!(t&&t.__v_isShallow)}function Yu(t){return!!(t&&t.__v_isReadonly)}function ro(t){var e=t&&t.__v_raw;return e?ro(e):t}function no(t){return Object.isExtensible(t)&&gr(t,"__v_skip",!0),t}var ff="__v_isRef";function Wt(t){return!!(t&&t.__v_isRef===!0)}function Be(t){return XS(t,!1)}function XS(t,e){if(Wt(t))return t;var r={};return gr(r,ff,!0),gr(r,"__v_isShallow",e),gr(r,"dep",mi(r,"value",t,null,e,di())),r}function VS(t){return Wt(t)?t.value:t}function df(t,e,r){Object.defineProperty(t,r,{enumerable:!0,configurable:!0,get:function(){var n=e[r];if(Wt(n))return n.value;var a=n&&n.__ob__;return a&&a.dep.depend(),n},set:function(n){var a=e[r];Wt(a)&&!Wt(n)?a.value=n:e[r]=n}})}function QS(t){var e=et(t)?new Array(t.length):{};for(var r in t)e[r]=JS(t,r);return e}function JS(t,e,r){var n=t[e];if(Wt(n))return n;var a={get value(){var o=t[e];return o===void 0?r:o},set value(o){t[e]=o}};return gr(a,ff,!0),a}function Ae(t,e){var r,n,a=pt(t);a?(r=t,n=Ct):(r=t.get,n=t.set);var o=di()?null:new uo(_r,r,Ct,{lazy:!0}),c={effect:o,get value(){return o?(o.dirty&&o.evaluate(),Fn.target&&o.depend(),o.value):r()},set value(d){n(d)}};return gr(c,ff,!0),gr(c,"__v_isReadonly",a),c}var Ku="watcher",Yv="".concat(Ku," callback"),Kv="".concat(Ku," getter"),ZS="".concat(Ku," cleanup");function hf(t,e){return pf(t,null,e)}function Xv(t,e){return pf(t,null,{flush:"post"})}var Vv={};function gt(t,e,r){return pf(t,e,r)}function pf(t,e,r){var n=r===void 0?Or:r,a=n.immediate,o=n.deep,c=n.flush,d=c===void 0?"pre":c;n.onTrack,n.onTrigger;var p=_r,v=function(x,S,P){return P===void 0&&(P=null),Hn(x,null,P,p,S)},b,C=!1,T=!1;if(Wt(t)?(b=function(){return t.value},C=qv(t)):Wa(t)?(b=function(){return t.__ob__.dep.depend(),t},o=!0):et(t)?(T=!0,C=t.some(function(x){return Wa(x)||qv(x)}),b=function(){return t.map(function(x){if(Wt(x))return x.value;if(Wa(x))return za(x);if(pt(x))return v(x,Kv)})}):pt(t)?e?b=function(){return v(t,Kv)}:b=function(){if(!(p&&p._isDestroyed))return F&&F(),v(t,Ku,[G])}:b=Ct,e&&o){var A=b;b=function(){return za(A())}}var F,G=function(x){F=j.onStop=function(){v(x,ZS)}};if(di())return G=Ct,e?a&&v(e,Yv,[b(),T?[]:void 0,G]):b(),Ct;var j=new uo(_r,b,Ct,{lazy:!0});j.noRecurse=!e;var O=T?[]:Vv;return j.run=function(){if(j.active)if(e){var x=j.get();(o||C||(T?x.some(function(S,P){return of(S,O[P])}):of(x,O)))&&(F&&F(),v(e,Yv,[x,O===Vv?void 0:O,G]),O=x)}else j.get()},d==="sync"?j.update=j.run:d==="post"?(j.post=!0,j.update=function(){return Of(j)}):j.update=function(){if(p&&p===_r&&!p._isMounted){var x=p._preWatchers||(p._preWatchers=[]);x.indexOf(j)<0&&x.push(j)}else Of(j)},e?a?j.run():O=j.get():d==="post"&&p?p.$once("hook:mounted",function(){return j.get()}):j.get(),function(){j.teardown()}}var cr,Qv=(function(){function t(e){e===void 0&&(e=!1),this.detached=e,this.active=!0,this.effects=[],this.cleanups=[],this.parent=cr,!e&&cr&&(this.index=(cr.scopes||(cr.scopes=[])).push(this)-1)}return t.prototype.run=function(e){if(this.active){var r=cr;try{return cr=this,e()}finally{cr=r}}},t.prototype.on=function(){cr=this},t.prototype.off=function(){cr=this.parent},t.prototype.stop=function(e){if(this.active){var r=void 0,n=void 0;for(r=0,n=this.effects.length;r<n;r++)this.effects[r].teardown();for(r=0,n=this.cleanups.length;r<n;r++)this.cleanups[r]();if(this.scopes)for(r=0,n=this.scopes.length;r<n;r++)this.scopes[r].stop(!0);if(!this.detached&&this.parent&&!e){var a=this.parent.scopes.pop();a&&a!==this&&(this.parent.scopes[this.index]=a,a.index=this.index)}this.parent=void 0,this.active=!1}},t})();function Jv(t){return new Qv(t)}function ex(t,e){e===void 0&&(e=cr),e&&e.active&&e.effects.push(t)}function Zv(){return cr}function tx(t){cr&&cr.cleanups.push(t)}function br(t,e){_r&&(eg(_r)[t]=e)}function eg(t){var e=t._provided,r=t.$parent&&t.$parent._provided;return r===e?t._provided=Object.create(r):e}function st(t,e,r){r===void 0&&(r=!1);var n=_r;if(n){var a=n.$parent&&n.$parent._provided;if(a&&t in a)return a[t];if(arguments.length>1)return r&&pt(e)?e.call(n):e}}var tg=Xi(function(t){var e=t.charAt(0)==="&";t=e?t.slice(1):t;var r=t.charAt(0)==="~";t=r?t.slice(1):t;var n=t.charAt(0)==="!";return t=n?t.slice(1):t,{name:t,once:r,capture:n,passive:e}});function mf(t,e){function r(){var n=r.fns;if(et(n))for(var a=n.slice(),o=0;o<a.length;o++)Hn(a[o],null,arguments,e,"v-on handler");else return Hn(n,null,arguments,e,"v-on handler")}return r.fns=t,r}function rg(t,e,r,n,a,o){var c,d,p,v;for(c in t)d=t[c],p=e[c],v=tg(c),Xe(d)||(Xe(p)?(Xe(d.fns)&&(d=t[c]=mf(d,o)),Ot(v.once)&&(d=t[c]=a(v.name,d,v.capture)),r(v.name,d,v.capture,v.passive,v.params)):d!==p&&(p.fns=d,t[c]=p));for(c in e)Xe(t[c])&&(v=tg(c),n(v.name,e[c],v.capture))}function vi(t,e,r){t instanceof Ur&&(t=t.data.hook||(t.data.hook={}));var n,a=t[e];function o(){r.apply(this,arguments),fi(n.fns,o)}Xe(a)?n=mf([o]):re(a.fns)&&Ot(a.merged)?(n=a,n.fns.push(o)):n=mf([a,o]),n.merged=!0,t[e]=n}function rx(t,e,r){var n=e.options.props;if(!Xe(n)){var a={},o=t.attrs,c=t.props;if(re(o)||re(c))for(var d in n){var p=Js(d);ng(a,c,d,p,!0)||ng(a,o,d,p,!1)}return a}}function ng(t,e,r,n,a){if(re(e)){if(vr(e,r))return t[r]=e[r],a||delete e[r],!0;if(vr(e,n))return t[r]=e[n],a||delete e[n],!0}return!1}function nx(t){for(var e=0;e<t.length;e++)if(et(t[e]))return Array.prototype.concat.apply([],t);return t}function vf(t){return Vs(t)?[Ha(t)]:et(t)?ig(t):void 0}function io(t){return re(t)&&re(t.text)&&NS(t.isComment)}function ig(t,e){var r=[],n,a,o,c;for(n=0;n<t.length;n++)a=t[n],!(Xe(a)||typeof a=="boolean")&&(o=r.length-1,c=r[o],et(a)?a.length>0&&(a=ig(a,"".concat(e||"","_").concat(n)),io(a[0])&&io(c)&&(r[o]=Ha(c.text+a[0].text),a.shift()),r.push.apply(r,a)):Vs(a)?io(c)?r[o]=Ha(c.text+a):a!==""&&r.push(Ha(a)):io(a)&&io(c)?r[o]=Ha(c.text+a.text):(Ot(t._isVList)&&re(a.tag)&&Xe(a.key)&&re(e)&&(a.key="__vlist".concat(e,"_").concat(n,"__")),r.push(a)));return r}function ix(t,e){var r=null,n,a,o,c;if(et(t)||typeof t=="string")for(r=new Array(t.length),n=0,a=t.length;n<a;n++)r[n]=e(t[n],n);else if(typeof t=="number")for(r=new Array(t),n=0;n<t;n++)r[n]=e(n+1,n);else if(lr(t))if(Zs&&t[Symbol.iterator]){r=[];for(var d=t[Symbol.iterator](),p=d.next();!p.done;)r.push(e(p.value,r.length)),p=d.next()}else for(o=Object.keys(t),r=new Array(o.length),n=0,a=o.length;n<a;n++)c=o[n],r[n]=e(t[c],c,n);return re(r)||(r=[]),r._isVList=!0,r}function ax(t,e,r,n){var a=this.$scopedSlots[t],o;a?(r=r||{},n&&(r=bt(bt({},n),r)),o=a(r)||(pt(e)?e():e)):o=this.$slots[t]||(pt(e)?e():e);var c=r&&r.slot;return c?this.$createElement("template",{slot:c},o):o}function sx(t){return il(this.$options,"filters",t)||Nv}function ag(t,e){return et(t)?t.indexOf(e)===-1:t!==e}function ox(t,e,r,n,a){var o=qr.keyCodes[e]||r;return a&&n&&!qr.keyCodes[e]?ag(a,n):o?ag(o,t):n?Js(n)!==e:t===void 0}function ux(t,e,r,n,a){if(r&&lr(r)){et(r)&&(r=Ov(r));var o=void 0,c=function(p){if(p==="class"||p==="style"||LS(p))o=t;else{var v=t.attrs&&t.attrs.type;o=n||qr.mustUseProp(e,v,p)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}var b=Vi(p),C=Js(p);if(!(b in o)&&!(C in o)&&(o[p]=r[p],a)){var T=t.on||(t.on={});T["update:".concat(p)]=function(A){r[p]=A}}};for(var d in r)c(d)}return t}function lx(t,e){var r=this._staticTrees||(this._staticTrees=[]),n=r[t];return n&&!e||(n=r[t]=this.$options.staticRenderFns[t].call(this._renderProxy,this._c,this),sg(n,"__static__".concat(t),!1)),n}function cx(t,e,r){return sg(t,"__once__".concat(e).concat(r?"_".concat(r):""),!0),t}function sg(t,e,r){if(et(t))for(var n=0;n<t.length;n++)t[n]&&typeof t[n]!="string"&&og(t[n],"".concat(e,"_").concat(n),r);else og(t,e,r)}function og(t,e,r){t.isStatic=!0,t.key=e,t.isOnce=r}function fx(t,e){if(e&&Br(e)){var r=t.on=t.on?bt({},t.on):{};for(var n in e){var a=r[n],o=e[n];r[n]=a?[].concat(a,o):o}}return t}function ug(t,e,r,n){e=e||{$stable:!r};for(var a=0;a<t.length;a++){var o=t[a];et(o)?ug(o,e,r):o&&(o.proxy&&(o.fn.proxy=!0),e[o.key]=o.fn)}return n&&(e.$key=n),e}function dx(t,e){for(var r=0;r<e.length;r+=2){var n=e[r];typeof n=="string"&&n&&(t[e[r]]=e[r+1])}return t}function hx(t,e){return typeof t=="string"?e+t:t}function lg(t){t._o=cx,t._n=Qs,t._s=IS,t._l=ix,t._t=ax,t._q=Qi,t._i=Pv,t._m=lx,t._f=sx,t._k=ox,t._b=ux,t._v=Ha,t._e=Ji,t._u=ug,t._g=fx,t._d=dx,t._p=hx}function gf(t,e){if(!t||!t.length)return{};for(var r={},n=0,a=t.length;n<a;n++){var o=t[n],c=o.data;if(c&&c.attrs&&c.attrs.slot&&delete c.attrs.slot,(o.context===e||o.fnContext===e)&&c&&c.slot!=null){var d=c.slot,p=r[d]||(r[d]=[]);o.tag==="template"?p.push.apply(p,o.children||[]):p.push(o)}else(r.default||(r.default=[])).push(o)}for(var v in r)r[v].every(px)&&delete r[v];return r}function px(t){return t.isComment&&!t.asyncFactory||t.text===" "}function ao(t){return t.isComment&&t.asyncFactory}function so(t,e,r,n){var a,o=Object.keys(r).length>0,c=e?!!e.$stable:!o,d=e&&e.$key;if(!e)a={};else{if(e._normalized)return e._normalized;if(c&&n&&n!==Or&&d===n.$key&&!o&&!n.$hasNormal)return n;a={};for(var p in e)e[p]&&p[0]!=="$"&&(a[p]=mx(t,r,p,e[p]))}for(var v in r)v in a||(a[v]=vx(r,v));return e&&Object.isExtensible(e)&&(e._normalized=a),gr(a,"$stable",c),gr(a,"$key",d),gr(a,"$hasNormal",o),a}function mx(t,e,r,n){var a=function(){var o=_r;hi(t);var c=arguments.length?n.apply(null,arguments):n({});c=c&&typeof c=="object"&&!et(c)?[c]:vf(c);var d=c&&c[0];return hi(o),c&&(!d||c.length===1&&d.isComment&&!ao(d))?void 0:c};return n.proxy&&Object.defineProperty(e,r,{get:a,enumerable:!0,configurable:!0}),a}function vx(t,e){return function(){return t[e]}}function gx(t){var e=t.$options,r=e.setup;if(r){var n=t._setupContext=_x(t);hi(t),Ua();var a=Hn(r,null,[t._props||Gv({}),n],t,"setup");if(ja(),hi(),pt(a))e.render=a;else if(lr(a))if(t._setupState=a,a.__sfc){var c=t._setupProxy={};for(var o in a)o!=="__sfc"&&df(c,a,o)}else for(var o in a)Rv(o)||df(t,a,o)}}function _x(t){return{get attrs(){if(!t._attrsProxy){var e=t._attrsProxy={};gr(e,"_v_attr_proxy",!0),Xu(e,t.$attrs,Or,t,"$attrs")}return t._attrsProxy},get listeners(){if(!t._listenersProxy){var e=t._listenersProxy={};Xu(e,t.$listeners,Or,t,"$listeners")}return t._listenersProxy},get slots(){return yx(t)},emit:Av(t.$emit,t),expose:function(e){e&&Object.keys(e).forEach(function(r){return df(t,e,r)})}}}function Xu(t,e,r,n,a){var o=!1;for(var c in e)c in t?e[c]!==r[c]&&(o=!0):(o=!0,bx(t,c,n,a));for(var c in t)c in e||(o=!0,delete t[c]);return o}function bx(t,e,r,n){Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){return r[n][e]}})}function yx(t){return t._slotsProxy||cg(t._slotsProxy={},t.$scopedSlots),t._slotsProxy}function cg(t,e){for(var r in e)t[r]=e[r];for(var r in t)r in e||delete t[r]}function kx(t){t._vnode=null,t._staticTrees=null;var e=t.$options,r=t.$vnode=e._parentVnode,n=r&&r.context;t.$slots=gf(e._renderChildren,n),t.$scopedSlots=r?so(t.$parent,r.data.scopedSlots,t.$slots):Or,t._c=function(o,c,d,p){return Vu(t,o,c,d,p,!1)},t.$createElement=function(o,c,d,p){return Vu(t,o,c,d,p,!0)};var a=r&&r.data;mi(t,"$attrs",a&&a.attrs||Or,null,!0),mi(t,"$listeners",e._parentListeners||Or,null,!0)}var _f=null;function Ex(t){lg(t.prototype),t.prototype.$nextTick=function(e){return Tn(e,this)},t.prototype._render=function(){var e=this,r=e.$options,n=r.render,a=r._parentVnode;a&&e._isMounted&&(e.$scopedSlots=so(e.$parent,a.data.scopedSlots,e.$slots,e.$scopedSlots),e._slotsProxy&&cg(e._slotsProxy,e.$scopedSlots)),e.$vnode=a;var o;try{hi(e),_f=e,o=n.call(e._renderProxy,e.$createElement)}catch(c){ea(c,e,"render"),o=e._vnode}finally{_f=null,hi()}return et(o)&&o.length===1&&(o=o[0]),o instanceof Ur||(o=Ji()),o.parent=a,o}}function bf(t,e){return(t.__esModule||Zs&&t[Symbol.toStringTag]==="Module")&&(t=t.default),lr(t)?e.extend(t):t}function Tx(t,e,r,n,a){var o=Ji();return o.asyncFactory=t,o.asyncMeta={data:e,context:r,children:n,tag:a},o}function Cx(t,e){if(Ot(t.error)&&re(t.errorComp))return t.errorComp;if(re(t.resolved))return t.resolved;var r=_f;if(r&&re(t.owners)&&t.owners.indexOf(r)===-1&&t.owners.push(r),Ot(t.loading)&&re(t.loadingComp))return t.loadingComp;if(r&&!re(t.owners)){var n=t.owners=[r],a=!0,o=null,c=null;r.$on("hook:destroyed",function(){return fi(n,r)});var d=function(C){for(var T=0,A=n.length;T<A;T++)n[T].$forceUpdate();C&&(n.length=0,o!==null&&(clearTimeout(o),o=null),c!==null&&(clearTimeout(c),c=null))},p=Hu(function(C){t.resolved=bf(C,e),a?n.length=0:d(!0)}),v=Hu(function(C){re(t.errorComp)&&(t.error=!0,d(!0))}),b=t(p,v);return lr(b)&&(af(b)?Xe(t.resolved)&&b.then(p,v):af(b.component)&&(b.component.then(p,v),re(b.error)&&(t.errorComp=bf(b.error,e)),re(b.loading)&&(t.loadingComp=bf(b.loading,e),b.delay===0?t.loading=!0:o=setTimeout(function(){o=null,Xe(t.resolved)&&Xe(t.error)&&(t.loading=!0,d(!1))},b.delay||200)),re(b.timeout)&&(c=setTimeout(function(){c=null,Xe(t.resolved)&&v(null)},b.timeout)))),a=!1,t.loading?t.loadingComp:t.resolved}}function fg(t){if(et(t))for(var e=0;e<t.length;e++){var r=t[e];if(re(r)&&(re(r.componentOptions)||ao(r)))return r}}var wx=1,dg=2;function Vu(t,e,r,n,a,o){return(et(r)||Vs(r))&&(a=n,n=r,r=void 0),Ot(o)&&(a=dg),Sx(t,e,r,n,a)}function Sx(t,e,r,n,a){if(re(r)&&re(r.__ob__)||(re(r)&&re(r.is)&&(e=r.is),!e))return Ji();et(n)&&pt(n[0])&&(r=r||{},r.scopedSlots={default:n[0]},n.length=0),a===dg?n=vf(n):a===wx&&(n=nx(n));var o,c;if(typeof e=="string"){var d=void 0;c=t.$vnode&&t.$vnode.ns||qr.getTagNamespace(e),qr.isReservedTag(e)?o=new Ur(qr.parsePlatformTagName(e),r,n,void 0,void 0,t):(!r||!r.pre)&&re(d=il(t.$options,"components",e))?o=xg(d,r,t,n,e):o=new Ur(e,r,n,void 0,void 0,t)}else o=xg(e,r,t,n);return et(o)?o:re(o)?(re(c)&&hg(o,c),re(r)&&xx(r),o):Ji()}function hg(t,e,r){if(t.ns=e,t.tag==="foreignObject"&&(e=void 0,r=!0),re(t.children))for(var n=0,a=t.children.length;n<a;n++){var o=t.children[n];re(o.tag)&&(Xe(o.ns)||Ot(r)&&o.tag!=="svg")&&hg(o,e,r)}}function xx(t){lr(t.style)&&za(t.style),lr(t.class)&&za(t.class)}function ea(t,e,r){Ua();try{if(e)for(var n=e;n=n.$parent;){var a=n.$options.errorCaptured;if(a)for(var o=0;o<a.length;o++)try{var c=a[o].call(n,t,e,r)===!1;if(c)return}catch(d){pg(d,n,"errorCaptured hook")}}pg(t,e,r)}finally{ja()}}function Hn(t,e,r,n,a){var o;try{o=r?t.apply(e,r):t.call(e),o&&!o._isVue&&af(o)&&!o._handled&&(o.catch(function(c){return ea(c,n,a+" (Promise/async)")}),o._handled=!0)}catch(c){ea(c,n,a)}return o}function pg(t,e,r){if(qr.errorHandler)try{return qr.errorHandler.call(null,t,e,r)}catch(n){n!==t&&mg(n)}mg(t)}function mg(t,e,r){if(Hr&&typeof console<"u")console.error(t);else throw t}var yf=!1,kf=[],Ef=!1;function Qu(){Ef=!1;var t=kf.slice(0);kf.length=0;for(var e=0;e<t.length;e++)t[e]()}var oo;if(typeof Promise<"u"&&Ba(Promise)){var Ax=Promise.resolve();oo=function(){Ax.then(Qu),GS&&setTimeout(Ct)},yf=!0}else if(!$a&&typeof MutationObserver<"u"&&(Ba(MutationObserver)||MutationObserver.toString()==="[object MutationObserverConstructor]")){var Ju=1,Ox=new MutationObserver(Qu),vg=document.createTextNode(String(Ju));Ox.observe(vg,{characterData:!0}),oo=function(){Ju=(Ju+1)%2,vg.data=String(Ju)},yf=!0}else typeof setImmediate<"u"&&Ba(setImmediate)?oo=function(){setImmediate(Qu)}:oo=function(){setTimeout(Qu,0)};function Tn(t,e){var r;if(kf.push(function(){if(t)try{t.call(e)}catch(n){ea(n,e,"nextTick")}else r&&r(e)}),Ef||(Ef=!0,oo()),!t&&typeof Promise<"u")return new Promise(function(n){r=n})}function Zu(t){return function(e,r){if(r===void 0&&(r=_r),!!r)return Nx(r,t,e)}}function Nx(t,e,r){var n=t.$options;n[e]=Og(n[e],r)}var el=Zu("beforeMount"),Gt=Zu("mounted"),Nr=Zu("beforeDestroy"),Ga=Zu("destroyed"),Px="2.7.15",gg=new eo;function za(t){return tl(t,gg),gg.clear(),t}function tl(t,e){var r,n,a=et(t);if(!(!a&&!lr(t)||t.__v_skip||Object.isFrozen(t)||t instanceof Ur)){if(t.__ob__){var o=t.__ob__.dep.id;if(e.has(o))return;e.add(o)}if(a)for(r=t.length;r--;)tl(t[r],e);else if(Wt(t))tl(t.value,e);else for(n=Object.keys(t),r=n.length;r--;)tl(t[n[r]],e)}}var Ix=0,uo=(function(){function t(e,r,n,a,o){ex(this,cr&&!cr._vm?cr:e?e._scope:void 0),(this.vm=e)&&o&&(e._watcher=this),a?(this.deep=!!a.deep,this.user=!!a.user,this.lazy=!!a.lazy,this.sync=!!a.sync,this.before=a.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Ix,this.active=!0,this.post=!1,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new eo,this.newDepIds=new eo,this.expression="",pt(r)?this.getter=r:(this.getter=jS(r),this.getter||(this.getter=Ct)),this.value=this.lazy?void 0:this.get()}return t.prototype.get=function(){Ua(this);var e,r=this.vm;try{e=this.getter.call(r,r)}catch(n){if(this.user)ea(n,r,'getter for watcher "'.concat(this.expression,'"'));else throw n}finally{this.deep&&za(e),ja(),this.cleanupDeps()}return e},t.prototype.addDep=function(e){var r=e.id;this.newDepIds.has(r)||(this.newDepIds.add(r),this.newDeps.push(e),this.depIds.has(r)||e.addSub(this))},t.prototype.cleanupDeps=function(){for(var e=this.deps.length;e--;){var r=this.deps[e];this.newDepIds.has(r.id)||r.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},t.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():Of(this)},t.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||lr(e)||this.deep){var r=this.value;if(this.value=e,this.user){var n='callback for watcher "'.concat(this.expression,'"');Hn(this.cb,this.vm,[e,r],this.vm,n)}else this.cb.call(this.vm,e,r)}}},t.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},t.prototype.depend=function(){for(var e=this.deps.length;e--;)this.deps[e].depend()},t.prototype.teardown=function(){if(this.vm&&!this.vm._isBeingDestroyed&&fi(this.vm._scope.effects,this),this.active){for(var e=this.deps.length;e--;)this.deps[e].removeSub(this);this.active=!1,this.onStop&&this.onStop()}},t})();function Lx(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&_g(t,e)}var lo;function Rx(t,e){lo.$on(t,e)}function Dx(t,e){lo.$off(t,e)}function Mx(t,e){var r=lo;return function n(){var a=e.apply(null,arguments);a!==null&&r.$off(t,n)}}function _g(t,e,r){lo=t,rg(e,r||{},Rx,Dx,Mx,t),lo=void 0}function $x(t){var e=/^hook:/;t.prototype.$on=function(r,n){var a=this;if(et(r))for(var o=0,c=r.length;o<c;o++)a.$on(r[o],n);else(a._events[r]||(a._events[r]=[])).push(n),e.test(r)&&(a._hasHookEvent=!0);return a},t.prototype.$once=function(r,n){var a=this;function o(){a.$off(r,o),n.apply(a,arguments)}return o.fn=n,a.$on(r,o),a},t.prototype.$off=function(r,n){var a=this;if(!arguments.length)return a._events=Object.create(null),a;if(et(r)){for(var o=0,c=r.length;o<c;o++)a.$off(r[o],n);return a}var d=a._events[r];if(!d)return a;if(!n)return a._events[r]=null,a;for(var p,v=d.length;v--;)if(p=d[v],p===n||p.fn===n){d.splice(v,1);break}return a},t.prototype.$emit=function(r){var n=this,a=n._events[r];if(a){a=a.length>1?sf(a):a;for(var o=sf(arguments,1),c='event handler for "'.concat(r,'"'),d=0,p=a.length;d<p;d++)Hn(a[d],n,o,n,c)}return n}}var ta=null;function bg(t){var e=ta;return ta=t,function(){ta=e}}function Fx(t){var e=t.$options,r=e.parent;if(r&&!e.abstract){for(;r.$options.abstract&&r.$parent;)r=r.$parent;r.$children.push(t)}t.$parent=r,t.$root=r?r.$root:t,t.$children=[],t.$refs={},t._provided=r?r._provided:Object.create(null),t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}function Bx(t){t.prototype._update=function(e,r){var n=this,a=n.$el,o=n._vnode,c=bg(n);n._vnode=e,o?n.$el=n.__patch__(o,e):n.$el=n.__patch__(n.$el,e,r,!1),c(),a&&(a.__vue__=null),n.$el&&(n.$el.__vue__=n);for(var d=n;d&&d.$vnode&&d.$parent&&d.$vnode===d.$parent._vnode;)d.$parent.$el=d.$el,d=d.$parent},t.prototype.$forceUpdate=function(){var e=this;e._watcher&&e._watcher.update()},t.prototype.$destroy=function(){var e=this;if(!e._isBeingDestroyed){nn(e,"beforeDestroy"),e._isBeingDestroyed=!0;var r=e.$parent;r&&!r._isBeingDestroyed&&!e.$options.abstract&&fi(r.$children,e),e._scope.stop(),e._data.__ob__&&e._data.__ob__.vmCount--,e._isDestroyed=!0,e.__patch__(e._vnode,null),nn(e,"destroyed"),e.$off(),e.$el&&(e.$el.__vue__=null),e.$vnode&&(e.$vnode.parent=null)}}}function Hx(t,e,r){t.$el=e,t.$options.render||(t.$options.render=Ji),nn(t,"beforeMount");var n;n=function(){t._update(t._render(),r)};var a={before:function(){t._isMounted&&!t._isDestroyed&&nn(t,"beforeUpdate")}};new uo(t,n,Ct,a,!0),r=!1;var o=t._preWatchers;if(o)for(var c=0;c<o.length;c++)o[c].run();return t.$vnode==null&&(t._isMounted=!0,nn(t,"mounted")),t}function Ux(t,e,r,n,a){var o=n.data.scopedSlots,c=t.$scopedSlots,d=!!(o&&!o.$stable||c!==Or&&!c.$stable||o&&t.$scopedSlots.$key!==o.$key||!o&&t.$scopedSlots.$key),p=!!(a||t.$options._renderChildren||d),v=t.$vnode;t.$options._parentVnode=n,t.$vnode=n,t._vnode&&(t._vnode.parent=n),t.$options._renderChildren=a;var b=n.data.attrs||Or;t._attrsProxy&&Xu(t._attrsProxy,b,v.data&&v.data.attrs||Or,t,"$attrs")&&(p=!0),t.$attrs=b,r=r||Or;var C=t.$options._parentListeners;if(t._listenersProxy&&Xu(t._listenersProxy,r,C||Or,t,"$listeners"),t.$listeners=t.$options._parentListeners=r,_g(t,r,C),e&&t.$options.props){pi(!1);for(var T=t._props,A=t.$options._propKeys||[],F=0;F<A.length;F++){var G=A[F],j=t.$options.props;T[G]=If(G,j,e,t)}pi(!0),t.$options.propsData=e}p&&(t.$slots=gf(a,n.context),t.$forceUpdate())}function yg(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function Tf(t,e){if(e){if(t._directInactive=!1,yg(t))return}else if(t._directInactive)return;if(t._inactive||t._inactive===null){t._inactive=!1;for(var r=0;r<t.$children.length;r++)Tf(t.$children[r]);nn(t,"activated")}}function kg(t,e){if(!(e&&(t._directInactive=!0,yg(t)))&&!t._inactive){t._inactive=!0;for(var r=0;r<t.$children.length;r++)kg(t.$children[r]);nn(t,"deactivated")}}function nn(t,e,r,n){n===void 0&&(n=!0),Ua();var a=_r,o=Zv();n&&hi(t);var c=t.$options[e],d="".concat(e," hook");if(c)for(var p=0,v=c.length;p<v;p++)Hn(c[p],t,null,t,d);t._hasHookEvent&&t.$emit("hook:"+e),n&&(hi(a),o&&o.on()),ja()}var Un=[],Cf=[],rl={},wf=!1,Sf=!1,qa=0;function jx(){qa=Un.length=Cf.length=0,rl={},wf=Sf=!1}var Eg=0,xf=Date.now;if(Hr&&!$a){var Af=window.performance;Af&&typeof Af.now=="function"&&xf()>document.createEvent("Event").timeStamp&&(xf=function(){return Af.now()})}var Wx=function(t,e){if(t.post){if(!e.post)return 1}else if(e.post)return-1;return t.id-e.id};function Gx(){Eg=xf(),Sf=!0;var t,e;for(Un.sort(Wx),qa=0;qa<Un.length;qa++)t=Un[qa],t.before&&t.before(),e=t.id,rl[e]=null,t.run();var r=Cf.slice(),n=Un.slice();jx(),Yx(r),zx(n),qS(),Wu&&qr.devtools&&Wu.emit("flush")}function zx(t){for(var e=t.length;e--;){var r=t[e],n=r.vm;n&&n._watcher===r&&n._isMounted&&!n._isDestroyed&&nn(n,"updated")}}function qx(t){t._inactive=!1,Cf.push(t)}function Yx(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,Tf(t[e],!0)}function Of(t){var e=t.id;if(rl[e]==null&&!(t===Fn.target&&t.noRecurse)){if(rl[e]=!0,!Sf)Un.push(t);else{for(var r=Un.length-1;r>qa&&Un[r].id>t.id;)r--;Un.splice(r+1,0,t)}wf||(wf=!0,Tn(Gx))}}function Kx(t){var e=t.$options.provide;if(e){var r=pt(e)?e.call(t):e;if(!lr(r))return;for(var n=eg(t),a=Zs?Reflect.ownKeys(r):Object.keys(r),o=0;o<a.length;o++){var c=a[o];Object.defineProperty(n,c,Object.getOwnPropertyDescriptor(r,c))}}}function Xx(t){var e=Tg(t.$options.inject,t);e&&(pi(!1),Object.keys(e).forEach(function(r){mi(t,r,e[r])}),pi(!0))}function Tg(t,e){if(t){for(var r=Object.create(null),n=Zs?Reflect.ownKeys(t):Object.keys(t),a=0;a<n.length;a++){var o=n[a];if(o!=="__ob__"){var c=t[o].from;if(c in e._provided)r[o]=e._provided[c];else if("default"in t[o]){var d=t[o].default;r[o]=pt(d)?d.call(e):d}}}return r}}function Nf(t,e,r,n,a){var o=this,c=a.options,d;vr(n,"_uid")?(d=Object.create(n),d._original=n):(d=n,n=n._original);var p=Ot(c._compiled),v=!p;this.data=t,this.props=e,this.children=r,this.parent=n,this.listeners=t.on||Or,this.injections=Tg(c.inject,n),this.slots=function(){return o.$slots||so(n,t.scopedSlots,o.$slots=gf(r,n)),o.$slots},Object.defineProperty(this,"scopedSlots",{enumerable:!0,get:function(){return so(n,t.scopedSlots,this.slots())}}),p&&(this.$options=c,this.$slots=this.slots(),this.$scopedSlots=so(n,t.scopedSlots,this.$slots)),c._scopeId?this._c=function(b,C,T,A){var F=Vu(d,b,C,T,A,v);return F&&!et(F)&&(F.fnScopeId=c._scopeId,F.fnContext=n),F}:this._c=function(b,C,T,A){return Vu(d,b,C,T,A,v)}}lg(Nf.prototype);function Vx(t,e,r,n,a){var o=t.options,c={},d=o.props;if(re(d))for(var p in d)c[p]=If(p,d,e||Or);else re(r.attrs)&&wg(c,r.attrs),re(r.props)&&wg(c,r.props);var v=new Nf(r,c,a,n,t),b=o.render.call(null,v._c,v);if(b instanceof Ur)return Cg(b,r,v.parent,o);if(et(b)){for(var C=vf(b)||[],T=new Array(C.length),A=0;A<C.length;A++)T[A]=Cg(C[A],r,v.parent,o);return T}}function Cg(t,e,r,n,a){var o=lf(t);return o.fnContext=r,o.fnOptions=n,e.slot&&((o.data||(o.data={})).slot=e.slot),o}function wg(t,e){for(var r in e)t[Vi(r)]=e[r]}function nl(t){return t.name||t.__name||t._componentTag}var Pf={init:function(t,e){if(t.componentInstance&&!t.componentInstance._isDestroyed&&t.data.keepAlive){var r=t;Pf.prepatch(r,r)}else{var n=t.componentInstance=Qx(t,ta);n.$mount(e?t.elm:void 0,e)}},prepatch:function(t,e){var r=e.componentOptions,n=e.componentInstance=t.componentInstance;Ux(n,r.propsData,r.listeners,e,r.children)},insert:function(t){var e=t.context,r=t.componentInstance;r._isMounted||(r._isMounted=!0,nn(r,"mounted")),t.data.keepAlive&&(e._isMounted?qx(r):Tf(r,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?kg(e,!0):e.$destroy())}},Sg=Object.keys(Pf);function xg(t,e,r,n,a){if(!Xe(t)){var o=r.$options._base;if(lr(t)&&(t=o.extend(t)),typeof t=="function"){var c;if(Xe(t.cid)&&(c=t,t=Cx(c,o),t===void 0))return Tx(c,e,r,n,a);e=e||{},Mf(t),re(e.model)&&eA(t.options,e);var d=rx(e,t);if(Ot(t.options.functional))return Vx(t,d,e,r,n);var p=e.on;if(e.on=e.nativeOn,Ot(t.options.abstract)){var v=e.slot;e={},v&&(e.slot=v)}Jx(e);var b=nl(t.options)||a,C=new Ur("vue-component-".concat(t.cid).concat(b?"-".concat(b):""),e,void 0,void 0,void 0,r,{Ctor:t,propsData:d,listeners:p,tag:a,children:n},c);return C}}}function Qx(t,e){var r={_isComponent:!0,_parentVnode:t,parent:e},n=t.data.inlineTemplate;return re(n)&&(r.render=n.render,r.staticRenderFns=n.staticRenderFns),new t.componentOptions.Ctor(r)}function Jx(t){for(var e=t.hook||(t.hook={}),r=0;r<Sg.length;r++){var n=Sg[r],a=e[n],o=Pf[n];a!==o&&!(a&&a._merged)&&(e[n]=a?Zx(o,a):o)}}function Zx(t,e){var r=function(n,a){t(n,a),e(n,a)};return r._merged=!0,r}function eA(t,e){var r=t.model&&t.model.prop||"value",n=t.model&&t.model.event||"input";(e.attrs||(e.attrs={}))[r]=e.model.value;var a=e.on||(e.on={}),o=a[n],c=e.model.callback;re(o)?(et(o)?o.indexOf(c)===-1:o!==c)&&(a[n]=[c].concat(o)):a[n]=c}var tA=Ct,Cn=qr.optionMergeStrategies;function co(t,e,r){if(r===void 0&&(r=!0),!e)return t;for(var n,a,o,c=Zs?Reflect.ownKeys(e):Object.keys(e),d=0;d<c.length;d++)n=c[d],n!=="__ob__"&&(a=t[n],o=e[n],!r||!vr(t,n)?mt(t,n,o):a!==o&&Br(a)&&Br(o)&&co(a,o));return t}function Ag(t,e,r){return r?function(){var a=pt(e)?e.call(r,r):e,o=pt(t)?t.call(r,r):t;return a?co(a,o):o}:e?t?function(){return co(pt(e)?e.call(this,this):e,pt(t)?t.call(this,this):t)}:e:t}Cn.data=function(t,e,r){return r?Ag(t,e,r):e&&typeof e!="function"?t:Ag(t,e)};function Og(t,e){var r=e?t?t.concat(e):et(e)?e:[e]:t;return r&&rA(r)}function rA(t){for(var e=[],r=0;r<t.length;r++)e.indexOf(t[r])===-1&&e.push(t[r]);return e}Lv.forEach(function(t){Cn[t]=Og});function nA(t,e,r,n){var a=Object.create(t||null);return e?bt(a,e):a}Uu.forEach(function(t){Cn[t+"s"]=nA}),Cn.watch=function(t,e,r,n){if(t===uf&&(t=void 0),e===uf&&(e=void 0),!e)return Object.create(t||null);if(!t)return e;var a={};bt(a,t);for(var o in e){var c=a[o],d=e[o];c&&!et(c)&&(c=[c]),a[o]=c?c.concat(d):et(d)?d:[d]}return a},Cn.props=Cn.methods=Cn.inject=Cn.computed=function(t,e,r,n){if(!t)return e;var a=Object.create(null);return bt(a,t),e&&bt(a,e),a},Cn.provide=function(t,e){return t?function(){var r=Object.create(null);return co(r,pt(t)?t.call(this):t),e&&co(r,pt(e)?e.call(this):e,!1),r}:e};var iA=function(t,e){return e===void 0?t:e};function aA(t,e){var r=t.props;if(r){var n={},a,o,c;if(et(r))for(a=r.length;a--;)o=r[a],typeof o=="string"&&(c=Vi(o),n[c]={type:null});else if(Br(r))for(var d in r)o=r[d],c=Vi(d),n[c]=Br(o)?o:{type:o};t.props=n}}function sA(t,e){var r=t.inject;if(r){var n=t.inject={};if(et(r))for(var a=0;a<r.length;a++)n[r[a]]={from:r[a]};else if(Br(r))for(var o in r){var c=r[o];n[o]=Br(c)?bt({from:o},c):{from:c}}}}function oA(t){var e=t.directives;if(e)for(var r in e){var n=e[r];pt(n)&&(e[r]={bind:n,update:n})}}function ra(t,e,r){if(pt(e)&&(e=e.options),aA(e),sA(e),oA(e),!e._base&&(e.extends&&(t=ra(t,e.extends,r)),e.mixins))for(var n=0,a=e.mixins.length;n<a;n++)t=ra(t,e.mixins[n],r);var o={},c;for(c in t)d(c);for(c in e)vr(t,c)||d(c);function d(p){var v=Cn[p]||iA;o[p]=v(t[p],e[p],r,p)}return o}function il(t,e,r,n){if(typeof r=="string"){var a=t[e];if(vr(a,r))return a[r];var o=Vi(r);if(vr(a,o))return a[o];var c=MS(o);if(vr(a,c))return a[c];var d=a[r]||a[o]||a[c];return d}}function If(t,e,r,n){var a=e[t],o=!vr(r,t),c=r[t],d=Pg(Boolean,a.type);if(d>-1){if(o&&!vr(a,"default"))c=!1;else if(c===""||c===Js(t)){var p=Pg(String,a.type);(p<0||d<p)&&(c=!0)}}if(c===void 0){c=uA(n,a,t);var v=cf;pi(!0),Bn(c),pi(v)}return c}function uA(t,e,r){if(vr(e,"default")){var n=e.default;return t&&t.$options.propsData&&t.$options.propsData[r]===void 0&&t._props[r]!==void 0?t._props[r]:pt(n)&&Lf(e.type)!=="Function"?n.call(t):n}}var lA=/^\s*function (\w+)/;function Lf(t){var e=t&&t.toString().match(lA);return e?e[1]:""}function Ng(t,e){return Lf(t)===Lf(e)}function Pg(t,e){if(!et(e))return Ng(e,t)?0:-1;for(var r=0,n=e.length;r<n;r++)if(Ng(e[r],t))return r;return-1}var gi={enumerable:!0,configurable:!0,get:Ct,set:Ct};function Rf(t,e,r){gi.get=function(){return this[e][r]},gi.set=function(a){this[e][r]=a},Object.defineProperty(t,r,gi)}function cA(t){var e=t.$options;if(e.props&&fA(t,e.props),gx(t),e.methods&&vA(t,e.methods),e.data)dA(t);else{var r=Bn(t._data={});r&&r.vmCount++}e.computed&&mA(t,e.computed),e.watch&&e.watch!==uf&&gA(t,e.watch)}function fA(t,e){var r=t.$options.propsData||{},n=t._props=Gv({}),a=t.$options._propKeys=[],o=!t.$parent;o||pi(!1);var c=function(p){a.push(p);var v=If(p,e,r,t);mi(n,p,v),p in t||Rf(t,"_props",p)};for(var d in e)c(d);pi(!0)}function dA(t){var e=t.$options.data;e=t._data=pt(e)?hA(e,t):e||{},Br(e)||(e={});var r=Object.keys(e),n=t.$options.props;t.$options.methods;for(var a=r.length;a--;){var o=r[a];n&&vr(n,o)||Rv(o)||Rf(t,"_data",o)}var c=Bn(e);c&&c.vmCount++}function hA(t,e){Ua();try{return t.call(e,e)}catch(r){return ea(r,e,"data()"),{}}finally{ja()}}var pA={lazy:!0};function mA(t,e){var r=t._computedWatchers=Object.create(null),n=di();for(var a in e){var o=e[a],c=pt(o)?o:o.get;n||(r[a]=new uo(t,c||Ct,Ct,pA)),a in t||Ig(t,a,o)}}function Ig(t,e,r){var n=!di();pt(r)?(gi.get=n?Lg(e):Rg(r),gi.set=Ct):(gi.get=r.get?n&&r.cache!==!1?Lg(e):Rg(r.get):Ct,gi.set=r.set||Ct),Object.defineProperty(t,e,gi)}function Lg(t){return function(){var r=this._computedWatchers&&this._computedWatchers[t];if(r)return r.dirty&&r.evaluate(),Fn.target&&r.depend(),r.value}}function Rg(t){return function(){return t.call(this,this)}}function vA(t,e){t.$options.props;for(var r in e)t[r]=typeof e[r]!="function"?Ct:Av(e[r],t)}function gA(t,e){for(var r in e){var n=e[r];if(et(n))for(var a=0;a<n.length;a++)Df(t,r,n[a]);else Df(t,r,n)}}function Df(t,e,r,n){return Br(r)&&(n=r,r=r.handler),typeof r=="string"&&(r=t[r]),t.$watch(e,r,n)}function _A(t){var e={};e.get=function(){return this._data};var r={};r.get=function(){return this._props},Object.defineProperty(t.prototype,"$data",e),Object.defineProperty(t.prototype,"$props",r),t.prototype.$set=mt,t.prototype.$delete=Zi,t.prototype.$watch=function(n,a,o){var c=this;if(Br(a))return Df(c,n,a,o);o=o||{},o.user=!0;var d=new uo(c,n,a,o);if(o.immediate){var p='callback for immediate watcher "'.concat(d.expression,'"');Ua(),Hn(a,c,[d.value],c,p),ja()}return function(){d.teardown()}}}var bA=0;function yA(t){t.prototype._init=function(e){var r=this;r._uid=bA++,r._isVue=!0,r.__v_skip=!0,r._scope=new Qv(!0),r._scope._vm=!0,e&&e._isComponent?kA(r,e):r.$options=ra(Mf(r.constructor),e||{},r),r._renderProxy=r,r._self=r,Fx(r),Lx(r),kx(r),nn(r,"beforeCreate",void 0,!1),Xx(r),cA(r),Kx(r),nn(r,"created"),r.$options.el&&r.$mount(r.$options.el)}}function kA(t,e){var r=t.$options=Object.create(t.constructor.options),n=e._parentVnode;r.parent=e.parent,r._parentVnode=n;var a=n.componentOptions;r.propsData=a.propsData,r._parentListeners=a.listeners,r._renderChildren=a.children,r._componentTag=a.tag,e.render&&(r.render=e.render,r.staticRenderFns=e.staticRenderFns)}function Mf(t){var e=t.options;if(t.super){var r=Mf(t.super),n=t.superOptions;if(r!==n){t.superOptions=r;var a=EA(t);a&&bt(t.extendOptions,a),e=t.options=ra(r,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function EA(t){var e,r=t.options,n=t.sealedOptions;for(var a in r)r[a]!==n[a]&&(e||(e={}),e[a]=r[a]);return e}function oe(t){this._init(t)}yA(oe),_A(oe),$x(oe),Bx(oe),Ex(oe);function TA(t){t.use=function(e){var r=this._installedPlugins||(this._installedPlugins=[]);if(r.indexOf(e)>-1)return this;var n=sf(arguments,1);return n.unshift(this),pt(e.install)?e.install.apply(e,n):pt(e)&&e.apply(null,n),r.push(e),this}}function CA(t){t.mixin=function(e){return this.options=ra(this.options,e),this}}function wA(t){t.cid=0;var e=1;t.extend=function(r){r=r||{};var n=this,a=n.cid,o=r._Ctor||(r._Ctor={});if(o[a])return o[a];var c=nl(r)||nl(n.options),d=function(v){this._init(v)};return d.prototype=Object.create(n.prototype),d.prototype.constructor=d,d.cid=e++,d.options=ra(n.options,r),d.super=n,d.options.props&&SA(d),d.options.computed&&xA(d),d.extend=n.extend,d.mixin=n.mixin,d.use=n.use,Uu.forEach(function(p){d[p]=n[p]}),c&&(d.options.components[c]=d),d.superOptions=n.options,d.extendOptions=r,d.sealedOptions=bt({},d.options),o[a]=d,d}}function SA(t){var e=t.options.props;for(var r in e)Rf(t.prototype,"_props",r)}function xA(t){var e=t.options.computed;for(var r in e)Ig(t.prototype,r,e[r])}function AA(t){Uu.forEach(function(e){t[e]=function(r,n){return n?(e==="component"&&Br(n)&&(n.name=n.name||r,n=this.options._base.extend(n)),e==="directive"&&pt(n)&&(n={bind:n,update:n}),this.options[e+"s"][r]=n,n):this.options[e+"s"][r]}})}function Dg(t){return t&&(nl(t.Ctor.options)||t.tag)}function al(t,e){return et(t)?t.indexOf(e)>-1:typeof t=="string"?t.split(",").indexOf(e)>-1:PS(t)?t.test(e):!1}function Mg(t,e){var r=t.cache,n=t.keys,a=t._vnode;for(var o in r){var c=r[o];if(c){var d=c.name;d&&!e(d)&&$f(r,o,n,a)}}}function $f(t,e,r,n){var a=t[e];a&&(!n||a.tag!==n.tag)&&a.componentInstance.$destroy(),t[e]=null,fi(r,e)}var $g=[String,RegExp,Array],OA={name:"keep-alive",abstract:!0,props:{include:$g,exclude:$g,max:[String,Number]},methods:{cacheVNode:function(){var t=this,e=t.cache,r=t.keys,n=t.vnodeToCache,a=t.keyToCache;if(n){var o=n.tag,c=n.componentInstance,d=n.componentOptions;e[a]={name:Dg(d),tag:o,componentInstance:c},r.push(a),this.max&&r.length>parseInt(this.max)&&$f(e,r[0],r,this._vnode),this.vnodeToCache=null}}},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var t in this.cache)$f(this.cache,t,this.keys)},mounted:function(){var t=this;this.cacheVNode(),this.$watch("include",function(e){Mg(t,function(r){return al(e,r)})}),this.$watch("exclude",function(e){Mg(t,function(r){return!al(e,r)})})},updated:function(){this.cacheVNode()},render:function(){var t=this.$slots.default,e=fg(t),r=e&&e.componentOptions;if(r){var n=Dg(r),a=this,o=a.include,c=a.exclude;if(o&&(!n||!al(o,n))||c&&n&&al(c,n))return e;var d=this,p=d.cache,v=d.keys,b=e.key==null?r.Ctor.cid+(r.tag?"::".concat(r.tag):""):e.key;p[b]?(e.componentInstance=p[b].componentInstance,fi(v,b),v.push(b)):(this.vnodeToCache=e,this.keyToCache=b),e.data.keepAlive=!0}return e||t&&t[0]}},NA={KeepAlive:OA};function PA(t){var e={};e.get=function(){return qr},Object.defineProperty(t,"config",e),t.util={warn:tA,extend:bt,mergeOptions:ra,defineReactive:mi},t.set=mt,t.delete=Zi,t.nextTick=Tn,t.observable=function(r){return Bn(r),r},t.options=Object.create(null),Uu.forEach(function(r){t.options[r+"s"]=Object.create(null)}),t.options._base=t,bt(t.options.components,NA),TA(t),CA(t),wA(t),AA(t)}PA(oe),Object.defineProperty(oe.prototype,"$isServer",{get:di}),Object.defineProperty(oe.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(oe,"FunctionalRenderContext",{value:Nf}),oe.version=Px;var IA=rn("style,class"),LA=rn("input,textarea,option,select,progress"),RA=function(t,e,r){return r==="value"&&LA(t)&&e!=="button"||r==="selected"&&t==="option"||r==="checked"&&t==="input"||r==="muted"&&t==="video"},Fg=rn("contenteditable,draggable,spellcheck"),DA=rn("events,caret,typing,plaintext-only"),MA=function(t,e){return sl(e)||e==="false"?"false":t==="contenteditable"&&DA(e)?e:"true"},$A=rn("allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible"),Ff="http://www.w3.org/1999/xlink",Bf=function(t){return t.charAt(5)===":"&&t.slice(0,5)==="xlink"},Bg=function(t){return Bf(t)?t.slice(6,t.length):""},sl=function(t){return t==null||t===!1};function FA(t){for(var e=t.data,r=t,n=t;re(n.componentInstance);)n=n.componentInstance._vnode,n&&n.data&&(e=Hg(n.data,e));for(;re(r=r.parent);)r&&r.data&&(e=Hg(e,r.data));return BA(e.staticClass,e.class)}function Hg(t,e){return{staticClass:Hf(t.staticClass,e.staticClass),class:re(t.class)?[t.class,e.class]:e.class}}function BA(t,e){return re(t)||re(e)?Hf(t,Uf(e)):""}function Hf(t,e){return t?e?t+" "+e:t:e||""}function Uf(t){return Array.isArray(t)?HA(t):lr(t)?UA(t):typeof t=="string"?t:""}function HA(t){for(var e="",r,n=0,a=t.length;n<a;n++)re(r=Uf(t[n]))&&r!==""&&(e&&(e+=" "),e+=r);return e}function UA(t){var e="";for(var r in t)t[r]&&(e&&(e+=" "),e+=r);return e}var jA={svg:"http://www.w3.org/2000/svg",math:"http://www.w3.org/1998/Math/MathML"},WA=rn("html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template,blockquote,iframe,tfoot"),jf=rn("svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view",!0),Ug=function(t){return WA(t)||jf(t)};function GA(t){if(jf(t))return"svg";if(t==="math")return"math"}var ol=Object.create(null);function zA(t){if(!Hr)return!0;if(Ug(t))return!1;if(t=t.toLowerCase(),ol[t]!=null)return ol[t];var e=document.createElement(t);return t.indexOf("-")>-1?ol[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:ol[t]=/HTMLUnknownElement/.test(e.toString())}var Wf=rn("text,number,password,search,email,tel,url");function qA(t){if(typeof t=="string"){var e=document.querySelector(t);return e||document.createElement("div")}else return t}function YA(t,e){var r=document.createElement(t);return t!=="select"||e.data&&e.data.attrs&&e.data.attrs.multiple!==void 0&&r.setAttribute("multiple","multiple"),r}function KA(t,e){return document.createElementNS(jA[t],e)}function XA(t){return document.createTextNode(t)}function VA(t){return document.createComment(t)}function QA(t,e,r){t.insertBefore(e,r)}function JA(t,e){t.removeChild(e)}function ZA(t,e){t.appendChild(e)}function e2(t){return t.parentNode}function t2(t){return t.nextSibling}function r2(t){return t.tagName}function n2(t,e){t.textContent=e}function i2(t,e){t.setAttribute(e,"")}var a2=Object.freeze({__proto__:null,createElement:YA,createElementNS:KA,createTextNode:XA,createComment:VA,insertBefore:QA,removeChild:JA,appendChild:ZA,parentNode:e2,nextSibling:t2,tagName:r2,setTextContent:n2,setStyleScope:i2}),s2={create:function(t,e){Ya(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Ya(t,!0),Ya(e))},destroy:function(t){Ya(t,!0)}};function Ya(t,e){var r=t.data.ref;if(re(r)){var n=t.context,a=t.componentInstance||t.elm,o=e?null:a,c=e?void 0:a;if(pt(r)){Hn(r,n,[o],n,"template ref function");return}var d=t.data.refInFor,p=typeof r=="string"||typeof r=="number",v=Wt(r),b=n.$refs;if(p||v){if(d){var C=p?b[r]:r.value;e?et(C)&&fi(C,a):et(C)?C.includes(a)||C.push(a):p?(b[r]=[a],jg(n,r,b[r])):r.value=[a]}else if(p){if(e&&b[r]!==a)return;b[r]=c,jg(n,r,o)}else if(v){if(e&&r.value!==a)return;r.value=o}}}}function jg(t,e,r){var n=t._setupState;n&&vr(n,e)&&(Wt(n[e])?n[e].value=r:n[e]=r)}var _i=new Ur("",{},[]),fo=["create","activate","update","remove","destroy"];function na(t,e){return t.key===e.key&&t.asyncFactory===e.asyncFactory&&(t.tag===e.tag&&t.isComment===e.isComment&&re(t.data)===re(e.data)&&o2(t,e)||Ot(t.isAsyncPlaceholder)&&Xe(e.asyncFactory.error))}function o2(t,e){if(t.tag!=="input")return!0;var r,n=re(r=t.data)&&re(r=r.attrs)&&r.type,a=re(r=e.data)&&re(r=r.attrs)&&r.type;return n===a||Wf(n)&&Wf(a)}function u2(t,e,r){var n,a,o={};for(n=e;n<=r;++n)a=t[n].key,re(a)&&(o[a]=n);return o}function l2(t){var e,r,n={},a=t.modules,o=t.nodeOps;for(e=0;e<fo.length;++e)for(n[fo[e]]=[],r=0;r<a.length;++r)re(a[r][fo[e]])&&n[fo[e]].push(a[r][fo[e]]);function c(U){return new Ur(o.tagName(U).toLowerCase(),{},[],void 0,U)}function d(U,N){function W(){--W.listeners===0&&p(U)}return W.listeners=N,W}function p(U){var N=o.parentNode(U);re(N)&&o.removeChild(N,U)}function v(U,N,W,E,ee,V,fe){if(re(U.elm)&&re(V)&&(U=V[fe]=lf(U)),U.isRootInsert=!ee,!b(U,N,W,E)){var he=U.data,Ie=U.children,Ge=U.tag;re(Ge)?(U.elm=U.ns?o.createElementNS(U.ns,Ge):o.createElement(Ge,U),O(U),F(U,Ie,N),re(he)&&j(U,N),A(W,U.elm,E)):Ot(U.isComment)?(U.elm=o.createComment(U.text),A(W,U.elm,E)):(U.elm=o.createTextNode(U.text),A(W,U.elm,E))}}function b(U,N,W,E){var ee=U.data;if(re(ee)){var V=re(U.componentInstance)&&ee.keepAlive;if(re(ee=ee.hook)&&re(ee=ee.init)&&ee(U,!1),re(U.componentInstance))return C(U,N),A(W,U.elm,E),Ot(V)&&T(U,N,W,E),!0}}function C(U,N){re(U.data.pendingInsert)&&(N.push.apply(N,U.data.pendingInsert),U.data.pendingInsert=null),U.elm=U.componentInstance.$el,G(U)?(j(U,N),O(U)):(Ya(U),N.push(U))}function T(U,N,W,E){for(var ee,V=U;V.componentInstance;)if(V=V.componentInstance._vnode,re(ee=V.data)&&re(ee=ee.transition)){for(ee=0;ee<n.activate.length;++ee)n.activate[ee](_i,V);N.push(V);break}A(W,U.elm,E)}function A(U,N,W){re(U)&&(re(W)?o.parentNode(W)===U&&o.insertBefore(U,N,W):o.appendChild(U,N))}function F(U,N,W){if(et(N))for(var E=0;E<N.length;++E)v(N[E],W,U.elm,null,!0,N,E);else Vs(U.text)&&o.appendChild(U.elm,o.createTextNode(String(U.text)))}function G(U){for(;U.componentInstance;)U=U.componentInstance._vnode;return re(U.tag)}function j(U,N){for(var W=0;W<n.create.length;++W)n.create[W](_i,U);e=U.data.hook,re(e)&&(re(e.create)&&e.create(_i,U),re(e.insert)&&N.push(U))}function O(U){var N;if(re(N=U.fnScopeId))o.setStyleScope(U.elm,N);else for(var W=U;W;)re(N=W.context)&&re(N=N.$options._scopeId)&&o.setStyleScope(U.elm,N),W=W.parent;re(N=ta)&&N!==U.context&&N!==U.fnContext&&re(N=N.$options._scopeId)&&o.setStyleScope(U.elm,N)}function x(U,N,W,E,ee,V){for(;E<=ee;++E)v(W[E],V,U,N,!1,W,E)}function S(U){var N,W,E=U.data;if(re(E))for(re(N=E.hook)&&re(N=N.destroy)&&N(U),N=0;N<n.destroy.length;++N)n.destroy[N](U);if(re(N=U.children))for(W=0;W<U.children.length;++W)S(U.children[W])}function P(U,N,W){for(;N<=W;++N){var E=U[N];re(E)&&(re(E.tag)?(R(E),S(E)):p(E.elm))}}function R(U,N){if(re(N)||re(U.data)){var W,E=n.remove.length+1;for(re(N)?N.listeners+=E:N=d(U.elm,E),re(W=U.componentInstance)&&re(W=W._vnode)&&re(W.data)&&R(W,N),W=0;W<n.remove.length;++W)n.remove[W](U,N);re(W=U.data.hook)&&re(W=W.remove)?W(U,N):N()}else p(U.elm)}function B(U,N,W,E,ee){for(var V=0,fe=0,he=N.length-1,Ie=N[0],Ge=N[he],He=W.length-1,We=W[0],at=W[He],Ve,Pe,Te,Se,Le=!ee;V<=he&&fe<=He;)Xe(Ie)?Ie=N[++V]:Xe(Ge)?Ge=N[--he]:na(Ie,We)?(le(Ie,We,E,W,fe),Ie=N[++V],We=W[++fe]):na(Ge,at)?(le(Ge,at,E,W,He),Ge=N[--he],at=W[--He]):na(Ie,at)?(le(Ie,at,E,W,He),Le&&o.insertBefore(U,Ie.elm,o.nextSibling(Ge.elm)),Ie=N[++V],at=W[--He]):na(Ge,We)?(le(Ge,We,E,W,fe),Le&&o.insertBefore(U,Ge.elm,Ie.elm),Ge=N[--he],We=W[++fe]):(Xe(Ve)&&(Ve=u2(N,V,he)),Pe=re(We.key)?Ve[We.key]:q(We,N,V,he),Xe(Pe)?v(We,E,U,Ie.elm,!1,W,fe):(Te=N[Pe],na(Te,We)?(le(Te,We,E,W,fe),N[Pe]=void 0,Le&&o.insertBefore(U,Te.elm,Ie.elm)):v(We,E,U,Ie.elm,!1,W,fe)),We=W[++fe]);V>he?(Se=Xe(W[He+1])?null:W[He+1].elm,x(U,Se,W,fe,He,E)):fe>He&&P(N,V,he)}function q(U,N,W,E){for(var ee=W;ee<E;ee++){var V=N[ee];if(re(V)&&na(U,V))return ee}}function le(U,N,W,E,ee,V){if(U!==N){re(N.elm)&&re(E)&&(N=E[ee]=lf(N));var fe=N.elm=U.elm;if(Ot(U.isAsyncPlaceholder)){re(N.asyncFactory.resolved)?ne(U.elm,N,W):N.isAsyncPlaceholder=!0;return}if(Ot(N.isStatic)&&Ot(U.isStatic)&&N.key===U.key&&(Ot(N.isCloned)||Ot(N.isOnce))){N.componentInstance=U.componentInstance;return}var he,Ie=N.data;re(Ie)&&re(he=Ie.hook)&&re(he=he.prepatch)&&he(U,N);var Ge=U.children,He=N.children;if(re(Ie)&&G(N)){for(he=0;he<n.update.length;++he)n.update[he](U,N);re(he=Ie.hook)&&re(he=he.update)&&he(U,N)}Xe(N.text)?re(Ge)&&re(He)?Ge!==He&&B(fe,Ge,He,W,V):re(He)?(re(U.text)&&o.setTextContent(fe,""),x(fe,null,He,0,He.length-1,W)):re(Ge)?P(Ge,0,Ge.length-1):re(U.text)&&o.setTextContent(fe,""):U.text!==N.text&&o.setTextContent(fe,N.text),re(Ie)&&re(he=Ie.hook)&&re(he=he.postpatch)&&he(U,N)}}function ae(U,N,W){if(Ot(W)&&re(U.parent))U.parent.data.pendingInsert=N;else for(var E=0;E<N.length;++E)N[E].data.hook.insert(N[E])}var Z=rn("attrs,class,staticClass,staticStyle,key");function ne(U,N,W,E){var ee,V=N.tag,fe=N.data,he=N.children;if(E=E||fe&&fe.pre,N.elm=U,Ot(N.isComment)&&re(N.asyncFactory))return N.isAsyncPlaceholder=!0,!0;if(re(fe)&&(re(ee=fe.hook)&&re(ee=ee.init)&&ee(N,!0),re(ee=N.componentInstance)))return C(N,W),!0;if(re(V)){if(re(he))if(!U.hasChildNodes())F(N,he,W);else if(re(ee=fe)&&re(ee=ee.domProps)&&re(ee=ee.innerHTML)){if(ee!==U.innerHTML)return!1}else{for(var Ie=!0,Ge=U.firstChild,He=0;He<he.length;He++){if(!Ge||!ne(Ge,he[He],W,E)){Ie=!1;break}Ge=Ge.nextSibling}if(!Ie||Ge)return!1}if(re(fe)){var We=!1;for(var at in fe)if(!Z(at)){We=!0,j(N,W);break}!We&&fe.class&&za(fe.class)}}else U.data!==N.text&&(U.data=N.text);return!0}return function(N,W,E,ee){if(Xe(W)){re(N)&&S(N);return}var V=!1,fe=[];if(Xe(N))V=!0,v(W,fe);else{var he=re(N.nodeType);if(!he&&na(N,W))le(N,W,fe,null,null,ee);else{if(he){if(N.nodeType===1&&N.hasAttribute(Iv)&&(N.removeAttribute(Iv),E=!0),Ot(E)&&ne(N,W,fe))return ae(W,fe,!0),N;N=c(N)}var Ie=N.elm,Ge=o.parentNode(Ie);if(v(W,fe,Ie._leaveCb?null:Ge,o.nextSibling(Ie)),re(W.parent))for(var He=W.parent,We=G(W);He;){for(var at=0;at<n.destroy.length;++at)n.destroy[at](He);if(He.elm=W.elm,We){for(var Ve=0;Ve<n.create.length;++Ve)n.create[Ve](_i,He);var Pe=He.data.hook.insert;if(Pe.merged)for(var Te=Pe.fns.slice(1),Se=0;Se<Te.length;Se++)Te[Se]()}else Ya(He);He=He.parent}re(Ge)?P([N],0,0):re(N.tag)&&S(N)}}return ae(W,fe,V),W.elm}}var c2={create:Gf,update:Gf,destroy:function(e){Gf(e,_i)}};function Gf(t,e){(t.data.directives||e.data.directives)&&f2(t,e)}function f2(t,e){var r=t===_i,n=e===_i,a=Wg(t.data.directives,t.context),o=Wg(e.data.directives,e.context),c=[],d=[],p,v,b;for(p in o)v=a[p],b=o[p],v?(b.oldValue=v.value,b.oldArg=v.arg,ho(b,"update",e,t),b.def&&b.def.componentUpdated&&d.push(b)):(ho(b,"bind",e,t),b.def&&b.def.inserted&&c.push(b));if(c.length){var C=function(){for(var T=0;T<c.length;T++)ho(c[T],"inserted",e,t)};r?vi(e,"insert",C):C()}if(d.length&&vi(e,"postpatch",function(){for(var T=0;T<d.length;T++)ho(d[T],"componentUpdated",e,t)}),!r)for(p in a)o[p]||ho(a[p],"unbind",t,t,n)}var d2=Object.create(null);function Wg(t,e){var r=Object.create(null);if(!t)return r;var n,a;for(n=0;n<t.length;n++){if(a=t[n],a.modifiers||(a.modifiers=d2),r[h2(a)]=a,e._setupState&&e._setupState.__sfc){var o=a.def||il(e,"_setupState","v-"+a.name);typeof o=="function"?a.def={bind:o,update:o}:a.def=o}a.def=a.def||il(e.$options,"directives",a.name)}return r}function h2(t){return t.rawName||"".concat(t.name,".").concat(Object.keys(t.modifiers||{}).join("."))}function ho(t,e,r,n,a){var o=t.def&&t.def[e];if(o)try{o(r.elm,t,r,n,a)}catch(c){ea(c,r.context,"directive ".concat(t.name," ").concat(e," hook"))}}var p2=[s2,c2];function Gg(t,e){var r=e.componentOptions;if(!(re(r)&&r.Ctor.options.inheritAttrs===!1)&&!(Xe(t.data.attrs)&&Xe(e.data.attrs))){var n,a,o,c=e.elm,d=t.data.attrs||{},p=e.data.attrs||{};(re(p.__ob__)||Ot(p._v_attr_proxy))&&(p=e.data.attrs=bt({},p));for(n in p)a=p[n],o=d[n],o!==a&&zg(c,n,a,e.data.pre);($a||Dv)&&p.value!==d.value&&zg(c,"value",p.value);for(n in d)Xe(p[n])&&(Bf(n)?c.removeAttributeNS(Ff,Bg(n)):Fg(n)||c.removeAttribute(n))}}function zg(t,e,r,n){n||t.tagName.indexOf("-")>-1?qg(t,e,r):$A(e)?sl(r)?t.removeAttribute(e):(r=e==="allowfullscreen"&&t.tagName==="EMBED"?"true":e,t.setAttribute(e,r)):Fg(e)?t.setAttribute(e,MA(e,r)):Bf(e)?sl(r)?t.removeAttributeNS(Ff,Bg(e)):t.setAttributeNS(Ff,e,r):qg(t,e,r)}function qg(t,e,r){if(sl(r))t.removeAttribute(e);else{if($a&&!Fa&&t.tagName==="TEXTAREA"&&e==="placeholder"&&r!==""&&!t.__ieph){var n=function(a){a.stopImmediatePropagation(),t.removeEventListener("input",n)};t.addEventListener("input",n),t.__ieph=!0}t.setAttribute(e,r)}}var m2={create:Gg,update:Gg};function Yg(t,e){var r=e.elm,n=e.data,a=t.data;if(!(Xe(n.staticClass)&&Xe(n.class)&&(Xe(a)||Xe(a.staticClass)&&Xe(a.class)))){var o=FA(e),c=r._transitionClasses;re(c)&&(o=Hf(o,Uf(c))),o!==r._prevClass&&(r.setAttribute("class",o),r._prevClass=o)}}var v2={create:Yg,update:Yg},zf="__r",qf="__c";function g2(t){if(re(t[zf])){var e=$a?"change":"input";t[e]=[].concat(t[zf],t[e]||[]),delete t[zf]}re(t[qf])&&(t.change=[].concat(t[qf],t.change||[]),delete t[qf])}var po;function _2(t,e,r){var n=po;return function a(){var o=e.apply(null,arguments);o!==null&&Kg(t,a,r,n)}}var b2=yf&&!(Mv&&Number(Mv[1])<=53);function y2(t,e,r,n){if(b2){var a=Eg,o=e;e=o._wrapper=function(c){if(c.target===c.currentTarget||c.timeStamp>=a||c.timeStamp<=0||c.target.ownerDocument!==document)return o.apply(this,arguments)}}po.addEventListener(t,e,$v?{capture:r,passive:n}:r)}function Kg(t,e,r,n){(n||po).removeEventListener(t,e._wrapper||e,r)}function Yf(t,e){if(!(Xe(t.data.on)&&Xe(e.data.on))){var r=e.data.on||{},n=t.data.on||{};po=e.elm||t.elm,g2(r),rg(r,n,y2,Kg,_2,e.context),po=void 0}}var k2={create:Yf,update:Yf,destroy:function(t){return Yf(t,_i)}},ul;function Xg(t,e){if(!(Xe(t.data.domProps)&&Xe(e.data.domProps))){var r,n,a=e.elm,o=t.data.domProps||{},c=e.data.domProps||{};(re(c.__ob__)||Ot(c._v_attr_proxy))&&(c=e.data.domProps=bt({},c));for(r in o)r in c||(a[r]="");for(r in c){if(n=c[r],r==="textContent"||r==="innerHTML"){if(e.children&&(e.children.length=0),n===o[r])continue;a.childNodes.length===1&&a.removeChild(a.childNodes[0])}if(r==="value"&&a.tagName!=="PROGRESS"){a._value=n;var d=Xe(n)?"":String(n);E2(a,d)&&(a.value=d)}else if(r==="innerHTML"&&jf(a.tagName)&&Xe(a.innerHTML)){ul=ul||document.createElement("div"),ul.innerHTML="<svg>".concat(n,"</svg>");for(var p=ul.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;p.firstChild;)a.appendChild(p.firstChild)}else if(n!==o[r])try{a[r]=n}catch{}}}}function E2(t,e){return!t.composing&&(t.tagName==="OPTION"||T2(t,e)||C2(t,e))}function T2(t,e){var r=!0;try{r=document.activeElement!==t}catch{}return r&&t.value!==e}function C2(t,e){var r=t.value,n=t._vModifiers;if(re(n)){if(n.number)return Qs(r)!==Qs(e);if(n.trim)return r.trim()!==e.trim()}return r!==e}var w2={create:Xg,update:Xg},S2=Xi(function(t){var e={},r=/;(?![^(]*\))/g,n=/:(.+)/;return t.split(r).forEach(function(a){if(a){var o=a.split(n);o.length>1&&(e[o[0].trim()]=o[1].trim())}}),e});function Kf(t){var e=Vg(t.style);return t.staticStyle?bt(t.staticStyle,e):e}function Vg(t){return Array.isArray(t)?Ov(t):typeof t=="string"?S2(t):t}function x2(t,e){for(var r={},n,a=t;a.componentInstance;)a=a.componentInstance._vnode,a&&a.data&&(n=Kf(a.data))&&bt(r,n);(n=Kf(t.data))&&bt(r,n);for(var o=t;o=o.parent;)o.data&&(n=Kf(o.data))&&bt(r,n);return r}var A2=/^--/,Qg=/\s*!important$/,Jg=function(t,e,r){if(A2.test(e))t.style.setProperty(e,r);else if(Qg.test(r))t.style.setProperty(Js(e),r.replace(Qg,""),"important");else{var n=O2(e);if(Array.isArray(r))for(var a=0,o=r.length;a<o;a++)t.style[n]=r[a];else t.style[n]=r}},Zg=["Webkit","Moz","ms"],ll,O2=Xi(function(t){if(ll=ll||document.createElement("div").style,t=Vi(t),t!=="filter"&&t in ll)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),r=0;r<Zg.length;r++){var n=Zg[r]+e;if(n in ll)return n}});function e0(t,e){var r=e.data,n=t.data;if(!(Xe(r.staticStyle)&&Xe(r.style)&&Xe(n.staticStyle)&&Xe(n.style))){var a,o,c=e.elm,d=n.staticStyle,p=n.normalizedStyle||n.style||{},v=d||p,b=Vg(e.data.style)||{};e.data.normalizedStyle=re(b.__ob__)?bt({},b):b;var C=x2(e);for(o in v)Xe(C[o])&&Jg(c,o,"");for(o in C)a=C[o],a!==v[o]&&Jg(c,o,a??"")}}var N2={create:e0,update:e0},t0=/\s+/;function r0(t,e){if(!(!e||!(e=e.trim())))if(t.classList)e.indexOf(" ")>-1?e.split(t0).forEach(function(n){return t.classList.add(n)}):t.classList.add(e);else{var r=" ".concat(t.getAttribute("class")||""," ");r.indexOf(" "+e+" ")<0&&t.setAttribute("class",(r+e).trim())}}function n0(t,e){if(!(!e||!(e=e.trim())))if(t.classList)e.indexOf(" ")>-1?e.split(t0).forEach(function(a){return t.classList.remove(a)}):t.classList.remove(e),t.classList.length||t.removeAttribute("class");else{for(var r=" ".concat(t.getAttribute("class")||""," "),n=" "+e+" ";r.indexOf(n)>=0;)r=r.replace(n," ");r=r.trim(),r?t.setAttribute("class",r):t.removeAttribute("class")}}function i0(t){if(t){if(typeof t=="object"){var e={};return t.css!==!1&&bt(e,a0(t.name||"v")),bt(e,t),e}else if(typeof t=="string")return a0(t)}}var a0=Xi(function(t){return{enterClass:"".concat(t,"-enter"),enterToClass:"".concat(t,"-enter-to"),enterActiveClass:"".concat(t,"-enter-active"),leaveClass:"".concat(t,"-leave"),leaveToClass:"".concat(t,"-leave-to"),leaveActiveClass:"".concat(t,"-leave-active")}}),s0=Hr&&!Fa,Ka="transition",Xf="animation",cl="transition",fl="transitionend",Vf="animation",o0="animationend";s0&&(window.ontransitionend===void 0&&window.onwebkittransitionend!==void 0&&(cl="WebkitTransition",fl="webkitTransitionEnd"),window.onanimationend===void 0&&window.onwebkitanimationend!==void 0&&(Vf="WebkitAnimation",o0="webkitAnimationEnd"));var u0=Hr?window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout:function(t){return t()};function l0(t){u0(function(){u0(t)})}function ia(t,e){var r=t._transitionClasses||(t._transitionClasses=[]);r.indexOf(e)<0&&(r.push(e),r0(t,e))}function jn(t,e){t._transitionClasses&&fi(t._transitionClasses,e),n0(t,e)}function c0(t,e,r){var n=f0(t,e),a=n.type,o=n.timeout,c=n.propCount;if(!a)return r();var d=a===Ka?fl:o0,p=0,v=function(){t.removeEventListener(d,b),r()},b=function(C){C.target===t&&++p>=c&&v()};setTimeout(function(){p<c&&v()},o+1),t.addEventListener(d,b)}var P2=/\b(transform|all)(,|$)/;function f0(t,e){var r=window.getComputedStyle(t),n=(r[cl+"Delay"]||"").split(", "),a=(r[cl+"Duration"]||"").split(", "),o=d0(n,a),c=(r[Vf+"Delay"]||"").split(", "),d=(r[Vf+"Duration"]||"").split(", "),p=d0(c,d),v,b=0,C=0;e===Ka?o>0&&(v=Ka,b=o,C=a.length):e===Xf?p>0&&(v=Xf,b=p,C=d.length):(b=Math.max(o,p),v=b>0?o>p?Ka:Xf:null,C=v?v===Ka?a.length:d.length:0);var T=v===Ka&&P2.test(r[cl+"Property"]);return{type:v,timeout:b,propCount:C,hasTransform:T}}function d0(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(function(r,n){return h0(r)+h0(t[n])}))}function h0(t){return Number(t.slice(0,-1).replace(",","."))*1e3}function Qf(t,e){var r=t.elm;re(r._leaveCb)&&(r._leaveCb.cancelled=!0,r._leaveCb());var n=i0(t.data.transition);if(!Xe(n)&&!(re(r._enterCb)||r.nodeType!==1)){for(var a=n.css,o=n.type,c=n.enterClass,d=n.enterToClass,p=n.enterActiveClass,v=n.appearClass,b=n.appearToClass,C=n.appearActiveClass,T=n.beforeEnter,A=n.enter,F=n.afterEnter,G=n.enterCancelled,j=n.beforeAppear,O=n.appear,x=n.afterAppear,S=n.appearCancelled,P=n.duration,R=ta,B=ta.$vnode;B&&B.parent;)R=B.context,B=B.parent;var q=!R._isMounted||!t.isRootInsert;if(!(q&&!O&&O!=="")){var le=q&&v?v:c,ae=q&&C?C:p,Z=q&&b?b:d,ne=q&&j||T,U=q&&pt(O)?O:A,N=q&&x||F,W=q&&S||G,E=Qs(lr(P)?P.enter:P),ee=a!==!1&&!Fa,V=Jf(U),fe=r._enterCb=Hu(function(){ee&&(jn(r,Z),jn(r,ae)),fe.cancelled?(ee&&jn(r,le),W&&W(r)):N&&N(r),r._enterCb=null});t.data.show||vi(t,"insert",function(){var he=r.parentNode,Ie=he&&he._pending&&he._pending[t.key];Ie&&Ie.tag===t.tag&&Ie.elm._leaveCb&&Ie.elm._leaveCb(),U&&U(r,fe)}),ne&&ne(r),ee&&(ia(r,le),ia(r,ae),l0(function(){jn(r,le),fe.cancelled||(ia(r,Z),V||(m0(E)?setTimeout(fe,E):c0(r,o,fe)))})),t.data.show&&(e&&e(),U&&U(r,fe)),!ee&&!V&&fe()}}}function p0(t,e){var r=t.elm;re(r._enterCb)&&(r._enterCb.cancelled=!0,r._enterCb());var n=i0(t.data.transition);if(Xe(n)||r.nodeType!==1)return e();if(re(r._leaveCb))return;var a=n.css,o=n.type,c=n.leaveClass,d=n.leaveToClass,p=n.leaveActiveClass,v=n.beforeLeave,b=n.leave,C=n.afterLeave,T=n.leaveCancelled,A=n.delayLeave,F=n.duration,G=a!==!1&&!Fa,j=Jf(b),O=Qs(lr(F)?F.leave:F),x=r._leaveCb=Hu(function(){r.parentNode&&r.parentNode._pending&&(r.parentNode._pending[t.key]=null),G&&(jn(r,d),jn(r,p)),x.cancelled?(G&&jn(r,c),T&&T(r)):(e(),C&&C(r)),r._leaveCb=null});A?A(S):S();function S(){x.cancelled||(!t.data.show&&r.parentNode&&((r.parentNode._pending||(r.parentNode._pending={}))[t.key]=t),v&&v(r),G&&(ia(r,c),ia(r,p),l0(function(){jn(r,c),x.cancelled||(ia(r,d),j||(m0(O)?setTimeout(x,O):c0(r,o,x)))})),b&&b(r,x),!G&&!j&&x())}}function m0(t){return typeof t=="number"&&!isNaN(t)}function Jf(t){if(Xe(t))return!1;var e=t.fns;return re(e)?Jf(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function v0(t,e){e.data.show!==!0&&Qf(e)}var I2=Hr?{create:v0,activate:v0,remove:function(t,e){t.data.show!==!0?p0(t,e):e()}}:{},L2=[m2,v2,k2,w2,N2,I2],R2=L2.concat(p2),D2=l2({nodeOps:a2,modules:R2});Fa&&document.addEventListener("selectionchange",function(){var t=document.activeElement;t&&t.vmodel&&Zf(t,"input")});var g0={inserted:function(t,e,r,n){r.tag==="select"?(n.elm&&!n.elm._vOptions?vi(r,"postpatch",function(){g0.componentUpdated(t,e,r)}):_0(t,e,r.context),t._vOptions=[].map.call(t.options,dl)):(r.tag==="textarea"||Wf(t.type))&&(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener("compositionstart",M2),t.addEventListener("compositionend",k0),t.addEventListener("change",k0),Fa&&(t.vmodel=!0)))},componentUpdated:function(t,e,r){if(r.tag==="select"){_0(t,e,r.context);var n=t._vOptions,a=t._vOptions=[].map.call(t.options,dl);if(a.some(function(c,d){return!Qi(c,n[d])})){var o=t.multiple?e.value.some(function(c){return y0(c,a)}):e.value!==e.oldValue&&y0(e.value,a);o&&Zf(t,"change")}}}};function _0(t,e,r){b0(t,e),($a||Dv)&&setTimeout(function(){b0(t,e)},0)}function b0(t,e,r){var n=e.value,a=t.multiple;if(!(a&&!Array.isArray(n))){for(var o,c,d=0,p=t.options.length;d<p;d++)if(c=t.options[d],a)o=Pv(n,dl(c))>-1,c.selected!==o&&(c.selected=o);else if(Qi(dl(c),n)){t.selectedIndex!==d&&(t.selectedIndex=d);return}a||(t.selectedIndex=-1)}}function y0(t,e){return e.every(function(r){return!Qi(r,t)})}function dl(t){return"_value"in t?t._value:t.value}function M2(t){t.target.composing=!0}function k0(t){t.target.composing&&(t.target.composing=!1,Zf(t.target,"input"))}function Zf(t,e){var r=document.createEvent("HTMLEvents");r.initEvent(e,!0,!0),t.dispatchEvent(r)}function ed(t){return t.componentInstance&&(!t.data||!t.data.transition)?ed(t.componentInstance._vnode):t}var $2={bind:function(t,e,r){var n=e.value;r=ed(r);var a=r.data&&r.data.transition,o=t.__vOriginalDisplay=t.style.display==="none"?"":t.style.display;n&&a?(r.data.show=!0,Qf(r,function(){t.style.display=o})):t.style.display=n?o:"none"},update:function(t,e,r){var n=e.value,a=e.oldValue;if(!n!=!a){r=ed(r);var o=r.data&&r.data.transition;o?(r.data.show=!0,n?Qf(r,function(){t.style.display=t.__vOriginalDisplay}):p0(r,function(){t.style.display="none"})):t.style.display=n?t.__vOriginalDisplay:"none"}},unbind:function(t,e,r,n,a){a||(t.style.display=t.__vOriginalDisplay)}},F2={model:g0,show:$2},E0={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]};function td(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?td(fg(e.children)):t}function T0(t){var e={},r=t.$options;for(var n in r.propsData)e[n]=t[n];var a=r._parentListeners;for(var n in a)e[Vi(n)]=a[n];return e}function C0(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{props:e.componentOptions.propsData})}function B2(t){for(;t=t.parent;)if(t.data.transition)return!0}function H2(t,e){return e.key===t.key&&e.tag===t.tag}var U2=function(t){return t.tag||ao(t)},j2=function(t){return t.name==="show"},W2={name:"transition",props:E0,abstract:!0,render:function(t){var e=this,r=this.$slots.default;if(r&&(r=r.filter(U2),!!r.length)){var n=this.mode,a=r[0];if(B2(this.$vnode))return a;var o=td(a);if(!o)return a;if(this._leaving)return C0(t,a);var c="__transition-".concat(this._uid,"-");o.key=o.key==null?o.isComment?c+"comment":c+o.tag:Vs(o.key)?String(o.key).indexOf(c)===0?o.key:c+o.key:o.key;var d=(o.data||(o.data={})).transition=T0(this),p=this._vnode,v=td(p);if(o.data.directives&&o.data.directives.some(j2)&&(o.data.show=!0),v&&v.data&&!H2(o,v)&&!ao(v)&&!(v.componentInstance&&v.componentInstance._vnode.isComment)){var b=v.data.transition=bt({},d);if(n==="out-in")return this._leaving=!0,vi(b,"afterLeave",function(){e._leaving=!1,e.$forceUpdate()}),C0(t,a);if(n==="in-out"){if(ao(o))return p;var C,T=function(){C()};vi(d,"afterEnter",T),vi(d,"enterCancelled",T),vi(b,"delayLeave",function(A){C=A})}}return a}}},w0=bt({tag:String,moveClass:String},E0);delete w0.mode;var G2={props:w0,beforeMount:function(){var t=this,e=this._update;this._update=function(r,n){var a=bg(t);t.__patch__(t._vnode,t.kept,!1,!0),t._vnode=t.kept,a(),e.call(t,r,n)}},render:function(t){for(var e=this.tag||this.$vnode.data.tag||"span",r=Object.create(null),n=this.prevChildren=this.children,a=this.$slots.default||[],o=this.children=[],c=T0(this),d=0;d<a.length;d++){var p=a[d];p.tag&&p.key!=null&&String(p.key).indexOf("__vlist")!==0&&(o.push(p),r[p.key]=p,(p.data||(p.data={})).transition=c)}if(n){for(var v=[],b=[],d=0;d<n.length;d++){var p=n[d];p.data.transition=c,p.data.pos=p.elm.getBoundingClientRect(),r[p.key]?v.push(p):b.push(p)}this.kept=t(e,null,v),this.removed=b}return t(e,null,o)},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||"v")+"-move";!t.length||!this.hasMove(t[0].elm,e)||(t.forEach(z2),t.forEach(q2),t.forEach(Y2),this._reflow=document.body.offsetHeight,t.forEach(function(r){if(r.data.moved){var n=r.elm,a=n.style;ia(n,e),a.transform=a.WebkitTransform=a.transitionDuration="",n.addEventListener(fl,n._moveCb=function o(c){c&&c.target!==n||(!c||/transform$/.test(c.propertyName))&&(n.removeEventListener(fl,o),n._moveCb=null,jn(n,e))})}}))},methods:{hasMove:function(t,e){if(!s0)return!1;if(this._hasMove)return this._hasMove;var r=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach(function(a){n0(r,a)}),r0(r,e),r.style.display="none",this.$el.appendChild(r);var n=f0(r);return this.$el.removeChild(r),this._hasMove=n.hasTransform}}};function z2(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function q2(t){t.data.newPos=t.elm.getBoundingClientRect()}function Y2(t){var e=t.data.pos,r=t.data.newPos,n=e.left-r.left,a=e.top-r.top;if(n||a){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform="translate(".concat(n,"px,").concat(a,"px)"),o.transitionDuration="0s"}}var K2={Transition:W2,TransitionGroup:G2};oe.config.mustUseProp=RA,oe.config.isReservedTag=Ug,oe.config.isReservedAttr=IA,oe.config.getTagNamespace=GA,oe.config.isUnknownElement=zA,bt(oe.options.directives,F2),bt(oe.options.components,K2),oe.prototype.__patch__=Hr?D2:Ct,oe.prototype.$mount=function(t,e){return t=t&&Hr?qA(t):void 0,Hx(this,t,e)},Hr&&setTimeout(function(){qr.devtools&&Wu&&Wu.emit("init",oe)},0),oe.util.warn;function X2(){return!!to()}function V2(){return S0().__VUE_DEVTOOLS_GLOBAL_HOOK__}function S0(){return typeof navigator<"u"&&typeof window<"u"?window:typeof globalThis<"u"?globalThis:{}}const Q2=typeof Proxy=="function",J2="devtools-plugin:setup",Z2="plugin:settings:set";let Xa,rd;function eO(){var t;return Xa!==void 0||(typeof window<"u"&&window.performance?(Xa=!0,rd=window.performance):typeof globalThis<"u"&&(!((t=globalThis.perf_hooks)===null||t===void 0)&&t.performance)?(Xa=!0,rd=globalThis.perf_hooks.performance):Xa=!1),Xa}function tO(){return eO()?rd.now():Date.now()}class rO{constructor(e,r){this.target=null,this.targetQueue=[],this.onQueue=[],this.plugin=e,this.hook=r;const n={};if(e.settings)for(const c in e.settings){const d=e.settings[c];n[c]=d.defaultValue}const a=`__vue-devtools-plugin-settings__${e.id}`;let o=Object.assign({},n);try{const c=localStorage.getItem(a),d=JSON.parse(c);Object.assign(o,d)}catch{}this.fallbacks={getSettings(){return o},setSettings(c){try{localStorage.setItem(a,JSON.stringify(c))}catch{}o=c},now(){return tO()}},r&&r.on(Z2,(c,d)=>{c===this.plugin.id&&this.fallbacks.setSettings(d)}),this.proxiedOn=new Proxy({},{get:(c,d)=>this.target?this.target.on[d]:(...p)=>{this.onQueue.push({method:d,args:p})}}),this.proxiedTarget=new Proxy({},{get:(c,d)=>this.target?this.target[d]:d==="on"?this.proxiedOn:Object.keys(this.fallbacks).includes(d)?(...p)=>(this.targetQueue.push({method:d,args:p,resolve:()=>{}}),this.fallbacks[d](...p)):(...p)=>new Promise(v=>{this.targetQueue.push({method:d,args:p,resolve:v})})})}async setRealTarget(e){this.target=e;for(const r of this.onQueue)this.target.on[r.method](...r.args);for(const r of this.targetQueue)r.resolve(await this.target[r.method](...r.args))}}function x0(t,e){const r=t,n=S0(),a=V2(),o=Q2&&r.enableEarlyProxy;if(a&&(n.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__||!o))a.emit(J2,t,e);else{const c=o?new rO(r,a):null;(n.__VUE_DEVTOOLS_PLUGINS__=n.__VUE_DEVTOOLS_PLUGINS__||[]).push({pluginDescriptor:r,setupFn:e,proxy:c}),c&&e(c.proxiedTarget)}}let A0;const mo=t=>A0=t,O0=Symbol();function nd(t){return t&&typeof t=="object"&&Object.prototype.toString.call(t)==="[object Object]"&&typeof t.toJSON!="function"}var wn;(function(t){t.direct="direct",t.patchObject="patch object",t.patchFunction="patch function"})(wn||(wn={}));const aa=typeof window<"u",N0=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof global=="object"&&global.global===global?global:typeof globalThis=="object"?globalThis:{HTMLElement:null};function nO(t,{autoBom:e=!1}={}){return e&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(t.type)?new Blob(["\uFEFF",t],{type:t.type}):t}function id(t,e,r){const n=new XMLHttpRequest;n.open("GET",t),n.responseType="blob",n.onload=function(){L0(n.response,e,r)},n.onerror=function(){console.error("could not download file")},n.send()}function P0(t){const e=new XMLHttpRequest;e.open("HEAD",t,!1);try{e.send()}catch{}return e.status>=200&&e.status<=299}function hl(t){try{t.dispatchEvent(new MouseEvent("click"))}catch{const r=document.createEvent("MouseEvents");r.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),t.dispatchEvent(r)}}const pl=typeof navigator=="object"?navigator:{userAgent:""},I0=/Macintosh/.test(pl.userAgent)&&/AppleWebKit/.test(pl.userAgent)&&!/Safari/.test(pl.userAgent),L0=aa?typeof HTMLAnchorElement<"u"&&"download"in HTMLAnchorElement.prototype&&!I0?iO:"msSaveOrOpenBlob"in pl?aO:sO:()=>{};function iO(t,e="download",r){const n=document.createElement("a");n.download=e,n.rel="noopener",typeof t=="string"?(n.href=t,n.origin!==location.origin?P0(n.href)?id(t,e,r):(n.target="_blank",hl(n)):hl(n)):(n.href=URL.createObjectURL(t),setTimeout(function(){URL.revokeObjectURL(n.href)},4e4),setTimeout(function(){hl(n)},0))}function aO(t,e="download",r){if(typeof t=="string")if(P0(t))id(t,e,r);else{const n=document.createElement("a");n.href=t,n.target="_blank",setTimeout(function(){hl(n)})}else navigator.msSaveOrOpenBlob(nO(t,r),e)}function sO(t,e,r,n){if(n=n||open("","_blank"),n&&(n.document.title=n.document.body.innerText="downloading..."),typeof t=="string")return id(t,e,r);const a=t.type==="application/octet-stream",o=/constructor/i.test(String(N0.HTMLElement))||"safari"in N0,c=/CriOS\/[\d]+/.test(navigator.userAgent);if((c||a&&o||I0)&&typeof FileReader<"u"){const d=new FileReader;d.onloadend=function(){let p=d.result;if(typeof p!="string")throw n=null,new Error("Wrong reader.result type");p=c?p:p.replace(/^data:[^;]*;/,"data:attachment/file;"),n?n.location.href=p:location.assign(p),n=null},d.readAsDataURL(t)}else{const d=URL.createObjectURL(t);n?n.location.assign(d):location.href=d,n=null,setTimeout(function(){URL.revokeObjectURL(d)},4e4)}}function Zt(t,e){const r="\u{1F34D} "+t;typeof __VUE_DEVTOOLS_TOAST__=="function"?__VUE_DEVTOOLS_TOAST__(r,e):e==="error"?console.error(r):e==="warn"?console.warn(r):console.log(r)}function ad(t){return"_a"in t&&"install"in t}function R0(){if(!("clipboard"in navigator))return Zt("Your browser doesn't support the Clipboard API","error"),!0}function D0(t){return t instanceof Error&&t.message.toLowerCase().includes("document is not focused")?(Zt('You need to activate the "Emulate a focused page" setting in the "Rendering" panel of devtools.',"warn"),!0):!1}async function oO(t){if(!R0())try{await navigator.clipboard.writeText(JSON.stringify(t.state.value)),Zt("Global state copied to clipboard.")}catch(e){if(D0(e))return;Zt("Failed to serialize the state. Check the console for more details.","error"),console.error(e)}}async function uO(t){if(!R0())try{M0(t,JSON.parse(await navigator.clipboard.readText())),Zt("Global state pasted from clipboard.")}catch(e){if(D0(e))return;Zt("Failed to deserialize the state from clipboard. Check the console for more details.","error"),console.error(e)}}async function lO(t){try{L0(new Blob([JSON.stringify(t.state.value)],{type:"text/plain;charset=utf-8"}),"pinia-state.json")}catch(e){Zt("Failed to export the state as JSON. Check the console for more details.","error"),console.error(e)}}let Wn;function cO(){Wn||(Wn=document.createElement("input"),Wn.type="file",Wn.accept=".json");function t(){return new Promise((e,r)=>{Wn.onchange=async()=>{const n=Wn.files;if(!n)return e(null);const a=n.item(0);return e(a?{text:await a.text(),file:a}:null)},Wn.oncancel=()=>e(null),Wn.onerror=r,Wn.click()})}return t}async function fO(t){try{const r=await cO()();if(!r)return;const{text:n,file:a}=r;M0(t,JSON.parse(n)),Zt(`Global state imported from "${a.name}".`)}catch(e){Zt("Failed to import the state from JSON. Check the console for more details.","error"),console.error(e)}}function M0(t,e){for(const r in e){const n=t.state.value[r];n?Object.assign(n,e[r]):t.state.value[r]=e[r]}}function an(t){return{_custom:{display:t}}}const $0="\u{1F34D} Pinia (root)",ml="_root";function dO(t){return ad(t)?{id:ml,label:$0}:{id:t.$id,label:t.$id}}function hO(t){if(ad(t)){const r=Array.from(t._s.keys()),n=t._s;return{state:r.map(o=>({editable:!0,key:o,value:t.state.value[o]})),getters:r.filter(o=>n.get(o)._getters).map(o=>{const c=n.get(o);return{editable:!1,key:o,value:c._getters.reduce((d,p)=>(d[p]=c[p],d),{})}})}}const e={state:Object.keys(t.$state).map(r=>({editable:!0,key:r,value:t.$state[r]}))};return t._getters&&t._getters.length&&(e.getters=t._getters.map(r=>({editable:!1,key:r,value:t[r]}))),t._customProperties.size&&(e.customProperties=Array.from(t._customProperties).map(r=>({editable:!0,key:r,value:t[r]}))),e}function pO(t){return t?Array.isArray(t)?t.reduce((e,r)=>(e.keys.push(r.key),e.operations.push(r.type),e.oldValue[r.key]=r.oldValue,e.newValue[r.key]=r.newValue,e),{oldValue:{},keys:[],operations:[],newValue:{}}):{operation:an(t.type),key:an(t.key),oldValue:t.oldValue,newValue:t.newValue}:{}}function mO(t){switch(t){case wn.direct:return"mutation";case wn.patchFunction:return"$patch";case wn.patchObject:return"$patch";default:return"unknown"}}let Va=!0;const vl=[],sa="pinia:mutations",fr="pinia",{assign:vO}=Object,gl=t=>"\u{1F34D} "+t;function gO(t,e){x0({id:"dev.esm.pinia",label:"Pinia \u{1F34D}",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:vl,app:t},r=>{typeof r.now!="function"&&Zt("You seem to be using an outdated version of Vue Devtools. Are you still using the Beta release instead of the stable one? You can find the links at https://devtools.vuejs.org/guide/installation.html."),r.addTimelineLayer({id:sa,label:"Pinia \u{1F34D}",color:15064968}),r.addInspector({id:fr,label:"Pinia \u{1F34D}",icon:"storage",treeFilterPlaceholder:"Search stores",actions:[{icon:"content_copy",action:()=>{oO(e)},tooltip:"Serialize and copy the state"},{icon:"content_paste",action:async()=>{await uO(e),r.sendInspectorTree(fr),r.sendInspectorState(fr)},tooltip:"Replace the state with the content of your clipboard"},{icon:"save",action:()=>{lO(e)},tooltip:"Save the state as a JSON file"},{icon:"folder_open",action:async()=>{await fO(e),r.sendInspectorTree(fr),r.sendInspectorState(fr)},tooltip:"Import the state from a JSON file"}],nodeActions:[{icon:"restore",tooltip:'Reset the state (with "$reset")',action:n=>{const a=e._s.get(n);a?typeof a.$reset!="function"?Zt(`Cannot reset "${n}" store because it doesn't have a "$reset" method implemented.`,"warn"):(a.$reset(),Zt(`Store "${n}" reset.`)):Zt(`Cannot reset "${n}" store because it wasn't found.`,"warn")}}]}),r.on.inspectComponent((n,a)=>{const o=n.componentInstance&&n.componentInstance.proxy;if(o&&o._pStores){const c=n.componentInstance.proxy._pStores;Object.values(c).forEach(d=>{n.instanceData.state.push({type:gl(d.$id),key:"state",editable:!0,value:d._isOptionsAPI?{_custom:{value:ro(d.$state),actions:[{icon:"restore",tooltip:"Reset the state of this store",action:()=>d.$reset()}]}}:Object.keys(d.$state).reduce((p,v)=>(p[v]=d.$state[v],p),{})}),d._getters&&d._getters.length&&n.instanceData.state.push({type:gl(d.$id),key:"getters",editable:!1,value:d._getters.reduce((p,v)=>{try{p[v]=d[v]}catch(b){p[v]=b}return p},{})})})}}),r.on.getInspectorTree(n=>{if(n.app===t&&n.inspectorId===fr){let a=[e];a=a.concat(Array.from(e._s.values())),n.rootNodes=(n.filter?a.filter(o=>"$id"in o?o.$id.toLowerCase().includes(n.filter.toLowerCase()):$0.toLowerCase().includes(n.filter.toLowerCase())):a).map(dO)}}),globalThis.$pinia=e,r.on.getInspectorState(n=>{if(n.app===t&&n.inspectorId===fr){const a=n.nodeId===ml?e:e._s.get(n.nodeId);if(!a)return;a&&(n.nodeId!==ml&&(globalThis.$store=ro(a)),n.state=hO(a))}}),r.on.editInspectorState((n,a)=>{if(n.app===t&&n.inspectorId===fr){const o=n.nodeId===ml?e:e._s.get(n.nodeId);if(!o)return Zt(`store "${n.nodeId}" not found`,"error");const{path:c}=n;ad(o)?c.unshift("state"):(c.length!==1||!o._customProperties.has(c[0])||c[0]in o.$state)&&c.unshift("$state"),Va=!1,n.set(o,c,n.state.value),Va=!0}}),r.on.editComponentState(n=>{if(n.type.startsWith("\u{1F34D}")){const a=n.type.replace(/^🍍\s*/,""),o=e._s.get(a);if(!o)return Zt(`store "${a}" not found`,"error");const{path:c}=n;if(c[0]!=="state")return Zt(`Invalid path for store "${a}": ${c} Only state can be modified.`);c[0]="$state",Va=!1,n.set(o,c,n.state.value),Va=!0}})})}function _O(t,e){vl.includes(gl(e.$id))||vl.push(gl(e.$id)),x0({id:"dev.esm.pinia",label:"Pinia \u{1F34D}",logo:"https://pinia.vuejs.org/logo.svg",packageName:"pinia",homepage:"https://pinia.vuejs.org",componentStateTypes:vl,app:t,settings:{logStoreChanges:{label:"Notify about new/deleted stores",type:"boolean",defaultValue:!0}}},r=>{const n=typeof r.now=="function"?r.now.bind(r):Date.now;e.$onAction(({after:c,onError:d,name:p,args:v})=>{const b=F0++;r.addTimelineEvent({layerId:sa,event:{time:n(),title:"\u{1F6EB} "+p,subtitle:"start",data:{store:an(e.$id),action:an(p),args:v},groupId:b}}),c(C=>{bi=void 0,r.addTimelineEvent({layerId:sa,event:{time:n(),title:"\u{1F6EC} "+p,subtitle:"end",data:{store:an(e.$id),action:an(p),args:v,result:C},groupId:b}})}),d(C=>{bi=void 0,r.addTimelineEvent({layerId:sa,event:{time:n(),logType:"error",title:"\u{1F4A5} "+p,subtitle:"end",data:{store:an(e.$id),action:an(p),args:v,error:C},groupId:b}})})},!0),e._customProperties.forEach(c=>{gt(()=>VS(e[c]),(d,p)=>{r.notifyComponentUpdate(),r.sendInspectorState(fr),Va&&r.addTimelineEvent({layerId:sa,event:{time:n(),title:"Change",subtitle:c,data:{newValue:d,oldValue:p},groupId:bi}})},{deep:!0})}),e.$subscribe(({events:c,type:d},p)=>{if(r.notifyComponentUpdate(),r.sendInspectorState(fr),!Va)return;const v={time:n(),title:mO(d),data:vO({store:an(e.$id)},pO(c)),groupId:bi};d===wn.patchFunction?v.subtitle="\u2935\uFE0F":d===wn.patchObject?v.subtitle="\u{1F9E9}":c&&!Array.isArray(c)&&(v.subtitle=c.type),c&&(v.data["rawEvent(s)"]={_custom:{display:"DebuggerEvent",type:"object",tooltip:"raw DebuggerEvent[]",value:c}}),r.addTimelineEvent({layerId:sa,event:v})},{detached:!0,flush:"sync"});const a=e._hotUpdate;e._hotUpdate=no(c=>{a(c),r.addTimelineEvent({layerId:sa,event:{time:n(),title:"\u{1F525} "+e.$id,subtitle:"HMR update",data:{store:an(e.$id),info:an("HMR update")}}}),r.notifyComponentUpdate(),r.sendInspectorTree(fr),r.sendInspectorState(fr)});const{$dispose:o}=e;e.$dispose=()=>{o(),r.notifyComponentUpdate(),r.sendInspectorTree(fr),r.sendInspectorState(fr),r.getSettings().logStoreChanges&&Zt(`Disposed "${e.$id}" store \u{1F5D1}`)},r.notifyComponentUpdate(),r.sendInspectorTree(fr),r.sendInspectorState(fr),r.getSettings().logStoreChanges&&Zt(`"${e.$id}" store installed \u{1F195}`)})}let F0=0,bi;function B0(t,e,r){const n=e.reduce((a,o)=>(a[o]=ro(t)[o],a),{});for(const a in n)t[a]=function(){const o=F0,c=r?new Proxy(t,{get(...p){return bi=o,Reflect.get(...p)},set(...p){return bi=o,Reflect.set(...p)}}):t;bi=o;const d=n[a].apply(c,arguments);return bi=void 0,d}}function bO({app:t,store:e,options:r}){if(!e.$id.startsWith("__hot:")){if(e._isOptionsAPI=!!r.state,!e._p._testing){B0(e,Object.keys(r.actions),e._isOptionsAPI);const n=e._hotUpdate;ro(e)._hotUpdate=function(a){n.apply(this,arguments),B0(e,Object.keys(a._hmrPayload.actions),!!e._isOptionsAPI)}}_O(t,e)}}function yO(){const t=Jv(!0),e=t.run(()=>Be({}));let r=[];const n=no({install(a){mo(n)},use(a){return this._a,r.push(a),this},_p:r,_a:null,_e:t,_s:new Map,state:e});return typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&aa&&typeof Proxy<"u"&&n.use(bO),n}const H0=()=>{};function U0(t,e,r,n=H0){t.push(e);const a=()=>{const o=t.indexOf(e);o>-1&&(t.splice(o,1),n())};return!r&&Zv()&&tx(a),a}function Qa(t,...e){t.slice().forEach(r=>{r(...e)})}const kO=t=>t(),j0=Symbol(),sd=Symbol();function od(t,e){t instanceof Map&&e instanceof Map?e.forEach((r,n)=>t.set(n,r)):t instanceof Set&&e instanceof Set&&e.forEach(t.add,t);for(const r in e){if(!e.hasOwnProperty(r))continue;const n=e[r],a=t[r];nd(a)&&nd(n)&&t.hasOwnProperty(r)&&!Wt(n)&&!Wa(n)?t[r]=od(a,n):t[r]=n}return t}const EO=Symbol();function TO(t){return!nd(t)||!t.hasOwnProperty(EO)}const{assign:Gn}=Object;function CO(t){return!!(Wt(t)&&t.effect)}function wO(t,e,r,n){const{state:a,actions:o,getters:c}=e,d=r.state.value[t];let p;function v(){d||mt(r.state.value,t,a?a():{});const b=QS(r.state.value[t]);return Gn(b,o,Object.keys(c||{}).reduce((C,T)=>(C[T]=no(Ae(()=>{mo(r);const A=r._s.get(t);if(A._r)return c[T].call(A,A)})),C),{}))}return p=W0(t,v,e,r,n,!0),p}function W0(t,e,r={},n,a,o){let c;const d=Gn({actions:{}},r),p={deep:!0};let v,b,C=[],T=[],A;const F=n.state.value[t];!o&&!F&&mt(n.state.value,t,{});const G=Be({});let j;function O(Z){let ne;v=b=!1,typeof Z=="function"?(Z(n.state.value[t]),ne={type:wn.patchFunction,storeId:t,events:A}):(od(n.state.value[t],Z),ne={type:wn.patchObject,payload:Z,storeId:t,events:A});const U=j=Symbol();Tn().then(()=>{j===U&&(v=!0)}),b=!0,Qa(C,ne,n.state.value[t])}const x=o?function(){const{state:ne}=r,U=ne?ne():{};this.$patch(N=>{Gn(N,U)})}:H0;function S(){c.stop(),C=[],T=[],n._s.delete(t)}const P=(Z,ne="")=>{if(j0 in Z)return Z[sd]=ne,Z;const U=function(){mo(n);const N=Array.from(arguments),W=[],E=[];function ee(he){W.push(he)}function V(he){E.push(he)}Qa(T,{args:N,name:U[sd],store:q,after:ee,onError:V});let fe;try{fe=Z.apply(this&&this.$id===t?this:q,N)}catch(he){throw Qa(E,he),he}return fe instanceof Promise?fe.then(he=>(Qa(W,he),he)).catch(he=>(Qa(E,he),Promise.reject(he))):(Qa(W,fe),fe)};return U[j0]=!0,U[sd]=ne,U},R=no({actions:{},getters:{},state:[],hotState:G}),B={_p:n,$id:t,$onAction:U0.bind(null,T),$patch:O,$reset:x,$subscribe(Z,ne={}){const U=U0(C,Z,ne.detached,()=>N()),N=c.run(()=>gt(()=>n.state.value[t],W=>{(ne.flush==="sync"?b:v)&&Z({storeId:t,type:wn.direct,events:A},W)},Gn({},p,ne)));return U},$dispose:S};B._r=!1;const q=Jt(typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&aa?Gn({_hmrPayload:R,_customProperties:no(new Set)},B):B);n._s.set(t,q);const ae=(n._a&&n._a.runWithContext||kO)(()=>n._e.run(()=>(c=Jv()).run(()=>e({action:P}))));for(const Z in ae){const ne=ae[Z];if(Wt(ne)&&!CO(ne)||Wa(ne))o||(F&&TO(ne)&&(Wt(ne)?ne.value=F[Z]:od(ne,F[Z])),mt(n.state.value[t],Z,ne));else if(typeof ne=="function"){const U=P(ne,Z);mt(ae,Z,U),d.actions[Z]=ne}}if(Object.keys(ae).forEach(Z=>{mt(q,Z,ae[Z])}),Object.defineProperty(q,"$state",{get:()=>n.state.value[t],set:Z=>{O(ne=>{Gn(ne,Z)})}}),typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&aa){const Z={writable:!0,configurable:!0,enumerable:!1};["_p","_hmrPayload","_getters","_customProperties"].forEach(ne=>{Object.defineProperty(q,ne,Gn({value:q[ne]},Z))})}return q._r=!0,n._p.forEach(Z=>{if(typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&aa){const ne=c.run(()=>Z({store:q,app:n._a,pinia:n,options:d}));Object.keys(ne||{}).forEach(U=>q._customProperties.add(U)),Gn(q,ne)}else Gn(q,c.run(()=>Z({store:q,app:n._a,pinia:n,options:d})))}),F&&o&&r.hydrate&&r.hydrate(q.$state,F),v=!0,b=!0,q}function sn(t,e,r){let n,a;const o=typeof e=="function";typeof t=="string"?(n=t,a=o?r:e):(a=t,n=t.id);function c(d,p){const v=X2();return d=d||(v?st(O0,null):null),d&&mo(d),d=A0,d._s.has(n)||(o?W0(n,e,a,d):wO(n,a,d)),d._s.get(n)}return c.$id=n,c}function ud(t,e){return Array.isArray(e)?e.reduce((r,n)=>(r[n]=function(){return t(this.$pinia)[n]},r),{}):Object.keys(e).reduce((r,n)=>(r[n]=function(){const a=t(this.$pinia),o=e[n];return typeof o=="function"?o.call(this,a):a[o]},r),{})}const SO=function(t){t.mixin({beforeCreate(){const e=this.$options;if(e.pinia){const r=e.pinia;if(!this._provided){const n={};Object.defineProperty(this,"_provided",{get:()=>n,set:a=>Object.assign(n,a)})}this._provided[O0]=r,this.$pinia||(this.$pinia=r),r._a=this,aa&&mo(r),typeof __VUE_PROD_DEVTOOLS__<"u"&&__VUE_PROD_DEVTOOLS__&&aa&&gO(r._a,r)}else!this.$pinia&&e.parent&&e.parent.$pinia&&(this.$pinia=e.parent.$pinia)},destroyed(){delete this._pStores}})};var xO={defineStore:sn,mapState:ud},G0=typeof global=="object"&&global&&global.Object===Object&&global,AO=typeof self=="object"&&self&&self.Object===Object&&self,on=G0||AO||Function("return this")(),Kr=on.Symbol,z0=Object.prototype,OO=z0.hasOwnProperty,NO=z0.toString,vo=Kr?Kr.toStringTag:void 0;function PO(t){var e=OO.call(t,vo),r=t[vo];try{t[vo]=void 0;var n=!0}catch{}var a=NO.call(t);return n&&(e?t[vo]=r:delete t[vo]),a}var IO=Object.prototype,LO=IO.toString;function RO(t){return LO.call(t)}var DO="[object Null]",MO="[object Undefined]",q0=Kr?Kr.toStringTag:void 0;function yi(t){return t==null?t===void 0?MO:DO:q0&&q0 in Object(t)?PO(t):RO(t)}function _t(t){var e=typeof t;return t!=null&&(e=="object"||e=="function")}var $O="[object AsyncFunction]",FO="[object Function]",BO="[object GeneratorFunction]",HO="[object Proxy]";function zn(t){if(!_t(t))return!1;var e=yi(t);return e==FO||e==BO||e==$O||e==HO}var ld=on["__core-js_shared__"],Y0=(function(){var t=/[^.]+$/.exec(ld&&ld.keys&&ld.keys.IE_PROTO||"");return t?"Symbol(src)_1."+t:""})();function UO(t){return!!Y0&&Y0 in t}var jO=Function.prototype,WO=jO.toString;function oa(t){if(t!=null){try{return WO.call(t)}catch{}try{return t+""}catch{}}return""}var GO=/[\\^$.*+?()[\]{}|]/g,zO=/^\[object .+?Constructor\]$/,qO=Function.prototype,YO=Object.prototype,KO=qO.toString,XO=YO.hasOwnProperty,VO=RegExp("^"+KO.call(XO).replace(GO,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function QO(t){if(!_t(t)||UO(t))return!1;var e=zn(t)?VO:zO;return e.test(oa(t))}function JO(t,e){return t?.[e]}function ua(t,e){var r=JO(t,e);return QO(r)?r:void 0}var go=ua(Object,"create");function ZO(){this.__data__=go?go(null):{},this.size=0}function eN(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}var tN="__lodash_hash_undefined__",rN=Object.prototype,nN=rN.hasOwnProperty;function iN(t){var e=this.__data__;if(go){var r=e[t];return r===tN?void 0:r}return nN.call(e,t)?e[t]:void 0}var aN=Object.prototype,sN=aN.hasOwnProperty;function oN(t){var e=this.__data__;return go?e[t]!==void 0:sN.call(e,t)}var uN="__lodash_hash_undefined__";function lN(t,e){var r=this.__data__;return this.size+=this.has(t)?0:1,r[t]=go&&e===void 0?uN:e,this}function la(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}la.prototype.clear=ZO,la.prototype.delete=eN,la.prototype.get=iN,la.prototype.has=oN,la.prototype.set=lN;function cN(){this.__data__=[],this.size=0}function _o(t,e){return t===e||t!==t&&e!==e}function _l(t,e){for(var r=t.length;r--;)if(_o(t[r][0],e))return r;return-1}var fN=Array.prototype,dN=fN.splice;function hN(t){var e=this.__data__,r=_l(e,t);if(r<0)return!1;var n=e.length-1;return r==n?e.pop():dN.call(e,r,1),--this.size,!0}function pN(t){var e=this.__data__,r=_l(e,t);return r<0?void 0:e[r][1]}function mN(t){return _l(this.__data__,t)>-1}function vN(t,e){var r=this.__data__,n=_l(r,t);return n<0?(++this.size,r.push([t,e])):r[n][1]=e,this}function qn(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}qn.prototype.clear=cN,qn.prototype.delete=hN,qn.prototype.get=pN,qn.prototype.has=mN,qn.prototype.set=vN;var bo=ua(on,"Map");function gN(){this.size=0,this.__data__={hash:new la,map:new(bo||qn),string:new la}}function _N(t){var e=typeof t;return e=="string"||e=="number"||e=="symbol"||e=="boolean"?t!=="__proto__":t===null}function bl(t,e){var r=t.__data__;return _N(e)?r[typeof e=="string"?"string":"hash"]:r.map}function bN(t){var e=bl(this,t).delete(t);return this.size-=e?1:0,e}function yN(t){return bl(this,t).get(t)}function kN(t){return bl(this,t).has(t)}function EN(t,e){var r=bl(this,t),n=r.size;return r.set(t,e),this.size+=r.size==n?0:1,this}function Yn(t){var e=-1,r=t==null?0:t.length;for(this.clear();++e<r;){var n=t[e];this.set(n[0],n[1])}}Yn.prototype.clear=gN,Yn.prototype.delete=bN,Yn.prototype.get=yN,Yn.prototype.has=kN,Yn.prototype.set=EN;var TN="Expected a function";function ca(t,e){if(typeof t!="function"||e!=null&&typeof e!="function")throw new TypeError(TN);var r=function(){var n=arguments,a=e?e.apply(this,n):n[0],o=r.cache;if(o.has(a))return o.get(a);var c=t.apply(this,n);return r.cache=o.set(a,c)||o,c};return r.cache=new(ca.Cache||Yn),r}ca.Cache=Yn;const un=function(t){const e=[];return Object.keys(t).forEach(r=>{if(un[r])for(const n of Array.isArray(t[r])?t[r]:[t[r]])n&&e.push(un[r](n))}),Promise.all(e)};Object.assign(un,{css:ca(t=>new Promise((e,r)=>{const n=document.createElement("link");n.onload=()=>e(t),n.onerror=()=>r(t),n.rel="stylesheet",n.href=t,document.head.appendChild(n)})),js:ca(t=>new Promise((e,r)=>{const n=document.createElement("script");n.onload=()=>e(t),n.onerror=()=>r(t),n.src=t,document.head.appendChild(n)})),image:ca(t=>new Promise((e,r)=>{const n=new Image;n.onload=()=>e(t),n.onerror=()=>r(t),n.src=t}))});const CN="yootheme",ue=window[CN]??={},cd=new Map;async function wN(){if(await xN(ue.config.google_maps_api_key),!!yl)return async t=>{if(!cd.has(t)){const e=await SN(t);e&&cd.set(t,e.map(AN))}return cd.get(t)}}async function SN(t){try{return(await yl.geocode({address:t})).results}catch(e){if(e.code==="ZERO_RESULTS")return[];console.warn(e)}}let yl;async function xN(t){if(!(!t||yl))try{await un.js(`https://maps.googleapis.com/maps/api/js?key=${t}`),yl=new window.google.maps.Geocoder}catch{}}function AN({formatted_address:t,geometry:{location:{lat:e,lng:r}}}){return{address:t,lat:e(),lng:r()}}const fd=new Map;async function ON(){return async t=>{if(!fd.has(t))try{const e=await fetch(`https://nominatim.openstreetmap.org/search.php?limit=1&format=jsonv2&q=${encodeURIComponent(t)}`),r=e.ok?await e.json():[];fd.set(t,r.map(NN))}catch{}return fd.get(t)}}function NN({display_name:t,lat:e,lon:r}){return{address:t,lat:e,lng:r}}const PN=[wN,ON];async function IN(t){for(const e of PN){const r=await e();if(r)return r(t)}}function yo(t){return!!(t?.match(/\.(?:gif|jpe?g|a?png|svg|ico|webp|avif)$/i)||t?.match(/\/\/images.unsplash.com\/photo-/i))}function fa(t){return!!t?.match(/\.(mpeg|ogv|mp4|m4v|webm|wmv)$/i)}function K0(t){return!!t?.match(/\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?(.*)?/i)}function X0(t){return!!t?.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/i)}function LN(t){return K0(t)||X0(t)}var dd,V0;function Q0(){if(V0)return dd;V0=1;var t=Object.prototype.toString;return dd=function(r){var n=t.call(r),a=n==="[object Arguments]";return a||(a=n!=="[object Array]"&&r!==null&&typeof r=="object"&&typeof r.length=="number"&&r.length>=0&&t.call(r.callee)==="[object Function]"),a},dd}var hd,J0;function RN(){if(J0)return hd;J0=1;var t;if(!Object.keys){var e=Object.prototype.hasOwnProperty,r=Object.prototype.toString,n=Q0(),a=Object.prototype.propertyIsEnumerable,o=!a.call({toString:null},"toString"),c=a.call(function(){},"prototype"),d=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],p=function(T){var A=T.constructor;return A&&A.prototype===T},v={$applicationCache:!0,$console:!0,$external:!0,$frame:!0,$frameElement:!0,$frames:!0,$innerHeight:!0,$innerWidth:!0,$onmozfullscreenchange:!0,$onmozfullscreenerror:!0,$outerHeight:!0,$outerWidth:!0,$pageXOffset:!0,$pageYOffset:!0,$parent:!0,$scrollLeft:!0,$scrollTop:!0,$scrollX:!0,$scrollY:!0,$self:!0,$webkitIndexedDB:!0,$webkitStorageInfo:!0,$window:!0},b=(function(){if(typeof window>"u")return!1;for(var T in window)try{if(!v["$"+T]&&e.call(window,T)&&window[T]!==null&&typeof window[T]=="object")try{p(window[T])}catch{return!0}}catch{return!0}return!1})(),C=function(T){if(typeof window>"u"||!b)return p(T);try{return p(T)}catch{return!1}};t=function(A){var F=A!==null&&typeof A=="object",G=r.call(A)==="[object Function]",j=n(A),O=F&&r.call(A)==="[object String]",x=[];if(!F&&!G&&!j)throw new TypeError("Object.keys called on a non-object");var S=c&&G;if(O&&A.length>0&&!e.call(A,0))for(var P=0;P<A.length;++P)x.push(String(P));if(j&&A.length>0)for(var R=0;R<A.length;++R)x.push(String(R));else for(var B in A)!(S&&B==="prototype")&&e.call(A,B)&&x.push(String(B));if(o)for(var q=C(A),le=0;le<d.length;++le)!(q&&d[le]==="constructor")&&e.call(A,d[le])&&x.push(d[le]);return x}}return hd=t,hd}var pd,Z0;function DN(){if(Z0)return pd;Z0=1;var t=Array.prototype.slice,e=Q0(),r=Object.keys,n=r?function(c){return r(c)}:RN(),a=Object.keys;return n.shim=function(){if(Object.keys){var c=(function(){var d=Object.keys(arguments);return d&&d.length===arguments.length})(1,2);c||(Object.keys=function(p){return e(p)?a(t.call(p)):a(p)})}else Object.keys=n;return Object.keys||n},pd=n,pd}var md,e_;function kl(){if(e_)return md;e_=1;var t=Object.defineProperty||!1;if(t)try{t({},"a",{value:1})}catch{t=!1}return md=t,md}var vd,t_;function r_(){return t_||(t_=1,vd=SyntaxError),vd}var gd,n_;function ko(){return n_||(n_=1,gd=TypeError),gd}var _d,i_;function MN(){return i_||(i_=1,_d=Object.getOwnPropertyDescriptor),_d}var bd,a_;function El(){if(a_)return bd;a_=1;var t=MN();if(t)try{t([],"length")}catch{t=null}return bd=t,bd}var yd,s_;function o_(){if(s_)return yd;s_=1;var t=kl(),e=r_(),r=ko(),n=El();return yd=function(o,c,d){if(!o||typeof o!="object"&&typeof o!="function")throw new r("`obj` must be an object or a function`");if(typeof c!="string"&&typeof c!="symbol")throw new r("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new r("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new r("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new r("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new r("`loose`, if provided, must be a boolean");var p=arguments.length>3?arguments[3]:null,v=arguments.length>4?arguments[4]:null,b=arguments.length>5?arguments[5]:null,C=arguments.length>6?arguments[6]:!1,T=!!n&&n(o,c);if(t)t(o,c,{configurable:b===null&&T?T.configurable:!b,enumerable:p===null&&T?T.enumerable:!p,value:d,writable:v===null&&T?T.writable:!v});else if(C||!p&&!v&&!b)o[c]=d;else throw new e("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},yd}var kd,u_;function l_(){if(u_)return kd;u_=1;var t=kl(),e=function(){return!!t};return e.hasArrayLengthDefineBug=function(){if(!t)return null;try{return t([],"length",{value:1}).length!==1}catch{return!0}},kd=e,kd}var Ed,c_;function f_(){if(c_)return Ed;c_=1;var t=DN(),e=typeof Symbol=="function"&&typeof Symbol("foo")=="symbol",r=Object.prototype.toString,n=Array.prototype.concat,a=o_(),o=function(v){return typeof v=="function"&&r.call(v)==="[object Function]"},c=l_()(),d=function(v,b,C,T){if(b in v){if(T===!0){if(v[b]===C)return}else if(!o(T)||!T())return}c?a(v,b,C,!0):a(v,b,C)},p=function(v,b){var C=arguments.length>2?arguments[2]:{},T=t(b);e&&(T=n.call(T,Object.getOwnPropertySymbols(b)));for(var A=0;A<T.length;A+=1)d(v,T[A],b[T[A]],C[T[A]])};return p.supportsDescriptors=!!c,Ed=p,Ed}var Td={exports:{}},Cd,d_;function h_(){return d_||(d_=1,Cd=Object),Cd}var wd,p_;function $N(){return p_||(p_=1,wd=Error),wd}var Sd,m_;function FN(){return m_||(m_=1,Sd=EvalError),Sd}var xd,v_;function BN(){return v_||(v_=1,xd=RangeError),xd}var Ad,g_;function HN(){return g_||(g_=1,Ad=ReferenceError),Ad}var Od,__;function UN(){return __||(__=1,Od=URIError),Od}var Nd,b_;function jN(){return b_||(b_=1,Nd=Math.abs),Nd}var Pd,y_;function WN(){return y_||(y_=1,Pd=Math.floor),Pd}var Id,k_;function GN(){return k_||(k_=1,Id=Math.max),Id}var Ld,E_;function zN(){return E_||(E_=1,Ld=Math.min),Ld}var Rd,T_;function qN(){return T_||(T_=1,Rd=Math.pow),Rd}var Dd,C_;function YN(){return C_||(C_=1,Dd=Math.round),Dd}var Md,w_;function KN(){return w_||(w_=1,Md=Number.isNaN||function(e){return e!==e}),Md}var $d,S_;function XN(){if(S_)return $d;S_=1;var t=KN();return $d=function(r){return t(r)||r===0?r:r<0?-1:1},$d}var Fd,x_;function VN(){return x_||(x_=1,Fd=function(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var e={},r=Symbol("test"),n=Object(r);if(typeof r=="string"||Object.prototype.toString.call(r)!=="[object Symbol]"||Object.prototype.toString.call(n)!=="[object Symbol]")return!1;var a=42;e[r]=a;for(var o in e)return!1;if(typeof Object.keys=="function"&&Object.keys(e).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(e).length!==0)return!1;var c=Object.getOwnPropertySymbols(e);if(c.length!==1||c[0]!==r||!Object.prototype.propertyIsEnumerable.call(e,r))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var d=Object.getOwnPropertyDescriptor(e,r);if(d.value!==a||d.enumerable!==!0)return!1}return!0}),Fd}var Bd,A_;function QN(){if(A_)return Bd;A_=1;var t=typeof Symbol<"u"&&Symbol,e=VN();return Bd=function(){return typeof t!="function"||typeof Symbol!="function"||typeof t("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:e()},Bd}var Hd,O_;function N_(){return O_||(O_=1,Hd=typeof Reflect<"u"&&Reflect.getPrototypeOf||null),Hd}var Ud,P_;function I_(){if(P_)return Ud;P_=1;var t=h_();return Ud=t.getPrototypeOf||null,Ud}var jd,L_;function JN(){if(L_)return jd;L_=1;var t="Function.prototype.bind called on incompatible ",e=Object.prototype.toString,r=Math.max,n="[object Function]",a=function(p,v){for(var b=[],C=0;C<p.length;C+=1)b[C]=p[C];for(var T=0;T<v.length;T+=1)b[T+p.length]=v[T];return b},o=function(p,v){for(var b=[],C=v,T=0;C<p.length;C+=1,T+=1)b[T]=p[C];return b},c=function(d,p){for(var v="",b=0;b<d.length;b+=1)v+=d[b],b+1<d.length&&(v+=p);return v};return jd=function(p){var v=this;if(typeof v!="function"||e.apply(v)!==n)throw new TypeError(t+v);for(var b=o(arguments,1),C,T=function(){if(this instanceof C){var O=v.apply(this,a(b,arguments));return Object(O)===O?O:this}return v.apply(p,a(b,arguments))},A=r(0,v.length-b.length),F=[],G=0;G<A;G++)F[G]="$"+G;if(C=Function("binder","return function ("+c(F,",")+"){ return binder.apply(this,arguments); }")(T),v.prototype){var j=function(){};j.prototype=v.prototype,C.prototype=new j,j.prototype=null}return C},jd}var Wd,R_;function Eo(){if(R_)return Wd;R_=1;var t=JN();return Wd=Function.prototype.bind||t,Wd}var Gd,D_;function zd(){return D_||(D_=1,Gd=Function.prototype.call),Gd}var qd,M_;function Yd(){return M_||(M_=1,qd=Function.prototype.apply),qd}var Kd,$_;function ZN(){return $_||($_=1,Kd=typeof Reflect<"u"&&Reflect&&Reflect.apply),Kd}var Xd,F_;function B_(){if(F_)return Xd;F_=1;var t=Eo(),e=Yd(),r=zd(),n=ZN();return Xd=n||t.call(r,e),Xd}var Vd,H_;function U_(){if(H_)return Vd;H_=1;var t=Eo(),e=ko(),r=zd(),n=B_();return Vd=function(o){if(o.length<1||typeof o[0]!="function")throw new e("a function is required");return n(t,r,o)},Vd}var Qd,j_;function eP(){if(j_)return Qd;j_=1;var t=U_(),e=El(),r;try{r=[].__proto__===Array.prototype}catch(c){if(!c||typeof c!="object"||!("code"in c)||c.code!=="ERR_PROTO_ACCESS")throw c}var n=!!r&&e&&e(Object.prototype,"__proto__"),a=Object,o=a.getPrototypeOf;return Qd=n&&typeof n.get=="function"?t([n.get]):typeof o=="function"?function(d){return o(d==null?d:a(d))}:!1,Qd}var Jd,W_;function tP(){if(W_)return Jd;W_=1;var t=N_(),e=I_(),r=eP();return Jd=t?function(a){return t(a)}:e?function(a){if(!a||typeof a!="object"&&typeof a!="function")throw new TypeError("getProto: not an object");return e(a)}:r?function(a){return r(a)}:null,Jd}var Zd,G_;function z_(){if(G_)return Zd;G_=1;var t=Function.prototype.call,e=Object.prototype.hasOwnProperty,r=Eo();return Zd=r.call(t,e),Zd}var eh,q_;function Y_(){if(q_)return eh;q_=1;var t,e=h_(),r=$N(),n=FN(),a=BN(),o=HN(),c=r_(),d=ko(),p=UN(),v=jN(),b=WN(),C=GN(),T=zN(),A=qN(),F=YN(),G=XN(),j=Function,O=function(Le){try{return j('"use strict"; return ('+Le+").constructor;")()}catch{}},x=El(),S=kl(),P=function(){throw new d},R=x?(function(){try{return arguments.callee,P}catch{try{return x(arguments,"callee").get}catch{return P}}})():P,B=QN()(),q=tP(),le=I_(),ae=N_(),Z=Yd(),ne=zd(),U={},N=typeof Uint8Array>"u"||!q?t:q(Uint8Array),W={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?t:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?t:ArrayBuffer,"%ArrayIteratorPrototype%":B&&q?q([][Symbol.iterator]()):t,"%AsyncFromSyncIteratorPrototype%":t,"%AsyncFunction%":U,"%AsyncGenerator%":U,"%AsyncGeneratorFunction%":U,"%AsyncIteratorPrototype%":U,"%Atomics%":typeof Atomics>"u"?t:Atomics,"%BigInt%":typeof BigInt>"u"?t:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?t:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?t:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?t:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":r,"%eval%":eval,"%EvalError%":n,"%Float32Array%":typeof Float32Array>"u"?t:Float32Array,"%Float64Array%":typeof Float64Array>"u"?t:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?t:FinalizationRegistry,"%Function%":j,"%GeneratorFunction%":U,"%Int8Array%":typeof Int8Array>"u"?t:Int8Array,"%Int16Array%":typeof Int16Array>"u"?t:Int16Array,"%Int32Array%":typeof Int32Array>"u"?t:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":B&&q?q(q([][Symbol.iterator]())):t,"%JSON%":typeof JSON=="object"?JSON:t,"%Map%":typeof Map>"u"?t:Map,"%MapIteratorPrototype%":typeof Map>"u"||!B||!q?t:q(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":e,"%Object.getOwnPropertyDescriptor%":x,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?t:Promise,"%Proxy%":typeof Proxy>"u"?t:Proxy,"%RangeError%":a,"%ReferenceError%":o,"%Reflect%":typeof Reflect>"u"?t:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?t:Set,"%SetIteratorPrototype%":typeof Set>"u"||!B||!q?t:q(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?t:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":B&&q?q(""[Symbol.iterator]()):t,"%Symbol%":B?Symbol:t,"%SyntaxError%":c,"%ThrowTypeError%":R,"%TypedArray%":N,"%TypeError%":d,"%Uint8Array%":typeof Uint8Array>"u"?t:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?t:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?t:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?t:Uint32Array,"%URIError%":p,"%WeakMap%":typeof WeakMap>"u"?t:WeakMap,"%WeakRef%":typeof WeakRef>"u"?t:WeakRef,"%WeakSet%":typeof WeakSet>"u"?t:WeakSet,"%Function.prototype.call%":ne,"%Function.prototype.apply%":Z,"%Object.defineProperty%":S,"%Object.getPrototypeOf%":le,"%Math.abs%":v,"%Math.floor%":b,"%Math.max%":C,"%Math.min%":T,"%Math.pow%":A,"%Math.round%":F,"%Math.sign%":G,"%Reflect.getPrototypeOf%":ae};if(q)try{null.error}catch(Le){var E=q(q(Le));W["%Error.prototype%"]=E}var ee=function Le(xe){var Ee;if(xe==="%AsyncFunction%")Ee=O("async function () {}");else if(xe==="%GeneratorFunction%")Ee=O("function* () {}");else if(xe==="%AsyncGeneratorFunction%")Ee=O("async function* () {}");else if(xe==="%AsyncGenerator%"){var Qe=Le("%AsyncGeneratorFunction%");Qe&&(Ee=Qe.prototype)}else if(xe==="%AsyncIteratorPrototype%"){var ut=Le("%AsyncGenerator%");ut&&q&&(Ee=q(ut.prototype))}return W[xe]=Ee,Ee},V={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},fe=Eo(),he=z_(),Ie=fe.call(ne,Array.prototype.concat),Ge=fe.call(Z,Array.prototype.splice),He=fe.call(ne,String.prototype.replace),We=fe.call(ne,String.prototype.slice),at=fe.call(ne,RegExp.prototype.exec),Ve=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,Pe=/\\(\\)?/g,Te=function(xe){var Ee=We(xe,0,1),Qe=We(xe,-1);if(Ee==="%"&&Qe!=="%")throw new c("invalid intrinsic syntax, expected closing `%`");if(Qe==="%"&&Ee!=="%")throw new c("invalid intrinsic syntax, expected opening `%`");var ut=[];return He(xe,Ve,function(dt,Nt,ze,tt){ut[ut.length]=ze?He(tt,Pe,"$1"):Nt||dt}),ut},Se=function(xe,Ee){var Qe=xe,ut;if(he(V,Qe)&&(ut=V[Qe],Qe="%"+ut[0]+"%"),he(W,Qe)){var dt=W[Qe];if(dt===U&&(dt=ee(Qe)),typeof dt>"u"&&!Ee)throw new d("intrinsic "+xe+" exists, but is not available. Please file an issue!");return{alias:ut,name:Qe,value:dt}}throw new c("intrinsic "+xe+" does not exist!")};return eh=function(xe,Ee){if(typeof xe!="string"||xe.length===0)throw new d("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof Ee!="boolean")throw new d('"allowMissing" argument must be a boolean');if(at(/^%?[^%]*%?$/,xe)===null)throw new c("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var Qe=Te(xe),ut=Qe.length>0?Qe[0]:"",dt=Se("%"+ut+"%",Ee),Nt=dt.name,ze=dt.value,tt=!1,lt=dt.alias;lt&&(ut=lt[0],Ge(Qe,Ie([0,1],lt)));for(var $t=1,Ye=!0;$t<Qe.length;$t+=1){var rt=Qe[$t],X=We(rt,0,1),me=We(rt,-1);if((X==='"'||X==="'"||X==="`"||me==='"'||me==="'"||me==="`")&&X!==me)throw new c("property names with quotes must have matching quotes");if((rt==="constructor"||!Ye)&&(tt=!0),ut+="."+rt,Nt="%"+ut+"%",he(W,Nt))ze=W[Nt];else if(ze!=null){if(!(rt in ze)){if(!Ee)throw new d("base intrinsic for "+xe+" exists, but the property is not available.");return}if(x&&$t+1>=Qe.length){var ie=x(ze,rt);Ye=!!ie,Ye&&"get"in ie&&!("originalValue"in ie.get)?ze=ie.get:ze=ze[rt]}else Ye=he(ze,rt),ze=ze[rt];Ye&&!tt&&(W[Nt]=ze)}}return ze},eh}var th,K_;function rP(){if(K_)return th;K_=1;var t=Y_(),e=o_(),r=l_()(),n=El(),a=ko(),o=t("%Math.floor%");return th=function(d,p){if(typeof d!="function")throw new a("`fn` is not a function");if(typeof p!="number"||p<0||p>4294967295||o(p)!==p)throw new a("`length` must be a positive 32-bit integer");var v=arguments.length>2&&!!arguments[2],b=!0,C=!0;if("length"in d&&n){var T=n(d,"length");T&&!T.configurable&&(b=!1),T&&!T.writable&&(C=!1)}return(b||C||!v)&&(r?e(d,"length",p,!0,!0):e(d,"length",p)),d},th}var rh,X_;function nP(){if(X_)return rh;X_=1;var t=Eo(),e=Yd(),r=B_();return rh=function(){return r(t,e,arguments)},rh}var V_;function Q_(){return V_||(V_=1,(function(t){var e=rP(),r=kl(),n=U_(),a=nP();t.exports=function(c){var d=n(arguments),p=c.length-(arguments.length-1);return e(d,1+(p>0?p:0),!0)},r?r(t.exports,"apply",{value:a}):t.exports.apply=a})(Td)),Td.exports}var nh,J_;function iP(){if(J_)return nh;J_=1;var t=ko();return nh=function(r){if(r==null)throw new t(arguments.length>0&&arguments[1]||"Cannot call method on "+r);return r},nh}var ih,Z_;function aP(){if(Z_)return ih;Z_=1;var t=Y_(),e=Q_(),r=e(t("String.prototype.indexOf"));return ih=function(a,o){var c=t(a,!!o);return typeof c=="function"&&r(a,".prototype.")>-1?e(c):c},ih}var ah,eb;function tb(){if(eb)return ah;eb=1;var t=iP(),e=aP(),r=e("Object.prototype.propertyIsEnumerable"),n=e("Array.prototype.push");return ah=function(o){var c=t(o),d=[];for(var p in c)r(c,p)&&n(d,[p,c[p]]);return d},ah}var sh,rb;function nb(){if(rb)return sh;rb=1;var t=tb();return sh=function(){return typeof Object.entries=="function"?Object.entries:t},sh}var oh,ib;function sP(){if(ib)return oh;ib=1;var t=nb(),e=f_();return oh=function(){var n=t();return e(Object,{entries:n},{entries:function(){return Object.entries!==n}}),n},oh}var uh,ab;function oP(){if(ab)return uh;ab=1;var t=f_(),e=Q_(),r=tb(),n=nb(),a=sP(),o=e(n(),Object);return t(o,{getPolyfill:n,implementation:r,shim:a}),uh=o,uh}var lh,sb;function uP(){if(sb)return lh;sb=1;var t=function(){};return lh=t,lh}var ch,ob;function lP(){if(ob)return ch;ob=1;var t=oP(),e=uP(),r=z_(),n=function(P){e(!1,P)},a=String.prototype.replace,o=String.prototype.split,c="||||",d=function(S){var P=S%100,R=P%10;return P!==11&&R===1?0:2<=R&&R<=4&&!(P>=12&&P<=14)?1:2},p={pluralTypes:{arabic:function(S){if(S<3)return S;var P=S%100;return P>=3&&P<=10?3:P>=11?4:5},bosnian_serbian:d,chinese:function(){return 0},croatian:d,french:function(S){return S>=2?1:0},german:function(S){return S!==1?1:0},russian:d,lithuanian:function(S){return S%10===1&&S%100!==11?0:S%10>=2&&S%10<=9&&(S%100<11||S%100>19)?1:2},czech:function(S){return S===1?0:S>=2&&S<=4?1:2},polish:function(S){if(S===1)return 0;var P=S%10;return 2<=P&&P<=4&&(S%100<10||S%100>=20)?1:2},icelandic:function(S){return S%10!==1||S%100===11?1:0},slovenian:function(S){var P=S%100;return P===1?0:P===2?1:P===3||P===4?2:3},romanian:function(S){if(S===1)return 0;var P=S%100;return S===0||P>=2&&P<=19?1:2},ukrainian:d},pluralTypeToLanguages:{arabic:["ar"],bosnian_serbian:["bs-Latn-BA","bs-Cyrl-BA","srl-RS","sr-RS"],chinese:["id","id-ID","ja","ko","ko-KR","lo","ms","th","th-TH","zh"],croatian:["hr","hr-HR"],german:["fa","da","de","en","es","fi","el","he","hi-IN","hu","hu-HU","it","nl","no","pt","sv","tr"],french:["fr","tl","pt-br"],russian:["ru","ru-RU"],lithuanian:["lt"],czech:["cs","cs-CZ","sk"],polish:["pl"],icelandic:["is","mk"],slovenian:["sl-SL"],romanian:["ro"],ukrainian:["uk","ua"]}};function v(S){for(var P={},R=t(S),B=0;B<R.length;B+=1)for(var q=R[B][0],le=R[B][1],ae=0;ae<le.length;ae+=1)P[le[ae]]=q;return P}function b(S,P){var R=v(S.pluralTypeToLanguages);return R[P]||R[o.call(P,/-/,1)[0]]||R.en}function C(S,P,R){return S.pluralTypes[P](R)}function T(){var S={};return function(P,R){var B=S[R];return B&&!P.pluralTypes[B]&&(B=null,S[R]=B),B||(B=b(P,R),B&&(S[R]=B)),B}}function A(S){return S.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function F(S){var P=S&&S.prefix||"%{",R=S&&S.suffix||"}";if(P===c||R===c)throw new RangeError('"'+c+'" token is reserved for pluralization');return new RegExp(A(P)+"(.*?)"+A(R),"g")}var G=T(),j=/%\{(.*?)\}/g;function O(S,P,R,B,q,le){if(typeof S!="string")throw new TypeError("Polyglot.transformPhrase expects argument #1 to be string");if(P==null)return S;var ae=S,Z=B||j,ne=le||a,U=typeof P=="number"?{smart_count:P}:P;if(U.smart_count!=null&&S){var N=q||p,W=o.call(S,c),E=R||"en",ee=G(N,E),V=C(N,ee,U.smart_count);ae=a.call(W[V]||W[0],/^[^\S]*|[^\S]*$/g,"")}return ae=ne.call(ae,Z,function(fe,he){return!r(U,he)||U[he]==null?fe:U[he]}),ae}function x(S){var P=S||{};this.phrases={},this.extend(P.phrases||{}),this.currentLocale=P.locale||"en";var R=P.allowMissing?O:null;this.onMissingKey=typeof P.onMissingKey=="function"?P.onMissingKey:R,this.warn=P.warn||n,this.replaceImplementation=P.replace||a,this.tokenRegex=F(P.interpolation),this.pluralRules=P.pluralRules||p}return x.prototype.locale=function(S){return S&&(this.currentLocale=S),this.currentLocale},x.prototype.extend=function(S,P){for(var R=t(S||{}),B=0;B<R.length;B+=1){var q=R[B][0],le=R[B][1],ae=P?P+"."+q:q;typeof le=="object"?this.extend(le,ae):this.phrases[ae]=le}},x.prototype.unset=function(S,P){if(typeof S=="string")delete this.phrases[S];else for(var R=t(S||{}),B=0;B<R.length;B+=1){var q=R[B][0],le=R[B][1],ae=P?P+"."+q:q;typeof le=="object"?this.unset(le,ae):delete this.phrases[ae]}},x.prototype.clear=function(){this.phrases={}},x.prototype.replace=function(S){this.clear(),this.extend(S)},x.prototype.t=function(S,P){var R,B,q=P??{};if(typeof this.phrases[S]=="string")R=this.phrases[S];else if(typeof q._=="string")R=q._;else if(this.onMissingKey){var le=this.onMissingKey;B=le(S,q,this.currentLocale,this.tokenRegex,this.pluralRules,this.replaceImplementation)}else this.warn('Missing translation for key: "'+S+'"'),B=S;return typeof R=="string"&&(B=O(R,q,this.currentLocale,this.tokenRegex,this.pluralRules,this.replaceImplementation)),B},x.prototype.has=function(S){return r(this.phrases,S)},x.transformPhrase=function(P,R,B){return O(P,R,B)},ch=x,ch}var cP=lP(),ub=Da(cP),fP={install(t,e){const r=t.i18n=new Ja(e);t.mixin({beforeCreate:function(){const{$parent:a,$options:o}=this,{i18n:c}=o;if(c){const d=new Ja(c);this.$t=(p,...v)=>p?d.t(p,...v):"",this.$i18n=d}else!a||!a.$t?(this.$t=(d,...p)=>d?r.t(d,...p):"",this.$i18n=r):a.$t&&(this.$t=a.$t)},created:function(){const{$i18n:a}=this;a&&(this._provided??={},this._provided.$i18n=a)}})}};function Ja(t={}){const{locale:e,messages:r={}}=t;ub.call(this,{phrases:r[e],allowMissing:!0,interpolation:{prefix:"%",suffix:"%"},...t}),this.messages=r}Ja.prototype=Object.create(ub.prototype),Ja.prototype.constructor=Ja,Ja.prototype.locale=function(t){return t&&(this.currentLocale=t,this.replace(this.messages[t])),this.currentLocale};var dP=t=>{const e={};t.mixin({provide:function(){const{models:r}=this.$options;if(!r)return{};const n={};for(const[a,o]of Object.entries(r)){const c=e[a]||o,d=zn(c)?new c({name:a,parent:this}):new t({name:a,parent:this,extends:c});this[a]=n[a]=d,this._provided[a]=d,this.$on("hook:beforeDestroy",()=>this[a].$destroy())}return n}}),t.model=(r,n)=>e[r]=n,t.config.optionMergeStrategies.models=t.config.optionMergeStrategies.props};const fh=new Map,To={set(t,e){return fh.set(t,e)},findIn(t){const e=[];for(const[r,n]of Object.entries(t))fh.has(n)&&e.push({replace:(a,o)=>t[r]=t[r].split(a).join(o||""),...fh.get(n)}),_t(n)&&e.push(...this.findIn(n));return e}};let Co;try{const t="__test__";Co=window.sessionStorage||{},Co[t]=1,delete Co[t]}catch{Co={}}const wt=Co;function lb(t=""){return t.toLowerCase().normalize("NFD").replace(/[\u0300-\u036f]/g,"")}function da(t,e){t=lb(t);let r=-1;for(const n of lb(e??""))if((r=t.indexOf(n,r+1))===-1)return!1;return!0}var St=Array.isArray;function yr(t){return t!=null&&typeof t=="object"}var hP="[object String]";function Sn(t){return typeof t=="string"||!St(t)&&yr(t)&&yi(t)==hP}var dh={exports:{}},hh,cb;function pP(){if(cb)return hh;cb=1;var t=1;function e(){return t=(t*9301+49297)%233280,t/233280}function r(n){t=n}return hh={nextValue:e,seed:r},hh}var ph,fb;function Tl(){if(fb)return ph;fb=1;var t=pP(),e="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-",r,n,a;function o(){a=!1}function c(A){if(!A){r!==e&&(r=e,o());return}if(A!==r){if(A.length!==e.length)throw new Error("Custom alphabet for shortid must be "+e.length+" unique characters. You submitted "+A.length+" characters: "+A);var F=A.split("").filter(function(G,j,O){return j!==O.lastIndexOf(G)});if(F.length)throw new Error("Custom alphabet for shortid must be "+e.length+" unique characters. These characters were not unique: "+F.join(", "));r=A,o()}}function d(A){return c(A),r}function p(A){t.seed(A),n!==A&&(o(),n=A)}function v(){r||c(e);for(var A=r.split(""),F=[],G=t.nextValue(),j;A.length>0;)G=t.nextValue(),j=Math.floor(G*A.length),F.push(A.splice(j,1)[0]);return F.join("")}function b(){return a||(a=v(),a)}function C(A){var F=b();return F[A]}function T(){return r||e}return ph={get:T,characters:d,seed:p,lookup:C,shuffled:b},ph}var mh,db;function mP(){if(db)return mh;db=1;var t=typeof window=="object"&&(window.crypto||window.msCrypto),e;return!t||!t.getRandomValues?e=function(r){for(var n=[],a=0;a<r;a++)n.push(Math.floor(Math.random()*256));return n}:e=function(r){return t.getRandomValues(new Uint8Array(r))},mh=e,mh}let vP="useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict",hb=t=>crypto.getRandomValues(new Uint8Array(t)),pb=(t,e,r)=>{let n=(2<<Math.log(t.length-1)/Math.LN2)-1,a=-~(1.6*n*e/t.length);return(o=e)=>{let c="";for(;;){let d=r(a),p=a|0;for(;p--;)if(c+=t[d[p]&n]||"",c.length===o)return c}}};var gP=Object.freeze({__proto__:null,customAlphabet:(t,e=21)=>pb(t,e,hb),customRandom:pb,nanoid:(t=21)=>crypto.getRandomValues(new Uint8Array(t)).reduce((e,r)=>(r&=63,r<36?e+=r.toString(36):r<62?e+=(r-26).toString(36).toUpperCase():r>62?e+="-":e+="_",e),""),random:hb,urlAlphabet:vP}),_P=IC(gP),vh,mb;function bP(){if(mb)return vh;mb=1;var t=Tl(),e=mP(),r=_P.customRandom;function n(a){for(var o=0,c,d="";!c;)d=d+r(t.get(),1,e)(),c=a<Math.pow(16,o+1),o++;return d}return vh=n,vh}var gh,vb;function yP(){if(vb)return gh;vb=1;var t=bP();Tl();var e=1567752802062,r=7,n,a;function o(c){var d="",p=Math.floor((Date.now()-e)*.001);return p===a?n++:(n=0,a=p),d=d+t(r),d=d+t(c),n>0&&(d=d+t(n)),d=d+t(p),d}return gh=o,gh}var _h,gb;function kP(){if(gb)return _h;gb=1;var t=Tl();function e(r){if(!r||typeof r!="string"||r.length<6)return!1;var n=new RegExp("[^"+t.get().replace(/[|\\{}()[\]^$+*?.-]/g,"\\$&")+"]");return!n.test(r)}return _h=e,_h}var bh,_b;function EP(){return _b||(_b=1,bh=0),bh}var bb;function TP(){return bb||(bb=1,(function(t){var e=Tl(),r=yP(),n=kP(),a=EP()||0;function o(v){return e.seed(v),t.exports}function c(v){return a=v,t.exports}function d(v){return v!==void 0&&e.characters(v),e.shuffled()}function p(){return r(a)}t.exports=p,t.exports.generate=p,t.exports.seed=o,t.exports.worker=c,t.exports.characters=d,t.exports.isValid=n})(dh)),dh.exports}var yh,yb;function CP(){return yb||(yb=1,yh=TP()),yh}var wP=CP(),SP=Da(wP);function wo(t=8){return SP().slice(0,t)}function kb(t,e={},r=null){for(const[n,a]of Object.entries(t))_t(a)?t[n]=kb(a,e,r):Sn(a)&&(t[n]=xP(a,e,r));return t}function xP(t,e={},r=null){const n=t.match(/\$([a-zA-Z0-9_]+)|\${((\w+(?:\.\w+)*)(?::[^}]*)?)}/g)||[];for(const a of n){let o=e[a.replace(/\$|[{}]/g,"")];o===void 0&&r&&(o=r(a,t)),o!==void 0&&(t=a===t?o:t.replace(a,o))}return t}function Cl(t){return btoa(encodeURIComponent(t).replace(/%([0-9A-F]{2})/g,(e,r)=>String.fromCharCode(`0x${r}`)))}function Eb(t=document){return t.head.appendChild(t.createElement("style")).sheet}function Tb(t,e=[],r=!0){if(t||(t=Eb()),ke.isDocument(t)&&(t=Eb(t)),r)for(;t.cssRules.length;)t.deleteRule(0);return e.forEach((n,a)=>t.insertRule(n,a)),t}function ki(t,e){const r=URL.createObjectURL(new Blob([new TextEncoder().encode(e).buffer],{type:"application/octet-stream"})),n=document.createElement("a");n.setAttribute("href",r),n.setAttribute("download",t),n.click(),URL.revokeObjectURL(r)}function AP(t){return new Promise((e,r)=>{const n=new FileReader;n.onload=()=>e(n.result),n.onerror=r,n.readAsText(t)})}async function wl(t){return JSON.parse(await AP(t))}var Cb=[{name:"System Fonts",fonts:[{name:"Default System Font",value:'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif'},{name:"Consolas/Monaco",value:"Consolas, monaco, monospace"},{name:"Georgia",value:'Georgia, "Times New Roman", Times, serif'},{name:"Helvetica/Arial",value:'"Helvetica Neue", Helvetica, Arial, sans-serif'},{name:"Lucida",value:'"Lucida Grande", "Lucida Sans Unicode", Verdana, sans-serif'},{name:"Times New Roman",value:'"Times New Roman", Times, serif'},{name:"Trebuchet",value:'"Trebuchet MS", Verdana, sans-serif'},{name:"Verdana",value:"Verdana, Geneva, sans-serif"},{name:"Inherit",value:"inherit"}]},{name:"Google Fonts",fonts:["ABeeZee","ADLaM Display","AR One Sans","Abel","Abhaya Libre","Aboreto","Abril Fatface","Abyssinica SIL","Aclonica","Acme","Actor","Adamina","Advent Pro","Afacad","Afacad Flux","Agbalumo","Agdasima","Agu Display","Aguafina Script","Akatab","Akaya Kanadaka","Akaya Telivigala","Akronim","Akshar","Aladin","Alan Sans","Alata","Alatsi","Albert Sans","Aldrich","Alef","Alegreya","Alegreya SC","Alegreya Sans","Alegreya Sans SC","Aleo","Alex Brush","Alexandria","Alfa Slab One","Alice","Alike","Alike Angular","Alkalami","Alkatra","Allan","Allerta","Allerta Stencil","Allison","Allura","Almarai","Almendra","Almendra Display","Almendra SC","Alumni Sans","Alumni Sans Collegiate One","Alumni Sans Inline One","Alumni Sans Pinstripe","Alumni Sans SC","Amarante","Amaranth","Amarna","Amatic SC","Amethysta","Amiko","Amiri","Amiri Quran","Amita","Anaheim","Ancizar Sans","Ancizar Serif","Andada Pro","Andika","Anek Bangla","Anek Devanagari","Anek Gujarati","Anek Gurmukhi","Anek Kannada","Anek Latin","Anek Malayalam","Anek Odia","Anek Tamil","Anek Telugu","Angkor","Annapurna SIL","Annie Use Your Telescope","Anonymous Pro","Anta","Antic","Antic Didone","Antic Slab","Anton","Anton SC","Antonio","Anuphan","Anybody","Aoboshi One","Arapey","Arbutus","Arbutus Slab","Architects Daughter","Archivo","Archivo Black","Archivo Narrow","Are You Serious","Aref Ruqaa","Aref Ruqaa Ink","Arima","Arimo","Arizonia","Armata","Arsenal","Arsenal SC","Artifika","Arvo","Arya","Asap","Asap Condensed","Asar","Asimovian","Asset","Assistant","Asta Sans","Astloch","Asul","Athiti","Atkinson Hyperlegible","Atkinson Hyperlegible Mono","Atkinson Hyperlegible Next","Atma","Atomic Age","Aubrey","Audiowide","Autour One","Average","Average Sans","Averia Gruesa Libre","Averia Libre","Averia Sans Libre","Averia Serif Libre","Azeret Mono","B612","B612 Mono","BBH Bartle","BBH Bogle","BBH Hegarty","BIZ UDGothic","BIZ UDMincho","BIZ UDPGothic","BIZ UDPMincho","Babylonica","Bacasime Antique","Bad Script","Badeen Display","Bagel Fat One","Bahiana","Bahianita","Bai Jamjuree","Bakbak One","Ballet","Baloo 2","Baloo Bhai 2","Baloo Bhaijaan 2","Baloo Bhaina 2","Baloo Chettan 2","Baloo Da 2","Baloo Paaji 2","Baloo Tamma 2","Baloo Tammudu 2","Baloo Thambi 2","Balsamiq Sans","Balthazar","Bangers","Barlow","Barlow Condensed","Barlow Semi Condensed","Barriecito","Barrio","Basic","Baskervville","Baskervville SC","Battambang","Baumans","Bayon","Be Vietnam Pro","Beau Rivage","Bebas Neue","Beiruti","Belanosima","Belgrano","Bellefair","Belleza","Bellota","Bellota Text","BenchNine","Benne","Bentham","Berkshire Swash","Besley","Beth Ellen","Bevan","BhuTuka Expanded One","Big Shoulders","Big Shoulders Inline","Big Shoulders Stencil","Bigelow Rules","Bigshot One","Bilbo","Bilbo Swash Caps","BioRhyme","BioRhyme Expanded","Birthstone","Birthstone Bounce","Biryani","Bitcount","Bitcount Grid Double","Bitcount Grid Double Ink","Bitcount Grid Single","Bitcount Grid Single Ink","Bitcount Ink","Bitcount Prop Double","Bitcount Prop Double Ink","Bitcount Prop Single","Bitcount Prop Single Ink","Bitcount Single","Bitcount Single Ink","Bitter","Black And White Picture","Black Han Sans","Black Ops One","Blaka","Blaka Hollow","Blaka Ink","Blinker","Bodoni Moda","Bodoni Moda SC","Bokor","Boldonse","Bona Nova","Bona Nova SC","Bonbon","Bonheur Royale","Boogaloo","Borel","Bowlby One","Bowlby One SC","Braah One","Brawler","Bree Serif","Bricolage Grotesque","Bruno Ace","Bruno Ace SC","Brygada 1918","Bubblegum Sans","Bubbler One","Buda","Buenard","Bungee","Bungee Hairline","Bungee Inline","Bungee Outline","Bungee Shade","Bungee Spice","Bungee Tint","Butcherman","Butterfly Kids","Bytesized","Cabin","Cabin Condensed","Cabin Sketch","Cactus Classical Serif","Caesar Dressing","Cagliostro","Cairo","Cairo Play","Cal Sans","Caladea","Calistoga","Calligraffitti","Cambay","Cambo","Candal","Cantarell","Cantata One","Cantora One","Caprasimo","Capriola","Caramel","Carattere","Cardo","Carlito","Carme","Carrois Gothic","Carrois Gothic SC","Carter One","Cascadia Code","Cascadia Mono","Castoro","Castoro Titling","Catamaran","Caudex","Cause","Caveat","Caveat Brush","Cedarville Cursive","Ceviche One","Chakra Petch","Changa","Changa One","Chango","Charis SIL","Charm","Charmonman","Chathura","Chau Philomene One","Chela One","Chelsea Market","Chenla","Cherish","Cherry Bomb One","Cherry Cream Soda","Cherry Swash","Chewy","Chicle","Chilanka","Chiron GoRound TC","Chiron Hei HK","Chiron Sung HK","Chivo","Chivo Mono","Chocolate Classical Sans","Chokokutai","Chonburi","Cinzel","Cinzel Decorative","Clicker Script","Climate Crisis","Coda","Codystar","Coiny","Combo","Comfortaa","Comforter","Comforter Brush","Comic Neue","Comic Relief","Coming Soon","Comme","Commissioner","Concert One","Condiment","Content","Contrail One","Convergence","Cookie","Copse","Coral Pixels","Corben","Corinthia","Cormorant","Cormorant Garamond","Cormorant Infant","Cormorant SC","Cormorant Unicase","Cormorant Upright","Cossette Texte","Cossette Titre","Courgette","Courier Prime","Cousine","Coustard","Covered By Your Grace","Crafty Girls","Creepster","Crete Round","Crimson Pro","Crimson Text","Croissant One","Crushed","Cuprum","Cute Font","Cutive","Cutive Mono","DM Mono","DM Sans","DM Serif Display","DM Serif Text","Dai Banna SIL","Damion","Dancing Script","Danfo","Dangrek","Darker Grotesque","Darumadrop One","David Libre","Dawning of a New Day","Days One","Dekko","Dela Gothic One","Delicious Handrawn","Delius","Delius Swash Caps","Delius Unicase","Della Respira","Denk One","Devonshire","Dhurjati","Didact Gothic","Diphylleia","Diplomata","Diplomata SC","Do Hyeon","Dokdo","Domine","Donegal One","Dongle","Doppio One","Dorsa","Dosis","DotGothic16","Doto","Dr Sugiyama","Duru Sans","DynaPuff","Dynalight","EB Garamond","Eagle Lake","East Sea Dokdo","Eater","Economica","Eczar","Edu AU VIC WA NT Arrows","Edu AU VIC WA NT Dots","Edu AU VIC WA NT Guides","Edu AU VIC WA NT Hand","Edu AU VIC WA NT Pre","Edu NSW ACT Cursive","Edu NSW ACT Foundation","Edu NSW ACT Hand Pre","Edu QLD Beginner","Edu QLD Hand","Edu SA Beginner","Edu SA Hand","Edu TAS Beginner","Edu VIC WA NT Beginner","Edu VIC WA NT Hand","Edu VIC WA NT Hand Pre","El Messiri","Electrolize","Elms Sans","Elsie","Elsie Swash Caps","Emblema One","Emilys Candy","Encode Sans","Encode Sans Condensed","Encode Sans Expanded","Encode Sans SC","Encode Sans Semi Condensed","Encode Sans Semi Expanded","Engagement","Englebert","Enriqueta","Ephesis","Epilogue","Epunda Sans","Epunda Slab","Erica One","Esteban","Estonia","Euphoria Script","Ewert","Exile","Exo","Exo 2","Expletus Sans","Explora","Faculty Glyphic","Fahkwang","Familjen Grotesk","Fanwood Text","Farro","Farsan","Fascinate","Fascinate Inline","Faster One","Fasthand","Fauna One","Faustina","Federant","Federo","Felipa","Fenix","Festive","Figtree","Finger Paint","Finlandica","Fira Code","Fira Mono","Fira Sans","Fira Sans Condensed","Fira Sans Extra Condensed","Fjalla One","Fjord One","Flamenco","Flavors","Fleur De Leah","Flow Block","Flow Circular","Flow Rounded","Foldit","Fondamento","Fontdiner Swanky","Forum","Fragment Mono","Francois One","Frank Ruhl Libre","Fraunces","Freckle Face","Fredericka the Great","Fredoka","Freehand","Freeman","Fresca","Frijole","Fruktur","Fugaz One","Fuggles","Funnel Display","Funnel Sans","Fustat","Fuzzy Bubbles","GFS Didot","GFS Neohellenic","Ga Maamli","Gabarito","Gabriela","Gaegu","Gafata","Gajraj One","Galada","Galdeano","Galindo","Gamja Flower","Gantari","Gasoek One","Gayathri","Geist","Geist Mono","Gelasio","Gemunu Libre","Genos","Gentium Book Plus","Gentium Plus","Geo","Geologica","Geom","Georama","Geostar","Geostar Fill","Germania One","Gideon Roman","Gidole","Gidugu","Gilda Display","Girassol","Give You Glory","Glass Antiqua","Glegoo","Gloock","Gloria Hallelujah","Glory","Gluten","Goblin One","Gochi Hand","Goldman","Golos Text","Google Sans","Google Sans Code","Google Sans Flex","Gorditas","Gothic A1","Gotu","Goudy Bookletter 1911","Gowun Batang","Gowun Dodum","Graduate","Grand Hotel","Grandiflora One","Grandstander","Grape Nuts","Gravitas One","Great Vibes","Grechen Fuemen","Grenze","Grenze Gotisch","Grey Qo","Griffy","Gruppo","Gudea","Gugi","Gulzar","Gupter","Gurajada","Gwendolyn","Habibi","Hachi Maru Pop","Hahmlet","Halant","Hammersmith One","Hanalei","Hanalei Fill","Handjet","Handlee","Hanken Grotesk","Hanuman","Happy Monkey","Harmattan","Headland One","Hedvig Letters Sans","Hedvig Letters Serif","Heebo","Henny Penny","Hepta Slab","Herr Von Muellerhoff","Hi Melody","Hina Mincho","Hind","Hind Guntur","Hind Madurai","Hind Mysuru","Hind Siliguri","Hind Vadodara","Holtwood One SC","Homemade Apple","Homenaje","Honk","Host Grotesk","Hubballi","Hubot Sans","Huninn","Hurricane","IBM Plex Mono","IBM Plex Sans","IBM Plex Sans Arabic","IBM Plex Sans Condensed","IBM Plex Sans Devanagari","IBM Plex Sans Hebrew","IBM Plex Sans JP","IBM Plex Sans KR","IBM Plex Sans Thai","IBM Plex Sans Thai Looped","IBM Plex Serif","IM Fell DW Pica","IM Fell DW Pica SC","IM Fell Double Pica","IM Fell Double Pica SC","IM Fell English","IM Fell English SC","IM Fell French Canon","IM Fell French Canon SC","IM Fell Great Primer","IM Fell Great Primer SC","Iansui","Ibarra Real Nova","Iceberg","Iceland","Imbue","Imperial Script","Imprima","Inclusive Sans","Inconsolata","Inder","Indie Flower","Ingrid Darling","Inika","Inknut Antiqua","Inria Sans","Inria Serif","Inspiration","Instrument Sans","Instrument Serif","Intel One Mono","Inter","Inter Tight","Irish Grover","Island Moments","Istok Web","Italiana","Italianno","Itim","Jacquard 12","Jacquard 12 Charted","Jacquard 24","Jacquard 24 Charted","Jacquarda Bastarda 9","Jacquarda Bastarda 9 Charted","Jacques Francois","Jacques Francois Shadow","Jaini","Jaini Purva","Jaldi","Jaro","Jersey 10","Jersey 10 Charted","Jersey 15","Jersey 15 Charted","Jersey 20","Jersey 20 Charted","Jersey 25","Jersey 25 Charted","JetBrains Mono","Jim Nightshade","Joan","Jockey One","Jolly Lodger","Jomhuria","Jomolhari","Josefin Sans","Josefin Slab","Jost","Joti One","Jua","Judson","Julee","Julius Sans One","Junge","Jura","Just Another Hand","Just Me Again Down Here","K2D","Kablammo","Kadwa","Kaisei Decol","Kaisei HarunoUmi","Kaisei Opti","Kaisei Tokumin","Kalam","Kalnia","Kalnia Glaze","Kameron","Kanchenjunga","Kanit","Kantumruy Pro","Kapakana","Karantina","Karla","Karla Tamil Inclined","Karla Tamil Upright","Karma","Katibeh","Kaushan Script","Kavivanar","Kavoon","Kay Pho Du","Kdam Thmor Pro","Keania One","Kedebideri","Kelly Slab","Kenia","Khand","Khmer","Khula","Kings","Kirang Haerang","Kite One","Kiwi Maru","Klee One","Knewave","KoHo","Kodchasan","Kode Mono","Koh Santepheap","Kolker Brush","Konkhmer Sleokchher","Kosugi","Kosugi Maru","Kotta One","Koulen","Kranky","Kreon","Kristi","Krona One","Krub","Kufam","Kulim Park","Kumar One","Kumar One Outline","Kumbh Sans","Kurale","LXGW Marker Gothic","LXGW WenKai Mono TC","LXGW WenKai TC","La Belle Aurore","Labrada","Lacquer","Laila","Lakki Reddy","Lalezar","Lancelot","Langar","Lateef","Lato","Lavishly Yours","League Gothic","League Script","League Spartan","Leckerli One","Ledger","Lekton","Lemon","Lemonada","Lexend","Lexend Deca","Lexend Exa","Lexend Giga","Lexend Mega","Lexend Peta","Lexend Tera","Lexend Zetta","Libertinus Keyboard","Libertinus Math","Libertinus Mono","Libertinus Sans","Libertinus Serif","Libertinus Serif Display","Libre Barcode 128","Libre Barcode 128 Text","Libre Barcode 39","Libre Barcode 39 Extended","Libre Barcode 39 Extended Text","Libre Barcode 39 Text","Libre Barcode EAN13 Text","Libre Baskerville","Libre Bodoni","Libre Caslon Display","Libre Caslon Text","Libre Franklin","Licorice","Life Savers","Lilex","Lilita One","Lily Script One","Limelight","Linden Hill","Linefont","Lisu Bosa","Liter","Literata","Liu Jian Mao Cao","Livvic","Lobster","Lobster Two","Londrina Outline","Londrina Shadow","Londrina Sketch","Londrina Solid","Long Cang","Lora","Love Light","Love Ya Like A Sister","Loved by the King","Lovers Quarrel","Luckiest Guy","Lugrasimo","Lumanosimo","Lunasima","Lusitana","Lustria","Luxurious Roman","Luxurious Script","M PLUS 1","M PLUS 1 Code","M PLUS 1p","M PLUS 2","M PLUS Code Latin","M PLUS Rounded 1c","Ma Shan Zheng","Macondo","Macondo Swash Caps","Mada","Madimi One","Magra","Maiden Orange","Maitree","Major Mono Display","Mako","Mali","Mallanna","Maname","Mandali","Manjari","Manrope","Mansalva","Manuale","Manufacturing Consent","Marcellus","Marcellus SC","Marck Script","Margarine","Marhey","Markazi Text","Marko One","Marmelad","Martel","Martel Sans","Martian Mono","Marvel","Matangi","Mate","Mate SC","Matemasie","Material Icons","Material Icons Outlined","Material Icons Round","Material Icons Sharp","Material Icons Two Tone","Material Symbols","Material Symbols Outlined","Material Symbols Rounded","Material Symbols Sharp","Maven Pro","McLaren","Mea Culpa","Meddon","MedievalSharp","Medula One","Meera Inimai","Megrim","Meie Script","Menbere","Meow Script","Merienda","Merriweather","Merriweather Sans","Metal","Metal Mania","Metamorphous","Metrophobic","Michroma","Micro 5","Micro 5 Charted","Milonga","Miltonian","Miltonian Tattoo","Mina","Mingzat","Miniver","Miriam Libre","Mirza","Miss Fajardose","Mitr","Mochiy Pop One","Mochiy Pop P One","Modak","Modern Antiqua","Moderustic","Mogra","Mohave","Moirai One","Molengo","Molle","Momo Signature","Momo Trust Display","Momo Trust Sans","Mona Sans","Monda","Monofett","Monomakh","Monomaniac One","Monoton","Monsieur La Doulaise","Montaga","Montagu Slab","MonteCarlo","Montez","Montserrat","Montserrat Alternates","Montserrat Underline","Moo Lah Lah","Mooli","Moon Dance","Moul","Moulpali","Mountains of Christmas","Mouse Memoirs","Mozilla Headline","Mozilla Text","Mr Bedfort","Mr Dafoe","Mr De Haviland","Mrs Saint Delafield","Mrs Sheppards","Ms Madi","Mukta","Mukta Mahee","Mukta Malar","Mukta Vaani","Mulish","Murecho","MuseoModerno","My Soul","Mynerve","Mystery Quest","NTR","Nabla","Namdhinggo","Nanum Brush Script","Nanum Gothic","Nanum Gothic Coding","Nanum Myeongjo","Nanum Pen Script","Narnoor","Nata Sans","National Park","Neonderthaw","Nerko One","Neucha","Neuton","New Amsterdam","New Rocker","New Tegomin","News Cycle","Newsreader","Niconne","Niramit","Nixie One","Nobile","Nokora","Norican","Nosifer","Notable","Nothing You Could Do","Noticia Text","Noto Color Emoji","Noto Emoji","Noto Kufi Arabic","Noto Music","Noto Naskh Arabic","Noto Nastaliq Urdu","Noto Rashi Hebrew","Noto Sans","Noto Sans Adlam","Noto Sans Adlam Unjoined","Noto Sans Anatolian Hieroglyphs","Noto Sans Arabic","Noto Sans Armenian","Noto Sans Avestan","Noto Sans Balinese","Noto Sans Bamum","Noto Sans Bassa Vah","Noto Sans Batak","Noto Sans Bengali","Noto Sans Bhaiksuki","Noto Sans Brahmi","Noto Sans Buginese","Noto Sans Buhid","Noto Sans Canadian Aboriginal","Noto Sans Carian","Noto Sans Caucasian Albanian","Noto Sans Chakma","Noto Sans Cham","Noto Sans Cherokee","Noto Sans Chorasmian","Noto Sans Coptic","Noto Sans Cuneiform","Noto Sans Cypriot","Noto Sans Cypro Minoan","Noto Sans Deseret","Noto Sans Devanagari","Noto Sans Display","Noto Sans Duployan","Noto Sans Egyptian Hieroglyphs","Noto Sans Elbasan","Noto Sans Elymaic","Noto Sans Ethiopic","Noto Sans Georgian","Noto Sans Glagolitic","Noto Sans Gothic","Noto Sans Grantha","Noto Sans Gujarati","Noto Sans Gunjala Gondi","Noto Sans Gurmukhi","Noto Sans HK","Noto Sans Hanifi Rohingya","Noto Sans Hanunoo","Noto Sans Hatran","Noto Sans Hebrew","Noto Sans Imperial Aramaic","Noto Sans Indic Siyaq Numbers","Noto Sans Inscriptional Pahlavi","Noto Sans Inscriptional Parthian","Noto Sans JP","Noto Sans Javanese","Noto Sans KR","Noto Sans Kaithi","Noto Sans Kannada","Noto Sans Kawi","Noto Sans Kayah Li","Noto Sans Kharoshthi","Noto Sans Khmer","Noto Sans Khojki","Noto Sans Khudawadi","Noto Sans Lao","Noto Sans Lao Looped","Noto Sans Lepcha","Noto Sans Limbu","Noto Sans Linear A","Noto Sans Linear B","Noto Sans Lisu","Noto Sans Lycian","Noto Sans Lydian","Noto Sans Mahajani","Noto Sans Malayalam","Noto Sans Mandaic","Noto Sans Manichaean","Noto Sans Marchen","Noto Sans Masaram Gondi","Noto Sans Math","Noto Sans Mayan Numerals","Noto Sans Medefaidrin","Noto Sans Meetei Mayek","Noto Sans Mende Kikakui","Noto Sans Meroitic","Noto Sans Miao","Noto Sans Modi","Noto Sans Mongolian","Noto Sans Mono","Noto Sans Mro","Noto Sans Multani","Noto Sans Myanmar","Noto Sans NKo","Noto Sans NKo Unjoined","Noto Sans Nabataean","Noto Sans Nag Mundari","Noto Sans Nandinagari","Noto Sans New Tai Lue","Noto Sans Newa","Noto Sans Nushu","Noto Sans Ogham","Noto Sans Ol Chiki","Noto Sans Old Hungarian","Noto Sans Old Italic","Noto Sans Old North Arabian","Noto Sans Old Permic","Noto Sans Old Persian","Noto Sans Old Sogdian","Noto Sans Old South Arabian","Noto Sans Old Turkic","Noto Sans Oriya","Noto Sans Osage","Noto Sans Osmanya","Noto Sans Pahawh Hmong","Noto Sans Palmyrene","Noto Sans Pau Cin Hau","Noto Sans PhagsPa","Noto Sans Phoenician","Noto Sans Psalter Pahlavi","Noto Sans Rejang","Noto Sans Runic","Noto Sans SC","Noto Sans Samaritan","Noto Sans Saurashtra","Noto Sans Sharada","Noto Sans Shavian","Noto Sans Siddham","Noto Sans SignWriting","Noto Sans Sinhala","Noto Sans Sogdian","Noto Sans Sora Sompeng","Noto Sans Soyombo","Noto Sans Sundanese","Noto Sans Sunuwar","Noto Sans Syloti Nagri","Noto Sans Symbols","Noto Sans Symbols 2","Noto Sans Syriac","Noto Sans Syriac Eastern","Noto Sans Syriac Western","Noto Sans TC","Noto Sans Tagalog","Noto Sans Tagbanwa","Noto Sans Tai Le","Noto Sans Tai Tham","Noto Sans Tai Viet","Noto Sans Takri","Noto Sans Tamil","Noto Sans Tamil Supplement","Noto Sans Tangsa","Noto Sans Telugu","Noto Sans Thaana","Noto Sans Thai","Noto Sans Thai Looped","Noto Sans Tifinagh","Noto Sans Tirhuta","Noto Sans Ugaritic","Noto Sans Vai","Noto Sans Vithkuqi","Noto Sans Wancho","Noto Sans Warang Citi","Noto Sans Yi","Noto Sans Zanabazar Square","Noto Serif","Noto Serif Ahom","Noto Serif Armenian","Noto Serif Balinese","Noto Serif Bengali","Noto Serif Devanagari","Noto Serif Display","Noto Serif Dives Akuru","Noto Serif Dogra","Noto Serif Ethiopic","Noto Serif Georgian","Noto Serif Grantha","Noto Serif Gujarati","Noto Serif Gurmukhi","Noto Serif HK","Noto Serif Hebrew","Noto Serif Hentaigana","Noto Serif JP","Noto Serif KR","Noto Serif Kannada","Noto Serif Khitan Small Script","Noto Serif Khmer","Noto Serif Khojki","Noto Serif Lao","Noto Serif Makasar","Noto Serif Malayalam","Noto Serif Myanmar","Noto Serif NP Hmong","Noto Serif Old Uyghur","Noto Serif Oriya","Noto Serif Ottoman Siyaq","Noto Serif SC","Noto Serif Sinhala","Noto Serif TC","Noto Serif Tamil","Noto Serif Tangut","Noto Serif Telugu","Noto Serif Thai","Noto Serif Tibetan","Noto Serif Todhri","Noto Serif Toto","Noto Serif Vithkuqi","Noto Serif Yezidi","Noto Traditional Nushu","Noto Znamenny Musical Notation","Nova Cut","Nova Flat","Nova Mono","Nova Oval","Nova Round","Nova Script","Nova Slim","Nova Square","Numans","Nunito","Nunito Sans","Nuosu SIL","Odibee Sans","Odor Mean Chey","Offside","Oi","Ojuju","Old Standard TT","Oldenburg","Ole","Oleo Script","Oleo Script Swash Caps","Onest","Oooh Baby","Open Sans","Oranienbaum","Orbit","Orbitron","Oregano","Orelega One","Orienta","Original Surfer","Oswald","Outfit","Over the Rainbow","Overlock","Overlock SC","Overpass","Overpass Mono","Ovo","Oxanium","Oxygen","Oxygen Mono","PT Mono","PT Sans","PT Sans Caption","PT Sans Narrow","PT Serif","PT Serif Caption","Pacifico","Padauk","Padyakke Expanded One","Palanquin","Palanquin Dark","Palette Mosaic","Pangolin","Paprika","Parastoo","Parisienne","Parkinsans","Passero One","Passion One","Passions Conflict","Pathway Extreme","Pathway Gothic One","Patrick Hand","Patrick Hand SC","Pattaya","Patua One","Pavanam","Paytone One","Peddana","Peralta","Permanent Marker","Petemoss","Petit Formal Script","Petrona","Phetsarath","Philosopher","Phudu","Piazzolla","Piedra","Pinyon Script","Pirata One","Pixelify Sans","Plaster","Platypi","Play","Playball","Playfair","Playfair Display","Playfair Display SC","Playpen Sans","Playpen Sans Arabic","Playpen Sans Deva","Playpen Sans Hebrew","Playpen Sans Thai","Playwrite AR","Playwrite AR Guides","Playwrite AT","Playwrite AT Guides","Playwrite AU NSW","Playwrite AU NSW Guides","Playwrite AU QLD","Playwrite AU QLD Guides","Playwrite AU SA","Playwrite AU SA Guides","Playwrite AU TAS","Playwrite AU TAS Guides","Playwrite AU VIC","Playwrite AU VIC Guides","Playwrite BE VLG","Playwrite BE VLG Guides","Playwrite BE WAL","Playwrite BE WAL Guides","Playwrite BR","Playwrite BR Guides","Playwrite CA","Playwrite CA Guides","Playwrite CL","Playwrite CL Guides","Playwrite CO","Playwrite CO Guides","Playwrite CU","Playwrite CU Guides","Playwrite CZ","Playwrite CZ Guides","Playwrite DE Grund","Playwrite DE Grund Guides","Playwrite DE LA","Playwrite DE LA Guides","Playwrite DE SAS","Playwrite DE SAS Guides","Playwrite DE VA","Playwrite DE VA Guides","Playwrite DK Loopet","Playwrite DK Loopet Guides","Playwrite DK Uloopet","Playwrite DK Uloopet Guides","Playwrite ES","Playwrite ES Deco","Playwrite ES Deco Guides","Playwrite ES Guides","Playwrite FR Moderne","Playwrite FR Moderne Guides","Playwrite FR Trad","Playwrite FR Trad Guides","Playwrite GB J","Playwrite GB J Guides","Playwrite GB S","Playwrite GB S Guides","Playwrite HR","Playwrite HR Guides","Playwrite HR Lijeva","Playwrite HR Lijeva Guides","Playwrite HU","Playwrite HU Guides","Playwrite ID","Playwrite ID Guides","Playwrite IE","Playwrite IE Guides","Playwrite IN","Playwrite IN Guides","Playwrite IS","Playwrite IS Guides","Playwrite IT Moderna","Playwrite IT Moderna Guides","Playwrite IT Trad","Playwrite IT Trad Guides","Playwrite MX","Playwrite MX Guides","Playwrite NG Modern","Playwrite NG Modern Guides","Playwrite NL","Playwrite NL Guides","Playwrite NO","Playwrite NO Guides","Playwrite NZ","Playwrite NZ Guides","Playwrite PE","Playwrite PE Guides","Playwrite PL","Playwrite PL Guides","Playwrite PT","Playwrite PT Guides","Playwrite RO","Playwrite RO Guides","Playwrite SK","Playwrite SK Guides","Playwrite TZ","Playwrite TZ Guides","Playwrite US Modern","Playwrite US Modern Guides","Playwrite US Trad","Playwrite US Trad Guides","Playwrite VN","Playwrite VN Guides","Playwrite ZA","Playwrite ZA Guides","Plus Jakarta Sans","Pochaevsk","Podkova","Poetsen One","Poiret One","Poller One","Poltawski Nowy","Poly","Pompiere","Ponnala","Ponomar","Pontano Sans","Poor Story","Poppins","Port Lligat Sans","Port Lligat Slab","Potta One","Pragati Narrow","Praise","Prata","Preahvihear","Press Start 2P","Pridi","Princess Sofia","Prociono","Prompt","Prosto One","Protest Guerrilla","Protest Revolution","Protest Riot","Protest Strike","Proza Libre","Public Sans","Puppies Play","Puritan","Purple Purse","Qahiri","Quando","Quantico","Quattrocento","Quattrocento Sans","Questrial","Quicksand","Quintessential","Qwigley","Qwitcher Grypen","REM","Racing Sans One","Radio Canada","Radio Canada Big","Radley","Rajdhani","Rakkas","Raleway","Raleway Dots","Ramabhadra","Ramaraja","Rambla","Rammetto One","Rampart One","Ranchers","Rancho","Ranga","Rasa","Rationale","Ravi Prakash","Readex Pro","Recursive","Red Hat Display","Red Hat Mono","Red Hat Text","Red Rose","Redacted","Redacted Script","Reddit Mono","Reddit Sans","Reddit Sans Condensed","Redressed","Reem Kufi","Reem Kufi Fun","Reem Kufi Ink","Reenie Beanie","Reggae One","Rethink Sans","Revalia","Rhodium Libre","Ribeye","Ribeye Marrow","Righteous","Risque","Road Rage","Roboto","Roboto Condensed","Roboto Flex","Roboto Mono","Roboto Serif","Roboto Slab","Rochester","Rock 3D","Rock Salt","RocknRoll One","Rokkitt","Romanesco","Ropa Sans","Rosario","Rosarivo","Rouge Script","Rowdies","Rozha One","Rubik","Rubik 80s Fade","Rubik Beastly","Rubik Broken Fax","Rubik Bubbles","Rubik Burned","Rubik Dirt","Rubik Distressed","Rubik Doodle Shadow","Rubik Doodle Triangles","Rubik Gemstones","Rubik Glitch","Rubik Glitch Pop","Rubik Iso","Rubik Lines","Rubik Maps","Rubik Marker Hatch","Rubik Maze","Rubik Microbe","Rubik Mono One","Rubik Moonrocks","Rubik Pixels","Rubik Puddles","Rubik Scribble","Rubik Spray Paint","Rubik Storm","Rubik Vinyl","Rubik Wet Paint","Ruda","Rufina","Ruge Boogie","Ruluko","Rum Raisin","Ruslan Display","Russo One","Ruthie","Ruwudu","Rye","STIX Two Text","SUSE","SUSE Mono","Sacramento","Sahitya","Sail","Saira","Saira Condensed","Saira Extra Condensed","Saira Semi Condensed","Saira Stencil One","Salsa","Sanchez","Sancreek","Sankofa Display","Sansation","Sansita","Sansita Swashed","Sarabun","Sarala","Sarina","Sarpanch","Sassy Frass","Satisfy","Savate","Sawarabi Gothic","Sawarabi Mincho","Scada","Scheherazade New","Schibsted Grotesk","Schoolbell","Science Gothic","Scope One","Seaweed Script","Secular One","Sedan","Sedan SC","Sedgwick Ave","Sedgwick Ave Display","Sekuya","Sen","Send Flowers","Sevillana","Seymour One","Shadows Into Light","Shadows Into Light Two","Shafarik","Shalimar","Shantell Sans","Shanti","Share","Share Tech","Share Tech Mono","Shippori Antique","Shippori Antique B1","Shippori Mincho","Shippori Mincho B1","Shizuru","Shojumaru","Short Stack","Shrikhand","Siemreap","Sigmar","Sigmar One","Signika","Signika Negative","Silkscreen","Simonetta","Single Day","Sintony","Sirin Stencil","Sirivennela","Six Caps","Sixtyfour","Sixtyfour Convergence","Skranji","Slabo 13px","Slabo 27px","Slackey","Slackside One","Smokum","Smooch","Smooch Sans","Smythe","Sniglet","Snippet","Snowburst One","Sofadi One","Sofia","Sofia Sans","Sofia Sans Condensed","Sofia Sans Extra Condensed","Sofia Sans Semi Condensed","Solitreo","Solway","Sometype Mono","Song Myung","Sono","Sonsie One","Sora","Sorts Mill Goudy","Sour Gummy","Source Code Pro","Source Sans 3","Source Serif 4","Space Grotesk","Space Mono","Special Elite","Special Gothic","Special Gothic Condensed One","Special Gothic Expanded One","Spectral","Spectral SC","Spicy Rice","Spinnaker","Spirax","Splash","Spline Sans","Spline Sans Mono","Squada One","Square Peg","Sree Krushnadevaraya","Sriracha","Srisakdi","Staatliches","Stack Sans Headline","Stack Sans Notch","Stack Sans Text","Stalemate","Stalinist One","Stardos Stencil","Stick","Stick No Bills","Stint Ultra Condensed","Stint Ultra Expanded","Stoke","Story Script","Strait","Style Script","Stylish","Sue Ellen Francisco","Suez One","Sulphur Point","Sumana","Sunflower","Sunshiney","Supermercado One","Sura","Suranna","Suravaram","Suwannaphum","Swanky and Moo Moo","Syncopate","Syne","Syne Mono","Syne Tactile","TASA Explorer","TASA Orbiter","Tac One","Tagesschrift","Tai Heritage Pro","Tajawal","Tangerine","Tapestry","Taprom","Tauri","Taviraj","Teachers","Teko","Tektur","Telex","Tenali Ramakrishna","Tenor Sans","Text Me One","Texturina","Thasadith","The Girl Next Door","The Nautigal","Tienne","TikTok Sans","Tillana","Tilt Neon","Tilt Prism","Tilt Warp","Timmana","Tinos","Tiny5","Tiro Bangla","Tiro Devanagari Hindi","Tiro Devanagari Marathi","Tiro Devanagari Sanskrit","Tiro Gurmukhi","Tiro Kannada","Tiro Tamil","Tiro Telugu","Tirra","Titan One","Titillium Web","Tomorrow","Tourney","Trade Winds","Train One","Triodion","Trirong","Trispace","Trocchi","Trochut","Truculenta","Trykker","Tsukimi Rounded","Tuffy","Tulpen One","Turret Road","Twinkle Star","Ubuntu","Ubuntu Condensed","Ubuntu Mono","Ubuntu Sans","Ubuntu Sans Mono","Uchen","Ultra","Unbounded","Uncial Antiqua","Underdog","Unica One","UnifrakturCook","UnifrakturMaguntia","Unkempt","Unlock","Unna","UoqMunThenKhung","Updock","Urbanist","VT323","Vampiro One","Varela","Varela Round","Varta","Vast Shadow","Vazirmatn","Vend Sans","Vesper Libre","Viaoda Libre","Vibes","Vibur","Victor Mono","Vidaloka","Viga","Vina Sans","Voces","Volkhov","Vollkorn","Vollkorn SC","Voltaire","Vujahday Script","WDXL Lubrifont JP N","WDXL Lubrifont SC","WDXL Lubrifont TC","Waiting for the Sunrise","Wallpoet","Walter Turncoat","Warnes","Water Brush","Waterfall","Wavefont","Wellfleet","Wendy One","Whisper","WindSong","Winky Rough","Winky Sans","Wire One","Wittgenstein","Wix Madefor Display","Wix Madefor Text","Work Sans","Workbench","Xanh Mono","Yaldevi","Yanone Kaffeesatz","Yantramanav","Yarndings 12","Yarndings 12 Charted","Yarndings 20","Yarndings 20 Charted","Yatra One","Yellowtail","Yeon Sung","Yeseva One","Yesteryear","Yomogi","Young Serif","Yrsa","Ysabeau","Ysabeau Infant","Ysabeau Office","Ysabeau SC","Yuji Boku","Yuji Hentaigana Akari","Yuji Hentaigana Akebono","Yuji Mai","Yuji Syuku","Yusei Magic","ZCOOL KuaiLe","ZCOOL QingKe HuangYou","ZCOOL XiaoWei","Zain","Zalando Sans","Zalando Sans Expanded","Zalando Sans SemiExpanded","Zen Antique","Zen Antique Soft","Zen Dots","Zen Kaku Gothic Antique","Zen Kaku Gothic New","Zen Kurenaido","Zen Loop","Zen Maru Gothic","Zen Old Mincho","Zen Tokyo Zoo","Zeyada","Zhi Mang Xing","Zilla Slab","Zilla Slab Highlight"]}];const wb=sn("Fonts",{state:()=>({fonts:OP(structuredClone(Cb)),loaded:[]}),getters:{chunks(){const e=[],{fonts:r}=this.fonts.find(({name:n})=>n==="Google Fonts");for(let n=0,a=r.length;n<a;n+=20)e.push(r.slice(n,n+20).map(({name:o})=>o));return e}},actions:{search(t){return this.fonts.map(({name:e,fonts:r})=>({name:e,fonts:r.filter(n=>da(n.name,t))})).filter(e=>e.fonts.length)},load(t){if(t=t.replaceAll("'",""),this.loaded.includes(t))return;const e=this.chunks.find(r=>r.includes(t));e&&(un.css(`https://fonts.googleapis.com/css?family=${e.map(encodeURIComponent).join("|")}`),this.loaded=this.loaded.concat(e))},getFontName(t){if(t){for(const e of this.fonts)for(const r of e.fonts)if(kh(r.value)===kh(t))return r.name}return kh(t)}}});function kh(t){return t?.replace(/^(['"]?)(.*?)\1/,"$2")}function OP(t){for(const e of t)e.fonts=(e.fonts||[]).map(r=>r.value?r:{name:r,value:`'${r}'`});return t}const NP={name:"FontPicker",props:{value:String},data:()=>({search:"",active:!1}),computed:{groups(){return this.Fonts.search(this.search)}},watch:{search(){this.$nextTick(this.check),this.active=!1}},beforeCreate(){this.Fonts=wb()},mounted(){this.observer=new ResizeObserver(()=>this.check()),this.observer.observe(this.$el)},destroyed(){this.observer.disconnect()},methods:{next(t=1){const e=this.getFontListItems();if(!e.length)return;const r=ke.$(".uk-active",this.$refs.fonts),n=r?ke.index(e,r)+t:t===1?0:-1;if(n>e.length-1)return;if(n<0){this.active=!1;return}const a=e[n];this.active=a.dataset.name,PP(a,this.$refs.overflow)},check(){const{top:t,bottom:e,left:r,right:n,height:a}=this.$refs.overflow.getBoundingClientRect(),o={top:t-a,bottom:e+a,left:r,right:n};this.getFontListItems().filter(c=>ke.intersectRect(c.getBoundingClientRect(),o)).forEach(c=>this.Fonts.load(c.dataset.value))},select(t){this.$emit("input",t),this.$emit("resolve",t)},getFontListItems(){return ke.$$("li",this.$refs.fonts).filter(t=>ke.$("a",t))}}};function PP(t,e){const r=t.getBoundingClientRect(),n=e.getBoundingClientRect(),a=r.top<n.top?"top":r.bottom>n.bottom?"bottom":!1;a&&(e.scrollTop+=r[a]-n[a])}var IP=function(){var e=this,r=e._self._c;return r("div",[r("div",{staticClass:"yo-dropdown-header"},[r("div",{staticClass:"uk-search uk-search-default uk-width-1-1"},[r("input",{directives:[{name:"model",rawName:"v-model",value:e.search,expression:"search"}],staticClass:"uk-search-input",attrs:{placeholder:e.$t("Search"),type:"search",autofocus:""},domProps:{value:e.search},on:{keydown:[function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"enter",13,n.key,"Enter")?null:e.select(e.active||e.search)},function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"down",40,n.key,["Down","ArrowDown"])?null:(n.preventDefault(),e.next())},function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"up",38,n.key,["Up","ArrowUp"])?null:(n.preventDefault(),e.next(-1))}],input:function(n){n.target.composing||(e.search=n.target.value)}}}),e._v(" "),r("span",{staticClass:"uk-search-icon-flip",attrs:{"uk-search-icon":""}})])]),e._v(" "),r("div",{ref:"overflow",staticClass:"yo-dropdown-body uk-overflow-auto uk-height-max-large",on:{"&scroll":function(n){return e.check.apply(null,arguments)}}},[r("ul",{directives:[{name:"show",rawName:"v-show",value:e.groups.length,expression:"groups.length"}],ref:"fonts",staticClass:"uk-nav uk-dropdown-nav"},[e._l(e.groups,function(n,a){return[a>0?r("li",{key:`${n.name}-divider`,staticClass:"uk-nav-divider"}):e._e(),e._v(" "),r("li",{key:n.name,staticClass:"uk-nav-header"},[e._v(e._s(e.$t(n.name)))]),e._v(" "),e._l(n.fonts,function({name:o,value:c}){return r("li",{key:o,class:{"uk-active":e.active===o},attrs:{"data-name":o,"data-value":c},on:{mouseenter:function(d){e.active=o}}},[r("a",{staticClass:"uk-text-truncate",style:{fontFamily:c},attrs:{href:""},on:{click:function(d){return d.preventDefault(),e.select(c)}}},[e._v(e._s(o))])])})]})],2),e._v(" "),r("span",{directives:[{name:"show",rawName:"v-show",value:!e.groups.length,expression:"!groups.length"}]},[e._v(e._s(e.$t("No font found. Press enter if you are adding a custom font.")))])])])},LP=[],RP=Q(NP,IP,LP,!1),DP=RP.exports;function Eh(t,e,r,n){for(var a=t.length,o=r+(n?1:-1);n?o--:++o<a;)if(e(t[o],o,t))return o;return-1}function MP(t){return t!==t}function $P(t,e,r){for(var n=r-1,a=t.length;++n<a;)if(t[n]===e)return n;return-1}function Sl(t,e,r){return e===e?$P(t,e,r):Eh(t,MP,r)}var FP=9007199254740991;function Th(t){return typeof t=="number"&&t>-1&&t%1==0&&t<=FP}function Kn(t){return t!=null&&Th(t.length)&&!zn(t)}var BP=/\s/;function Sb(t){for(var e=t.length;e--&&BP.test(t.charAt(e)););return e}var HP=/^\s+/;function UP(t){return t&&t.slice(0,Sb(t)+1).replace(HP,"")}var jP="[object Symbol]";function Za(t){return typeof t=="symbol"||yr(t)&&yi(t)==jP}var xb=NaN,WP=/^[-+]0x[0-9a-f]+$/i,GP=/^0b[01]+$/i,zP=/^0o[0-7]+$/i,qP=parseInt;function Ch(t){if(typeof t=="number")return t;if(Za(t))return xb;if(_t(t)){var e=typeof t.valueOf=="function"?t.valueOf():t;t=_t(e)?e+"":e}if(typeof t!="string")return t===0?t:+t;t=UP(t);var r=GP.test(t);return r||zP.test(t)?qP(t.slice(2),r?2:8):WP.test(t)?xb:+t}var Ab=1/0,YP=17976931348623157e292;function KP(t){if(!t)return t===0?t:0;if(t=Ch(t),t===Ab||t===-Ab){var e=t<0?-1:1;return e*YP}return t===t?t:0}function xl(t){var e=KP(t),r=e%1;return e===e?r?e-r:e:0}function Ei(t,e){for(var r=-1,n=t==null?0:t.length,a=Array(n);++r<n;)a[r]=e(t[r],r,t);return a}function XP(t,e){return Ei(e,function(r){return t[r]})}function VP(t,e){for(var r=-1,n=Array(t);++r<t;)n[r]=e(r);return n}var QP="[object Arguments]";function Ob(t){return yr(t)&&yi(t)==QP}var Nb=Object.prototype,JP=Nb.hasOwnProperty,ZP=Nb.propertyIsEnumerable,es=Ob((function(){return arguments})())?Ob:function(t){return yr(t)&&JP.call(t,"callee")&&!ZP.call(t,"callee")};function eI(){return!1}var Pb=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Ib=Pb&&typeof module=="object"&&module&&!module.nodeType&&module,tI=Ib&&Ib.exports===Pb,Lb=tI?on.Buffer:void 0,rI=Lb?Lb.isBuffer:void 0,ts=rI||eI,nI=9007199254740991,iI=/^(?:0|[1-9]\d*)$/;function Al(t,e){var r=typeof t;return e=e??nI,!!e&&(r=="number"||r!="symbol"&&iI.test(t))&&t>-1&&t%1==0&&t<e}var aI="[object Arguments]",sI="[object Array]",oI="[object Boolean]",uI="[object Date]",lI="[object Error]",cI="[object Function]",fI="[object Map]",dI="[object Number]",hI="[object Object]",pI="[object RegExp]",mI="[object Set]",vI="[object String]",gI="[object WeakMap]",_I="[object ArrayBuffer]",bI="[object DataView]",yI="[object Float32Array]",kI="[object Float64Array]",EI="[object Int8Array]",TI="[object Int16Array]",CI="[object Int32Array]",wI="[object Uint8Array]",SI="[object Uint8ClampedArray]",xI="[object Uint16Array]",AI="[object Uint32Array]",kt={};kt[yI]=kt[kI]=kt[EI]=kt[TI]=kt[CI]=kt[wI]=kt[SI]=kt[xI]=kt[AI]=!0,kt[aI]=kt[sI]=kt[_I]=kt[oI]=kt[bI]=kt[uI]=kt[lI]=kt[cI]=kt[fI]=kt[dI]=kt[hI]=kt[pI]=kt[mI]=kt[vI]=kt[gI]=!1;function OI(t){return yr(t)&&Th(t.length)&&!!kt[yi(t)]}function Ol(t){return function(e){return t(e)}}var Rb=typeof exports=="object"&&exports&&!exports.nodeType&&exports,So=Rb&&typeof module=="object"&&module&&!module.nodeType&&module,NI=So&&So.exports===Rb,wh=NI&&G0.process,rs=(function(){try{var t=So&&So.require&&So.require("util").types;return t||wh&&wh.binding&&wh.binding("util")}catch{}})(),Db=rs&&rs.isTypedArray,Nl=Db?Ol(Db):OI,PI=Object.prototype,II=PI.hasOwnProperty;function Mb(t,e){var r=St(t),n=!r&&es(t),a=!r&&!n&&ts(t),o=!r&&!n&&!a&&Nl(t),c=r||n||a||o,d=c?VP(t.length,String):[],p=d.length;for(var v in t)(e||II.call(t,v))&&!(c&&(v=="length"||a&&(v=="offset"||v=="parent")||o&&(v=="buffer"||v=="byteLength"||v=="byteOffset")||Al(v,p)))&&d.push(v);return d}var LI=Object.prototype;function Pl(t){var e=t&&t.constructor,r=typeof e=="function"&&e.prototype||LI;return t===r}function $b(t,e){return function(r){return t(e(r))}}var RI=$b(Object.keys,Object),DI=Object.prototype,MI=DI.hasOwnProperty;function Fb(t){if(!Pl(t))return RI(t);var e=[];for(var r in Object(t))MI.call(t,r)&&r!="constructor"&&e.push(r);return e}function Xn(t){return Kn(t)?Mb(t):Fb(t)}function $I(t){return t==null?[]:XP(t,Xn(t))}var FI=Math.max;function BI(t,e,r,n){t=Kn(t)?t:$I(t),r=r?xl(r):0;var a=t.length;return r<0&&(r=FI(a+r,0)),Sn(t)?r<=a&&t.indexOf(e,r)>-1:!!a&&Sl(t,e,r)>-1}function Bb(t,e,r,n){var a=-1,o=t==null?0:t.length;for(n&&o&&(r=t[++a]);++a<o;)r=e(r,t[a],a,t);return r}function HI(t){return function(e,r,n){for(var a=-1,o=Object(e),c=n(e),d=c.length;d--;){var p=c[++a];if(r(o[p],p,o)===!1)break}return e}}var Hb=HI();function Sh(t,e){return t&&Hb(t,e,Xn)}function UI(t,e){return function(r,n){if(r==null)return r;if(!Kn(r))return t(r,n);for(var a=r.length,o=-1,c=Object(r);++o<a&&n(c[o],o,c)!==!1;);return r}}var xo=UI(Sh);function jI(){this.__data__=new qn,this.size=0}function WI(t){var e=this.__data__,r=e.delete(t);return this.size=e.size,r}function GI(t){return this.__data__.get(t)}function zI(t){return this.__data__.has(t)}var qI=200;function YI(t,e){var r=this.__data__;if(r instanceof qn){var n=r.__data__;if(!bo||n.length<qI-1)return n.push([t,e]),this.size=++r.size,this;r=this.__data__=new Yn(n)}return r.set(t,e),this.size=r.size,this}function ln(t){var e=this.__data__=new qn(t);this.size=e.size}ln.prototype.clear=jI,ln.prototype.delete=WI,ln.prototype.get=GI,ln.prototype.has=zI,ln.prototype.set=YI;var KI="__lodash_hash_undefined__";function XI(t){return this.__data__.set(t,KI),this}function VI(t){return this.__data__.has(t)}function ns(t){var e=-1,r=t==null?0:t.length;for(this.__data__=new Yn;++e<r;)this.add(t[e])}ns.prototype.add=ns.prototype.push=XI,ns.prototype.has=VI;function QI(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(e(t[r],r,t))return!0;return!1}function xh(t,e){return t.has(e)}var JI=1,ZI=2;function Ub(t,e,r,n,a,o){var c=r&JI,d=t.length,p=e.length;if(d!=p&&!(c&&p>d))return!1;var v=o.get(t),b=o.get(e);if(v&&b)return v==e&&b==t;var C=-1,T=!0,A=r&ZI?new ns:void 0;for(o.set(t,e),o.set(e,t);++C<d;){var F=t[C],G=e[C];if(n)var j=c?n(G,F,C,e,t,o):n(F,G,C,t,e,o);if(j!==void 0){if(j)continue;T=!1;break}if(A){if(!QI(e,function(O,x){if(!xh(A,x)&&(F===O||a(F,O,r,n,o)))return A.push(x)})){T=!1;break}}else if(!(F===G||a(F,G,r,n,o))){T=!1;break}}return o.delete(t),o.delete(e),T}var Il=on.Uint8Array;function e3(t){var e=-1,r=Array(t.size);return t.forEach(function(n,a){r[++e]=[a,n]}),r}function Ah(t){var e=-1,r=Array(t.size);return t.forEach(function(n){r[++e]=n}),r}var t3=1,r3=2,n3="[object Boolean]",i3="[object Date]",a3="[object Error]",s3="[object Map]",o3="[object Number]",u3="[object RegExp]",l3="[object Set]",c3="[object String]",f3="[object Symbol]",d3="[object ArrayBuffer]",h3="[object DataView]",jb=Kr?Kr.prototype:void 0,Oh=jb?jb.valueOf:void 0;function p3(t,e,r,n,a,o,c){switch(r){case h3:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case d3:return!(t.byteLength!=e.byteLength||!o(new Il(t),new Il(e)));case n3:case i3:case o3:return _o(+t,+e);case a3:return t.name==e.name&&t.message==e.message;case u3:case c3:return t==e+"";case s3:var d=e3;case l3:var p=n&t3;if(d||(d=Ah),t.size!=e.size&&!p)return!1;var v=c.get(t);if(v)return v==e;n|=r3,c.set(t,e);var b=Ub(d(t),d(e),n,a,o,c);return c.delete(t),b;case f3:if(Oh)return Oh.call(t)==Oh.call(e)}return!1}function Nh(t,e){for(var r=-1,n=e.length,a=t.length;++r<n;)t[a+r]=e[r];return t}function Wb(t,e,r){var n=e(t);return St(t)?n:Nh(n,r(t))}function Gb(t,e){for(var r=-1,n=t==null?0:t.length,a=0,o=[];++r<n;){var c=t[r];e(c,r,t)&&(o[a++]=c)}return o}function zb(){return[]}var m3=Object.prototype,v3=m3.propertyIsEnumerable,qb=Object.getOwnPropertySymbols,Ph=qb?function(t){return t==null?[]:(t=Object(t),Gb(qb(t),function(e){return v3.call(t,e)}))}:zb;function Ih(t){return Wb(t,Xn,Ph)}var g3=1,_3=Object.prototype,b3=_3.hasOwnProperty;function y3(t,e,r,n,a,o){var c=r&g3,d=Ih(t),p=d.length,v=Ih(e),b=v.length;if(p!=b&&!c)return!1;for(var C=p;C--;){var T=d[C];if(!(c?T in e:b3.call(e,T)))return!1}var A=o.get(t),F=o.get(e);if(A&&F)return A==e&&F==t;var G=!0;o.set(t,e),o.set(e,t);for(var j=c;++C<p;){T=d[C];var O=t[T],x=e[T];if(n)var S=c?n(x,O,T,e,t,o):n(O,x,T,t,e,o);if(!(S===void 0?O===x||a(O,x,r,n,o):S)){G=!1;break}j||(j=T=="constructor")}if(G&&!j){var P=t.constructor,R=e.constructor;P!=R&&"constructor"in t&&"constructor"in e&&!(typeof P=="function"&&P instanceof P&&typeof R=="function"&&R instanceof R)&&(G=!1)}return o.delete(t),o.delete(e),G}var Lh=ua(on,"DataView"),Rh=ua(on,"Promise"),is=ua(on,"Set"),Dh=ua(on,"WeakMap"),Yb="[object Map]",k3="[object Object]",Kb="[object Promise]",Xb="[object Set]",Vb="[object WeakMap]",Qb="[object DataView]",E3=oa(Lh),T3=oa(bo),C3=oa(Rh),w3=oa(is),S3=oa(Dh),Xr=yi;(Lh&&Xr(new Lh(new ArrayBuffer(1)))!=Qb||bo&&Xr(new bo)!=Yb||Rh&&Xr(Rh.resolve())!=Kb||is&&Xr(new is)!=Xb||Dh&&Xr(new Dh)!=Vb)&&(Xr=function(t){var e=yi(t),r=e==k3?t.constructor:void 0,n=r?oa(r):"";if(n)switch(n){case E3:return Qb;case T3:return Yb;case C3:return Kb;case w3:return Xb;case S3:return Vb}return e});var x3=1,Jb="[object Arguments]",Zb="[object Array]",Ll="[object Object]",A3=Object.prototype,ey=A3.hasOwnProperty;function O3(t,e,r,n,a,o){var c=St(t),d=St(e),p=c?Zb:Xr(t),v=d?Zb:Xr(e);p=p==Jb?Ll:p,v=v==Jb?Ll:v;var b=p==Ll,C=v==Ll,T=p==v;if(T&&ts(t)){if(!ts(e))return!1;c=!0,b=!1}if(T&&!b)return o||(o=new ln),c||Nl(t)?Ub(t,e,r,n,a,o):p3(t,e,p,r,n,a,o);if(!(r&x3)){var A=b&&ey.call(t,"__wrapped__"),F=C&&ey.call(e,"__wrapped__");if(A||F){var G=A?t.value():t,j=F?e.value():e;return o||(o=new ln),a(G,j,r,n,o)}}return T?(o||(o=new ln),y3(t,e,r,n,a,o)):!1}function Ao(t,e,r,n,a){return t===e?!0:t==null||e==null||!yr(t)&&!yr(e)?t!==t&&e!==e:O3(t,e,r,n,Ao,a)}var N3=1,P3=2;function ty(t,e,r,n){var a=r.length,o=a;if(t==null)return!o;for(t=Object(t);a--;){var c=r[a];if(c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++a<o;){c=r[a];var d=c[0],p=t[d],v=c[1];if(c[2]){if(p===void 0&&!(d in t))return!1}else{var b=new ln,C;if(!(C===void 0?Ao(v,p,N3|P3,n,b):C))return!1}}return!0}function ry(t){return t===t&&!_t(t)}function ny(t){for(var e=Xn(t),r=e.length;r--;){var n=e[r],a=t[n];e[r]=[n,a,ry(a)]}return e}function iy(t,e){return function(r){return r==null?!1:r[t]===e&&(e!==void 0||t in Object(r))}}function I3(t){var e=ny(t);return e.length==1&&e[0][2]?iy(e[0][0],e[0][1]):function(r){return r===t||ty(r,t,e)}}var L3=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,R3=/^\w*$/;function Mh(t,e){if(St(t))return!1;var r=typeof t;return r=="number"||r=="symbol"||r=="boolean"||t==null||Za(t)?!0:R3.test(t)||!L3.test(t)||e!=null&&t in Object(e)}var D3=500;function M3(t){var e=ca(t,function(n){return r.size===D3&&r.clear(),n}),r=e.cache;return e}var $3=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,F3=/\\(\\)?/g,B3=M3(function(t){var e=[];return t.charCodeAt(0)===46&&e.push(""),t.replace($3,function(r,n,a,o){e.push(a?o.replace(F3,"$1"):n||r)}),e}),ay=Kr?Kr.prototype:void 0,sy=ay?ay.toString:void 0;function Rl(t){if(typeof t=="string")return t;if(St(t))return Ei(t,Rl)+"";if(Za(t))return sy?sy.call(t):"";var e=t+"";return e=="0"&&1/t==-1/0?"-0":e}function as(t){return t==null?"":Rl(t)}function ss(t,e){return St(t)?t:Mh(t,e)?[t]:B3(as(t))}function os(t){if(typeof t=="string"||Za(t))return t;var e=t+"";return e=="0"&&1/t==-1/0?"-0":e}function us(t,e){e=ss(e,t);for(var r=0,n=e.length;t!=null&&r<n;)t=t[os(e[r++])];return r&&r==n?t:void 0}function xn(t,e,r){var n=t==null?void 0:us(t,e);return n===void 0?r:n}function H3(t,e){return t!=null&&e in Object(t)}function U3(t,e,r){e=ss(e,t);for(var n=-1,a=e.length,o=!1;++n<a;){var c=os(e[n]);if(!(o=t!=null&&r(t,c)))break;t=t[c]}return o||++n!=a?o:(a=t==null?0:t.length,!!a&&Th(a)&&Al(c,a)&&(St(t)||es(t)))}function oy(t,e){return t!=null&&U3(t,e,H3)}var j3=1,W3=2;function G3(t,e){return Mh(t)&&ry(e)?iy(os(t),e):function(r){var n=xn(r,t);return n===void 0&&n===e?oy(r,t):Ao(e,n,j3|W3)}}function Oo(t){return t}function z3(t){return function(e){return e?.[t]}}function q3(t){return function(e){return us(e,t)}}function Y3(t){return Mh(t)?z3(os(t)):q3(t)}function Pr(t){return typeof t=="function"?t:t==null?Oo:typeof t=="object"?St(t)?G3(t[0],t[1]):I3(t):Y3(t)}function K3(t,e,r,n,a){return a(t,function(o,c,d){r=n?(n=!1,o):e(r,o,c,d)}),r}function Dl(t,e,r){var n=St(t)?Bb:K3,a=arguments.length<3;return n(t,Pr(e),r,a,xo)}var X3={"App Icons":["home","sign-in","sign-out","user","users","lock","unlock","settings","cog","nut","comment","commenting","comments","hashtag","tag","cart","bag","credit-card","mail","receiver","print","search","location","bookmark","code","paint-bucket","camera","video-camera","bell","microphone","bolt","star","heart","happy","lifesaver","rss","social","git-branch","git-fork","world","calendar","clock","history","future","crosshairs","pencil","trash","move","link","link-external","eye","eye-slash","question","info","warning","image","thumbnails","table","list","menu","grid","more","more-vertical","plus","plus-circle","minus","minus-circle","close","close-circle","check","ban","refresh","play","play-circle"],"Device Icons":["tv","desktop","laptop","tablet","phone","tablet-landscape","phone-landscape"],"Storage Icons":["file","file-text","file-pdf","copy","file-edit","folder","album","push","pull","server","database","cloud-upload","cloud-download","download","upload"],"Direction Icons":["reply","forward","expand","shrink","arrow-up-right","arrow-down-arrow-up","arrow-up","arrow-down","arrow-left","arrow-right","chevron-up","chevron-down","chevron-left","chevron-right","chevron-double-left","chevron-double-right","triangle-up","triangle-down","triangle-left","triangle-right"],"Editor Icons":["bold","italic","strikethrough","quote-right"],"Brand Icons":["500px","android","android-robot","apple","behance","bluesky","discord","dribbble","etsy","facebook","flickr","foursquare","github","github-alt","gitter","google","instagram","joomla","linkedin","mastodon","microsoft","pinterest","reddit","signal","soundcloud","telegram","threads","tiktok","tripadvisor","tumblr","twitch","uikit","vimeo","whatsapp","wordpress","x","xing","yelp","yootheme","youtube"]};const V3={props:{icons:{type:[Object,Array],default:()=>X3}},data:()=>({search:""}),computed:{iconList(){return Dl(this.icons,(t,e)=>t.concat(e),[]).filter(t=>!this.search||BI(t,this.search))}}};var Q3=function(){var e=this,r=e._self._c;return r("div",[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(e.$t("%smart_count% Icon |||| %smart_count% Icons",e.iconList.length)))])]),e._v(" "),r("div",[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:e.search,expression:"search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:e.search},on:{input:function(n){n.target.composing||(e.search=n.target.value)}}})])])])])])]),e._v(" "),e.iconList.length?r("div",{staticClass:"yo-finder-body",attrs:{"uk-overflow-auto":""}},[r("div",{staticClass:"uk-grid-collapse uk-child-width-auto",attrs:{"uk-grid":""}},e._l(e.iconList,function(n){return r("div",{key:n},[r("div",{staticClass:"uk-card uk-card-body uk-card-small uk-card-hover yo-panel uk-text-center"},[r("span",{attrs:{icon:n,"uk-icon":"",ratio:"2"}}),e._v(" "),r("a",{staticClass:"uk-position-cover",attrs:{title:n,href:"","uk-tooltip":"delay: 500"},on:{click:function(a){return a.preventDefault(),e.$emit("select",n)}}})])])}),0)]):r("h3",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(e.$t("No icons found.")))])])},J3=[],Z3=Q(V3,Q3,J3,!1),eL=Z3.exports;const tL={name:"Switcher",props:{tabs:{type:Array,required:!0},storage:String,active:{type:Number,default(){return this.storage&&xl(wt[this.storage])||0}}},data:()=>({shown:[]}),methods:{selectTab(t,e){this.storage&&(wt[this.storage]=e),this.shown.push(e),this.$emit("show",t,e),this.$nextTick(()=>this.$el.querySelector(`.uk-switcher li:nth-child(${e+1}) [autofocus]`)?.focus())}}};var rL=function(){var e=this,r=e._self._c;return r("div",[r("div",{staticClass:"uk-modal-header uk-flex uk-flex-middle uk-flex-between"},[r("ul",{staticClass:"uk-margin-remove-bottom",attrs:{active:e.active,"uk-tab":"connect: !* +; animation: uk-animation-fade"}},e._l(e.tabs,function(n){return r("li",{key:n},[r("a",{attrs:{href:""}},[e._v(e._s(e.$t(n)))])])}),0),e._v(" "),e._t("header-right")],2),e._v(" "),r("div",{staticClass:"uk-switcher"},e._l(e.tabs,function(n,a){return r("div",{key:n,on:{beforeshow:function(o){return o.target!==o.currentTarget?null:e.selectTab(n,a)}}},[e.shown.includes(a)?e._t(n):e._e()],2)}),0)])},nL=[],iL=Q(tL,rL,nL,!1),ls=iL.exports;const aL={components:{Switcher:ls},computed:{tabs(){const{i18n:t}=oe,e=this.$trigger("iconsModalTabs");return[{name:t.t("icons"),component:eL},...e||[]]}}};var sL=function(){var e=this,r=e._self._c;return r("Switcher",{attrs:{tabs:e.tabs.map(({name:n})=>n)},scopedSlots:e._u([e._l(e.tabs,function(n){return{key:n.name,fn:function(){return[r("div",{key:n.name,staticClass:"uk-modal-body"},[r(n.component,{tag:"component",on:{select:function(a){return e.$emit("resolve",a)}}})],1)]},proxy:!0}})],null,!0)})},oL=[],uL=Q(aL,sL,oL,!1),lL=uL.exports,$h=function(){return on.Date.now()},cL="Expected a function",fL=Math.max,dL=Math.min;function Vn(t,e,r){var n,a,o,c,d,p,v=0,b=!1,C=!1,T=!0;if(typeof t!="function")throw new TypeError(cL);e=Ch(e)||0,_t(r)&&(b=!!r.leading,C="maxWait"in r,o=C?fL(Ch(r.maxWait)||0,e):o,T="trailing"in r?!!r.trailing:T);function A(B){var q=n,le=a;return n=a=void 0,v=B,c=t.apply(le,q),c}function F(B){return v=B,d=setTimeout(O,e),b?A(B):c}function G(B){var q=B-p,le=B-v,ae=e-q;return C?dL(ae,o-le):ae}function j(B){var q=B-p,le=B-v;return p===void 0||q>=e||q<0||C&&le>=o}function O(){var B=$h();if(j(B))return x(B);d=setTimeout(O,G(B))}function x(B){return d=void 0,T&&n?A(B):(n=a=void 0,c)}function S(){d!==void 0&&clearTimeout(d),v=0,n=p=a=d=void 0}function P(){return d===void 0?c:x($h())}function R(){var B=$h(),q=j(B);if(n=arguments,a=this,p=B,q){if(d===void 0)return F(p);if(C)return clearTimeout(d),d=setTimeout(O,e),A(p)}return d===void 0&&(d=setTimeout(O,e)),c}return R.cancel=S,R.flush=P,R}const hL={props:{value:String},data:()=>({loading:!1,suggestion:null,geolocationAvailable:"geolocation"in navigator}),mounted(){this.dropdown=nr.dropdown(this.$refs.dropdown,{toggle:!1,mode:"click",animation:!1,stretch:"x",boundaryX:this.$el})},destroyed(){this.hide()},methods:{eventInput({target:{value:t}}){if(pL(t)){const[e,r]=t.split(",").map(n=>n.trim());this.suggestion={lat:e,lng:r};return}t?(this.loading=!0,this.suggest(t)):this.hide()},eventKeydown({key:t}){t==="Enter"&&this.suggestion&&this.input(this.suggestion),t==="ArrowDown"&&this.show()},eventClick(){navigator.geolocation.getCurrentPosition(({coords:{latitude:t,longitude:e}})=>{this.input({lat:t,lng:e})})},suggest:Vn(async function(t){const e=await IN(t);e&&(this.suggestion=e[0],this.suggestion?this.show():this.hide()),this.loading=!1},400),show(){this.suggestion?.address&&this.dropdown.show(this.$el)},hide(){return this.dropdown.hide(!1)},input(t){this.$emit("input",t?`${t.lat},${t.lng}`:""),this.suggestion=null,this.$refs.input.value="",this.hide()}}};function pL(t){return t?.match(/^[-+]?([1-8]?\d(\.\d+)?|90(\.0+)?),\s*[-+]?(180(\.0+)?|((1[0-7]\d)|([1-9]?\d))(\.\d+)?)$/)}var mL=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-inline uk-display-block"},[r("div",{directives:[{name:"show",rawName:"v-show",value:!e.loading,expression:"!loading"}],staticClass:"uk-position-center-right uk-position-small"},[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap"},[r("li",{directives:[{name:"show",rawName:"v-show",value:e.value,expression:"value"}]},[r("a",{staticClass:"uk-icon-link",attrs:{href:"","uk-icon":"close-circle"},on:{click:function(n){return n.preventDefault(),e.input()}}})]),e._v(" "),e.geolocationAvailable?r("li",[r("a",{staticClass:"uk-icon-link",attrs:{href:"","uk-icon":"location"},on:{click:function(n){return n.preventDefault(),e.eventClick.apply(null,arguments)}}})]):e._e()])]),e._v(" "),r("span",{directives:[{name:"show",rawName:"v-show",value:e.loading,expression:"loading"}],staticClass:"uk-form-icon uk-form-icon-flip uk-icon",attrs:{"uk-spinner":"ratio: 0.5"}}),e._v(" "),r("input",{ref:"input",staticClass:"uk-input",attrs:{placeholder:e.value,type:"text"},on:{input:e.eventInput,keydown:e.eventKeydown}}),e._v(" "),r("div",{ref:"dropdown"},[r("ul",{staticClass:"uk-nav uk-dropdown-nav"},[r("li",[r("a",{attrs:{href:""},on:{click:function(n){return n.preventDefault(),e.input(e.suggestion)}}},[r("span",{staticClass:"uk-margin-small-right uk-icon",attrs:{"uk-icon":"location"}}),e._v(" "),e.suggestion?r("span",[e._v(e._s(e.suggestion.address))]):e._e()])])])])])},vL=[],gL=Q(hL,mL,vL,!1),_L=gL.exports;const bL={props:{value:{type:String,default:""},defaultValue:{type:String,default:"53.5503,10.0006"}},render:t=>t("div",{class:"uk-preserve-width",style:{minHeight:"260px",zIndex:"0"}}),computed:{latlng(){const[t,e=""]=(this.value||this.defaultValue).split(",");return[t,e]}},watch:{latlng(t){this.marker.setLatLng(t).update(),this.map.panTo(t)}},mounted:function(){const{L:t}=window;this.map=t.map(this.$el).setView(this.latlng,13),this.marker=new t.marker(this.latlng,{draggable:!0}),t.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="http://osm.org/copyright">OpenStreetMap</a>'}).addTo(this.map),this.map.addLayer(this.marker),this.marker.on("dragend",()=>e(this.marker.getLatLng())),this.map.on("click",({latlng:r})=>e(r)),"IntersectionObserver"in window&&(this.observer=new IntersectionObserver(()=>this.map.invalidateSize()),this.observer.observe(this.$el));const e=({lat:r,lng:n})=>this.$emit("input",`${r.toFixed(4)},${n.toFixed(4)}`)},destroyed(){this?.observer.disconnect(),this.map.off()}};var yL=()=>({component:(async()=>(window.L||await un({js:`${ue.config.base}/vendor/assets/leaflet/leaflet/dist/leaflet.js`,css:`${ue.config.base}/vendor/assets/leaflet/leaflet/dist/leaflet.css`}),bL))(),loading:{render:t=>t("div",{attrs:{"uk-spinner":""},class:"uk-text-center uk-width-1-1"})},error:{render:t=>t("div",{class:"uk-alert uk-alert-danger"},oe.i18n.t("Failed loading map"))},timeout:3e3});const kL={components:{LocationInput:_L,MapInput:yL},props:{value:String},methods:{input(t){this.$emit("input",t)}}};var EL=function(){var e=this,r=e._self._c;return r("div",[r("MapInput",{attrs:{value:e.value},on:{input:e.input}}),e._v(" "),r("div",{staticClass:"uk-margin-small-top"},[r("LocationInput",{attrs:{value:e.value},on:{input:e.input}})],1)],1)},TL=[],CL=Q(kL,EL,TL,!1),wL=CL.exports,Fh=$b(Object.getPrototypeOf,Object),SL="[object Object]",xL=Function.prototype,AL=Object.prototype,uy=xL.toString,OL=AL.hasOwnProperty,NL=uy.call(Object);function Ml(t){if(!yr(t)||yi(t)!=SL)return!1;var e=Fh(t);if(e===null)return!0;var r=OL.call(e,"constructor")&&e.constructor;return typeof r=="function"&&r instanceof r&&uy.call(r)==NL}function Ut(t,...e){const{i18n:r}=oe;Ml(t)?t.message=r.t(t.message):typeof t=="string"&&(t=r.t(t)),nr.notification.call(null,t,...e)}function PL(t,e){var r=[];return xo(t,function(n,a,o){e(n,a,o)&&r.push(n)}),r}function Ti(t,e){var r=St(t)?Gb:PL;return r(t,Pr(e))}function cs(t,{body:e,method:r,...n}){return Ue(t,n).addon(IL).fetch(r,"",e).res().then(LL,RL)}["GET","DELETE"].forEach(t=>{cs[t.toLowerCase()]=function(e,r){return cs(e,{...r,method:t})}}),["PUT","POST","PATCH"].forEach(t=>{cs[t.toLowerCase()]=function(e,r,n){return cs(e,{...n,body:r,method:t})}});const IL={beforeRequest(t,{params:e}){return t.query({...e})}};async function LL(t){const e=t.headers.get("Content-Type"),r={};return(Bh(e)||e.startsWith("text/"))&&Object.assign(r,ML(await t.text(),Bh(e))),new Proxy(t,{get:(n,a)=>a in r?r[a]:n[a]})}function RL(t){let{headers:e,statusText:r}=t.response;throw Bh(e.get("Content-Type"))&&(r=JSON.parse(t.message)),Object.assign(t,{statusText:r})}function Bh(t){return(t??"").startsWith("application/json")}function DL(t){const e=t.match(/^\s*(\[|\{)/);return e&&{"[":/]\s*$/,"{":/}\s*$/}[e[1]].test(t)}function ML(t,e){if(e||DL(t)){let r;try{r=JSON.parse(t)}catch{r=null}return{data:r,body:r,json:()=>r}}return{data:t,body:t}}function $L(t,e){const[r,n]=e(t).split("?",2);return`${r}${FL(n,{...t.params})}`}function FL(t,e){const r=new URLSearchParams(t);for(const n in e){const a=e[n];if(Array.isArray(e[n]))for(const o of a)r.append(n+"[]",ly(o));else r.append(n,ly(a))}return r.size?`?${r}`:""}function ly(t){return t===void 0?"":t}function BL(t,e){const r=e(t),n=t.root?.replace(/\/$/,"")||"";return/^(https?:)?\//.test(r)?r:`${n}/${r}`}function jr(t,e={}){const r=typeof t=="string"?{url:t,params:e}:t;return jr.transforms.reduceRight((a,o)=>c=>(jr.transform[o]??o)(c,a),a=>a.url)({...jr.options,...r})}const HL={url:"",root:null,params:{}};jr.options=HL,jr.transform={query:$L,root:BL},jr.transforms=["query","root"];function cy(t){cy.installed||(t.url=jr,t.http=cs,Object.assign(t.prototype,{$url:jr,$http:cs}))}const UL={__name:"List",props:{folders:Array,files:Array,selected:Array},emits:["select","load"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,a=Be(null),o=Ae(()=>!!r.selected.length&&r.selected.length===r.files.length+r.folders.length);gt(()=>r.selected,()=>{const p=a.value;p.checked=o.value,p.indeterminate=!o.value&&!!r.selected.length});function c(){(o.value?[...r.selected]:r.folders.concat(r.files).filter(v=>!d(v,r.selected))).forEach(v=>e("select",v))}function d(p){return r.selected.includes(p)}return{__sfc:!0,i18n:n,emit:e,props:r,toggleAll:a,selectedAll:o,toggle:c,isSelected:d,api:ue,isImage:yo,isVideo:fa,Url:jr}}};var jL=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("table",{staticClass:"uk-table uk-table-divider uk-table-hover uk-table-middle"},[r("thead",[r("tr",[r("th",{staticClass:"uk-table-shrink"},[r("input",{ref:"toggleAll",staticClass:"uk-checkbox",attrs:{type:"checkbox"},on:{change:n.toggle}})]),e._v(" "),r("th",{attrs:{colspan:"2"}},[e._v(e._s(n.i18n.t("Name")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink uk-text-center"},[e._v(e._s(n.i18n.t("Size")))])])]),e._v(" "),r("tbody",[e._l(e.folders,function(a){return r("tr",{key:a.path,staticClass:"uk-visible-hover",class:{"uk-active":n.isSelected(a)},on:{click:function(o){o.target.tagName!=="BUTTON"&&n.emit("select",a)}}},[r("td",[r("input",{staticClass:"uk-checkbox",attrs:{type:"checkbox"},domProps:{checked:n.isSelected(a)}})]),e._v(" "),r("td",{staticClass:"uk-table-shrink"},[r("img",{staticClass:"uk-preserve uk-preserve-width uk-icon",attrs:{"uk-svg":`${n.api.config.assets}/images/finder-list-folder.svg`}})]),e._v(" "),r("td",{staticClass:"uk-table-expand uk-text-break"},[r("button",{staticClass:"uk-button uk-button-link",attrs:{type:"button"},on:{click:function(o){return n.emit("load",a.path)}}},[e._v(e._s(a.name))])]),e._v(" "),r("td")])}),e._v(" "),e._l(e.files,function(a){return r("tr",{key:a.path,staticClass:"uk-visible-hover",class:{"uk-active":n.isSelected(a)},on:{click:function(o){return n.emit("select",a)}}},[r("td",[r("input",{staticClass:"uk-checkbox",attrs:{type:"checkbox"},domProps:{checked:n.isSelected(a)}})]),e._v(" "),r("td",{staticClass:"uk-table-shrink uk-text-center"},[n.isImage(a.url)?r("img",{staticClass:"uk-icon uk-icon-image",attrs:{loading:"lazy",src:n.Url(a.url)}}):n.isVideo(a.url)?r("video",{staticClass:"uk-icon uk-icon-image",attrs:{src:n.Url(a.url),loop:"",muted:"",playsinline:"","uk-video":"hover"},domProps:{muted:!0}}):r("img",{staticClass:"uk-preserve uk-preserve-width uk-icon",attrs:{loading:"lazy",src:`${n.api.config.assets}/images/finder-list-file.svg`,"uk-svg":""}})]),e._v(" "),r("td",{staticClass:"uk-table-expand uk-text-break"},[e._v(e._s(a.name))]),e._v(" "),r("td",{staticClass:"uk-text-right uk-text-nowrap"},[e._v(e._s(a.size))])])})],2)])},WL=[],GL=Q(UL,jL,WL,!1),zL=GL.exports;const qL={__name:"Thumbnail",props:{folders:Array,files:Array,selected:Array},emits:["select","load"],setup(t,{emit:e}){const r=t;function n(a){return r.selected.includes(a)}return{__sfc:!0,emit:e,props:r,isSelected:n,api:ue,isImage:yo,isVideo:fa,Url:jr}}};var YL=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("ul",{staticClass:"uk-grid-medium uk-grid-match uk-child-width-1-2@s uk-child-width-1-3@l uk-child-width-1-4@xl",attrs:{"uk-grid":""}},[e._l(n.props.folders,function(a){return r("li",{key:a.path},[r("div",{staticClass:"uk-card uk-card-default uk-card-small",on:{click:function(o){o.target.tagName!=="BUTTON"&&n.emit("select",a)}}},[r("div",{staticClass:"uk-card-media-top uk-position-relative"},[r("img",{staticClass:"uk-object-none yo-finder-thumbnail-folder",staticStyle:{"aspect-ratio":"80 / 55"},attrs:{loading:"lazy",src:`${n.api.config.assets}/images/finder-thumbnail-folder.svg`,width:"800",height:"550",alt:""}})]),e._v(" "),r("div",{staticClass:"uk-card-body uk-text-center uk-text-truncate uk-text-nowrap"},[r("input",{staticClass:"uk-checkbox",attrs:{type:"checkbox"},domProps:{checked:n.isSelected(a)}}),e._v(" "),r("button",{staticClass:"uk-button uk-button-link",attrs:{type:"button"},on:{click:function(o){return n.emit("load",a.path)}}},[e._v(e._s(a.name))])])])])}),e._v(" "),e._l(n.props.files,function(a){return r("li",{key:a.path},[r("div",{staticClass:"uk-card uk-card-default uk-card-small",on:{click:function(o){return n.emit("select",a)}}},[r("div",{staticClass:"uk-card-media-top uk-position-relative"},[n.isImage(a.url)?r("img",{staticClass:"uk-object-scale-down",staticStyle:{"aspect-ratio":"80 / 55"},attrs:{loading:"lazy",src:n.Url(a.url),width:"800",height:"550",alt:""}}):n.isVideo(a.url)?r("video",{staticClass:"uk-object-scale-down",staticStyle:{"aspect-ratio":"80 / 55"},attrs:{src:n.Url(a.url),width:"800",height:"550",loop:"",muted:"",playsinline:"","uk-video":"hover"},domProps:{muted:!0}}):r("img",{staticClass:"uk-object-none yo-finder-thumbnail-file",staticStyle:{"aspect-ratio":"80 / 55"},attrs:{loading:"lazy",src:`${n.api.config.assets}/images/finder-thumbnail-file.svg`,width:"800",height:"550",alt:""}})]),e._v(" "),r("div",{staticClass:"uk-card-body uk-text-center uk-text-truncate uk-text-nowrap"},[r("input",{staticClass:"uk-checkbox",attrs:{type:"checkbox"},domProps:{checked:n.isSelected(a)}}),e._v(` `+e._s(a.name)+` `)])])])})],2)},KL=[],XL=Q(qL,YL,KL,!1),VL=XL.exports;const QL={__name:"Finder",emits:"input",setup(t,{emit:e}){const r="finder.path",n="finder.view",a="finder.bgColor",{i18n:o}=oe,c=st("Finder"),d=Jt({view:wt[n]||"list",bgColor:wt[a]||"light",search:"",selected:[]}),p=Be(null),v=Be(null),b=Ae(()=>Ti(T.value,{type:"file"})),C=Ae(()=>Ti(T.value,{type:"folder"})),T=Ae(()=>P(Ti(c.files,({name:R})=>da(R,d.search))));gt(()=>d.search,()=>d.selected=[]),gt(()=>d.selected,R=>e("input",R)),Gt(()=>{c.load(wt[r]),c.canCreate()&&nr.upload(p.value,x(v.value))}),Nr(()=>{wt[n]=d.view,wt[r]=c.path,wt[a]=d.bgColor});async function A(R){d.selected=[],d.search="",await c.load(R)}function F(R){d.selected=[],c.removeFiles(R)}async function G({name:R}){const B=await nr.modal.prompt(o.t("Rename"),R,{stack:!0});B&&(d.selected=[],c.renameFile(R,B))}async function j(){const R=await nr.modal.prompt(o.t("Folder Name"),"",{stack:!0});R&&c.createFolder(R)}function O(R){const B=d.selected.indexOf(R);d.selected=~B?d.selected.toSpliced(B,1):[...d.selected,R]}function x(R){return{name:"Filedata[]",multiple:!0,beforeAll:B=>{c?.uploadSettings(B)},loadStart(B){R.max=B.total,R.value=B.loaded,R.hidden=!1},progress(B){R.max=B.total,R.value=B.loaded},loadEnd(B){R.max=B.total,R.value=B.loaded},error:B=>{Ut(B.xhr?.response?.message||B.message,"danger"),R.hidden=!0},fail:B=>Ut(B,"danger"),complete:({responseText:B})=>c.showMessage({body:B}),completeAll:()=>A().then(()=>R.hidden=!0)}}function S(R=c.path){const B=R.split("/").filter(le=>le.length),q=[{path:"",title:o.t("Root")}].concat(B.map((le,ae)=>({path:B.slice(0,ae+1).join("/"),title:le})));return q[q.length-1].current=!0,q}function P(R){return R.toSorted(({name:B},{name:q})=>B.localeCompare(q,void 0,{numeric:!0}))}return{__sfc:!0,storagePath:r,storageView:n,storageBgColor:a,i18n:o,emit:e,Finder:c,state:d,el:p,progress:v,files:b,folders:C,searched:T,load:A,remove:F,rename:G,create:j,toggleSelect:O,uploadFile:x,breadcrumbs:S,sortFiles:P,List:zL,Thumbnail:VL}}};var JL=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{ref:"el"},[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[n.state.selected.length?r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% File selected |||| %smart_count% Files selected",n.state.selected.length)))]):r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% File |||| %smart_count% Files",n.searched.length)))])]),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:n.state.selected.length===1&&n.Finder.canCreate(),expression:"state.selected.length === 1 && Finder.canCreate()"}]},[r("a",{staticClass:"uk-icon-link",attrs:{href:"",title:n.i18n.t("Rename"),"uk-icon":"file-edit","uk-tooltip":"delay: 500"},on:{click:function(a){return a.preventDefault(),n.rename(n.state.selected[0])}}})]),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:n.state.selected.length&&n.Finder.canDelete(),expression:"state.selected.length && Finder.canDelete()"}]},[r("a",{staticClass:"uk-icon-link",attrs:{href:"",title:n.i18n.t("Delete"),"uk-icon":"trash","uk-tooltip":"delay: 500"},on:{click:function(a){return a.preventDefault(),n.remove(n.state.selected)}}})]),e._v(" "),r("div",[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:n.state.search,expression:"state.search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:n.state.search},on:{input:function(a){a.target.composing||e.$set(n.state,"search",a.target.value)}}})])])])])]),e._v(" "),r("div",[r("div",{staticClass:"uk-grid-medium uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",{directives:[{name:"show",rawName:"v-show",value:n.state.view==="thumbnail",expression:"state.view === 'thumbnail'"}]},[r("ul",{staticClass:"uk-dotnav yo-dotnav"},e._l({light:n.i18n.t("Light"),white:n.i18n.t("White"),dark:n.i18n.t("Dark")},function(a,o){return r("li",{key:o},[r("a",{class:`yo-dotnav-item-${o}`,attrs:{href:"",title:n.i18n.t("Set %color% background",{color:o}),"uk-tooltip":"delay: 500","aria-label":n.i18n.t("Set %color% background",{color:o})},on:{click:function(c){c.preventDefault(),n.state.bgColor=o}}},[e._v(e._s(a))])])}),0)]),e._v(" "),r("div",[r("ul",{staticClass:"uk-grid-small uk-child-width-auto",attrs:{"uk-grid":""}},[r("li",{class:{"uk-active":n.state.view==="list"}},[r("a",{staticClass:"uk-icon-link",attrs:{href:"",title:n.i18n.t("Table"),"uk-icon":"table","uk-tooltip":"delay: 500"},on:{click:function(a){a.preventDefault(),n.state.view="list"}}})]),e._v(" "),r("li",{class:{"uk-active":n.state.view==="thumbnail"}},[r("a",{staticClass:"uk-icon-link",attrs:{href:"",title:n.i18n.t("Thumbnails"),"uk-icon":"thumbnails","uk-tooltip":"delay: 500"},on:{click:function(a){a.preventDefault(),n.state.view="thumbnail"}}})])])]),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:n.Finder.canCreate(),expression:"Finder.canCreate()"}]},[r("button",{staticClass:"uk-button uk-button-default uk-margin-small-right",attrs:{type:"button"},on:{click:function(a){return n.create()}}},[e._v(e._s(n.i18n.t("Add Folder")))]),e._v(" "),r("div",{attrs:{"uk-form-custom":""}},[r("input",{attrs:{accept:n.Finder.accept,type:"file",name:"files[]",multiple:"multiple"}}),e._v(" "),r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Upload")))])])])])])]),e._v(" "),r("nav",{staticClass:"uk-margin",attrs:{"aria-label":n.i18n.t("Breadcrumb")}},[r("ul",{staticClass:"uk-breadcrumb uk-margin-remove"},e._l(n.breadcrumbs(),function({path:a,title:o,current:c}){return r("li",{key:a,class:{"uk-active":c}},[c?r("span",{attrs:{"aria-current":"true"}},[e._v(e._s(o))]):r("a",{attrs:{href:""},on:{click:function(d){return d.preventDefault(),n.load(a)}}},[e._v(e._s(o))])])}),0)]),e._v(" "),r("progress",{ref:"progress",staticClass:"uk-progress yo-finder-progress",attrs:{hidden:"hidden"}}),e._v(" "),n.searched.length?r("div",{class:["yo-finder-body uk-overflow-auto",{[`yo-finder-body-${n.state.bgColor}`]:n.state.view==="thumbnail"&&n.state.bgColor!=="light","uk-light":n.state.view==="thumbnail"&&n.state.bgColor==="dark"}],attrs:{"uk-overflow-auto":""}},[r(n.state.view==="thumbnail"?n.Thumbnail:n.List,{tag:"component",attrs:{folders:n.folders,files:n.files,selected:n.state.selected},on:{select:function(a){return n.toggleSelect(a)},load:n.load}})],1):r("h3",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(n.i18n.t("No files found.")))])])},ZL=[],eR=Q(QL,JL,ZL,!1),tR=eR.exports;function fy(t,e={}){const{state:r,actions:n}=e;return sn(t,{state:()=>({path:"",files:[],accept:"image/*,audio/*,video/*,text/*,application/pdf",...r}),actions:{async load(a=this.path){const o=await this.loadFiles(a);this.path=a,this.files=o||[]},loadFiles(){throw`${t}.loadFiles() needs to be implemented`},removeFiles(){throw`${t}.removeFiles() needs to be implemented`},renameFile(){throw`${t}.renameFile(oldName, newName) needs to be implemented`},createFolder(){throw`${t}.createFolder() needs to be implemented`},uploadSettings(){throw`${t}.uploadSettings() needs to be implemented`},showMessage(){throw`${t}.showMessage() needs to be implemented`},canCreate(){return!0},canDelete(){return!0},...n}})}const rR={name:"FilesTab",components:{Finder:tR},props:{type:{type:[Array,String],default:"image"},multiple:{type:Boolean,default:!1}},data:()=>({selected:[]}),methods:{hasSelection(){const{length:t}=this.selected;if(!t||!this.multiple&&t>1)return!1;const e={image:yo,video:fa};return this.selected.every(({url:r})=>[].concat(this.type).some(n=>!e[n]||e[n](r)))},select(t){this.$emit("input",t.map(({url:e})=>e))}}};var nR=function(){var e=this,r=e._self._c;return r("div",[r("div",{staticClass:"uk-modal-body"},[r("Finder",{model:{value:e.selected,callback:function(n){e.selected=n},expression:"selected"}})],1),e._v(" "),r("div",{staticClass:"uk-modal-footer uk-text-right"},[r("button",{staticClass:"uk-button uk-button-text uk-modal-close uk-margin-right",attrs:{type:"button"}},[e._v(e._s(e.$t("Cancel")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-primary",attrs:{disabled:!e.hasSelection(),type:"button"},on:{click:function(n){return n.preventDefault(),e.select(e.selected)}}},[e._v(e._s(e.$t("Select")))])])])},iR=[],aR=Q(rR,nR,iR,!1),sR=aR.exports,dy=Kr?Kr.isConcatSpreadable:void 0;function oR(t){return St(t)||es(t)||!!(dy&&t&&t[dy])}function $l(t,e,r,n,a){var o=-1,c=t.length;for(r||(r=oR),a||(a=[]);++o<c;){var d=t[o];r(d)?Nh(a,d):n||(a[a.length]=d)}return a}function uR(t,e,r){switch(r.length){case 0:return t.call(e);case 1:return t.call(e,r[0]);case 2:return t.call(e,r[0],r[1]);case 3:return t.call(e,r[0],r[1],r[2])}return t.apply(e,r)}var hy=Math.max;function py(t,e,r){return e=hy(e===void 0?t.length-1:e,0),function(){for(var n=arguments,a=-1,o=hy(n.length-e,0),c=Array(o);++a<o;)c[a]=n[e+a];a=-1;for(var d=Array(e+1);++a<e;)d[a]=n[a];return d[e]=r(c),uR(t,this,d)}}function lR(t){return function(){return t}}var Fl=(function(){try{var t=ua(Object,"defineProperty");return t({},"",{}),t}catch{}})(),cR=Fl?function(t,e){return Fl(t,"toString",{configurable:!0,enumerable:!1,value:lR(e),writable:!0})}:Oo,fR=800,dR=16,hR=Date.now;function pR(t){var e=0,r=0;return function(){var n=hR(),a=dR-(n-r);if(r=n,a>0){if(++e>=fR)return arguments[0]}else e=0;return t.apply(void 0,arguments)}}var my=pR(cR);function Bl(t,e){return my(py(t,e,Oo),t+"")}function vy(t,e){var r=t==null?0:t.length;return!!r&&Sl(t,e,0)>-1}function mR(t,e,r){for(var n=-1,a=t==null?0:t.length;++n<a;)if(r(e,t[n]))return!0;return!1}function vR(){}var gR=1/0,_R=is&&1/Ah(new is([,-0]))[1]==gR?function(t){return new is(t)}:vR,bR=200;function gy(t,e,r){var n=-1,a=vy,o=t.length,c=!0,d=[],p=d;if(r)c=!1,a=mR;else if(o>=bR){var v=e?null:_R(t);if(v)return Ah(v);c=!1,a=xh,p=new ns}else p=e?[]:d;e:for(;++n<o;){var b=t[n],C=e?e(b):b;if(b=r||b!==0?b:0,c&&C===C){for(var T=p.length;T--;)if(p[T]===C)continue e;e&&p.push(C),d.push(b)}else a(p,C,r)||(p!==d&&p.push(C),d.push(b))}return d}function No(t){return yr(t)&&Kn(t)}function _y(t){var e=t==null?0:t.length;return e?t[e-1]:void 0}var by=Bl(function(t){var e=_y(t);return No(e)&&(e=void 0),gy($l(t,1,No,!0),Pr(e))});const yR=48;var kR={icons({filter:t,page:e,search:r}){return t=Object.fromEntries(Object.entries(t).filter(([,n])=>!!n)),Ue(`${ue.config.api}/v1/library/icons`).query({key:ue.config.apikey,filter:t,search:r,page:e,per_page:yR}).get().json()}};const Hl="icons.filter",Ul={},ER={__name:"Icons",props:{container:{type:String,default:".uk-modal"},content:{type:String,default:".uk-modal-dialog"},wide:{type:Boolean,default:!1}},emits:["select"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,a=Be(null),o=Jt({page:1,filter:wt[Hl]?JSON.parse(wt[Hl]):{},search:"",loading:!1,error:!1,result:null,scroll:0,variants:[],bgColor:"light",...Ul}),c=Ae(()=>o.result?.filters),d=Ae(()=>o.loading&&o.page===1);gt(()=>o.filter,F,{deep:!0}),gt(c,x=>{for(const S of x)mt(o.filter,S.name,o.filter[S.name]??"")}),gt(()=>o.search,Vn(F,250)),Gt(()=>{Object.keys(Ul).length?requestAnimationFrame(()=>j(o.scroll)):F()}),Nr(()=>{o.error||Object.assign(Ul,o),wt[Hl]=JSON.stringify(o.filter)});function p(x){return o.result?.icons.filter(S=>x===S||x.variant&&S.variant===x.variant)}function v(){b(),o.scroll=a.value.scrollTop}function b(){if(o.loading||o.error||o.page>=o.result.pages)return;const{scrollTop:x,scrollHeight:S}=a.value;x>=S-window.innerHeight*1.5&&(o.page+=1,G())}function C(){const x={};for(const S of c.value??[])x[S.name]="";return x}function T(x){const S=P=>P.map(R=>({value:R,text:O(R)}));return Array.isArray(x)?S(x):Object.keys(x).map(P=>({label:O(P),options:[{value:P,text:n.t("All %label%",{label:P})}].concat(S(x[P]))}))}function A(x){e("select",[x.src])}async function F(){o.page=1,await G(),o.variants=[],j(0)}async function G(){o.loading=!0,o.error=!1;let x;try{x=await kR.icons({search:o.search,filter:o.filter,page:o.page})}catch(S){o.error=S.message}o.loading=!1,!o.error&&(o.page>1&&(x.icons=by(o.result?.icons??[],x.icons,"md5")),o.result=x,Tn(b))}function j(x){Tn(()=>requestAnimationFrame(()=>a.value.scrollTop=x))}function O(x){return x.replace(/\b\w/g,S=>S.toUpperCase())}return{__sfc:!0,storageKey:Hl,storageObj:Ul,i18n:n,emit:e,props:r,scrollRef:a,state:o,filters:c,spinner:d,iconVariants:p,onScroll:v,queryNextPage:b,reset:C,options:T,select:A,update:F,query:G,scrollTo:j,titleCase:O}}};var TR=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{staticClass:"yo-min-height-small uk-position-relative"},[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t(n.state.result?.total?"%smart_count% Icon |||| %smart_count% Icons":"No Results",n.state.result?.total)))])]),e._v(" "),r("div",[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:n.state.search,expression:"state.search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:n.state.search},on:{input:function(a){a.target.composing||e.$set(n.state,"search",a.target.value)}}})])])])])]),e._v(" "),n.filters?r("div",[r("div",{staticClass:"uk-grid-medium uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("ul",{staticClass:"uk-dotnav yo-dotnav"},e._l({light:n.i18n.t("Light"),white:n.i18n.t("White"),dark:n.i18n.t("Dark")},function(a,o){return r("li",{key:o},[r("a",{class:`yo-dotnav-item-${o}`,attrs:{href:"",title:n.i18n.t("Set %color% background",{color:o}),"uk-tooltip":"delay: 500","aria-label":n.i18n.t("Set %color% background",{color:o})},on:{click:function(c){c.preventDefault(),n.state.bgColor=o}}},[e._v(e._s(a))])])}),0)]),e._v(" "),r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[e._l(n.filters,function({options:a,name:o,label:c}){return r("div",{key:o},[r("select",{directives:[{name:"model",rawName:"v-model",value:n.state.filter[o],expression:"state.filter[name]"}],staticClass:"uk-select uk-form-width-small",on:{change:function(d){var p=Array.prototype.filter.call(d.target.options,function(v){return v.selected}).map(function(v){var b="_value"in v?v._value:v.value;return b});e.$set(n.state.filter,o,d.target.multiple?p:p[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All %filter%",{filter:c})))]),e._v(" "),e._l(n.options(a),function(d){return[d.label?r("optgroup",{key:d.label,attrs:{label:d.label}},e._l(d.options,function(p){return r("option",{key:p.value,domProps:{value:p.value}},[e._v(e._s(n.i18n.t(p.text)))])}),0):r("option",{key:d.value,domProps:{value:d.value}},[e._v(e._s(n.i18n.t(d.text??"")))])]})],2)])}),e._v(" "),r("div",[r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button",disabled:!Object.values(n.state.filter).some(Boolean)&&!n.state.search},on:{click:function(a){n.state.filter=n.reset(),n.state.search=""}}},[e._v(e._s(n.i18n.t("Reset")))])])],2)])])]):e._e()]),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:n.state.result?.total,expression:"state.result?.total"}],ref:"scrollRef",class:["yo-finder-body uk-margin-top uk-overflow-auto",{[`yo-finder-body-${n.state.bgColor}`]:n.state.bgColor!=="light"}],attrs:{"data-sel-container":n.props.container,"data-sel-content":n.props.content,"uk-overflow-auto":""},on:{"&!scroll":function(a){return n.onScroll.apply(null,arguments)}}},[r("ul",{staticClass:"uk-grid-medium uk-grid-match",class:["uk-child-width-1-2@s uk-child-width-1-4@m",{"uk-child-width-1-5@xl":!n.props.wide,"uk-child-width-1-5@l uk-child-width-1-6@xl":n.props.wide}],attrs:{"uk-grid":""}},e._l(n.state.result?.icons.filter(a=>n.iconVariants(a)[0]===a||n.state.variants.includes(a.variant)),function(a){return r("li",{key:a.md5},[r("div",{staticClass:"uk-panel uk-card-default uk-transition-toggle"},[r("a",{attrs:{href:""},on:{click:function(o){return o.preventDefault(),n.select(a)}}},[r("img",{staticClass:"uk-object-scale-down",staticStyle:{"aspect-ratio":"1 / 1"},attrs:{src:a.src,width:"800",height:"800",alt:"",loading:"lazy"}}),e._v(" "),r("div",{staticClass:"uk-label yo-label uk-position-top-right uk-position-small uk-transition-fade uk-flex"},[r("span",{staticClass:"uk-text-truncate"},[e._v(e._s(a.name))]),e._v(" / "+e._s(a.width)),r("span",{staticClass:"uk-text-lowercase"},[e._v("x")]),e._v(e._s(a.height))])]),e._v(" "),n.iconVariants(a).length>1&&!n.state.variants.includes(a.variant)?r("div",{staticClass:"uk-transition-fade uk-position-bottom-right yo-thumbnail-badge uk-light"},[r("a",{staticClass:"uk-icon-link",attrs:{href:"",title:n.i18n.t("Show Variations"),"uk-icon":"more","uk-tooltip":"delay: 500","aria-label":n.i18n.t("Show Variations")},on:{click:function(o){return o.preventDefault(),n.state.variants.push(a.variant)}}})]):e._e()])])}),0)]),e._v(" "),n.state.error?r("h3",{staticClass:"uk-h1 uk-text-danger uk-text-center"},[e._v(e._s(n.i18n.t(n.state.error)))]):n.spinner?r("div",{key:"spinner",staticClass:"uk-position-center",attrs:{"uk-spinner":"ratio: 1.5"}}):n.state.result?.total?e._e():r("h3",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(n.i18n.t("No results.")))])])},CR=[],wR=Q(ER,TR,CR,!1),SR=wR.exports;const xR={name:"IconsTab",components:{Icons:SR},methods:{select(t){To.set(t,{src:t}),this.$emit("input",[t])}}};var AR=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-modal-body"},[r("Icons",{on:{select:function(n){return e.select(n[0])}}})],1)},OR=[],NR=Q(xR,AR,OR,!1),yy=NR.exports;const ky=24;var PR={get client(){return(this._client??=Ks(`${ue.config.api}/pexels/v1`).query({per_page:ky}).headers({accept:"application/json"})).query({key:ue.config.apikey})},async photos({search:t,collection:e,page:r}){let n=this.client.query({page:r});t?n=n.query({query:t}).get("/search"):e?n=n.query({type:"photos"}).get(`/collections/${e.id}`):n=n.get("/curated");const a=await n.json();return{result:a[e?"media":"photos"],...Ey(a)}},async collections({route:t,page:e}){const r=await this.client.query({page:e}).get(`/collections${t==="yootheme"?"":"/featured"}`).json();return{result:await Promise.all(r.collections.filter(a=>a.photos_count).map(async a=>{const o=await this.client.query({per_page:3,type:"photos"}).get(`/collections/${a.id}`).json();return{...a,photos:o.media}})),...Ey(r)}}};function Ey(t){return{page:t.page,total:t.total_results,pages:Math.ceil(t.total_results/ky)}}function Ty(t){const e=[];return{props:{container:{type:String,default:".uk-modal"},content:{type:String,default:".uk-modal-dialog"},wide:{type:Boolean,default:!1}},data:()=>({states:e,routes:[],views:[],loading:!1,error:!1}),computed:{title(){const r=this.states.findLast(({result:o})=>o)||{},{total:n,view:a=r.route}=r;return n?this.views.find(o=>o.name===a).title(n):this.$t("No Results")},state(){return this.states.at(-1)},view(){return this.state.view||this.state.route},spinner(){return this.loading&&this.state.page===1}},created(){this.states.length?this.scrollTo(this.state.scroll):this.routeTo(this.routes[0])},methods:{async routeTo(r,n){const a=this.state||{route:""},o={scroll:0,page:1,search:"",...r};if(!n&&o.route===a.route){this.scrollTo(0);return}const c=LR(o),d=this.states.findIndex(c);if(n)this.states.splice(d,this.states.findLastIndex(c)-d+1),this.states.push(o),await this.query();else if(jl(o.route,a.route)||!~d)this.states.push(o),await this.query();else if(jl(a.route,o.route))this.states.splice(-1,1),d+1>this.states.length&&(this.states.push(o),await this.query());else if(jl(IR(a.route),o.route))this.states.splice(-1,1,o),await this.query();else{const p=this.states.splice(d,this.states.findLastIndex(c)-d+1);Hh(o.route)===o.route?this.states.push(...p):(this.states.push(...p.filter(v=>jl(v.route,o.route)),o),await this.query())}this.scrollTo(this.state.scroll)},search:Vn(function(r){this.routeTo({route:this.view,search:r.target.value},!0)},250),select(r){this.$emit("select",[r])},onScroll(){this.queryNextPage(),this.state.scroll=this.$refs.scroll.scrollTop},queryNextPage(){if(this.loading||this.error||this.state.page>=this.state.pages)return;const{scrollTop:r,scrollHeight:n}=this.$refs.scroll;r>=n-window.innerHeight*1.5&&(this.state.page+=1,this.query())},async query(){const{state:r}=this,{page:n}=r;this.loading=!0,this.error=!1;let a;try{a=await t[this.view](r)}catch(o){this.error=o.message}this.state===r&&(this.loading=!1,!this.error&&(n>1&&(a.result=by(r.result??[],a.result,"id")),this.states.splice(-1,1,Object.assign(r,a)),this.$nextTick(this.queryNextPage)))},scrollTo(r){this.$nextTick(()=>requestAnimationFrame(()=>this.$refs.scroll.scrollTop=r))}}}}function Hh(t){return t.split("/")[0]}function IR(t){return t.split("/").slice(0,-1).join("/")}function jl(t,e){return t.startsWith(`${e}/`)}function LR(t){const e=Hh(t.route);return r=>Hh(r.route)===e}const RR={extends:Ty(PR),data:t=>({routes:[{route:"photos",label:t.$t("Photos")},{route:"collections",label:t.$t("Collections")},{route:"yootheme",view:"collections",label:"YOOtheme"}],views:[{name:"photos",title:e=>t.$t("%smart_count% Photo |||| %smart_count% Photos",e)},{name:"collections",title:e=>t.$t("%smart_count% Collection |||| %smart_count% Collections",e)}]}),computed:{title(){const t=this.states.findLast(({result:n})=>n)||{},{total:e,view:r=t.route}=t;return this.$t(e?r==="photos"?"%smart_count% Photo |||| %smart_count% Photos":"%smart_count% Collection |||| %smart_count% Collections":"No Results",e)}}};var DR=function(){var e=this,r=e._self._c;return r("div",{staticClass:"yo-min-height-small uk-position-relative"},[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle uk-margin",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(e.title))])]),e._v(" "),r("div",{style:{visibility:e.state.route==="photos"?"":"hidden"}},[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:e.state.search,expression:"state.search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:e.state.search},on:{input:[function(n){n.target.composing||e.$set(e.state,"search",n.target.value)},e.search]}})])])])])]),e._v(" "),r("div",[r("ul",{staticClass:"uk-subnav uk-subnav-divider uk-flex-center uk-margin",attrs:{"uk-margin":""}},e._l(e.routes,function(n){return r("li",{key:n.route,class:{"uk-active":e.state.route?.startsWith(n.route)}},[r("a",{attrs:{href:""},on:{click:function(a){return a.preventDefault(),e.routeTo(n)}}},[e._v(e._s(n.label))])])}),0)])]),e._v(" "),e.view==="photos"&&e.state.collection?r("div",{staticClass:"uk-margin"},[r("h3",{staticClass:"uk-display-inline-block uk-margin-remove"},[e._v(e._s(e.state.collection.title))])]):e._e(),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:e.state.total,expression:"state.total"}],key:"results",style:{opacity:e.spinner?.3:1}},[r("div",{ref:"scroll",staticClass:"yo-finder-body",attrs:{"data-sel-container":e.container,"data-sel-content":e.content,"uk-overflow-auto":""},on:{"&scroll":function(n){return e.onScroll.apply(null,arguments)}}},[r("ul",{key:e.view,staticClass:"uk-grid uk-grid-medium uk-margin-large-bottom",class:["uk-child-width-1-2@s uk-child-width-1-3@m",{"uk-child-width-1-4@xl":e.wide}],attrs:{"data-masonry":(e.view==="photos").toString(),"uk-grid":""}},[e.view==="photos"?e._l(e.state.result,function(n){return r("li",{key:n.id},[r("div",{staticClass:"uk-inline uk-box-shadow-medium uk-box-shadow-hover-large uk-transition-toggle uk-light",attrs:{tabindex:"0"}},[r("img",{attrs:{loading:"lazy",alt:n.alt,src:n.src.original,srcset:`${n.src.original}?fit=crop&w=600 600w, ${n.src.original}?fit=crop&w=1200 1200w`,width:n.width,height:n.height,sizes:"(min-width: 600px) 600px"}}),e._v(" "),r("div",{staticClass:"yo-overlay-image uk-position-cover uk-transition-fade"}),e._v(" "),r("a",{staticClass:"uk-position-cover",attrs:{href:""},on:{click:function(a){return a.preventDefault(),e.select(n.src.original)}}}),e._v(" "),r("div",{staticClass:"uk-position-bottom-left uk-position-small uk-transition-fade"},[r("ul",{staticClass:"uk-subnav uk-subnav-divider yo-subnav uk-margin-remove-bottom"},[r("li",[r("a",{attrs:{href:n.photographer_url,target:"_blank"}},[e._v(e._s(n.photographer))])])])])])])}):e.view==="collections"?e._l(e.state.result,function(n){return r("li",{key:`#${n.id}`},[r("div",{staticClass:"uk-position-relative uk-box-shadow-medium uk-box-shadow-hover-large uk-transition-toggle",attrs:{tabindex:"0"}},[r("div",{staticClass:"uk-flex yo-gap-xsmall",staticStyle:{"aspect-ratio":"6/5"}},[r("img",{staticClass:"uk-width-2-3 uk-object-cover",attrs:{src:n.photos[0].src.original,srcset:`${n.photos[0].src.original}?fit=crop&w=600 600w, ${n.photos[0].src.original}?fit=crop&w=1200 1200w`,sizes:"(min-width: 600px) 600px"}}),e._v(" "),r("div",{staticClass:"uk-flex uk-flex-column uk-width-1-3",staticStyle:{gap:"2px"}},e._l(n.photos.slice(1,3),function(a){return r("img",{key:a.id,staticClass:"uk-flex-1 uk-object-cover",staticStyle:{"aspect-ratio":"1/1"},attrs:{src:a.src.large}})}),0)]),e._v(" "),r("a",{staticClass:"uk-position-cover",attrs:{href:""},on:{click:function(a){return a.preventDefault(),e.routeTo({route:`${e.state.route}/collection`,view:"photos",collection:n})}}})]),e._v(" "),r("h3",{staticClass:"uk-h4 uk-margin-top uk-margin-remove-bottom"},[e._v(e._s(n.title))]),e._v(" "),r("span",{domProps:{innerHTML:e._s(`${e.$t("%smart_count% Photo |||| %smart_count% Photos",n.photos_count)}`)}})])}):e._e()],2)])]),e._v(" "),e.error?r("h3",{staticClass:"uk-h1 uk-text-danger uk-text-center"},[e._v(e._s(e.$t(e.error)))]):e.spinner?r("div",{key:"spinner",staticClass:"uk-position-center",attrs:{"uk-spinner":"ratio: 1.5"}}):e.state.total?e._e():r("h3",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(e.$t("No results.")))])])},MR=[],$R=Q(RR,DR,MR,!1),FR=$R.exports;const BR=24;var HR={get client(){return(this._client??=Ks(`${ue.config.api}/unsplash`).query({per_page:BR}).headers({accept:"application/json"})).query({key:ue.config.apikey})},async photos({search:t,user:e,collection:r,page:n}){return e?this.type("users",e.username,"photos",n):r?this.type("collections",r.id,"photos",n):t?this.search("photos",t,n):this.curated("photos",n)},async collections({search:t,user:e,page:r}){return e?this.type("users",e.username,"collections",r):t?this.search("collections",t,r):this.curated("collections",r)},async users({search:t,page:e}){return this.search("users",t||"yootheme",e)},async search(t,e,r){return this.parseResponse(await this.client.query({query:e,page:r}).get(`/search/${t}`),t,r)},async curated(t,e){return this.parseResponse(await this.client.query({page:e}).get(`/${t}`),t,e)},async type(t,e,r,n){return this.parseResponse(await this.client.query({page:n}).get(`/${t}/${e}/${r}`),r,n)},async parseResponse(t,e,r){const n=(await t.res()).headers,a=Number(n.get("X-Total"));let o=await t.json();return o=Array.isArray(o)?o:o.results,{result:o,page:r,total:a,pages:Math.ceil(a/Number(n.get("X-Per-Page")))}}};const UR={extends:Ty(HR),data:t=>({routes:[{route:"photos",label:t.$t("Photos")},{route:"collections",label:t.$t("Collections")},{route:"users",label:t.$t("Users")}],views:[{name:"photos",title:e=>t.$t("%smart_count% Photo |||| %smart_count% Photos",e)},{name:"collections",title:e=>t.$t("%smart_count% Collection |||| %smart_count% Collections",e)},{name:"users",title:e=>t.$t("%smart_count% User |||| %smart_count% Users",e)}]}),methods:{getUserRoute(t,e){return e||=t.username==="yootheme"?"collections":"photos",{route:`users/${e}`,view:e,user:t}}}};var jR=function(){var e=this,r=e._self._c;return r("div",{staticClass:"yo-min-height-small uk-position-relative"},[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle uk-margin",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(e.title))])]),e._v(" "),r("div",[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:e.state.search,expression:"state.search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:e.state.search},on:{input:[function(n){n.target.composing||e.$set(e.state,"search",n.target.value)},e.search]}})])])])])]),e._v(" "),r("div",[r("ul",{staticClass:"uk-subnav uk-subnav-divider uk-flex-center uk-margin",attrs:{"uk-margin":""}},e._l(e.routes,function(n){return r("li",{key:n.route,class:{"uk-active":e.state.route?.startsWith(n.route)}},[r("a",{attrs:{href:""},on:{click:function(a){return a.preventDefault(),e.routeTo(n)}}},[e._v(e._s(n.label))])])}),0)])]),e._v(" "),e.view==="photos"&&e.state.collection?r("div",{staticClass:"uk-margin"},[r("h3",{staticClass:"uk-display-inline-block uk-margin-remove"},[e._v(e._s(e.state.collection.title))]),e._v(" "),r("span",{staticClass:"uk-margin-left",domProps:{innerHTML:e._s(e.$t("Curated by <a href>%user%</a>",{user:e.state.collection.user.name}))},on:{click:function(n){n.preventDefault(),e.routeTo(e.getUserRoute(e.state.collection.user))}}})]):e._e(),e._v(" "),["users/photos","users/collections"].includes(e.state.route)?r("div",{staticClass:"uk-grid uk-grid-medium uk-child-width-auto uk-flex-middle uk-margin"},[r("div",[r("div",{staticClass:"uk-flex uk-flex-middle"},[r("img",{staticClass:"uk-border-circle",attrs:{loading:"lazy",src:e.state.user.profile_image.medium,alt:e.state.user.name,width:"30",height:"30"}}),e._v(" "),r("h3",{staticClass:"uk-h4 uk-margin-remove-vertical uk-margin-small-left"},[e._v(e._s(e.state.user.name))])])]),e._v(" "),r("div",[r("ul",{staticClass:"uk-subnav"},e._l([{...e.getUserRoute(e.state.user,"photos"),label:e.$t("Photos")},{...e.getUserRoute(e.state.user,"collections"),label:e.$t("Collections")}],function(n){return r("li",{key:n.route,class:{"uk-active":e.state.route===n.route}},[r("a",{attrs:{href:""},on:{click:function(a){return a.preventDefault(),e.routeTo(n)}}},[e._v(e._s(n.label))])])}),0)])]):e._e(),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:e.state.total,expression:"state.total"}],key:"results",style:{opacity:e.spinner?.3:1}},[r("div",{ref:"scroll",staticClass:"yo-finder-body",attrs:{"data-sel-container":e.container,"data-sel-content":e.content,"uk-overflow-auto":""},on:{"&!scroll":function(n){return e.onScroll.apply(null,arguments)}}},[r("ul",{key:e.view,staticClass:"uk-grid uk-grid-medium uk-margin-large-bottom",class:{"uk-child-width-1-2@s uk-child-width-1-3@m uk-child-width-1-4@l uk-child-width-1-5@xl":e.view==="users","uk-child-width-1-2@s uk-child-width-1-3@m":e.view!=="users","uk-child-width-1-4@xl":e.view!=="users"&&e.wide},attrs:{"data-masonry":(e.view==="photos").toString(),"uk-grid":""}},[e.view==="photos"?e._l(e.state.result,function(n){return r("li",{key:n.id},[r("div",{staticClass:"uk-inline uk-box-shadow-medium uk-box-shadow-hover-large uk-transition-toggle uk-light",attrs:{tabindex:"0"}},[r("img",{attrs:{loading:"lazy",src:n.urls.regular,srcset:`${n.urls.raw}&auto=format&fit=crop&w=600&q=60 600w, ${n.urls.raw}&auto=format&fit=crop&w=1200&q=60 1200w`,alt:n.alt_description,width:n.width,height:n.height,sizes:"(min-width: 600px) 600px"}}),e._v(" "),r("div",{staticClass:"yo-overlay-image uk-position-cover uk-transition-fade"}),e._v(" "),r("a",{staticClass:"uk-position-cover",attrs:{href:""},on:{click:function(a){return a.preventDefault(),e.select(`${n.urls.full}&id=${n.id}`)}}}),e._v(" "),r("div",{staticClass:"uk-position-bottom-left uk-position-small uk-transition-fade"},[r("ul",{staticClass:"uk-subnav uk-subnav-divider yo-subnav uk-margin-remove-bottom"},[r("li",[r("img",{staticClass:"uk-border-circle",attrs:{loading:"lazy",src:n.user.profile_image.medium,alt:n.user.name,width:"30",height:"30"}}),e._v(" "),r("a",{staticClass:"uk-margin-small-left",attrs:{href:n.user.links.html,target:"_blank"}},[e._v(e._s(n.user.name))])]),e._v(" "),r("li",[r("a",{attrs:{href:""},on:{click:function(a){a.preventDefault(),e.routeTo(e.getUserRoute(n.user))}}},[e._v(e._s(e.$t("View Photos")))])])])])])])}):e._e(),e._v(" "),e.view==="collections"?e._l(e.state.result,function(n){return r("li",{key:n.id},[r("div",{staticClass:"uk-position-relative uk-box-shadow-medium uk-box-shadow-hover-large uk-transition-toggle",attrs:{tabindex:"0"}},[r("div",{staticClass:"uk-flex yo-gap-xsmall",staticStyle:{"aspect-ratio":"6/5"}},[r("img",{staticClass:"uk-width-2-3 uk-object-cover",attrs:{src:n.preview_photos[0].urls.regular,srcset:`${n.preview_photos[0].urls.raw}&auto=format&fit=crop&w=600&q=60 600w, ${n.preview_photos[0].urls.raw}&auto=format&fit=crop&w=1200&q=60 1200w`,sizes:"(min-width: 600px) 600px"}}),e._v(" "),r("div",{staticClass:"uk-flex uk-flex-column uk-width-1-3",staticStyle:{gap:"2px"}},e._l(n.preview_photos.filter(a=>a.urls).slice(1,3),function(a){return r("img",{key:a.id,staticClass:"uk-flex-1 uk-object-cover",staticStyle:{"aspect-ratio":"1/1"},attrs:{src:a.urls.small}})}),0)]),e._v(" "),r("a",{staticClass:"uk-position-cover",attrs:{href:""},on:{click:function(a){return a.preventDefault(),e.routeTo({route:`${e.state.route}/collection`,view:"photos",collection:n})}}})]),e._v(" "),r("h3",{staticClass:"uk-h4 uk-margin-top uk-margin-remove-bottom"},[e._v(e._s(n.title))]),e._v(" "),r("span",{domProps:{innerHTML:e._s(`${e.$t("%smart_count% Photo |||| %smart_count% Photos",n.total_photos)} \xB7 ${e.$t("Curated by <a href>%user%</a>",{user:n.user.name})}`)},on:{click:function(a){a.preventDefault(),e.routeTo(e.getUserRoute(n.user))}}})])}):e._e(),e._v(" "),e.view==="users"?e._l(e.state.result,function(n){return r("li",{key:n.id},[r("a",{staticClass:"uk-grid uk-grid-small uk-flex-middle uk-link-text",attrs:{href:""},on:{click:function(a){a.preventDefault(),e.routeTo(e.getUserRoute(n))}}},[r("div",{staticClass:"uk-width-auto"},[r("img",{staticClass:"uk-border-circle",attrs:{loading:"lazy",src:n.profile_image.large,alt:n.name,width:"80",height:"80"}})]),e._v(" "),r("div",{staticClass:"uk-width-expand"},[r("h3",{staticClass:"uk-h4 uk-margin-remove uk-text-break"},[e._v(e._s(n.name))]),e._v(" "),r("p",{staticClass:"uk-margin-remove-top uk-text-break"},[e._v(e._s(`@${n.username}`))])])])])}):e._e()],2)])]),e._v(" "),e.error?r("h3",{staticClass:"uk-h1 uk-text-danger uk-text-center"},[e._v(e._s(e.$t(e.error)))]):e.spinner?r("div",{key:"spinner",staticClass:"uk-position-center",attrs:{"uk-spinner":"ratio: 1.5"}}):e.state.total?e._e():r("h3",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(e.$t("No results.")))])])},WR=[],GR=Q(UR,jR,WR,!1),zR=GR.exports;const qR={name:"UnsplashTab",components:{Unsplash:zR},methods:{select(t){To.set(t,{src:t}),this.$emit("input",[t])}}};var YR=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-modal-body"},[r("Unsplash",{on:{select:function(n){return e.select(n[0])}}})],1)},KR=[],XR=Q(qR,YR,KR,!1),Cy=XR.exports;function VR(t){return function(e){return t?.[e]}}var QR={\u00C0:"A",\u00C1:"A",\u00C2:"A",\u00C3:"A",\u00C4:"A",\u00C5:"A",\u00E0:"a",\u00E1:"a",\u00E2:"a",\u00E3:"a",\u00E4:"a",\u00E5:"a",\u00C7:"C",\u00E7:"c",\u00D0:"D",\u00F0:"d",\u00C8:"E",\u00C9:"E",\u00CA:"E",\u00CB:"E",\u00E8:"e",\u00E9:"e",\u00EA:"e",\u00EB:"e",\u00CC:"I",\u00CD:"I",\u00CE:"I",\u00CF:"I",\u00EC:"i",\u00ED:"i",\u00EE:"i",\u00EF:"i",\u00D1:"N",\u00F1:"n",\u00D2:"O",\u00D3:"O",\u00D4:"O",\u00D5:"O",\u00D6:"O",\u00D8:"O",\u00F2:"o",\u00F3:"o",\u00F4:"o",\u00F5:"o",\u00F6:"o",\u00F8:"o",\u00D9:"U",\u00DA:"U",\u00DB:"U",\u00DC:"U",\u00F9:"u",\u00FA:"u",\u00FB:"u",\u00FC:"u",\u00DD:"Y",\u00FD:"y",\u00FF:"y",\u00C6:"Ae",\u00E6:"ae",\u00DE:"Th",\u00FE:"th",\u00DF:"ss",\u0100:"A",\u0102:"A",\u0104:"A",\u0101:"a",\u0103:"a",\u0105:"a",\u0106:"C",\u0108:"C",\u010A:"C",\u010C:"C",\u0107:"c",\u0109:"c",\u010B:"c",\u010D:"c",\u010E:"D",\u0110:"D",\u010F:"d",\u0111:"d",\u0112:"E",\u0114:"E",\u0116:"E",\u0118:"E",\u011A:"E",\u0113:"e",\u0115:"e",\u0117:"e",\u0119:"e",\u011B:"e",\u011C:"G",\u011E:"G",\u0120:"G",\u0122:"G",\u011D:"g",\u011F:"g",\u0121:"g",\u0123:"g",\u0124:"H",\u0126:"H",\u0125:"h",\u0127:"h",\u0128:"I",\u012A:"I",\u012C:"I",\u012E:"I",\u0130:"I",\u0129:"i",\u012B:"i",\u012D:"i",\u012F:"i",\u0131:"i",\u0134:"J",\u0135:"j",\u0136:"K",\u0137:"k",\u0138:"k",\u0139:"L",\u013B:"L",\u013D:"L",\u013F:"L",\u0141:"L",\u013A:"l",\u013C:"l",\u013E:"l",\u0140:"l",\u0142:"l",\u0143:"N",\u0145:"N",\u0147:"N",\u014A:"N",\u0144:"n",\u0146:"n",\u0148:"n",\u014B:"n",\u014C:"O",\u014E:"O",\u0150:"O",\u014D:"o",\u014F:"o",\u0151:"o",\u0154:"R",\u0156:"R",\u0158:"R",\u0155:"r",\u0157:"r",\u0159:"r",\u015A:"S",\u015C:"S",\u015E:"S",\u0160:"S",\u015B:"s",\u015D:"s",\u015F:"s",\u0161:"s",\u0162:"T",\u0164:"T",\u0166:"T",\u0163:"t",\u0165:"t",\u0167:"t",\u0168:"U",\u016A:"U",\u016C:"U",\u016E:"U",\u0170:"U",\u0172:"U",\u0169:"u",\u016B:"u",\u016D:"u",\u016F:"u",\u0171:"u",\u0173:"u",\u0174:"W",\u0175:"w",\u0176:"Y",\u0177:"y",\u0178:"Y",\u0179:"Z",\u017B:"Z",\u017D:"Z",\u017A:"z",\u017C:"z",\u017E:"z",\u0132:"IJ",\u0133:"ij",\u0152:"Oe",\u0153:"oe",\u0149:"'n",\u017F:"s"},JR=VR(QR),ZR=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,eD="\\u0300-\\u036f",tD="\\ufe20-\\ufe2f",rD="\\u20d0-\\u20ff",nD=eD+tD+rD,iD="["+nD+"]",aD=RegExp(iD,"g");function sD(t){return t=as(t),t&&t.replace(ZR,JR).replace(aD,"")}var oD=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;function uD(t){return t.match(oD)||[]}var lD=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;function cD(t){return lD.test(t)}var wy="\\ud800-\\udfff",fD="\\u0300-\\u036f",dD="\\ufe20-\\ufe2f",hD="\\u20d0-\\u20ff",pD=fD+dD+hD,Sy="\\u2700-\\u27bf",xy="a-z\\xdf-\\xf6\\xf8-\\xff",mD="\\xac\\xb1\\xd7\\xf7",vD="\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf",gD="\\u2000-\\u206f",_D=" \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000",Ay="A-Z\\xc0-\\xd6\\xd8-\\xde",bD="\\ufe0e\\ufe0f",Oy=mD+vD+gD+_D,Ny="['\u2019]",Py="["+Oy+"]",yD="["+pD+"]",Iy="\\d+",kD="["+Sy+"]",Ly="["+xy+"]",Ry="[^"+wy+Oy+Iy+Sy+xy+Ay+"]",ED="\\ud83c[\\udffb-\\udfff]",TD="(?:"+yD+"|"+ED+")",CD="[^"+wy+"]",Dy="(?:\\ud83c[\\udde6-\\uddff]){2}",My="[\\ud800-\\udbff][\\udc00-\\udfff]",fs="["+Ay+"]",wD="\\u200d",$y="(?:"+Ly+"|"+Ry+")",SD="(?:"+fs+"|"+Ry+")",Fy="(?:"+Ny+"(?:d|ll|m|re|s|t|ve))?",By="(?:"+Ny+"(?:D|LL|M|RE|S|T|VE))?",Hy=TD+"?",Uy="["+bD+"]?",xD="(?:"+wD+"(?:"+[CD,Dy,My].join("|")+")"+Uy+Hy+")*",AD="\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])",OD="\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])",ND=Uy+Hy+xD,PD="(?:"+[kD,Dy,My].join("|")+")"+ND,ID=RegExp([fs+"?"+Ly+"+"+Fy+"(?="+[Py,fs,"$"].join("|")+")",SD+"+"+By+"(?="+[Py,fs+$y,"$"].join("|")+")",fs+"?"+$y+"+"+Fy,fs+"+"+By,OD,AD,Iy,PD].join("|"),"g");function LD(t){return t.match(ID)||[]}function RD(t,e,r){return t=as(t),e=e,e===void 0?cD(t)?LD(t):uD(t):t.match(e)||[]}var DD="['\u2019]",MD=RegExp(DD,"g");function $D(t){return function(e){return Bb(RD(sD(e).replace(MD,"")),t,"")}}function jy(t,e,r){var n=-1,a=t.length;e<0&&(e=-e>a?0:a+e),r=r>a?a:r,r<0&&(r+=a),a=e>r?0:r-e>>>0,e>>>=0;for(var o=Array(a);++n<a;)o[n]=t[n+e];return o}function Uh(t,e,r){var n=t.length;return r=r===void 0?n:r,!e&&r>=n?t:jy(t,e,r)}var FD="\\ud800-\\udfff",BD="\\u0300-\\u036f",HD="\\ufe20-\\ufe2f",UD="\\u20d0-\\u20ff",jD=BD+HD+UD,WD="\\ufe0e\\ufe0f",GD="\\u200d",zD=RegExp("["+GD+FD+jD+WD+"]");function Wy(t){return zD.test(t)}function qD(t){return t.split("")}var Gy="\\ud800-\\udfff",YD="\\u0300-\\u036f",KD="\\ufe20-\\ufe2f",XD="\\u20d0-\\u20ff",VD=YD+KD+XD,QD="\\ufe0e\\ufe0f",JD="["+Gy+"]",jh="["+VD+"]",Wh="\\ud83c[\\udffb-\\udfff]",ZD="(?:"+jh+"|"+Wh+")",zy="[^"+Gy+"]",qy="(?:\\ud83c[\\udde6-\\uddff]){2}",Yy="[\\ud800-\\udbff][\\udc00-\\udfff]",eM="\\u200d",Ky=ZD+"?",Xy="["+QD+"]?",tM="(?:"+eM+"(?:"+[zy,qy,Yy].join("|")+")"+Xy+Ky+")*",rM=Xy+Ky+tM,nM="(?:"+[zy+jh+"?",jh,qy,Yy,JD].join("|")+")",iM=RegExp(Wh+"(?="+Wh+")|"+nM+rM,"g");function aM(t){return t.match(iM)||[]}function Po(t){return Wy(t)?aM(t):qD(t)}function sM(t){return function(e){e=as(e);var r=Wy(e)?Po(e):void 0,n=r?r[0]:e.charAt(0),a=r?Uh(r,1).join(""):e.slice(1);return n[t]()+a}}var Gh=sM("toUpperCase"),Vy=$D(function(t,e,r){return t+(r?" ":"")+Gh(e)});const oM={name:"PexelsTab",components:{Pexels:FR},methods:{select(t){To.set(t,{src:t}),this.$emit("input",[t])}}};var uM=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-modal-body"},[r("Pexels",{on:{select:function(n){return e.select(n[0])}}})],1)},lM=[],cM=Q(oM,uM,lM,!1),fM=cM.exports;const dM={name:"MediaPicker",components:{IconsTab:yy,Switcher:ls,UnsplashTab:Cy},props:{type:{type:[Array,String],default:"image"},multiple:{type:Boolean,default:!1},photos:{type:Boolean,default:!0}},computed:{tabs(){const t=[];return[].concat(this.type).includes("image")&&!this.multiple&&(t.push({name:"pro images",component:yy}),this.photos&&(t.push({name:"unsplash",component:Cy}),t.push({name:"pexels",component:fM}))),t.concat(this.$trigger("mediaModalTabs",[t])||[])}},methods:{select(t){t=t.map(e=>({src:e,title:Vy(e.replace(/.*\/|\.[^.]*$/g,""))})),t=this.multiple?t:t[0],this.$emit("resolve",t)}}};var hM=function(){var e=this,r=e._self._c;return r("Switcher",{attrs:{tabs:e.tabs.map(({name:n})=>n),storage:"media-picker.mode"},scopedSlots:e._u([e._l(e.tabs,function(n){return{key:n.name,fn:function(){return[r("div",{key:n.name},[r(n.component,{tag:"component",attrs:{type:e.type,multiple:e.multiple},on:{input:e.select}})],1)]},proxy:!0}})],null,!0)})},pM=[],mM=Q(dM,hM,pM,!1),Qy=mM.exports;const vM={name:"Modal",provide(){return{Modal:this}},props:{component:{type:Function,required:!0},props:{type:Object,required:!0}},data:()=>({width:"",container:!1}),watch:{container:{handler(t){ke.toggleClass(this.$el,"uk-modal-container",!!t)},immediate:!0}},mounted(){this.modal=nr.modal(this.$el,{stack:!0})},beforeDestroy(){this.modal.$destroy(!0)},methods:{show(t={}){return this.width=t.width,this.container=t.container,this.modal.show(),new Promise((e,r)=>{this.promise={resolve:e,reject:r}})},hide(){this.modal.hide()},hidden(){this.promise.resolve(),this.$nextTick(this.$destroy)},resolve(t){this.promise.resolve(t),this.modal.hide()},reject(t){this.promise.reject(t),this.modal.hide()}}};var gM=function(){var e=this,r=e._self._c;return r("div",{on:{show:function(n){return n.target!==n.currentTarget?null:e.$emit("show")},hide:function(n){return n.target!==n.currentTarget?null:e.$emit("hide")},hidden:function(n){return n.target!==n.currentTarget?null:e.hidden.apply(null,arguments)}}},[r("div",{class:["uk-modal-dialog",e.width?`uk-width-${e.width}`:""]},[r(e.component,e._b({tag:"component",on:{resolve:e.resolve,reject:e.reject}},"component",e.props,!1))],1)])},_M=[],bM=Q(vM,gM,_M,!1),Jy=bM.exports;const yM={props:{title:{type:String,default(){return this.$t("Select Image")}},svgs:{type:Object},value:{type:String}},methods:{select(t){this.$emit("input",t),this.$emit("resolve",t)}}};var kM=function(){var e=this,r=e._self._c;return r("div",[r("div",{staticClass:"uk-modal-header"},[r("h2",{staticClass:"uk-modal-title"},[e._v(e._s(e.title))])]),e._v(" "),r("div",{staticClass:"uk-modal-body"},[r("div",{staticClass:"uk-grid-collapse uk-child-width-1-4",attrs:{"uk-grid":""}},e._l(e.svgs,function(n,a){return r("div",{key:a},[r("div",{staticClass:"uk-card uk-card-body uk-card-hover yo-panel uk-text-center",class:{"uk-active":e.value===a}},[r("img",{attrs:{alt:n.label,src:e.$url(n.src),"uk-svg":""}}),e._v(" "),r("p",{staticClass:"uk-margin-small-top uk-margin-remove-bottom"},[e._v(e._s(n.label))]),e._v(" "),r("a",{staticClass:"uk-position-cover",on:{click:function(o){return o.preventDefault(),e.select(a)}}})])])}),0)])])},EM=[],TM=Q(yM,kM,EM,!1),CM=TM.exports,cn={bind:Zy,update:Zy};function Zy(t,{value:e},{data:{on:r}}){for(const n of Object.values(r)){const{fns:a}=n;n.fns=(Array.isArray(a)?a:[a]).map(o=>async(...c)=>{try{await nr.modal.confirm(e,{stack:!0}),o(...c)}catch{}})}}var zh={bind(t,{value:e},{context:r,data:n}){if(!ke.isFunction(r.move))throw"Sortable directive needs to implement function move(child, parent, index).";n.class?.push("uk-sortable"),nr.sortable(t,{...e,animation:!1}),t._off=ke.on(t,"moved added removed",({type:a},o,c)=>{a!=="removed"&&r.move(c.__vue__,r,ke.index(c),o.origin?.index),a!=="added"&&wM(t,c,o.origin.index)},{self:!0})},unbind({_off:t}){t()}};function wM(t,e,r){e.remove(),t.children[r]?t.children[r].before(e):t.appendChild(e)}function ds(t,e,r,n){const a=e1(t,e);return a.show(r,n),a}function Io(t,e,r,n){return e1(t,e).show(r,n)}function e1(t,e={}){return new oe({extends:iv,propsData:{component:oe.extend(t),props:e}}).$mount()}function ha(t,e,r){const n=t1(t,e);return n.show(r),n}function Dt(t,e,r){return t1(t,e).show(r)}function t1(t,e={}){return new oe({extends:Jy,propsData:{component:oe.extend(t),props:e}}).$mount()}var r1=Object.create,SM=(function(){function t(){}return function(e){if(!_t(e))return{};if(r1)return r1(e);t.prototype=e;var r=new t;return t.prototype=void 0,r}})();function n1(t,e){var r=-1,n=t.length;for(e||(e=Array(n));++r<n;)e[r]=t[r];return e}function xM(t,e){for(var r=-1,n=t==null?0:t.length;++r<n&&e(t[r],r,t)!==!1;);return t}function Lo(t,e,r){e=="__proto__"&&Fl?Fl(t,e,{configurable:!0,enumerable:!0,value:r,writable:!0}):t[e]=r}var AM=Object.prototype,OM=AM.hasOwnProperty;function qh(t,e,r){var n=t[e];(!(OM.call(t,e)&&_o(n,r))||r===void 0&&!(e in t))&&Lo(t,e,r)}function hs(t,e,r,n){var a=!r;r||(r={});for(var o=-1,c=e.length;++o<c;){var d=e[o],p=void 0;p===void 0&&(p=t[d]),a?Lo(r,d,p):qh(r,d,p)}return r}function Yh(t,e,r){if(!_t(r))return!1;var n=typeof e;return(n=="number"?Kn(r)&&Al(e,r.length):n=="string"&&e in r)?_o(r[e],t):!1}function NM(t){return Bl(function(e,r){var n=-1,a=r.length,o=a>1?r[a-1]:void 0,c=a>2?r[2]:void 0;for(o=t.length>3&&typeof o=="function"?(a--,o):void 0,c&&Yh(r[0],r[1],c)&&(o=a<3?void 0:o,a=1),e=Object(e);++n<a;){var d=r[n];d&&t(e,d,n,o)}return e})}function PM(t){var e=[];if(t!=null)for(var r in Object(t))e.push(r);return e}var IM=Object.prototype,LM=IM.hasOwnProperty;function RM(t){if(!_t(t))return PM(t);var e=Pl(t),r=[];for(var n in t)n=="constructor"&&(e||!LM.call(t,n))||r.push(n);return r}function Ro(t){return Kn(t)?Mb(t,!0):RM(t)}function DM(t){var e=t==null?0:t.length;return e?$l(t):[]}function i1(t){return my(py(t,void 0,DM),t+"")}function MM(t,e){return t&&hs(e,Xn(e),t)}function $M(t,e){return t&&hs(e,Ro(e),t)}var a1=typeof exports=="object"&&exports&&!exports.nodeType&&exports,s1=a1&&typeof module=="object"&&module&&!module.nodeType&&module,FM=s1&&s1.exports===a1,o1=FM?on.Buffer:void 0,u1=o1?o1.allocUnsafe:void 0;function l1(t,e){if(e)return t.slice();var r=t.length,n=u1?u1(r):new t.constructor(r);return t.copy(n),n}function BM(t,e){return hs(t,Ph(t),e)}var HM=Object.getOwnPropertySymbols,c1=HM?function(t){for(var e=[];t;)Nh(e,Ph(t)),t=Fh(t);return e}:zb;function UM(t,e){return hs(t,c1(t),e)}function Kh(t){return Wb(t,Ro,c1)}var jM=Object.prototype,WM=jM.hasOwnProperty;function GM(t){var e=t.length,r=new t.constructor(e);return e&&typeof t[0]=="string"&&WM.call(t,"index")&&(r.index=t.index,r.input=t.input),r}function Xh(t){var e=new t.constructor(t.byteLength);return new Il(e).set(new Il(t)),e}function zM(t,e){var r=e?Xh(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.byteLength)}var qM=/\w*$/;function YM(t){var e=new t.constructor(t.source,qM.exec(t));return e.lastIndex=t.lastIndex,e}var f1=Kr?Kr.prototype:void 0,d1=f1?f1.valueOf:void 0;function KM(t){return d1?Object(d1.call(t)):{}}function h1(t,e){var r=e?Xh(t.buffer):t.buffer;return new t.constructor(r,t.byteOffset,t.length)}var XM="[object Boolean]",VM="[object Date]",QM="[object Map]",JM="[object Number]",ZM="[object RegExp]",e6="[object Set]",t6="[object String]",r6="[object Symbol]",n6="[object ArrayBuffer]",i6="[object DataView]",a6="[object Float32Array]",s6="[object Float64Array]",o6="[object Int8Array]",u6="[object Int16Array]",l6="[object Int32Array]",c6="[object Uint8Array]",f6="[object Uint8ClampedArray]",d6="[object Uint16Array]",h6="[object Uint32Array]";function p6(t,e,r){var n=t.constructor;switch(e){case n6:return Xh(t);case XM:case VM:return new n(+t);case i6:return zM(t,r);case a6:case s6:case o6:case u6:case l6:case c6:case f6:case d6:case h6:return h1(t,r);case QM:return new n;case JM:case t6:return new n(t);case ZM:return YM(t);case e6:return new n;case r6:return KM(t)}}function p1(t){return typeof t.constructor=="function"&&!Pl(t)?SM(Fh(t)):{}}var m6="[object Map]";function v6(t){return yr(t)&&Xr(t)==m6}var m1=rs&&rs.isMap,g6=m1?Ol(m1):v6,_6="[object Set]";function b6(t){return yr(t)&&Xr(t)==_6}var v1=rs&&rs.isSet,y6=v1?Ol(v1):b6,k6=1,E6=2,T6=4,g1="[object Arguments]",C6="[object Array]",w6="[object Boolean]",S6="[object Date]",x6="[object Error]",_1="[object Function]",A6="[object GeneratorFunction]",O6="[object Map]",N6="[object Number]",b1="[object Object]",P6="[object RegExp]",I6="[object Set]",L6="[object String]",R6="[object Symbol]",D6="[object WeakMap]",M6="[object ArrayBuffer]",$6="[object DataView]",F6="[object Float32Array]",B6="[object Float64Array]",H6="[object Int8Array]",U6="[object Int16Array]",j6="[object Int32Array]",W6="[object Uint8Array]",G6="[object Uint8ClampedArray]",z6="[object Uint16Array]",q6="[object Uint32Array]",yt={};yt[g1]=yt[C6]=yt[M6]=yt[$6]=yt[w6]=yt[S6]=yt[F6]=yt[B6]=yt[H6]=yt[U6]=yt[j6]=yt[O6]=yt[N6]=yt[b1]=yt[P6]=yt[I6]=yt[L6]=yt[R6]=yt[W6]=yt[G6]=yt[z6]=yt[q6]=!0,yt[x6]=yt[_1]=yt[D6]=!1;function Do(t,e,r,n,a,o){var c,d=e&k6,p=e&E6,v=e&T6;if(r&&(c=a?r(t,n,a,o):r(t)),c!==void 0)return c;if(!_t(t))return t;var b=St(t);if(b){if(c=GM(t),!d)return n1(t,c)}else{var C=Xr(t),T=C==_1||C==A6;if(ts(t))return l1(t,d);if(C==b1||C==g1||T&&!a){if(c=p||T?{}:p1(t),!d)return p?UM(t,$M(c,t)):BM(t,MM(c,t))}else{if(!yt[C])return a?t:{};c=p6(t,C,d)}}o||(o=new ln);var A=o.get(t);if(A)return A;o.set(t,c),y6(t)?t.forEach(function(j){c.add(Do(j,e,r,j,t,o))}):g6(t)&&t.forEach(function(j,O){c.set(O,Do(j,e,r,O,t,o))});var F=v?p?Kh:Ih:p?Ro:Xn,G=b?void 0:F(t);return xM(G||t,function(j,O){G&&(O=j,j=t[O]),qh(c,O,Do(j,e,r,O,t,o))}),c}var Y6=1,K6=4;function Vh(t){return Do(t,Y6|K6)}function X6(t,e,r,n){for(var a=-1,o=t==null?0:t.length;++a<o;){var c=t[a];e(n,c,r(c),t)}return n}function V6(t,e,r,n){return xo(t,function(a,o,c){e(n,a,r(a),c)}),n}function Q6(t,e){return function(r,n){var a=St(r)?X6:V6,o={};return a(r,t,Pr(n),o)}}function Qh(t,e,r){(r!==void 0&&!_o(t[e],r)||r===void 0&&!(e in t))&&Lo(t,e,r)}function Jh(t,e){if(!(e==="constructor"&&typeof t[e]=="function")&&e!="__proto__")return t[e]}function J6(t){return hs(t,Ro(t))}function Z6(t,e,r,n,a,o,c){var d=Jh(t,r),p=Jh(e,r),v=c.get(p);if(v){Qh(t,r,v);return}var b=o?o(d,p,r+"",t,e,c):void 0,C=b===void 0;if(C){var T=St(p),A=!T&&ts(p),F=!T&&!A&&Nl(p);b=p,T||A||F?St(d)?b=d:No(d)?b=n1(d):A?(C=!1,b=l1(p,!0)):F?(C=!1,b=h1(p,!0)):b=[]:Ml(p)||es(p)?(b=d,es(d)?b=J6(d):(!_t(d)||zn(d))&&(b=p1(p))):C=!1}C&&(c.set(p,b),a(b,p,n,o,c),c.delete(p)),Qh(t,r,b)}function y1(t,e,r,n,a){t!==e&&Hb(e,function(o,c){if(a||(a=new ln),_t(o))Z6(t,e,c,r,y1,n,a);else{var d=n?n(Jh(t,c),o,c+"",t,e,a):void 0;d===void 0&&(d=o),Qh(t,c,d)}},Ro)}var e8=200;function t8(t,e,r,n){var a=-1,o=vy,c=!0,d=t.length,p=[],v=e.length;if(!d)return p;e.length>=e8&&(o=xh,c=!1,e=new ns(e));e:for(;++a<d;){var b=t[a],C=b;if(b=b!==0?b:0,c&&C===C){for(var T=v;T--;)if(e[T]===C)continue e;p.push(b)}else o(e,C,n)||p.push(b)}return p}var r8=Bl(function(t,e){return No(t)?t8(t,$l(e,1,No,!0)):[]});function n8(t){return typeof t=="function"?t:Oo}function i8(t,e){for(var r=-1,n=t==null?0:t.length;++r<n;)if(!e(t[r],r,t))return!1;return!0}function a8(t,e){var r=!0;return xo(t,function(n,a,o){return r=!!e(n,a,o),r}),r}function k1(t,e,r){var n=St(t)?i8:a8;return n(t,Pr(e))}function s8(t){return function(e,r,n){var a=Object(e);if(!Kn(e)){var o=Pr(r);e=Xn(e),r=function(d){return o(a[d],d,a)}}var c=t(e,r,n);return c>-1?a[o?e[c]:c]:void 0}}var o8=Math.max;function u8(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var a=r==null?0:xl(r);return a<0&&(a=o8(n+a,0)),Eh(t,Pr(e),a)}var pa=s8(u8);function l8(t,e,r){var n;return r(t,function(a,o,c){if(e(a,o,c))return n=o,!1}),n}function Wl(t,e){return l8(t,Pr(e),Sh)}function c8(t,e,r){var n=t==null?0:t.length;if(!n)return-1;var a=n-1;return Eh(t,Pr(e),a,!0)}function E1(t,e){var r=-1,n=Kn(t)?Array(t.length):[];return xo(t,function(a,o,c){n[++r]=e(a,o,c)}),n}function ma(t,e){var r=St(t)?Ei:E1;return r(t,Pr(e))}var f8=Object.prototype,d8=f8.hasOwnProperty,Ci=Q6(function(t,e,r){d8.call(t,r)?t[r].push(e):Lo(t,r,[e])});function h8(t,e){return e.length<2?t:us(t,jy(e,0,-1))}var p8="[object Map]",m8="[object Set]",v8=Object.prototype,g8=v8.hasOwnProperty;function An(t){if(t==null)return!0;if(Kn(t)&&(St(t)||typeof t=="string"||typeof t.splice=="function"||ts(t)||Nl(t)||es(t)))return!t.length;var e=Xr(t);if(e==p8||e==m8)return!t.size;if(Pl(t))return!Fb(t).length;for(var r in t)if(g8.call(t,r))return!1;return!0}function Gl(t,e){return Ao(t,e)}function _8(t,e,r){r=typeof r=="function"?r:void 0;var n=r?r(t,e):void 0;return n===void 0?Ao(t,e,void 0,r):!!n}function b8(t){return typeof t=="number"&&t==xl(t)}function y8(t,e){return t===e||ty(t,e,ny(e))}function dr(t){return t===void 0}function zl(t,e){var r={};return e=Pr(e),Sh(t,function(n,a,o){Lo(r,a,e(n,a,o))}),r}var kr=NM(function(t,e,r){y1(t,e,r)}),k8="Expected a function";function E8(t){if(typeof t!="function")throw new TypeError(k8);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function T8(t,e){return e=ss(e,t),t=h8(t,e),t==null||delete t[os(_y(e))]}function C8(t){return Ml(t)?void 0:t}var w8=1,S8=2,x8=4,Mo=i1(function(t,e){var r={};if(t==null)return r;var n=!1;e=Ei(e,function(o){return o=ss(o,t),n||(n=o.length>1),o}),hs(t,Kh(t),r),n&&(r=Do(r,w8|S8|x8,C8));for(var a=e.length;a--;)T8(r,e[a]);return r});function Zh(t,e,r,n){if(!_t(t))return t;e=ss(e,t);for(var a=-1,o=e.length,c=o-1,d=t;d!=null&&++a<o;){var p=os(e[a]),v=r;if(p==="__proto__"||p==="constructor"||p==="prototype")return t;if(a!=c){var b=d[p];v=void 0,v===void 0&&(v=_t(b)?b:Al(e[a+1])?[]:{})}qh(d,p,v),d=d[p]}return t}function T1(t,e,r){for(var n=-1,a=e.length,o={};++n<a;){var c=e[n],d=us(t,c);r(d,c)&&Zh(o,ss(c,t),d)}return o}function wi(t,e){if(t==null)return{};var r=Ei(Kh(t),function(n){return[n]});return e=Pr(e),T1(t,r,function(n,a){return e(n,a[0])})}function A8(t,e){return wi(t,E8(Pr(e)))}function O8(t,e){var r=t.length;for(t.sort(e);r--;)t[r]=t[r].value;return t}function N8(t,e){if(t!==e){var r=t!==void 0,n=t===null,a=t===t,o=Za(t),c=e!==void 0,d=e===null,p=e===e,v=Za(e);if(!d&&!v&&!o&&t>e||o&&c&&p&&!d&&!v||n&&c&&p||!r&&p||!a)return 1;if(!n&&!o&&!v&&t<e||v&&r&&a&&!n&&!o||d&&r&&a||!c&&a||!p)return-1}return 0}function P8(t,e,r){for(var n=-1,a=t.criteria,o=e.criteria,c=a.length,d=r.length;++n<c;){var p=N8(a[n],o[n]);if(p){if(n>=d)return p;var v=r[n];return p*(v=="desc"?-1:1)}}return t.index-e.index}function C1(t,e,r){e.length?e=Ei(e,function(o){return St(o)?function(c){return us(c,o.length===1?o[0]:o)}:o}):e=[Oo];var n=-1;e=Ei(e,Ol(Pr));var a=E1(t,function(o,c,d){var p=Ei(e,function(v){return v(o)});return{criteria:p,index:++n,value:o}});return O8(a,function(o,c){return P8(o,c,r)})}function ep(t,e,r,n){return t==null?[]:(St(e)||(e=e==null?[]:[e]),r=n?void 0:r,St(r)||(r=r==null?[]:[r]),C1(t,e,r))}function I8(t,e){return T1(t,e,function(r,n){return oy(t,n)})}var ql=i1(function(t,e){return t==null?{}:I8(t,e)});function L8(t,e,r){return t==null?t:Zh(t,e,r)}var Yl=Bl(function(t,e){if(t==null)return[];var r=e.length;return r>1&&Yh(t,e[0],e[1])?e=[]:r>2&&Yh(e[0],e[1],e[2])&&(e=[e[0]]),C1(t,$l(e),[])}),R8="Expected a function";function D8(t,e,r){var n=!0,a=!0;if(typeof t!="function")throw new TypeError(R8);return _t(r)&&(n="leading"in r?!!r.leading:n,a="trailing"in r?!!r.trailing:a),Vn(t,e,{leading:n,maxWait:e,trailing:a})}function M8(t,e){for(var r=t.length;r--&&Sl(e,t[r],0)>-1;);return r}function $8(t,e){for(var r=-1,n=t.length;++r<n&&Sl(e,t[r],0)>-1;);return r}function tp(t,e,r){if(t=as(t),t&&e===void 0)return t.slice(0,Sb(t)+1);if(!t||!(e=Rl(e)))return t;var n=Po(t),a=M8(n,Po(e))+1;return Uh(n,0,a).join("")}var F8=/^\s+/;function B8(t,e,r){if(t=as(t),t&&e===void 0)return t.replace(F8,"");if(!t||!(e=Rl(e)))return t;var n=Po(t),a=$8(n,Po(e));return Uh(n,a).join("")}function H8(t,e){return e=typeof e=="function"?e:void 0,t&&t.length?gy(t,void 0,e):[]}function U8(t,e,r,n){return Zh(t,e,r(us(t,e)))}function j8(t,e,r){return t==null?t:U8(t,e,n8(r))}var rp,w1;function W8(){if(w1)return rp;w1=1;function t(e){return e===void 0}return rp=t,rp}var G8=W8(),S1=Da(G8);class x1{constructor(){this.log=null,this.listeners={}}on(e,r,n=0){const a=this.listeners[e]||[],o=a.findIndex(c=>c.priority<n);return~o?a.splice(o,0,{callback:r,priority:n}):a.push({callback:r,priority:n}),this.listeners[e]=a,()=>this.off(e,r)}off(e,r){r||delete this.listeners[e];const n=this.listeners[e];if(n&&r){const a=n.findIndex(o=>o.callback===r);~a&&n.splice(a,1)}}trigger(e,r=[],n=!1){const a=new z8(e,r),o=b=>Promise.reject(b),c=b=>S1(b)?a.result:b,d=(b,{callback:C})=>{const T=A=>(S1(A)||(a.result=A),A===!1&&a.stopPropagation(),a.isPropagationStopped()?a.result:C.apply(C,[a].concat(a.params)));return n?b.then(T,o):T(b)};this.log&&this.log.call(this,a);const v=(this.listeners[a.name]||[]).concat().reduce(d,n?Promise.resolve():void 0);return n?v.then(c,o):c(v)}}let z8=class{constructor(e,r){yr(e)||(e={name:e}),Array.isArray(r)||(r=[r]),Object.assign(this,e,{params:r,result:void 0})}stopPropagation(){this.stop=!0}isPropagationStopped(){return this.stop===!0}},A1={};function q8({config:t}){A1=t}function Y8(t,e="#41B883"){typeof console<"u"&&A1.devtools&&console.log(`%c vue-event-manager %c ${t} `,"color: #fff; background: #35495E; padding: 1px; border-radius: 3px 0 0 3px;",`color: #fff; background: ${e}; padding: 1px; border-radius: 0 3px 3px 0;`)}const ps=new x1;var O1={version:"2.1.3",install(t,e={}){this.installed||(q8(t),Y8(this.version),t.prototype.$events=t.events=Object.assign(ps,e),t.prototype.$trigger=function(r,n=[],a=!1){return yr(r)||(r={name:r,origin:this}),ps.trigger(r,n,a)},t.config.optionMergeStrategies.events=K8,t.mixin({beforeCreate(){const{events:r}=this.$options;if(r){const n=N1.call(this,r);this.$on("hook:beforeDestroy",()=>n.forEach(a=>a()))}}}))},EventManager:x1};function K8(t,e){if(!e)return t;if(!t)return e;const r=Object.assign({},t);for(const n in e){let a=r[n];const o=e[n];a&&!Array.isArray(a)&&(a=[a]),r[n]=a?a.concat(o):Array.isArray(o)?o:[o]}return r}function N1(t={}){const e=[];for(const[r,n]of Object.entries(t))for(let a of Array.isArray(n)?n:[n]){let o=0;yr(a)&&(o=a.priority,a=a.handler),e.push(ps.on(r,X8(a,this),o))}return e}function X8(t,e){return typeof t=="string"?function(){return e[t].apply(e,arguments)}:t.bind(e)}typeof window<"u"&&window.Vue&&window.Vue.use(O1);function Me(t,e={}){const r=to(),{origin:n=r?.proxy??null}=e;if(t){const o=N1.call(n,t);r&&Ga(()=>o.forEach(c=>c()))}function a(o,c=[],d=!1){return ps.trigger(yr(o)?o:{name:o,origin:n},c,d)}return{Events:ps,trigger:a}}const V8={__name:"LinkPicker",props:{iframes:{type:Object,default:()=>({articles:"&option=com_content&view=articles","menu items":"&option=com_menus&view=items"})}},emits:["select","resolve"],setup(t,{emit:e}){const r=t,n=`${ue.customizer.root}/index.php?layout=modal&tmpl=component&function=pickLink&${ue.customizer.token}=1`;Ga(()=>{delete window.pickLink,window.Joomla?.Modal?.setCurrent()});function a({target:{contentDocument:o}}){window.pickLink=(c,d,p,v,b,C="")=>{C!==""&&!b.includes("&lang=")&&(b+=`&lang=${C}`),e("select",b),e("resolve",b)},window.Joomla?.Modal?.setCurrent({close(){}}),ue.customizer.admin||Tb(o,[".contentpane { padding: 30px !important }",".js-stools-container-list { display: none !important }"])}return{__sfc:!0,base:n,emit:e,props:r,loadIframe:a,Switcher:ls}}};var Q8=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r(n.Switcher,{attrs:{tabs:Object.keys(n.props.iframes)},nativeOn:{"!load":function(a){return n.loadIframe.apply(null,arguments)}},scopedSlots:e._u([e._l(n.props.iframes,function(a,o){return{key:o,fn:function(){return[r("div",{key:o,attrs:{"uk-overflow-auto":"expand: true"}},[r("iframe",{staticStyle:{height:"100%",width:"100%"},attrs:{src:`${n.base}${a}`}})])]},proxy:!0}})],null,!0)})},J8=[],Z8=Q(V8,Q8,J8,!1),P1=Z8.exports;const e$={__name:"UserPicker",emits:["select","resolve"],setup(t,{emit:e}){const r=`${ue.customizer.root}/index.php?layout=modal&tmpl=component&option=com_users&view=users`;Ga(()=>{delete window.pickLink});function n({target:{contentDocument:a}}){a.querySelectorAll(".button-select").forEach(c=>c.setAttribute("onclick","window.parent.pickLink(this.dataset.userValue)")),window.pickLink=c=>{e("select",c),e("resolve",c)},Tb(a,[".contentpane { padding: 30px !important }",".js-stools-container-list { display: none !important }"])}return{__sfc:!0,src:r,emit:e,loadIframe:n}}};var t$=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{attrs:{"uk-overflow-auto":"expand: true"},on:{"!load":function(a){return n.loadIframe.apply(null,arguments)}}},[r("iframe",{staticStyle:{height:"100%",width:"100%"},attrs:{src:n.src}})])},r$=[],n$=Q(e$,t$,r$,!1),i$=n$.exports,a$={setup(){Me({async openItemPicker(){return(await Dt(P1,{iframes:{articles:"&option=com_content&view=articles"}},{container:!0}))?.match(/[&?]id=(\d+)/)[1]},resolveItemTitle(t,{id:e}){return Ue("joomla/articles").query({ids:[e]}).get().json(({[e]:r})=>r)}}),Me({openItemPicker:{handler(t,e){if(e.module==="com_users")return t.stopPropagation(),Dt(i$,{},{container:!0})},priority:5},resolveItemTitle:{handler(t,{id:e,module:r}){if(r==="com_users")return t.stopPropagation(),Ue("joomla/users").query({ids:[e]}).get().json(({[e]:n})=>n)},priority:5}})}};const s$={name:"Fields"};var o$=function(e,r){return e("div",{staticClass:"yo-sidebar-fields",class:r.data.staticClass,style:r.data.style},r._l(r.parent.prepare(r.props.field.fields),function(n){return e("div",{directives:[{name:"show",rawName:"v-show",value:r.parent.evaluate(n.show),expression:"parent.evaluate(field.show)"}],key:n.name},[n.buttons?[e("div",{staticClass:"uk-flex uk-flex-middle uk-flex-right"},[n.label?e("div",{staticClass:"uk-width-expand"},[e("h3",{staticClass:"yo-sidebar-subheading uk-margin-remove"},[r._v(r._s(r.parent.$t(n.label)))])]):r._e(),r._v(" "),n.buttons?e("div",{directives:[{name:"show",rawName:"v-show",value:n.buttons.some(a=>r.parent.evaluate(a.show)),expression:"field.buttons.some((button) => parent.evaluate(button.show))"}],staticClass:"uk-width-auto"},[e("ul",{staticClass:"uk-subnav uk-margin-remove"},r._l(n.buttons,function({label:a,action:o,show:c}){return e("li",{directives:[{name:"show",rawName:"v-show",value:r.parent.evaluate(c),expression:"parent.evaluate(show)"}],key:o},[e("button",{staticClass:"uk-button uk-button-link",attrs:{disabled:n.enable&&!r.parent.evaluate(n.enable),type:"button"},on:{click:function(d){return r.parent.$trigger(o,[n,d])}}},[r._v(` `+r._s(a)+` `)])])}),0)]):r._e()])]:n.label?e("h3",{staticClass:"yo-sidebar-subheading"},[r._v(r._s(r.parent.$t(n.label)))]):r._e(),r._v(" "),n.type!=="description"?[["radio","checkbox","grid","group","parallax-stops"].includes(n.type)?e(n.component,{tag:"component",attrs:{field:n,values:r.parent.values},on:{change:r.parent.change}}):e("div",{staticClass:"uk-margin-small"},[e(n.component,{tag:"component",attrs:{field:n,values:r.parent.values},on:{change:r.parent.change}})],1)]:r._e(),r._v(" "),n.description?e("p",{staticClass:"uk-text-muted uk-margin-small",domProps:{innerHTML:r._s(r.parent.$t(n.description))}}):r._e(),r._v(" "),n.divider?e("hr"):r._e()],2)}),0)},u$=[],l$=Q(s$,o$,u$,!0),I1=l$.exports;const L1=["this"],c$=["+","-","!"],f$=["=","+","-","*","/","%","^","==","!=",">","<",">=","<=","||","&&","??","&","===","!==","|","|>"],R1={"!":0,":":0,",":0,")":0,"]":0,"}":0,"|>":1,"?":2,"??":3,"||":4,"&&":5,"|":6,"^":7,"&":8,"!=":9,"==":9,"!==":9,"===":9,">=":10,">":10,"<=":10,"<":10,"+":11,"-":11,"%":12,"/":12,"*":12,"(":13,"[":13,".":13,"{":13},D1=13;const d$=["==","!=","<=",">=","||","&&","??","|>"],h$=["===","!=="];var qe;(function(t){t[t.STRING=1]="STRING",t[t.IDENTIFIER=2]="IDENTIFIER",t[t.DOT=3]="DOT",t[t.COMMA=4]="COMMA",t[t.COLON=5]="COLON",t[t.INTEGER=6]="INTEGER",t[t.DECIMAL=7]="DECIMAL",t[t.OPERATOR=8]="OPERATOR",t[t.GROUPER=9]="GROUPER",t[t.KEYWORD=10]="KEYWORD",t[t.ARROW=11]="ARROW"})(qe||(qe={}));const On=(t,e,r=0)=>({kind:t,value:e,precedence:r}),p$=t=>t===9||t===10||t===13||t===32,M1=t=>t===95||t===36||(t&=-33,65<=t&&t<=90),m$=t=>M1(t)||$o(t),v$=t=>L1.indexOf(t)!==-1,g$=t=>t===34||t===39,$o=t=>48<=t&&t<=57,_$=t=>t===43||t===45||t===42||t===47||t===33||t===38||t===37||t===60||t===61||t===62||t===63||t===94||t===124,b$=t=>t===40||t===41||t===91||t===93||t===123||t===125,y$=t=>t.replace(/\\(.)/g,(e,r)=>{switch(r){case"n":return` `;case"r":return"\r";case"t":return" ";case"b":return"\b";case"f":return"\f";default:return r}});let k$=class{_input;_index=-1;_tokenStart=0;_next;constructor(e){this._input=e,this._advance()}nextToken(){for(;p$(this._next);)this._advance(!0);if(g$(this._next))return this._tokenizeString();if(M1(this._next))return this._tokenizeIdentOrKeyword();if($o(this._next))return this._tokenizeNumber();if(this._next===46)return this._tokenizeDot();if(this._next===44)return this._tokenizeComma();if(this._next===58)return this._tokenizeColon();if(_$(this._next))return this._tokenizeOperator();if(b$(this._next))return this._tokenizeGrouper();if(this._advance(),this._next!==void 0)throw new Error(`Expected end of input, got ${this._next}`)}_advance(e){this._index++,this._index<this._input.length?(this._next=this._input.charCodeAt(this._index),e===!0&&(this._tokenStart=this._index)):this._next=void 0}_getValue(e=0){const r=this._input.substring(this._tokenStart,this._index+e);return e===0&&this._clearValue(),r}_clearValue(){this._tokenStart=this._index}_tokenizeString(){const e="unterminated string",r=this._next;for(this._advance(!0);this._next!==r;){if(this._next===void 0)throw new Error(e);if(this._next===92&&(this._advance(),this._next===void 0))throw new Error(e);this._advance()}const n=On(qe.STRING,y$(this._getValue()));return this._advance(),n}_tokenizeIdentOrKeyword(){do this._advance();while(m$(this._next));const e=this._getValue(),r=v$(e)?qe.KEYWORD:qe.IDENTIFIER;return On(r,e)}_tokenizeNumber(){do this._advance();while($o(this._next));return this._next===46?this._tokenizeDot():On(qe.INTEGER,this._getValue())}_tokenizeDot(){return this._advance(),$o(this._next)?this._tokenizeFraction():(this._clearValue(),On(qe.DOT,".",D1))}_tokenizeComma(){return this._advance(!0),On(qe.COMMA,",")}_tokenizeColon(){return this._advance(!0),On(qe.COLON,":")}_tokenizeFraction(){do this._advance();while($o(this._next));return On(qe.DECIMAL,this._getValue())}_tokenizeOperator(){this._advance();let e=this._getValue(2);if(h$.indexOf(e)!==-1)this._advance(),this._advance();else{if(e=this._getValue(1),e==="=>")return this._advance(),On(qe.ARROW,e);d$.indexOf(e)!==-1&&this._advance()}return e=this._getValue(),On(qe.OPERATOR,e,R1[e])}_tokenizeGrouper(){const e=String.fromCharCode(this._next),r=On(qe.GROUPER,e,R1[e]);return this._advance(!0),r}};const E$=(t,e)=>new T$(t,e).parse();let T$=class{_kind;_tokenizer;_ast;_token;_value;constructor(e,r){this._tokenizer=new k$(e),this._ast=r}parse(){return this._advance(),this._parseExpression()}_advance(e,r){if(!this._matches(e,r))throw new Error(`Expected kind ${e} (${r}), was ${this._token?.kind} (${this._token?.value})`);const n=this._tokenizer.nextToken();this._token=n,this._kind=n?.kind,this._value=n?.value}_matches(e,r){return!(e&&this._kind!==e||r&&this._value!==r)}_parseExpression(){if(!this._token)return this._ast.empty();const e=this._parseUnary();return e===void 0?void 0:this._parsePrecedence(e,0)}_parsePrecedence(e,r){if(e===void 0)throw new Error("Expected left to be defined.");for(;this._token;)if(this._matches(qe.GROUPER,"(")){const n=this._parseArguments();e=this._ast.invoke(e,void 0,n)}else if(this._matches(qe.GROUPER,"[")){const n=this._parseIndex();e=this._ast.index(e,n)}else if(this._matches(qe.DOT)){this._advance();const n=this._parseUnary();e=this._makeInvokeOrGetter(e,n)}else{if(this._matches(qe.KEYWORD))break;if(this._matches(qe.OPERATOR)&&this._token.precedence>=r)e=this._value==="?"?this._parseTernary(e):this._parseBinary(e,this._token);else break}return e}_makeInvokeOrGetter(e,r){if(r===void 0)throw new Error("expected identifier");if(r.type==="ID")return this._ast.getter(e,r.value);if(r.type==="Invoke"&&r.receiver.type==="ID"){const n=r.receiver;return this._ast.invoke(e,n.value,r.arguments)}else throw new Error(`expected identifier: ${r}`)}_parseBinary(e,r){if(f$.indexOf(r.value)===-1)throw new Error(`unknown operator: ${r.value}`);this._advance();let n=this._parseUnary();for(;(this._kind===qe.OPERATOR||this._kind===qe.DOT||this._kind===qe.GROUPER)&&this._token.precedence>r.precedence;)n=this._parsePrecedence(n,this._token.precedence);return this._ast.binary(e,r.value,n)}_parseUnary(){if(this._matches(qe.OPERATOR)){const e=this._value;if(this._advance(),e==="+"||e==="-"){if(this._matches(qe.INTEGER))return this._parseInteger(e);if(this._matches(qe.DECIMAL))return this._parseDecimal(e)}if(c$.indexOf(e)===-1)throw new Error(`unexpected token: ${e}`);const r=this._parsePrecedence(this._parsePrimary(),D1);return this._ast.unary(e,r)}return this._parsePrimary()}_parseTernary(e){this._advance(qe.OPERATOR,"?");const r=this._parseExpression();this._advance(qe.COLON);const n=this._parseExpression();return this._ast.ternary(e,r,n)}_parsePrimary(){switch(this._kind){case qe.KEYWORD:const e=this._value;if(e==="this")return this._advance(),this._ast.id(e);throw L1.indexOf(e)!==-1?new Error(`unexpected keyword: ${e}`):new Error(`unrecognized keyword: ${e}`);case qe.IDENTIFIER:return this._parseInvokeOrIdentifier();case qe.STRING:return this._parseString();case qe.INTEGER:return this._parseInteger();case qe.DECIMAL:return this._parseDecimal();case qe.GROUPER:return this._value==="("?this._parseParenOrFunction():this._value==="{"?this._parseMap():this._value==="["?this._parseList():void 0;case qe.COLON:throw new Error('unexpected token ":"');default:return}}_parseList(){const e=[];do{if(this._advance(),this._matches(qe.GROUPER,"]"))break;e.push(this._parseExpression())}while(this._matches(qe.COMMA));return this._advance(qe.GROUPER,"]"),this._ast.list(e)}_parseMap(){const e={};do{if(this._advance(),this._matches(qe.GROUPER,"}"))break;const r=this._value;(this._matches(qe.STRING)||this._matches(qe.IDENTIFIER))&&this._advance(),this._advance(qe.COLON),e[r]=this._parseExpression()}while(this._matches(qe.COMMA));return this._advance(qe.GROUPER,"}"),this._ast.map(e)}_parseInvokeOrIdentifier(){const e=this._value;if(e==="true")return this._advance(),this._ast.literal(!0);if(e==="false")return this._advance(),this._ast.literal(!1);if(e==="null")return this._advance(),this._ast.literal(null);if(e==="undefined")return this._advance(),this._ast.literal(void 0);const r=this._parseIdentifier(),n=this._parseArguments();return n?this._ast.invoke(r,void 0,n):r}_parseIdentifier(){if(!this._matches(qe.IDENTIFIER))throw new Error(`expected identifier: ${this._value}`);const e=this._value;return this._advance(),this._ast.id(e)}_parseArguments(){if(!this._matches(qe.GROUPER,"("))return;const e=[];do{if(this._advance(),this._matches(qe.GROUPER,")"))break;const r=this._parseExpression();e.push(r)}while(this._matches(qe.COMMA));return this._advance(qe.GROUPER,")"),e}_parseIndex(){this._advance();const e=this._parseExpression();return this._advance(qe.GROUPER,"]"),e}_parseParenOrFunction(){const e=this._parseArguments();if(this._matches(qe.ARROW)){this._advance();const r=this._parseExpression(),n=e?.map(a=>a.value)??[];return this._ast.arrowFunction(n,r)}else return this._ast.paren(e[0])}_parseString(){const e=this._ast.literal(this._value);return this._advance(),e}_parseInteger(e=""){const r=this._ast.literal(parseInt(`${e}${this._value}`,10));return this._advance(),r}_parseDecimal(e=""){const r=this._ast.literal(parseFloat(`${e}${this._value}`));return this._advance(),r}};const C$={"+":(t,e)=>t+e,"-":(t,e)=>t-e,"*":(t,e)=>t*e,"/":(t,e)=>t/e,"%":(t,e)=>t%e,"==":(t,e)=>t==e,"!=":(t,e)=>t!=e,"===":(t,e)=>t===e,"!==":(t,e)=>t!==e,">":(t,e)=>t>e,">=":(t,e)=>t>=e,"<":(t,e)=>t<e,"<=":(t,e)=>t<=e,"||":(t,e)=>t||e,"&&":(t,e)=>t&&e,"??":(t,e)=>t??e,"|":(t,e)=>e(t),"|>":(t,e)=>e(t)},w$={"+":t=>t,"-":t=>-t,"!":t=>!t};class S${empty(){return{type:"Empty",evaluate(e){return e},getIds(e){return e}}}literal(e){return{type:"Literal",value:e,evaluate(r){return this.value},getIds(r){return r}}}id(e){return{type:"ID",value:e,evaluate(r){return this.value==="this"?r:r?.[this.value]},getIds(r){return r.push(this.value),r}}}unary(e,r){const n=w$[e];return{type:"Unary",operator:e,child:r,evaluate(a){return n(this.child.evaluate(a))},getIds(a){return this.child.getIds(a)}}}binary(e,r,n){const a=C$[r];return{type:"Binary",operator:r,left:e,right:n,evaluate(o){if(this.operator==="="){if(this.left.type!=="ID"&&this.left.type!=="Getter"&&this.left.type!=="Index")throw new Error(`Invalid assignment target: ${this.left}`);const c=this.right.evaluate(o);let d,p;return this.left.type==="Getter"?(d=this.left.receiver.evaluate(o),p=this.left.name):this.left.type==="Index"?(d=this.left.receiver.evaluate(o),p=this.left.argument.evaluate(o)):this.left.type==="ID"&&(d=o,p=this.left.value),d===void 0?void 0:d[p]=c}return a(this.left.evaluate(o),this.right.evaluate(o))},getIds(o){return this.left.getIds(o),this.right.getIds(o),o}}}getter(e,r){return{type:"Getter",receiver:e,name:r,evaluate(n){return this.receiver.evaluate(n)?.[this.name]},getIds(n){return this.receiver.getIds(n),n}}}invoke(e,r,n){if(r!=null&&typeof r!="string")throw new Error("method not a string");return{type:"Invoke",receiver:e,method:r,arguments:n,evaluate(a){const o=this.receiver.evaluate(a),c=this.method?o:a?.this??a,d=this.method?o?.[r]:o,v=(this.arguments??[]).map(b=>b?.evaluate(a));return d?.apply?.(c,v)},getIds(a){return this.receiver.getIds(a),this.arguments?.forEach(o=>o?.getIds(a)),a}}}paren(e){return e}index(e,r){return{type:"Index",receiver:e,argument:r,evaluate(n){return this.receiver.evaluate(n)?.[this.argument.evaluate(n)]},getIds(n){return this.receiver.getIds(n),n}}}ternary(e,r,n){return{type:"Ternary",condition:e,trueExpr:r,falseExpr:n,evaluate(a){return this.condition.evaluate(a)?this.trueExpr.evaluate(a):this.falseExpr.evaluate(a)},getIds(a){return this.condition.getIds(a),this.trueExpr.getIds(a),this.falseExpr.getIds(a),a}}}map(e){return{type:"Map",entries:e,evaluate(r){const n={};if(e&&this.entries)for(const a in e){const o=this.entries[a];o&&(n[a]=o.evaluate(r))}return n},getIds(r){if(e&&this.entries)for(const n in e){const a=this.entries[n];a&&a.getIds(r)}return r}}}list(e){return{type:"List",items:e,evaluate(r){return this.items?.map(n=>n?.evaluate(r))},getIds(r){return this.items?.forEach(n=>n?.getIds(r)),r}}}arrowFunction(e,r){return{type:"ArrowFunction",params:e,body:r,evaluate(n){const a=this.params,o=this.body;return function(...c){const d=Object.fromEntries(a.map((v,b)=>[v,c[b]])),p=new Proxy(n??{},{set(v,b,C){return d.hasOwnProperty(b)&&(d[b]=C),v[b]=C},get(v,b){return d.hasOwnProperty(b)?d[b]:v[b]}});return o.evaluate(p)}},getIds(n){return this.body.getIds(n).filter(a=>!this.params.includes(a))}}}}let np;function x$({set:t}){np=t}function A$(t,e="#41B883"){console?.log(`%c vue-fields %c ${t} `,"color: #fff; background: #35495E; padding: 1px; border-radius: 3px 0 0 3px;",`color: #fff; background: ${e}; padding: 1px; border-radius: 0 3px 3px 0;`)}function ip(t,e="#DB6B00"){A$(t,e)}function ap(t,e,r){const n=Array.isArray(e)?e:e.split(".");for(const a of n)if(_t(t)&&!dr(t[a]))t=t[a];else return r;return t}function fn(t,e,r){const n=Array.isArray(e)?e:e.split(".");for(;n.length>1;){const a=n.shift();_t(t[a])||np(t,a,{}),t=t[a]}np(t,n.shift(),r)}const O$=new S$,sp={};function N$(t){if(!zn(sp[t])){const e=E$(t,O$);sp[t]=function(r,n){return e.evaluate(new Proxy(this,{get:(a,o)=>n[o]??r[o]??a[o]??window[o]}))}}return sp[t]}var Ze={inject:["Fields"],props:{field:{type:Object,required:!0},values:{type:Object,required:!0}},computed:{name(){return this.field.name??""},label(){return this.field.label??""},attrs(){return this.field.attrs??{}},options(){return this.field.options??[]},default(){return this.field.default},value:{get(){return ap(this.values,this.name)},set(t){this.$emit("change",t,this)}},attributes:{get(){return this.Fields.evaluate(this.field.enable)?this.attrs:{disabled:!0,...this.attrs}}}},created(){dr(this.value)&&!dr(this.default)&&(this.value=this.default)},methods:{filterOptions(t){const e=[];if(!t)return ip(`Invalid options provided for ${this.name}`),e;for(const[r,n]of Object.entries(t))_t(n)?e.push({label:r,options:this.filterOptions(n)}):e.push({text:r,value:n});return e}}};const P$={extends:Ze};var I$=function(){var e=this,r=e._self._c;return r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"checkbox"},domProps:{checked:Array.isArray(e.value)?e._i(e.value,null)>-1:e.value},on:{change:function(n){var a=e.value,o=n.target,c=!!o.checked;if(Array.isArray(a)){var d=null,p=e._i(a,d);o.checked?p<0&&(e.value=a.concat([d])):p>-1&&(e.value=a.slice(0,p).concat(a.slice(p+1)))}else e.value=c}}},"input",e.attributes,!1))},L$=[],R$=Q(P$,I$,L$,!1),D$=R$.exports;const M$={extends:Ze};var $$=function(){var e=this,r=e._self._c;return r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"number"},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"input",e.attributes,!1))},F$=[],B$=Q(M$,$$,F$,!1),H$=B$.exports;const U$={extends:Ze};var j$=function(){var e=this,r=e._self._c;return r("div",e._l(e.filterOptions(e.options),function(n){return r("div",{key:n.value},[r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{name:e.name,type:"radio"},domProps:{value:n.value,checked:e._q(e.value,n.value)},on:{change:function(a){e.value=n.value}}},"input",e.attributes,!1)),e._v(" "),r("label",[e._v(e._s(n.text))])])}),0)},W$=[],G$=Q(U$,j$,W$,!1),z$=G$.exports;const q$={extends:Ze};var Y$=function(){var e=this,r=e._self._c;return r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"range"},domProps:{value:e.value},on:{__r:function(n){e.value=n.target.value}}},"input",e.attributes,!1))},K$=[],X$=Q(q$,Y$,K$,!1),V$=X$.exports;const Q$={extends:Ze};var J$=function(){var e=this,r=e._self._c;return r("select",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],on:{change:function(n){var a=Array.prototype.filter.call(n.target.options,function(o){return o.selected}).map(function(o){var c="_value"in o?o._value:o.value;return c});e.value=n.target.multiple?a:a[0]}}},"select",e.attributes,!1),[e._l(e.filterOptions(e.options),function(n){return[n.label?r("optgroup",{key:n.label,attrs:{label:n.label}},e._l(n.options,function(a){return r("option",{key:a.value,domProps:{value:a.value}},[e._v(e._s(a.text))])}),0):r("option",{key:n.value,domProps:{value:n.value}},[e._v(e._s(n.text))])]})],2)},Z$=[],eF=Q(Q$,J$,Z$,!1),tF=eF.exports;const rF={extends:Ze};var nF=function(){var e=this,r=e._self._c;return r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],attrs:{type:"text"},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"input",e.attributes,!1))},iF=[],aF=Q(rF,nF,iF,!1),sF=aF.exports;const oF={extends:Ze};var uF=function(){var e=this,r=e._self._c;return r("textarea",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"textarea",e.attributes,!1))},lF=[],cF=Q(oF,uF,lF,!1),fF=cF.exports;const dF={components:{FieldText:sF,FieldTextarea:fF,FieldRadio:z$,FieldCheckbox:D$,FieldSelect:tF,FieldRange:V$,FieldNumber:H$},provide(){return{Fields:this}},props:{config:{type:[Object,Array],default:()=>({})},values:{type:Object,default:()=>({})},prefix:{type:String,default:"field-"}},computed:{fields(){return this.prepare()}},methods:{change(t,e){fn(this.values,e.name,t),this.$emit("change",t,e)},prepare(t=this.config,e=this.prefix){const r=[],n=Array.isArray(t);for(let[a,o]of Object.entries(t))o={...o},!o.name&&!n&&(o.name=a),o.name?(o.type||(o.type="text"),o.component||(o.component=e+o.type),r.push(o)):ip(`Field name missing ${JSON.stringify(o)}`);return r},evaluate(t,e=this.values){try{return dr(t)?!0:(Sn(t)&&(t=N$(t)),zn(t)?t.call(this,e,{$match:hF,$get:r=>ap(e,r)}):t)}catch(r){ip(r)}return!0}}};function hF(t,e,r){return t&&new RegExp(e,r).test(t)}var pF=function(){var e=this,r=e._self._c;return r("div",e._l(e.fields,function(n){return r("div",{directives:[{name:"show",rawName:"v-show",value:e.evaluate(n.show),expression:"evaluate(field.show)"}],key:n.name},[n.type!=="checkbox"?r("label",[e._v(e._s(n.label))]):e._e(),e._v(" "),r(n.component,{tag:"component",attrs:{field:n,values:e.values},on:{change:e.change}})],1)}),0)},mF=[],vF=Q(dF,pF,mF,!1),op=vF.exports;function $1(t){$1.installed||(x$(t),t.component("field",Ze),t.component("fields",op))}const gF={extends:Ze,computed:{previewColor(){return this.value}},methods:{isValidColor:Ki,open(){ds({functional:!0,render:t=>t(ef,{props:{value:this.value||void 0,allowEmpty:this.field.allowEmpty,disableAlpha:this.field.alpha===!1,disableFields:this.field.fields===!1,disableSaturation:this.field.saturation===!1},on:{input:e=>this.value=e}})},{},this.$el,{boundaryX:this.$el.closest(".yo-sidebar-fields > *")||this.$el})}}};var _F=function(){var e=this,r=e._self._c;return r("a",{class:["yo-colorpicker",{"uk-disabled":e.attributes.disabled}],attrs:{title:e.attributes.title,href:"",tabindex:e.attributes.disabled?-1:!1,"aria-label":e.$t("Select Color")},on:{click:function(n){return n.preventDefault(),e.open.apply(null,arguments)}}},[r("div",{class:[e.attributes.class,"yo-colorpicker-color",{"yo-colorpicker-color-none":!e.isValidColor(e.previewColor)}],style:{backgroundColor:e.isValidColor(e.previewColor)?e.previewColor:""}})])},bF=[],yF=Q(gF,_F,bF,!1),Kl=yF.exports,kF={extends:Kl,computed:{previewColor(){return rv(this.value)?.color}},methods:{open(){ds({functional:!0,render:t=>t(nv,{props:{value:this.value},on:{input:e=>this.value=e}})},{},this.$el,{boundaryX:this.$el.closest(".yo-sidebar-fields > *")||this.$el})}}};const EF={extends:Ze};var TF=function(){var e=this,r=e._self._c;return r("button",e._b({staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:function(n){return n.preventDefault(),e.$trigger(e.field.event)}}},"button",e.attributes,!1),[e._v(e._s(e.$t(e.field.text)))])},CF=[],wF=Q(EF,TF,CF,!1),SF=wF.exports;const xF={extends:Ze,events:{openPanel:{handler({params:t,sidebar:{panel:e={},panels:r}={}},n){r={...r,...e.panels},Sn(n)&&r[n]&&(t[0]={...Mo(e,"fields","fieldset","help","priority","heading"),...r[n],name:n})},priority:5}}};var AF=function(){var e=this,r=e._self._c;return r("button",e._b({staticClass:"uk-button yo-button-panel uk-width-1-1",class:{"yo-button-medium":e.attributes.class==="yo-form-medium"},attrs:{type:"button"},on:{click:function(n){return n.preventDefault(),e.$trigger("openPanel",e.field.panel)}}},"button",e.attributes,!1),[e._v(e._s(e.$t(e.field.text)))])},OF=[],NF=Q(xF,AF,OF,!1),PF=NF.exports;const IF={extends:Ze,data:()=>({files:0}),mounted(){this.update()},methods:{async update(){this.files=await this.$trigger("checkCache",[],!0)},async clear(){await this.$trigger("clearCache",[],!0),await this.update()}}};var LF=function(){var e=this,r=e._self._c;return r("div",[r("button",{staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{disabled:!e.files,type:"button"},on:{click:e.clear}},[e._v(e._s(e.$t("Clear Cache")))])])},RF=[],DF=Q(IF,LF,RF,!1),MF=DF.exports;const $F={extends:Ze,computed:{trueValue(){return this.attributes["true-value"]??!0},falseValue(){return this.attributes["false-value"]??!1},checked(){return this.value===this.trueValue||this.value&&this.value!==this.falseValue}},methods:{change({target:{checked:t}}){this.value=t?this.trueValue:this.falseValue}}};var FF=function(){var e=this,r=e._self._c;return r("div",[r("label",{class:{"uk-text-muted":e.attributes.disabled}},[r("input",{staticClass:"uk-checkbox",attrs:{disabled:e.attributes.disabled,type:"checkbox","aria-label":e.$t(e.field.text)},domProps:{checked:e.checked,value:e.value},on:{change:e.change}}),e._v(` `+e._s(e.$t(e.field.text))+` `)])])},BF=[],HF=Q($F,FF,BF,!1),UF=HF.exports,jF={functional:!0,render:function(t,{parent:e,props:r}){const n=r.field,[a]=e.prepare([n.field]),o=e.node.children[n.index];return o?t(a.component,{props:{field:a,values:o.props},on:{change(c,{name:d}){fn(o.props,d,c)}}},[]):null}};const WF={__name:"ElementModal",props:{edit:{type:Boolean,default:!1},node:{type:Object,required:!0},builder:{type:Object,required:!0},library:{type:Object,required:!0}},emits:"resolve",setup(t,{emit:e}){const r=t,{i18n:n}=oe,a=Be(r.node.name),o=Be(r.node.name),c=Ae(()=>r.builder.type(r.node)),d=Ae(()=>c.value.element?"Element Preset":c.value.title||r.node.type),p=Ae(()=>r.node.type==="layout"&&a.value!==o.value&&r.library.findElement(a.value,r.node.type));return{__sfc:!0,i18n:n,emit:e,props:r,newName:a,prevName:o,type:c,title:d,exists:p}}};var GF=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("form",{on:{submit:function(a){return a.preventDefault(),n.emit("resolve",{...n.props.node,name:n.newName})}}},[r("div",{staticClass:"uk-modal-header"},[r("h2",{staticClass:"uk-modal-title"},[e._v(e._s(n.props.edit?n.i18n.t("Rename %type%",{type:n.title}):n.i18n.t("Save %type%",{type:n.title})))])]),e._v(" "),r("div",{staticClass:"uk-modal-body uk-form-stacked"},[r("label",{staticClass:"uk-form-label",attrs:{for:"form-element-save-name"}},[e._v(e._s(n.i18n.t("Name")))]),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:n.newName,expression:"newName"}],staticClass:"uk-input",attrs:{id:"form-element-save-name",placeholder:n.type.title,type:"text",required:"",autofocus:""},domProps:{value:n.newName},on:{input:function(a){a.target.composing||(n.newName=a.target.value)}}}),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:n.exists,expression:"exists"}],staticClass:"uk-text-muted uk-margin-small"},[e._v(` `+e._s(n.i18n.t('"%name%" already exists in the library, it will be overwritten when saving.',{name:n.newName}))+` `)])]),e._v(" "),r("div",{staticClass:"uk-modal-footer uk-text-right"},[r("button",{staticClass:"uk-button uk-button-text uk-modal-close uk-margin-small-right",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Cancel")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-primary",attrs:{disabled:!n.newName}},[e._v(e._s(n.i18n.t("Save")))])])])},zF=[],qF=Q(WF,GF,zF,!1),F1=qF.exports;const YF={__name:"Elements",props:{builder:{type:Object,required:!0}},emits:["resolve"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,a=Be(""),o=Ae(()=>Ti(r.builder.types,{element:!0}).filter(d=>da(d.title,a.value)).map(d=>({group:"custom",...d}))),c=Ae(()=>{const d={basic:[],"multiple items":[],system:[],...Ci(o.value,"group")},p={};for(const v in d)d[v].length&&(p[v]=ep(Ti(d[v],{element:!0}),"title"));return p});return{__sfc:!0,i18n:n,emit:e,props:r,search:a,elementList:o,elementGroups:c}}};var KF=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% Element |||| %smart_count% Elements",n.elementList.length)))])]),e._v(" "),r("div",[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:n.search,expression:"search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:n.search},on:{input:function(a){a.target.composing||(n.search=a.target.value)}}})])])])])])]),e._v(" "),n.elementList.length?r("div",{staticClass:"yo-finder-body uk-margin-top",attrs:{"uk-overflow-auto":""}},e._l(n.elementGroups,function(a,o){return r("div",{key:o,staticClass:"uk-margin-medium"},[r("h3",{staticClass:"uk-heading-divider uk-margin-small"},[e._v(e._s(o))]),e._v(" "),r("div",{staticClass:"uk-grid-collapse uk-child-width yo-child-width-1-8",attrs:{"uk-grid":""}},e._l(a,function({name:c,title:d,icon:p}){return r("div",{key:c},[r("div",{staticClass:"uk-card uk-card-body uk-card-hover yo-panel uk-padding-remove-horizontal uk-text-center"},[r("img",{attrs:{alt:d,src:p,"uk-svg":""}}),e._v(" "),r("p",{staticClass:"uk-margin-small-top uk-margin-remove-bottom uk-text-truncate"},[e._v(e._s(d))]),e._v(" "),r("a",{staticClass:"uk-position-cover",attrs:{href:""},on:{click:function(v){v.preventDefault(),n.emit("resolve",n.props.builder.make(c))}}})])])}),0)])}),0):r("p",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(n.i18n.t("No element found.")))])])},XF=[],VF=Q(YF,KF,XF,!1),QF=VF.exports;const JF=/^[v^~<>=]*?(\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+)(?:\.([x*]|\d+))?(?:-([\da-z\-]+(?:\.[\da-z\-]+)*))?(?:\+[\da-z\-]+(?:\.[\da-z\-]+)*)?)?)?$/i,B1=t=>{if(typeof t!="string")throw new TypeError("Invalid argument expected string");const e=t.match(JF);if(!e)throw new Error(`Invalid argument not valid semver ('${t}' received)`);return e.shift(),e},H1=t=>t==="*"||t==="x"||t==="X",U1=t=>{const e=parseInt(t,10);return isNaN(e)?t:e},ZF=(t,e)=>typeof t!=typeof e?[String(t),String(e)]:[t,e],e4=(t,e)=>{if(H1(t)||H1(e))return 0;const[r,n]=ZF(U1(t),U1(e));return r>n?1:r<n?-1:0},j1=(t,e)=>{for(let r=0;r<Math.max(t.length,e.length);r++){const n=e4(t[r]||"0",e[r]||"0");if(n!==0)return n}return 0},t4=(t,e)=>{const r=B1(t),n=B1(e),a=r.pop(),o=n.pop(),c=j1(r,n);return c!==0?c:a&&o?j1(a.split("."),o.split(".")):a||o?a?-1:1:0},up=(t,e,r)=>{r4(r);const n=t4(t,e);return W1[r].includes(n)},W1={">":[1],">=":[0,1],"=":[0],"<=":[-1,0],"<":[-1],"!=":[-1,1]},G1=Object.keys(W1),r4=t=>{if(G1.indexOf(t)===-1)throw new Error(`Invalid operator, expected one of ${G1.join("|")}`)},n4={__name:"ElementLibrary",props:{builder:{type:Object,required:!0}},emits:["resolve"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,a=st("Library"),o=Be(""),c=Be(null),d=Ae(()=>Object.entries(a.elements).filter(([,{name:A}])=>da(A,o.value)).sort(([,A],[,F])=>A.name?.localeCompare(F.name,void 0,{numeric:!0})));function p(A){return r.builder.type(A)}function v(){ki("elements.json",JSON.stringify(Object.values(a.elements)))}function b(A){ki(`${A.name||"element"}.json`,JSON.stringify({...A,version:ue.customizer.version}))}function C(A){return A?new Date(A).toLocaleString():"-"}async function T(A){try{const F=A.currentTarget.files||A.dataTransfer?.files||[],G=[];for(const S of F)try{G.push(await wl(S))}catch{throw new Error(`Error loading file '${S.name}'.`)}const j=[],O=[],x=G.flat();for(const{name:S,type:P,version:R}of x){if(!S)throw new Error("Invalid element preset. Name is required.");if(!P)throw new Error("Invalid element preset. Type is required.");if(["section","layout"].includes(P))throw new Error("Invalid element preset. Type must be an element.");if(up(R,ue.customizer.version,">"))throw new Error(`This element requires YOOtheme Pro ${R} or newer.`);const B=a.findElement(S,P);B&&O.push(S),j.push(B)}if(O.length&&!window.confirm(n.t("Element preset %names% already exists in the library, do you want to overwrite it?",{names:O.join(", ")})))return;for(let S=0;S<x.length;S++)await a.saveElement(x[S],j[S]);Ut("Element presets uploaded successfully.","success")}catch(F){Ut(F,"danger")}c.value.value=""}return{__sfc:!0,i18n:n,Library:a,emit:e,props:r,search:o,input:c,elementList:d,type:p,exportElements:v,exportElement:b,formatDate:C,upload:T,DragOver:tf,vConfirm:cn}}};var i4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r(n.DragOver,{on:{drop:n.upload}},[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% Preset |||| %smart_count% Presets",n.elementList.length)))])]),e._v(" "),r("div",[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:n.search,expression:"search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:n.search},on:{input:function(a){a.target.composing||(n.search=a.target.value)}}})])])])])]),e._v(" "),r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("button",{directives:[{name:"show",rawName:"v-show",value:n.elementList.length,expression:"elementList.length"}],staticClass:"uk-button uk-button-default",attrs:{type:"button"},on:{click:function(a){return a.preventDefault(),n.exportElements.apply(null,arguments)}}},[e._v(e._s(n.i18n.t("Download All")))])]),e._v(" "),r("div",[r("div",{attrs:{"uk-form-custom":""}},[r("input",{ref:"input",attrs:{accept:"application/json",type:"file",name:"files[]",multiple:"multiple"},on:{change:n.upload}}),e._v(" "),r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Upload Preset")))])])])])])]),e._v(" "),n.elementList.length?r("div",{staticClass:"yo-finder-body uk-margin-top",attrs:{"uk-overflow-auto":""}},[r("table",{staticClass:"uk-table uk-table-divider uk-table-small uk-table-hover"},[r("thead",[r("tr",[r("th",{staticClass:"uk-table-expand"},[e._v(e._s(n.i18n.t("Name")))]),e._v(" "),r("th",{staticClass:"uk-width-medium"},[e._v(e._s(n.i18n.t("Element")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink uk-text-nowrap"},[e._v(e._s(n.i18n.t("Last Modified")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink"})])]),e._v(" "),r("tbody",e._l(n.elementList,function([a,o]){return r("tr",{key:a,staticClass:"uk-visible-toggle",attrs:{tabindex:"-1"}},[r("td",{staticClass:"uk-table-link"},[r("a",{staticClass:"uk-link-reset",attrs:{href:""},on:{click:function(c){c.preventDefault(),n.emit("resolve",n.props.builder.clone(o))}}},[r("img",{staticClass:"uk-text-muted uk-preserve-width uk-margin-small-right",attrs:{src:n.type(o).iconSmall,"aria-hidden":"true","uk-svg":""}}),e._v(` `+e._s(o.name)+` `)])]),e._v(" "),r("td",[e._v(e._s(n.type(o).title))]),e._v(" "),r("td",{staticClass:"uk-text-nowrap"},[r("time",{attrs:{datetime:o.modified}},[e._v(e._s(n.formatDate(o.modified)))])]),e._v(" "),r("td",[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap uk-invisible-hover"},[r("li",[r("button",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Rename"),type:"button","uk-icon":"pencil","uk-tooltip":"delay: 500"},on:{click:function(c){return n.Library.editElement(o,a,n.props.builder)}}})]),e._v(" "),r("li",[r("button",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Download"),type:"button","uk-icon":"download","uk-tooltip":"delay: 500"},on:{click:function(c){return n.exportElement(o)}}})]),e._v(" "),r("li",[r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Delete"),type:"button","uk-icon":"trash","uk-tooltip":"delay: 500"},on:{click:function(c){return n.Library.deleteElement(o,a)}}})])])])])}),0)])]):r("p",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(n.i18n.t("No element presets found.")))])])},a4=[],s4=Q(n4,i4,a4,!1),o4=s4.exports;const u4={__name:"ElementsPro",emits:["load"],setup(t,{emit:e}){const r="builder.elements.filter",{i18n:n}=oe,a=st("Library"),o=Jt({error:"",loading:null,elements:[],filter:wt[r]?JSON.parse(wt[r]):p()}),c=Ae(()=>Ci(d.value,({meta:T})=>T.type)),d=Ae(()=>o.elements.filter(({meta:T})=>Object.entries(o.filter).every(([A,F])=>!F||T[A]===F)));gt(()=>o.filter,T=>wt[r]=JSON.stringify(T),{deep:!0}),Gt(async()=>{o.elements=await a.getElements("element"),e("load",o.elements)});function p(){return{type:""}}async function v(T){o.error="",o.loading=T;try{T=await a.getElement(T),e("resolve",ql(T,["name","type","children","props","images"]))}catch(A){o.error=A.message}}function b(T,A=o.elements){let F=Ci(A.filter(({meta:G})=>G[T]),({meta:G})=>G[T]);return F=Object.keys(F).map(G=>({value:G,text:C(G)})),F.length?Yl(F,"text"):null}function C(T){return T.replaceAll("_"," ").replace(/\b\w/g,A=>A.toUpperCase())}return{__sfc:!0,storageKey:r,i18n:n,Library:a,emit:e,state:o,types:c,filtered:d,reset:p,select:v,options:b,title:C,Url:jr}}};var l4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% Preset |||| %smart_count% Presets",n.filtered.length)))])]),e._v(" "),r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[n.options("type")?r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.state.filter.type,expression:"state.filter.type"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.state.filter,"type",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All presets")))]),e._v(" "),e._l(n.options("type"),function({value:a,text:o}){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(o))])})],2)]):e._e(),e._v(" "),r("div",[r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button",disabled:!Object.values(n.state.filter).some(Boolean)},on:{click:function(a){n.state.filter=n.reset()}}},[e._v(e._s(n.i18n.t("Reset")))])])])])]),e._v(" "),r("div",{staticClass:"yo-finder-body uk-margin-top",attrs:{"uk-overflow-auto":""}},e._l(n.types,function(a,o){return r("div",{key:o},[r("h3",{staticClass:"uk-heading-divider"},[e._v(e._s(n.i18n.t("%type% Presets",{type:n.title(o)})))]),e._v(" "),r("ul",{staticClass:"uk-grid-medium uk-child-width-1-2 uk-margin-large-bottom",attrs:{"uk-grid":"masonry: true"}},e._l(a,function(c){return r("li",{key:c.link},[r("div",{staticClass:"uk-panel uk-box-shadow-medium uk-box-shadow-hover-large uk-transition-toggle",attrs:{tabindex:"0"}},[r("img",{attrs:{src:n.Url(c.meta.image),alt:"",loading:"lazy"}}),e._v(" "),r("div",{staticClass:"uk-label yo-label uk-position-top-right uk-position-small uk-transition-fade"},[e._v(e._s(c.name))]),e._v(" "),n.state.loading===c?r("div",{staticClass:"uk-overlay uk-overlay-primary uk-position-cover uk-flex uk-flex-center uk-flex-middle"},[n.state.error?r("div",{staticClass:"uk-text-danger"},[r("span",{attrs:{"uk-icon":"warning"}}),e._v(" "),r("span",{staticClass:"uk-margin-small-left"},[e._v(e._s(n.i18n.t(n.state.error)))])]):r("span",{attrs:{"uk-spinner":""}})]):e._e(),e._v(" "),r("a",{staticClass:"uk-position-cover",attrs:{href:""},on:{click:function(d){return d.preventDefault(),n.select(c)}}})])])}),0)])}),0)])},c4=[],f4=Q(u4,l4,c4,!1),d4=f4.exports;const h4={__name:"ElementsModal",props:{library:{type:Object,required:!0},builder:{type:Object,required:!0}},emits:["resolve"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,{trigger:a}=Me();br("Library",r.library);const o=Ae(()=>{const c=a("elementsModalTabs");return[{name:n.t("elements"),component:QF},{name:n.t("pro presets"),component:d4},{name:n.t("my presets"),component:o4},...c||[]]});return{__sfc:!0,i18n:n,trigger:a,emit:e,props:r,tabs:o,Switcher:ls}}};var p4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r(n.Switcher,{attrs:{tabs:n.tabs.map(({name:a})=>a),storage:"builder.elements.tab"},scopedSlots:e._u([e._l(n.tabs,function(a){return{key:a.name,fn:function(){return[r("div",{key:a.name,staticClass:"uk-modal-body"},[r(a.component,{tag:"component",attrs:{builder:n.props.builder},on:{resolve:function(o){return n.emit("resolve",o)}}})],1)]},proxy:!0}})],null,!0)})},m4=[],v4=Q(h4,p4,m4,!1),z1=v4.exports;const g4={__name:"AbsoluteIcon",props:{node:Object,tooltipDirection:{type:String,default:"bottom"}},setup(t){const e=t,{i18n:r}=oe,n="yo-builder-icon-positioned",a=r.t("Position Absolute");return{__sfc:!0,i18n:r,icon:n,title:a,props:e}}};var _4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("span",{class:n.icon,attrs:{title:n.title,"uk-tooltip":`delay: 1000; pos: ${n.props.tooltipDirection}`}})},b4=[],y4=Q(g4,_4,b4,!1),k4=y4.exports;const E4={__name:"DisabledIcon",props:{node:Object,tooltipDirection:{type:String,default:"bottom"}},setup(t){const e=t,{i18n:r}=oe,n="yo-builder-icon-disabled",a=r.t("Disabled");return{__sfc:!0,i18n:r,icon:n,title:a,props:e}}};var T4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("span",{class:n.icon,attrs:{title:n.title,"uk-tooltip":`delay: 1000; pos: ${n.props.tooltipDirection}`}})},C4=[],w4=Q(E4,T4,C4,!1),S4=w4.exports;const x4={__name:"HtmlElementIcon",props:{node:Object,child:Boolean,element:String,tooltipDirection:{type:String,default:"bottom"}},setup(t){const e=t,{i18n:r}=oe,n=Ae(()=>`yo-builder-icon-element-${e.element}`),a=Ae(()=>r.t(e.child?"Contains %element% Element":"%element% Element",{element:Gh(e.element)}));return{__sfc:!0,i18n:r,props:e,icon:n,title:a}}};var A4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("span",{class:n.icon,attrs:{title:n.title,"uk-tooltip":`delay: 1000; pos: ${n.props.tooltipDirection}`}})},O4=[],N4=Q(x4,A4,O4,!1),q1=N4.exports;const P4={__name:"StickyIcon",props:{node:Object,tooltipDirection:{type:String,default:"bottom"}},setup(t){const e=t,{i18n:r}=oe,n="yo-builder-icon-positioned",a=r.t("Position Sticky");return{__sfc:!0,i18n:r,icon:n,title:a,props:e}}};var I4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("span",{class:n.icon,attrs:{title:n.title,"uk-tooltip":`delay: 1000; pos: ${n.props.tooltipDirection}`}})},L4=[],R4=Q(P4,I4,L4,!1),D4=R4.exports;const M4={__name:"VisibilityIcon",props:{node:Object,visibility:String,tooltipDirection:{type:String,default:"bottom"}},setup(t){const e=t,r=Ae(()=>`yo-builder-icon-${e.visibility.startsWith("hidden")?"":"visible-"}${e.visibility}`),n=Ae(()=>Wl(e.node.type.fields.visibility.options,a=>a===e.visibility));return{__sfc:!0,props:e,icon:r,title:n}}};var $4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("span",{class:n.icon,attrs:{title:n.title,"uk-tooltip":`delay: 1000; pos: ${n.props.tooltipDirection}`}})},F4=[],B4=Q(M4,$4,F4,!1),H4=B4.exports;function va(t){const e=st("Builder"),{trigger:r}=Me(),n=Ae(()=>t.node),a=Ae(()=>e.type(t.node)),o=Ae(()=>t.node.name||a.value.title||t.node.type),c=Ae(()=>t.node.children||[]),d=Ae(()=>{const C=r("statusesNode",[t.node])||[];return xn(t.node,"props.status")==="disabled"&&C.push("disabled"),xn(t.node,"props.position")==="absolute"&&C.push("absolute"),xn(t.node,"props.position_sticky")&&C.push("sticky"),C}),p=Ae(()=>{const C=r("statusIconsNode",[t.node])||[];d.value.includes("disabled")&&C.push({component:S4}),d.value.includes("absolute")&&C.push({component:k4}),d.value.includes("sticky")&&C.push({component:D4});const T=Y1(t.node);if(T&&C.push({component:q1,element:T}),v.value)for(const F of new Set(Array.from(e.children(t.node)).map(Y1).filter(Boolean)))C.push({component:q1,element:F,child:!0});const A=xn(t.node,"props.visibility");return A&&a.value.fields?.visibility&&C.push({component:H4,visibility:A}),C.length?C:null}),v=Ae(()=>a.value.element&&a.value.container);function b(C,T,A){e.append(T.node,e.remove(C.node),A)}return{Builder:e,node:n,type:a,title:o,children:c,statuses:d,statusIcons:p,isContainerElement:v,move:b}}function Y1(t){return xn(t,"props.html_element")||xn(t,"props.item_element")}const U4={__name:"StatusIcons",props:{node:{type:Object},vertical:Boolean,tooltipDirection:{type:String,default:"bottom"}},setup(t){const e=t,r=Ae(()=>e.node.statusIcons?.filter(({child:c})=>!c)),n=Ae(()=>e.node.statusIcons?.filter(({child:c})=>c));function a({component:c,...d}){let p=c.name;for(const v of Object.values(d))p+=String(v);return p}function o(c){return Mo(c,"component")}return{__sfc:!0,props:e,icons:r,childIcons:n,key:a,getIconProps:o}}};var j4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return n.props.node.statusIcons?r("div",{class:[{"uk-flex":n.icons.length&&n.childIcons.length}]},[n.childIcons.length?r("ul",{staticClass:"yo-builder-contain-icons uk-grid uk-grid-collapse"},e._l(n.childIcons,function(a){return r("li",{key:n.key(a)},[r(a.component,e._b({tag:"component",attrs:{node:n.props.node,"tooltip-direction":n.props.tooltipDirection}},"component",n.getIconProps(a),!1))],1)}),0):e._e(),e._v(" "),n.icons.length?r("ul",{class:["uk-grid","uk-grid-collapse",{"uk-flex-column uk-flex-middle":n.props.vertical}]},e._l(n.icons,function(a){return r("li",{key:n.key(a)},[r(a.component,e._b({tag:"component",attrs:{node:n.props.node,"tooltip-direction":n.props.tooltipDirection}},"component",n.getIconProps(a),!1))],1)}),0):e._e()]):e._e()},W4=[],G4=Q(U4,j4,W4,!1),Fo=G4.exports;const z4={__name:"Element",props:{node:{type:Object,required:!0},id:String},setup(t,{expose:e}){const r=t,{i18n:n}=oe,{trigger:a}=Me(),o=va(r),{statuses:c,Builder:d,title:p,type:v}=o,b=Jt(o);return e(o),{__sfc:!0,i18n:n,trigger:a,props:r,Node:o,statuses:c,Builder:d,title:p,type:v,nodeProp:b,StatusIcons:Fo}}};var q4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{class:["yo-builder-element uk-flex-1 uk-width-1-1 uk-flex uk-flex-center uk-flex-middle",n.statuses.map(a=>`yo-builder-element-status-${a}`)],attrs:{"data-id":n.props.id},on:{pointerenter:function(a){return n.trigger("hoverNode",[n.props.node,n.Builder])},pointerleave:function(a){return n.trigger("leaveNode",[n.props.node,n.Builder])}}},[r("div",{staticClass:"uk-grid uk-grid-column-small uk-grid-row-collapse uk-flex-center uk-flex-middle uk-width-1-1 uk-text-center"},[r("div",{staticClass:"uk-width-auto"},[r("img",{attrs:{src:n.type.iconSmall,width:"20",height:"20","aria-hidden":"true","uk-svg":""}})]),e._v(" "),r("div",{staticClass:"uk-width-auto uk-text-truncate"},[n.Builder.exists(n.props.node)?[e._v(e._s(n.title))]:r("i",[e._v(e._s(n.title))])],2)]),e._v(" "),n.Builder.exists(n.props.node)?r("a",{staticClass:"uk-position-cover",attrs:{href:"","aria-label":n.i18n.t("Edit")},on:{click:function(a){return a.preventDefault(),n.Builder.edit(n.props.node)}}}):e._e(),e._v(" "),r("div",{staticClass:"yo-builder-nav-element uk-builder-element-hover"},[r("ul",{staticClass:"uk-grid uk-grid-collapse"},[r("li",[r("a",{staticClass:"yo-builder-icon-scroll-to",attrs:{href:"",title:n.i18n.t("Scroll into view"),"uk-tooltip":"delay: 1000","aria-label":n.i18n.t("Scroll into view")},on:{click:function(a){return a.preventDefault(),n.trigger("scrollNode",[n.props.node,n.Builder])}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-copy",attrs:{href:"",title:n.i18n.t("Copy"),"uk-tooltip":"delay: 1000","aria-label":n.i18n.t("Copy")},on:{click:function(a){return a.preventDefault(),n.Builder.copy(n.props.node)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-save",attrs:{href:"",title:n.i18n.t("Save in Library"),"uk-tooltip":"delay: 1000","aria-label":n.i18n.t("Save in Library")},on:{click:function(a){return a.preventDefault(),n.Builder.save(n.props.node)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-delete",attrs:{href:"",title:n.i18n.t("Delete"),"uk-tooltip":"delay: 1000","aria-label":n.i18n.t("Delete")},on:{click:function(a){return a.preventDefault(),n.Builder.remove(n.props.node)}}})])])]),e._v(" "),r(n.StatusIcons,{staticClass:"yo-builder-status-icons-element",attrs:{node:n.nodeProp,"tooltip-direction":"top"}}),e._v(" "),r("a",{staticClass:"uk-icon-button yo-builder-button-element yo-builder-icon-add uk-builder-element-hover",attrs:{href:"",title:n.i18n.t("Add Element"),"uk-tooltip":"delay: 1000; pos: right","aria-label":n.i18n.t("Add Element")},on:{click:function(a){return a.preventDefault(),n.Builder.add(n.props.node)}}})],1)},Y4=[],K4=Q(z4,q4,Y4,!1),K1=K4.exports;const X4={__name:"Column",props:{node:{type:Object,required:!0},id:String},setup(t,{expose:e}){const r=t,n=va(r),{statuses:a,children:o,Builder:c}=n,d=Jt(n),p=["xlarge","large","medium","small","default"],v=Ae(()=>{const b=p.reduce((C,T)=>C||r.node?.props?.[`width_${T}`],"")||"1-1";return`uk-width-${b.match(/^\d-\d/)?b:"expand"}`});return e(n),{__sfc:!0,props:r,Node:n,statuses:a,children:o,Builder:c,nodeProp:d,widths:p,widthClass:v,Element:K1,StatusIcons:Fo}}};var V4=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{class:n.widthClass},[r(n.StatusIcons,{staticClass:"yo-builder-status-icons-cell",attrs:{node:n.nodeProp,"tooltip-direction":"top"}}),e._v(" "),r("div",{directives:[{name:"sortable",rawName:"v-sortable",value:{group:"element"},expression:"{ group: 'element' }"}],class:["uk-flex","uk-flex-column",n.statuses.map(a=>`yo-builder-column-status-${a}`)],on:{click:function(a){if(a.target!==a.currentTarget)return null;!n.children.length&&n.Builder.add(n.props.node,null,n.Builder.append)}}},e._l(n.children,function(a,o){return r(n.Element,{key:n.Builder.key(a),attrs:{id:`${n.props.id}-${o}`,node:a}})}),1)],1)},Q4=[],J4=Q(X4,V4,Q4,!1),X1=J4.exports;const Z4={__name:"Row",props:{node:{type:Object,required:!0},id:String},setup(t,{expose:e}){const r=t,{i18n:n}=oe,a=va(r),{Builder:o,statuses:c,children:d,statusIcons:p}=a,v=Jt(a);return gt(()=>r.node.props?.layout,b=>{o.columns(r.node,b)},{immediate:!0}),e(a),{__sfc:!0,i18n:n,props:r,Node:a,Builder:o,statuses:c,children:d,statusIcons:p,nodeProp:v,Column:X1,StatusIcons:Fo}}};var eB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{class:["yo-builder-grid",{"yo-builder-grid-status-icons":n.statusIcons}]},[r("div",{class:n.statuses.map(a=>`yo-builder-grid-status-${a}`)},[r("div",{staticClass:"yo-builder-nav-grid uk-builder-grid-hover"},[r("ul",{staticClass:"uk-grid uk-grid-collapse uk-flex-column"},[r("li",[r("a",{staticClass:"yo-builder-icon-edit",attrs:{href:"",title:n.i18n.t("Edit"),"uk-tooltip":"delay: 1000; pos: left","aria-label":n.i18n.t("Edit")},on:{click:function(a){return a.preventDefault(),n.Builder.edit(n.props.node)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-copy",attrs:{href:"",title:n.i18n.t("Copy"),"uk-tooltip":"delay: 1000; pos: left","aria-label":n.i18n.t("Copy")},on:{click:function(a){return a.preventDefault(),n.Builder.copy(n.props.node)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-delete",attrs:{href:"",title:n.i18n.t("Delete"),"uk-tooltip":"delay: 1000; pos: left","aria-label":n.i18n.t("Delete")},on:{click:function(a){return a.preventDefault(),n.Builder.remove(n.props.node)}}})])])]),e._v(" "),r(n.StatusIcons,{staticClass:"yo-builder-status-icons-grid",attrs:{node:n.nodeProp,vertical:!0,"tooltip-direction":"left"}}),e._v(" "),r("a",{staticClass:"yo-builder-button-grid yo-builder-icon-add-right uk-builder-grid-hover",attrs:{href:"",title:n.i18n.t("Add Row"),"uk-tooltip":"delay: 1000; pos: left","aria-label":n.i18n.t("Add Row")},on:{click:function(a){return a.preventDefault(),n.Builder.add(n.props.node,"row")}}}),e._v(" "),r("div",{staticClass:"uk-grid uk-grid-match"},e._l(n.children,function(a,o){return r(n.Column,{key:n.Builder.key(a),attrs:{id:`${n.props.id}-${o}`,node:a}})}),1)],1)])},tB=[],rB=Q(Z4,eB,tB,!1),V1=rB.exports;const nB={__name:"Section",props:{node:{type:Object,required:!0},id:String},setup(t,{expose:e}){const r=t,{i18n:n}=oe,a=va(r),{children:o,Builder:c,statuses:d,title:p}=a,v=Jt(a);return gt(()=>o.value.length,b=>{b||c.append(r.node,c.make("row"))},{immediate:!0}),e(a),{__sfc:!0,i18n:n,props:r,Node:a,children:o,Builder:c,statuses:d,title:p,nodeProp:v,Row:V1,StatusIcons:Fo}}};var iB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{class:["yo-builder-section",n.statuses.map(a=>`yo-builder-section-status-${a}`)]},[r("div",{staticClass:"uk-flex uk-flex-middle uk-margin-small-bottom"},[r("h3",{staticClass:"yo-sidebar-subheading uk-margin-remove uk-drag"},[e._v(e._s(n.title))]),e._v(" "),r("div",{staticClass:"yo-builder-nav-section uk-margin-small-left uk-builder-section-hover"},[r("ul",{staticClass:"uk-grid uk-grid-collapse"},[r("li",[r("a",{staticClass:"yo-builder-icon-edit",attrs:{href:"",title:n.i18n.t("Edit"),"uk-tooltip":"delay: 1000","aria-label":n.i18n.t("Edit")},on:{click:function(a){return a.preventDefault(),n.Builder.edit(n.props.node)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-copy",attrs:{href:"",title:n.i18n.t("Copy"),"uk-tooltip":"delay: 1000","aria-label":n.i18n.t("Copy")},on:{click:function(a){return a.preventDefault(),n.Builder.copy(n.props.node)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-save",attrs:{href:"",title:n.i18n.t("Save in Library"),"uk-tooltip":"delay: 1000","aria-label":n.i18n.t("Save in Library")},on:{click:function(a){return a.preventDefault(),n.Builder.save(n.props.node)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-delete",attrs:{href:"",title:n.i18n.t("Delete"),"uk-tooltip":"delay: 1000","aria-label":n.i18n.t("Delete")},on:{click:function(a){return a.preventDefault(),n.Builder.remove(n.props.node)}}})])])]),e._v(" "),r(n.StatusIcons,{staticClass:"uk-margin-auto-left",attrs:{node:n.nodeProp,"tooltip-direction":"top"}})],1),e._v(" "),r("a",{staticClass:"yo-builder-button-section yo-builder-icon-add-left uk-builder-section-hover",attrs:{href:"",title:n.i18n.t("Add Section"),"uk-tooltip":"delay: 1000; pos: right","aria-label":n.i18n.t("Add Section")},on:{click:function(a){return a.preventDefault(),n.Builder.add(n.props.node,"section")}}}),e._v(" "),r("div",{directives:[{name:"sortable",rawName:"v-sortable",value:{group:"row"},expression:"{ group: 'row' }"}]},e._l(n.children,function(a,o){return r(n.Row,{key:n.Builder.key(a),attrs:{id:`${n.props.id}-${o}`,node:a}})}),1)])},aB=[],sB=Q(nB,iB,aB,!1),oB=sB.exports;const uB={__name:"Layout",props:{node:{type:Object,required:!0},id:String},setup(t,{expose:e}){const r=t,n=va(r),{Builder:a,children:o}=n;function c({type:d}){return{row:V1,column:X1,section:oB}[d]||K1}return e(n),{__sfc:!0,props:r,Node:n,Builder:a,children:o,load:c}}};var lB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return n.children.length?r("div",{directives:[{name:"sortable",rawName:"v-sortable",value:{group:"section"},expression:"{ group: 'section' }"}],staticClass:"yo-builder"},e._l(n.children,function(a,o){return r(n.load(a),{key:n.Builder.key(a),tag:"component",attrs:{id:n.Builder.node===n.props.node?n.Builder.prefix+o:n.Builder.id(a),node:a}})}),1):e._e()},cB=[],fB=Q(uB,lB,cB,!1),ga=fB.exports;const dB={__name:"Layouts",emits:["load","select"],setup(t,{emit:e}){const r="builder.layouts.filter",{i18n:n}=oe,a=st("Library"),o=Jt({error:"",loading:null,layouts:[],filter:wt[r]?JSON.parse(wt[r]):d()}),c=Ae(()=>o.layouts.filter(({meta:T})=>k1(o.filter,(A,F)=>!A||T[F]===A)&&(o.filter.layout||!C(T.layout))));gt(()=>o.filter,T=>wt[r]=JSON.stringify(T),{deep:!0}),a.getElements("layout").then(T=>{o.layouts=T,e("load",o.layouts)});function d(){return{layout:"",type:"",topic:"",website:""}}async function p(T){o.error="",o.loading=T;try{T=await a.getElement(T),up(T.version,ue.customizer.version,">")?o.error=`This layout requires YOOtheme Pro ${T.version} or newer.`:e("select",T)}catch(A){o.error=A.message}}function v(T,A=o.layouts){let F=Ci(A.filter(({meta:G})=>G[T]),({meta:G})=>G[T]);return F=ma(F,(G,j)=>({value:j,text:j.replace(/\b\w/g,O=>O.toUpperCase())})),F.length?Yl(F,"text"):null}function b(){const T=Ci(o.layouts,A=>["layout","template"].includes(A.meta.group)?A.meta.group:"other");return[{label:n.t("Page"),layouts:T.layout},{label:n.t("Template"),layouts:T.template},{label:n.t("Position"),layouts:T.other}]}function C(T=o.filter.layout){return["Footer","Dialog","Dropdown","Live Search"].includes(T)}return{__sfc:!0,storageKey:r,i18n:n,Library:a,emit:e,state:o,filtered:c,reset:d,select:p,options:v,layoutGroups:b,isCustomHeightLayout:C,api:ue,Url:jr}}};var hB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% Layout |||| %smart_count% Layouts",n.filtered.length)))])]),e._v(" "),r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[n.state.layouts.length?r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.state.filter.layout,expression:"state.filter.layout"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.state.filter,"layout",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All layouts")))]),e._v(" "),e._l(n.layoutGroups(),function({layouts:a,label:o}){return r("optgroup",{key:o,attrs:{label:o}},e._l(n.options("layout",a),function({value:c,text:d}){return r("option",{key:c,domProps:{value:c}},[e._v(e._s(d))])}),0)})],2)]):e._e(),e._v(" "),n.options("topic")?r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.state.filter.topic,expression:"state.filter.topic"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.state.filter,"topic",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All topics")))]),e._v(" "),e._l(n.options("topic"),function({value:a,text:o}){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(o))])})],2)]):e._e(),e._v(" "),n.options("type")?r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.state.filter.type,expression:"state.filter.type"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.state.filter,"type",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All types")))]),e._v(" "),e._l(n.options("type"),function({value:a,text:o}){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(o))])})],2)]):e._e(),e._v(" "),n.options("website")?r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.state.filter.website,expression:"state.filter.website"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.state.filter,"website",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All websites")))]),e._v(" "),e._l(n.options("website"),function({value:a,text:o}){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(o))])})],2)]):e._e(),e._v(" "),r("div",[r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button",disabled:!Object.values(n.state.filter).some(Boolean)},on:{click:function(a){n.state.filter=n.reset()}}},[e._v(e._s(n.i18n.t("Reset")))])])])])]),e._v(" "),n.filtered.length?r("div",{staticClass:"yo-finder-body uk-margin-top",attrs:{"uk-overflow-auto":""}},[r("ul",{key:`layout-list-${n.state.filter.layout}`,class:["uk-grid-medium uk-child-width-1-2",{"uk-grid-match uk-child-width-1-3@s uk-child-width-1-4@m":!n.isCustomHeightLayout()}],attrs:{"uk-grid":`masonry: ${n.isCustomHeightLayout()}`}},e._l(n.filtered,function(a){return r("li",{key:a.link},[r("a",{staticClass:"uk-panel uk-inline uk-box-shadow-medium uk-box-shadow-hover-large uk-transition-toggle",attrs:{href:""},on:{click:function(o){return o.preventDefault(),n.select(a)}}},[a.meta.image?[n.isCustomHeightLayout()?r("img",{attrs:{src:n.Url(a.meta.image),width:"800",alt:"",loading:"lazy"}}):r("img",{staticClass:"uk-object-cover uk-object-top-center",staticStyle:{"aspect-ratio":"8 / 10"},attrs:{src:n.Url(a.meta.image),width:"800",height:"1000",alt:"",loading:"lazy"}})]:r("img",{staticClass:"uk-object-none yo-finder-thumbnail-file",staticStyle:{"aspect-ratio":"8 / 10"},attrs:{src:`${n.api.config.assets}/images/finder-thumbnail-file.svg`,width:"800",height:"1000",alt:"",loading:"lazy"}}),e._v(" "),r("div",{staticClass:"uk-label yo-label uk-position-top-right uk-position-small uk-transition-fade"},[e._v(e._s(n.state.filter.layout?`${a.meta.topic} / ${a.meta.type}`:a.meta.layout))]),e._v(" "),n.state.loading===a?r("div",{staticClass:"uk-overlay uk-overlay-primary uk-position-cover uk-flex uk-flex-center uk-flex-middle"},[n.state.error?r("div",{staticClass:"uk-text-danger"},[r("span",{attrs:{"uk-icon":"warning"}}),e._v(" "),r("span",{staticClass:"uk-margin-small-left"},[e._v(e._s(n.i18n.t(n.state.error)))])]):r("span",{attrs:{"uk-spinner":""}})]):e._e()],2)])}),0)]):r("p",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(n.i18n.t("No layout found.")))])])},pB=[],mB=Q(dB,hB,pB,!1),vB=mB.exports;const Bo={pages:"builder/pages",templates:"builder/template"},Ho=sn("Builder",{state:()=>({pages:[],templates:[]}),actions:{async getPages(t={}){return this.pages=await Ue(Bo.pages).query(t).get().json()},async getTemplates(){return this.templates=await Ue(Bo.templates).get().json()},async saveTemplate(t){return await Ue(Bo.templates).post({tpl:t}).json()},async deleteTemplate(t){const e=await Ue(Bo.templates).query({id:t.id}).delete().json();return this.templates=this.templates.filter(({id:r})=>r!==t.id),e},async reorderTemplates(t){return await Ue(Bo.templates).post({templates:t},"/reorder").json()}}});function ms(t){return sn(t,{state:()=>({node:{},base:{}}),getters:{empty(){return!this.node.children?.length},modified(){return!lp(this.base,this.node)}},setup:()=>({prefix:"",view:null,rootType:"layout",changed:!1,types:{},nodes:new Map,init({onChange:e,node:r,...n}={}){if(!zn(e))throw new Error('"onChange" callback must be a function');if(!to())throw new Error("Builder.init must be called in setup function");Object.assign(this,n),this.reset(r);const a=Vn(o=>{this.modified?(this.changed=!0,this.emit(e,o,this)):!this.modified&&this.changed&&(this.changed=!1,this.emit(e,o,this))});gt(()=>this.node,a,{deep:!0}),Ga(()=>{this.$reset(),this.$dispose()}),oe.events.trigger({name:"initBuilder",origin:this},[this.types])},emit:Vn(function(e,...r){e(...r)},400,{leading:!0}),make(e){const{container:r,defaults:n={},fields:a={}}=this.type({type:e}),o=this.clone({type:e,props:n});for(const[c,d]of Object.entries(a))d&&"default"in d&&!(c in o.props)&&(o.props[c]=d.default);return r&&(o.children=[]),o},type({type:e}={}){return{name:e,icon:`${ue.config.assets}/images/builder/undefined-large.svg`,iconSmall:`${ue.config.assets}/images/builder/undefined-small.svg`,...this.types[e]}},exists({type:e}){return e in this.types},set(e={}){e=ql(e,["name","type","children","version"]),e=Q1(this.rootType,e),e.version||(e.version=ue.customizer.version),this.node=e,this.nodes.clear()},reset(e=this.base){e=Q1(this.rootType,e),lp(e,this.node)||(this.node=e,this.nodes.clear(),oe.events.trigger("resetNode",[e,this])),this.changed=!1,this.base=this.clone(e)},async add(e,r,n=this.after){return n.call(this,e,r?this.make(r):await oe.events.trigger("addNode",[this],!0))},save(e){return oe.events.trigger("saveNode",[e,this],!0)},edit(e){oe.events.trigger("editNode",[e,this])},copy(e){const r=this.clone(e);return this.after(e,r),r},remove(e){const{children:r=[]}=this.parent(e),n=r.indexOf(e);return~n&&r.splice(n,1),this.empty&&this.set({type:this.node.type}),oe.events.trigger("removeNode",[e,this]),e},clone(e){return kr({},e)},replaceWith(e,r){if(e===this.node){this.set(r);return}this.after(e,r),this.remove(e)},replaceChildren(e,r=[]){e.children?.length?e.children.splice(0,e.children.length,...r):this.append(e,r)},append(e,r,n){const{children:a=[]}=e;if(r)return b8(n)||(n=a.length),e.children||mt(e,"children",a),a.splice(n,0,...[].concat(r)),r},after(e,r){const n=this.parent(e);return this.append(n,r,this.index(e)+1)},key(e){return this.nodes.get(e)??this.nodes.set(e,this.nodes.size).get(e)},index(e){return(this.parent(e)?.children||[]).indexOf(e)},id(e){const r=this.path(e).reverse();return this.prefix+r.slice(1).reduce((n,a,o)=>n.concat(r[o].children.indexOf(a)),[]).join("-")},find(e){return e.replace(this.prefix,"").split("-").reduce((n,a)=>n?.children?.[a],this.node)},parent(e){for(const r of this.all())if(r.children?.includes(e))return r},path(e){const r=[];do r.push(e);while(e=this.parent(e));return r},columns(e,r=""){const{length:n}=r.split("|")[0].split(","),{children:a=[]}=e;for(e.children||mt(e,"children",a);a.length<n;)this.append(e,this.make("column"));for(;a.length>n;){const o=a[n];this.remove(o),this.append(a[n-1],o.children)}},columnWidths(e,r=""){const{children:n=[]}=e,a=["medium","small","default"];r.split("|").forEach(o=>{const c=`width_${a.shift()}`;o.split(",").forEach((d,p)=>{const v=n[p];(!_t(v.props)||Array.isArray(v.props))&&mt(v,"props",{}),mt(v.props,c,d)})}),a.concat(["large","xlarge"]).forEach(o=>n.forEach(c=>Zi(c.props,`width_${o}`))),n.forEach(o=>Zi(o.props,"order_first"))},*children(e=this.node){for(const r of e?.children||[])yield r,yield*this.children(r)},*all(e=this.node){yield e;for(const r of e?.children||[])yield*this.all(r)}})})}function lp(t,e){return _8(t,e,(r,n,a)=>a==="props"&&k1(r,(o,c)=>Gl(o,n[c])||o===""&&!(c in n))&&r8(Xn(n),Xn(r)).every(o=>n[o]==="")||void 0)}function Q1(t,e){if(t!==e.type){if(t==="fragment")return gB(e);if(e.type==="fragment")return _B(e)}return e}function gB(t){return{type:"fragment",children:t.children?.reduce((e,r)=>e.concat(r.children),[])}}function _B(t){return{type:"layout",children:[{type:"section",children:t.children}]}}const bB={__name:"LayoutLibrary",emits:["select"],setup(t,{emit:e}){const{i18n:r}=oe,{trigger:n}=Me(),a=st("Library"),o=st("Builder"),c=st("$node"),d=Be(""),p=Be(null),v=Ae(()=>wi(a.library,O=>["layout","section"].includes(O.type)||o.type(O).fragment)),b=Ae(()=>Object.entries(v.value).filter(([,{name:O}])=>da(O,d.value)).sort(([,O],[,x])=>O.name.localeCompare(x.name,void 0,{numeric:!0})));function C(O){return o.type(O).fragment?r.t("Rows"):Vy(O.type)}function T(){ki("layouts.json",JSON.stringify(Object.values(v.value)))}function A(O){ki(`${O.name||"layout"}.json`,JSON.stringify({...O,version:ue.customizer.version}))}function F(O){return lp(Mo(O,["name","modified","version"]),Mo(c,["name","modified","version"]))}function G(O){return O?new Date(O).toLocaleString():"-"}async function j(O){try{const x=O.currentTarget.files||O.dataTransfer?.files||[],S=[];for(const q of x)try{S.push(await wl(q))}catch{throw new Error(`Error loading file '${q.name}'.`)}const P=[],R=[],B=S.flat();for(const{name:q,type:le,version:ae}of B){if(!q)throw new Error("Invalid layout. Name is required.");if(!["section","layout"].includes(le)&&!o.type({type:le}).fragment)throw new Error("Invalid layout. Type must be section, layout or fragment.");if(up(ae,ue.customizer.version,">"))throw new Error(`This layout requires YOOtheme Pro ${ae} or newer.`);const Z=a.findElement(q,le);Z&&R.push(q),P.push(Z)}if(R.length&&!window.confirm(r.t(`Layout ${R.join(", ")} already exists in the library, do you want to overwrite it?`)))return;for(let q=0;q<B.length;q++)await a.saveElement(B[q],P[q]);Ut("Layouts uploaded successfully.","success")}catch(x){Ut(x,"danger")}p.value.value=""}return{__sfc:!0,i18n:r,trigger:n,emit:e,Library:a,Builder:o,$node:c,search:d,input:p,layouts:v,layoutList:b,title:C,exportLayouts:T,exportLayout:A,isCurrentLayout:F,formatDate:G,upload:j,DragOver:tf,vConfirm:cn}}};var yB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r(n.DragOver,{on:{drop:n.upload}},[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% Layout |||| %smart_count% Layouts",n.layoutList.length)))])]),e._v(" "),r("div",[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:n.search,expression:"search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:n.search},on:{input:function(a){a.target.composing||(n.search=a.target.value)}}})])])])])]),e._v(" "),r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("button",{directives:[{name:"show",rawName:"v-show",value:n.layoutList.length,expression:"layoutList.length"}],staticClass:"uk-button uk-button-default",attrs:{type:"button"},on:{click:function(a){return a.preventDefault(),n.exportLayouts.apply(null,arguments)}}},[e._v(e._s(n.i18n.t("Download All")))])]),e._v(" "),r("div",[r("div",{attrs:{"uk-form-custom":""}},[r("input",{ref:"input",attrs:{accept:"application/json",type:"file",name:"files[]",multiple:"multiple"},on:{change:n.upload}}),e._v(" "),r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Upload Layout")))])])]),e._v(" "),r("div",[r("button",{directives:[{name:"show",rawName:"v-show",value:!n.Builder.empty,expression:"!Builder.empty"}],staticClass:"uk-button uk-button-primary",attrs:{type:"button"},on:{click:function(a){return n.trigger("saveNode",[n.$node,n.Builder],!0)}}},[e._v(e._s(n.i18n.t("Save Layout")))])])])])]),e._v(" "),n.layoutList.length?r("div",{staticClass:"yo-finder-body uk-margin-top",attrs:{"uk-overflow-auto":""}},[r("table",{staticClass:"uk-table uk-table-divider uk-table-small uk-table-hover"},[r("thead",[r("tr",[r("th",{staticClass:"uk-table-expand"},[e._v(e._s(n.i18n.t("Name")))]),e._v(" "),r("th",{staticClass:"uk-width-medium uk-text-center"},[e._v(e._s(n.i18n.t("Current Layout")))]),e._v(" "),r("th",{staticClass:"uk-width-small"},[e._v(e._s(n.i18n.t("Type")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink uk-text-nowrap"},[e._v(e._s(n.i18n.t("Last Modified")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink"})])]),e._v(" "),r("tbody",e._l(n.layoutList,function([a,o]){return r("tr",{key:a,staticClass:"uk-visible-toggle",attrs:{tabindex:"-1"}},[r("td",{staticClass:"uk-table-link"},[r("a",{staticClass:"uk-link-heading",attrs:{href:""},on:{click:function(c){return c.preventDefault(),n.emit("select",o)}}},[r("span",{staticClass:"uk-preserve-width uk-margin-small-right",attrs:{"uk-icon":o.type==="layout"?"copy":"file"}}),e._v(" "),r("span",{staticClass:"uk-text-middle"},[e._v(e._s(o.name))])])]),e._v(" "),r("td",{staticClass:"uk-text-center"},[n.isCurrentLayout(o)?r("span",{staticClass:"uk-text-success",attrs:{"uk-icon":"check"}}):r("span",[e._v("\u2013")])]),e._v(" "),r("td",[e._v(e._s(n.title(o)))]),e._v(" "),r("td",{staticClass:"uk-text-nowrap"},[r("time",{attrs:{datetime:o.modified}},[e._v(e._s(n.formatDate(o.modified)))])]),e._v(" "),r("td",[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap uk-invisible-hover"},[r("li",[r("button",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Rename"),type:"button","uk-icon":"pencil","uk-tooltip":"delay: 500"},on:{click:function(c){return n.Library.editElement(o,a,n.Builder)}}})]),e._v(" "),r("li",[r("button",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Download"),type:"button","uk-icon":"download","uk-tooltip":"delay: 500"},on:{click:function(c){return n.exportLayout(o)}}})]),e._v(" "),r("li",[r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Delete"),type:"button","uk-icon":"trash","uk-tooltip":"delay: 500"},on:{click:function(c){return n.Library.deleteElement(o,a)}}})])])])])}),0)])]):r("p",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(n.i18n.t("No layout found.")))])])},kB=[],EB=Q(bB,yB,kB,!1),TB=EB.exports;const CB={__name:"LayoutsModal",props:{library:{type:Object,required:!0},builder:{type:Object,required:!0},node:{type:Object,required:!0}},emits:["resolve"],setup(t,{emit:e}){const r=t,n="builder.library.replace",{i18n:a}=oe,{trigger:o}=Me();br("Builder",r.builder),br("Library",r.library),br("$node",r.node);const c=Be(!r.builder.empty&&wt[n]||"replace"),d=Ae(()=>{const p=o("layoutsModalTabs",[r.node])||[];return[{name:a.t("pro layouts"),component:vB},{name:a.t("my layouts"),component:TB},...p]});return Nr(()=>wt[n]=c.value),{__sfc:!0,storageKey:n,i18n:a,emit:e,trigger:o,props:r,replace:c,tabs:d,Switcher:ls}}};var wB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r(n.Switcher,{attrs:{tabs:n.tabs.map(({name:a})=>a),storage:"builder.library.tab"},scopedSlots:e._u([e._l(n.tabs,function(a){return{key:a.name,fn:function(){return[r("div",{key:a.name,staticClass:"uk-modal-body"},[r(a.component,{tag:"component",on:{select:function(o){return n.emit("resolve",{node:o,replace:n.replace})}}})],1)]},proxy:!0}})],null,!0)}),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:!e.builder.empty,expression:"!builder.empty"}],staticClass:"uk-modal-footer"},[r("select",{directives:[{name:"model",rawName:"v-model",value:n.replace,expression:"replace"}],staticClass:"uk-select uk-form-width-medium yo-form-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});n.replace=a.target.multiple?o:o[0]}}},[r("option",{attrs:{value:"replace"}},[e._v(e._s(n.i18n.t("Replace layout")))]),e._v(" "),r("option",{attrs:{value:"prepend"}},[e._v(e._s(n.i18n.t("Insert at the top")))]),e._v(" "),r("option",{attrs:{value:"append"}},[e._v(e._s(n.i18n.t("Insert at the bottom")))])])])],1)},SB=[],xB=Q(CB,wB,SB,!1),AB=xB.exports;const OB={__name:"Savebar",emits:["save","cancel"],setup(t,{emit:e}){const{i18n:r}=oe,n=st("Sidebar"),a=Be(null);return Gt(()=>n.$refs.breadcrumb.appendChild(a.value)),Nr(()=>a.value.remove()),{__sfc:!0,i18n:r,emit:e,Sidebar:n,el:a,vConfirm:cn}}};var NB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{ref:"el",staticClass:"yo-savebar uk-grid uk-grid-small uk-flex-middle uk-flex-nowrap uk-text-nowrap"},[r("div",[r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-button uk-button-small uk-button-text",attrs:{type:"button"},on:{click:function(a){return n.emit("cancel")}}},[e._v(e._s(n.i18n.t("Cancel")))])]),e._v(" "),r("div",[r("button",{staticClass:"uk-button uk-button-small uk-button-primary",attrs:{type:"button"},on:{click:function(a){return n.emit("save")}}},[e._v(e._s(n.i18n.t("Save Layout")))])])])},PB=[],IB=Q(OB,NB,PB,!1),Xl=IB.exports,J1={name:"BuilderLibraryModel",data:()=>({library:{}}),computed:{layouts(){return wi(this.library,({type:t})=>["layout","fragment","section"].includes(t))},elements(){return wi(this.library,({type:t})=>!["layout","section"].includes(t))}},created(){this.$trigger("initLibrary",this.library)},methods:{getElement({link:t}){return Ue(t).query({key:ue.config.apikey}).get().json()},getElements(t){return Ue(`${ue.config.api}/v1/library/${t}`).get().json()},findElement(t,e){return Wl(this.library,{name:t,type:e})},async saveElement(t,e=wo()){try{return t=await this.$trigger("saveElement",[t,e],!0),this.$set(this.library,e,t),t}catch{}},async deleteElement(t,e){try{return await this.$trigger("deleteElement",[t,e],!0),this.$delete(this.library,e),t}catch{}},async editElement(t,e,r){if(t=await Dt(F1,{node:r.clone(t),builder:r,library:this,edit:!0},{width:"xlarge"}),!t)return t;if(t.type==="layout"){const n=this.findElement(t.name,t.type);n&&e!==n&&await this.deleteElement(this.library[n],n)}return this.saveElement(t,e)}},events:{async openLibrary(t,e,r=e.node){const n=await Dt(AB,{builder:e,library:this,node:r},{container:!0});if(!n||n.replace==="replace"&&e.modified&&r.children?.length&&!confirm(this.$t("Do you really want to replace the current layout?")))return;const a=cp(e,n.node);return a.type!=="section"&&delete a.name,n.replace==="replace"?!r.type||r.type==="layout"?e.replaceWith(r,tk(a)):e.replaceChildren(r,fp(a)):e.append(r,!r.type||r.type==="layout"?tk(a).children:fp(a),n.replace==="append"?void 0:0),a},async addNode(t,e){let r=await Dt(z1,{builder:e,library:this},{container:!0});if(r)return cp(e,r)},async saveNode(t,e,r){if(e=await Dt(F1,{node:{...r.clone(e),modified:new Date().toISOString()},builder:r,library:this},{width:"xlarge"}),!!e)return this.saveElement(e,e.type==="layout"?this.findElement(e.name,e.type):void 0)},async transformNode(t,e,r){const n=await Dt(z1,{builder:r,library:this},{container:!0});n&&r.replaceWith(e,Z1(r,e,cp(r,n)))}}};function cp(t,e){return e=Mo(t.clone(e),["version","modified"]),e.images&&(ek(e,e.images),delete e.images),Array.isArray(e.children)||delete e.children,e}function Z1(t,e,r){const n=t.type(e),a=t.type(r),o="name"in r;r.name=e.name;const c=a.fieldset?.default?.fields?.[0]?.fields||{};for(const[d,p]of Object.entries(e.props)){if(!(d in a.fields)||o&&!c.includes(d))continue;const{options:v}=a.fields[d];v&&!dp(p,v)||(r.props[d]=p)}if(e.children&&n.container&&a.container&&t.exists({type:`${a.name}_item`})){r.children=[];for(const d of e.children)r.children.push(Z1(t,d,t.make(`${a.name}_item`)))}return oe.events.trigger("transformedNode",[r,e,t,o]),r}function ek(t,e){for(const[r,n]of Object.entries(t))if(_t(n)&&!zn(n))ek(n,e);else if(Sn(n)){const a=e.find(o=>n.includes(o.src));a&&(To.set(n,{...a}),t[r]=n)}}function tk(t){return t.type==="layout"?t:{type:"layout",children:[t.type==="section"?t:{type:"section",children:t.children}]}}function fp(t){if(t.children?.[0]?.type==="row")return t.children;const e=[];for(const r of t.children??[])e.push(...fp(r));return e}function dp(t,e){return Object.values(e).find(r=>t===r||t===r.value||r.options&&dp(t,r.options))}const LB={__name:"Child",props:{node:Object,field:Object},setup(t,{expose:e}){const r=t,{i18n:n}=oe,a=va(r),o=Jt(a),{Builder:c}=a,d=Ae(()=>c.index(r.node)+1),p=Ae(()=>o.type?.title||r.node.type);return e(a),{__sfc:!0,i18n:n,props:r,Node:a,nodeProp:o,Builder:c,index:d,title:p}}};var RB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("button",{staticClass:"uk-button yo-button-panel uk-width-1-1",attrs:{type:"button"},on:{click:function(a){return n.Builder.edit(n.props.node)}}},[r("span",{staticClass:"uk-text-middle"},[e._v(e._s(n.i18n.t("Edit %title% %index%",{title:n.title,index:n.index})))]),e._v(" "),n.nodeProp.statusIcons?r("ul",{staticClass:"uk-grid uk-grid-collapse uk-flex-inline uk-text-middle"},e._l(n.nodeProp.statusIcons,function({component:a,...o}){return r("li",{key:a.name},[r(a,e._b({tag:"component",attrs:{node:n.nodeProp}},"component",o,!1))],1)}),0):e._e()])])},DB=[],MB=Q(LB,RB,DB,!1),$B=MB.exports;const FB={components:{Child:$B},extends:Ze,inject:["$node","Builder"]};var BB=function(){var e=this,r=e._self._c;return r("div",e._l(e.$node.children,function(n){return r("Child",{key:e.Builder.key(n),staticClass:"uk-margin-small",attrs:{node:n,field:e.field}})}),1)},HB=[],UB=Q(FB,BB,HB,!1),jB=UB.exports;const WB={__name:"ContentItem",props:{field:Object,node:Object},setup(t,{expose:e}){const r=t,{i18n:n}=oe,{trigger:a}=Me(),o=va(r),{Builder:c}=o,d=Jt(o),p=Ae(()=>{let b=a("contentItemTitle",[r.node]);return b||(b=r.field.title||"title",b=v(r.node.props?.[b]||""),b)?b:n.t("%title% %index%",{title:c.type(r.node).title,index:c.index(r.node)+1})});function v(b){return ke.fragment(`<div>${b}</div>`)?.textContent}return e(o),{__sfc:!0,i18n:n,props:r,trigger:a,Node:o,Builder:c,nodeProp:d,title:p,stripTags:v,StatusIcons:Fo,isVideo:fa,Url:jr}}};var GB=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("li",{staticClass:"uk-visible-toggle",attrs:{tabindex:"-1"}},[r("a",{attrs:{href:""},on:{click:function(a){return a.preventDefault(),n.Builder.edit(e.node)}}},[e.node.props?.image?r("img",{staticClass:"yo-nav-media",attrs:{src:n.Url(e.node.props.image),alt:"",loading:"lazy"}}):n.isVideo(e.node.props?.video)?r("video",{staticClass:"yo-nav-media",attrs:{src:n.Url(e.node.props.video),loop:"",muted:"",playsinline:"","uk-video":"hover"},domProps:{muted:!0}}):e._e(),e._v(" "),r("span",{staticClass:"uk-text-truncate",class:n.nodeProp.statuses.map(a=>`yo-builder-element-item-status-${a}`)},[e._v(e._s(n.title||n.i18n.t("Item")))]),e._v(" "),r(n.StatusIcons,{attrs:{node:n.nodeProp}})],1),e._v(" "),r("div",{staticClass:"uk-invisible-hover uk-position-center-right uk-position-medium"},[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap"},[r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{href:"",title:n.i18n.t("Copy"),"uk-icon":"copy","uk-tooltip":"delay: 500","aria-label":n.i18n.t("Copy")},on:{click:function(a){return a.preventDefault(),n.Builder.copy(e.node)}}})]),e._v(" "),r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{href:"",title:n.i18n.t("Delete"),"uk-icon":"trash","uk-tooltip":"delay: 500","aria-label":n.i18n.t("Delete")},on:{click:function(a){return a.preventDefault(),n.Builder.remove(e.node)}}})])])])])},zB=[],qB=Q(WB,GB,zB,!1),YB=qB.exports;const KB={components:{ContentItem:YB},directives:{Sortable:zh},extends:Ze,inject:["Builder","$node"],methods:{async add(t){this.Builder.edit(await this.Builder.add(this.$node,t,this.Builder.append))},async addFromMedia(t,e){e=[].concat(e);const r=await this.$trigger("openMediaPicker",{multiple:!0,type:e.map(({type:a})=>a)},!0);if(!r)return;const n={image:yo,video:fa};this.Builder.append(this.$node,r.map(a=>{const o=e.find(({type:c})=>!n[c]||n[c](a.src));return{type:t,props:XB(o?.item,a)}}))},move(t,e,r){this.Builder.append(e.$node,this.Builder.remove(t.node),r)}}};function XB(t,e){return zl(t,r=>e[r])}var VB=function(){var e=this,r=e._self._c;return r("div",[e.$node.children?.length?r("ul",{directives:[{name:"sortable",rawName:"v-sortable",value:{group:"content-items"},expression:"{ group: 'content-items' }"}],staticClass:"uk-nav uk-nav-default yo-sidebar-marginless yo-nav-sortable yo-nav-iconnav uk-margin",attrs:{"cls-custom":"yo-nav-sortable-drag"}},e._l(e.$node.children,function(n){return r("ContentItem",{key:e.Builder.key(n),attrs:{node:n,field:e.field}})}),1):r("p",{staticClass:"uk-text-muted"},[e._v(e._s(e.$t("No items yet.")))]),e._v(" "),r("div",{staticClass:"uk-grid uk-grid-small uk-child-width-auto"},[r("div",[r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button"},on:{click:function(n){return e.add(e.field.item)}}},[e._v(e._s(e.$t(e.field.button||"Add Item")))])]),e._v(" "),e.field.media?r("div",[r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button"},on:{click:function(n){return e.addFromMedia(e.field.item,e.field.media)}}},[e._v(e._s(e.$t("Add Media")))])]):e._e()])])},QB=[],JB=Q(KB,VB,QB,!1),ZB=JB.exports;const e5={extends:Ze,computed:{id(){return`data-list-${this.name}`}}};var t5=function(){var e=this,r=e._self._c;return r("div",[e.attributes.type==="checkbox"?r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input",attrs:{list:e.id,"aria-label":e.$t(e.label),type:"checkbox"},domProps:{checked:Array.isArray(e.value)?e._i(e.value,null)>-1:e.value},on:{change:function(n){var a=e.value,o=n.target,c=!!o.checked;if(Array.isArray(a)){var d=null,p=e._i(a,d);o.checked?p<0&&(e.value=a.concat([d])):p>-1&&(e.value=a.slice(0,p).concat(a.slice(p+1)))}else e.value=c}}},"input",e.attributes,!1)):e.attributes.type==="radio"?r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input",attrs:{list:e.id,"aria-label":e.$t(e.label),type:"radio"},domProps:{checked:e._q(e.value,null)},on:{change:function(n){e.value=null}}},"input",e.attributes,!1)):r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input",attrs:{list:e.id,"aria-label":e.$t(e.label),type:e.attributes.type},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"input",e.attributes,!1)),e._v(" "),r("datalist",{attrs:{id:e.id}},e._l(e.filterOptions(e.options),function(n){return r("option",{key:n.value,domProps:{value:n.value}},[e._v(e._s(e.$t(n.text)))])}),0)])},r5=[],n5=Q(e5,t5,r5,!1),i5=n5.exports;const a5={extends:Ze,computed:{date:{get(){if(!this.value)return"";try{const t=new Date(this.value);return t.setTime(t.getTime()-t.getTimezoneOffset()*60*1e3),t.toISOString().slice(0,-1)}catch{return""}},set(t){t||(this.value="");try{this.value=new Date(t).toISOString()}catch{this.value=""}}}}};var s5=function(){var e=this,r=e._self._c;return r("div",[{type:"datetime-local",...e.attributes}.type==="checkbox"?r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.date,expression:"date"}],staticClass:"uk-input",attrs:{"aria-label":e.label,type:"checkbox"},domProps:{checked:Array.isArray(e.date)?e._i(e.date,null)>-1:e.date},on:{change:function(n){var a=e.date,o=n.target,c=!!o.checked;if(Array.isArray(a)){var d=null,p=e._i(a,d);o.checked?p<0&&(e.date=a.concat([d])):p>-1&&(e.date=a.slice(0,p).concat(a.slice(p+1)))}else e.date=c}}},"input",{type:"datetime-local",...e.attributes},!1)):{type:"datetime-local",...e.attributes}.type==="radio"?r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.date,expression:"date"}],staticClass:"uk-input",attrs:{"aria-label":e.label,type:"radio"},domProps:{checked:e._q(e.date,null)},on:{change:function(n){e.date=null}}},"input",{type:"datetime-local",...e.attributes},!1)):r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.date,expression:"date"}],staticClass:"uk-input",attrs:{"aria-label":e.label,type:{type:"datetime-local",...e.attributes}.type},domProps:{value:e.date},on:{input:function(n){n.target.composing||(e.date=n.target.value)}}},"input",{type:"datetime-local",...e.attributes},!1))])},o5=[],u5=Q(a5,s5,o5,!1),l5=u5.exports;const rk=window.localStorage||{},nk="builder.editor.tab",c5={components:{EditorCode:OS},extends:Ze,data:()=>({shown:[]}),computed:{isVisual(){return this.field.editor!=="code"&&window.tinyMCE},tab:{get(){return rk[nk]},set(t){rk[nk]=t,this.shown.push(t),this.$refs.editors?.forEach(e=>e.refresh())}}},created(){!this.attributes.height&&this.isVisual&&(this.attributes.height=330),this.attributes.debounce&&(this.change=Vn(this.change,this.attributes.debounce))},methods:{change(t){this.value=t}}};var f5=function(){var e=this,r=e._self._c;return r("div",{staticClass:"yo-editor",class:{"uk-disabled":e.attributes.disabled},attrs:{id:e.attributes.id}},[e.isVisual?[r("div",{staticClass:"yo-editor-tab"},[r("ul",{staticClass:"uk-subnav uk-margin-remove uk-flex-right",attrs:{active:e.tab,"uk-switcher":"connect: !* +"}},[r("li",{class:{"uk-disabled":e.attributes.disabled}},[r("a",{attrs:{href:""},on:{click:function(n){n.preventDefault()}}},[e._v(e._s(e.$t("Visual")))])]),e._v(" "),r("li",{class:{"uk-disabled":e.attributes.disabled}},[r("a",{attrs:{href:""},on:{click:function(n){n.preventDefault()}}},[e._v(e._s(e.$t("Code")))])])])]),e._v(" "),r("div",{staticClass:"uk-switcher"},e._l(["EditorVisual","EditorCode"],function(n,a){return r("div",{key:n,on:{show:function(o){e.tab=a}}},[e.shown.includes(a)?r(n,{ref:"editors",refInFor:!0,tag:"component",attrs:{value:e.value,root:e.field.root,attrs:e.attributes},on:{input:e.change}}):e._e()],1)}),0)]:r("EditorCode",{attrs:{value:e.value,mode:e.field.mode,attrs:e.attributes},on:{input:e.change}})],2)},d5=[],h5=Q(c5,f5,d5,!1),p5=h5.exports;const m5={extends:Ze,beforeCreate(){this.Fonts=wb()},methods:{getFontName(t){return this.Fonts.getFontName(t)},async open(){const t=await Io(DP,{},this.$el,{classes:"yo-dropdown",boundaryX:this.$el.closest(".yo-sidebar-fields > *")||this.$el});t&&(this.value=t)}}};var v5=function(){var e=this,r=e._self._c;return r("a",{staticClass:"uk-select uk-text-truncate",class:e.attributes.class,attrs:{title:e.attributes.title,href:""},on:{click:function(n){return n.preventDefault(),e.open.apply(null,arguments)},keydown:function(n){return!n.type.indexOf("key")&&e._k(n.keyCode,"down",40,n.key,["Down","ArrowDown"])?null:e.open.apply(null,arguments)}}},[e._v(e._s(e.getFontName(e.value)||e.attributes.placeholder||e.$t("Choose Font")))])},g5=[],_5=Q(m5,v5,g5,!1),b5=_5.exports;const y5={extends:Ze,computed:{background(){return`${this.values[this.field.internal]||""} ${this.value||""}`.trim()}},methods:{open(){ds({functional:!0,render:t=>t("div",{class:"uk-form-stacked"},[t("div",{class:"uk-margin-small yo-colorpicker-boxshadow"},[t("label",{class:"uk-form-label",domProps:{for:"form-gradient"}},this.$t("Gradient")),t("input",{class:"uk-input uk-form-small",domProps:{value:ap(this.values,this.field.internal)},on:{input:e=>this.$emit("change",e.target.value,{name:this.field.internal})}})]),t(ef,{props:{value:this.value||void 0,allowEmpty:this.field.allowEmpty},on:{input:e=>this.value=e}})])},{},this.$el,{boundaryX:this.$el.closest(".yo-sidebar-fields > *")||this.$el})}}};var k5=function(){var e=this,r=e._self._c;return r("a",{staticClass:"yo-colorpicker",attrs:{title:e.attributes.title,href:"","aria-label":e.$t("Select Gradient")},on:{click:function(n){return n.preventDefault(),e.open.apply(null,arguments)}}},[r("div",{class:[e.attributes.class,"yo-colorpicker-color",{"yo-colorpicker-color-none":!e.background}],style:{background:e.background}})])},E5=[],T5=Q(y5,k5,E5,!1),C5=T5.exports;const w5={extends:Ze,methods:{async select(){const t=await Dt(lL,{},{container:!0});dr(t)||(this.value=t)}}};var S5=function(){var e=this,r=e._self._c;return r("div",[r("div",{staticClass:"uk-position-relative"},[r("a",{staticClass:"uk-icon uk-form-icon uk-form-icon-flip uk-icon-link",class:{"uk-disabled":e.attributes.disabled},attrs:{href:"",title:e.$t("Pick icon"),"uk-icon":"pencil","uk-tooltip":"delay: 500","aria-label":e.$t("Pick icon")},on:{click:function(n){return n.preventDefault(),e.select.apply(null,arguments)}}}),e._v(" "),r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input",attrs:{type:"text","aria-label":e.$t(e.label)},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"input",e.attributes,!1))])])},x5=[],A5=Q(w5,S5,x5,!1),O5=A5.exports;const N5={extends:Ze,created(){this.$config=ue.config},methods:{async open(){const t=await this.$trigger("openMediaPicker",this.field.mediapicker,!0);t&&(this.value=t.src,t.alt&&this.field.altRef&&this.$emit("change",t.alt,{name:this.field.altRef.replace("%name%",this.name)}))}}};var P5=function(){var e=this,r=e._self._c;return r("div",[e.value?r("div",{staticClass:"uk-position-relative uk-transition-toggle yo-thumbnail"},[r("a",{staticClass:"uk-display-block",attrs:{href:"","aria-label":e.$t("Select Image")},on:{click:function(n){return n.preventDefault(),e.open.apply(null,arguments)}}},[r("img",{attrs:{src:e.$url(e.value),alt:""}})]),e._v(" "),r("div",{staticClass:"uk-transition-fade uk-position-cover yo-thumbnail-overlay uk-disabled"}),e._v(" "),r("div",{staticClass:"uk-transition-fade uk-position-top-right yo-thumbnail-badge uk-light"},[r("a",{staticClass:"uk-icon-link",attrs:{href:"",title:e.$t("Delete"),"uk-icon":"trash","uk-tooltip":"delay: 500","aria-label":e.$t("Delete")},on:{click:function(n){n.preventDefault(),e.value=""}}})])]):[r("a",{staticClass:"uk-placeholder uk-text-center uk-display-block uk-margin-remove",class:{"uk-disabled uk-text-muted":e.attributes.disabled},attrs:{href:""},on:{click:function(n){return n.preventDefault(),e.open.apply(null,arguments)}}},[r("img",{attrs:{alt:e.$t("Placeholder Image"),src:e.$url(`${e.$config.assets}/images/field-image.svg`),"uk-svg":""}}),e._v(" "),r("p",{staticClass:"uk-h6 uk-margin-small-top"},[e._v(e._s(e.$t("Select Image")))])])],e._v(" "),r("div",{staticClass:"uk-margin-small-top"},[r("input",e._b({directives:[{name:"model",rawName:"v-model.trim",value:e.value,expression:"value",modifiers:{trim:!0}}],staticClass:"uk-input",attrs:{type:"text",placeholder:"http://","aria-label":e.$t(e.label)},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value.trim())},blur:function(n){return e.$forceUpdate()}}},"input",e.attributes,!1))])],2)},I5=[],L5=Q(N5,P5,I5,!1),R5=L5.exports;const D5={extends:Ze,computed:{showFile(){return this.field.filePicker!==!1},isVideo(){return fa(this.value)},isImage(){return yo(this.value)}},methods:{async open(t,e={}){this.select(await this.$trigger(`open${t}`,e,!0))},select(t){Sn(t)?this.value=t:_t(t)&&(this.value=t.src)},reset(){this.value=""}}};var M5=function(){var e=this,r=e._self._c;return r("div",[e.showFile&&(e.isImage||e.isVideo)?r("div",{staticClass:"uk-position-relative uk-transition-toggle yo-thumbnail uk-margin-small-bottom",attrs:{tabindex:"0"}},[r("a",{staticClass:"uk-display-block",attrs:{href:"","aria-label":e.$t("Pick link")},on:{click:function(n){return n.preventDefault(),e.open("MediaPicker",{type:"",photos:!1})}}},[e.isImage?r("img",{attrs:{src:e.$url(e.value),alt:""}}):r("video",{attrs:{src:e.$url(e.value),loop:"",muted:"",playsinline:"","uk-video":"hover"},domProps:{muted:!0}})]),e._v(" "),r("div",{staticClass:"uk-transition-fade uk-position-cover yo-thumbnail-overlay uk-disabled"}),e._v(" "),r("div",{staticClass:"uk-transition-fade uk-position-top-right yo-thumbnail-badge uk-light"},[r("a",{staticClass:"uk-icon-link",attrs:{title:e.$t("Delete"),href:"","uk-icon":"trash","uk-tooltip":"delay: 500","aria-label":e.$t("Delete")},on:{click:function(n){return n.preventDefault(),e.reset.apply(null,arguments)}}})])]):e._e(),e._v(" "),r("div",{staticClass:"uk-inline uk-width-1-1"},[r("div",{staticClass:"uk-position-center-right uk-position-small"},[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap"},[r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:e.$t("Pick link"),href:"","uk-icon":"link","uk-tooltip":"delay: 500","aria-label":e.$t("Pick link")},on:{click:function(n){return n.preventDefault(),e.open("LinkPicker")}}})]),e._v(" "),e.showFile?r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:e.$t("Pick file"),href:"","uk-icon":"album","uk-tooltip":"delay: 500","aria-label":e.$t("Pick file")},on:{click:function(n){return n.preventDefault(),e.open("MediaPicker",{type:"",photos:!1})}}})]):e._e()])]),e._v(" "),r("input",e._b({directives:[{name:"model",rawName:"v-model.trim",value:e.value,expression:"value",modifiers:{trim:!0}}],staticClass:"uk-input yo-input-iconnav-right",attrs:{type:"text","aria-label":e.$t(e.label)},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value.trim())},blur:function(n){return e.$forceUpdate()}}},"input",e.attributes,!1))])])},$5=[],F5=Q(D5,M5,$5,!1),B5=F5.exports;const H5={components:{LocationPicker:wL},extends:Ze};var U5=function(){var e=this,r=e._self._c;return r("LocationPicker",{model:{value:e.value,callback:function(n){e.value=n},expression:"value"}})},j5=[],W5=Q(H5,U5,j5,!1),G5=W5.exports;const z5={extends:Ze};var q5=function(){var e=this,r=e._self._c;return r("ul",{staticClass:"uk-nav uk-nav-default yo-sidebar-marginless"},e._l(e.field.items,function(n,a){return r("li",{key:a},[r("a",{attrs:{href:""},on:{click:function(o){return o.preventDefault(),e.$trigger("openPanel",a)}}},[e._v(e._s(e.$t(n)))])])}),0)},Y5=[],K5=Q(z5,q5,Y5,!1),X5=K5.exports;const V5={extends:Ze,inject:["Config"],data:()=>({clients:[],lists:[],error:!1}),computed:{apiKey(){return this.Config.values[`${this.field.provider}_api`]}},mounted(){this.load()},methods:{load(){this.apiKey&&Ue("theme/newsletter/list").post({settings:kr({name:this.field.provider},this.value)}).json(({lists:t,clients:e})=>{this.lists=t,this.clients=e,!this.value.list_id&&t.length&&(this.value.list_id=t[0].value),!this.value.client_id&&e.length&&(this.value.client_id=e[0].value)}).catch(t=>{this.error=t.json})}}};var Q5=function(){var e=this,r=e._self._c;return r("div",[r("p",{directives:[{name:"show",rawName:"v-show",value:!e.apiKey,expression:"!apiKey"}],staticClass:"uk-text uk-text-danger uk-margin-small"},[e._v(e._s(e.$t("Enter the API key in Settings > External Services.")))]),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:e.error,expression:"error"}],staticClass:"uk-text uk-text-danger uk-margin-small"},[e._v(e._s(e.error))]),e._v(" "),r("select",e._b({directives:[{name:"show",rawName:"v-show",value:e.clients.length,expression:"clients.length"},{name:"model",rawName:"v-model",value:e.value.client_id,expression:"value.client_id"}],staticClass:"uk-select uk-margin-small-bottom",on:{change:[function(n){var a=Array.prototype.filter.call(n.target.options,function(o){return o.selected}).map(function(o){var c="_value"in o?o._value:o.value;return c});e.$set(e.value,"client_id",n.target.multiple?a:a[0])},e.load]}},"select",e.attributes,!1),e._l(e.clients,function(n){return r("option",{key:n.value,domProps:{value:n.value}},[e._v(e._s(n.text))])}),0),e._v(" "),r("select",e._b({directives:[{name:"show",rawName:"v-show",value:e.lists.length,expression:"lists.length"},{name:"model",rawName:"v-model",value:e.value.list_id,expression:"value.list_id"}],staticClass:"uk-select",on:{change:function(n){var a=Array.prototype.filter.call(n.target.options,function(o){return o.selected}).map(function(o){var c="_value"in o?o._value:o.value;return c});e.$set(e.value,"list_id",n.target.multiple?a:a[0])}}},"select",e.attributes,!1),e._l(e.lists,function(n){return r("option",{key:n.value,domProps:{value:n.value}},[e._v(e._s(n.text))])}),0),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:e.lists.length,expression:"lists.length"}],staticClass:"uk-text-muted uk-margin-small"},[e._v(e._s(e.$t("Select the list to subscribe to.")))])])},J5=[],Z5=Q(V5,Q5,J5,!1),eH=Z5.exports;const tH={extends:Ze,computed:{mod(){return ke.toFloat(this.field.modifier||0)},val:{get(){let t=this.value;return ke.isString(t)&&([t]=t.match(/^\d+[e.]?\d*/)||[""]),ke.isNumeric(t)?ke.toFloat(t)+this.mod:t},set(t){this.value=ke.isNumeric(t)?ke.toFloat(t)-this.mod:t}}}};var rH=function(){var e=this,r=e._self._c;return r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.val,expression:"val"}],staticClass:"uk-input",attrs:{type:"number","aria-label":e.$t(e.label)},domProps:{value:e.val},on:{input:function(n){n.target.composing||(e.val=n.target.value)}}},"input",e.attributes,!1))},nH=[],iH=Q(tH,rH,nH,!1),ik=iH.exports;const aH={components:{Color:Kl},extends:Ze,data:()=>({stops:[]}),watch:{value:{handler(t=""){t!==this._prev&&(this.stops=t.split(/,(?![^(]*\))/).map(e=>e.match(/^(.*?)(?: (\d+)%)?$/).map(r=>r?.trim()||"").slice(1,3)))},immediate:!0}},methods:{add(t){const{stops:e}=this;e.splice(t,0,[""]),this.setStops(e)},remove(t){if(!this.value)return;const{stops:e}=this;e.splice(t,1,...e.length>1?[]:[[""]]),this.setStops(e)},setValue({target:{value:t}},e){const{stops:r}=this;r[e][0]=t.trim(),this.$set(r,e,r[e]),this.setStops(r)},setPosition({target:{value:t}},e){const{stops:r}=this;r[e][0]||(r[e][0]=""),r[e][1]=t.trim(),this.$set(r,e,r[e]),this.setStops(r)},setStops(t){return this.value=this._prev=t.map(([e,r])=>e?`${e}${r&&!isNaN(r)?` ${r}%`:""}`:"").join(",")}}};var sH=function(){var e=this,r=e._self._c;return r("div",{staticClass:"yo-parallax-stops"},[r("div",{staticClass:"yo-sidebar-grid uk-child-width-1-2 uk-grid uk-grid-medium uk-flex-nowrap"},[r("div",[r("h3",{staticClass:"yo-sidebar-subheading"},[e._v(e._s(e.$t(e.field.text||"Property")))])]),e._v(" "),r("div",[r("h3",{staticClass:"yo-sidebar-subheading"},[e._v(e._s(e.$t("Position")))])])]),e._v(" "),e._l(e.stops,function([n,a],o){return r("div",{key:`${e.stops.length}-${o}`,staticClass:"yo-parallax-stop uk-visible-toggle uk-margin-small"},[r("div",{staticClass:"uk-child-width-1-2 uk-grid uk-grid-medium"},[r("div",[e.field.input!=="color"?r("div",{staticClass:"uk-grid uk-grid-small uk-flex-middle"},[r("div",{staticClass:"uk-width-expand"},[r("input",e._b({staticClass:"uk-range",attrs:{type:"range"},domProps:{value:n},on:{input:function(c){return e.setValue(c,o)}}},"input",e.attributes,!1))]),e._v(" "),r("div",{staticClass:"uk-width-auto"},[r("input",e._b({staticClass:"uk-input uk-form-width-xsmall",attrs:{type:"text",pattern:"^-?[0-9]"},domProps:{value:n},on:{input:function(c){return e.setValue(c,o)}}},"input",e.attributes,!1))])]):r("Color",{attrs:{field:{name:"input",type:"color",disableAlpha:!0,disableSaturation:!0,disableFields:!0,allowEmpty:!1},values:{input:n}},on:{change:function(c){return e.setValue({target:{value:c||""}},o)}}})],1),e._v(" "),r("div",[r("div",{staticClass:"uk-grid uk-grid-small uk-flex-middle"},[r("div",{staticClass:"uk-width-expand"},[r("input",{staticClass:"uk-range",attrs:{type:"range",min:"0",max:"100",step:"1"},domProps:{value:a},on:{input:function(c){return e.setPosition(c,o)}}})]),e._v(" "),r("div",{staticClass:"uk-width-auto"},[r("input",{staticClass:"uk-input uk-form-width-xsmall",attrs:{type:"number",min:"0",max:"100",step:"1",placeholder:"%"},domProps:{value:a},on:{input:function(c){return e.setPosition(c,o)}}})])])])]),e._v(" "),r("div",{staticClass:"yo-parallax-stop-delete uk-invisible-hover"},[r("a",{class:["yo-builder-icon-delete",{"uk-disabled":!e.value}],attrs:{href:"",title:e.$t("Delete animation stop"),tabindex:e.value?!1:-1,"uk-tooltip":"delay: 1000; pos: left","aria-label":e.$t("Delete animation stop")},on:{click:function(c){return c.preventDefault(),e.remove(o)}}})]),e._v(" "),r("a",{staticClass:"yo-parallax-stop-add yo-builder-icon-add-right uk-invisible-hover",attrs:{href:"",title:e.$t("Add animation stop"),"uk-tooltip":"delay: 1000; pos: left","aria-label":e.$t("Add animation stop")},on:{click:function(c){return c.preventDefault(),e.add(o+1)}}})])})],2)},oH=[],uH=Q(aH,sH,oH,!1),lH=uH.exports;const cH={extends:Ze};var fH=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-input yo-input-locked"},[e._v(e._s(e.field.placeholder))])},dH=[],hH=Q(cH,fH,dH,!1),pH=hH.exports;const mH={extends:Ze};var vH=function(){var e=this,r=e._self._c;return r("div",e._l(e.filterOptions(e.options),function(n){return r("div",{key:n.value},[r("label",[r("input",{directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-radio",attrs:{name:e.name,disabled:e.attributes.disabled,type:"radio","aria-label":e.$t(n.text)},domProps:{value:n.value,checked:e._q(e.value,n.value)},on:{change:function(a){e.value=n.value}}}),e._v(` `+e._s(e.$t(n.text))+` `)])])}),0)},gH=[],_H=Q(mH,vH,gH,!1),bH=_H.exports;const yH={extends:Ze};var kH=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-grid-small uk-flex-middle",attrs:{"uk-grid":""}},[r("div",{staticClass:"uk-width-expand"},[r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-range",attrs:{type:"range","aria-label":e.$t(e.label)},domProps:{value:e.value},on:{__r:function(n){e.value=n.target.value}}},"input",e.attributes,!1))]),e._v(" "),r("div",{staticClass:"uk-width-auto"},[(e.attributes.type||"text")==="checkbox"?r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input uk-form-width-xsmall",attrs:{"aria-label":e.$t(e.label),type:"checkbox"},domProps:{checked:Array.isArray(e.value)?e._i(e.value,null)>-1:e.value},on:{change:function(n){var a=e.value,o=n.target,c=!!o.checked;if(Array.isArray(a)){var d=null,p=e._i(a,d);o.checked?p<0&&(e.value=a.concat([d])):p>-1&&(e.value=a.slice(0,p).concat(a.slice(p+1)))}else e.value=c}}},"input",e.attributes,!1)):(e.attributes.type||"text")==="radio"?r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input uk-form-width-xsmall",attrs:{"aria-label":e.$t(e.label),type:"radio"},domProps:{checked:e._q(e.value,null)},on:{change:function(n){e.value=null}}},"input",e.attributes,!1)):r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input uk-form-width-xsmall",attrs:{"aria-label":e.$t(e.label),type:e.attributes.type||"text"},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"input",e.attributes,!1))])])},EH=[],TH=Q(yH,kH,EH,!1),CH=TH.exports;const wH={extends:Ze,computed:{selected:{get(){return dr(this.value)?this.attributes.multiple?[]:"":this.value},set(t){this.value=t}},optionValues(){return ak(this.filterOptions(this.options)).map(({value:t})=>t)},invalid(){return!dr(this.value)&&[].concat(this.selected).some(t=>!this.optionValues.includes(t))}},created(){dr(this.value)&&!dr(this.field.defaultIndex)&&(this.value=this.optionValues[this.field.defaultIndex])},methods:{filterOptions(t=[]){if(!Array.isArray(t))return Ze.methods.filterOptions.call(this,t);let e=[];for(const r of t)if(r.evaluate){const n=this.evaluate(r.evaluate);_t(n)&&(e=e.concat(n))}else e.push(r);return e},evaluate(t){return op.methods.evaluate.call(this,t,{...this.values,api:ue})}}};function ak(t=[]){return t.reduce((e,r)=>e.concat(r.label?ak(r.options):r),[])}var SH=function(){var e=this,r=e._self._c;return r("select",e._b({directives:[{name:"model",rawName:"v-model",value:e.selected,expression:"selected"}],class:["uk-select",e.attributes.class,{"uk-form-danger":e.invalid}],on:{change:function(n){var a=Array.prototype.filter.call(n.target.options,function(o){return o.selected}).map(function(o){var c="_value"in o?o._value:o.value;return c});e.selected=n.target.multiple?a:a[0]}}},"select",e.attributes,!1),[e._l(e.filterOptions(e.options),function(n,a){return[n.divider?r("hr",{key:`${a}-hr-${n.divider}`}):e._e(),e._v(" "),n.label?r("optgroup",{key:`${a}-label-${n.label}`,attrs:{label:n.label}},e._l(n.options,function(o){return r("option",{key:o.value,domProps:{value:o.value}},[e._v(e._s(e.$t(o.text)))])}),0):r("option",{key:`${a}-value-${n.value}`,domProps:{value:n.value}},[e._v(e._s(e.$t(n.text)))])]})],2)},xH=[],AH=Q(wH,SH,xH,!1),Uo=AH.exports;const OH={extends:Uo,watch:{selected(){ke.trigger(this.$el,"change")}}};var NH=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-width-1-1",attrs:{"uk-form-custom":"target: true"}},[r("select",{directives:[{name:"model",rawName:"v-model",value:e.selected,expression:"selected"}],on:{change:function(n){var a=Array.prototype.filter.call(n.target.options,function(o){return o.selected}).map(function(o){var c="_value"in o?o._value:o.value;return c});e.selected=n.target.multiple?a:a[0]}}},e._l(e.filterOptions(e.options),function({value:n,text:a}){return r("option",{key:n,domProps:{value:n}},[e._v(e._s(e.$t(a)))])}),0),e._v(" "),r("span",e._b({staticClass:"uk-select uk-text-truncate"},"span",e.attributes,!1))])},PH=[],IH=Q(OH,NH,PH,!1),LH=IH.exports;const RH={extends:Ze,computed:{selected(){return this.options[this.value||""]||{}}},methods:{async select(){const t=await Dt(CM,{svgs:this.options,title:this.field.title||this.label},{width:"2xlarge"});dr(t)||(this.value=t)}}};var DH=function(){var e=this,r=e._self._c;return r("div",[r("div",{staticClass:"uk-card uk-card-body uk-card-small uk-card-hover yo-panel uk-text-center yo-select-img",class:{"uk-disabled":e.attributes.disabled}},[r("img",{attrs:{src:e.$url(e.selected.src),alt:e.selected.label,"uk-svg":""}}),e._v(" "),r("p",{staticClass:"uk-margin-small uk-margin-remove-bottom"},[e._v(e._s(e.selected.label))]),e._v(" "),r("a",{staticClass:"uk-position-cover",attrs:{href:"","aria-label":e.field.title},on:{click:function(n){return n.preventDefault(),e.select()}}})])])},MH=[],$H=Q(RH,DH,MH,!1),FH=$H.exports;const BH={extends:Ze};var HH=function(){var e=this,r=e._self._c;return{type:"text",...e.attributes}.type==="checkbox"?r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input",attrs:{"aria-label":e.label,type:"checkbox"},domProps:{checked:Array.isArray(e.value)?e._i(e.value,null)>-1:e.value},on:{change:function(n){var a=e.value,o=n.target,c=!!o.checked;if(Array.isArray(a)){var d=null,p=e._i(a,d);o.checked?p<0&&(e.value=a.concat([d])):p>-1&&(e.value=a.slice(0,p).concat(a.slice(p+1)))}else e.value=c}}},"input",{type:"text",...e.attributes},!1)):{type:"text",...e.attributes}.type==="radio"?r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input",attrs:{"aria-label":e.label,type:"radio"},domProps:{checked:e._q(e.value,null)},on:{change:function(n){e.value=null}}},"input",{type:"text",...e.attributes},!1)):r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input",attrs:{"aria-label":e.label,type:{type:"text",...e.attributes}.type},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"input",{type:"text",...e.attributes},!1))},UH=[],jH=Q(BH,HH,UH,!1),WH=jH.exports;const GH={extends:Ze};var zH=function(){var e=this,r=e._self._c;return r("textarea",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-textarea",attrs:{"aria-label":e.$t(e.label)},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"textarea",e.attributes,!1))},qH=[],YH=Q(GH,zH,qH,!1),KH=YH.exports,XH={extends:Kl,methods:{open(){ds({functional:!0,render:t=>t(nv,{props:{value:this.value,fields:["offsetX","offsetY","blur","color"]},on:{input:e=>this.value=e}})},{},this.$el,{boundaryX:this.$el.closest(".yo-sidebar-fields > *")||this.$el})}}};const VH={extends:Ze,created(){this.$config=ue.config},methods:{isIframeVideo:LN,async open(){const t=await this.$trigger("openMediaPicker",{type:"video"});dr(t)||(this.value=t.src)},iframeSrc(t){if(K0(t)){const[,e,r]=t.match(/\/\/(?:.*?youtube(-nocookie)?\..*?(?:[?&]v=|\/shorts\/)|youtu\.be\/)([\w-]{11})[&?]?/);return`https://www.youtube${e||""}.com/embed/${r}${sk({rel:0,loop:0,autoplay:0,controls:0,showinfo:0,iv_load_policy:3,modestbranding:1,wmode:"transparent",playsinline:0,disablekb:1})}`}if(X0(t)){const[,e]=t.match(/\/\/.*?vimeo\.[a-z]+\/(\d+)[&?]?(.*)?/);return`https://player.vimeo.com/video/${e}${sk({keyboard:0,loop:0,autoplay:0,autopause:1,controls:0,title:0,byline:0,setVolume:0})}`}}}};function sk(t){const e=Object.keys(t);return e.length?`?${e.map(r=>`${r}=${t[r]}`).join("&")}`:""}var QH=function(){var e=this,r=e._self._c;return r("div",[e.value?r("div",{staticClass:"uk-position-relative uk-transition-toggle yo-thumbnail"},[r("a",{staticClass:"uk-display-block",attrs:{href:"","aria-label":e.$t("Select Video")},on:{click:function(n){return n.preventDefault(),e.open.apply(null,arguments)}}},[e.isIframeVideo(e.value)?r("iframe",{attrs:{src:e.iframeSrc(e.value),width:"1920",height:"1080","uk-responsive":""}}):r("video",{attrs:{src:e.$url(e.value),loop:"",muted:"",playsinline:"","uk-video":"hover"},domProps:{muted:!0}})]),e._v(" "),r("div",{staticClass:"uk-transition-fade uk-position-cover yo-thumbnail-overlay uk-disabled"}),e._v(" "),r("div",{staticClass:"uk-transition-fade uk-position-top-right yo-thumbnail-badge uk-light"},[r("a",{staticClass:"uk-icon-link",attrs:{href:"",title:e.$t("Delete"),"uk-icon":"trash","uk-tooltip":"delay: 500","aria-label":e.$t("Delete")},on:{click:function(n){n.preventDefault(),e.value=""}}})])]):[r("a",{staticClass:"uk-placeholder uk-text-center uk-display-block uk-margin-remove",class:{"uk-disabled uk-text-muted":e.attributes.disabled},attrs:{href:""},on:{click:function(n){return n.preventDefault(),e.open.apply(null,arguments)}}},[r("img",{attrs:{alt:e.$t("Placeholder Video"),src:e.$url(`${e.$config.assets}/images/field-image.svg`),"uk-svg":""}}),e._v(" "),r("p",{staticClass:"uk-h6 uk-margin-small-top"},[e._v(e._s(e.$t("Select Video")))])])],e._v(" "),r("div",{staticClass:"uk-margin-small-top"},[r("input",e._b({directives:[{name:"model",rawName:"v-model.trim",value:e.value,expression:"value",modifiers:{trim:!0}}],staticClass:"uk-input",attrs:{type:"text",placeholder:"http://","aria-label":e.$t(e.field.label)},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value.trim())},blur:function(n){return e.$forceUpdate()}}},"input",e.attributes,!1))])],2)},JH=[],ZH=Q(VH,QH,JH,!1),e9=ZH.exports,t9=Object.freeze({__proto__:null,FieldBoxshadow:kF,FieldButton:SF,FieldButtonPanel:PF,FieldCache:MF,FieldCheckbox:UF,FieldChildProp:jF,FieldChildren:jB,FieldColor:Kl,FieldContentItems:ZB,FieldDataList:i5,FieldDatetime:l5,FieldEditor:p5,FieldFont:b5,FieldGradient:C5,FieldIcon:O5,FieldImage:R5,FieldLink:B5,FieldLocation:G5,FieldMenu:X5,FieldNewsletterLists:eH,FieldNumber:ik,FieldParallaxStops:lH,FieldPlaceholder:pH,FieldRadio:bH,FieldRange:CH,FieldSelect:Uo,FieldSelectCustom:LH,FieldSelectImg:FH,FieldText:WH,FieldTextarea:KH,FieldTextshadow:XH,FieldVideo:e9}),Vr={components:{...t9},extends:op};const r9={extends:Vr,methods:{merge:kr}};var n9=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-panel"},e._l(e.fields,function(n){return r("div",{directives:[{name:"show",rawName:"v-show",value:e.evaluate(n.show),expression:"evaluate(field.show)"}],key:n.name,staticClass:"uk-flex uk-flex-middle uk-flex-wrap uk-margin-small"},[r("div",{staticClass:"uk-width-expand uk-text-truncate"},[n.description?r("span",{attrs:{title:n.description,"uk-tooltip":"delay: 300; pos: top-left"}},[e._v(e._s(e.$t(n.label)))]):r("span",[e._v(e._s(e.$t(n.label)))])]),e._v(" "),r("div",{staticClass:"uk-width-medium"},[r(n.component,{tag:"component",attrs:{values:e.values,field:e.merge(n,{attrs:{class:"yo-form-medium"}})},on:{change:e.change}})],1)])}),0)},i9=[],a9=Q(r9,n9,i9,!1),s9=a9.exports;const o9={name:"FieldsGrid",widthClass(t,e){const r=t?.split(",")||[],n=r.at(e in r?e:-1)?.trim();return n?`uk-width-${n}`:""},prepareField(t,e){return t.attrs?.class?.includes("yo-form-medium")&&(e=kr({},e,{attrs:{class:[e.attrs?.class,"yo-form-medium"]}})),e}};var u9=function(e,r){return e("div",{staticClass:"yo-sidebar-grid uk-grid uk-flex-nowrap",class:r.props.field.attrs?.class?.includes("yo-form-medium")?"uk-grid-small uk-margin-remove-bottom":`uk-grid-${r.props.field.gap||"medium"}`},r._l(r.parent.prepare(r.props.field.fields),function(n,a){return e("div",{directives:[{name:"show",rawName:"v-show",value:r.parent.evaluate(n.show),expression:"parent.evaluate(field.show)"}],key:n.name,class:r.$options.widthClass(r.props.field.width,a)},[n.buttons?[e("div",{staticClass:"uk-flex uk-flex-middle uk-flex-right"},[n.label?e("div",{staticClass:"uk-width-expand"},[e("h3",{staticClass:"yo-sidebar-subheading uk-margin-remove"},[r._v(r._s(r.parent.$t(n.label)))])]):r._e(),r._v(" "),n.buttons?e("div",{directives:[{name:"show",rawName:"v-show",value:n.buttons.some(o=>r.parent.evaluate(o.show)),expression:"field.buttons.some((button) => parent.evaluate(button.show))"}],staticClass:"uk-width-auto"},[e("ul",{staticClass:"uk-subnav uk-margin-remove"},r._l(n.buttons,function({label:o,action:c,show:d}){return e("li",{directives:[{name:"show",rawName:"v-show",value:r.parent.evaluate(d),expression:"parent.evaluate(show)"}],key:c},[e("button",{staticClass:"uk-button uk-button-link",attrs:{disabled:n.enable&&!r.parent.evaluate(n.enable),type:"button"},on:{click:function(p){return r.parent.$trigger(c,[n,p])}}},[r._v(r._s(o))])])}),0)]):r._e()])]:n.label?e("h3",{staticClass:"yo-sidebar-subheading"},[r._v(r._s(r.parent.$t(n.label)))]):r._e(),r._v(" "),n.type!=="description"?[["radio","checkbox","grid","parallax-stops"].includes(n.type)?e(n.component,{tag:"component",attrs:{field:r.$options.prepareField(r.props.field,n),values:r.props.values},on:{change:r.parent.change}}):e("div",{staticClass:"uk-margin-small"},[e(n.component,{tag:"component",attrs:{field:r.$options.prepareField(r.props.field,n),values:r.props.values},on:{change:r.parent.change}})],1)]:r._e(),r._v(" "),n.description?e("p",{staticClass:"uk-text-muted uk-margin-small",domProps:{innerHTML:r._s(r.parent.$t(n.description))}}):r._e()],2)}),0)},l9=[],c9=Q(o9,u9,l9,!0),f9=c9.exports;const d9={name:"FieldsGroup",prepareField(t){return kr({},t,{attrs:{class:[t.attrs?.class,"yo-form-medium"]}})}};var h9=function(e,r){return e("div",{staticClass:"uk-margin-small"},r._l(r.parent.prepare(r.props.field.fields),function(n){return e("div",{directives:[{name:"show",rawName:"v-show",value:r.parent.evaluate(n.show),expression:"parent.evaluate(field.show)"}],key:n.name,staticClass:"uk-flex uk-flex-middle uk-margin-small",class:{"uk-flex-wrap":n.buttons}},[n.buttons?e("div",{directives:[{name:"show",rawName:"v-show",value:n.buttons.some(a=>r.parent.evaluate(a.show)),expression:"field.buttons.some((button) => parent.evaluate(button.show))"}],staticClass:"uk-width-1-1 uk-flex uk-flex-right uk-margin-small-bottom"},[e("ul",{staticClass:"uk-subnav uk-margin-remove"},r._l(n.buttons,function({label:a,action:o,show:c}){return e("li",{directives:[{name:"show",rawName:"v-show",value:r.parent.evaluate(c),expression:"parent.evaluate(show)"}],key:o},[e("button",{staticClass:"uk-button uk-button-link",attrs:{disabled:n.enable&&!r.parent.evaluate(n.enable),type:"button"},on:{click:function(d){return r.parent.$trigger(o,[n,d])}}},[r._v(r._s(a))])])}),0)]):r._e(),r._v(" "),e("div",{staticClass:"uk-width-expand uk-text-truncate"},[n.description?e("span",{attrs:{title:n.description,"uk-tooltip":"delay: 300; pos: top-left"}},[r._v(r._s(r.parent.$t(n.label)))]):e("span",[r._v(r._s(r.parent.$t(n.label)))])]),r._v(" "),e("div",{staticClass:"uk-width-medium"},[e(n.component,{tag:"component",attrs:{values:r.props.values,field:r.$options.prepareField(n)},on:{change:r.parent.change}})],1)])}),0)},p9=[],m9=Q(d9,h9,p9,!0),v9=m9.exports;const g9={directives:{Sortable:zh},extends:Ze,computed:{items:{get(){return dr(this.value)||!Array.isArray(this.value)?[]:this.value},set(t){this.value=t}}},methods:{add(){const t={};this.items=[...this.items,t],this.edit(t)},edit(t){const{name:e,fields:r}=this.field,n=this.items.indexOf(t),a=()=>this.items=this.items.with(n,t);this.$trigger("openPanel",{name:`fields-item-panel-${e}`,title:this.$t("Edit Item"),component:{name:"FieldsItemPanel",extends:Vr,created(){this.$on("change",a)},render:o=>o(I1,{props:{field:{fields:r}}},[])},props:{values:t}})},copy(t){const e=this.items.indexOf(t),r=[...this.items];~e&&r.splice(e,0,{...this.items[e]}),this.items=r},remove(t){const e=this.items.indexOf(t),r=[...this.items];~e&&r.splice(e,1),this.items=r},move(t,e,r,n){const a=[...this.items],o=a.splice(n,1);a.splice(r,0,...o),this.items=a}}};var _9=function(){var e=this,r=e._self._c;return r("div",[e.items.length?r("ul",{directives:[{name:"sortable",rawName:"v-sortable",value:{group:e.name},expression:"{ group: name }"}],staticClass:"uk-nav uk-nav-default yo-sidebar-marginless yo-nav-sortable yo-nav-iconnav uk-margin",attrs:{"cls-custom":"yo-nav-sortable-drag"}},e._l(e.items,function(n,a){return r("li",{key:`${a}:${n.link}`,staticClass:"uk-visible-toggle",attrs:{tabindex:"-1"}},[r("a",{attrs:{href:""},on:{click:function(o){return o.preventDefault(),e.edit(n)}}},[n.image?r("img",{staticClass:"yo-nav-media",attrs:{src:e.$url(n.image),alt:"",loading:"lazy"}}):e._e(),e._v(" "),r("span",{staticClass:"uk-text-truncate"},[e._v(e._s(n.link||e.$t("Item")))])]),e._v(" "),r("div",{staticClass:"uk-invisible-hover uk-position-center-right uk-position-medium"},[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap"},[r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{href:"",title:e.$t("Copy"),"uk-icon":"copy","uk-tooltip":"delay: 500","aria-label":e.$t("Copy")},on:{click:function(o){return o.preventDefault(),e.copy(n)}}})]),e._v(" "),r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{href:"",title:e.$t("Delete"),"uk-icon":"trash","uk-tooltip":"delay: 500","aria-label":e.$t("Delete")},on:{click:function(o){return o.preventDefault(),e.remove(n)}}})])])])])}),0):r("p",{staticClass:"uk-text-muted"},[e._v(e._s(e.$t("No items yet.")))]),e._v(" "),r("div",{staticClass:"uk-grid uk-grid-small uk-child-width-auto"},[r("div",[r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button"},on:{click:function(n){return e.add()}}},[e._v(e._s(e.$t("Add Item")))])])])])},b9=[],y9=Q(g9,_9,b9,!1),k9=y9.exports;const{evaluate:E9,prepare:T9}=Vr.extends.methods,C9={name:"FieldsPanel",components:{FieldGrid:f9,FieldGroup:v9,FieldFields:I1,FieldItemPanel:k9},extends:Vr,props:{name:{type:String,default:"default"},panel:{type:Object,required:!0}},data:()=>({index:0,transitionIndex:0}),computed:{fieldset(){const{fieldset:t={},fields:e}=this.panel;return t[this.name]||{fields:e}}},watch:{index(t,e){this.transitionIndex=e}},methods:{evaluate(t,e=this.values){if(dr(t))return!0;const r=[t,e];return this.$trigger("evaluateExpression",r),E9.call(this,...r)},prepare(t=this.config,e=this.prefix){const r=Array.isArray(t);let n=[];for(let[a,o]of Object.entries(t)){if(Sn(o)){if(!(o in this.panel.fields))continue;o={name:o,...this.panel.fields[o]}}else o={...o};!o.name&&!r?o.name=a:!o.name&&o.label&&(o.name=o.label),n.push(o)}return n=T9.call(this,n,e),this.$trigger("prepareFields",[n]),n},tabStyle(t){return{width:"100%",left:t<this.index?"-100%":t===this.index?"0":"100%",visibility:[this.index,this.transitionIndex].includes(t)?"visible":"hidden"}}}};var w9=function(){var e=this,r=e._self._c;return e.fieldset.type==="tabs"?r("div",[r("div",{staticClass:"uk-grid uk-grid-small uk-flex-middle yo-sidebar-tabs"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(e.$t(e.panel.title)))])]),e._v(" "),r("div",{staticClass:"uk-width-auto"},[r("ul",{staticClass:"uk-subnav"},e._l(e.fieldset.fields,function({title:n},a){return r("li",{key:a,class:{"uk-active":e.index===a}},[r("a",{attrs:{href:""},on:{click:function(o){o.preventDefault(),e.index=a}}},[e._v(e._s(e.$t(n)))])])}),0)])]),e._v(" "),r("div",{staticClass:"yo-sidebar-tabs-content"},e._l(e.fieldset.fields,function(n,a){return r("FieldFields",{key:a,staticClass:"yo-sidebar-tabs-section",style:e.tabStyle(a),attrs:{field:n},nativeOn:{transitionend:function(o){if(o.target!==o.currentTarget)return null;e.transitionIndex=e.index}}})}),1)]):r("FieldFields",{attrs:{field:e.fieldset}})},S9=[],x9=Q(C9,w9,S9,!1),Wr=x9.exports;const A9={__name:"HelpModal",props:{help:[Array,Object]},setup(t){const e=t,{i18n:r}=oe,n=Ae(()=>Array.isArray(e.help)?{"":e.help}:e.help);return{__sfc:!0,i18n:r,props:e,groups:n,toUrl:o=>new URL(o,ue.customizer.help)}}};var O9=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-modal-header uk-flex uk-flex-middle uk-flex-between"},[r("h2",{staticClass:"uk-modal-title uk-margin-remove",domProps:{innerHTML:e._s(n.i18n.t("YOOtheme Help"))}}),e._v(" "),r("a",{staticClass:"uk-button uk-button-primary",attrs:{href:"https://yootheme.com/support",target:"_blank"}},[e._v(e._s(n.i18n.t("Support Center")))])]),e._v(" "),r("div",{staticClass:"uk-modal-body",attrs:{"uk-overflow-auto":""}},e._l(n.groups,function(a,o){return r("table",{key:o,staticClass:"uk-table uk-table-divider uk-table-hover"},[r("thead",[r("tr",[o?r("th",{staticClass:"uk-table-expand"},[e._v(e._s(n.i18n.t(o)))]):r("th",{staticClass:"uk-table-expand"},[e._v(e._s(n.i18n.t("Videos")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink uk-text-right uk-text-nowrap"},[e._v(e._s(n.i18n.t("Run Time")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink uk-text-center"},[e._v(e._s(n.i18n.t("Documentation")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink uk-text-center"},[e._v(e._s(n.i18n.t("Support")))])])]),e._v(" "),r("tbody",e._l(a,function(c){return r("tr",{key:c.src},[r("td",{staticClass:"uk-table-link",attrs:{"uk-lightbox":"video-autoplay: true"}},[r("a",{staticClass:"uk-link-heading",attrs:{href:n.toUrl(c.src)}},[r("span",{staticClass:"uk-preserve-width uk-margin-small-right",attrs:{"uk-icon":"play-circle"}}),e._v(" "),r("span",{staticClass:"uk-text-middle"},[e._v(e._s(n.i18n.t(c.title)))])])]),e._v(" "),r("td",{staticClass:"uk-text-right uk-text-nowrap"},[e._v(e._s(n.i18n.t(c.duration)))]),e._v(" "),r("td",{staticClass:"uk-text-center"},[r("a",{staticClass:"uk-button uk-button-default uk-button-small",attrs:{href:n.toUrl(c.documentation),target:"_blank"}},[e._v(e._s(n.i18n.t("Read More")))])]),e._v(" "),r("td",{staticClass:"uk-text-center"},[r("a",{staticClass:"uk-button uk-button-default uk-button-small",attrs:{href:n.toUrl(c.support),target:"_blank"}},[e._v(e._s(n.i18n.t("Search")))])])])}),0)])}),0)])},N9=[],P9=Q(A9,O9,N9,!1),I9=P9.exports;const L9={__name:"Panel",props:{config:{type:Object,required:!0}},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me();return{__sfc:!0,i18n:r,trigger:n,props:e,api:ue}}};var R9=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{staticClass:"yo-sidebar-section",class:n.props.config.cls},[n.props.config.heading!==!1?[n.props.config.help?r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t(n.props.config.title??"")))])]),e._v(" "),r("div",{staticClass:"uk-width-auto"},[r("button",{staticClass:"uk-icon uk-icon-link",attrs:{type:"button","aria-label":n.i18n.t("Help")},on:{click:function(a){return n.trigger("openHelp",[n.props.config.help])}}},[r("img",{attrs:{"uk-svg":`${n.api.config.assets}/images/help.svg`,"aria-hidden":"true"}})])])]):r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t(n.props.config.title??"")))])]:e._e(),e._v(" "),e._t("default",function(){return[e._v("Empty panel")]})],2)},D9=[],M9=Q(L9,R9,D9,!1),$9=M9.exports;function F9(t,e,r,n){const a=n;t.registry[r]||(t.registry[r]=[]),e==="before"&&(n=(o,c)=>Promise.resolve().then(a.bind(null,c)).then(o.bind(null,c))),e==="after"&&(n=(o,c)=>{let d;return Promise.resolve().then(o.bind(null,c)).then(p=>(d=p,a(d,c))).then(()=>d)}),e==="filter"&&(n=(o,c)=>Promise.resolve().then(o.bind(null,c)).then(d=>a(d,c))),e==="error"&&(n=(o,c)=>Promise.resolve().then(o.bind(null,c)).catch(d=>a(d,c))),t.registry[r].push({kind:e,orig:a,hook:n})}function ok(t,e,r,n={}){if(typeof r!="function")throw new Error("Method for hook must be a function");return Array.isArray(e)?e.toReversed().reduce((a,o)=>ok.bind(null,t,o,a,n),r)():Promise.resolve().then(()=>t.registry[e]?t.registry[e].reduce((a,o)=>o.hook.bind(null,a,n),r)():r(n))}function B9(t,e,r,n={}){const a=Array.isArray(e)?e.toReversed():[e];if(typeof r!="function")throw new Error("Method for hook must be a function");for(const o of a)t.registry[o]&&(r=H9(r,t.registry[o]));return r(n)}function H9(t,e){const r=[];return e.filter(n=>{if(n.kind!=="error")return!0;r.push(n)}).concat(r).reduce(U9,t)}function U9(t,e){return e.kind==="before"?r=>(e.orig(r),t(r)):e.kind==="after"?r=>{const n=t(r);return e.orig(n,r),n}:e.kind==="filter"?r=>e.orig(t(r),r):e.kind==="wrap"?r=>e.orig(t,r):r=>{let n;try{n=t(r)}catch(a){n=e.orig(a,r)}return n}}function j9(t,e,r){if(!t.registry[e])return;const n=t.registry[e].map(a=>a.orig).indexOf(r);n!==-1&&t.registry[e].splice(n,1)}const Si=W9();function uk(t){const e=["before","after","filter","wrap","error"];for(const[r,n]of Object.entries(t)){if(!e.includes(r))throw new Error(`Invalid hook kind: ${r}`);for(const[a,o]of Object.entries(n))Si[r](a,o)}return Si}function W9(t){const e=G9(),r={...t,...e};function n(c,d,p){return o({name:c,method:d,options:p}),e.call(c,d,p)}function a(c,d,p){return o({name:c,method:d,options:p}),e.callSync(c,d,p)}function o(c){if(typeof r.log=="function")for(const d of[].concat(c.name))r.log({...c,name:d})}return Object.assign(r,{call:n,callSync:a,map:(c,d)=>lk(n,c,d),mapSync:(c,d)=>lk(a,c,d)})}function G9(){const t={registry:{}};return z9({state:t},t)}function z9(t,e){const r=Function.bind,n=r.bind(r);return t.call=ok.bind(null,e),t.callSync=B9.bind(null,e),t.remove=j9.bind(null,e),["before","after","filter","wrap","error"].forEach(a=>{t[a]=n(F9,null).apply(null,[e,a])}),t}function lk(t,e,r){return Object.entries(r).reduce((n,[a,o])=>({...n,[a]:function(...c){const d=e?`${e}.${a}`:a;if(c.length>1)throw new Error(`Hook ${d} does not support multiple arguments.`);return t(d,o.bind(this),...c)}}),{})}const ck=t=>t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">");function fk(t,...e){if(typeof t=="string")return ck(t);let r=t[0];for(const[n,a]of e.entries())r=r+ck(String(a))+t[n+1];return r}const q9=new Set([65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111]),xt="\uFFFD";var I;(function(t){t[t.EOF=-1]="EOF",t[t.NULL=0]="NULL",t[t.TABULATION=9]="TABULATION",t[t.CARRIAGE_RETURN=13]="CARRIAGE_RETURN",t[t.LINE_FEED=10]="LINE_FEED",t[t.FORM_FEED=12]="FORM_FEED",t[t.SPACE=32]="SPACE",t[t.EXCLAMATION_MARK=33]="EXCLAMATION_MARK",t[t.QUOTATION_MARK=34]="QUOTATION_MARK",t[t.AMPERSAND=38]="AMPERSAND",t[t.APOSTROPHE=39]="APOSTROPHE",t[t.HYPHEN_MINUS=45]="HYPHEN_MINUS",t[t.SOLIDUS=47]="SOLIDUS",t[t.DIGIT_0=48]="DIGIT_0",t[t.DIGIT_9=57]="DIGIT_9",t[t.SEMICOLON=59]="SEMICOLON",t[t.LESS_THAN_SIGN=60]="LESS_THAN_SIGN",t[t.EQUALS_SIGN=61]="EQUALS_SIGN",t[t.GREATER_THAN_SIGN=62]="GREATER_THAN_SIGN",t[t.QUESTION_MARK=63]="QUESTION_MARK",t[t.LATIN_CAPITAL_A=65]="LATIN_CAPITAL_A",t[t.LATIN_CAPITAL_Z=90]="LATIN_CAPITAL_Z",t[t.RIGHT_SQUARE_BRACKET=93]="RIGHT_SQUARE_BRACKET",t[t.GRAVE_ACCENT=96]="GRAVE_ACCENT",t[t.LATIN_SMALL_A=97]="LATIN_SMALL_A",t[t.LATIN_SMALL_Z=122]="LATIN_SMALL_Z"})(I||(I={}));const Ir={DASH_DASH:"--",CDATA_START:"[CDATA[",DOCTYPE:"doctype",SCRIPT:"script",PUBLIC:"public",SYSTEM:"system"};function dk(t){return t>=55296&&t<=57343}function Y9(t){return t>=56320&&t<=57343}function K9(t,e){return(t-55296)*1024+9216+e}function hk(t){return t!==32&&t!==10&&t!==13&&t!==9&&t!==12&&t>=1&&t<=31||t>=127&&t<=159}function pk(t){return t>=64976&&t<=65007||q9.has(t)}var se;(function(t){t.controlCharacterInInputStream="control-character-in-input-stream",t.noncharacterInInputStream="noncharacter-in-input-stream",t.surrogateInInputStream="surrogate-in-input-stream",t.nonVoidHtmlElementStartTagWithTrailingSolidus="non-void-html-element-start-tag-with-trailing-solidus",t.endTagWithAttributes="end-tag-with-attributes",t.endTagWithTrailingSolidus="end-tag-with-trailing-solidus",t.unexpectedSolidusInTag="unexpected-solidus-in-tag",t.unexpectedNullCharacter="unexpected-null-character",t.unexpectedQuestionMarkInsteadOfTagName="unexpected-question-mark-instead-of-tag-name",t.invalidFirstCharacterOfTagName="invalid-first-character-of-tag-name",t.unexpectedEqualsSignBeforeAttributeName="unexpected-equals-sign-before-attribute-name",t.missingEndTagName="missing-end-tag-name",t.unexpectedCharacterInAttributeName="unexpected-character-in-attribute-name",t.unknownNamedCharacterReference="unknown-named-character-reference",t.missingSemicolonAfterCharacterReference="missing-semicolon-after-character-reference",t.unexpectedCharacterAfterDoctypeSystemIdentifier="unexpected-character-after-doctype-system-identifier",t.unexpectedCharacterInUnquotedAttributeValue="unexpected-character-in-unquoted-attribute-value",t.eofBeforeTagName="eof-before-tag-name",t.eofInTag="eof-in-tag",t.missingAttributeValue="missing-attribute-value",t.missingWhitespaceBetweenAttributes="missing-whitespace-between-attributes",t.missingWhitespaceAfterDoctypePublicKeyword="missing-whitespace-after-doctype-public-keyword",t.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers="missing-whitespace-between-doctype-public-and-system-identifiers",t.missingWhitespaceAfterDoctypeSystemKeyword="missing-whitespace-after-doctype-system-keyword",t.missingQuoteBeforeDoctypePublicIdentifier="missing-quote-before-doctype-public-identifier",t.missingQuoteBeforeDoctypeSystemIdentifier="missing-quote-before-doctype-system-identifier",t.missingDoctypePublicIdentifier="missing-doctype-public-identifier",t.missingDoctypeSystemIdentifier="missing-doctype-system-identifier",t.abruptDoctypePublicIdentifier="abrupt-doctype-public-identifier",t.abruptDoctypeSystemIdentifier="abrupt-doctype-system-identifier",t.cdataInHtmlContent="cdata-in-html-content",t.incorrectlyOpenedComment="incorrectly-opened-comment",t.eofInScriptHtmlCommentLikeText="eof-in-script-html-comment-like-text",t.eofInDoctype="eof-in-doctype",t.nestedComment="nested-comment",t.abruptClosingOfEmptyComment="abrupt-closing-of-empty-comment",t.eofInComment="eof-in-comment",t.incorrectlyClosedComment="incorrectly-closed-comment",t.eofInCdata="eof-in-cdata",t.absenceOfDigitsInNumericCharacterReference="absence-of-digits-in-numeric-character-reference",t.nullCharacterReference="null-character-reference",t.surrogateCharacterReference="surrogate-character-reference",t.characterReferenceOutsideUnicodeRange="character-reference-outside-unicode-range",t.controlCharacterReference="control-character-reference",t.noncharacterCharacterReference="noncharacter-character-reference",t.missingWhitespaceBeforeDoctypeName="missing-whitespace-before-doctype-name",t.missingDoctypeName="missing-doctype-name",t.invalidCharacterSequenceAfterDoctypeName="invalid-character-sequence-after-doctype-name",t.duplicateAttribute="duplicate-attribute",t.nonConformingDoctype="non-conforming-doctype",t.missingDoctype="missing-doctype",t.misplacedDoctype="misplaced-doctype",t.endTagWithoutMatchingOpenElement="end-tag-without-matching-open-element",t.closingOfElementWithOpenChildElements="closing-of-element-with-open-child-elements",t.disallowedContentInNoscriptInHead="disallowed-content-in-noscript-in-head",t.openElementsLeftAfterEof="open-elements-left-after-eof",t.abandonedHeadElementChild="abandoned-head-element-child",t.misplacedStartTagForHeadElement="misplaced-start-tag-for-head-element",t.nestedNoscriptInHead="nested-noscript-in-head",t.eofInElementThatCanContainOnlyText="eof-in-element-that-can-contain-only-text"})(se||(se={}));const X9=65536;class V9{constructor(e){this.handler=e,this.html="",this.pos=-1,this.lastGapPos=-2,this.gapStack=[],this.skipNextNewLine=!1,this.lastChunkWritten=!1,this.endOfChunkHit=!1,this.bufferWaterline=X9,this.isEol=!1,this.lineStartPos=0,this.droppedBufferSize=0,this.line=1,this.lastErrOffset=-1}get col(){return this.pos-this.lineStartPos+ +(this.lastGapPos!==this.pos)}get offset(){return this.droppedBufferSize+this.pos}getError(e,r){const{line:n,col:a,offset:o}=this,c=a+r,d=o+r;return{code:e,startLine:n,endLine:n,startCol:c,endCol:c,startOffset:d,endOffset:d}}_err(e){this.handler.onParseError&&this.lastErrOffset!==this.offset&&(this.lastErrOffset=this.offset,this.handler.onParseError(this.getError(e,0)))}_addGap(){this.gapStack.push(this.lastGapPos),this.lastGapPos=this.pos}_processSurrogate(e){if(this.pos!==this.html.length-1){const r=this.html.charCodeAt(this.pos+1);if(Y9(r))return this.pos++,this._addGap(),K9(e,r)}else if(!this.lastChunkWritten)return this.endOfChunkHit=!0,I.EOF;return this._err(se.surrogateInInputStream),e}willDropParsedChunk(){return this.pos>this.bufferWaterline}dropParsedChunk(){this.willDropParsedChunk()&&(this.html=this.html.substring(this.pos),this.lineStartPos-=this.pos,this.droppedBufferSize+=this.pos,this.pos=0,this.lastGapPos=-2,this.gapStack.length=0)}write(e,r){this.html.length>0?this.html+=e:this.html=e,this.endOfChunkHit=!1,this.lastChunkWritten=r}insertHtmlAtCurrentPos(e){this.html=this.html.substring(0,this.pos+1)+e+this.html.substring(this.pos+1),this.endOfChunkHit=!1}startsWith(e,r){if(this.pos+e.length>this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,!1;if(r)return this.html.startsWith(e,this.pos);for(let n=0;n<e.length;n++)if((this.html.charCodeAt(this.pos+n)|32)!==e.charCodeAt(n))return!1;return!0}peek(e){const r=this.pos+e;if(r>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,I.EOF;const n=this.html.charCodeAt(r);return n===I.CARRIAGE_RETURN?I.LINE_FEED:n}advance(){if(this.pos++,this.isEol&&(this.isEol=!1,this.line++,this.lineStartPos=this.pos),this.pos>=this.html.length)return this.endOfChunkHit=!this.lastChunkWritten,I.EOF;let e=this.html.charCodeAt(this.pos);return e===I.CARRIAGE_RETURN?(this.isEol=!0,this.skipNextNewLine=!0,I.LINE_FEED):e===I.LINE_FEED&&(this.isEol=!0,this.skipNextNewLine)?(this.line--,this.skipNextNewLine=!1,this._addGap(),this.advance()):(this.skipNextNewLine=!1,dk(e)&&(e=this._processSurrogate(e)),this.handler.onParseError===null||e>31&&e<127||e===I.LINE_FEED||e===I.CARRIAGE_RETURN||e>159&&e<64976||this._checkForProblematicCharacters(e),e)}_checkForProblematicCharacters(e){hk(e)?this._err(se.controlCharacterInInputStream):pk(e)&&this._err(se.noncharacterInInputStream)}retreat(e){for(this.pos-=e;this.pos<this.lastGapPos;)this.lastGapPos=this.gapStack.pop(),this.pos--;this.isEol=!1}}var ot;(function(t){t[t.CHARACTER=0]="CHARACTER",t[t.NULL_CHARACTER=1]="NULL_CHARACTER",t[t.WHITESPACE_CHARACTER=2]="WHITESPACE_CHARACTER",t[t.START_TAG=3]="START_TAG",t[t.END_TAG=4]="END_TAG",t[t.COMMENT=5]="COMMENT",t[t.DOCTYPE=6]="DOCTYPE",t[t.EOF=7]="EOF",t[t.HIBERNATION=8]="HIBERNATION"})(ot||(ot={}));function mk(t,e){for(let r=t.attrs.length-1;r>=0;r--)if(t.attrs[r].name===e)return t.attrs[r].value;return null}const Q9=new Uint16Array('\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map(t=>t.charCodeAt(0))),J9=new Map([[0,65533],[128,8364],[130,8218],[131,402],[132,8222],[133,8230],[134,8224],[135,8225],[136,710],[137,8240],[138,352],[139,8249],[140,338],[142,381],[145,8216],[146,8217],[147,8220],[148,8221],[149,8226],[150,8211],[151,8212],[152,732],[153,8482],[154,353],[155,8250],[156,339],[158,382],[159,376]]);function Z9(t){var e;return t>=55296&&t<=57343||t>1114111?65533:(e=J9.get(t))!==null&&e!==void 0?e:t}var er;(function(t){t[t.NUM=35]="NUM",t[t.SEMI=59]="SEMI",t[t.EQUALS=61]="EQUALS",t[t.ZERO=48]="ZERO",t[t.NINE=57]="NINE",t[t.LOWER_A=97]="LOWER_A",t[t.LOWER_F=102]="LOWER_F",t[t.LOWER_X=120]="LOWER_X",t[t.LOWER_Z=122]="LOWER_Z",t[t.UPPER_A=65]="UPPER_A",t[t.UPPER_F=70]="UPPER_F",t[t.UPPER_Z=90]="UPPER_Z"})(er||(er={}));const eU=32;var xi;(function(t){t[t.VALUE_LENGTH=49152]="VALUE_LENGTH",t[t.BRANCH_LENGTH=16256]="BRANCH_LENGTH",t[t.JUMP_TABLE=127]="JUMP_TABLE"})(xi||(xi={}));function hp(t){return t>=er.ZERO&&t<=er.NINE}function tU(t){return t>=er.UPPER_A&&t<=er.UPPER_F||t>=er.LOWER_A&&t<=er.LOWER_F}function rU(t){return t>=er.UPPER_A&&t<=er.UPPER_Z||t>=er.LOWER_A&&t<=er.LOWER_Z||hp(t)}function nU(t){return t===er.EQUALS||rU(t)}var tr;(function(t){t[t.EntityStart=0]="EntityStart",t[t.NumericStart=1]="NumericStart",t[t.NumericDecimal=2]="NumericDecimal",t[t.NumericHex=3]="NumericHex",t[t.NamedEntity=4]="NamedEntity"})(tr||(tr={}));var Qn;(function(t){t[t.Legacy=0]="Legacy",t[t.Strict=1]="Strict",t[t.Attribute=2]="Attribute"})(Qn||(Qn={}));class iU{constructor(e,r,n){this.decodeTree=e,this.emitCodePoint=r,this.errors=n,this.state=tr.EntityStart,this.consumed=1,this.result=0,this.treeIndex=0,this.excess=1,this.decodeMode=Qn.Strict}startEntity(e){this.decodeMode=e,this.state=tr.EntityStart,this.result=0,this.treeIndex=0,this.excess=1,this.consumed=1}write(e,r){switch(this.state){case tr.EntityStart:return e.charCodeAt(r)===er.NUM?(this.state=tr.NumericStart,this.consumed+=1,this.stateNumericStart(e,r+1)):(this.state=tr.NamedEntity,this.stateNamedEntity(e,r));case tr.NumericStart:return this.stateNumericStart(e,r);case tr.NumericDecimal:return this.stateNumericDecimal(e,r);case tr.NumericHex:return this.stateNumericHex(e,r);case tr.NamedEntity:return this.stateNamedEntity(e,r)}}stateNumericStart(e,r){return r>=e.length?-1:(e.charCodeAt(r)|eU)===er.LOWER_X?(this.state=tr.NumericHex,this.consumed+=1,this.stateNumericHex(e,r+1)):(this.state=tr.NumericDecimal,this.stateNumericDecimal(e,r))}addToNumericResult(e,r,n,a){if(r!==n){const o=n-r;this.result=this.result*Math.pow(a,o)+Number.parseInt(e.substr(r,o),a),this.consumed+=o}}stateNumericHex(e,r){const n=r;for(;r<e.length;){const a=e.charCodeAt(r);if(hp(a)||tU(a))r+=1;else return this.addToNumericResult(e,n,r,16),this.emitNumericEntity(a,3)}return this.addToNumericResult(e,n,r,16),-1}stateNumericDecimal(e,r){const n=r;for(;r<e.length;){const a=e.charCodeAt(r);if(hp(a))r+=1;else return this.addToNumericResult(e,n,r,10),this.emitNumericEntity(a,2)}return this.addToNumericResult(e,n,r,10),-1}emitNumericEntity(e,r){var n;if(this.consumed<=r)return(n=this.errors)===null||n===void 0||n.absenceOfDigitsInNumericCharacterReference(this.consumed),0;if(e===er.SEMI)this.consumed+=1;else if(this.decodeMode===Qn.Strict)return 0;return this.emitCodePoint(Z9(this.result),this.consumed),this.errors&&(e!==er.SEMI&&this.errors.missingSemicolonAfterCharacterReference(),this.errors.validateNumericCharacterReference(this.result)),this.consumed}stateNamedEntity(e,r){const{decodeTree:n}=this;let a=n[this.treeIndex],o=(a&xi.VALUE_LENGTH)>>14;for(;r<e.length;r++,this.excess++){const c=e.charCodeAt(r);if(this.treeIndex=aU(n,a,this.treeIndex+Math.max(1,o),c),this.treeIndex<0)return this.result===0||this.decodeMode===Qn.Attribute&&(o===0||nU(c))?0:this.emitNotTerminatedNamedEntity();if(a=n[this.treeIndex],o=(a&xi.VALUE_LENGTH)>>14,o!==0){if(c===er.SEMI)return this.emitNamedEntityData(this.treeIndex,o,this.consumed+this.excess);this.decodeMode!==Qn.Strict&&(this.result=this.treeIndex,this.consumed+=this.excess,this.excess=0)}}return-1}emitNotTerminatedNamedEntity(){var e;const{result:r,decodeTree:n}=this,a=(n[r]&xi.VALUE_LENGTH)>>14;return this.emitNamedEntityData(r,a,this.consumed),(e=this.errors)===null||e===void 0||e.missingSemicolonAfterCharacterReference(),this.consumed}emitNamedEntityData(e,r,n){const{decodeTree:a}=this;return this.emitCodePoint(r===1?a[e]&~xi.VALUE_LENGTH:a[e+1],n),r===3&&this.emitCodePoint(a[e+2],n),n}end(){var e;switch(this.state){case tr.NamedEntity:return this.result!==0&&(this.decodeMode!==Qn.Attribute||this.result===this.treeIndex)?this.emitNotTerminatedNamedEntity():0;case tr.NumericDecimal:return this.emitNumericEntity(0,2);case tr.NumericHex:return this.emitNumericEntity(0,3);case tr.NumericStart:return(e=this.errors)===null||e===void 0||e.absenceOfDigitsInNumericCharacterReference(this.consumed),0;case tr.EntityStart:return 0}}}function aU(t,e,r,n){const a=(e&xi.BRANCH_LENGTH)>>7,o=e&xi.JUMP_TABLE;if(a===0)return o!==0&&n===o?r:-1;if(o){const p=n-o;return p<0||p>=a?-1:t[r+p]-1}let c=r,d=c+a-1;for(;c<=d;){const p=c+d>>>1,v=t[p];if(v<n)c=p+1;else if(v>n)d=p-1;else return t[p+a]}return-1}var pe;(function(t){t.HTML="http://www.w3.org/1999/xhtml",t.MATHML="http://www.w3.org/1998/Math/MathML",t.SVG="http://www.w3.org/2000/svg",t.XLINK="http://www.w3.org/1999/xlink",t.XML="http://www.w3.org/XML/1998/namespace",t.XMLNS="http://www.w3.org/2000/xmlns/"})(pe||(pe={}));var _a;(function(t){t.TYPE="type",t.ACTION="action",t.ENCODING="encoding",t.PROMPT="prompt",t.NAME="name",t.COLOR="color",t.FACE="face",t.SIZE="size"})(_a||(_a={}));var Qr;(function(t){t.NO_QUIRKS="no-quirks",t.QUIRKS="quirks",t.LIMITED_QUIRKS="limited-quirks"})(Qr||(Qr={}));var K;(function(t){t.A="a",t.ADDRESS="address",t.ANNOTATION_XML="annotation-xml",t.APPLET="applet",t.AREA="area",t.ARTICLE="article",t.ASIDE="aside",t.B="b",t.BASE="base",t.BASEFONT="basefont",t.BGSOUND="bgsound",t.BIG="big",t.BLOCKQUOTE="blockquote",t.BODY="body",t.BR="br",t.BUTTON="button",t.CAPTION="caption",t.CENTER="center",t.CODE="code",t.COL="col",t.COLGROUP="colgroup",t.DD="dd",t.DESC="desc",t.DETAILS="details",t.DIALOG="dialog",t.DIR="dir",t.DIV="div",t.DL="dl",t.DT="dt",t.EM="em",t.EMBED="embed",t.FIELDSET="fieldset",t.FIGCAPTION="figcaption",t.FIGURE="figure",t.FONT="font",t.FOOTER="footer",t.FOREIGN_OBJECT="foreignObject",t.FORM="form",t.FRAME="frame",t.FRAMESET="frameset",t.H1="h1",t.H2="h2",t.H3="h3",t.H4="h4",t.H5="h5",t.H6="h6",t.HEAD="head",t.HEADER="header",t.HGROUP="hgroup",t.HR="hr",t.HTML="html",t.I="i",t.IMG="img",t.IMAGE="image",t.INPUT="input",t.IFRAME="iframe",t.KEYGEN="keygen",t.LABEL="label",t.LI="li",t.LINK="link",t.LISTING="listing",t.MAIN="main",t.MALIGNMARK="malignmark",t.MARQUEE="marquee",t.MATH="math",t.MENU="menu",t.META="meta",t.MGLYPH="mglyph",t.MI="mi",t.MO="mo",t.MN="mn",t.MS="ms",t.MTEXT="mtext",t.NAV="nav",t.NOBR="nobr",t.NOFRAMES="noframes",t.NOEMBED="noembed",t.NOSCRIPT="noscript",t.OBJECT="object",t.OL="ol",t.OPTGROUP="optgroup",t.OPTION="option",t.P="p",t.PARAM="param",t.PLAINTEXT="plaintext",t.PRE="pre",t.RB="rb",t.RP="rp",t.RT="rt",t.RTC="rtc",t.RUBY="ruby",t.S="s",t.SCRIPT="script",t.SEARCH="search",t.SECTION="section",t.SELECT="select",t.SOURCE="source",t.SMALL="small",t.SPAN="span",t.STRIKE="strike",t.STRONG="strong",t.STYLE="style",t.SUB="sub",t.SUMMARY="summary",t.SUP="sup",t.TABLE="table",t.TBODY="tbody",t.TEMPLATE="template",t.TEXTAREA="textarea",t.TFOOT="tfoot",t.TD="td",t.TH="th",t.THEAD="thead",t.TITLE="title",t.TR="tr",t.TRACK="track",t.TT="tt",t.U="u",t.UL="ul",t.SVG="svg",t.VAR="var",t.WBR="wbr",t.XMP="xmp"})(K||(K={}));var m;(function(t){t[t.UNKNOWN=0]="UNKNOWN",t[t.A=1]="A",t[t.ADDRESS=2]="ADDRESS",t[t.ANNOTATION_XML=3]="ANNOTATION_XML",t[t.APPLET=4]="APPLET",t[t.AREA=5]="AREA",t[t.ARTICLE=6]="ARTICLE",t[t.ASIDE=7]="ASIDE",t[t.B=8]="B",t[t.BASE=9]="BASE",t[t.BASEFONT=10]="BASEFONT",t[t.BGSOUND=11]="BGSOUND",t[t.BIG=12]="BIG",t[t.BLOCKQUOTE=13]="BLOCKQUOTE",t[t.BODY=14]="BODY",t[t.BR=15]="BR",t[t.BUTTON=16]="BUTTON",t[t.CAPTION=17]="CAPTION",t[t.CENTER=18]="CENTER",t[t.CODE=19]="CODE",t[t.COL=20]="COL",t[t.COLGROUP=21]="COLGROUP",t[t.DD=22]="DD",t[t.DESC=23]="DESC",t[t.DETAILS=24]="DETAILS",t[t.DIALOG=25]="DIALOG",t[t.DIR=26]="DIR",t[t.DIV=27]="DIV",t[t.DL=28]="DL",t[t.DT=29]="DT",t[t.EM=30]="EM",t[t.EMBED=31]="EMBED",t[t.FIELDSET=32]="FIELDSET",t[t.FIGCAPTION=33]="FIGCAPTION",t[t.FIGURE=34]="FIGURE",t[t.FONT=35]="FONT",t[t.FOOTER=36]="FOOTER",t[t.FOREIGN_OBJECT=37]="FOREIGN_OBJECT",t[t.FORM=38]="FORM",t[t.FRAME=39]="FRAME",t[t.FRAMESET=40]="FRAMESET",t[t.H1=41]="H1",t[t.H2=42]="H2",t[t.H3=43]="H3",t[t.H4=44]="H4",t[t.H5=45]="H5",t[t.H6=46]="H6",t[t.HEAD=47]="HEAD",t[t.HEADER=48]="HEADER",t[t.HGROUP=49]="HGROUP",t[t.HR=50]="HR",t[t.HTML=51]="HTML",t[t.I=52]="I",t[t.IMG=53]="IMG",t[t.IMAGE=54]="IMAGE",t[t.INPUT=55]="INPUT",t[t.IFRAME=56]="IFRAME",t[t.KEYGEN=57]="KEYGEN",t[t.LABEL=58]="LABEL",t[t.LI=59]="LI",t[t.LINK=60]="LINK",t[t.LISTING=61]="LISTING",t[t.MAIN=62]="MAIN",t[t.MALIGNMARK=63]="MALIGNMARK",t[t.MARQUEE=64]="MARQUEE",t[t.MATH=65]="MATH",t[t.MENU=66]="MENU",t[t.META=67]="META",t[t.MGLYPH=68]="MGLYPH",t[t.MI=69]="MI",t[t.MO=70]="MO",t[t.MN=71]="MN",t[t.MS=72]="MS",t[t.MTEXT=73]="MTEXT",t[t.NAV=74]="NAV",t[t.NOBR=75]="NOBR",t[t.NOFRAMES=76]="NOFRAMES",t[t.NOEMBED=77]="NOEMBED",t[t.NOSCRIPT=78]="NOSCRIPT",t[t.OBJECT=79]="OBJECT",t[t.OL=80]="OL",t[t.OPTGROUP=81]="OPTGROUP",t[t.OPTION=82]="OPTION",t[t.P=83]="P",t[t.PARAM=84]="PARAM",t[t.PLAINTEXT=85]="PLAINTEXT",t[t.PRE=86]="PRE",t[t.RB=87]="RB",t[t.RP=88]="RP",t[t.RT=89]="RT",t[t.RTC=90]="RTC",t[t.RUBY=91]="RUBY",t[t.S=92]="S",t[t.SCRIPT=93]="SCRIPT",t[t.SEARCH=94]="SEARCH",t[t.SECTION=95]="SECTION",t[t.SELECT=96]="SELECT",t[t.SOURCE=97]="SOURCE",t[t.SMALL=98]="SMALL",t[t.SPAN=99]="SPAN",t[t.STRIKE=100]="STRIKE",t[t.STRONG=101]="STRONG",t[t.STYLE=102]="STYLE",t[t.SUB=103]="SUB",t[t.SUMMARY=104]="SUMMARY",t[t.SUP=105]="SUP",t[t.TABLE=106]="TABLE",t[t.TBODY=107]="TBODY",t[t.TEMPLATE=108]="TEMPLATE",t[t.TEXTAREA=109]="TEXTAREA",t[t.TFOOT=110]="TFOOT",t[t.TD=111]="TD",t[t.TH=112]="TH",t[t.THEAD=113]="THEAD",t[t.TITLE=114]="TITLE",t[t.TR=115]="TR",t[t.TRACK=116]="TRACK",t[t.TT=117]="TT",t[t.U=118]="U",t[t.UL=119]="UL",t[t.SVG=120]="SVG",t[t.VAR=121]="VAR",t[t.WBR=122]="WBR",t[t.XMP=123]="XMP"})(m||(m={}));const sU=new Map([[K.A,m.A],[K.ADDRESS,m.ADDRESS],[K.ANNOTATION_XML,m.ANNOTATION_XML],[K.APPLET,m.APPLET],[K.AREA,m.AREA],[K.ARTICLE,m.ARTICLE],[K.ASIDE,m.ASIDE],[K.B,m.B],[K.BASE,m.BASE],[K.BASEFONT,m.BASEFONT],[K.BGSOUND,m.BGSOUND],[K.BIG,m.BIG],[K.BLOCKQUOTE,m.BLOCKQUOTE],[K.BODY,m.BODY],[K.BR,m.BR],[K.BUTTON,m.BUTTON],[K.CAPTION,m.CAPTION],[K.CENTER,m.CENTER],[K.CODE,m.CODE],[K.COL,m.COL],[K.COLGROUP,m.COLGROUP],[K.DD,m.DD],[K.DESC,m.DESC],[K.DETAILS,m.DETAILS],[K.DIALOG,m.DIALOG],[K.DIR,m.DIR],[K.DIV,m.DIV],[K.DL,m.DL],[K.DT,m.DT],[K.EM,m.EM],[K.EMBED,m.EMBED],[K.FIELDSET,m.FIELDSET],[K.FIGCAPTION,m.FIGCAPTION],[K.FIGURE,m.FIGURE],[K.FONT,m.FONT],[K.FOOTER,m.FOOTER],[K.FOREIGN_OBJECT,m.FOREIGN_OBJECT],[K.FORM,m.FORM],[K.FRAME,m.FRAME],[K.FRAMESET,m.FRAMESET],[K.H1,m.H1],[K.H2,m.H2],[K.H3,m.H3],[K.H4,m.H4],[K.H5,m.H5],[K.H6,m.H6],[K.HEAD,m.HEAD],[K.HEADER,m.HEADER],[K.HGROUP,m.HGROUP],[K.HR,m.HR],[K.HTML,m.HTML],[K.I,m.I],[K.IMG,m.IMG],[K.IMAGE,m.IMAGE],[K.INPUT,m.INPUT],[K.IFRAME,m.IFRAME],[K.KEYGEN,m.KEYGEN],[K.LABEL,m.LABEL],[K.LI,m.LI],[K.LINK,m.LINK],[K.LISTING,m.LISTING],[K.MAIN,m.MAIN],[K.MALIGNMARK,m.MALIGNMARK],[K.MARQUEE,m.MARQUEE],[K.MATH,m.MATH],[K.MENU,m.MENU],[K.META,m.META],[K.MGLYPH,m.MGLYPH],[K.MI,m.MI],[K.MO,m.MO],[K.MN,m.MN],[K.MS,m.MS],[K.MTEXT,m.MTEXT],[K.NAV,m.NAV],[K.NOBR,m.NOBR],[K.NOFRAMES,m.NOFRAMES],[K.NOEMBED,m.NOEMBED],[K.NOSCRIPT,m.NOSCRIPT],[K.OBJECT,m.OBJECT],[K.OL,m.OL],[K.OPTGROUP,m.OPTGROUP],[K.OPTION,m.OPTION],[K.P,m.P],[K.PARAM,m.PARAM],[K.PLAINTEXT,m.PLAINTEXT],[K.PRE,m.PRE],[K.RB,m.RB],[K.RP,m.RP],[K.RT,m.RT],[K.RTC,m.RTC],[K.RUBY,m.RUBY],[K.S,m.S],[K.SCRIPT,m.SCRIPT],[K.SEARCH,m.SEARCH],[K.SECTION,m.SECTION],[K.SELECT,m.SELECT],[K.SOURCE,m.SOURCE],[K.SMALL,m.SMALL],[K.SPAN,m.SPAN],[K.STRIKE,m.STRIKE],[K.STRONG,m.STRONG],[K.STYLE,m.STYLE],[K.SUB,m.SUB],[K.SUMMARY,m.SUMMARY],[K.SUP,m.SUP],[K.TABLE,m.TABLE],[K.TBODY,m.TBODY],[K.TEMPLATE,m.TEMPLATE],[K.TEXTAREA,m.TEXTAREA],[K.TFOOT,m.TFOOT],[K.TD,m.TD],[K.TH,m.TH],[K.THEAD,m.THEAD],[K.TITLE,m.TITLE],[K.TR,m.TR],[K.TRACK,m.TRACK],[K.TT,m.TT],[K.U,m.U],[K.UL,m.UL],[K.SVG,m.SVG],[K.VAR,m.VAR],[K.WBR,m.WBR],[K.XMP,m.XMP]]);function Vl(t){var e;return(e=sU.get(t))!==null&&e!==void 0?e:m.UNKNOWN}const _e=m,oU={[pe.HTML]:new Set([_e.ADDRESS,_e.APPLET,_e.AREA,_e.ARTICLE,_e.ASIDE,_e.BASE,_e.BASEFONT,_e.BGSOUND,_e.BLOCKQUOTE,_e.BODY,_e.BR,_e.BUTTON,_e.CAPTION,_e.CENTER,_e.COL,_e.COLGROUP,_e.DD,_e.DETAILS,_e.DIR,_e.DIV,_e.DL,_e.DT,_e.EMBED,_e.FIELDSET,_e.FIGCAPTION,_e.FIGURE,_e.FOOTER,_e.FORM,_e.FRAME,_e.FRAMESET,_e.H1,_e.H2,_e.H3,_e.H4,_e.H5,_e.H6,_e.HEAD,_e.HEADER,_e.HGROUP,_e.HR,_e.HTML,_e.IFRAME,_e.IMG,_e.INPUT,_e.LI,_e.LINK,_e.LISTING,_e.MAIN,_e.MARQUEE,_e.MENU,_e.META,_e.NAV,_e.NOEMBED,_e.NOFRAMES,_e.NOSCRIPT,_e.OBJECT,_e.OL,_e.P,_e.PARAM,_e.PLAINTEXT,_e.PRE,_e.SCRIPT,_e.SECTION,_e.SELECT,_e.SOURCE,_e.STYLE,_e.SUMMARY,_e.TABLE,_e.TBODY,_e.TD,_e.TEMPLATE,_e.TEXTAREA,_e.TFOOT,_e.TH,_e.THEAD,_e.TITLE,_e.TR,_e.TRACK,_e.UL,_e.WBR,_e.XMP]),[pe.MATHML]:new Set([_e.MI,_e.MO,_e.MN,_e.MS,_e.MTEXT,_e.ANNOTATION_XML]),[pe.SVG]:new Set([_e.TITLE,_e.FOREIGN_OBJECT,_e.DESC]),[pe.XLINK]:new Set,[pe.XML]:new Set,[pe.XMLNS]:new Set},pp=new Set([_e.H1,_e.H2,_e.H3,_e.H4,_e.H5,_e.H6]);K.STYLE,K.SCRIPT,K.XMP,K.IFRAME,K.NOEMBED,K.NOFRAMES,K.PLAINTEXT;var D;(function(t){t[t.DATA=0]="DATA",t[t.RCDATA=1]="RCDATA",t[t.RAWTEXT=2]="RAWTEXT",t[t.SCRIPT_DATA=3]="SCRIPT_DATA",t[t.PLAINTEXT=4]="PLAINTEXT",t[t.TAG_OPEN=5]="TAG_OPEN",t[t.END_TAG_OPEN=6]="END_TAG_OPEN",t[t.TAG_NAME=7]="TAG_NAME",t[t.RCDATA_LESS_THAN_SIGN=8]="RCDATA_LESS_THAN_SIGN",t[t.RCDATA_END_TAG_OPEN=9]="RCDATA_END_TAG_OPEN",t[t.RCDATA_END_TAG_NAME=10]="RCDATA_END_TAG_NAME",t[t.RAWTEXT_LESS_THAN_SIGN=11]="RAWTEXT_LESS_THAN_SIGN",t[t.RAWTEXT_END_TAG_OPEN=12]="RAWTEXT_END_TAG_OPEN",t[t.RAWTEXT_END_TAG_NAME=13]="RAWTEXT_END_TAG_NAME",t[t.SCRIPT_DATA_LESS_THAN_SIGN=14]="SCRIPT_DATA_LESS_THAN_SIGN",t[t.SCRIPT_DATA_END_TAG_OPEN=15]="SCRIPT_DATA_END_TAG_OPEN",t[t.SCRIPT_DATA_END_TAG_NAME=16]="SCRIPT_DATA_END_TAG_NAME",t[t.SCRIPT_DATA_ESCAPE_START=17]="SCRIPT_DATA_ESCAPE_START",t[t.SCRIPT_DATA_ESCAPE_START_DASH=18]="SCRIPT_DATA_ESCAPE_START_DASH",t[t.SCRIPT_DATA_ESCAPED=19]="SCRIPT_DATA_ESCAPED",t[t.SCRIPT_DATA_ESCAPED_DASH=20]="SCRIPT_DATA_ESCAPED_DASH",t[t.SCRIPT_DATA_ESCAPED_DASH_DASH=21]="SCRIPT_DATA_ESCAPED_DASH_DASH",t[t.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN=22]="SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN",t[t.SCRIPT_DATA_ESCAPED_END_TAG_OPEN=23]="SCRIPT_DATA_ESCAPED_END_TAG_OPEN",t[t.SCRIPT_DATA_ESCAPED_END_TAG_NAME=24]="SCRIPT_DATA_ESCAPED_END_TAG_NAME",t[t.SCRIPT_DATA_DOUBLE_ESCAPE_START=25]="SCRIPT_DATA_DOUBLE_ESCAPE_START",t[t.SCRIPT_DATA_DOUBLE_ESCAPED=26]="SCRIPT_DATA_DOUBLE_ESCAPED",t[t.SCRIPT_DATA_DOUBLE_ESCAPED_DASH=27]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH",t[t.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH=28]="SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH",t[t.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN=29]="SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN",t[t.SCRIPT_DATA_DOUBLE_ESCAPE_END=30]="SCRIPT_DATA_DOUBLE_ESCAPE_END",t[t.BEFORE_ATTRIBUTE_NAME=31]="BEFORE_ATTRIBUTE_NAME",t[t.ATTRIBUTE_NAME=32]="ATTRIBUTE_NAME",t[t.AFTER_ATTRIBUTE_NAME=33]="AFTER_ATTRIBUTE_NAME",t[t.BEFORE_ATTRIBUTE_VALUE=34]="BEFORE_ATTRIBUTE_VALUE",t[t.ATTRIBUTE_VALUE_DOUBLE_QUOTED=35]="ATTRIBUTE_VALUE_DOUBLE_QUOTED",t[t.ATTRIBUTE_VALUE_SINGLE_QUOTED=36]="ATTRIBUTE_VALUE_SINGLE_QUOTED",t[t.ATTRIBUTE_VALUE_UNQUOTED=37]="ATTRIBUTE_VALUE_UNQUOTED",t[t.AFTER_ATTRIBUTE_VALUE_QUOTED=38]="AFTER_ATTRIBUTE_VALUE_QUOTED",t[t.SELF_CLOSING_START_TAG=39]="SELF_CLOSING_START_TAG",t[t.BOGUS_COMMENT=40]="BOGUS_COMMENT",t[t.MARKUP_DECLARATION_OPEN=41]="MARKUP_DECLARATION_OPEN",t[t.COMMENT_START=42]="COMMENT_START",t[t.COMMENT_START_DASH=43]="COMMENT_START_DASH",t[t.COMMENT=44]="COMMENT",t[t.COMMENT_LESS_THAN_SIGN=45]="COMMENT_LESS_THAN_SIGN",t[t.COMMENT_LESS_THAN_SIGN_BANG=46]="COMMENT_LESS_THAN_SIGN_BANG",t[t.COMMENT_LESS_THAN_SIGN_BANG_DASH=47]="COMMENT_LESS_THAN_SIGN_BANG_DASH",t[t.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH=48]="COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH",t[t.COMMENT_END_DASH=49]="COMMENT_END_DASH",t[t.COMMENT_END=50]="COMMENT_END",t[t.COMMENT_END_BANG=51]="COMMENT_END_BANG",t[t.DOCTYPE=52]="DOCTYPE",t[t.BEFORE_DOCTYPE_NAME=53]="BEFORE_DOCTYPE_NAME",t[t.DOCTYPE_NAME=54]="DOCTYPE_NAME",t[t.AFTER_DOCTYPE_NAME=55]="AFTER_DOCTYPE_NAME",t[t.AFTER_DOCTYPE_PUBLIC_KEYWORD=56]="AFTER_DOCTYPE_PUBLIC_KEYWORD",t[t.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER=57]="BEFORE_DOCTYPE_PUBLIC_IDENTIFIER",t[t.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED=58]="DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED",t[t.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED=59]="DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED",t[t.AFTER_DOCTYPE_PUBLIC_IDENTIFIER=60]="AFTER_DOCTYPE_PUBLIC_IDENTIFIER",t[t.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS=61]="BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS",t[t.AFTER_DOCTYPE_SYSTEM_KEYWORD=62]="AFTER_DOCTYPE_SYSTEM_KEYWORD",t[t.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER=63]="BEFORE_DOCTYPE_SYSTEM_IDENTIFIER",t[t.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED=64]="DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED",t[t.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED=65]="DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED",t[t.AFTER_DOCTYPE_SYSTEM_IDENTIFIER=66]="AFTER_DOCTYPE_SYSTEM_IDENTIFIER",t[t.BOGUS_DOCTYPE=67]="BOGUS_DOCTYPE",t[t.CDATA_SECTION=68]="CDATA_SECTION",t[t.CDATA_SECTION_BRACKET=69]="CDATA_SECTION_BRACKET",t[t.CDATA_SECTION_END=70]="CDATA_SECTION_END",t[t.CHARACTER_REFERENCE=71]="CHARACTER_REFERENCE",t[t.AMBIGUOUS_AMPERSAND=72]="AMBIGUOUS_AMPERSAND"})(D||(D={}));const Lr={DATA:D.DATA,RCDATA:D.RCDATA,RAWTEXT:D.RAWTEXT,SCRIPT_DATA:D.SCRIPT_DATA,PLAINTEXT:D.PLAINTEXT,CDATA_SECTION:D.CDATA_SECTION};function uU(t){return t>=I.DIGIT_0&&t<=I.DIGIT_9}function jo(t){return t>=I.LATIN_CAPITAL_A&&t<=I.LATIN_CAPITAL_Z}function lU(t){return t>=I.LATIN_SMALL_A&&t<=I.LATIN_SMALL_Z}function Ai(t){return lU(t)||jo(t)}function vk(t){return Ai(t)||uU(t)}function Ql(t){return t+32}function gk(t){return t===I.SPACE||t===I.LINE_FEED||t===I.TABULATION||t===I.FORM_FEED}function _k(t){return gk(t)||t===I.SOLIDUS||t===I.GREATER_THAN_SIGN}function cU(t){return t===I.NULL?se.nullCharacterReference:t>1114111?se.characterReferenceOutsideUnicodeRange:dk(t)?se.surrogateCharacterReference:pk(t)?se.noncharacterCharacterReference:hk(t)||t===I.CARRIAGE_RETURN?se.controlCharacterReference:null}class fU{constructor(e,r){this.options=e,this.handler=r,this.paused=!1,this.inLoop=!1,this.inForeignNode=!1,this.lastStartTagName="",this.active=!1,this.state=D.DATA,this.returnState=D.DATA,this.entityStartPos=0,this.consumedAfterSnapshot=-1,this.currentCharacterToken=null,this.currentToken=null,this.currentAttr={name:"",value:""},this.preprocessor=new V9(r),this.currentLocation=this.getCurrentLocation(-1),this.entityDecoder=new iU(Q9,(n,a)=>{this.preprocessor.pos=this.entityStartPos+a-1,this._flushCodePointConsumedAsCharacterReference(n)},r.onParseError?{missingSemicolonAfterCharacterReference:()=>{this._err(se.missingSemicolonAfterCharacterReference,1)},absenceOfDigitsInNumericCharacterReference:n=>{this._err(se.absenceOfDigitsInNumericCharacterReference,this.entityStartPos-this.preprocessor.pos+n)},validateNumericCharacterReference:n=>{const a=cU(n);a&&this._err(a,1)}}:void 0)}_err(e,r=0){var n,a;(a=(n=this.handler).onParseError)===null||a===void 0||a.call(n,this.preprocessor.getError(e,r))}getCurrentLocation(e){return this.options.sourceCodeLocationInfo?{startLine:this.preprocessor.line,startCol:this.preprocessor.col-e,startOffset:this.preprocessor.offset-e,endLine:-1,endCol:-1,endOffset:-1}:null}_runParsingLoop(){if(!this.inLoop){for(this.inLoop=!0;this.active&&!this.paused;){this.consumedAfterSnapshot=0;const e=this._consume();this._ensureHibernation()||this._callState(e)}this.inLoop=!1}}pause(){this.paused=!0}resume(e){if(!this.paused)throw new Error("Parser was already resumed");this.paused=!1,!this.inLoop&&(this._runParsingLoop(),this.paused||e?.())}write(e,r,n){this.active=!0,this.preprocessor.write(e,r),this._runParsingLoop(),this.paused||n?.()}insertHtmlAtCurrentPos(e){this.active=!0,this.preprocessor.insertHtmlAtCurrentPos(e),this._runParsingLoop()}_ensureHibernation(){return this.preprocessor.endOfChunkHit?(this.preprocessor.retreat(this.consumedAfterSnapshot),this.consumedAfterSnapshot=0,this.active=!1,!0):!1}_consume(){return this.consumedAfterSnapshot++,this.preprocessor.advance()}_advanceBy(e){this.consumedAfterSnapshot+=e;for(let r=0;r<e;r++)this.preprocessor.advance()}_consumeSequenceIfMatch(e,r){return this.preprocessor.startsWith(e,r)?(this._advanceBy(e.length-1),!0):!1}_createStartTagToken(){this.currentToken={type:ot.START_TAG,tagName:"",tagID:m.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(1)}}_createEndTagToken(){this.currentToken={type:ot.END_TAG,tagName:"",tagID:m.UNKNOWN,selfClosing:!1,ackSelfClosing:!1,attrs:[],location:this.getCurrentLocation(2)}}_createCommentToken(e){this.currentToken={type:ot.COMMENT,data:"",location:this.getCurrentLocation(e)}}_createDoctypeToken(e){this.currentToken={type:ot.DOCTYPE,name:e,forceQuirks:!1,publicId:null,systemId:null,location:this.currentLocation}}_createCharacterToken(e,r){this.currentCharacterToken={type:e,chars:r,location:this.currentLocation}}_createAttr(e){this.currentAttr={name:e,value:""},this.currentLocation=this.getCurrentLocation(0)}_leaveAttrName(){var e,r;const n=this.currentToken;if(mk(n,this.currentAttr.name)===null){if(n.attrs.push(this.currentAttr),n.location&&this.currentLocation){const a=(e=(r=n.location).attrs)!==null&&e!==void 0?e:r.attrs=Object.create(null);a[this.currentAttr.name]=this.currentLocation,this._leaveAttrValue()}}else this._err(se.duplicateAttribute)}_leaveAttrValue(){this.currentLocation&&(this.currentLocation.endLine=this.preprocessor.line,this.currentLocation.endCol=this.preprocessor.col,this.currentLocation.endOffset=this.preprocessor.offset)}prepareToken(e){this._emitCurrentCharacterToken(e.location),this.currentToken=null,e.location&&(e.location.endLine=this.preprocessor.line,e.location.endCol=this.preprocessor.col+1,e.location.endOffset=this.preprocessor.offset+1),this.currentLocation=this.getCurrentLocation(-1)}emitCurrentTagToken(){const e=this.currentToken;this.prepareToken(e),e.tagID=Vl(e.tagName),e.type===ot.START_TAG?(this.lastStartTagName=e.tagName,this.handler.onStartTag(e)):(e.attrs.length>0&&this._err(se.endTagWithAttributes),e.selfClosing&&this._err(se.endTagWithTrailingSolidus),this.handler.onEndTag(e)),this.preprocessor.dropParsedChunk()}emitCurrentComment(e){this.prepareToken(e),this.handler.onComment(e),this.preprocessor.dropParsedChunk()}emitCurrentDoctype(e){this.prepareToken(e),this.handler.onDoctype(e),this.preprocessor.dropParsedChunk()}_emitCurrentCharacterToken(e){if(this.currentCharacterToken){switch(e&&this.currentCharacterToken.location&&(this.currentCharacterToken.location.endLine=e.startLine,this.currentCharacterToken.location.endCol=e.startCol,this.currentCharacterToken.location.endOffset=e.startOffset),this.currentCharacterToken.type){case ot.CHARACTER:{this.handler.onCharacter(this.currentCharacterToken);break}case ot.NULL_CHARACTER:{this.handler.onNullCharacter(this.currentCharacterToken);break}case ot.WHITESPACE_CHARACTER:{this.handler.onWhitespaceCharacter(this.currentCharacterToken);break}}this.currentCharacterToken=null}}_emitEOFToken(){const e=this.getCurrentLocation(0);e&&(e.endLine=e.startLine,e.endCol=e.startCol,e.endOffset=e.startOffset),this._emitCurrentCharacterToken(e),this.handler.onEof({type:ot.EOF,location:e}),this.active=!1}_appendCharToCurrentCharacterToken(e,r){if(this.currentCharacterToken)if(this.currentCharacterToken.type===e){this.currentCharacterToken.chars+=r;return}else this.currentLocation=this.getCurrentLocation(0),this._emitCurrentCharacterToken(this.currentLocation),this.preprocessor.dropParsedChunk();this._createCharacterToken(e,r)}_emitCodePoint(e){const r=gk(e)?ot.WHITESPACE_CHARACTER:e===I.NULL?ot.NULL_CHARACTER:ot.CHARACTER;this._appendCharToCurrentCharacterToken(r,String.fromCodePoint(e))}_emitChars(e){this._appendCharToCurrentCharacterToken(ot.CHARACTER,e)}_startCharacterReference(){this.returnState=this.state,this.state=D.CHARACTER_REFERENCE,this.entityStartPos=this.preprocessor.pos,this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute()?Qn.Attribute:Qn.Legacy)}_isCharacterReferenceInAttribute(){return this.returnState===D.ATTRIBUTE_VALUE_DOUBLE_QUOTED||this.returnState===D.ATTRIBUTE_VALUE_SINGLE_QUOTED||this.returnState===D.ATTRIBUTE_VALUE_UNQUOTED}_flushCodePointConsumedAsCharacterReference(e){this._isCharacterReferenceInAttribute()?this.currentAttr.value+=String.fromCodePoint(e):this._emitCodePoint(e)}_callState(e){switch(this.state){case D.DATA:{this._stateData(e);break}case D.RCDATA:{this._stateRcdata(e);break}case D.RAWTEXT:{this._stateRawtext(e);break}case D.SCRIPT_DATA:{this._stateScriptData(e);break}case D.PLAINTEXT:{this._statePlaintext(e);break}case D.TAG_OPEN:{this._stateTagOpen(e);break}case D.END_TAG_OPEN:{this._stateEndTagOpen(e);break}case D.TAG_NAME:{this._stateTagName(e);break}case D.RCDATA_LESS_THAN_SIGN:{this._stateRcdataLessThanSign(e);break}case D.RCDATA_END_TAG_OPEN:{this._stateRcdataEndTagOpen(e);break}case D.RCDATA_END_TAG_NAME:{this._stateRcdataEndTagName(e);break}case D.RAWTEXT_LESS_THAN_SIGN:{this._stateRawtextLessThanSign(e);break}case D.RAWTEXT_END_TAG_OPEN:{this._stateRawtextEndTagOpen(e);break}case D.RAWTEXT_END_TAG_NAME:{this._stateRawtextEndTagName(e);break}case D.SCRIPT_DATA_LESS_THAN_SIGN:{this._stateScriptDataLessThanSign(e);break}case D.SCRIPT_DATA_END_TAG_OPEN:{this._stateScriptDataEndTagOpen(e);break}case D.SCRIPT_DATA_END_TAG_NAME:{this._stateScriptDataEndTagName(e);break}case D.SCRIPT_DATA_ESCAPE_START:{this._stateScriptDataEscapeStart(e);break}case D.SCRIPT_DATA_ESCAPE_START_DASH:{this._stateScriptDataEscapeStartDash(e);break}case D.SCRIPT_DATA_ESCAPED:{this._stateScriptDataEscaped(e);break}case D.SCRIPT_DATA_ESCAPED_DASH:{this._stateScriptDataEscapedDash(e);break}case D.SCRIPT_DATA_ESCAPED_DASH_DASH:{this._stateScriptDataEscapedDashDash(e);break}case D.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataEscapedLessThanSign(e);break}case D.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:{this._stateScriptDataEscapedEndTagOpen(e);break}case D.SCRIPT_DATA_ESCAPED_END_TAG_NAME:{this._stateScriptDataEscapedEndTagName(e);break}case D.SCRIPT_DATA_DOUBLE_ESCAPE_START:{this._stateScriptDataDoubleEscapeStart(e);break}case D.SCRIPT_DATA_DOUBLE_ESCAPED:{this._stateScriptDataDoubleEscaped(e);break}case D.SCRIPT_DATA_DOUBLE_ESCAPED_DASH:{this._stateScriptDataDoubleEscapedDash(e);break}case D.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH:{this._stateScriptDataDoubleEscapedDashDash(e);break}case D.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN:{this._stateScriptDataDoubleEscapedLessThanSign(e);break}case D.SCRIPT_DATA_DOUBLE_ESCAPE_END:{this._stateScriptDataDoubleEscapeEnd(e);break}case D.BEFORE_ATTRIBUTE_NAME:{this._stateBeforeAttributeName(e);break}case D.ATTRIBUTE_NAME:{this._stateAttributeName(e);break}case D.AFTER_ATTRIBUTE_NAME:{this._stateAfterAttributeName(e);break}case D.BEFORE_ATTRIBUTE_VALUE:{this._stateBeforeAttributeValue(e);break}case D.ATTRIBUTE_VALUE_DOUBLE_QUOTED:{this._stateAttributeValueDoubleQuoted(e);break}case D.ATTRIBUTE_VALUE_SINGLE_QUOTED:{this._stateAttributeValueSingleQuoted(e);break}case D.ATTRIBUTE_VALUE_UNQUOTED:{this._stateAttributeValueUnquoted(e);break}case D.AFTER_ATTRIBUTE_VALUE_QUOTED:{this._stateAfterAttributeValueQuoted(e);break}case D.SELF_CLOSING_START_TAG:{this._stateSelfClosingStartTag(e);break}case D.BOGUS_COMMENT:{this._stateBogusComment(e);break}case D.MARKUP_DECLARATION_OPEN:{this._stateMarkupDeclarationOpen(e);break}case D.COMMENT_START:{this._stateCommentStart(e);break}case D.COMMENT_START_DASH:{this._stateCommentStartDash(e);break}case D.COMMENT:{this._stateComment(e);break}case D.COMMENT_LESS_THAN_SIGN:{this._stateCommentLessThanSign(e);break}case D.COMMENT_LESS_THAN_SIGN_BANG:{this._stateCommentLessThanSignBang(e);break}case D.COMMENT_LESS_THAN_SIGN_BANG_DASH:{this._stateCommentLessThanSignBangDash(e);break}case D.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:{this._stateCommentLessThanSignBangDashDash(e);break}case D.COMMENT_END_DASH:{this._stateCommentEndDash(e);break}case D.COMMENT_END:{this._stateCommentEnd(e);break}case D.COMMENT_END_BANG:{this._stateCommentEndBang(e);break}case D.DOCTYPE:{this._stateDoctype(e);break}case D.BEFORE_DOCTYPE_NAME:{this._stateBeforeDoctypeName(e);break}case D.DOCTYPE_NAME:{this._stateDoctypeName(e);break}case D.AFTER_DOCTYPE_NAME:{this._stateAfterDoctypeName(e);break}case D.AFTER_DOCTYPE_PUBLIC_KEYWORD:{this._stateAfterDoctypePublicKeyword(e);break}case D.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateBeforeDoctypePublicIdentifier(e);break}case D.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypePublicIdentifierDoubleQuoted(e);break}case D.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypePublicIdentifierSingleQuoted(e);break}case D.AFTER_DOCTYPE_PUBLIC_IDENTIFIER:{this._stateAfterDoctypePublicIdentifier(e);break}case D.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS:{this._stateBetweenDoctypePublicAndSystemIdentifiers(e);break}case D.AFTER_DOCTYPE_SYSTEM_KEYWORD:{this._stateAfterDoctypeSystemKeyword(e);break}case D.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateBeforeDoctypeSystemIdentifier(e);break}case D.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED:{this._stateDoctypeSystemIdentifierDoubleQuoted(e);break}case D.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED:{this._stateDoctypeSystemIdentifierSingleQuoted(e);break}case D.AFTER_DOCTYPE_SYSTEM_IDENTIFIER:{this._stateAfterDoctypeSystemIdentifier(e);break}case D.BOGUS_DOCTYPE:{this._stateBogusDoctype(e);break}case D.CDATA_SECTION:{this._stateCdataSection(e);break}case D.CDATA_SECTION_BRACKET:{this._stateCdataSectionBracket(e);break}case D.CDATA_SECTION_END:{this._stateCdataSectionEnd(e);break}case D.CHARACTER_REFERENCE:{this._stateCharacterReference();break}case D.AMBIGUOUS_AMPERSAND:{this._stateAmbiguousAmpersand(e);break}default:throw new Error("Unknown state")}}_stateData(e){switch(e){case I.LESS_THAN_SIGN:{this.state=D.TAG_OPEN;break}case I.AMPERSAND:{this._startCharacterReference();break}case I.NULL:{this._err(se.unexpectedNullCharacter),this._emitCodePoint(e);break}case I.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateRcdata(e){switch(e){case I.AMPERSAND:{this._startCharacterReference();break}case I.LESS_THAN_SIGN:{this.state=D.RCDATA_LESS_THAN_SIGN;break}case I.NULL:{this._err(se.unexpectedNullCharacter),this._emitChars(xt);break}case I.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateRawtext(e){switch(e){case I.LESS_THAN_SIGN:{this.state=D.RAWTEXT_LESS_THAN_SIGN;break}case I.NULL:{this._err(se.unexpectedNullCharacter),this._emitChars(xt);break}case I.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateScriptData(e){switch(e){case I.LESS_THAN_SIGN:{this.state=D.SCRIPT_DATA_LESS_THAN_SIGN;break}case I.NULL:{this._err(se.unexpectedNullCharacter),this._emitChars(xt);break}case I.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_statePlaintext(e){switch(e){case I.NULL:{this._err(se.unexpectedNullCharacter),this._emitChars(xt);break}case I.EOF:{this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateTagOpen(e){if(Ai(e))this._createStartTagToken(),this.state=D.TAG_NAME,this._stateTagName(e);else switch(e){case I.EXCLAMATION_MARK:{this.state=D.MARKUP_DECLARATION_OPEN;break}case I.SOLIDUS:{this.state=D.END_TAG_OPEN;break}case I.QUESTION_MARK:{this._err(se.unexpectedQuestionMarkInsteadOfTagName),this._createCommentToken(1),this.state=D.BOGUS_COMMENT,this._stateBogusComment(e);break}case I.EOF:{this._err(se.eofBeforeTagName),this._emitChars("<"),this._emitEOFToken();break}default:this._err(se.invalidFirstCharacterOfTagName),this._emitChars("<"),this.state=D.DATA,this._stateData(e)}}_stateEndTagOpen(e){if(Ai(e))this._createEndTagToken(),this.state=D.TAG_NAME,this._stateTagName(e);else switch(e){case I.GREATER_THAN_SIGN:{this._err(se.missingEndTagName),this.state=D.DATA;break}case I.EOF:{this._err(se.eofBeforeTagName),this._emitChars("</"),this._emitEOFToken();break}default:this._err(se.invalidFirstCharacterOfTagName),this._createCommentToken(2),this.state=D.BOGUS_COMMENT,this._stateBogusComment(e)}}_stateTagName(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:{this.state=D.BEFORE_ATTRIBUTE_NAME;break}case I.SOLIDUS:{this.state=D.SELF_CLOSING_START_TAG;break}case I.GREATER_THAN_SIGN:{this.state=D.DATA,this.emitCurrentTagToken();break}case I.NULL:{this._err(se.unexpectedNullCharacter),r.tagName+=xt;break}case I.EOF:{this._err(se.eofInTag),this._emitEOFToken();break}default:r.tagName+=String.fromCodePoint(jo(e)?Ql(e):e)}}_stateRcdataLessThanSign(e){e===I.SOLIDUS?this.state=D.RCDATA_END_TAG_OPEN:(this._emitChars("<"),this.state=D.RCDATA,this._stateRcdata(e))}_stateRcdataEndTagOpen(e){Ai(e)?(this.state=D.RCDATA_END_TAG_NAME,this._stateRcdataEndTagName(e)):(this._emitChars("</"),this.state=D.RCDATA,this._stateRcdata(e))}handleSpecialEndTag(e){if(!this.preprocessor.startsWith(this.lastStartTagName,!1))return!this._ensureHibernation();this._createEndTagToken();const r=this.currentToken;switch(r.tagName=this.lastStartTagName,this.preprocessor.peek(this.lastStartTagName.length)){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:return this._advanceBy(this.lastStartTagName.length),this.state=D.BEFORE_ATTRIBUTE_NAME,!1;case I.SOLIDUS:return this._advanceBy(this.lastStartTagName.length),this.state=D.SELF_CLOSING_START_TAG,!1;case I.GREATER_THAN_SIGN:return this._advanceBy(this.lastStartTagName.length),this.emitCurrentTagToken(),this.state=D.DATA,!1;default:return!this._ensureHibernation()}}_stateRcdataEndTagName(e){this.handleSpecialEndTag(e)&&(this._emitChars("</"),this.state=D.RCDATA,this._stateRcdata(e))}_stateRawtextLessThanSign(e){e===I.SOLIDUS?this.state=D.RAWTEXT_END_TAG_OPEN:(this._emitChars("<"),this.state=D.RAWTEXT,this._stateRawtext(e))}_stateRawtextEndTagOpen(e){Ai(e)?(this.state=D.RAWTEXT_END_TAG_NAME,this._stateRawtextEndTagName(e)):(this._emitChars("</"),this.state=D.RAWTEXT,this._stateRawtext(e))}_stateRawtextEndTagName(e){this.handleSpecialEndTag(e)&&(this._emitChars("</"),this.state=D.RAWTEXT,this._stateRawtext(e))}_stateScriptDataLessThanSign(e){switch(e){case I.SOLIDUS:{this.state=D.SCRIPT_DATA_END_TAG_OPEN;break}case I.EXCLAMATION_MARK:{this.state=D.SCRIPT_DATA_ESCAPE_START,this._emitChars("<!");break}default:this._emitChars("<"),this.state=D.SCRIPT_DATA,this._stateScriptData(e)}}_stateScriptDataEndTagOpen(e){Ai(e)?(this.state=D.SCRIPT_DATA_END_TAG_NAME,this._stateScriptDataEndTagName(e)):(this._emitChars("</"),this.state=D.SCRIPT_DATA,this._stateScriptData(e))}_stateScriptDataEndTagName(e){this.handleSpecialEndTag(e)&&(this._emitChars("</"),this.state=D.SCRIPT_DATA,this._stateScriptData(e))}_stateScriptDataEscapeStart(e){e===I.HYPHEN_MINUS?(this.state=D.SCRIPT_DATA_ESCAPE_START_DASH,this._emitChars("-")):(this.state=D.SCRIPT_DATA,this._stateScriptData(e))}_stateScriptDataEscapeStartDash(e){e===I.HYPHEN_MINUS?(this.state=D.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-")):(this.state=D.SCRIPT_DATA,this._stateScriptData(e))}_stateScriptDataEscaped(e){switch(e){case I.HYPHEN_MINUS:{this.state=D.SCRIPT_DATA_ESCAPED_DASH,this._emitChars("-");break}case I.LESS_THAN_SIGN:{this.state=D.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case I.NULL:{this._err(se.unexpectedNullCharacter),this._emitChars(xt);break}case I.EOF:{this._err(se.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateScriptDataEscapedDash(e){switch(e){case I.HYPHEN_MINUS:{this.state=D.SCRIPT_DATA_ESCAPED_DASH_DASH,this._emitChars("-");break}case I.LESS_THAN_SIGN:{this.state=D.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case I.NULL:{this._err(se.unexpectedNullCharacter),this.state=D.SCRIPT_DATA_ESCAPED,this._emitChars(xt);break}case I.EOF:{this._err(se.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=D.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedDashDash(e){switch(e){case I.HYPHEN_MINUS:{this._emitChars("-");break}case I.LESS_THAN_SIGN:{this.state=D.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;break}case I.GREATER_THAN_SIGN:{this.state=D.SCRIPT_DATA,this._emitChars(">");break}case I.NULL:{this._err(se.unexpectedNullCharacter),this.state=D.SCRIPT_DATA_ESCAPED,this._emitChars(xt);break}case I.EOF:{this._err(se.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=D.SCRIPT_DATA_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataEscapedLessThanSign(e){e===I.SOLIDUS?this.state=D.SCRIPT_DATA_ESCAPED_END_TAG_OPEN:Ai(e)?(this._emitChars("<"),this.state=D.SCRIPT_DATA_DOUBLE_ESCAPE_START,this._stateScriptDataDoubleEscapeStart(e)):(this._emitChars("<"),this.state=D.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagOpen(e){Ai(e)?(this.state=D.SCRIPT_DATA_ESCAPED_END_TAG_NAME,this._stateScriptDataEscapedEndTagName(e)):(this._emitChars("</"),this.state=D.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataEscapedEndTagName(e){this.handleSpecialEndTag(e)&&(this._emitChars("</"),this.state=D.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataDoubleEscapeStart(e){if(this.preprocessor.startsWith(Ir.SCRIPT,!1)&&_k(this.preprocessor.peek(Ir.SCRIPT.length))){this._emitCodePoint(e);for(let r=0;r<Ir.SCRIPT.length;r++)this._emitCodePoint(this._consume());this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED}else this._ensureHibernation()||(this.state=D.SCRIPT_DATA_ESCAPED,this._stateScriptDataEscaped(e))}_stateScriptDataDoubleEscaped(e){switch(e){case I.HYPHEN_MINUS:{this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED_DASH,this._emitChars("-");break}case I.LESS_THAN_SIGN:{this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case I.NULL:{this._err(se.unexpectedNullCharacter),this._emitChars(xt);break}case I.EOF:{this._err(se.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedDash(e){switch(e){case I.HYPHEN_MINUS:{this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH,this._emitChars("-");break}case I.LESS_THAN_SIGN:{this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case I.NULL:{this._err(se.unexpectedNullCharacter),this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(xt);break}case I.EOF:{this._err(se.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedDashDash(e){switch(e){case I.HYPHEN_MINUS:{this._emitChars("-");break}case I.LESS_THAN_SIGN:{this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN,this._emitChars("<");break}case I.GREATER_THAN_SIGN:{this.state=D.SCRIPT_DATA,this._emitChars(">");break}case I.NULL:{this._err(se.unexpectedNullCharacter),this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitChars(xt);break}case I.EOF:{this._err(se.eofInScriptHtmlCommentLikeText),this._emitEOFToken();break}default:this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED,this._emitCodePoint(e)}}_stateScriptDataDoubleEscapedLessThanSign(e){e===I.SOLIDUS?(this.state=D.SCRIPT_DATA_DOUBLE_ESCAPE_END,this._emitChars("/")):(this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateScriptDataDoubleEscapeEnd(e){if(this.preprocessor.startsWith(Ir.SCRIPT,!1)&&_k(this.preprocessor.peek(Ir.SCRIPT.length))){this._emitCodePoint(e);for(let r=0;r<Ir.SCRIPT.length;r++)this._emitCodePoint(this._consume());this.state=D.SCRIPT_DATA_ESCAPED}else this._ensureHibernation()||(this.state=D.SCRIPT_DATA_DOUBLE_ESCAPED,this._stateScriptDataDoubleEscaped(e))}_stateBeforeAttributeName(e){switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.SOLIDUS:case I.GREATER_THAN_SIGN:case I.EOF:{this.state=D.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(e);break}case I.EQUALS_SIGN:{this._err(se.unexpectedEqualsSignBeforeAttributeName),this._createAttr("="),this.state=D.ATTRIBUTE_NAME;break}default:this._createAttr(""),this.state=D.ATTRIBUTE_NAME,this._stateAttributeName(e)}}_stateAttributeName(e){switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:case I.SOLIDUS:case I.GREATER_THAN_SIGN:case I.EOF:{this._leaveAttrName(),this.state=D.AFTER_ATTRIBUTE_NAME,this._stateAfterAttributeName(e);break}case I.EQUALS_SIGN:{this._leaveAttrName(),this.state=D.BEFORE_ATTRIBUTE_VALUE;break}case I.QUOTATION_MARK:case I.APOSTROPHE:case I.LESS_THAN_SIGN:{this._err(se.unexpectedCharacterInAttributeName),this.currentAttr.name+=String.fromCodePoint(e);break}case I.NULL:{this._err(se.unexpectedNullCharacter),this.currentAttr.name+=xt;break}default:this.currentAttr.name+=String.fromCodePoint(jo(e)?Ql(e):e)}}_stateAfterAttributeName(e){switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.SOLIDUS:{this.state=D.SELF_CLOSING_START_TAG;break}case I.EQUALS_SIGN:{this.state=D.BEFORE_ATTRIBUTE_VALUE;break}case I.GREATER_THAN_SIGN:{this.state=D.DATA,this.emitCurrentTagToken();break}case I.EOF:{this._err(se.eofInTag),this._emitEOFToken();break}default:this._createAttr(""),this.state=D.ATTRIBUTE_NAME,this._stateAttributeName(e)}}_stateBeforeAttributeValue(e){switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.QUOTATION_MARK:{this.state=D.ATTRIBUTE_VALUE_DOUBLE_QUOTED;break}case I.APOSTROPHE:{this.state=D.ATTRIBUTE_VALUE_SINGLE_QUOTED;break}case I.GREATER_THAN_SIGN:{this._err(se.missingAttributeValue),this.state=D.DATA,this.emitCurrentTagToken();break}default:this.state=D.ATTRIBUTE_VALUE_UNQUOTED,this._stateAttributeValueUnquoted(e)}}_stateAttributeValueDoubleQuoted(e){switch(e){case I.QUOTATION_MARK:{this.state=D.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case I.AMPERSAND:{this._startCharacterReference();break}case I.NULL:{this._err(se.unexpectedNullCharacter),this.currentAttr.value+=xt;break}case I.EOF:{this._err(se.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAttributeValueSingleQuoted(e){switch(e){case I.APOSTROPHE:{this.state=D.AFTER_ATTRIBUTE_VALUE_QUOTED;break}case I.AMPERSAND:{this._startCharacterReference();break}case I.NULL:{this._err(se.unexpectedNullCharacter),this.currentAttr.value+=xt;break}case I.EOF:{this._err(se.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAttributeValueUnquoted(e){switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:{this._leaveAttrValue(),this.state=D.BEFORE_ATTRIBUTE_NAME;break}case I.AMPERSAND:{this._startCharacterReference();break}case I.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=D.DATA,this.emitCurrentTagToken();break}case I.NULL:{this._err(se.unexpectedNullCharacter),this.currentAttr.value+=xt;break}case I.QUOTATION_MARK:case I.APOSTROPHE:case I.LESS_THAN_SIGN:case I.EQUALS_SIGN:case I.GRAVE_ACCENT:{this._err(se.unexpectedCharacterInUnquotedAttributeValue),this.currentAttr.value+=String.fromCodePoint(e);break}case I.EOF:{this._err(se.eofInTag),this._emitEOFToken();break}default:this.currentAttr.value+=String.fromCodePoint(e)}}_stateAfterAttributeValueQuoted(e){switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:{this._leaveAttrValue(),this.state=D.BEFORE_ATTRIBUTE_NAME;break}case I.SOLIDUS:{this._leaveAttrValue(),this.state=D.SELF_CLOSING_START_TAG;break}case I.GREATER_THAN_SIGN:{this._leaveAttrValue(),this.state=D.DATA,this.emitCurrentTagToken();break}case I.EOF:{this._err(se.eofInTag),this._emitEOFToken();break}default:this._err(se.missingWhitespaceBetweenAttributes),this.state=D.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(e)}}_stateSelfClosingStartTag(e){switch(e){case I.GREATER_THAN_SIGN:{const r=this.currentToken;r.selfClosing=!0,this.state=D.DATA,this.emitCurrentTagToken();break}case I.EOF:{this._err(se.eofInTag),this._emitEOFToken();break}default:this._err(se.unexpectedSolidusInTag),this.state=D.BEFORE_ATTRIBUTE_NAME,this._stateBeforeAttributeName(e)}}_stateBogusComment(e){const r=this.currentToken;switch(e){case I.GREATER_THAN_SIGN:{this.state=D.DATA,this.emitCurrentComment(r);break}case I.EOF:{this.emitCurrentComment(r),this._emitEOFToken();break}case I.NULL:{this._err(se.unexpectedNullCharacter),r.data+=xt;break}default:r.data+=String.fromCodePoint(e)}}_stateMarkupDeclarationOpen(e){this._consumeSequenceIfMatch(Ir.DASH_DASH,!0)?(this._createCommentToken(Ir.DASH_DASH.length+1),this.state=D.COMMENT_START):this._consumeSequenceIfMatch(Ir.DOCTYPE,!1)?(this.currentLocation=this.getCurrentLocation(Ir.DOCTYPE.length+1),this.state=D.DOCTYPE):this._consumeSequenceIfMatch(Ir.CDATA_START,!0)?this.inForeignNode?this.state=D.CDATA_SECTION:(this._err(se.cdataInHtmlContent),this._createCommentToken(Ir.CDATA_START.length+1),this.currentToken.data="[CDATA[",this.state=D.BOGUS_COMMENT):this._ensureHibernation()||(this._err(se.incorrectlyOpenedComment),this._createCommentToken(2),this.state=D.BOGUS_COMMENT,this._stateBogusComment(e))}_stateCommentStart(e){switch(e){case I.HYPHEN_MINUS:{this.state=D.COMMENT_START_DASH;break}case I.GREATER_THAN_SIGN:{this._err(se.abruptClosingOfEmptyComment),this.state=D.DATA;const r=this.currentToken;this.emitCurrentComment(r);break}default:this.state=D.COMMENT,this._stateComment(e)}}_stateCommentStartDash(e){const r=this.currentToken;switch(e){case I.HYPHEN_MINUS:{this.state=D.COMMENT_END;break}case I.GREATER_THAN_SIGN:{this._err(se.abruptClosingOfEmptyComment),this.state=D.DATA,this.emitCurrentComment(r);break}case I.EOF:{this._err(se.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="-",this.state=D.COMMENT,this._stateComment(e)}}_stateComment(e){const r=this.currentToken;switch(e){case I.HYPHEN_MINUS:{this.state=D.COMMENT_END_DASH;break}case I.LESS_THAN_SIGN:{r.data+="<",this.state=D.COMMENT_LESS_THAN_SIGN;break}case I.NULL:{this._err(se.unexpectedNullCharacter),r.data+=xt;break}case I.EOF:{this._err(se.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+=String.fromCodePoint(e)}}_stateCommentLessThanSign(e){const r=this.currentToken;switch(e){case I.EXCLAMATION_MARK:{r.data+="!",this.state=D.COMMENT_LESS_THAN_SIGN_BANG;break}case I.LESS_THAN_SIGN:{r.data+="<";break}default:this.state=D.COMMENT,this._stateComment(e)}}_stateCommentLessThanSignBang(e){e===I.HYPHEN_MINUS?this.state=D.COMMENT_LESS_THAN_SIGN_BANG_DASH:(this.state=D.COMMENT,this._stateComment(e))}_stateCommentLessThanSignBangDash(e){e===I.HYPHEN_MINUS?this.state=D.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH:(this.state=D.COMMENT_END_DASH,this._stateCommentEndDash(e))}_stateCommentLessThanSignBangDashDash(e){e!==I.GREATER_THAN_SIGN&&e!==I.EOF&&this._err(se.nestedComment),this.state=D.COMMENT_END,this._stateCommentEnd(e)}_stateCommentEndDash(e){const r=this.currentToken;switch(e){case I.HYPHEN_MINUS:{this.state=D.COMMENT_END;break}case I.EOF:{this._err(se.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="-",this.state=D.COMMENT,this._stateComment(e)}}_stateCommentEnd(e){const r=this.currentToken;switch(e){case I.GREATER_THAN_SIGN:{this.state=D.DATA,this.emitCurrentComment(r);break}case I.EXCLAMATION_MARK:{this.state=D.COMMENT_END_BANG;break}case I.HYPHEN_MINUS:{r.data+="-";break}case I.EOF:{this._err(se.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="--",this.state=D.COMMENT,this._stateComment(e)}}_stateCommentEndBang(e){const r=this.currentToken;switch(e){case I.HYPHEN_MINUS:{r.data+="--!",this.state=D.COMMENT_END_DASH;break}case I.GREATER_THAN_SIGN:{this._err(se.incorrectlyClosedComment),this.state=D.DATA,this.emitCurrentComment(r);break}case I.EOF:{this._err(se.eofInComment),this.emitCurrentComment(r),this._emitEOFToken();break}default:r.data+="--!",this.state=D.COMMENT,this._stateComment(e)}}_stateDoctype(e){switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:{this.state=D.BEFORE_DOCTYPE_NAME;break}case I.GREATER_THAN_SIGN:{this.state=D.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(e);break}case I.EOF:{this._err(se.eofInDoctype),this._createDoctypeToken(null);const r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(se.missingWhitespaceBeforeDoctypeName),this.state=D.BEFORE_DOCTYPE_NAME,this._stateBeforeDoctypeName(e)}}_stateBeforeDoctypeName(e){if(jo(e))this._createDoctypeToken(String.fromCharCode(Ql(e))),this.state=D.DOCTYPE_NAME;else switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.NULL:{this._err(se.unexpectedNullCharacter),this._createDoctypeToken(xt),this.state=D.DOCTYPE_NAME;break}case I.GREATER_THAN_SIGN:{this._err(se.missingDoctypeName),this._createDoctypeToken(null);const r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=D.DATA;break}case I.EOF:{this._err(se.eofInDoctype),this._createDoctypeToken(null);const r=this.currentToken;r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._createDoctypeToken(String.fromCodePoint(e)),this.state=D.DOCTYPE_NAME}}_stateDoctypeName(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:{this.state=D.AFTER_DOCTYPE_NAME;break}case I.GREATER_THAN_SIGN:{this.state=D.DATA,this.emitCurrentDoctype(r);break}case I.NULL:{this._err(se.unexpectedNullCharacter),r.name+=xt;break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.name+=String.fromCodePoint(jo(e)?Ql(e):e)}}_stateAfterDoctypeName(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.GREATER_THAN_SIGN:{this.state=D.DATA,this.emitCurrentDoctype(r);break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._consumeSequenceIfMatch(Ir.PUBLIC,!1)?this.state=D.AFTER_DOCTYPE_PUBLIC_KEYWORD:this._consumeSequenceIfMatch(Ir.SYSTEM,!1)?this.state=D.AFTER_DOCTYPE_SYSTEM_KEYWORD:this._ensureHibernation()||(this._err(se.invalidCharacterSequenceAfterDoctypeName),r.forceQuirks=!0,this.state=D.BOGUS_DOCTYPE,this._stateBogusDoctype(e))}}_stateAfterDoctypePublicKeyword(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:{this.state=D.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;break}case I.QUOTATION_MARK:{this._err(se.missingWhitespaceAfterDoctypePublicKeyword),r.publicId="",this.state=D.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case I.APOSTROPHE:{this._err(se.missingWhitespaceAfterDoctypePublicKeyword),r.publicId="",this.state=D.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case I.GREATER_THAN_SIGN:{this._err(se.missingDoctypePublicIdentifier),r.forceQuirks=!0,this.state=D.DATA,this.emitCurrentDoctype(r);break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(se.missingQuoteBeforeDoctypePublicIdentifier),r.forceQuirks=!0,this.state=D.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBeforeDoctypePublicIdentifier(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.QUOTATION_MARK:{r.publicId="",this.state=D.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;break}case I.APOSTROPHE:{r.publicId="",this.state=D.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;break}case I.GREATER_THAN_SIGN:{this._err(se.missingDoctypePublicIdentifier),r.forceQuirks=!0,this.state=D.DATA,this.emitCurrentDoctype(r);break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(se.missingQuoteBeforeDoctypePublicIdentifier),r.forceQuirks=!0,this.state=D.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateDoctypePublicIdentifierDoubleQuoted(e){const r=this.currentToken;switch(e){case I.QUOTATION_MARK:{this.state=D.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case I.NULL:{this._err(se.unexpectedNullCharacter),r.publicId+=xt;break}case I.GREATER_THAN_SIGN:{this._err(se.abruptDoctypePublicIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=D.DATA;break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.publicId+=String.fromCodePoint(e)}}_stateDoctypePublicIdentifierSingleQuoted(e){const r=this.currentToken;switch(e){case I.APOSTROPHE:{this.state=D.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;break}case I.NULL:{this._err(se.unexpectedNullCharacter),r.publicId+=xt;break}case I.GREATER_THAN_SIGN:{this._err(se.abruptDoctypePublicIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=D.DATA;break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.publicId+=String.fromCodePoint(e)}}_stateAfterDoctypePublicIdentifier(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:{this.state=D.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;break}case I.GREATER_THAN_SIGN:{this.state=D.DATA,this.emitCurrentDoctype(r);break}case I.QUOTATION_MARK:{this._err(se.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),r.systemId="",this.state=D.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case I.APOSTROPHE:{this._err(se.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers),r.systemId="",this.state=D.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(se.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=D.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBetweenDoctypePublicAndSystemIdentifiers(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=D.DATA;break}case I.QUOTATION_MARK:{r.systemId="",this.state=D.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case I.APOSTROPHE:{r.systemId="",this.state=D.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(se.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=D.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateAfterDoctypeSystemKeyword(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:{this.state=D.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;break}case I.QUOTATION_MARK:{this._err(se.missingWhitespaceAfterDoctypeSystemKeyword),r.systemId="",this.state=D.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case I.APOSTROPHE:{this._err(se.missingWhitespaceAfterDoctypeSystemKeyword),r.systemId="",this.state=D.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case I.GREATER_THAN_SIGN:{this._err(se.missingDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=D.DATA,this.emitCurrentDoctype(r);break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(se.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=D.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBeforeDoctypeSystemIdentifier(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.QUOTATION_MARK:{r.systemId="",this.state=D.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;break}case I.APOSTROPHE:{r.systemId="",this.state=D.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;break}case I.GREATER_THAN_SIGN:{this._err(se.missingDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=D.DATA,this.emitCurrentDoctype(r);break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(se.missingQuoteBeforeDoctypeSystemIdentifier),r.forceQuirks=!0,this.state=D.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateDoctypeSystemIdentifierDoubleQuoted(e){const r=this.currentToken;switch(e){case I.QUOTATION_MARK:{this.state=D.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case I.NULL:{this._err(se.unexpectedNullCharacter),r.systemId+=xt;break}case I.GREATER_THAN_SIGN:{this._err(se.abruptDoctypeSystemIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=D.DATA;break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.systemId+=String.fromCodePoint(e)}}_stateDoctypeSystemIdentifierSingleQuoted(e){const r=this.currentToken;switch(e){case I.APOSTROPHE:{this.state=D.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;break}case I.NULL:{this._err(se.unexpectedNullCharacter),r.systemId+=xt;break}case I.GREATER_THAN_SIGN:{this._err(se.abruptDoctypeSystemIdentifier),r.forceQuirks=!0,this.emitCurrentDoctype(r),this.state=D.DATA;break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:r.systemId+=String.fromCodePoint(e)}}_stateAfterDoctypeSystemIdentifier(e){const r=this.currentToken;switch(e){case I.SPACE:case I.LINE_FEED:case I.TABULATION:case I.FORM_FEED:break;case I.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=D.DATA;break}case I.EOF:{this._err(se.eofInDoctype),r.forceQuirks=!0,this.emitCurrentDoctype(r),this._emitEOFToken();break}default:this._err(se.unexpectedCharacterAfterDoctypeSystemIdentifier),this.state=D.BOGUS_DOCTYPE,this._stateBogusDoctype(e)}}_stateBogusDoctype(e){const r=this.currentToken;switch(e){case I.GREATER_THAN_SIGN:{this.emitCurrentDoctype(r),this.state=D.DATA;break}case I.NULL:{this._err(se.unexpectedNullCharacter);break}case I.EOF:{this.emitCurrentDoctype(r),this._emitEOFToken();break}}}_stateCdataSection(e){switch(e){case I.RIGHT_SQUARE_BRACKET:{this.state=D.CDATA_SECTION_BRACKET;break}case I.EOF:{this._err(se.eofInCdata),this._emitEOFToken();break}default:this._emitCodePoint(e)}}_stateCdataSectionBracket(e){e===I.RIGHT_SQUARE_BRACKET?this.state=D.CDATA_SECTION_END:(this._emitChars("]"),this.state=D.CDATA_SECTION,this._stateCdataSection(e))}_stateCdataSectionEnd(e){switch(e){case I.GREATER_THAN_SIGN:{this.state=D.DATA;break}case I.RIGHT_SQUARE_BRACKET:{this._emitChars("]");break}default:this._emitChars("]]"),this.state=D.CDATA_SECTION,this._stateCdataSection(e)}}_stateCharacterReference(){let e=this.entityDecoder.write(this.preprocessor.html,this.preprocessor.pos);if(e<0)if(this.preprocessor.lastChunkWritten)e=this.entityDecoder.end();else{this.active=!1,this.preprocessor.pos=this.preprocessor.html.length-1,this.consumedAfterSnapshot=0,this.preprocessor.endOfChunkHit=!0;return}e===0?(this.preprocessor.pos=this.entityStartPos,this._flushCodePointConsumedAsCharacterReference(I.AMPERSAND),this.state=!this._isCharacterReferenceInAttribute()&&vk(this.preprocessor.peek(1))?D.AMBIGUOUS_AMPERSAND:this.returnState):this.state=this.returnState}_stateAmbiguousAmpersand(e){vk(e)?this._flushCodePointConsumedAsCharacterReference(e):(e===I.SEMICOLON&&this._err(se.unknownNamedCharacterReference),this.state=this.returnState,this._callState(e))}}const bk=new Set([m.DD,m.DT,m.LI,m.OPTGROUP,m.OPTION,m.P,m.RB,m.RP,m.RT,m.RTC]),yk=new Set([...bk,m.CAPTION,m.COLGROUP,m.TBODY,m.TD,m.TFOOT,m.TH,m.THEAD,m.TR]),Jl=new Set([m.APPLET,m.CAPTION,m.HTML,m.MARQUEE,m.OBJECT,m.TABLE,m.TD,m.TEMPLATE,m.TH]),dU=new Set([...Jl,m.OL,m.UL]),hU=new Set([...Jl,m.BUTTON]),kk=new Set([m.ANNOTATION_XML,m.MI,m.MN,m.MO,m.MS,m.MTEXT]),Ek=new Set([m.DESC,m.FOREIGN_OBJECT,m.TITLE]),pU=new Set([m.TR,m.TEMPLATE,m.HTML]),mU=new Set([m.TBODY,m.TFOOT,m.THEAD,m.TEMPLATE,m.HTML]),vU=new Set([m.TABLE,m.TEMPLATE,m.HTML]),gU=new Set([m.TD,m.TH]);class _U{get currentTmplContentOrNode(){return this._isInTemplate()?this.treeAdapter.getTemplateContent(this.current):this.current}constructor(e,r,n){this.treeAdapter=r,this.handler=n,this.items=[],this.tagIDs=[],this.stackTop=-1,this.tmplCount=0,this.currentTagId=m.UNKNOWN,this.current=e}_indexOf(e){return this.items.lastIndexOf(e,this.stackTop)}_isInTemplate(){return this.currentTagId===m.TEMPLATE&&this.treeAdapter.getNamespaceURI(this.current)===pe.HTML}_updateCurrentElement(){this.current=this.items[this.stackTop],this.currentTagId=this.tagIDs[this.stackTop]}push(e,r){this.stackTop++,this.items[this.stackTop]=e,this.current=e,this.tagIDs[this.stackTop]=r,this.currentTagId=r,this._isInTemplate()&&this.tmplCount++,this.handler.onItemPush(e,r,!0)}pop(){const e=this.current;this.tmplCount>0&&this._isInTemplate()&&this.tmplCount--,this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!0)}replace(e,r){const n=this._indexOf(e);this.items[n]=r,n===this.stackTop&&(this.current=r)}insertAfter(e,r,n){const a=this._indexOf(e)+1;this.items.splice(a,0,r),this.tagIDs.splice(a,0,n),this.stackTop++,a===this.stackTop&&this._updateCurrentElement(),this.current&&this.currentTagId!==void 0&&this.handler.onItemPush(this.current,this.currentTagId,a===this.stackTop)}popUntilTagNamePopped(e){let r=this.stackTop+1;do r=this.tagIDs.lastIndexOf(e,r-1);while(r>0&&this.treeAdapter.getNamespaceURI(this.items[r])!==pe.HTML);this.shortenToLength(Math.max(r,0))}shortenToLength(e){for(;this.stackTop>=e;){const r=this.current;this.tmplCount>0&&this._isInTemplate()&&(this.tmplCount-=1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(r,this.stackTop<e)}}popUntilElementPopped(e){const r=this._indexOf(e);this.shortenToLength(Math.max(r,0))}popUntilPopped(e,r){const n=this._indexOfTagNames(e,r);this.shortenToLength(Math.max(n,0))}popUntilNumberedHeaderPopped(){this.popUntilPopped(pp,pe.HTML)}popUntilTableCellPopped(){this.popUntilPopped(gU,pe.HTML)}popAllUpToHtmlElement(){this.tmplCount=0,this.shortenToLength(1)}_indexOfTagNames(e,r){for(let n=this.stackTop;n>=0;n--)if(e.has(this.tagIDs[n])&&this.treeAdapter.getNamespaceURI(this.items[n])===r)return n;return-1}clearBackTo(e,r){const n=this._indexOfTagNames(e,r);this.shortenToLength(n+1)}clearBackToTableContext(){this.clearBackTo(vU,pe.HTML)}clearBackToTableBodyContext(){this.clearBackTo(mU,pe.HTML)}clearBackToTableRowContext(){this.clearBackTo(pU,pe.HTML)}remove(e){const r=this._indexOf(e);r>=0&&(r===this.stackTop?this.pop():(this.items.splice(r,1),this.tagIDs.splice(r,1),this.stackTop--,this._updateCurrentElement(),this.handler.onItemPop(e,!1)))}tryPeekProperlyNestedBodyElement(){return this.stackTop>=1&&this.tagIDs[1]===m.BODY?this.items[1]:null}contains(e){return this._indexOf(e)>-1}getCommonAncestor(e){const r=this._indexOf(e)-1;return r>=0?this.items[r]:null}isRootHtmlElementCurrent(){return this.stackTop===0&&this.tagIDs[0]===m.HTML}hasInDynamicScope(e,r){for(let n=this.stackTop;n>=0;n--){const a=this.tagIDs[n];switch(this.treeAdapter.getNamespaceURI(this.items[n])){case pe.HTML:{if(a===e)return!0;if(r.has(a))return!1;break}case pe.SVG:{if(Ek.has(a))return!1;break}case pe.MATHML:{if(kk.has(a))return!1;break}}}return!0}hasInScope(e){return this.hasInDynamicScope(e,Jl)}hasInListItemScope(e){return this.hasInDynamicScope(e,dU)}hasInButtonScope(e){return this.hasInDynamicScope(e,hU)}hasNumberedHeaderInScope(){for(let e=this.stackTop;e>=0;e--){const r=this.tagIDs[e];switch(this.treeAdapter.getNamespaceURI(this.items[e])){case pe.HTML:{if(pp.has(r))return!0;if(Jl.has(r))return!1;break}case pe.SVG:{if(Ek.has(r))return!1;break}case pe.MATHML:{if(kk.has(r))return!1;break}}}return!0}hasInTableScope(e){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===pe.HTML)switch(this.tagIDs[r]){case e:return!0;case m.TABLE:case m.HTML:return!1}return!0}hasTableBodyContextInTableScope(){for(let e=this.stackTop;e>=0;e--)if(this.treeAdapter.getNamespaceURI(this.items[e])===pe.HTML)switch(this.tagIDs[e]){case m.TBODY:case m.THEAD:case m.TFOOT:return!0;case m.TABLE:case m.HTML:return!1}return!0}hasInSelectScope(e){for(let r=this.stackTop;r>=0;r--)if(this.treeAdapter.getNamespaceURI(this.items[r])===pe.HTML)switch(this.tagIDs[r]){case e:return!0;case m.OPTION:case m.OPTGROUP:break;default:return!1}return!0}generateImpliedEndTags(){for(;this.currentTagId!==void 0&&bk.has(this.currentTagId);)this.pop()}generateImpliedEndTagsThoroughly(){for(;this.currentTagId!==void 0&&yk.has(this.currentTagId);)this.pop()}generateImpliedEndTagsWithExclusion(e){for(;this.currentTagId!==void 0&&this.currentTagId!==e&&yk.has(this.currentTagId);)this.pop()}}const mp=3;var Nn;(function(t){t[t.Marker=0]="Marker",t[t.Element=1]="Element"})(Nn||(Nn={}));const Tk={type:Nn.Marker};class bU{constructor(e){this.treeAdapter=e,this.entries=[],this.bookmark=null}_getNoahArkConditionCandidates(e,r){const n=[],a=r.length,o=this.treeAdapter.getTagName(e),c=this.treeAdapter.getNamespaceURI(e);for(let d=0;d<this.entries.length;d++){const p=this.entries[d];if(p.type===Nn.Marker)break;const{element:v}=p;if(this.treeAdapter.getTagName(v)===o&&this.treeAdapter.getNamespaceURI(v)===c){const b=this.treeAdapter.getAttrList(v);b.length===a&&n.push({idx:d,attrs:b})}}return n}_ensureNoahArkCondition(e){if(this.entries.length<mp)return;const r=this.treeAdapter.getAttrList(e),n=this._getNoahArkConditionCandidates(e,r);if(n.length<mp)return;const a=new Map(r.map(c=>[c.name,c.value]));let o=0;for(let c=0;c<n.length;c++){const d=n[c];d.attrs.every(p=>a.get(p.name)===p.value)&&(o+=1,o>=mp&&this.entries.splice(d.idx,1))}}insertMarker(){this.entries.unshift(Tk)}pushElement(e,r){this._ensureNoahArkCondition(e),this.entries.unshift({type:Nn.Element,element:e,token:r})}insertElementAfterBookmark(e,r){const n=this.entries.indexOf(this.bookmark);this.entries.splice(n,0,{type:Nn.Element,element:e,token:r})}removeEntry(e){const r=this.entries.indexOf(e);r!==-1&&this.entries.splice(r,1)}clearToLastMarker(){const e=this.entries.indexOf(Tk);e===-1?this.entries.length=0:this.entries.splice(0,e+1)}getElementEntryInScopeWithTagName(e){const r=this.entries.find(n=>n.type===Nn.Marker||this.treeAdapter.getTagName(n.element)===e);return r&&r.type===Nn.Element?r:null}getElementEntry(e){return this.entries.find(r=>r.type===Nn.Element&&r.element===e)}}const Jn={createDocument(){return{nodeName:"#document",mode:Qr.NO_QUIRKS,childNodes:[]}},createDocumentFragment(){return{nodeName:"#document-fragment",childNodes:[]}},createElement(t,e,r){return{nodeName:t,tagName:t,attrs:r,namespaceURI:e,childNodes:[],parentNode:null}},createCommentNode(t){return{nodeName:"#comment",data:t,parentNode:null}},createTextNode(t){return{nodeName:"#text",value:t,parentNode:null}},appendChild(t,e){t.childNodes.push(e),e.parentNode=t},insertBefore(t,e,r){const n=t.childNodes.indexOf(r);t.childNodes.splice(n,0,e),e.parentNode=t},setTemplateContent(t,e){t.content=e},getTemplateContent(t){return t.content},setDocumentType(t,e,r,n){const a=t.childNodes.find(o=>o.nodeName==="#documentType");if(a)a.name=e,a.publicId=r,a.systemId=n;else{const o={nodeName:"#documentType",name:e,publicId:r,systemId:n,parentNode:null};Jn.appendChild(t,o)}},setDocumentMode(t,e){t.mode=e},getDocumentMode(t){return t.mode},detachNode(t){if(t.parentNode){const e=t.parentNode.childNodes.indexOf(t);t.parentNode.childNodes.splice(e,1),t.parentNode=null}},insertText(t,e){if(t.childNodes.length>0){const r=t.childNodes[t.childNodes.length-1];if(Jn.isTextNode(r)){r.value+=e;return}}Jn.appendChild(t,Jn.createTextNode(e))},insertTextBefore(t,e,r){const n=t.childNodes[t.childNodes.indexOf(r)-1];n&&Jn.isTextNode(n)?n.value+=e:Jn.insertBefore(t,Jn.createTextNode(e),r)},adoptAttributes(t,e){const r=new Set(t.attrs.map(n=>n.name));for(let n=0;n<e.length;n++)r.has(e[n].name)||t.attrs.push(e[n])},getFirstChild(t){return t.childNodes[0]},getChildNodes(t){return t.childNodes},getParentNode(t){return t.parentNode},getAttrList(t){return t.attrs},getTagName(t){return t.tagName},getNamespaceURI(t){return t.namespaceURI},getTextNodeContent(t){return t.value},getCommentNodeContent(t){return t.data},getDocumentTypeNodeName(t){return t.name},getDocumentTypeNodePublicId(t){return t.publicId},getDocumentTypeNodeSystemId(t){return t.systemId},isTextNode(t){return t.nodeName==="#text"},isCommentNode(t){return t.nodeName==="#comment"},isDocumentTypeNode(t){return t.nodeName==="#documentType"},isElementNode(t){return Object.prototype.hasOwnProperty.call(t,"tagName")},setNodeSourceCodeLocation(t,e){t.sourceCodeLocation=e},getNodeSourceCodeLocation(t){return t.sourceCodeLocation},updateNodeSourceCodeLocation(t,e){t.sourceCodeLocation={...t.sourceCodeLocation,...e}}},Ck="html",yU="about:legacy-compat",kU="http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd",wk=["+//silmaril//dtd html pro v0r11 19970101//","-//as//dtd html 3.0 aswedit + extensions//","-//advasoft ltd//dtd html 3.0 aswedit + extensions//","-//ietf//dtd html 2.0 level 1//","-//ietf//dtd html 2.0 level 2//","-//ietf//dtd html 2.0 strict level 1//","-//ietf//dtd html 2.0 strict level 2//","-//ietf//dtd html 2.0 strict//","-//ietf//dtd html 2.0//","-//ietf//dtd html 2.1e//","-//ietf//dtd html 3.0//","-//ietf//dtd html 3.2 final//","-//ietf//dtd html 3.2//","-//ietf//dtd html 3//","-//ietf//dtd html level 0//","-//ietf//dtd html level 1//","-//ietf//dtd html level 2//","-//ietf//dtd html level 3//","-//ietf//dtd html strict level 0//","-//ietf//dtd html strict level 1//","-//ietf//dtd html strict level 2//","-//ietf//dtd html strict level 3//","-//ietf//dtd html strict//","-//ietf//dtd html//","-//metrius//dtd metrius presentational//","-//microsoft//dtd internet explorer 2.0 html strict//","-//microsoft//dtd internet explorer 2.0 html//","-//microsoft//dtd internet explorer 2.0 tables//","-//microsoft//dtd internet explorer 3.0 html strict//","-//microsoft//dtd internet explorer 3.0 html//","-//microsoft//dtd internet explorer 3.0 tables//","-//netscape comm. corp.//dtd html//","-//netscape comm. corp.//dtd strict html//","-//o'reilly and associates//dtd html 2.0//","-//o'reilly and associates//dtd html extended 1.0//","-//o'reilly and associates//dtd html extended relaxed 1.0//","-//sq//dtd html 2.0 hotmetal + extensions//","-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//","-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//","-//spyglass//dtd html 2.0 extended//","-//sun microsystems corp.//dtd hotjava html//","-//sun microsystems corp.//dtd hotjava strict html//","-//w3c//dtd html 3 1995-03-24//","-//w3c//dtd html 3.2 draft//","-//w3c//dtd html 3.2 final//","-//w3c//dtd html 3.2//","-//w3c//dtd html 3.2s draft//","-//w3c//dtd html 4.0 frameset//","-//w3c//dtd html 4.0 transitional//","-//w3c//dtd html experimental 19960712//","-//w3c//dtd html experimental 970421//","-//w3c//dtd w3 html//","-//w3o//dtd w3 html 3.0//","-//webtechs//dtd mozilla html 2.0//","-//webtechs//dtd mozilla html//"],EU=[...wk,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"],TU=new Set(["-//w3o//dtd w3 html strict 3.0//en//","-/w3c/dtd html 4.0 transitional/en","html"]),Sk=["-//w3c//dtd xhtml 1.0 frameset//","-//w3c//dtd xhtml 1.0 transitional//"],CU=[...Sk,"-//w3c//dtd html 4.01 frameset//","-//w3c//dtd html 4.01 transitional//"];function xk(t,e){return e.some(r=>t.startsWith(r))}function wU(t){return t.name===Ck&&t.publicId===null&&(t.systemId===null||t.systemId===yU)}function SU(t){if(t.name!==Ck)return Qr.QUIRKS;const{systemId:e}=t;if(e&&e.toLowerCase()===kU)return Qr.QUIRKS;let{publicId:r}=t;if(r!==null){if(r=r.toLowerCase(),TU.has(r))return Qr.QUIRKS;let n=e===null?EU:wk;if(xk(r,n))return Qr.QUIRKS;if(n=e===null?Sk:CU,xk(r,n))return Qr.LIMITED_QUIRKS}return Qr.NO_QUIRKS}const Ak={TEXT_HTML:"text/html",APPLICATION_XML:"application/xhtml+xml"},xU="definitionurl",AU="definitionURL",OU=new Map(["attributeName","attributeType","baseFrequency","baseProfile","calcMode","clipPathUnits","diffuseConstant","edgeMode","filterUnits","glyphRef","gradientTransform","gradientUnits","kernelMatrix","kernelUnitLength","keyPoints","keySplines","keyTimes","lengthAdjust","limitingConeAngle","markerHeight","markerUnits","markerWidth","maskContentUnits","maskUnits","numOctaves","pathLength","patternContentUnits","patternTransform","patternUnits","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","refX","refY","repeatCount","repeatDur","requiredExtensions","requiredFeatures","specularConstant","specularExponent","spreadMethod","startOffset","stdDeviation","stitchTiles","surfaceScale","systemLanguage","tableValues","targetX","targetY","textLength","viewBox","viewTarget","xChannelSelector","yChannelSelector","zoomAndPan"].map(t=>[t.toLowerCase(),t])),NU=new Map([["xlink:actuate",{prefix:"xlink",name:"actuate",namespace:pe.XLINK}],["xlink:arcrole",{prefix:"xlink",name:"arcrole",namespace:pe.XLINK}],["xlink:href",{prefix:"xlink",name:"href",namespace:pe.XLINK}],["xlink:role",{prefix:"xlink",name:"role",namespace:pe.XLINK}],["xlink:show",{prefix:"xlink",name:"show",namespace:pe.XLINK}],["xlink:title",{prefix:"xlink",name:"title",namespace:pe.XLINK}],["xlink:type",{prefix:"xlink",name:"type",namespace:pe.XLINK}],["xml:lang",{prefix:"xml",name:"lang",namespace:pe.XML}],["xml:space",{prefix:"xml",name:"space",namespace:pe.XML}],["xmlns",{prefix:"",name:"xmlns",namespace:pe.XMLNS}],["xmlns:xlink",{prefix:"xmlns",name:"xlink",namespace:pe.XMLNS}]]),PU=new Map(["altGlyph","altGlyphDef","altGlyphItem","animateColor","animateMotion","animateTransform","clipPath","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","foreignObject","glyphRef","linearGradient","radialGradient","textPath"].map(t=>[t.toLowerCase(),t])),IU=new Set([m.B,m.BIG,m.BLOCKQUOTE,m.BODY,m.BR,m.CENTER,m.CODE,m.DD,m.DIV,m.DL,m.DT,m.EM,m.EMBED,m.H1,m.H2,m.H3,m.H4,m.H5,m.H6,m.HEAD,m.HR,m.I,m.IMG,m.LI,m.LISTING,m.MENU,m.META,m.NOBR,m.OL,m.P,m.PRE,m.RUBY,m.S,m.SMALL,m.SPAN,m.STRONG,m.STRIKE,m.SUB,m.SUP,m.TABLE,m.TT,m.U,m.UL,m.VAR]);function LU(t){const e=t.tagID;return e===m.FONT&&t.attrs.some(({name:n})=>n===_a.COLOR||n===_a.SIZE||n===_a.FACE)||IU.has(e)}function Ok(t){for(let e=0;e<t.attrs.length;e++)if(t.attrs[e].name===xU){t.attrs[e].name=AU;break}}function Nk(t){for(let e=0;e<t.attrs.length;e++){const r=OU.get(t.attrs[e].name);r!=null&&(t.attrs[e].name=r)}}function vp(t){for(let e=0;e<t.attrs.length;e++){const r=NU.get(t.attrs[e].name);r&&(t.attrs[e].prefix=r.prefix,t.attrs[e].name=r.name,t.attrs[e].namespace=r.namespace)}}function RU(t){const e=PU.get(t.tagName);e!=null&&(t.tagName=e,t.tagID=Vl(t.tagName))}function DU(t,e){return e===pe.MATHML&&(t===m.MI||t===m.MO||t===m.MN||t===m.MS||t===m.MTEXT)}function MU(t,e,r){if(e===pe.MATHML&&t===m.ANNOTATION_XML){for(let n=0;n<r.length;n++)if(r[n].name===_a.ENCODING){const a=r[n].value.toLowerCase();return a===Ak.TEXT_HTML||a===Ak.APPLICATION_XML}}return e===pe.SVG&&(t===m.FOREIGN_OBJECT||t===m.DESC||t===m.TITLE)}function $U(t,e,r,n){return(!n||n===pe.HTML)&&MU(t,e,r)||(!n||n===pe.MATHML)&&DU(t,e)}const FU="hidden",BU=8,HU=3;var H;(function(t){t[t.INITIAL=0]="INITIAL",t[t.BEFORE_HTML=1]="BEFORE_HTML",t[t.BEFORE_HEAD=2]="BEFORE_HEAD",t[t.IN_HEAD=3]="IN_HEAD",t[t.IN_HEAD_NO_SCRIPT=4]="IN_HEAD_NO_SCRIPT",t[t.AFTER_HEAD=5]="AFTER_HEAD",t[t.IN_BODY=6]="IN_BODY",t[t.TEXT=7]="TEXT",t[t.IN_TABLE=8]="IN_TABLE",t[t.IN_TABLE_TEXT=9]="IN_TABLE_TEXT",t[t.IN_CAPTION=10]="IN_CAPTION",t[t.IN_COLUMN_GROUP=11]="IN_COLUMN_GROUP",t[t.IN_TABLE_BODY=12]="IN_TABLE_BODY",t[t.IN_ROW=13]="IN_ROW",t[t.IN_CELL=14]="IN_CELL",t[t.IN_SELECT=15]="IN_SELECT",t[t.IN_SELECT_IN_TABLE=16]="IN_SELECT_IN_TABLE",t[t.IN_TEMPLATE=17]="IN_TEMPLATE",t[t.AFTER_BODY=18]="AFTER_BODY",t[t.IN_FRAMESET=19]="IN_FRAMESET",t[t.AFTER_FRAMESET=20]="AFTER_FRAMESET",t[t.AFTER_AFTER_BODY=21]="AFTER_AFTER_BODY",t[t.AFTER_AFTER_FRAMESET=22]="AFTER_AFTER_FRAMESET"})(H||(H={}));const UU={startLine:-1,startCol:-1,startOffset:-1,endLine:-1,endCol:-1,endOffset:-1},Pk=new Set([m.TABLE,m.TBODY,m.TFOOT,m.THEAD,m.TR]),Ik={scriptingEnabled:!0,sourceCodeLocationInfo:!1,treeAdapter:Jn,onParseError:null};class jU{constructor(e,r,n=null,a=null){this.fragmentContext=n,this.scriptHandler=a,this.currentToken=null,this.stopped=!1,this.insertionMode=H.INITIAL,this.originalInsertionMode=H.INITIAL,this.headElement=null,this.formElement=null,this.currentNotInHTML=!1,this.tmplInsertionModeStack=[],this.pendingCharacterTokens=[],this.hasNonWhitespacePendingCharacterToken=!1,this.framesetOk=!0,this.skipNextNewLine=!1,this.fosterParentingEnabled=!1,this.options={...Ik,...e},this.treeAdapter=this.options.treeAdapter,this.onParseError=this.options.onParseError,this.onParseError&&(this.options.sourceCodeLocationInfo=!0),this.document=r??this.treeAdapter.createDocument(),this.tokenizer=new fU(this.options,this),this.activeFormattingElements=new bU(this.treeAdapter),this.fragmentContextID=n?Vl(this.treeAdapter.getTagName(n)):m.UNKNOWN,this._setContextModes(n??this.document,this.fragmentContextID),this.openElements=new _U(this.document,this.treeAdapter,this)}static parse(e,r){const n=new this(r);return n.tokenizer.write(e,!0),n.document}static getFragmentParser(e,r){const n={...Ik,...r};e??(e=n.treeAdapter.createElement(K.TEMPLATE,pe.HTML,[]));const a=n.treeAdapter.createElement("documentmock",pe.HTML,[]),o=new this(n,a,e);return o.fragmentContextID===m.TEMPLATE&&o.tmplInsertionModeStack.unshift(H.IN_TEMPLATE),o._initTokenizerForFragmentParsing(),o._insertFakeRootElement(),o._resetInsertionMode(),o._findFormInFragmentContext(),o}getFragment(){const e=this.treeAdapter.getFirstChild(this.document),r=this.treeAdapter.createDocumentFragment();return this._adoptNodes(e,r),r}_err(e,r,n){var a;if(!this.onParseError)return;const o=(a=e.location)!==null&&a!==void 0?a:UU,c={code:r,startLine:o.startLine,startCol:o.startCol,startOffset:o.startOffset,endLine:n?o.startLine:o.endLine,endCol:n?o.startCol:o.endCol,endOffset:n?o.startOffset:o.endOffset};this.onParseError(c)}onItemPush(e,r,n){var a,o;(o=(a=this.treeAdapter).onItemPush)===null||o===void 0||o.call(a,e),n&&this.openElements.stackTop>0&&this._setContextModes(e,r)}onItemPop(e,r){var n,a;if(this.options.sourceCodeLocationInfo&&this._setEndLocation(e,this.currentToken),(a=(n=this.treeAdapter).onItemPop)===null||a===void 0||a.call(n,e,this.openElements.current),r){let o,c;this.openElements.stackTop===0&&this.fragmentContext?(o=this.fragmentContext,c=this.fragmentContextID):{current:o,currentTagId:c}=this.openElements,this._setContextModes(o,c)}}_setContextModes(e,r){const n=e===this.document||e&&this.treeAdapter.getNamespaceURI(e)===pe.HTML;this.currentNotInHTML=!n,this.tokenizer.inForeignNode=!n&&e!==void 0&&r!==void 0&&!this._isIntegrationPoint(r,e)}_switchToTextParsing(e,r){this._insertElement(e,pe.HTML),this.tokenizer.state=r,this.originalInsertionMode=this.insertionMode,this.insertionMode=H.TEXT}switchToPlaintextParsing(){this.insertionMode=H.TEXT,this.originalInsertionMode=H.IN_BODY,this.tokenizer.state=Lr.PLAINTEXT}_getAdjustedCurrentElement(){return this.openElements.stackTop===0&&this.fragmentContext?this.fragmentContext:this.openElements.current}_findFormInFragmentContext(){let e=this.fragmentContext;for(;e;){if(this.treeAdapter.getTagName(e)===K.FORM){this.formElement=e;break}e=this.treeAdapter.getParentNode(e)}}_initTokenizerForFragmentParsing(){if(!(!this.fragmentContext||this.treeAdapter.getNamespaceURI(this.fragmentContext)!==pe.HTML))switch(this.fragmentContextID){case m.TITLE:case m.TEXTAREA:{this.tokenizer.state=Lr.RCDATA;break}case m.STYLE:case m.XMP:case m.IFRAME:case m.NOEMBED:case m.NOFRAMES:case m.NOSCRIPT:{this.tokenizer.state=Lr.RAWTEXT;break}case m.SCRIPT:{this.tokenizer.state=Lr.SCRIPT_DATA;break}case m.PLAINTEXT:{this.tokenizer.state=Lr.PLAINTEXT;break}}}_setDocumentType(e){const r=e.name||"",n=e.publicId||"",a=e.systemId||"";if(this.treeAdapter.setDocumentType(this.document,r,n,a),e.location){const c=this.treeAdapter.getChildNodes(this.document).find(d=>this.treeAdapter.isDocumentTypeNode(d));c&&this.treeAdapter.setNodeSourceCodeLocation(c,e.location)}}_attachElementToTree(e,r){if(this.options.sourceCodeLocationInfo){const n=r&&{...r,startTag:r};this.treeAdapter.setNodeSourceCodeLocation(e,n)}if(this._shouldFosterParentOnInsertion())this._fosterParentElement(e);else{const n=this.openElements.currentTmplContentOrNode;this.treeAdapter.appendChild(n??this.document,e)}}_appendElement(e,r){const n=this.treeAdapter.createElement(e.tagName,r,e.attrs);this._attachElementToTree(n,e.location)}_insertElement(e,r){const n=this.treeAdapter.createElement(e.tagName,r,e.attrs);this._attachElementToTree(n,e.location),this.openElements.push(n,e.tagID)}_insertFakeElement(e,r){const n=this.treeAdapter.createElement(e,pe.HTML,[]);this._attachElementToTree(n,null),this.openElements.push(n,r)}_insertTemplate(e){const r=this.treeAdapter.createElement(e.tagName,pe.HTML,e.attrs),n=this.treeAdapter.createDocumentFragment();this.treeAdapter.setTemplateContent(r,n),this._attachElementToTree(r,e.location),this.openElements.push(r,e.tagID),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,null)}_insertFakeRootElement(){const e=this.treeAdapter.createElement(K.HTML,pe.HTML,[]);this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(e,null),this.treeAdapter.appendChild(this.openElements.current,e),this.openElements.push(e,m.HTML)}_appendCommentNode(e,r){const n=this.treeAdapter.createCommentNode(e.data);this.treeAdapter.appendChild(r,n),this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(n,e.location)}_insertCharacters(e){let r,n;if(this._shouldFosterParentOnInsertion()?({parent:r,beforeElement:n}=this._findFosterParentingLocation(),n?this.treeAdapter.insertTextBefore(r,e.chars,n):this.treeAdapter.insertText(r,e.chars)):(r=this.openElements.currentTmplContentOrNode,this.treeAdapter.insertText(r,e.chars)),!e.location)return;const a=this.treeAdapter.getChildNodes(r),o=n?a.lastIndexOf(n):a.length,c=a[o-1];if(this.treeAdapter.getNodeSourceCodeLocation(c)){const{endLine:p,endCol:v,endOffset:b}=e.location;this.treeAdapter.updateNodeSourceCodeLocation(c,{endLine:p,endCol:v,endOffset:b})}else this.options.sourceCodeLocationInfo&&this.treeAdapter.setNodeSourceCodeLocation(c,e.location)}_adoptNodes(e,r){for(let n=this.treeAdapter.getFirstChild(e);n;n=this.treeAdapter.getFirstChild(e))this.treeAdapter.detachNode(n),this.treeAdapter.appendChild(r,n)}_setEndLocation(e,r){if(this.treeAdapter.getNodeSourceCodeLocation(e)&&r.location){const n=r.location,a=this.treeAdapter.getTagName(e),o=r.type===ot.END_TAG&&a===r.tagName?{endTag:{...n},endLine:n.endLine,endCol:n.endCol,endOffset:n.endOffset}:{endLine:n.startLine,endCol:n.startCol,endOffset:n.startOffset};this.treeAdapter.updateNodeSourceCodeLocation(e,o)}}shouldProcessStartTagTokenInForeignContent(e){if(!this.currentNotInHTML)return!1;let r,n;return this.openElements.stackTop===0&&this.fragmentContext?(r=this.fragmentContext,n=this.fragmentContextID):{current:r,currentTagId:n}=this.openElements,e.tagID===m.SVG&&this.treeAdapter.getTagName(r)===K.ANNOTATION_XML&&this.treeAdapter.getNamespaceURI(r)===pe.MATHML?!1:this.tokenizer.inForeignNode||(e.tagID===m.MGLYPH||e.tagID===m.MALIGNMARK)&&n!==void 0&&!this._isIntegrationPoint(n,r,pe.HTML)}_processToken(e){switch(e.type){case ot.CHARACTER:{this.onCharacter(e);break}case ot.NULL_CHARACTER:{this.onNullCharacter(e);break}case ot.COMMENT:{this.onComment(e);break}case ot.DOCTYPE:{this.onDoctype(e);break}case ot.START_TAG:{this._processStartTag(e);break}case ot.END_TAG:{this.onEndTag(e);break}case ot.EOF:{this.onEof(e);break}case ot.WHITESPACE_CHARACTER:{this.onWhitespaceCharacter(e);break}}}_isIntegrationPoint(e,r,n){const a=this.treeAdapter.getNamespaceURI(r),o=this.treeAdapter.getAttrList(r);return $U(e,a,o,n)}_reconstructActiveFormattingElements(){const e=this.activeFormattingElements.entries.length;if(e){const r=this.activeFormattingElements.entries.findIndex(a=>a.type===Nn.Marker||this.openElements.contains(a.element)),n=r===-1?e-1:r-1;for(let a=n;a>=0;a--){const o=this.activeFormattingElements.entries[a];this._insertElement(o.token,this.treeAdapter.getNamespaceURI(o.element)),o.element=this.openElements.current}}}_closeTableCell(){this.openElements.generateImpliedEndTags(),this.openElements.popUntilTableCellPopped(),this.activeFormattingElements.clearToLastMarker(),this.insertionMode=H.IN_ROW}_closePElement(){this.openElements.generateImpliedEndTagsWithExclusion(m.P),this.openElements.popUntilTagNamePopped(m.P)}_resetInsertionMode(){for(let e=this.openElements.stackTop;e>=0;e--)switch(e===0&&this.fragmentContext?this.fragmentContextID:this.openElements.tagIDs[e]){case m.TR:{this.insertionMode=H.IN_ROW;return}case m.TBODY:case m.THEAD:case m.TFOOT:{this.insertionMode=H.IN_TABLE_BODY;return}case m.CAPTION:{this.insertionMode=H.IN_CAPTION;return}case m.COLGROUP:{this.insertionMode=H.IN_COLUMN_GROUP;return}case m.TABLE:{this.insertionMode=H.IN_TABLE;return}case m.BODY:{this.insertionMode=H.IN_BODY;return}case m.FRAMESET:{this.insertionMode=H.IN_FRAMESET;return}case m.SELECT:{this._resetInsertionModeForSelect(e);return}case m.TEMPLATE:{this.insertionMode=this.tmplInsertionModeStack[0];return}case m.HTML:{this.insertionMode=this.headElement?H.AFTER_HEAD:H.BEFORE_HEAD;return}case m.TD:case m.TH:{if(e>0){this.insertionMode=H.IN_CELL;return}break}case m.HEAD:{if(e>0){this.insertionMode=H.IN_HEAD;return}break}}this.insertionMode=H.IN_BODY}_resetInsertionModeForSelect(e){if(e>0)for(let r=e-1;r>0;r--){const n=this.openElements.tagIDs[r];if(n===m.TEMPLATE)break;if(n===m.TABLE){this.insertionMode=H.IN_SELECT_IN_TABLE;return}}this.insertionMode=H.IN_SELECT}_isElementCausesFosterParenting(e){return Pk.has(e)}_shouldFosterParentOnInsertion(){return this.fosterParentingEnabled&&this.openElements.currentTagId!==void 0&&this._isElementCausesFosterParenting(this.openElements.currentTagId)}_findFosterParentingLocation(){for(let e=this.openElements.stackTop;e>=0;e--){const r=this.openElements.items[e];switch(this.openElements.tagIDs[e]){case m.TEMPLATE:{if(this.treeAdapter.getNamespaceURI(r)===pe.HTML)return{parent:this.treeAdapter.getTemplateContent(r),beforeElement:null};break}case m.TABLE:{const n=this.treeAdapter.getParentNode(r);return n?{parent:n,beforeElement:r}:{parent:this.openElements.items[e-1],beforeElement:null}}}}return{parent:this.openElements.items[0],beforeElement:null}}_fosterParentElement(e){const r=this._findFosterParentingLocation();r.beforeElement?this.treeAdapter.insertBefore(r.parent,e,r.beforeElement):this.treeAdapter.appendChild(r.parent,e)}_isSpecialElement(e,r){const n=this.treeAdapter.getNamespaceURI(e);return oU[n].has(r)}onCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){_j(this,e);return}switch(this.insertionMode){case H.INITIAL:{Wo(this,e);break}case H.BEFORE_HTML:{Go(this,e);break}case H.BEFORE_HEAD:{zo(this,e);break}case H.IN_HEAD:{qo(this,e);break}case H.IN_HEAD_NO_SCRIPT:{Yo(this,e);break}case H.AFTER_HEAD:{Ko(this,e);break}case H.IN_BODY:case H.IN_CAPTION:case H.IN_CELL:case H.IN_TEMPLATE:{Rk(this,e);break}case H.TEXT:case H.IN_SELECT:case H.IN_SELECT_IN_TABLE:{this._insertCharacters(e);break}case H.IN_TABLE:case H.IN_TABLE_BODY:case H.IN_ROW:{yp(this,e);break}case H.IN_TABLE_TEXT:{jk(this,e);break}case H.IN_COLUMN_GROUP:{tc(this,e);break}case H.AFTER_BODY:{ic(this,e);break}case H.AFTER_AFTER_BODY:{ac(this,e);break}}}onNullCharacter(e){if(this.skipNextNewLine=!1,this.tokenizer.inForeignNode){gj(this,e);return}switch(this.insertionMode){case H.INITIAL:{Wo(this,e);break}case H.BEFORE_HTML:{Go(this,e);break}case H.BEFORE_HEAD:{zo(this,e);break}case H.IN_HEAD:{qo(this,e);break}case H.IN_HEAD_NO_SCRIPT:{Yo(this,e);break}case H.AFTER_HEAD:{Ko(this,e);break}case H.TEXT:{this._insertCharacters(e);break}case H.IN_TABLE:case H.IN_TABLE_BODY:case H.IN_ROW:{yp(this,e);break}case H.IN_COLUMN_GROUP:{tc(this,e);break}case H.AFTER_BODY:{ic(this,e);break}case H.AFTER_AFTER_BODY:{ac(this,e);break}}}onComment(e){if(this.skipNextNewLine=!1,this.currentNotInHTML){_p(this,e);return}switch(this.insertionMode){case H.INITIAL:case H.BEFORE_HTML:case H.BEFORE_HEAD:case H.IN_HEAD:case H.IN_HEAD_NO_SCRIPT:case H.AFTER_HEAD:case H.IN_BODY:case H.IN_TABLE:case H.IN_CAPTION:case H.IN_COLUMN_GROUP:case H.IN_TABLE_BODY:case H.IN_ROW:case H.IN_CELL:case H.IN_SELECT:case H.IN_SELECT_IN_TABLE:case H.IN_TEMPLATE:case H.IN_FRAMESET:case H.AFTER_FRAMESET:{_p(this,e);break}case H.IN_TABLE_TEXT:{Qo(this,e);break}case H.AFTER_BODY:{XU(this,e);break}case H.AFTER_AFTER_BODY:case H.AFTER_AFTER_FRAMESET:{VU(this,e);break}}}onDoctype(e){switch(this.skipNextNewLine=!1,this.insertionMode){case H.INITIAL:{QU(this,e);break}case H.BEFORE_HEAD:case H.IN_HEAD:case H.IN_HEAD_NO_SCRIPT:case H.AFTER_HEAD:{this._err(e,se.misplacedDoctype);break}case H.IN_TABLE_TEXT:{Qo(this,e);break}}}onStartTag(e){this.skipNextNewLine=!1,this.currentToken=e,this._processStartTag(e),e.selfClosing&&!e.ackSelfClosing&&this._err(e,se.nonVoidHtmlElementStartTagWithTrailingSolidus)}_processStartTag(e){this.shouldProcessStartTagTokenInForeignContent(e)?bj(this,e):this._startTagOutsideForeignContent(e)}_startTagOutsideForeignContent(e){switch(this.insertionMode){case H.INITIAL:{Wo(this,e);break}case H.BEFORE_HTML:{JU(this,e);break}case H.BEFORE_HEAD:{e7(this,e);break}case H.IN_HEAD:{dn(this,e);break}case H.IN_HEAD_NO_SCRIPT:{n7(this,e);break}case H.AFTER_HEAD:{a7(this,e);break}case H.IN_BODY:{hr(this,e);break}case H.IN_TABLE:{vs(this,e);break}case H.IN_TABLE_TEXT:{Qo(this,e);break}case H.IN_CAPTION:{tj(this,e);break}case H.IN_COLUMN_GROUP:{kp(this,e);break}case H.IN_TABLE_BODY:{rc(this,e);break}case H.IN_ROW:{nc(this,e);break}case H.IN_CELL:{ij(this,e);break}case H.IN_SELECT:{zk(this,e);break}case H.IN_SELECT_IN_TABLE:{sj(this,e);break}case H.IN_TEMPLATE:{uj(this,e);break}case H.AFTER_BODY:{cj(this,e);break}case H.IN_FRAMESET:{fj(this,e);break}case H.AFTER_FRAMESET:{hj(this,e);break}case H.AFTER_AFTER_BODY:{mj(this,e);break}case H.AFTER_AFTER_FRAMESET:{vj(this,e);break}}}onEndTag(e){this.skipNextNewLine=!1,this.currentToken=e,this.currentNotInHTML?yj(this,e):this._endTagOutsideForeignContent(e)}_endTagOutsideForeignContent(e){switch(this.insertionMode){case H.INITIAL:{Wo(this,e);break}case H.BEFORE_HTML:{ZU(this,e);break}case H.BEFORE_HEAD:{t7(this,e);break}case H.IN_HEAD:{r7(this,e);break}case H.IN_HEAD_NO_SCRIPT:{i7(this,e);break}case H.AFTER_HEAD:{s7(this,e);break}case H.IN_BODY:{ec(this,e);break}case H.TEXT:{z7(this,e);break}case H.IN_TABLE:{Xo(this,e);break}case H.IN_TABLE_TEXT:{Qo(this,e);break}case H.IN_CAPTION:{rj(this,e);break}case H.IN_COLUMN_GROUP:{nj(this,e);break}case H.IN_TABLE_BODY:{Ep(this,e);break}case H.IN_ROW:{Gk(this,e);break}case H.IN_CELL:{aj(this,e);break}case H.IN_SELECT:{qk(this,e);break}case H.IN_SELECT_IN_TABLE:{oj(this,e);break}case H.IN_TEMPLATE:{lj(this,e);break}case H.AFTER_BODY:{Kk(this,e);break}case H.IN_FRAMESET:{dj(this,e);break}case H.AFTER_FRAMESET:{pj(this,e);break}case H.AFTER_AFTER_BODY:{ac(this,e);break}}}onEof(e){switch(this.insertionMode){case H.INITIAL:{Wo(this,e);break}case H.BEFORE_HTML:{Go(this,e);break}case H.BEFORE_HEAD:{zo(this,e);break}case H.IN_HEAD:{qo(this,e);break}case H.IN_HEAD_NO_SCRIPT:{Yo(this,e);break}case H.AFTER_HEAD:{Ko(this,e);break}case H.IN_BODY:case H.IN_TABLE:case H.IN_CAPTION:case H.IN_COLUMN_GROUP:case H.IN_TABLE_BODY:case H.IN_ROW:case H.IN_CELL:case H.IN_SELECT:case H.IN_SELECT_IN_TABLE:{Hk(this,e);break}case H.TEXT:{q7(this,e);break}case H.IN_TABLE_TEXT:{Qo(this,e);break}case H.IN_TEMPLATE:{Yk(this,e);break}case H.AFTER_BODY:case H.IN_FRAMESET:case H.AFTER_FRAMESET:case H.AFTER_AFTER_BODY:case H.AFTER_AFTER_FRAMESET:{bp(this,e);break}}}onWhitespaceCharacter(e){if(this.skipNextNewLine&&(this.skipNextNewLine=!1,e.chars.charCodeAt(0)===I.LINE_FEED)){if(e.chars.length===1)return;e.chars=e.chars.substr(1)}if(this.tokenizer.inForeignNode){this._insertCharacters(e);return}switch(this.insertionMode){case H.IN_HEAD:case H.IN_HEAD_NO_SCRIPT:case H.AFTER_HEAD:case H.TEXT:case H.IN_COLUMN_GROUP:case H.IN_SELECT:case H.IN_SELECT_IN_TABLE:case H.IN_FRAMESET:case H.AFTER_FRAMESET:{this._insertCharacters(e);break}case H.IN_BODY:case H.IN_CAPTION:case H.IN_CELL:case H.IN_TEMPLATE:case H.AFTER_BODY:case H.AFTER_AFTER_BODY:case H.AFTER_AFTER_FRAMESET:{Lk(this,e);break}case H.IN_TABLE:case H.IN_TABLE_BODY:case H.IN_ROW:{yp(this,e);break}case H.IN_TABLE_TEXT:{Uk(this,e);break}}}}function WU(t,e){let r=t.activeFormattingElements.getElementEntryInScopeWithTagName(e.tagName);return r?t.openElements.contains(r.element)?t.openElements.hasInScope(e.tagID)||(r=null):(t.activeFormattingElements.removeEntry(r),r=null):Bk(t,e),r}function GU(t,e){let r=null,n=t.openElements.stackTop;for(;n>=0;n--){const a=t.openElements.items[n];if(a===e.element)break;t._isSpecialElement(a,t.openElements.tagIDs[n])&&(r=a)}return r||(t.openElements.shortenToLength(Math.max(n,0)),t.activeFormattingElements.removeEntry(e)),r}function zU(t,e,r){let n=e,a=t.openElements.getCommonAncestor(e);for(let o=0,c=a;c!==r;o++,c=a){a=t.openElements.getCommonAncestor(c);const d=t.activeFormattingElements.getElementEntry(c),p=d&&o>=HU;!d||p?(p&&t.activeFormattingElements.removeEntry(d),t.openElements.remove(c)):(c=qU(t,d),n===e&&(t.activeFormattingElements.bookmark=d),t.treeAdapter.detachNode(n),t.treeAdapter.appendChild(c,n),n=c)}return n}function qU(t,e){const r=t.treeAdapter.getNamespaceURI(e.element),n=t.treeAdapter.createElement(e.token.tagName,r,e.token.attrs);return t.openElements.replace(e.element,n),e.element=n,n}function YU(t,e,r){const n=t.treeAdapter.getTagName(e),a=Vl(n);if(t._isElementCausesFosterParenting(a))t._fosterParentElement(r);else{const o=t.treeAdapter.getNamespaceURI(e);a===m.TEMPLATE&&o===pe.HTML&&(e=t.treeAdapter.getTemplateContent(e)),t.treeAdapter.appendChild(e,r)}}function KU(t,e,r){const n=t.treeAdapter.getNamespaceURI(r.element),{token:a}=r,o=t.treeAdapter.createElement(a.tagName,n,a.attrs);t._adoptNodes(e,o),t.treeAdapter.appendChild(e,o),t.activeFormattingElements.insertElementAfterBookmark(o,a),t.activeFormattingElements.removeEntry(r),t.openElements.remove(r.element),t.openElements.insertAfter(e,o,a.tagID)}function gp(t,e){for(let r=0;r<BU;r++){const n=WU(t,e);if(!n)break;const a=GU(t,n);if(!a)break;t.activeFormattingElements.bookmark=n;const o=zU(t,a,n.element),c=t.openElements.getCommonAncestor(n.element);t.treeAdapter.detachNode(o),c&&YU(t,c,o),KU(t,a,n)}}function _p(t,e){t._appendCommentNode(e,t.openElements.currentTmplContentOrNode)}function XU(t,e){t._appendCommentNode(e,t.openElements.items[0])}function VU(t,e){t._appendCommentNode(e,t.document)}function bp(t,e){if(t.stopped=!0,e.location){const r=t.fragmentContext?0:2;for(let n=t.openElements.stackTop;n>=r;n--)t._setEndLocation(t.openElements.items[n],e);if(!t.fragmentContext&&t.openElements.stackTop>=0){const n=t.openElements.items[0],a=t.treeAdapter.getNodeSourceCodeLocation(n);if(a&&!a.endTag&&(t._setEndLocation(n,e),t.openElements.stackTop>=1)){const o=t.openElements.items[1],c=t.treeAdapter.getNodeSourceCodeLocation(o);c&&!c.endTag&&t._setEndLocation(o,e)}}}}function QU(t,e){t._setDocumentType(e);const r=e.forceQuirks?Qr.QUIRKS:SU(e);wU(e)||t._err(e,se.nonConformingDoctype),t.treeAdapter.setDocumentMode(t.document,r),t.insertionMode=H.BEFORE_HTML}function Wo(t,e){t._err(e,se.missingDoctype,!0),t.treeAdapter.setDocumentMode(t.document,Qr.QUIRKS),t.insertionMode=H.BEFORE_HTML,t._processToken(e)}function JU(t,e){e.tagID===m.HTML?(t._insertElement(e,pe.HTML),t.insertionMode=H.BEFORE_HEAD):Go(t,e)}function ZU(t,e){const r=e.tagID;(r===m.HTML||r===m.HEAD||r===m.BODY||r===m.BR)&&Go(t,e)}function Go(t,e){t._insertFakeRootElement(),t.insertionMode=H.BEFORE_HEAD,t._processToken(e)}function e7(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.HEAD:{t._insertElement(e,pe.HTML),t.headElement=t.openElements.current,t.insertionMode=H.IN_HEAD;break}default:zo(t,e)}}function t7(t,e){const r=e.tagID;r===m.HEAD||r===m.BODY||r===m.HTML||r===m.BR?zo(t,e):t._err(e,se.endTagWithoutMatchingOpenElement)}function zo(t,e){t._insertFakeElement(K.HEAD,m.HEAD),t.headElement=t.openElements.current,t.insertionMode=H.IN_HEAD,t._processToken(e)}function dn(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.BASE:case m.BASEFONT:case m.BGSOUND:case m.LINK:case m.META:{t._appendElement(e,pe.HTML),e.ackSelfClosing=!0;break}case m.TITLE:{t._switchToTextParsing(e,Lr.RCDATA);break}case m.NOSCRIPT:{t.options.scriptingEnabled?t._switchToTextParsing(e,Lr.RAWTEXT):(t._insertElement(e,pe.HTML),t.insertionMode=H.IN_HEAD_NO_SCRIPT);break}case m.NOFRAMES:case m.STYLE:{t._switchToTextParsing(e,Lr.RAWTEXT);break}case m.SCRIPT:{t._switchToTextParsing(e,Lr.SCRIPT_DATA);break}case m.TEMPLATE:{t._insertTemplate(e),t.activeFormattingElements.insertMarker(),t.framesetOk=!1,t.insertionMode=H.IN_TEMPLATE,t.tmplInsertionModeStack.unshift(H.IN_TEMPLATE);break}case m.HEAD:{t._err(e,se.misplacedStartTagForHeadElement);break}default:qo(t,e)}}function r7(t,e){switch(e.tagID){case m.HEAD:{t.openElements.pop(),t.insertionMode=H.AFTER_HEAD;break}case m.BODY:case m.BR:case m.HTML:{qo(t,e);break}case m.TEMPLATE:{ba(t,e);break}default:t._err(e,se.endTagWithoutMatchingOpenElement)}}function ba(t,e){t.openElements.tmplCount>0?(t.openElements.generateImpliedEndTagsThoroughly(),t.openElements.currentTagId!==m.TEMPLATE&&t._err(e,se.closingOfElementWithOpenChildElements),t.openElements.popUntilTagNamePopped(m.TEMPLATE),t.activeFormattingElements.clearToLastMarker(),t.tmplInsertionModeStack.shift(),t._resetInsertionMode()):t._err(e,se.endTagWithoutMatchingOpenElement)}function qo(t,e){t.openElements.pop(),t.insertionMode=H.AFTER_HEAD,t._processToken(e)}function n7(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.BASEFONT:case m.BGSOUND:case m.HEAD:case m.LINK:case m.META:case m.NOFRAMES:case m.STYLE:{dn(t,e);break}case m.NOSCRIPT:{t._err(e,se.nestedNoscriptInHead);break}default:Yo(t,e)}}function i7(t,e){switch(e.tagID){case m.NOSCRIPT:{t.openElements.pop(),t.insertionMode=H.IN_HEAD;break}case m.BR:{Yo(t,e);break}default:t._err(e,se.endTagWithoutMatchingOpenElement)}}function Yo(t,e){const r=e.type===ot.EOF?se.openElementsLeftAfterEof:se.disallowedContentInNoscriptInHead;t._err(e,r),t.openElements.pop(),t.insertionMode=H.IN_HEAD,t._processToken(e)}function a7(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.BODY:{t._insertElement(e,pe.HTML),t.framesetOk=!1,t.insertionMode=H.IN_BODY;break}case m.FRAMESET:{t._insertElement(e,pe.HTML),t.insertionMode=H.IN_FRAMESET;break}case m.BASE:case m.BASEFONT:case m.BGSOUND:case m.LINK:case m.META:case m.NOFRAMES:case m.SCRIPT:case m.STYLE:case m.TEMPLATE:case m.TITLE:{t._err(e,se.abandonedHeadElementChild),t.openElements.push(t.headElement,m.HEAD),dn(t,e),t.openElements.remove(t.headElement);break}case m.HEAD:{t._err(e,se.misplacedStartTagForHeadElement);break}default:Ko(t,e)}}function s7(t,e){switch(e.tagID){case m.BODY:case m.HTML:case m.BR:{Ko(t,e);break}case m.TEMPLATE:{ba(t,e);break}default:t._err(e,se.endTagWithoutMatchingOpenElement)}}function Ko(t,e){t._insertFakeElement(K.BODY,m.BODY),t.insertionMode=H.IN_BODY,Zl(t,e)}function Zl(t,e){switch(e.type){case ot.CHARACTER:{Rk(t,e);break}case ot.WHITESPACE_CHARACTER:{Lk(t,e);break}case ot.COMMENT:{_p(t,e);break}case ot.START_TAG:{hr(t,e);break}case ot.END_TAG:{ec(t,e);break}case ot.EOF:{Hk(t,e);break}}}function Lk(t,e){t._reconstructActiveFormattingElements(),t._insertCharacters(e)}function Rk(t,e){t._reconstructActiveFormattingElements(),t._insertCharacters(e),t.framesetOk=!1}function o7(t,e){t.openElements.tmplCount===0&&t.treeAdapter.adoptAttributes(t.openElements.items[0],e.attrs)}function u7(t,e){const r=t.openElements.tryPeekProperlyNestedBodyElement();r&&t.openElements.tmplCount===0&&(t.framesetOk=!1,t.treeAdapter.adoptAttributes(r,e.attrs))}function l7(t,e){const r=t.openElements.tryPeekProperlyNestedBodyElement();t.framesetOk&&r&&(t.treeAdapter.detachNode(r),t.openElements.popAllUpToHtmlElement(),t._insertElement(e,pe.HTML),t.insertionMode=H.IN_FRAMESET)}function c7(t,e){t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t._insertElement(e,pe.HTML)}function f7(t,e){t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t.openElements.currentTagId!==void 0&&pp.has(t.openElements.currentTagId)&&t.openElements.pop(),t._insertElement(e,pe.HTML)}function d7(t,e){t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t._insertElement(e,pe.HTML),t.skipNextNewLine=!0,t.framesetOk=!1}function h7(t,e){const r=t.openElements.tmplCount>0;(!t.formElement||r)&&(t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t._insertElement(e,pe.HTML),r||(t.formElement=t.openElements.current))}function p7(t,e){t.framesetOk=!1;const r=e.tagID;for(let n=t.openElements.stackTop;n>=0;n--){const a=t.openElements.tagIDs[n];if(r===m.LI&&a===m.LI||(r===m.DD||r===m.DT)&&(a===m.DD||a===m.DT)){t.openElements.generateImpliedEndTagsWithExclusion(a),t.openElements.popUntilTagNamePopped(a);break}if(a!==m.ADDRESS&&a!==m.DIV&&a!==m.P&&t._isSpecialElement(t.openElements.items[n],a))break}t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t._insertElement(e,pe.HTML)}function m7(t,e){t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t._insertElement(e,pe.HTML),t.tokenizer.state=Lr.PLAINTEXT}function v7(t,e){t.openElements.hasInScope(m.BUTTON)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(m.BUTTON)),t._reconstructActiveFormattingElements(),t._insertElement(e,pe.HTML),t.framesetOk=!1}function g7(t,e){const r=t.activeFormattingElements.getElementEntryInScopeWithTagName(K.A);r&&(gp(t,e),t.openElements.remove(r.element),t.activeFormattingElements.removeEntry(r)),t._reconstructActiveFormattingElements(),t._insertElement(e,pe.HTML),t.activeFormattingElements.pushElement(t.openElements.current,e)}function _7(t,e){t._reconstructActiveFormattingElements(),t._insertElement(e,pe.HTML),t.activeFormattingElements.pushElement(t.openElements.current,e)}function b7(t,e){t._reconstructActiveFormattingElements(),t.openElements.hasInScope(m.NOBR)&&(gp(t,e),t._reconstructActiveFormattingElements()),t._insertElement(e,pe.HTML),t.activeFormattingElements.pushElement(t.openElements.current,e)}function y7(t,e){t._reconstructActiveFormattingElements(),t._insertElement(e,pe.HTML),t.activeFormattingElements.insertMarker(),t.framesetOk=!1}function k7(t,e){t.treeAdapter.getDocumentMode(t.document)!==Qr.QUIRKS&&t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t._insertElement(e,pe.HTML),t.framesetOk=!1,t.insertionMode=H.IN_TABLE}function Dk(t,e){t._reconstructActiveFormattingElements(),t._appendElement(e,pe.HTML),t.framesetOk=!1,e.ackSelfClosing=!0}function Mk(t){const e=mk(t,_a.TYPE);return e!=null&&e.toLowerCase()===FU}function E7(t,e){t._reconstructActiveFormattingElements(),t._appendElement(e,pe.HTML),Mk(e)||(t.framesetOk=!1),e.ackSelfClosing=!0}function T7(t,e){t._appendElement(e,pe.HTML),e.ackSelfClosing=!0}function C7(t,e){t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t._appendElement(e,pe.HTML),t.framesetOk=!1,e.ackSelfClosing=!0}function w7(t,e){e.tagName=K.IMG,e.tagID=m.IMG,Dk(t,e)}function S7(t,e){t._insertElement(e,pe.HTML),t.skipNextNewLine=!0,t.tokenizer.state=Lr.RCDATA,t.originalInsertionMode=t.insertionMode,t.framesetOk=!1,t.insertionMode=H.TEXT}function x7(t,e){t.openElements.hasInButtonScope(m.P)&&t._closePElement(),t._reconstructActiveFormattingElements(),t.framesetOk=!1,t._switchToTextParsing(e,Lr.RAWTEXT)}function A7(t,e){t.framesetOk=!1,t._switchToTextParsing(e,Lr.RAWTEXT)}function $k(t,e){t._switchToTextParsing(e,Lr.RAWTEXT)}function O7(t,e){t._reconstructActiveFormattingElements(),t._insertElement(e,pe.HTML),t.framesetOk=!1,t.insertionMode=t.insertionMode===H.IN_TABLE||t.insertionMode===H.IN_CAPTION||t.insertionMode===H.IN_TABLE_BODY||t.insertionMode===H.IN_ROW||t.insertionMode===H.IN_CELL?H.IN_SELECT_IN_TABLE:H.IN_SELECT}function N7(t,e){t.openElements.currentTagId===m.OPTION&&t.openElements.pop(),t._reconstructActiveFormattingElements(),t._insertElement(e,pe.HTML)}function P7(t,e){t.openElements.hasInScope(m.RUBY)&&t.openElements.generateImpliedEndTags(),t._insertElement(e,pe.HTML)}function I7(t,e){t.openElements.hasInScope(m.RUBY)&&t.openElements.generateImpliedEndTagsWithExclusion(m.RTC),t._insertElement(e,pe.HTML)}function L7(t,e){t._reconstructActiveFormattingElements(),Ok(e),vp(e),e.selfClosing?t._appendElement(e,pe.MATHML):t._insertElement(e,pe.MATHML),e.ackSelfClosing=!0}function R7(t,e){t._reconstructActiveFormattingElements(),Nk(e),vp(e),e.selfClosing?t._appendElement(e,pe.SVG):t._insertElement(e,pe.SVG),e.ackSelfClosing=!0}function Fk(t,e){t._reconstructActiveFormattingElements(),t._insertElement(e,pe.HTML)}function hr(t,e){switch(e.tagID){case m.I:case m.S:case m.B:case m.U:case m.EM:case m.TT:case m.BIG:case m.CODE:case m.FONT:case m.SMALL:case m.STRIKE:case m.STRONG:{_7(t,e);break}case m.A:{g7(t,e);break}case m.H1:case m.H2:case m.H3:case m.H4:case m.H5:case m.H6:{f7(t,e);break}case m.P:case m.DL:case m.OL:case m.UL:case m.DIV:case m.DIR:case m.NAV:case m.MAIN:case m.MENU:case m.ASIDE:case m.CENTER:case m.FIGURE:case m.FOOTER:case m.HEADER:case m.HGROUP:case m.DIALOG:case m.DETAILS:case m.ADDRESS:case m.ARTICLE:case m.SEARCH:case m.SECTION:case m.SUMMARY:case m.FIELDSET:case m.BLOCKQUOTE:case m.FIGCAPTION:{c7(t,e);break}case m.LI:case m.DD:case m.DT:{p7(t,e);break}case m.BR:case m.IMG:case m.WBR:case m.AREA:case m.EMBED:case m.KEYGEN:{Dk(t,e);break}case m.HR:{C7(t,e);break}case m.RB:case m.RTC:{P7(t,e);break}case m.RT:case m.RP:{I7(t,e);break}case m.PRE:case m.LISTING:{d7(t,e);break}case m.XMP:{x7(t,e);break}case m.SVG:{R7(t,e);break}case m.HTML:{o7(t,e);break}case m.BASE:case m.LINK:case m.META:case m.STYLE:case m.TITLE:case m.SCRIPT:case m.BGSOUND:case m.BASEFONT:case m.TEMPLATE:{dn(t,e);break}case m.BODY:{u7(t,e);break}case m.FORM:{h7(t,e);break}case m.NOBR:{b7(t,e);break}case m.MATH:{L7(t,e);break}case m.TABLE:{k7(t,e);break}case m.INPUT:{E7(t,e);break}case m.PARAM:case m.TRACK:case m.SOURCE:{T7(t,e);break}case m.IMAGE:{w7(t,e);break}case m.BUTTON:{v7(t,e);break}case m.APPLET:case m.OBJECT:case m.MARQUEE:{y7(t,e);break}case m.IFRAME:{A7(t,e);break}case m.SELECT:{O7(t,e);break}case m.OPTION:case m.OPTGROUP:{N7(t,e);break}case m.NOEMBED:case m.NOFRAMES:{$k(t,e);break}case m.FRAMESET:{l7(t,e);break}case m.TEXTAREA:{S7(t,e);break}case m.NOSCRIPT:{t.options.scriptingEnabled?$k(t,e):Fk(t,e);break}case m.PLAINTEXT:{m7(t,e);break}case m.COL:case m.TH:case m.TD:case m.TR:case m.HEAD:case m.FRAME:case m.TBODY:case m.TFOOT:case m.THEAD:case m.CAPTION:case m.COLGROUP:break;default:Fk(t,e)}}function D7(t,e){if(t.openElements.hasInScope(m.BODY)&&(t.insertionMode=H.AFTER_BODY,t.options.sourceCodeLocationInfo)){const r=t.openElements.tryPeekProperlyNestedBodyElement();r&&t._setEndLocation(r,e)}}function M7(t,e){t.openElements.hasInScope(m.BODY)&&(t.insertionMode=H.AFTER_BODY,Kk(t,e))}function $7(t,e){const r=e.tagID;t.openElements.hasInScope(r)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(r))}function F7(t){const e=t.openElements.tmplCount>0,{formElement:r}=t;e||(t.formElement=null),(r||e)&&t.openElements.hasInScope(m.FORM)&&(t.openElements.generateImpliedEndTags(),e?t.openElements.popUntilTagNamePopped(m.FORM):r&&t.openElements.remove(r))}function B7(t){t.openElements.hasInButtonScope(m.P)||t._insertFakeElement(K.P,m.P),t._closePElement()}function H7(t){t.openElements.hasInListItemScope(m.LI)&&(t.openElements.generateImpliedEndTagsWithExclusion(m.LI),t.openElements.popUntilTagNamePopped(m.LI))}function U7(t,e){const r=e.tagID;t.openElements.hasInScope(r)&&(t.openElements.generateImpliedEndTagsWithExclusion(r),t.openElements.popUntilTagNamePopped(r))}function j7(t){t.openElements.hasNumberedHeaderInScope()&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilNumberedHeaderPopped())}function W7(t,e){const r=e.tagID;t.openElements.hasInScope(r)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(r),t.activeFormattingElements.clearToLastMarker())}function G7(t){t._reconstructActiveFormattingElements(),t._insertFakeElement(K.BR,m.BR),t.openElements.pop(),t.framesetOk=!1}function Bk(t,e){const r=e.tagName,n=e.tagID;for(let a=t.openElements.stackTop;a>0;a--){const o=t.openElements.items[a],c=t.openElements.tagIDs[a];if(n===c&&(n!==m.UNKNOWN||t.treeAdapter.getTagName(o)===r)){t.openElements.generateImpliedEndTagsWithExclusion(n),t.openElements.stackTop>=a&&t.openElements.shortenToLength(a);break}if(t._isSpecialElement(o,c))break}}function ec(t,e){switch(e.tagID){case m.A:case m.B:case m.I:case m.S:case m.U:case m.EM:case m.TT:case m.BIG:case m.CODE:case m.FONT:case m.NOBR:case m.SMALL:case m.STRIKE:case m.STRONG:{gp(t,e);break}case m.P:{B7(t);break}case m.DL:case m.UL:case m.OL:case m.DIR:case m.DIV:case m.NAV:case m.PRE:case m.MAIN:case m.MENU:case m.ASIDE:case m.BUTTON:case m.CENTER:case m.FIGURE:case m.FOOTER:case m.HEADER:case m.HGROUP:case m.DIALOG:case m.ADDRESS:case m.ARTICLE:case m.DETAILS:case m.SEARCH:case m.SECTION:case m.SUMMARY:case m.LISTING:case m.FIELDSET:case m.BLOCKQUOTE:case m.FIGCAPTION:{$7(t,e);break}case m.LI:{H7(t);break}case m.DD:case m.DT:{U7(t,e);break}case m.H1:case m.H2:case m.H3:case m.H4:case m.H5:case m.H6:{j7(t);break}case m.BR:{G7(t);break}case m.BODY:{D7(t,e);break}case m.HTML:{M7(t,e);break}case m.FORM:{F7(t);break}case m.APPLET:case m.OBJECT:case m.MARQUEE:{W7(t,e);break}case m.TEMPLATE:{ba(t,e);break}default:Bk(t,e)}}function Hk(t,e){t.tmplInsertionModeStack.length>0?Yk(t,e):bp(t,e)}function z7(t,e){var r;e.tagID===m.SCRIPT&&((r=t.scriptHandler)===null||r===void 0||r.call(t,t.openElements.current)),t.openElements.pop(),t.insertionMode=t.originalInsertionMode}function q7(t,e){t._err(e,se.eofInElementThatCanContainOnlyText),t.openElements.pop(),t.insertionMode=t.originalInsertionMode,t.onEof(e)}function yp(t,e){if(t.openElements.currentTagId!==void 0&&Pk.has(t.openElements.currentTagId))switch(t.pendingCharacterTokens.length=0,t.hasNonWhitespacePendingCharacterToken=!1,t.originalInsertionMode=t.insertionMode,t.insertionMode=H.IN_TABLE_TEXT,e.type){case ot.CHARACTER:{jk(t,e);break}case ot.WHITESPACE_CHARACTER:{Uk(t,e);break}}else Vo(t,e)}function Y7(t,e){t.openElements.clearBackToTableContext(),t.activeFormattingElements.insertMarker(),t._insertElement(e,pe.HTML),t.insertionMode=H.IN_CAPTION}function K7(t,e){t.openElements.clearBackToTableContext(),t._insertElement(e,pe.HTML),t.insertionMode=H.IN_COLUMN_GROUP}function X7(t,e){t.openElements.clearBackToTableContext(),t._insertFakeElement(K.COLGROUP,m.COLGROUP),t.insertionMode=H.IN_COLUMN_GROUP,kp(t,e)}function V7(t,e){t.openElements.clearBackToTableContext(),t._insertElement(e,pe.HTML),t.insertionMode=H.IN_TABLE_BODY}function Q7(t,e){t.openElements.clearBackToTableContext(),t._insertFakeElement(K.TBODY,m.TBODY),t.insertionMode=H.IN_TABLE_BODY,rc(t,e)}function J7(t,e){t.openElements.hasInTableScope(m.TABLE)&&(t.openElements.popUntilTagNamePopped(m.TABLE),t._resetInsertionMode(),t._processStartTag(e))}function Z7(t,e){Mk(e)?t._appendElement(e,pe.HTML):Vo(t,e),e.ackSelfClosing=!0}function ej(t,e){!t.formElement&&t.openElements.tmplCount===0&&(t._insertElement(e,pe.HTML),t.formElement=t.openElements.current,t.openElements.pop())}function vs(t,e){switch(e.tagID){case m.TD:case m.TH:case m.TR:{Q7(t,e);break}case m.STYLE:case m.SCRIPT:case m.TEMPLATE:{dn(t,e);break}case m.COL:{X7(t,e);break}case m.FORM:{ej(t,e);break}case m.TABLE:{J7(t,e);break}case m.TBODY:case m.TFOOT:case m.THEAD:{V7(t,e);break}case m.INPUT:{Z7(t,e);break}case m.CAPTION:{Y7(t,e);break}case m.COLGROUP:{K7(t,e);break}default:Vo(t,e)}}function Xo(t,e){switch(e.tagID){case m.TABLE:{t.openElements.hasInTableScope(m.TABLE)&&(t.openElements.popUntilTagNamePopped(m.TABLE),t._resetInsertionMode());break}case m.TEMPLATE:{ba(t,e);break}case m.BODY:case m.CAPTION:case m.COL:case m.COLGROUP:case m.HTML:case m.TBODY:case m.TD:case m.TFOOT:case m.TH:case m.THEAD:case m.TR:break;default:Vo(t,e)}}function Vo(t,e){const r=t.fosterParentingEnabled;t.fosterParentingEnabled=!0,Zl(t,e),t.fosterParentingEnabled=r}function Uk(t,e){t.pendingCharacterTokens.push(e)}function jk(t,e){t.pendingCharacterTokens.push(e),t.hasNonWhitespacePendingCharacterToken=!0}function Qo(t,e){let r=0;if(t.hasNonWhitespacePendingCharacterToken)for(;r<t.pendingCharacterTokens.length;r++)Vo(t,t.pendingCharacterTokens[r]);else for(;r<t.pendingCharacterTokens.length;r++)t._insertCharacters(t.pendingCharacterTokens[r]);t.insertionMode=t.originalInsertionMode,t._processToken(e)}const Wk=new Set([m.CAPTION,m.COL,m.COLGROUP,m.TBODY,m.TD,m.TFOOT,m.TH,m.THEAD,m.TR]);function tj(t,e){const r=e.tagID;Wk.has(r)?t.openElements.hasInTableScope(m.CAPTION)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(m.CAPTION),t.activeFormattingElements.clearToLastMarker(),t.insertionMode=H.IN_TABLE,vs(t,e)):hr(t,e)}function rj(t,e){const r=e.tagID;switch(r){case m.CAPTION:case m.TABLE:{t.openElements.hasInTableScope(m.CAPTION)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(m.CAPTION),t.activeFormattingElements.clearToLastMarker(),t.insertionMode=H.IN_TABLE,r===m.TABLE&&Xo(t,e));break}case m.BODY:case m.COL:case m.COLGROUP:case m.HTML:case m.TBODY:case m.TD:case m.TFOOT:case m.TH:case m.THEAD:case m.TR:break;default:ec(t,e)}}function kp(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.COL:{t._appendElement(e,pe.HTML),e.ackSelfClosing=!0;break}case m.TEMPLATE:{dn(t,e);break}default:tc(t,e)}}function nj(t,e){switch(e.tagID){case m.COLGROUP:{t.openElements.currentTagId===m.COLGROUP&&(t.openElements.pop(),t.insertionMode=H.IN_TABLE);break}case m.TEMPLATE:{ba(t,e);break}case m.COL:break;default:tc(t,e)}}function tc(t,e){t.openElements.currentTagId===m.COLGROUP&&(t.openElements.pop(),t.insertionMode=H.IN_TABLE,t._processToken(e))}function rc(t,e){switch(e.tagID){case m.TR:{t.openElements.clearBackToTableBodyContext(),t._insertElement(e,pe.HTML),t.insertionMode=H.IN_ROW;break}case m.TH:case m.TD:{t.openElements.clearBackToTableBodyContext(),t._insertFakeElement(K.TR,m.TR),t.insertionMode=H.IN_ROW,nc(t,e);break}case m.CAPTION:case m.COL:case m.COLGROUP:case m.TBODY:case m.TFOOT:case m.THEAD:{t.openElements.hasTableBodyContextInTableScope()&&(t.openElements.clearBackToTableBodyContext(),t.openElements.pop(),t.insertionMode=H.IN_TABLE,vs(t,e));break}default:vs(t,e)}}function Ep(t,e){const r=e.tagID;switch(e.tagID){case m.TBODY:case m.TFOOT:case m.THEAD:{t.openElements.hasInTableScope(r)&&(t.openElements.clearBackToTableBodyContext(),t.openElements.pop(),t.insertionMode=H.IN_TABLE);break}case m.TABLE:{t.openElements.hasTableBodyContextInTableScope()&&(t.openElements.clearBackToTableBodyContext(),t.openElements.pop(),t.insertionMode=H.IN_TABLE,Xo(t,e));break}case m.BODY:case m.CAPTION:case m.COL:case m.COLGROUP:case m.HTML:case m.TD:case m.TH:case m.TR:break;default:Xo(t,e)}}function nc(t,e){switch(e.tagID){case m.TH:case m.TD:{t.openElements.clearBackToTableRowContext(),t._insertElement(e,pe.HTML),t.insertionMode=H.IN_CELL,t.activeFormattingElements.insertMarker();break}case m.CAPTION:case m.COL:case m.COLGROUP:case m.TBODY:case m.TFOOT:case m.THEAD:case m.TR:{t.openElements.hasInTableScope(m.TR)&&(t.openElements.clearBackToTableRowContext(),t.openElements.pop(),t.insertionMode=H.IN_TABLE_BODY,rc(t,e));break}default:vs(t,e)}}function Gk(t,e){switch(e.tagID){case m.TR:{t.openElements.hasInTableScope(m.TR)&&(t.openElements.clearBackToTableRowContext(),t.openElements.pop(),t.insertionMode=H.IN_TABLE_BODY);break}case m.TABLE:{t.openElements.hasInTableScope(m.TR)&&(t.openElements.clearBackToTableRowContext(),t.openElements.pop(),t.insertionMode=H.IN_TABLE_BODY,Ep(t,e));break}case m.TBODY:case m.TFOOT:case m.THEAD:{(t.openElements.hasInTableScope(e.tagID)||t.openElements.hasInTableScope(m.TR))&&(t.openElements.clearBackToTableRowContext(),t.openElements.pop(),t.insertionMode=H.IN_TABLE_BODY,Ep(t,e));break}case m.BODY:case m.CAPTION:case m.COL:case m.COLGROUP:case m.HTML:case m.TD:case m.TH:break;default:Xo(t,e)}}function ij(t,e){const r=e.tagID;Wk.has(r)?(t.openElements.hasInTableScope(m.TD)||t.openElements.hasInTableScope(m.TH))&&(t._closeTableCell(),nc(t,e)):hr(t,e)}function aj(t,e){const r=e.tagID;switch(r){case m.TD:case m.TH:{t.openElements.hasInTableScope(r)&&(t.openElements.generateImpliedEndTags(),t.openElements.popUntilTagNamePopped(r),t.activeFormattingElements.clearToLastMarker(),t.insertionMode=H.IN_ROW);break}case m.TABLE:case m.TBODY:case m.TFOOT:case m.THEAD:case m.TR:{t.openElements.hasInTableScope(r)&&(t._closeTableCell(),Gk(t,e));break}case m.BODY:case m.CAPTION:case m.COL:case m.COLGROUP:case m.HTML:break;default:ec(t,e)}}function zk(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.OPTION:{t.openElements.currentTagId===m.OPTION&&t.openElements.pop(),t._insertElement(e,pe.HTML);break}case m.OPTGROUP:{t.openElements.currentTagId===m.OPTION&&t.openElements.pop(),t.openElements.currentTagId===m.OPTGROUP&&t.openElements.pop(),t._insertElement(e,pe.HTML);break}case m.HR:{t.openElements.currentTagId===m.OPTION&&t.openElements.pop(),t.openElements.currentTagId===m.OPTGROUP&&t.openElements.pop(),t._appendElement(e,pe.HTML),e.ackSelfClosing=!0;break}case m.INPUT:case m.KEYGEN:case m.TEXTAREA:case m.SELECT:{t.openElements.hasInSelectScope(m.SELECT)&&(t.openElements.popUntilTagNamePopped(m.SELECT),t._resetInsertionMode(),e.tagID!==m.SELECT&&t._processStartTag(e));break}case m.SCRIPT:case m.TEMPLATE:{dn(t,e);break}}}function qk(t,e){switch(e.tagID){case m.OPTGROUP:{t.openElements.stackTop>0&&t.openElements.currentTagId===m.OPTION&&t.openElements.tagIDs[t.openElements.stackTop-1]===m.OPTGROUP&&t.openElements.pop(),t.openElements.currentTagId===m.OPTGROUP&&t.openElements.pop();break}case m.OPTION:{t.openElements.currentTagId===m.OPTION&&t.openElements.pop();break}case m.SELECT:{t.openElements.hasInSelectScope(m.SELECT)&&(t.openElements.popUntilTagNamePopped(m.SELECT),t._resetInsertionMode());break}case m.TEMPLATE:{ba(t,e);break}}}function sj(t,e){const r=e.tagID;r===m.CAPTION||r===m.TABLE||r===m.TBODY||r===m.TFOOT||r===m.THEAD||r===m.TR||r===m.TD||r===m.TH?(t.openElements.popUntilTagNamePopped(m.SELECT),t._resetInsertionMode(),t._processStartTag(e)):zk(t,e)}function oj(t,e){const r=e.tagID;r===m.CAPTION||r===m.TABLE||r===m.TBODY||r===m.TFOOT||r===m.THEAD||r===m.TR||r===m.TD||r===m.TH?t.openElements.hasInTableScope(r)&&(t.openElements.popUntilTagNamePopped(m.SELECT),t._resetInsertionMode(),t.onEndTag(e)):qk(t,e)}function uj(t,e){switch(e.tagID){case m.BASE:case m.BASEFONT:case m.BGSOUND:case m.LINK:case m.META:case m.NOFRAMES:case m.SCRIPT:case m.STYLE:case m.TEMPLATE:case m.TITLE:{dn(t,e);break}case m.CAPTION:case m.COLGROUP:case m.TBODY:case m.TFOOT:case m.THEAD:{t.tmplInsertionModeStack[0]=H.IN_TABLE,t.insertionMode=H.IN_TABLE,vs(t,e);break}case m.COL:{t.tmplInsertionModeStack[0]=H.IN_COLUMN_GROUP,t.insertionMode=H.IN_COLUMN_GROUP,kp(t,e);break}case m.TR:{t.tmplInsertionModeStack[0]=H.IN_TABLE_BODY,t.insertionMode=H.IN_TABLE_BODY,rc(t,e);break}case m.TD:case m.TH:{t.tmplInsertionModeStack[0]=H.IN_ROW,t.insertionMode=H.IN_ROW,nc(t,e);break}default:t.tmplInsertionModeStack[0]=H.IN_BODY,t.insertionMode=H.IN_BODY,hr(t,e)}}function lj(t,e){e.tagID===m.TEMPLATE&&ba(t,e)}function Yk(t,e){t.openElements.tmplCount>0?(t.openElements.popUntilTagNamePopped(m.TEMPLATE),t.activeFormattingElements.clearToLastMarker(),t.tmplInsertionModeStack.shift(),t._resetInsertionMode(),t.onEof(e)):bp(t,e)}function cj(t,e){e.tagID===m.HTML?hr(t,e):ic(t,e)}function Kk(t,e){var r;if(e.tagID===m.HTML){if(t.fragmentContext||(t.insertionMode=H.AFTER_AFTER_BODY),t.options.sourceCodeLocationInfo&&t.openElements.tagIDs[0]===m.HTML){t._setEndLocation(t.openElements.items[0],e);const n=t.openElements.items[1];n&&!(!((r=t.treeAdapter.getNodeSourceCodeLocation(n))===null||r===void 0)&&r.endTag)&&t._setEndLocation(n,e)}}else ic(t,e)}function ic(t,e){t.insertionMode=H.IN_BODY,Zl(t,e)}function fj(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.FRAMESET:{t._insertElement(e,pe.HTML);break}case m.FRAME:{t._appendElement(e,pe.HTML),e.ackSelfClosing=!0;break}case m.NOFRAMES:{dn(t,e);break}}}function dj(t,e){e.tagID===m.FRAMESET&&!t.openElements.isRootHtmlElementCurrent()&&(t.openElements.pop(),!t.fragmentContext&&t.openElements.currentTagId!==m.FRAMESET&&(t.insertionMode=H.AFTER_FRAMESET))}function hj(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.NOFRAMES:{dn(t,e);break}}}function pj(t,e){e.tagID===m.HTML&&(t.insertionMode=H.AFTER_AFTER_FRAMESET)}function mj(t,e){e.tagID===m.HTML?hr(t,e):ac(t,e)}function ac(t,e){t.insertionMode=H.IN_BODY,Zl(t,e)}function vj(t,e){switch(e.tagID){case m.HTML:{hr(t,e);break}case m.NOFRAMES:{dn(t,e);break}}}function gj(t,e){e.chars=xt,t._insertCharacters(e)}function _j(t,e){t._insertCharacters(e),t.framesetOk=!1}function Xk(t){for(;t.treeAdapter.getNamespaceURI(t.openElements.current)!==pe.HTML&&t.openElements.currentTagId!==void 0&&!t._isIntegrationPoint(t.openElements.currentTagId,t.openElements.current);)t.openElements.pop()}function bj(t,e){if(LU(e))Xk(t),t._startTagOutsideForeignContent(e);else{const r=t._getAdjustedCurrentElement(),n=t.treeAdapter.getNamespaceURI(r);n===pe.MATHML?Ok(e):n===pe.SVG&&(RU(e),Nk(e)),vp(e),e.selfClosing?t._appendElement(e,n):t._insertElement(e,n),e.ackSelfClosing=!0}}function yj(t,e){if(e.tagID===m.P||e.tagID===m.BR){Xk(t),t._endTagOutsideForeignContent(e);return}for(let r=t.openElements.stackTop;r>0;r--){const n=t.openElements.items[r];if(t.treeAdapter.getNamespaceURI(n)===pe.HTML){t._endTagOutsideForeignContent(e);break}const a=t.treeAdapter.getTagName(n);if(a.toLowerCase()===e.tagName){e.tagName=a,t.openElements.shortenToLength(r);break}}}K.AREA,K.BASE,K.BASEFONT,K.BGSOUND,K.BR,K.COL,K.EMBED,K.FRAME,K.HR,K.IMG,K.INPUT,K.KEYGEN,K.LINK,K.META,K.PARAM,K.SOURCE,K.TRACK,K.WBR;function kj(t,e){return jU.parse(t,e)}const gs={...Jn,createElement(t,e,r){const n={nodeName:t,attributes:r.reduce((a,o)=>({...a,[o.name]:o.value}),{}),childNodes:[]};return sc(n,{tagName:{value:t,writable:!0},namespaceURI:{value:e,writable:!0}})},createCommentNode(t){return sc({nodeName:"#comment",data:t})},setDocumentType(t,e,r,n){const a=t.childNodes.find(o=>o.nodeName==="#documentType");if(a)a.name=e,a.publicId=r,a.systemId=n;else{const o=sc({nodeName:"#documentType",name:e,publicId:r,systemId:n});gs.appendChild(t,o)}},insertText(t,e){if(t.childNodes.length>0){const r=t.childNodes[t.childNodes.length-1];if(gs.isTextNode(r)){r.value+=e;return}}gs.appendChild(t,Vk(e))},insertTextBefore(t,e,r){const n=t.childNodes[t.childNodes.indexOf(r)-1];n&&gs.isTextNode(n)?n.value+=e:gs.insertBefore(t,Vk(e),r)},adoptAttributes(t,e){const r=(n,{name:a,value:o})=>a in t.attributes?n:{...n,[a]:o};Object.assign(t.attributes,e.reduce(r,{}))},getAttrList(t){return Object.entries(t.attributes).map(([e,r])=>({name:e,value:r}))}};function sc(t,e){return Object.defineProperties(t,{parentNode:{value:null,writable:!0},sourceCodeLocation:{value:null,writable:!0},...e})}function Vk(t){return sc({nodeName:"#text",value:t})}function Ej(t,e){return kj(t,{treeAdapter:gs,...e})}function oc(t){if(t.tagName){let e=`<${t.tagName}`;for(const[r,n]of Object.entries(t.attributes))e+=` ${r}="${fk(n)}"`;if(Tj(t))return e+"/>";e+=">";for(const r of t.childNodes??[])e+=oc(r);return t.nodeName==="template"&&(e+=oc(t.content)),e+`</${t.tagName}>`}if(t.nodeName==="#text")return["style","script"].includes(t.parentNode.tagName)?t.value:fk(t.value);if(t.nodeName==="#comment")return`<!-- ${t.data} -->`;if(t.nodeName==="#documentType")return`<!DOCTYPE ${t.name}>`;if(t.nodeName.startsWith("#document"))return(t.childNodes??[]).map(oc).join("")}function Tj(t){return["area","base","br","col","embed","hr","img","input","link","meta","param","source","track","wbr"].includes(t.nodeName.toLowerCase())}function _s(t,e){const r=zn(e)?e:n=>y8(n,e);if(r(t))return t;for(const n of t.childNodes??[]){const a=_s(n,r);if(a)return a}return null}const Cj={Date:!0,RegExp:!0,String:!0,Number:!0};function Qk(t,e,r={cyclesFix:!0},n=[]){let a=[];const o=Array.isArray(t);for(const d in t){const p=t[d],v=o?+d:d;if(!(d in e)){a.push({type:"REMOVE",path:[v],oldValue:t[d]});continue}const b=e[d],C=typeof p=="object"&&typeof b=="object"&&Array.isArray(p)===Array.isArray(b);p&&b&&C&&!Cj[Object.getPrototypeOf(p)?.constructor?.name]&&(!r.cyclesFix||!n.includes(p))?a.push.apply(a,Qk(p,b,r,r.cyclesFix?n.concat([p]):[]).map(T=>(T.path.unshift(v),T))):p!==b&&!(Number.isNaN(p)&&Number.isNaN(b))&&!(C&&(isNaN(p)?p+""==b+"":+p==+b))&&a.push({path:[v],type:"CHANGE",value:b,oldValue:p})}const c=Array.isArray(e);for(const d in e)d in t||a.push({type:"CREATE",path:[c?+d:d],value:e[d]});return a}function wj(t,e,r,n){const a={dataId:"data-id",dataPreview:"data-preview",...n};if(!t.body||!e.body||!Sj(t.head,e.head,a))return!1;const o=xj(t.body,e.body,a),{contentWindow:c,contentDocument:d}=r;if(!o.identical&&!o.match)return!1;if(o.match){const p=d.createElement("template"),v=Aj(d,t.body,o.match,a.dataId);p.innerHTML=oc(o.replace),v.replaceWith(...p.content.childNodes)}return ps.trigger("patchPreview",{window:c,document:d,diff:o,...e}),!0}function Sj(t,e,{dataPreview:r}){const n=(a,o)=>{if(o.tagName==="script"){if(o.attributes?.src)return a.concat(o.attributes?.src);if(o.attributes?.[r]==="diff")return a.concat(o)}return a};return Gl(t?.childNodes?.reduce(n,[]),e?.childNodes?.reduce(n,[]))}function xj(t,e,{dataId:r,dataPreview:n,filterBody:a}){const o=Qk(t,e,{cyclesFix:!1}),[c,...d]=a?a(o):o;let p,v;for(const[b,C]of Object.entries(c?.path??[])){if(d.some(T=>C!==T.path[b]))break;if(Number.isInteger(C)){if(t=t.childNodes[C],e=e.childNodes[C],!t||!e)break;t.attributes?.[r]&&(p=t,v=e)}}return v&&_s(v,b=>b.attributes?.[n]==="reload")&&(p=null),{identical:!o.length,diffs:o,match:p,replace:v}}function Aj(t,e,r,n){const a=r.attributes?.[n],o=t.querySelectorAll(`[${n}="${a}"]`);let c=0;return o.length>1&&(function d(p){p!==r&&(p.attributes?.[n]===a&&c++,(p.childNodes??[]).forEach(d))})(e),o[c]}const zt=sn("Preview",{state:()=>({url:"",query:null,data:{},iframe:null,document:null,channel:0,size:"",overlay:!1}),getters:{name:t=>`preview-${t.channel}`,window:t=>t.document?.defaultView},actions:{...Si.map("preview",{load(t){return Object.assign(this,t)}}),setData(t){this.data={...t}},setIframe(t){this.iframe=t,this.document=t.contentDocument,this.url=t.contentDocument.URL}}}),Oj={__name:"PreviewIframe",props:{name:String},emits:"update",setup(t,{expose:e,emit:r}){const n=t,{proxy:a}=to();e({write:p});const o=Be(null),c=Be(null);Nr(()=>o.value.remove());function d(v){const{contentWindow:b,contentDocument:C}=o.value;b.location.host&&(c.value!==C&&r("update",{event:v,window:b,document:C},a),b.addEventListener("beforeunload",T=>r("update",{event:T,window:b,document:C},a)),b.addEventListener("unload",T=>r("update",{event:T,window:b,document:C},a)))}function p(v,b){const{contentWindow:C,contentDocument:T}=o.value;T.open(),T.addEventListener("DOMContentLoaded",A=>{c.value=T,r("update",{event:A,window:C,document:T},a)},{once:!0}),C.history.replaceState(null,"",v),T.write(b),T.close()}return{__sfc:!0,proxy:a,emit:r,props:n,el:o,loaded:c,load:d,write:p}}};var Nj=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("iframe",{ref:"el",style:n.loaded?!1:{zIndex:-1},attrs:{name:n.props.name},on:{load:n.load}})},Pj=[],Ij=Q(Oj,Nj,Pj,!1),Lj=Ij.exports;const Rj={__name:"Preview",setup(t){const{trigger:e}=Me({loadPreview:{handler(C,T){r.load({query:T})},priority:-10},readyPreview:{handler(C,{first:T,window:A}){T||(r.query=null),r.setData(A.yootheme?.customizer)},priority:10},patchPreview(C,{window:T,document:A,head:F,body:G}){const j="customizer-data",O={parentNode:{tagName:"script",attributes:{id:j}}},x=_s(F,O)??_s(G,O);if(x){const S=A.createElement("script"),P=A.getElementById(j);S.textContent=x.value,S.setAttribute("id",j),P.replaceWith(S),r.setData(T.yootheme?.customizer)}}}),r=zt();let n=null,a=null;Si.after("preview.load",async C=>p(C.url,C.query));const o=Be(null),c=Be(null),d=Ae(()=>o.value?.name!==r.name);async function p(C,T){const[A,F]=Ue(C).formUrl({customizer:Cl(JSON.stringify(T??{}))}).post().controller();n&&n.abort(),n=A;const G=await F.res(P=>{if(r.url=C=P.url,P.redirected&&T){p(C,T);return}return P.text()}).catch(P=>P.text);if(dr(G))return;const j=Ej(G,{onParseError:P=>console.log("HTML parse error.",P)}),O=_s(j,{tagName:"head"}),x=_s(j,{tagName:"body"}),S={filterBody:P=>P.filter(R=>R.type!=="CHANGE"||!R.value.includes("window.yootheme")||xn(x,R.path.slice(0,-1))?.parentNode.attributes.id!=="customizer-data")};(!a||!wj(a,{head:O,body:x},o.value.$el,S))&&(r.channel++,b(Lj,{name:r.name},c.value).write(C,G)),n=null,a={head:O,body:x}}function v({event:C,window:T,document:A},F){const G="DOMContentLoaded";if(![G,"load"].includes(C.type)){e(`${C.type}Preview`,{event:C,window:T,document:A});return}G===C.type?(o.value&&o.value.$destroy(),o.value=F):a=null,d.value||(r.setIframe(F.$el),e("readyPreview",{event:C,window:T,document:A,first:G===C.type,iframe:F.$el,$preview:r}))}function b(C,T,A=null){const F=new oe({extends:C,propsData:T});return F.$on("update",v),A&&A.appendChild(F.$mount().$el),F}return{__sfc:!0,trigger:e,state:r,pending:n,previous:a,current:o,preview:c,loading:d,load:p,update:v,create:b}}};var Dj=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{staticClass:"yo-preview uk-flex-auto uk-flex uk-position-relative"},[r("div",{ref:"preview",staticClass:"yo-preview-iframe uk-margin-auto uk-margin-auto-vertical",class:{[`yo-preview-size-${n.state.size}`]:n.state.size}},[r("div",{directives:[{name:"show",rawName:"v-show",value:!n.current,expression:"!current"}],staticClass:"uk-position-center",attrs:{"uk-spinner":""}}),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:n.state.overlay,expression:"state.overlay"}],staticClass:"uk-position-cover uk-position-z-index uk-overlay uk-overlay-default"})])])},Mj=[],$j=Q(Rj,Dj,Mj,!1),Fj=$j.exports;const Bj={__name:"PreviewResize",setup(t){const{i18n:e}=oe,r=Object.entries({"":"desktop",desktop:"laptop","tablet-portrait":"tablet-portrait","phone-portrait":"phone-portrait"}),n=zt();function a(b){return b.split("-")[0]}function o(b){return a(b)===a(n.size)}function c(b){return o(b)&&n.size.endsWith("-landscape")}function d(b){n.size=n.size===b?b.replace("portrait","landscape"):b}function p(b){b.style.visibility="hidden"}function v(b){setTimeout(()=>{b.style.visibility="",b.classList.add("uk-animation-slide-bottom-small")},b.dataset.index*100)}return{__sfc:!0,i18n:e,icons:r,Preview:n,icon:a,isActive:o,isLandscape:c,resize:d,beforeAppear:p,appear:v}}};var Hj=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("TransitionGroup",e._g({staticClass:"uk-grid uk-grid-small",attrs:{tag:"ul",appear:""}},{beforeAppear:n.beforeAppear,appear:n.appear}),e._l(n.icons,function([a,o],c){return r("li",{key:o,class:{"uk-active":n.isActive(a)},attrs:{"data-index":c}},[r("a",{staticClass:"uk-icon uk-icon-link",class:{"yo-landscape":n.isLandscape(a)},attrs:{href:"",icon:n.icon(o),"uk-icon":"","aria-label":n.i18n.t("Enter %size% preview mode",{size:o})},on:{click:function(d){return d.preventDefault(),n.resize(a)}}})])}),0)},Uj=[],jj=Q(Bj,Hj,Uj,!1),Wj=jj.exports;const Gj={__name:"SplitPane",props:{value:[String,Number],minWidth:[String,Number]},emits:"input",setup(t,{emit:e}){const r=t,{i18n:n}=oe,a=Be(null),o=Be(.75);return Gt(()=>ke.on(a.value,"pointerdown",c=>{a.value.setPointerCapture(c.pointerId);const{x:d}=ke.getEventPos(c);let{left:p}=ke.offset(a.value);p-=d;const v=ke.on(a.value,"pointermove",b=>e("input",Math.floor(ke.clamp(ke.getEventPos(b).x-p,r.minWidth,window.innerWidth*o.value))));ke.once(a.value,"pointerup pointercancel",b=>{a.value.releasePointerCapture(b.pointerId),v()})})),{__sfc:!0,i18n:n,emit:e,props:r,el:a,maxWidth:o,api:ue}}};var zj=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{ref:"el",staticClass:"uk-position-center-right"},[r("button",{staticClass:"uk-icon yo-icon-link yo-sidebar-drag",attrs:{type:"button","aria-label":n.i18n.t("Resize Preview")}},[r("img",{attrs:{"uk-svg":`${n.api.config.assets}/images/customizer/drag.svg`,"aria-hidden":"true"}})])])},qj=[],Yj=Q(Gj,zj,qj,!1),Kj=Yj.exports;const Xj={__name:"Sidebar",props:{root:{type:Object,required:!0},panels:{type:Object,default:()=>({})}},emits:"panelEnter",setup(t,{expose:e,emit:r}){const n=t,{i18n:a}=oe,{proxy:o}=to();br("Sidebar",o);const{trigger:c}=Me({openPanel:[{handler(ae,Z){const ne=Sn(Z)?Z:Z.name;if(b.value?.name===ne)return!1;ae.sidebar=o},priority:10},{handler(ae,Z){Sn(Z)&&(Z=n.panels[Z]),Z&&(Z.width||=b.value?.width||d.initialWidth,d.length=G.push(Z),ae.params[0]=Z)},priority:1},{handler(){return new Promise(ae=>o.$once("panelEnter",ae))},priority:-5}],closePanel({origin:ae}){ae!==o&&O()},closeSidebarPanel(ae,Z){O(Z)}}),d=Jt({length:0,last:null,inTransition:!1,initialWidth:"",resizedWidth:0}),p=Be(null),v=Be(!1),b=Ae(()=>G[d.length-1]),C=Ae(()=>G[d.length-2]),T=Ae(()=>G.slice(0,d.length)),A=Ae(()=>b.value?.width||d.initialWidth||""),F=Ae({get(){return Math.max(d.resizedWidth,A.value)||""},set(ae){d.resizedWidth=ae,p.value.style.transition="unset",requestAnimationFrame(()=>p.value.style.transition="")}});let G=[];d.length=G.push(n.root),Gt(()=>{Tn(()=>d.initialWidth=p.value.offsetWidth),o.$on("panelEnter",ae=>ae.querySelector("[autofocus]")?.focus())});function j(ae){return c("openPanel",ae)}function O(ae=b.value){const Z=G.indexOf(ae);if(d.length===1||Z===-1)return;const ne={close:!0};c("closePanel",[ne,ae,G[Z-1]]),ne.close&&(G.splice(Z,1),d.length--)}function x(ae){d.last?ae.style.left.startsWith("-")&&(ae.style.left=`-${ae.style.width}`):ae.style.left="",d.last=b.value?.name}function S(ae){ae.offsetWidth,ae.style.left=0}function P(ae){r("panelEnter",ae),d.last=b.value?.name}function R(ae){ae.style.left=0,ae.offsetWidth}function B(ae){Tn(()=>ae.style.left=le(ae)?`-${ae.offsetWidth}px`:"")}function q(){d.last=b.value?.name}function le(ae){for(;ae.nextElementSibling;){if(ae.nextElementSibling.classList.contains("v-enter"))return!0;ae=ae.nextElementSibling}return!1}return e({panel:b,stack:G,hidden:v,openPanel:j,root:n.root}),{__sfc:!0,i18n:a,proxy:o,emit:r,trigger:c,props:n,state:d,el:p,hidden:v,panel:b,prevPanel:C,openPanels:T,minWidth:A,width:F,stack:G,openPanel:j,closePanel:O,beforeEnter:x,enter:S,afterEnter:P,beforeLeave:R,leave:B,afterLeave:q,findEnteringElement:le,api:ue,Panel:$9,SplitPane:Kj}}};var Vj=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{ref:"el",staticClass:"yo-sidebar uk-flex-none",style:{width:`${n.width}px`,marginLeft:n.hidden?`-${n.width}px`:""},on:{transitionend:function(a){if(a.target!==a.currentTarget)return null;n.state.inTransition=!1}}},[r("div",{staticClass:"yo-sidebar-header"},[e._t("header",function(){return[r("div",{staticClass:"yo-sidebar-close uk-flex uk-flex-middle"},[r("Transition",{attrs:{appear:"","appear-to-class":"uk-animation-fade"}},[r("button",{staticClass:"uk-button uk-button-text uk-button-small uk-animation-fast",attrs:{type:"button"},on:{click:function(a){return n.trigger("close")}}},[e._v(` `+e._s(n.i18n.t("Close"))+` `)])])],1)]}),e._v(" "),r("div",{ref:"breadcrumb",staticClass:"yo-sidebar-breadcrumb uk-flex uk-flex-middle uk-flex-between uk-animation-fast",on:{click:function(a){a.preventDefault()}}},[r("Transition",{attrs:{"enter-active-class":"uk-animation-fade","leave-active-class":"uk-animation-fade uk-animation-reverse"}},[n.state.length>1?r("a",{staticClass:"uk-h4 uk-flex uk-flex-middle uk-margin-remove",attrs:{href:""},on:{click:function(a){return n.closePanel()}}},[r("img",{staticClass:"uk-margin-small-right uk-icon",attrs:{"uk-svg":`${n.api.config.assets}/images/customizer/breadcrumb.svg`,"aria-hidden":"true"}}),e._v(" "),r("span",[e._v(e._s(n.i18n.t(n.prevPanel?n.prevPanel.title||"Back":"Home")))])]):e._e()]),e._v(" "),n.state.length===1?r("span"):e._e()],1)],2),e._v(" "),r("TransitionGroup",e._g({staticClass:"yo-sidebar-content",attrs:{tag:"div"}},{beforeEnter:n.beforeEnter,enter:n.enter,afterEnter:n.afterEnter,beforeLeave:n.beforeLeave,leave:n.leave,afterLeave:n.afterLeave}),e._l(n.openPanels,function(a){return r(n.Panel,{directives:[{name:"show",rawName:"v-show",value:a===n.panel||a.name===n.state.last,expression:"pan === panel || pan.name === state.last"}],key:a.name,style:{width:`${Math.max(n.state.resizedWidth,a.width??n.state.initialWidth)}px`},attrs:{config:a}},[e._t("panel",function(){return[e._v("Empty panel")]},{panel:a})],2)}),1),e._v(" "),r("div",{staticClass:"yo-sidebar-footer"},[r("div",{staticClass:"uk-position-relative uk-height-1-1 uk-flex uk-flex-center uk-flex-middle uk-overflow-hidden"},[r("div",{staticClass:"uk-position-center-left uk-position-small"},[r("button",{staticClass:"uk-icon uk-icon-link",attrs:{type:"button","aria-label":n.i18n.t("Hide Sidebar")},on:{click:function(a){a.preventDefault(),(n.hidden=!0)&&(n.state.inTransition=!0)}}},[r("img",{attrs:{"uk-svg":`${n.api.config.assets}/images/customizer/chevron-double-left.svg`,"aria-hidden":"true"}})])]),e._v(" "),e._t("footer"),e._v(" "),r(n.SplitPane,{attrs:{"min-width":n.minWidth},model:{value:n.width,callback:function(a){n.width=a},expression:"width"}})],2)]),e._v(" "),n.hidden&&!n.state.inTransition?r("button",{staticClass:"yo-sidebar-hide uk-icon-button uk-icon uk-animation-fade uk-animation-fast",attrs:{type:"button"},on:{click:function(a){n.hidden=!1}}},[r("img",{attrs:{"uk-svg":`${n.api.config.assets}/images/customizer/chevron-double-right.svg`,"aria-hidden":"true"}})]):e._e()],1)},Qj=[],Jj=Q(Xj,Vj,Qj,!1),Zj=Jj.exports;let Jo;function Tp(t,e){const r=Jk(e);Jo??=new IntersectionObserver(n=>{const{scrollX:a,scrollY:o}=r.defaultView;for(const c of n){if(!c.isIntersecting)continue;Jo.unobserve(c.target);const d=c.boundingClientRect;ke.append(r.body,ke.css(ke.fragment('<div class="yo-hover"></div>'),{width:d.width,height:d.height,left:d.left+a,top:d.top+o}))}});for(const n of ke.$$(t,e))Jo.observe(n)}function Zo(t){Jo?.disconnect(),Jo=null;for(const e of ke.$$("> .yo-hover",Jk(t).body))e.remove()}function Jk(t){return ke.isDocument(t)?t:t.ownerDocument}const eW={__name:"ArticleEditButton",setup(t){const{i18n:e}=oe,{trigger:r}=Me();return{__sfc:!0,i18n:e,trigger:r,api:ue}}};var tW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("button",{staticClass:"uk-icon uk-icon-link",attrs:{type:"button","aria-label":n.i18n.t("Edit Article")},on:{click:function(a){return n.trigger("openEditArticle")}}},[r("img",{attrs:{"uk-svg":`${n.api.config.assets}/images/builder/edit.svg`,"aria-hidden":"true"}})])},rW=[],nW=Q(eW,tW,rW,!1),iW=nW.exports;const aW={__name:"ArticleModal",props:{id:{type:[Number,String],default:0}},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me(),a=Jt({cid:e.id,src:`${ue.config.url}/administrator/index.php?option=com_content&tmpl=component${e.id?`&task=article.edit&id=${e.id}`:"&task=article.add"}`,enableButtons:!1}),o=Be(null);Gt(()=>o.value.addEventListener("load",({target:v})=>c(v))),Nr(p);function c({contentDocument:v,contentWindow:b}){a.enableButtons=!0;const C=new URLSearchParams(b.location.search);a.cid=C.get("id"),v.body.style.padding="30px"}function d({contentWindow:{Joomla:v}}=o.value){o.value.addEventListener("load",()=>n("updateArticle"),{once:!0}),v.submitbutton("article.apply")}function p(){a.cid&&Ue(`${ue.config.url}/administrator/index.php?option=com_content`).formData({task:"articles.checkin",cid:[a.cid],[ue.customizer.token]:1}).post()}return{__sfc:!0,i18n:r,trigger:n,props:e,state:a,iframe:o,load:c,submit:d,checkIn:p}}};var sW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-modal-header uk-flex uk-flex-middle uk-flex-between"},[r("h2",{staticClass:"uk-modal-title uk-margin-remove-bottom"},[e._v(` `+e._s(n.i18n.t(n.state.cid?"Edit Article":"New Article"))+` `),n.state.cid?r("span",{staticClass:"uk-text-muted uk-margin-small-left"},[e._v(e._s(n.i18n.t("(ID %id%)",{id:n.state.cid})))]):e._e()])]),e._v(" "),r("div",{attrs:{"uk-overflow-auto":"expand: true"}},[r("iframe",{ref:"iframe",staticStyle:{height:"100%",width:"100%"},attrs:{src:n.state.src}})]),e._v(" "),r("div",{staticClass:"uk-modal-footer uk-text-right"},[r("button",{staticClass:"uk-button uk-button-text uk-modal-close uk-margin-small-right",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Cancel")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-primary",attrs:{disabled:!n.state.enableButtons,type:"button"},on:{click:function(a){return n.submit()}}},[e._v(e._s(n.i18n.t("Save")))])])])},oW=[],uW=Q(aW,sW,oW,!1),Cp=uW.exports;const lW={__name:"PageSection",props:{panel:Object},setup(t){const e=t,{i18n:r}=oe,n=Ho(),a=zt(),{lang:o}=window.document.documentElement,c=ue.builder.languages.length?ue.builder.languages.map(({text:O,value:x})=>({text:O,value:x===""?"*":x})):null,d=Jt({home:null,search:"",language:""}),p=Ae(()=>n.pages.toSorted((O,x)=>x.type.page-O.type.page||O.type.title.localeCompare(x.type.title,o)).reduce((O,x)=>{const S=O?.[x.type.id]??{show:!x.type.page,title:x.type.title,pages:[]};return S.pages.push(x),S.pages.sort((P,R)=>R.home-P.home||P.title.localeCompare(R.title,o)),{...O,[x.type.id]:S}},null)),{trigger:v}=Me({updateArticle:b});gt(()=>d.search,Vn(b,150)),gt(()=>d.language,b),el(()=>{d.language=o});function b(){return n.getPages({...c?{lang:d.language}:{},search:d.search})}function C(){ha(Cp,{},{container:!0})}function T(O){const x=!O||G(O);x||a.load({url:O.url,query:null}),v("openPanel",{...ue.customizer.panels.builder,props:{current:x}})}function A(O){const x=O.language.match(/-(\w{2})$/);return`${O.title} - ${O.category.title} ${x?j(x[1]):""}`.trim()}function F(O){ha(Cp,{id:O.id},{container:!0})}function G(O){return a.data.view==="com_content.article"&&a.data.page?.id===O.id}function j(O){const x=O.toUpperCase().split("").map(S=>127397+S.charCodeAt());return String.fromCodePoint(...x)}return{__sfc:!0,i18n:r,Builder:n,Preview:a,lang:o,languages:c,props:e,state:d,types:p,trigger:v,load:b,add:C,edit:T,title:A,options:F,isCurrent:G,getFlag:j,api:ue}}};var cW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t(n.props.panel.title)))])]),e._v(" "),r("div",{staticClass:"uk-width-auto uk-flex"},[n.props.panel.help?r("button",{staticClass:"uk-icon uk-icon-link uk-margin-small-right",attrs:{type:"button","aria-label":n.i18n.t("Help")},on:{click:function(a){return n.trigger("openHelp",[n.props.panel.help])}}},[r("img",{attrs:{"uk-svg":`${n.api.config.assets}/images/help.svg`,"aria-hidden":"true"}})]):e._e(),e._v(" "),r("button",{staticClass:"uk-button uk-button-small uk-button-default",attrs:{type:"button"},on:{click:function(a){return n.edit()}}},[e._v(e._s(n.i18n.t("Builder")))])])]),e._v(" "),n.languages?r("div",{staticClass:"uk-margin-small"},[r("select",{directives:[{name:"model",rawName:"v-model",value:n.state.language,expression:"state.language"}],staticClass:"uk-select",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.state,"language",a.target.multiple?o:o[0])}}},e._l(n.languages,function({value:a,text:o}){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(o))])}),0)]):e._e(),e._v(" "),r("div",{staticClass:"uk-margin-small"},[r("input",{directives:[{name:"model",rawName:"v-model",value:n.state.search,expression:"state.search"}],staticClass:"uk-input",attrs:{type:"text",placeholder:n.i18n.t("Search articles"),autofocus:""},domProps:{value:n.state.search},on:{input:function(a){a.target.composing||e.$set(n.state,"search",a.target.value)}}})]),e._v(" "),e._l(n.types,function(a,o){return[a.show?r("h3",{key:`label-${o}`,staticClass:"yo-sidebar-subheading"},[e._v(e._s(a.title))]):e._e(),e._v(" "),r("ul",{key:`list-${o}`,staticClass:"uk-nav uk-nav-default yo-sidebar-marginless yo-nav-iconnav",class:{"uk-margin-top":!a.show}},e._l(a.pages,function(c){return r("li",{key:c.id,staticClass:"uk-visible-toggle",class:{"yo-highlight":n.isCurrent(c)}},[r("a",{attrs:{href:"",title:n.title(c)},on:{click:function(d){return d.preventDefault(),n.edit(c)}}},[r("span",{staticClass:"uk-text-truncate",class:{"uk-text-muted":c.status!=="published"}},[e._v(e._s(c.title))])]),e._v(" "),r("button",{staticClass:"uk-position-center-right uk-position-medium uk-icon-link uk-invisible-hover",staticStyle:{padding:"10px 0 10px 10px"},attrs:{type:"button","uk-icon":"icon: more-vertical"},on:{click:function(d){return d.preventDefault(),n.options(c)}}})])}),0)]}),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:!n.types,expression:"!types"}],staticClass:"uk-margin-remove-bottom"},[e._v(e._s(n.i18n.t("No articles found.")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-default uk-width-1-1 uk-margin-medium-top",attrs:{type:"button"},on:{click:function(a){return a.preventDefault(),n.add()}}},[e._v(e._s(n.i18n.t("New Article")))]),e._v(" "),r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("The list shows uncategorized articles and is limited to 50. Use the search to find a specific article or an article from another category to give it an individual layout.")))]),e._v(" "),r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.")))])],2)},fW=[],dW=Q(lW,cW,fW,!1),hW=dW.exports,pW={init({extend:t}){t({components:{"builder-pages":hW}})},setup(){const t=zt(),{trigger:e}=Me({layoutButtonsTitle:{handler:({result:r=[]},{builder:n})=>ue.customizer.admin&&n.view==="com_content.article"?[{component:iW},...r]:r,priority:5},openEditArticle(){ha(Cp,{id:t.data.page?.id},{container:!0})},updateArticle(){e("loadPreview")},openEditModule(r){e("editModule",[{id:r.origin.values.module,noDelete:!0}],!0)}})}};function mW(t={}){const{Joomla:e,tinyMCE:r}=window;return{id:`mce_${wo()}`,instance:null,async create(n={}){this.instance=new r.Editor(this.id,kr({},t.settings,n),r.EditorManager),this.instance.render();try{const{JoomlaEditor:a,JoomlaEditorDecorator:o}=await import("editor-api");class c extends o{getValue(){return this.instance.getContent()}setValue(p){return this.instance.setContent(p),this}getSelection(){return this.instance.selection.getContent({format:"text"})}replaceSelection(p){return this.instance.execCommand("mceInsertContent",!1,p),this}}a.register(new c(this.instance,"tinymce",this.id))}catch{e.editors.instances[this.id]={getValue:()=>this.instance.getContent(),setValue:o=>this.instance.setContent(o),getSelection:()=>this.instance.selection.getContent(),replaceSelection:o=>this.instance.execCommand("mceInsertContent",!1,o)}}},async destroy(){this.instance.destroy(),this.instance=null;try{const{JoomlaEditor:n}=await import("editor-api");n.unregister(this.id)}catch{delete e.editors.instances[this.id]}}}}const vW={__name:"EditorVisual",props:{root:{type:Boolean,default:!1},value:{type:String,default:""},attrs:{type:Object,default:()=>({})}},emits:["input"],setup(t,{expose:e,emit:r}){const n=t,{i18n:a}=oe,o=mW(ue.customizer.editor);gt(()=>n.value,A=>{d(A)}),Gt(function(){o.create({width:"100%",height:330,resize:!0,menubar:!1,valid_elements:"*[*]",paste_plaintext_inform:!wt.editorPlainTextPasteWarning,setup:A=>{v(A),b(A),C(A,ue.customizer.editor),T(A,ue.customizer.editor),A.on("init",()=>{Object.values(A.schema.elements).forEach(F=>F.attributePatterns=(F.attributePatterns||[]).concat([{pattern:/^uk-.*$/}])),A.setContent(n.value)}),A.on("load",p),A.on("PastePlainTextToggle",()=>wt.editorPlainTextPasteWarning=!0)}})}),Nr(function(){o.destroy()});function c(){r("input",o.instance.getContent())}function d(A){o.instance.getContent()!==A&&o.instance.setContent(A)}function p(){if(!n.attrs.height)return;const A=o.instance.getContainer(),F=o.instance.getContentAreaContainer().firstElementChild;F.style.height=`${n.attrs.height-(A.offsetHeight-F.offsetHeight)}px`}function v({settings:A}){n.root===!0&&(A.forced_root_block="",A.force_p_newlines=!1,A.force_br_newlines=!0)}function b(A){for(const F of["undo","redo","keyup","change"])A.on(F,c)}function C(A,{title:F,iframe:G}){A.addButton("editor",{icon:"fullscreen",tooltip:F,onclick:()=>{const{innerWidth:j,innerHeight:O}=window,x=A.windowManager.open({title:F,html:`<iframe src="${G}" onload="tinyMCE.activeEditor.fire('JEditor', this)"></iframe>`,width:j*.9,height:O*.9-100,buttons:[{text:a.t("Ok"),subtype:"primary",onclick:()=>x.fire("update")},{text:a.t("Cancel"),onclick:"close"}]});A.once("JEditor",({contentWindow:{Joomla:S},contentDocument:P})=>{const R=A.getContent(),B=P.getElementById("content");B&&(B.value=R),S.editors.instances.content?.setValue(R),x.on("update",()=>{d(S.editors.instances.content.getValue()),c(),x.close()})})}}),A.settings.toolbar1+=" editor"}function T(A,{id:F,buttons:G=[]}){for(const{text:j,link:O,options:{confirmCallback:x,confirmText:S}={}}of G){const P=`insert_${j.toLowerCase()}`;A.addMenuItem(P,{text:j,context:"insert",onclick:()=>{const R=[{text:a.t("Close"),onclick:"close"}];x&&R.unshift({text:S,subtype:"primary",onclick:async({target:Z})=>{const ne=document.getElementById(ae._id),U=`return ${x.replace(F,A.id)}`;ne.classList.add("modal-content"),await new Function(U).call(Z),ae.close()}});const{Joomla:B,innerWidth:q,innerHeight:le}=window,ae=A.windowManager.open({buttons:R,title:j,html:`<iframe src="${O.replace(F,A.id)}"></iframe>`,width:q*.8,height:le*.8-100});B.Modal?.setCurrent(ae.on("close",()=>B.Modal.setCurrent(null))),ae.querySelector=()=>{}}}),A.settings.insert_button_items+=` ${P}`}}return e({refresh:p}),{__sfc:!0,i18n:a,emit:r,props:n,editor:o,update:c,setValue:d,refresh:p,useRoot:v,useEvents:b,useEditor:C,useButtons:T}}};var gW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{attrs:{id:n.editor.id}})},_W=[],bW=Q(vW,gW,_W,!1),yW=bW.exports,kW={init({Vue:t}){ue.customizer.editor&&(un.js(`${ue.customizer.base}/vendor/assets/tinymce/tinymce.min.js`).then(()=>t.component("EditorVisual",yW)),window.jModalClose=()=>window.tinyMCE.activeEditor.windowManager.close(),window.jInsertEditorText=(e,r)=>window.Joomla.editors.instances[r].replaceSelection(e))}};function EW(t){const{i18n:e}=oe,{media:r,token:n}=ue.customizer,a=`${ue.customizer.root}/index.php?option=com_media&task=api.files&format=json&mediatypes=0,1,2,3`;return fy(`Finder (${t})`,{state:{accept:r.accept},actions:{getPath(o=this.path){return`local-${t}:/${B8(o,"/")}`},uploadSettings(o){Object.assign(o,{url:CW(a,{path:this.getPath()}),beforeSend:async c=>{const d=c.data.get("Filedata[]"),p=await TW(d);return Object.assign(c,{headers:{"Content-Type":"application/json"},responseType:"json",data:JSON.stringify({override:!0,name:d.name,content:p.slice(p.indexOf("base64")+7),[n]:"1"})})},complete:c=>this.showMessage(c.message||e.t("Item uploaded."))})},loadFiles(o){return Ue("finder").query({folder:o,root:t}).get().json().catch(c=>(Ut(c.message,status),[]))},renameFile(o,c){pa(this.files,["name",c])&&!confirm(e.t("%name% already exists. Do you really want to rename?",{name:c}))||Ue(a).errorType("json").query({path:this.getPath(`${tp(this.path,"/")}/${o}`)}).put({newPath:this.getPath(`${tp(this.path,"/")}/${c}`),[n]:1}).json(d=>{this.showMessage(d.message??e.t("Item renamed."))}).catch(({json:d={}})=>{this.showMessage(d.message??e.t("Error renaming item."),"danger")})},removeFiles(o){for(const{path:c}of o)Ue(a).errorType("json").query({path:this.getPath(c)}).json({[n]:1}).delete().json(d=>{this.showMessage(d.message??e.t("Item deleted."))}).catch(({json:d={}})=>{this.showMessage(d.message??e.t("Error deleting item."),"danger")})},createFolder(o){Ue(a).errorType("json").query({path:this.getPath()}).post({name:o,[n]:1}).json(c=>{this.showMessage(c.message??e.t("Folder created."))}).catch(({json:c={}})=>{this.showMessage(c.message??e.t("Error creating folder."),"danger")})},showMessage(o,c=""){Ut(o,c),this.load()},canCreate(){return r.canCreate},canDelete(){return r.canDelete}}})}function TW(t){return new Promise(e=>{const r=new FileReader;r.onload=n=>e(n.target.result),r.readAsDataURL(t)})}function CW(t,e){const r=new URL(t,location.origin);for(const[n,a]of Object.entries(e))r.searchParams.set(n,a);return r.toString()}function wW(){const{i18n:t}=oe,{media:e,token:r}=ue.customizer,n=`${ue.customizer.root}/index.php?option=com_media&asset=com_media`;return fy("Finder (legacy)",{state:{accept:e.accept},actions:{loadFiles(a){return Ue("finder").query({folder:a}).get().json()},removeFiles(a){return this.executeTask("folder.delete",{folder:this.path,rm:ma(a,"name")})},renameFile(a,o){pa(this.files,["name",o])&&!confirm(t.t("%name% already exists. Do you really want to rename?",{name:o}))||Ue("finder/rename").post({oldFile:`${tp(this.path,"/")}/${a}`,newName:o}).json(c=>{Ut(c,""),this.load()}).catch(c=>{Ut(c.message,"danger"),this.load()})},createFolder(a){return this.executeTask("folder.create",{foldername:a,folderbase:this.path})},executeTask(a,o={}){return Ue(n).formData({[r]:1,task:a,...o}).post().json(c=>this.showMessage(c)).catch(c=>this.showError(c))},showMessage(a){St(a)&&a.forEach(({message:o,type:c})=>Ut(o,c==="message"?"":"danger")),this.load()},showError({message:a,status:o}){if(a.indexOf("<!DOCTYPE")!==0){const c=new DOMParser().parseFromString(a,"text/html");Ut(o===500||!c?.title?"Unknown error.":c.title,"danger")}this.load()},uploadSettings(a){Object.assign(a,{url:SW(n,{task:"file.upload",tmpl:"component",format:"html",folder:this.path,[r]:1}),beforeSend:o=>{kr(o,{responseType:"json",headers:{Accept:"application/json"}})},complete:({response:o})=>this.showMessage(o)})},canCreate(){return e.canCreate},canDelete(){return e.canDelete}}})}function SW(t,e){const r=new URL(t,location.origin);for(const[n,a]of Object.entries(e))r.searchParams.set(n,a);return r.toString()}var xW={init(){Me({mediaModalTabs(t,e){const{legacy:r,roots:n}=ue.customizer.media;r?e.unshift(Zk("files",wW())):e.unshift(...n.map(a=>Zk(a,EW(a))))}})}};function Zk(t,e){return{name:t,component:{extends:sR,provide(){return{Finder:this.Finder=e()}},destroyed(){this.Finder.$dispose()}}}}const bs=sn("Menus (Joomla)",{state:()=>kr({items:[],menus:[],positions:{},canEdit:!1,canCreate:!1,canDelete:!1},ue.customizer.menu),setup:()=>({task(t,e){return Ue(`${ue.customizer.root}/index.php?option=com_menus`).formData({task:t,cid:[e],[ue.customizer.token]:1}).post().res()}})}),AW={__name:"MenuItemModal",props:{menu:String,item:{type:Object,default:()=>({})}},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me(),a=st("Modal"),o=bs(),c=Be(null),d=Jt({enableButtons:!1,id:e.item.id}),p=`${ue.config.url}/administrator/index.php?option=com_menus&task=item.${e.menu?"add":"edit"}&tmpl=component&${e.menu?`menutype=${e.menu}`:`id=${e.item.id}`}`;Gt(()=>ke.on(c.value,"load",({target:T})=>v(T))),Nr(()=>d.id&&n("checkInMenuItem",{id:d.id}));function v({contentDocument:T}){d.enableButtons=!0,T.body.style.padding="30px",ke.once(T,"submit",'[name="adminForm"]',()=>{d.enableButtons=!1,ke.once(c.value,"load",A=>d.id=new URLSearchParams(A.target.contentWindow.location.search).get("id"))})}function b(T="apply",{contentWindow:{Joomla:A}}=c.value){A.submitbutton(`item.${T}`)}async function C(){await n("deleteMenuItem",{id:d.id}),a.hide()}return{__sfc:!0,i18n:r,trigger:n,Modal:a,Menu:o,props:e,iframe:c,state:d,url:p,load:v,submit:b,deleteItem:C,vConfirm:cn}}};var OW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-modal-header uk-flex uk-flex-middle uk-flex-between"},[r("h2",{staticClass:"uk-modal-title uk-margin-remove-bottom"},[e._v(` `+e._s(n.state.id?n.i18n.t("Edit Menu Item"):n.i18n.t("Add Menu Item"))+` `),n.state.id?r("span",{staticClass:"uk-text-muted uk-margin-small-left"},[e._v(e._s(n.i18n.t("(ID %id%)",{id:n.state.id})))]):e._e()]),e._v(" "),n.state.id&&n.Menu.canDelete?r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-button uk-button-danger uk-align-right",attrs:{disabled:!n.state.enableButtons,type:"button"},on:{click:n.deleteItem}},[e._v(e._s(n.i18n.t("Delete")))]):e._e()]),e._v(" "),r("div",{attrs:{"uk-overflow-auto":"expand: true"}},[r("iframe",{ref:"iframe",staticStyle:{height:"100%",width:"100%"},attrs:{src:n.url}})]),e._v(" "),r("div",{staticClass:"uk-modal-footer uk-text-right"},[r("button",{staticClass:"uk-button uk-button-text uk-margin-small-right uk-modal-close",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Cancel")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-primary",attrs:{disabled:!n.state.enableButtons,type:"button"},on:{click:function(a){return n.submit()}}},[e._v(e._s(n.i18n.t("Save")))])])])},NW=[],PW=Q(AW,OW,NW,!1),eE=PW.exports;const IW={__name:"MenuPositionPanel",props:{position:String,panel:{type:Object,required:!0}},setup(t){const e=t,r=st("Config");function n(a,{name:o}){const{positions:c}=r.values.menu;An(c[e.position])&&mt(c,e.position,{}),mt(c[e.position],o,a),r.change(a,{name:`menu.positions.${e.position}.${o}`})}return{__sfc:!0,Config:r,props:e,change:n,FieldsPanel:Wr}}};var LW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r(n.FieldsPanel,{attrs:{panel:{...n.props.panel,position:n.props.position},values:{...n.Config.values.menu.positions[n.props.position]}},on:{change:n.change}})},RW=[],DW=Q(IW,LW,RW,!1),MW=DW.exports;const Oi=sn("Config",{state(){const{config:t}=ue.customizer;for(const e of["less","logo","menu.positions","menu.items"])j8(t,e,r=>Array.isArray(r)&&!r.length||!r?{}:r);return{dirty:!1,values:Vh(t)}},actions:{cancel(){this.$reset(),this.reload()},change(t,{name:e}){const{ignore:r=[]}=ue.customizer;r.includes(e)||this.reload(),this.dirty=!0},reload:Vn(function(){oe.events.trigger("loadPreview",{config:this.values})},250),save(){return oe.events.trigger("saveConfig",this.values,!0)}}});function tE(){const t=Oi();return{values(e){const r=t.values.menu.items[e.id];return!r||Array.isArray(r)?{}:r},get(e,r){return xn(t.values.menu.items[e.id],r)},set(e,r,n){let a=!0;r.default===n&&dr(this.get(e,r.name))&&(a=!1);let o=this.values(e);mt(t.values.menu.items,e.id,o),L8(o,r.name,n),a&&t.change(n,{name:`menu.items.${e.id}.${r.name}`})}}}const $W={__name:"MenuItem",props:{panel:{type:Object,required:!0},item:{type:Object,required:!0}},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me(),a=bs(),o=tE();function c(p,v){o.set(e.item,v,p)}function d(){n("editMenuItem",e.item)}return{__sfc:!0,i18n:r,trigger:n,Menu:a,MenuItem:o,props:e,change:c,editItem:d,FieldsPanel:Wr}}};var FW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r(n.FieldsPanel,{staticClass:"uk-margin-medium-top",attrs:{panel:{fields:n.props.panel.fields,item:n.props.item},values:n.MenuItem.values(n.props.item)},on:{change:n.change}}),e._v(" "),n.Menu.canEdit?r("button",{staticClass:"uk-button uk-button-default uk-width-1-1 uk-margin-medium-top",attrs:{type:"button"},on:{click:function(a){return a.preventDefault(),n.editItem.apply(null,arguments)}}},[e._v(e._s(n.i18n.t("Edit Menu Item")))]):e._e()],1)},BW=[],HW=Q($W,FW,BW,!1),UW=HW.exports;const jW={__name:"MenuItems",props:{menu:{type:String,required:!0},parent:{type:String,default:"1"}},setup(t){const e=t,r=bs(),{i18n:n}=oe,{trigger:a}=Me(),o=Ae(()=>Number(e.parent)===1);function c(b){a("openPanel",{...ue.customizer.panels["menu-item"],name:"menu-item",title:b.title,props:{item:b},component:UW})}function d(b){a("editBuilderMenuItem",b)}function p(b=e.parent){return v(b).length>0}function v(b=e.parent){return r.items.filter(C=>C.menu===e.menu&&C.parent===b)}return{__sfc:!0,Menu:r,i18n:n,trigger:a,props:e,isRoot:o,edit:c,editBuilder:d,hasItems:p,getItems:v}}};var WW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("ul",{class:{"uk-nav-sub":!n.isRoot}},e._l(n.getItems(),function(a){return r("li",{key:a.id,class:[{"uk-parent":n.hasItems(a.id),"uk-disabled":!n.Menu.canEdit},"uk-position-relative"]},[r("a",{attrs:{href:""},on:{click:function(o){return o.preventDefault(),n.edit(a)}}},[r("span",{staticClass:"uk-text-truncate"},[e._v(e._s(a.title))])]),e._v(" "),n.isRoot&&n.Menu.canEdit?r("button",{staticClass:"uk-position-top-right uk-position-small uk-button uk-button-default uk-button-small",attrs:{type:"button"},on:{click:function(o){return o.preventDefault(),n.editBuilder(a)}}},[e._v(e._s(n.i18n.t("Builder")))]):e._e(),e._v(" "),n.hasItems(a.id)?r("MenuItems",{attrs:{menu:e.menu,parent:a.id}}):e._e()],1)}),0)},GW=[],zW=Q(jW,WW,GW,!1),qW=zW.exports;const YW={__name:"MenuPanel",props:{menu:{type:String,required:!0},panel:Object},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me(),a=bs();return{__sfc:!0,i18n:r,trigger:n,Menu:a,props:e,MenuItems:qW}}};var KW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r(n.MenuItems,{staticClass:"uk-nav uk-nav-default yo-sidebar-marginless yo-nav-iconnav",attrs:{menu:n.props.menu}}),e._v(" "),n.Menu.canCreate?r("button",{staticClass:"uk-button uk-button-default uk-width-1-1 uk-margin-medium-top",attrs:{type:"button"},on:{click:function(a){return a.preventDefault(),n.trigger("addMenuItem",n.props.menu)}}},[e._v(e._s(n.i18n.t("New Menu Item")))]):e._e()],1)},XW=[],VW=Q(YW,KW,XW,!1),QW=VW.exports;const JW={__name:"MenuSection",props:{panel:{type:Object,required:!0}},setup(t){const e=st("Config"),r=bs(),{i18n:n}=oe,{trigger:a}=Me(),o=Ae(()=>{const c=[];for(const[d,p]of Object.entries(r.positions))c.push({label:n.t("%label% Position",{label:p}),name:`menu.positions.${d}.menu`,type:"select",options:{[n.t("- Select -")]:"",...r.menus?.reduce((v,b)=>({...v,[b.name]:b.id}),{})}},{name:`menu.positions.${d}_button`,type:"button-panel",panel:{...ue.customizer.panels["menu-position"],name:"menu-position",title:n.t("%label% Position",{label:p}),component:MW,props:{position:d}},text:n.t("Edit Settings"),show:`menu.positions['${d}'].menu`});return c});return{__sfc:!0,Config:e,Menu:r,i18n:n,trigger:a,fields:o,FieldsPanel:Wr}}};var ZW=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("ul",{staticClass:"uk-nav uk-nav-default yo-sidebar-marginless"},e._l(n.Menu.menus,function(a){return r("li",{key:a.name},[r("a",{attrs:{href:""},on:{click:function(o){return o.preventDefault(),n.trigger("editMenu",a)}}},[r("span",{staticClass:"uk-text-truncate"},[e._v(e._s(a.name))])])])}),0),e._v(" "),r(n.FieldsPanel,{staticClass:"uk-margin-medium-top",attrs:{panel:{fields:n.fields},values:n.Config.values},on:{change:n.Config.change}}),e._v(" "),r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.")))]),e._v(" "),r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.")))])],1)},eG=[],tG=Q(JW,ZW,eG,!1),rG=tG.exports,nG={init({extend:t}){t({components:{"joomla-menus":rG}})},setup(){const{i18n:t}=oe,e=bs();Object.assign(ue.customizer.menu,{menusSelect:()=>e.menus.map(n=>({value:n.id,text:n.name})),itemsSelect:n=>e.items.filter(a=>a.menu===n).map(rE),headingItemsSelect:(n,a)=>e.items.filter(o=>o.menu===n&&o.type==="heading"&&(!a&&o.level===0||o.parent===a)).map(rE)});const{trigger:r}=Me({editMenu(n,{id:a,name:o}){r("openPanel",{name:a,title:o,component:QW,props:{menu:a}})},async addMenuItem(n,a){await Dt(eE,{menu:a},{container:!0}),await r("updateMenuItem",{},!0)},async editMenuItem(n,a){await Dt(eE,{item:a},{container:!0}),await r("updateMenuItem",{},!0),e.items.every(({id:o})=>o!==a.id)&&r("closePanel")},updateMenuItem(){return Ue("items").get().json(n=>{e.items=n,r("loadPreview")})},deleteMenuItem(n,a){return e.task("items.trash",a.id)},checkInMenuItem(n,a){return e.task("items.checkin",a.id)},editBuilderMenuItem(n,a){r("openPanel",{name:"menu-item-builder",title:t.t("Builder"),component:"menu-item-builder",width:500,heading:!1,props:{item:a,title:a.title||t.t("Menu Item")}})}})}};function rE(t){return{text:"- ".repeat(t.level)+t.title,value:t.id}}const eu=sn("Modules (Joomla)",{state:()=>kr({url:"",types:{},modules:[],positions:[],canCreate:!1},ue.customizer.module)}),iG={__name:"ModuleModal",props:{id:String,url:String,noDelete:Boolean},setup(t){const e=t,{trigger:r}=Me(),{i18n:n}=oe,a=eu(),o=st("Modal"),c=Jt({edit:!!e.id,moduleId:e.id,enableButtons:!1}),d=`${ue.config.url}/${e.url}&tmpl=component&${e.id?`task=module.edit&id=${e.id}`:"view=select"}`,p=Be(null),v=Ae(()=>a.modules.find(F=>F.id===c.moduleId));Gt(()=>{window.SqueezeBox||={close:ke.noop},p.value.addEventListener("load",({target:F})=>b(F))}),Nr(()=>A("modules.checkin"));function b({contentDocument:F,contentWindow:{Joomla:G}}){c.edit=!!G,c.enableButtons=!!ke.$('[name="adminForm"]',F),F.body.style.padding="30px",ke.once(F,"submit",'[name="adminForm"]',()=>{c.enableButtons=!1,ke.once(p.value,"load",({target:{contentWindow:{location:j}}})=>{c.moduleId=new URLSearchParams(j.search).get("id"),r("updateModule")})});for(const j of ke.$$("#new-modules-list a",F))j.href=`${j.href}&tmpl=component`}function C(F="apply",{contentWindow:{Joomla:G}}=p.value){G.submitbutton(`module.${F}`)}async function T(){await A("modules.trash"),r("updateModule"),o.hide()}function A(F){return Ue(`${ue.config.url}/${e.url}`).formData({task:F,cid:[c.moduleId],[ue.customizer.token]:1}).post().res()}return{__sfc:!0,trigger:r,i18n:n,Store:a,Modal:o,props:e,state:c,src:d,iframe:p,module:v,load:b,submit:C,deleteModule:T,task:A,vConfirm:cn}}};var aG=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-modal-header uk-flex uk-flex-middle uk-flex-between"},[r("h2",{staticClass:"uk-modal-title uk-margin-remove-bottom"},[e._v(` `+e._s(n.i18n.t(n.module?"Edit Module":"Add Module"))+` `),n.module?r("span",{staticClass:"uk-text-muted uk-margin-small-left"},[e._v(e._s(n.i18n.t("(ID %id%)",n.module)))]):e._e()]),e._v(" "),n.module?.canDelete&&!e.noDelete?r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-button uk-button-danger uk-align-right",attrs:{disabled:!n.state.enableButtons,type:"button"},on:{click:n.deleteModule}},[e._v(e._s(n.i18n.t("Delete")))]):e._e()]),e._v(" "),r("div",{attrs:{"uk-overflow-auto":"expand: true"}},[r("iframe",{ref:"iframe",staticStyle:{height:"100%",width:"100%"},attrs:{src:n.src}})]),e._v(" "),r("div",{staticClass:"uk-modal-footer uk-text-right"},[r("button",{staticClass:"uk-button uk-button-text uk-modal-close uk-margin-small-right",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Cancel")))]),e._v(" "),r("button",{directives:[{name:"show",rawName:"v-show",value:n.state.edit,expression:"state.edit"}],staticClass:"uk-button uk-button-primary",attrs:{disabled:!n.state.enableButtons,type:"button"},on:{click:function(a){return n.submit()}}},[e._v(e._s(n.i18n.t("Save")))])])])},sG=[],oG=Q(iG,aG,sG,!1),uG=oG.exports;const lG={__name:"LayoutButtons",props:{node:Object,panel:Object,position:String},setup(t){const e=t,{trigger:r}=Me(),n=st("Builder"),a=Ae(()=>r(`layoutButtons${Gh(e.position)}`,{node:e.node||n.node,panel:e.panel,builder:n})||[]);return{__sfc:!0,trigger:r,Builder:n,props:e,layoutButtons:a}}};var cG=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return n.layoutButtons.length?r("div",e._l(n.layoutButtons,function({component:a,...o},c){return r(a,e._b({key:a.name,tag:"component",class:{"uk-margin-small-right":c<n.layoutButtons.length-1}},"component",o,!1))}),1):e._e()},fG=[],dG=Q(lG,cG,fG,!1),ya=dG.exports;const hG={__name:"Toolbar",props:{type:{type:String,default:"element"},builder:Object},setup(t){const e=t;let r,n;const{i18n:a}=oe,{trigger:o}=Me(),c=zt(),d=Be(null),p=Be(null),v=Be(null),b=Be(null),C=Ae(()=>{if(!b.value)return null;const O=b.value?.dataset.id,x=e.builder.find(O);return e.builder.type(x)?.element?x:null});gt(()=>C.value,(O,x)=>{O!==x&&(x&&o("leavePreviewNode",[x,e.builder]),O&&o("hoverPreviewNode",[O,e.builder]))}),gt(()=>b.value,()=>requestAnimationFrame(j)),Gt(()=>{const O=ke.on(c.document.documentElement,"pointerenter pointerleave",`[data-id^="${e.builder.prefix}"][data-element]`,P=>P.type==="pointerenter"?T(P):A(),{capture:!0,self:!0}),x=ke.on(c.document,"scroll",j),{disconnect:S}=ke.observeViewportResize(j);n=()=>{O(),x(),S()}}),Nr(()=>{n(),C.value&&o("leavePreviewNode",[C.value,e.builder])});function T(O){(!C.value||!d.value.contains(O.target))&&(b.value=O.target),cancelAnimationFrame(r)}function A(){cancelAnimationFrame(r),r=requestAnimationFrame(()=>b.value=null)}function F(){o("editNode",[C.value,e.builder])}function G(){o("scrollPreviewNode",[C.value,e.builder])}function j(){if(!b.value?.ownerDocument.defaultView)return;const O=ke.offset(b.value),x=ke.offset(c.window),S=ke.offset(p.value);let P=ke.clamp(O.left+(O.width/2-S.width/2),0,x.width-S.width);O.top-S.height<x.top?ke.css(p.value,{position:"fixed",top:0,left:P}):(ke.css(p.value,{position:"absolute"}),ke.offset(p.value,{top:O.top-S.height,left:P}));const R=ke.offset(v.value);P=ke.clamp(O.left+(O.width/2-R.width/2),0,x.width-R.width);const B=Math.max(ke.offset(p.value).bottom,O.bottom-(O.height<10?0:R.height/2-parseFloat(ke.css(v.value,"paddingBottom"))/2));B+R.height>x.bottom?ke.css(v.value,{position:"fixed",top:x.height-R.height,left:P}):(ke.css(v.value,{position:"absolute"}),ke.offset(v.value,{top:B,left:P}))}return{__sfc:!0,frame:r,unmount:n,i18n:a,trigger:o,Preview:c,props:e,el:d,top:p,bottom:v,target:b,node:C,enter:T,leave:A,editNode:F,scrollNode:G,positionToolbars:j}}};var pG=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return n.node?r("div",{ref:"el"},[r("div",{ref:"top",staticStyle:{position:"absolute",padding:"20px 30px 0 30px"},on:{pointerenter:n.enter,pointerleave:n.leave}},[r("div",{class:`yo-builder-nav-${e.type}`},[r("ul",{staticClass:"yo-iconnav"},[r("li",[r("a",{staticClass:"yo-builder-icon-scroll-to",attrs:{title:n.i18n.t("Scroll into view"),href:"","uk-icon":"crosshairs"},on:{click:function(a){return a.preventDefault(),n.scrollNode.apply(null,arguments)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-edit",attrs:{title:n.i18n.t("Edit"),href:"","uk-icon":"pencil"},on:{click:function(a){return a.preventDefault(),n.editNode.apply(null,arguments)}}})]),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-copy",attrs:{title:n.i18n.t("Copy"),href:"","uk-icon":"copy"},on:{click:function(a){return a.preventDefault(),n.props.builder.copy(n.node)}}})]),e._v(" "),e.type==="element"?r("li",[r("a",{staticClass:"yo-builder-icon-save",attrs:{title:n.i18n.t("Save in Library"),href:"","uk-icon":"push"},on:{click:function(a){return a.preventDefault(),n.props.builder.save(n.node)}}})]):e._e(),e._v(" "),r("li",[r("a",{staticClass:"yo-builder-icon-delete",attrs:{title:n.i18n.t("Delete"),href:"","uk-icon":"trash"},on:{click:function(a){return a.preventDefault(),n.props.builder.remove(n.node)}}})])])])]),e._v(" "),r("a",{ref:"bottom",staticStyle:{position:"absolute",padding:"0 30px 20px 30px"},attrs:{title:n.i18n.t("Add"),href:""},on:{click:function(a){return a.preventDefault(),n.props.builder.add(n.node)},pointerenter:n.enter,pointerleave:n.leave}},[r("div",{class:`yo-builder-button-${e.type} uk-flex uk-flex-center`,attrs:{"uk-icon":"plus"}})])]):e._e()},mG=[],vG=Q(hG,pG,mG,!1),gG=vG.exports;function ys(t){let e;const r=zt(),n=st("Sidebar"),{trigger:a}=Me({hoverPreviewNode(o,c,d){ke.addClass(nE(c,d),"yo-hover")},leavePreviewNode(o,c,d){ke.removeClass(nE(c,d),"yo-hover")},async scrollPreviewNode(o,c,d){let[p,v]=iE(c,d),b=wp(p,d);!ke.isVisible(b)&&v&&(await a("editNode",[v,d],!0),b=wp(v,d)),b?.scrollIntoView({block:"center"})}});Xv(()=>{if(e?.$destroy(),!r.document||n.hidden)return;const o=r.document.createElement("div"),c=r.document.body.appendChild(o);e=new oe({extends:gG,propsData:{builder:t}}).$mount(c)}),Nr(()=>e?.$destroy())}function nE(t,e){return iE(t,e).map(r=>wp(r,e))}function iE(t,e){return e.path(t).filter((r,n)=>n===0||r.type==="layout"||e.type(r).fragment)}function wp(t,e){return ke.$(`[data-id="${e.id(t)}"]`)}const _G={__name:"ModuleBuilder",props:{id:[String,Number],title:String,content:Object,root:{type:String,default:"layout"},panel:Object},setup(t){const e=t,r=ms("Builder Module"),n=r();br("Builder",n);const{i18n:a}=oe;ys(n);const{trigger:o}=Me({closePanel(b,C,{name:T}={}){T!==e.panel.name||!n.modified||(window.confirm(a.t("The changes you made will be lost if you navigate away from this page."))?o("loadPreview"):C.close=!1)}});n.init({node:e.content||n.make(e.root),prefix:`module-${e.id}#`,onChange:c,rootType:e.root});function c(){o("loadPreview",{module:{id:e.id,content:n.empty?null:JSON.stringify(n.node)}})}async function d(){const{node:b}=n;try{await o("replaceImages",b,!0)&&c(),await Ue("module").post({id:e.id,data:{content:n.empty?null:b}}).res(),n.reset(b)}catch{}}function p(){n.reset(),c()}function v(){n.set({...n.make(e.root),children:[n.make(e.root==="layout"?"section":"row")]})}return{__sfc:!0,useBuilderModule:r,Builder:n,i18n:a,props:e,trigger:o,load:c,save:d,cancel:p,empty:v,Layout:ga,Savebar:Xl,LayoutButtons:ya}}};var bG=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r(n.Savebar,{directives:[{name:"show",rawName:"v-show",value:n.Builder.modified,expression:"Builder.modified"}],on:{cancel:n.cancel,save:n.save}}),e._v(" "),r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t("Builder")))])]),e._v(" "),r(n.LayoutButtons,{staticClass:"uk-width-auto"})],1),e._v(" "),r("h2",{directives:[{name:"show",rawName:"v-show",value:!n.Builder.empty,expression:"!Builder.empty"}],staticClass:"yo-sidebar-heading-builder uk-text-truncate uk-visible-toggle"},[e._v(` `+e._s(e.title)+` `),r(n.LayoutButtons,{staticClass:"uk-inline-block uk-text-baseline uk-invisible-hover",attrs:{position:"title"}})],1),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:n.Builder.empty,expression:"Builder.empty"}],staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.")))]),e._v(" "),r("button",{directives:[{name:"show",rawName:"v-show",value:n.Builder.empty,expression:"Builder.empty"}],staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.empty}},[e._v(e._s(n.i18n.t("New Layout")))]),e._v(" "),r(n.Layout,{attrs:{node:n.Builder.node}})],1)},yG=[],kG=Q(_G,bG,yG,!1),EG=kG.exports;const TG={__name:"Savebar",emits:["cancel","save"],setup(t,{emit:e}){const{i18n:r}=oe,n=st("Sidebar"),a=Be(null);return Gt(()=>n.$refs.breadcrumb.appendChild(a.value)),Nr(()=>a.value.remove()),{__sfc:!0,i18n:r,emit:e,Sidebar:n,el:a,vConfirm:cn}}};var CG=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{ref:"el",staticClass:"yo-savebar uk-grid uk-grid-small uk-flex-middle uk-flex-nowrap uk-text-nowrap"},[r("div",[r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-button uk-button-small uk-button-text",attrs:{type:"button"},on:{click:function(a){return n.emit("cancel")}}},[e._v(e._s(n.i18n.t("Cancel")))])]),e._v(" "),r("div",[r("button",{staticClass:"uk-button uk-button-small uk-button-primary",attrs:{type:"button"},on:{click:function(a){return n.emit("save")}}},[e._v(e._s(n.i18n.t("Save Module")))])])])},wG=[],SG=Q(TG,CG,wG,!1),xG=SG.exports;const AG={name:"ModulePanel",components:{Fields:{extends:Wr,props:{type:{type:String,required:!0},position:{type:String,required:!0}}},Savebar:xG},props:{panel:{type:Object,required:!0},module:{type:Object,required:!0}},data:({module:t})=>({values:{...t.values},prevValues:{...t.values}}),computed:{modified(){return JSON.stringify(this.values)!==JSON.stringify(this.prevValues)}},watch:{values:{handler(){this.load()},deep:!0}},methods:{load(){this.$trigger("loadPreview",{module:{id:this.module.id,yoo_config:JSON.stringify(this.values)}})},save(){return Ue("module").post({id:this.module.id,data:{params:{yoo_config:JSON.stringify(this.values)}}}).res(()=>this.prevValues={...this.values}).catch(t=>Ut(t,"danger"))},cancel(){this.values={...this.module.values}}},events:{closePanel(t,e,{name:r}={}){const n=this.$t("The changes you made will be lost if you navigate away from this page.");r!==this.panel.name||!this.modified||(window.confirm(n)?(this.cancel(),this.load()):e.close=!1)}}};var OG=function(){var e=this,r=e._self._c;return r("div",[r("Savebar",{directives:[{name:"show",rawName:"v-show",value:e.modified,expression:"modified"}],on:{cancel:e.cancel,save:e.save}}),e._v(" "),r("Fields",{staticClass:"uk-margin-medium-top",attrs:{panel:e.panel,values:e.values,type:e.module.type,position:e.module.position}})],1)},NG=[],PG=Q(AG,OG,NG,!1),IG=PG.exports;const LG={__name:"ModuleSection",props:{panel:Object},setup(t){const{i18n:e}=oe,{trigger:r}=Me(),n=zt(),a=eu(),o=Be(!1),c=Ae(()=>a.positions.map(x=>({name:x||"none",modules:a.modules.filter(S=>(!o.value||v(S))&&(S.position===x||!x&&!a.positions.includes(S.position)))})).filter(({modules:x})=>x.length)),d=Ae(()=>n.iframe?.contentDocument),p=Ae(()=>Array.from(d.value?.querySelectorAll('[id^="module-"]')??[]).map(x=>x.id.replace(/module-(\d+)/,"$1")).filter(isFinite));function v({id:x}){return p.value.includes(x.toString())}function b(){r("editModule")}function C(x){x.builder?j(x):G(x)}function T(x){r("editModule",[{id:x.id}])}function A(x){return`${a.types[x.type]??x.type} (${x.id})`}function F(x,{type:S}){d.value&&v(x)&&(S==="mouseenter"?Tp(`[id^="module-${x.id}"]`,d.value):Zo(d.value))}async function G({id:x,...S}){const P=await Ue("module").query({id:x}).get().json(),R={width:400,...ue.customizer.panels.module},B=O(R.fields,JSON.parse(P.params.yoo_config??"{}"));r("openPanel",{...R,url:ue.customizer.module.url,title:S.title,props:{module:{id:x,values:B,...S}},component:IG})}async function j({id:x,title:S,position:P}){const R=await Ue("module").query({id:x}).get().json();r("openPanel",{name:"module-builder",component:EG,width:500,heading:!1,title:e.t("Builder"),props:{id:x,title:S,root:["top","bottom"].includes(P)?"layout":"fragment",content:R.content}})}function O(x,S){const P={};for(const[R,B]of Object.entries(x))P[R]=B.default;return{...P,...S}}return{__sfc:!0,i18n:e,trigger:r,Store:n,Module:a,onlyVisible:o,positionList:c,document:d,visible:p,get:v,add:b,edit:C,options:T,title:A,hover:F,editPanel:G,editBuilder:j,mergeDefaults:O}}};var RG=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("label",[r("input",{directives:[{name:"model",rawName:"v-model",value:n.onlyVisible,expression:"onlyVisible"}],staticClass:"uk-checkbox",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(n.onlyVisible)?e._i(n.onlyVisible,null)>-1:n.onlyVisible},on:{change:function(a){var o=n.onlyVisible,c=a.target,d=!!c.checked;if(Array.isArray(o)){var p=null,v=e._i(o,p);c.checked?v<0&&(n.onlyVisible=o.concat([p])):v>-1&&(n.onlyVisible=o.slice(0,v).concat(o.slice(v+1)))}else n.onlyVisible=d}}}),e._v(` `+e._s(n.i18n.t("Visible on this page"))+` `)]),e._v(" "),r("p",{staticClass:"uk-text-muted uk-margin-small"},[e._v(e._s(n.i18n.t("Only display modules that are published and visible on this page.")))]),e._v(" "),e._l(n.positionList,function({name:a,modules:o}){return[r("h3",{key:`heading-${a}`,staticClass:"yo-sidebar-subheading"},[e._v(e._s(a))]),e._v(" "),r("ul",{key:`list-${a}`,staticClass:"uk-nav uk-nav-default yo-sidebar-marginless uk-text-capitalize yo-nav-iconnav"},e._l(o,function(c){return r("li",{key:c.id,staticClass:"uk-visible-toggle",class:{"yo-highlight":!n.onlyVisible&&n.get(c),"uk-disabled":!c.canEdit},on:{mouseenter:function(d){return n.hover(c,d)},mouseleave:function(d){return n.hover(c,d)}}},[r("a",{attrs:{href:"",title:n.title(c)},on:{click:function(d){d.preventDefault(),c.canEdit&&n.edit(c)}}},[r("span",{staticClass:"uk-text-truncate"},[e._v(e._s(c.title))])]),e._v(" "),c.canEdit?r("button",{staticClass:"uk-position-center-right uk-position-medium uk-icon-link uk-invisible-hover",staticStyle:{padding:"10px 0 10px 10px"},attrs:{type:"button","uk-icon":"icon: more-vertical"},on:{click:function(d){return d.preventDefault(),n.options(c)}}}):e._e()])}),0)]}),e._v(" "),n.Module.canCreate?r("button",{staticClass:"uk-button uk-button-default uk-width-1-1 uk-margin-medium-top",attrs:{type:"button"},on:{click:function(a){return a.preventDefault(),n.add()}}},[e._v(e._s(n.i18n.t("New Module")))]):e._e()],2)},DG=[],MG=Q(LG,RG,DG,!1),$G=MG.exports,FG={extends:Uo,computed:{...ud(eu,["types","modules"])},created(){this.$on("change",t=>{const e=this.modules.find(r=>r.id===t);mt(this.values,"type",e?.type??"")})},methods:{filterOptions(){const t=[{value:"",text:this.$t("- Select Module -")}];for(const[e,r]of Object.entries(this.types)){const n=this.modules.filter(a=>a.type===e).map(({id:a,title:o})=>({value:a,text:`${o} - ${a}`}));n.length&&t.push({label:r,options:n})}return t}}},BG={extends:Uo,computed:{...ud(eu,["positions"])},methods:{filterOptions(){return[{value:"",text:this.$t("- Select Position -")},...this.positions.filter(t=>t).map(t=>({text:t,value:t}))]}}},HG={init({Vue:t,extend:e}){e({components:{"joomla-modules":$G}});const{trigger:r}=Me({editModule(n,a){return Dt(uG,{...a,url:ue.customizer.module.url},{container:!0})},async updateModule(){const n=eu();n.modules=await Ue("modules").get().json(),n.positions=await Ue("positions").get().json(),r("loadPreview")}});t.component("FieldSelectModule",FG),t.component("FieldSelectPosition",BG)}};const UG={extends:Ze,methods:{async open(){this.select(await this.$trigger("openFilePicker",[],!0))},select(t){t&&(_t(t)&&(t=t.src),jG(t)&&(t=`${t}/*`),this.value=t)}}};function jG(t){return t?.match(/\/[^.]+$/)}var WG=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-inline uk-width-1-1"},[r("div",{staticClass:"uk-position-center-right uk-position-small"},[r("ul",{staticClass:"uk-iconnav"},[r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:e.$t("Pick"),href:"","uk-icon":"album","uk-tooltip":"delay: 500"},on:{click:function(n){return n.preventDefault(),e.open.apply(null,arguments)}}})])])]),e._v(" "),r("input",e._b({directives:[{name:"model",rawName:"v-model",value:e.value,expression:"value"}],staticClass:"uk-input yo-input-iconnav-right",attrs:{type:"text"},domProps:{value:e.value},on:{input:function(n){n.target.composing||(e.value=n.target.value)}}},"input",e.attributes,!1))])},GG=[],zG=Q(UG,WG,GG,!1),qG=zG.exports,YG={init(){Object.assign(Vr.components,{FieldSelectFile:qG})}},Rr={get types(){return ue.builder.schema?.types??null},get rootQueryType(){const t=ue.builder.schema?.queryType?.name;return this.types.find(e=>e.name===t)??null},get rootQueryFields(){return aE(this.types,this.rootQueryType?.fields)},findField(t,e){return t=this.resolvePath(Zn(e,t)),t.length?t.at(-1)[0]:null},getFields(t,e="SCALAR"){return t?sE(this.types,t,e):[]},hasFields(t,e="SCALAR"){return t?Sp(this.types,t,e):!1},getFieldType(t){return tu(this.types,t)},getFieldLabel(t){return t.length?uE(t):""},getParentFieldLabel(t){return t.slice(1).find(([e,r])=>uc(r)&&e.metadata?.label)?.[0].metadata.label??""},resolvePath(t,e=""){const r=KG(this.types,this.rootQueryType,Zn(e,t));return e?r.slice(e.split(".").length):r}};function Zn(...t){return t.flat(1/0).filter(Boolean).join(".")}function aE(t,e=[],r=[]){const n=[];for(const a of e){const o=tu(t,a);o&&(uc(o)?n.push({...a,name:Zn(r,a.name)}):n.push(...aE(t,o.fields,r.concat(a.name))))}return n}function KG(t,e,r){const n=[];for(const a of r.split(".")){let o=e?.fields?.find(c=>c.name===a);if(e=tu(t,o),!o||!e)return[];n.push([o,e])}return n}function Sp(t,e,r,n=new Set){const a=tu(t,e);if(n.has(a))return!1;n.add(a);for(const o of a.fields||[]){if(o.type.kind===r)return!0;if(!(a.kind!=="OBJECT"||r==="SCALAR"&&o.type.kind==="LIST")&&Sp(t,o,r,n))return!0}return!1}function sE(t,e,r,n=[]){const a=tu(t,e);if(!a)return[];if(n=[[e,a],...n],e.type.kind===r&&n.length>1)return[oE(e,n)];if(n.length>1&&(a.kind!=="OBJECT"||r==="SCALAR"&&e.type.kind==="LIST"))return[];if(n.filter(([,c])=>a===c).length>2)return[];let o=[];if(n.length>1&&uc(a))e.type.kind!=="LIST"&&Sp(t,e,r)&&o.push({...oE(e,n),isType:!0});else for(const c of a.fields||[])o.push(...sE(t,c,r,n));return n.length>1?o:XG(o)}function XG(t){const e={};for(const r of t)(e[r.subgroup]??=[]).push(r);return Object.values(e).flat()}function oE(t,e){return{_field:t,subgroup:VG(e),text:uE(e),value:Zn(e.toReversed().slice(1).map(([{name:r}])=>r))}}function tu(t,e){const{name:r}=e?.type?.ofType||e?.type||{};return r?t.find(n=>n.name===r):null}function VG(t){for(const[{metadata:e}]of t.slice(0,-1))if(e?.group)return e.group}function uE(t){const[[{name:e,metadata:r}]]=t;let n=[r.label??e];for(const[a,o]of t.slice(1,-1)){if(uc(o))break;a.metadata?.label&&n.unshift(a.metadata.label)}return n.join(" ")}function uc(t){return t.metadata?.type}var je={parentKey:"#parent",getQuery(t){return t.source?.query?.name||""},setQuery(t,e){e?(fn(t,"source.query.name",e),oe.delete(t.source.query,"arguments"),this.setField(t,!1)):(oe.delete(t.source,"query"),An(t.source)&&oe.delete(t,"source"))},getQueryArgs(t){return t.source?.query?.arguments},getQueryArg(t,e){return this.getQueryArgs(t)?.[e]},setQueryArg(t,e,r){fn(t,`source.query.arguments.${e}`,r)},getField(t){return t?.source?.query?.field?.name||""},setField(t,e){e?e!==this.getField(t)&&fn(t,"source.query.field",{name:e}):oe.delete(t.source?.query,"field")},getFieldArgs(t){return t.source?.query?.field?.arguments},getFieldArg(t,e){return this.getFieldArgs(t)?.[e]},setFieldArg(t,e,r){fn(t,`source.query.field.arguments.${e}`,r)},getFieldDirective(t,e){return pa(t.source?.query?.field?.directives,{name:e})},getFieldDirectiveArgs(t,e){return this.getFieldDirective(t,e)?.arguments},getFieldDirectiveArg(t,e,r){return this.getFieldDirectiveArgs(t,e)?.[r]},setFieldDirectiveArg(t,e,r,n){let a=this.getFieldDirective(t,e);a||(a={name:e},t.source?.query?.field?.directives||fn(t,"source.query.field.directives",[]),t.source.query.field.directives.push(a)),fn(a,`arguments.${r}`,n)},getProp(t,e){return t.source?.props?.[e]},setProp(t,e,r){const n=QG(this.getSourceField(t,r)),[a]=t;oe.delete(a.props,e),fn(a,`source.props.${e}`,{...n,...r})},removeProp(t,e){oe.delete(t.source.props,e),An(t.source.props)&&oe.delete(t.source,"props"),An(t.source)&&oe.delete(t,"source")},getSourcePath(t){let e,r=[];for(const n of t){e=this.getQuery(n)||e;const a=this.getField(n);if(a&&r.unshift(a),!e||e!==this.parentKey)break}return e&&e!==this.parentKey?Zn(e,r):""},getSourceField(t,e){let r=this.getSourcePath(t);return r?Rr.findField(e?.name,r):null},getParentSourceField(t){return this.getSourceField(t.slice(1).filter(e=>this.hasSource(e)))},getSourceFieldFields(t,e){return lE(this.getSourceField(t,e))},getSourceFieldLabel(t,e){const r=Rr.resolvePath(this.getPropPath(t,e)).reverse();return r.length?{label:Rr.getFieldLabel(r),group:Rr.getParentFieldLabel(r)}:null},getPropPath(t,e){let r=this.getSourcePath(t);return r?Zn(r,e?.name):""},hasFields(t,e){return Rr.hasFields(this.getSourceField(t),e)},hasListFields(t){return Rr.hasFields(this.getSourceField(t),"LIST")},hasSource(t){return!!this.getQuery(t)},isMultipleSource(t){const[e]=t;return this.hasSource(e)?this.getQuery(e)===this.parentKey?!!this.getField(e):this.getSourceField(t)?.type?.kind==="LIST":!1},showMultipleSelectField(t){return this.getField(t[0])||!this.isMultipleSource(t)&&this.hasListFields(t)},hasInvalidSource(t,e){const r=this.getQuery(t),n=An(t.source?.props);if(!r)return!n&&(Object.keys(t.source.props).length>1||!t.source.props._condition)?"empty-source":!1;const a=Rr.findField(r);if(a?.metadata?.view&&!a.metadata.view.includes(e.view))return!0;const o=e.path(t);if(!this.getSourceField(o))return"empty-field";if(n)return cE(t,c=>{const d=this.getQuery(c);if(d)return d===this.parentKey})?!1:"empty-props";for(const c of Object.values(t.source?.props??{})){const d=this.getSourceField(o,c);if(!d&&!c?.name?.startsWith("#"))return"invalid-field";const p=d?.metadata?.arguments??{};if(!Object.keys(c.arguments??{}).every(v=>v in p))return"invalid-argument"}return!1}};function QG(t){const e={};for(const r of lE(t).filter(n=>"default"in n))fn(e,r.name,r.default);return e}function lE(t){return[...ZG(t),...JG(t)]}function JG(t){return ma(t?.metadata?.arguments,(e,r)=>({name:`arguments.${r}`,...e}))}function ZG(t,e=["before","after","search","replace"]){const r=ue.builder.sources.filters;return[...e,...ez(t?.metadata?.filters)].map(n=>Sn(n)?{name:`filters.${n}`,...r[n]}:n).filter(n=>n)}function ez(t){return Array.isArray(t)?t:ma(t,(e,r)=>({name:`filters.${r}`,...e}))}function cE(t,e){for(const r of t.children||[]){const n=e(r);if(n)return!0;if(n===!1)continue;const a=cE(r,e);if(a)return a}return!1}const tz={__name:"FieldsList",props:{builder:Object,node:Object,prop:String,fieldType:String,additionalFields:Array},emits:["resolve"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,a=Be(""),o=Be(null),c=Be(F()),d=Ae(()=>Rr.findField(c.value,T())),p=Ae(()=>Rr.getFields(d.value,r.fieldType).filter(O=>!O._field.metadata?.condition||r.prop==="_condition")),v=Ae(()=>p.value.filter(({text:O})=>da(O,a.value))),b=Ae(()=>{const{length:O}=c.value,x=j(Rr.findField(c.value.slice(0,-1),T()));return O>1?n.t("%label% (%depth%)",{label:x,depth:O}):x});gt(()=>c.value,()=>o.value.scrollTop=0);function C(O){if(O.isType){c.value=c.value.concat(O.value);return}e("resolve",Zn(c.value,O.value))}function T(){let O=je.getSourcePath(r.builder.path(r.node));const x=je.getField(r.node);return!r.prop&&x&&(O=O.slice(0,-(x.length+1))),O}function A(){return r.prop?je.getProp(r.node,r.prop)?.name||"":je.getField(r.node)}function F(){const O=A();let x=[],S=[];for(const[P,R]of Rr.resolvePath(O,T()))S.push(P.name),P.type.kind==="OBJECT"&&R.metadata?.type&&(x.push(Zn(S)),S=[]);return x}function G(O){return Zn(c.value,O.value)===A()}function j(O){return O.metadata?.label||O.name}return{__sfc:!0,i18n:n,emit:e,props:r,search:a,scrollEl:o,path:c,baseField:d,fields:p,fieldList:v,backButtonLabel:b,select:C,basePath:T,getCurrentValue:A,getInitialPath:F,isCurrent:G,toFieldLabel:j,api:ue}}};var rz=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"yo-dropdown-header"},[r("div",{staticClass:"uk-search uk-search-default uk-width-1-1"},[r("input",{directives:[{name:"model",rawName:"v-model",value:n.search,expression:"search"}],staticClass:"uk-search-input",attrs:{placeholder:n.i18n.t("Search"),type:"search",autofocus:""},domProps:{value:n.search},on:{input:function(a){a.target.composing||(n.search=a.target.value)}}}),e._v(" "),r("span",{staticClass:"uk-search-icon-flip",attrs:{"uk-search-icon":""}})])]),e._v(" "),r("div",{ref:"scrollEl",staticClass:"yo-dropdown-body uk-overflow-auto uk-height-max-large"},[r("ul",{staticClass:"uk-nav uk-dropdown-nav"},[n.path.length?r("li",{staticClass:"uk-nav-header uk-padding-remove",on:{click:function(a){return a.preventDefault(),n.path.pop()}}},[r("a",{staticClass:"uk-flex uk-flex-middle uk-text-emphasis",attrs:{href:""}},[r("img",{staticClass:"uk-icon uk-margin-xsmall-right",attrs:{"uk-svg":`${n.api.config.assets}/images/field-dynamic-arrow-left.svg`,"aria-hidden":"true"}}),e._v(" "),r("span",[e._v(e._s(n.backButtonLabel))])])]):e._l(e.additionalFields,function(a){return[a.label?[r("li",{key:`label-${a.label}`,staticClass:"uk-nav-header"},[e._v(e._s(a.label))]),e._v(" "),e._l(a.options,function(o){return r("li",{key:o.value},[r("a",{attrs:{href:""},on:{click:function(c){return c.preventDefault(),n.select(o)}}},[e._v(e._s(o.text))])])})]:r("li",{key:a.value},[r("a",{attrs:{href:""},on:{click:function(o){return o.preventDefault(),n.select(a)}}},[e._v(e._s(a.text))])])]}),e._v(" "),r("li",{staticClass:"uk-nav-header"},[e._v(e._s(n.toFieldLabel(n.baseField)))]),e._v(" "),e._l(Object.entries(n.fieldList),function([a,o]){return[o.subgroup&&n.fieldList[a-1]?.subgroup!==o.subgroup?r("li",{key:`${o.value}-label`,staticClass:"yo-nav-subheader"},[e._v(e._s(o.subgroup))]):e._e(),e._v(" "),r("li",{key:o.value},[r("a",{attrs:{href:""},on:{click:function(c){return c.preventDefault(),n.select(o)}}},[o.isType?r("img",{staticClass:"uk-icon uk-margin-xsmall-right",attrs:{"uk-svg":`${n.api.config.assets}/images/field-dynamic-arrow-right.svg`,"aria-hidden":"true"}}):e._e(),e._v(` `+e._s((n.isCurrent(o)?"\u2713 ":"")+o.text)+` `)])])]})],2),e._v(" "),n.fieldList.length?e._e():r("span",[e._v(e._s(n.i18n.t("No source mapping found.")))])])])},nz=[],iz=Q(tz,rz,nz,!1),xp=iz.exports;const az={__name:"SourceIcon",props:{node:Object,child:Boolean,parent:Boolean,multiple:Boolean,error:[Boolean,String],tooltipDirection:{type:String,default:"bottom"}},setup(t){const e=t,{i18n:r}=oe,n=Ae(()=>{let o="yo-builder-icon-dynamic";return e.parent&&(o+="-p"),e.multiple&&(o+="-n"),e.error&&(o+="-error"),o}),a=Ae(()=>{const o={"empty-props":r.t("No Field Mapped"),"invalid-field":r.t("Invalid Field Mapped"),"invalid-argument":r.t("Invalid Argument Mapped")},c=e.error?o[e.error]??r.t("Invalid Source"):e.multiple?e.parent?r.t("Dynamic Multiplication (Parent Source)"):r.t("Dynamic Multiplication"):e.parent?r.t("Dynamic Content (Parent Source)"):r.t("Dynamic Content");return e.child?r.t("Contains %title%",{title:c}):c});return{__sfc:!0,i18n:r,props:e,icon:n,title:a}}};var sz=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("span",{class:n.icon,attrs:{title:n.title,"uk-tooltip":`delay: 1000; pos: ${n.props.tooltipDirection}`}})},oz=[],uz=Q(az,sz,oz,!1),fE=uz.exports;const lz={__name:"Dynamic",props:{field:Object,values:Object},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me(),a=st("$node"),o=st("Builder"),c=Ae(()=>je.getProp(a,e.field.name)),d=Ae(()=>c.value&&je.getSourceFieldLabel(o.path(a),c.value));function p(){n("editSourceProp",[je.getSourceFieldFields(o.path(a),c.value),c.value])}function v(){je.removeProp(a,e.field.name)}return{__sfc:!0,i18n:r,trigger:n,node:a,Builder:o,props:e,prop:c,config:d,edit:p,remove:v,api:ue}}};var cz=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{staticClass:"uk-position-relative uk-input yo-input-iconnav-right uk-flex",class:{"uk-form-danger":!n.config}},[r("img",{staticClass:"uk-flex-none uk-margin-small-right",attrs:{"uk-svg":`${n.api.config.assets}/images/builder/dynamic-field.svg`,"aria-hidden":"true"}}),e._v(" "),r("div",{staticClass:"yo-input-locked uk-flex-1"},[e._v(e._s(n.config?n.i18n.t("%label% - %group%",n.config):n.prop.name))]),e._v(" "),r("div",{staticClass:"uk-position-center-right uk-position-small"},[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap"},[r("li",{directives:[{name:"show",rawName:"v-show",value:n.config,expression:"config"}]},[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Edit"),href:"","uk-icon":"pencil","uk-tooltip":"delay: 500"},on:{click:function(a){return a.preventDefault(),n.edit.apply(null,arguments)}}})]),e._v(" "),r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Delete"),href:"","uk-icon":"trash","uk-tooltip":"delay: 500"},on:{click:function(a){return a.preventDefault(),n.remove.apply(null,arguments)}}})])])])])},fz=[],dz=Q(lz,cz,fz,!1),dE=dz.exports,hz={name:"Limit",extends:ik,computed:{value:{get(){return xn(this.values,this.name)||void 0},set(t){const e=ke.clamp(ke.toFloat(t),this.attributes.min||Number.MIN_SAFE_INTEGER,this.attributes.max||Number.MAX_SAFE_INTEGER)||void 0;e!==t&&(this.$el.value=dr(e)?"":e),this.$emit("change",e,this)}}}};const pz={name:"SelectItem",extends:Ze,data:()=>({title:null}),computed:{labels(){return this.field.labels??{}}},watch:{value:{async handler(t){t?this.title=await this.$trigger("resolveItemTitle",{...this.field,id:t},!0):this.title=null},immediate:!0}},methods:{async pick(){const t=await this.$trigger("openItemPicker",this.field,!0);t&&(this.value=t)},remove(){this.value=void 0}}};var mz=function(){var e=this,r=e._self._c;return r("div",{staticClass:"uk-position-relative uk-input yo-input-locked yo-input-iconnav-right"},[r("span",[e._v(e._s(e.value?e.title||e.$t("Unknown %type%",{type:e.labels.type||"Item"}):e.$t("Pick %type%",{type:e.labels.type||"Item"})))]),e._v(" "),r("div",{staticClass:"uk-position-center-right uk-position-small"},[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap"},[r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:e.$t("Pick %type%",{type:e.labels.type||"Item"}),href:"","uk-icon":"pencil","uk-tooltip":"delay: 500"},on:{click:function(n){return n.preventDefault(),e.pick.apply(null,arguments)}}})]),e._v(" "),e.value?r("li",[r("a",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:e.$t("Delete"),href:"","uk-icon":"trash","uk-tooltip":"delay: 500"},on:{click:function(n){return n.preventDefault(),e.remove.apply(null,arguments)}}})]):e._e()])])])},vz=[],gz=Q(pz,mz,vz,!1),_z=gz.exports,bz={name:"SourceFieldArgs",setup(){const t=st("Builder");return function(e){const{node:r}=this.$parent,n=je.getQuery(r),a=je.getField(r);if(!n||!a)return null;const o=je.getSourceField(t.path(r))?.metadata?.arguments;return An(o)?null:e(Wr,{props:{panel:{fields:o},values:je.getFieldArgs(r)},on:{change(c,{name:d}){je.setFieldArg(r,d,c)}},key:`args-${n}-${a}`},[])}}},yz={name:"SourceFieldDirective",props:{field:Object,required:!0},setup(t){return function(e){const{node:r}=this.$parent,{name:n,fields:a}=t.field,o=je.getQuery(r),c=je.getField(r);return c?e(Wr,{props:{panel:{fields:a},values:je.getFieldDirectiveArgs(r,n)},on:{change(d,{name:p}){je.setFieldDirectiveArg(r,n,p,d)}},key:`directive-${o}-${c}`},[]):null}}},kz={name:"SourceFieldDirectives",setup(){const t=st("Builder");return function(e){const{node:r}=this.$parent,n=je.getQuery(r),a=je.getField(r);if(!n||!a)return null;const d=(je.getSourceField(t.path(r))?.metadata?.directives||["slice"]).filter(p=>ue.builder?.sources?.directives?.[p]).map(p=>({type:"source-field-directive",name:p,...ue.builder.sources.directives[p]}));return d.length?e(Wr,{props:{panel:{fields:d}},key:`directives-${n}-${a}`},[]):null}}},Ez={name:"SourceFieldSelect",props:{field:Object,values:Object},setup(){const{i18n:t}=oe,e=st("Builder");return function(r){const{node:n}=this.$parent,a=je.getField(n),o=a&&je.getSourceFieldLabel(e.path(n));return r("a",{class:["uk-select",{"uk-form-danger":a&&!o}],on:{click:async c=>{c.preventDefault();const{target:d}=c,p=await Io(xp,{builder:e,node:n,fieldType:"LIST",additionalFields:[{text:t.t("None"),value:""}]},d,{classes:"yo-dropdown",boundaryX:d.closest(".yo-sidebar-fields > *")||d});p!==void 0&&je.setField(n,p)}}},a?o?t.t("%label% - %group%",o):a.name:t.t("None"))}}},Tz={name:"SourcePropFilters",props:{field:{type:Object,required:!0}},setup:t=>function(e){const{node:r}=this.$parent,{prop:n,fields:a}=t.field,o=je.getProp(r,n)?.name,c=je.getProp(r,n)?.filters;return o?e(Wr,{props:{panel:{fields:a},values:c},key:o},[]):null}},Cz={name:"SourcePropSelect",props:{field:Object,values:Object},setup(t){const{i18n:e}=oe,r=st("Builder");return function(n){const{node:a}=this.$parent,o=r.path(a),c=je.getProp(a,t.field.prop);let d=c&&je.getSourceFieldLabel(o,c);const p=[{text:e.t("None"),value:""}];if(je.getSourceField(o)?.type.kind==="LIST"){const v=e.t("Source"),b={"#first":e.t("First Item"),"#last":e.t("Last Item"),"#index":e.t("Item Index")};p.push({label:v,options:wz(b)}),c&&b[c.name]&&(d={label:b[c.name],group:v})}return n("a",{class:["uk-select",{"uk-form-danger":c&&!d}],on:{click:async v=>{v.preventDefault();const{target:b}=v,{field:C}=t,T=await Io(xp,{builder:r,node:a,prop:C.prop,additionalFields:p},b,{classes:"yo-dropdown",boundaryX:b.closest(".yo-sidebar-fields > *")||b});T!==void 0&&(T?je.setProp(r.path(a),C.prop,{name:T,filters:{}}):je.getProp(a,C.prop)&&je.removeProp(a,C.prop))}}},c?d?e.t("%label% - %group%",d):c.name:e.t("None"))}}};function wz(t){return Object.entries(t).map(([e,r])=>({value:e,text:r}))}var Sz={name:"SourceQueryArgs",props:{field:Object,values:Object},setup(){return function(t){const{node:e}=this.$parent,r=je.getQuery(e),n=Rr.findField(r)?.metadata?.fields;return An(n)?null:t(Wr,{props:{panel:{fields:n},values:je.getQueryArgs(e)},on:{change(a,{name:o}){je.setQueryArg(e,o,a)}},key:r},[])}}},xz={name:"SourceSelect",inject:["Builder","$node"],extends:Uo,computed:{value:{get(){return je.getQuery(this.$node)},set(t){je.setQuery(this.$node,t)}}},methods:{filterOptions(){const t=Rr.rootQueryFields?.filter(r=>!r.metadata?.view||r.metadata.view.includes(this.Builder.view)).map(({name:r,metadata:{label:n,group:a=""}={}})=>({value:r,text:n||r,group:a})),e=je.getParentSourceField(this.Builder.path(this.$node));return[{text:this.$t("None"),value:""},...e?[{label:this.$t("Parent"),options:[{text:this.$t("Parent (%label%)",e.metadata),value:je.parentKey}],divider:!0}]:[],...ma(A8({Page:[],...Ci(Ti(t,"group"),"group")},r=>!r.length),(r,n)=>({label:n,options:r,divider:!0})),...Ti(t.slice(0,1),{group:""}).map(r=>({...r,divider:!0})),...Ti(t.slice(1),{group:""})]}}},Az=Object.freeze({__proto__:null,FieldDynamic:dE,FieldLimit:hz,FieldSelectItem:_z,FieldSourceFieldArgs:bz,FieldSourceFieldDirective:yz,FieldSourceFieldDirectives:kz,FieldSourceFieldSelect:Ez,FieldSourcePropFilters:Tz,FieldSourcePropSelect:Cz,FieldSourceQueryArgs:Sz,FieldSourceSelect:xz}),Oz={init(){Object.assign(Vr.components,Az),ue.builder.helpers=Object.assign(ue.builder.helpers||{},{Schema:Rr,Source:je})},setup(){const{i18n:t}=oe;Me({prepareFields({origin:{builder:e,node:r}},n){if(!(!e||!r))for(const a of n)a.source&&(a.buttons=(a.buttons||[]).concat([{label:t.t("Dynamic"),action:"pickSource",show:()=>je.hasFields(e.path(r))}]),je.getProp(r,a.name)&&(a.component=dE))},evaluateExpression(e,r,n){const{builder:a,node:o}=e.origin;a&&o?.source?.props&&(e.params[1]={...n,...o.source.props})},async pickSource({origin:{builder:e,node:r}},n,{target:a}){const o=await Io(xp,{builder:e,node:r,prop:n.name},a,{classes:"yo-dropdown",boundaryX:a.closest(".yo-sidebar-fields > *")||a}),c=je.getProp(r,n.name);o&&(!c||o!==c.name)&&je.setProp(e.path(r),n.name,{name:o})},editSourceProp({origin:{$el:e}},r,n){ds(s9,{config:r,values:n},e)},contentItemTitle({origin:{Builder:e}},r){const n=je.getSourceField(e.path(r));if(n)return n?.metadata.label},editNode(e,r){Array.isArray(r.source?.props)&&mt(r.source,"props",{})},transformedNode(e,r,n,a){if(!n.source)return;const o=a.type(r);if(!o.fields?.source)return;const c=kr({},n.source);for(const d of Object.keys(c.props||{}))d in o.fields||delete c.props[d];r.source=c},statusesNode({origin:e,result:r=[]},n){return je.hasInvalidSource(e.node,e.Builder)&&r.push("error"),je.isMultipleSource(e.Builder.path(n))&&r.push("multiple-source"),r},statusIconsNode({origin:e,result:r=[]}){const{getStates:n,findStates:a}=Nz(e.Builder);if((je.hasSource(e.node)||je.hasInvalidSource(e.node,e.Builder))&&r.push({component:fE,...n(e.node)}),e.isContainerElement)for(const o of a(e.node))r.push({component:fE,child:!0,...o});return r}})}};function Nz(t){function e(n){let a=[];for(const o of t.children(n))je.hasSource(o)&&a.push(r(o));return H8(a,Gl)}function r(n){return{parent:je.parentKey===je.getQuery(n),multiple:je.isMultipleSource(t.path(n)),error:je.hasInvalidSource(n,t)}}return{getStates:r,findStates:e}}const Pz={__name:"BuilderSearchTemplate",props:{panel:Object,template:Object},setup(t){const e=t,{i18n:r}=oe,n=ms("Builder Template"),a=zt(),o=Ho(),c=n();br("Builder",c),ys(c);const{trigger:d}=Me({beforeunloadPreview(G,{event:j}){c.modified&&(j.preventDefault(),j.returnValue=!0)},closePanel(G,j,{name:O}={}){const x=r.t("The changes you made will be lost if you navigate away from this page.");O===e.panel.name&&c.modified&&(window.confirm(x)?c.reset():j.close=!1)}});el(()=>{c.init({node:c.clone(e.template.layout),prefix:`template-${e.template.id}#`,rootType:"fragment",view:"_search",onChange:p}),p()}),Nr(()=>{for(const G of v())for(const j of G.$el.ownerDocument.querySelectorAll(".uk-drop.uk-open, .uk-modal.uk-open"))j.dispatchEvent(new CustomEvent("toggle"))});function p(){for(const G of v())b(G)}function v(){return Array.from(a.document.querySelectorAll("[uk-search]")).map(G=>nr.getComponent(G,"search"))}async function b(G){const{form:j}=G.$el;j.dataset.liveSearch=JSON.stringify({...JSON.parse(j.dataset.liveSearch||"{}"),customizer:Cl(JSON.stringify({template:{id:e.template.id,type:e.template.type,layout:c.empty?null:c.node}}))}),await G.update(),C(G)}function C(G){if(!(G.$el.closest("header")||G.$el.ownerDocument.querySelector(`[uk-toggle][href="#${G.$el.closest(".uk-modal").id}"]`))?.checkVisibility())return;if(G.dropdown){G.showDropdown();return}const j=G.$el.closest(".uk-modal, .uk-drop");j.classList.contains("uk-open")||j.dispatchEvent(new CustomEvent("toggle"))}async function T(G=c.node){try{await d("replaceImages",G,!0)&&p();const O=c.empty?null:G;await o.saveTemplate({...e.template,layout:O}),await o.getTemplates(),c.reset(c.clone(O))}catch{}}function A(){c.reset(),p()}function F(){c.set({...c.make("fragment"),children:[c.make("row")]})}return{__sfc:!0,i18n:r,useBuilderTemplate:n,Preview:a,BuilderStore:o,builder:c,props:e,trigger:d,load:p,getSearchComponents:v,updateSearch:b,showResults:C,save:T,cancel:A,empty:F,Layout:ga,Savebar:Xl,LayoutButtons:ya}}};var Iz=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r(n.Savebar,{directives:[{name:"show",rawName:"v-show",value:n.builder.modified,expression:"builder.modified"}],on:{cancel:n.cancel,save:n.save}}),e._v(" "),r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t("Builder")))])]),e._v(" "),r(n.LayoutButtons,{staticClass:"uk-width-auto"})],1),e._v(" "),r("h2",{staticClass:"yo-sidebar-heading-builder uk-text-truncate uk-visible-toggle"},[e._v(` `+e._s(n.props.template.name)+` `),r(n.LayoutButtons,{staticClass:"uk-inline-block uk-text-baseline uk-invisible-hover",attrs:{position:"title"}})],1),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:n.builder.empty,expression:"builder.empty"}],staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Create a general layout for the live search results. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.")))]),e._v(" "),r("button",{directives:[{name:"show",rawName:"v-show",value:n.builder.empty,expression:"builder.empty"}],staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.empty}},[e._v(e._s(n.i18n.t("New Layout")))]),e._v(" "),r(n.Layout,{attrs:{node:n.builder.node}})],1)},Lz=[],Rz=Q(Pz,Iz,Lz,!1),Dz=Rz.exports;const Mz={__name:"BuilderTemplate",props:{panel:Object,template:Object},setup(t){const e=t,{i18n:r}=oe,n=ms("Builder Template"),a=zt(),o=Ho(),c=n();br("Builder",c),ys(c);let d=!1;gt(()=>a.data.template,()=>{e.template.id!==(a.data.template?.id??a.data.template?.visible)&&(d=!0,A())});const{trigger:p}=Me({beforeunloadPreview(F,{event:G}){c.modified&&(G.preventDefault(),G.returnValue=!0)},closePanel(F,G,{name:j}={}){const O=r.t("The changes you made will be lost if you navigate away from this page.");j!==e.panel.name||d||(!c.modified||window.confirm(O)?p("loadPreview"):G.close=!1)}});el(()=>{c.init({node:c.clone(e.template.layout),prefix:`template-${e.template.id}#`,view:e.template.type,onChange:v})});function v(){p("loadPreview",{template:{id:e.template.id,type:e.template.type,layout:c.empty?null:c.node}})}async function b(F=c.node){try{await p("replaceImages",F,!0)&&v();const j=c.empty?null:F;await o.saveTemplate({...e.template,layout:j}),await o.getTemplates(),c.reset(c.clone(j))}catch{}}function C(){c.reset(),v()}function T(){c.set({...c.make("layout"),children:[c.make("section")]})}function A(){c.modified?c.reset():p("resetNode",[c.node,c]),p("closeSidebarPanel",e.panel)}return{__sfc:!0,i18n:r,useBuilderTemplate:n,Preview:a,BuilderStore:o,builder:c,props:e,closed:d,trigger:p,load:v,save:b,cancel:C,empty:T,close:A,Layout:ga,Savebar:Xl,LayoutButtons:ya}}};var $z=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r(n.Savebar,{directives:[{name:"show",rawName:"v-show",value:n.builder.modified,expression:"builder.modified"}],on:{cancel:n.cancel,save:n.save}}),e._v(" "),r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t("Builder")))])]),e._v(" "),r(n.LayoutButtons,{staticClass:"uk-width-auto"})],1),e._v(" "),r("h2",{staticClass:"yo-sidebar-heading-builder uk-text-truncate uk-visible-toggle"},[e._v(` `+e._s(n.props.template.name)+` `),r(n.LayoutButtons,{staticClass:"uk-inline-block uk-text-baseline uk-invisible-hover",attrs:{position:"title"}})],1),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:n.builder.empty,expression:"builder.empty"}],staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.")))]),e._v(" "),r("button",{directives:[{name:"show",rawName:"v-show",value:n.builder.empty,expression:"builder.empty"}],staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.empty}},[e._v(e._s(n.i18n.t("New Layout")))]),e._v(" "),r(n.Layout,{attrs:{node:n.builder.node}})],1)},Fz=[],Bz=Q(Mz,$z,Fz,!1),Hz=Bz.exports;const Uz={__name:"TemplateModal",props:{panel:Object,template:Object},emits:["resolve"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,{trigger:a}=Me(),o=Be(kr({},r.template));gt(()=>o.value.type,()=>Zi(o.value,"query"));function c(){const p=ue.builder.templates[o.value.type]?.fieldset||{};return Object.entries(p).map(([v,b])=>(v=v==="default"?"query":v,{name:v,...b,onChange:(C,T)=>{Ml(o.value[v])||mt(o.value,v,{}),fn(o.value[v],T.name,C)}}))}function d(p){const v=o.value[p==="default"?"query":p];return Array.isArray(v)?{}:v}return{__sfc:!0,i18n:n,trigger:a,emit:e,props:r,tmpl:o,fieldsets:c,values:d,FieldsPanel:Wr,vConfirm:cn}}};var jz=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("form",{on:{submit:function(a){return a.preventDefault(),n.emit("resolve",n.tmpl)}}},[r("div",{staticClass:"uk-modal-header uk-flex uk-flex-middle uk-flex-between"},[r("h2",{staticClass:"uk-modal-title uk-margin-remove-bottom"},[e._v(` `+e._s(n.i18n.t(n.props.template.name?"Edit Template":"Save Template"))+` `)]),e._v(" "),n.props.template.name?r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("button",{staticClass:"uk-button uk-button-default uk-modal-close",attrs:{type:"button"},on:{click:function(a){return n.trigger("copyTemplate",[n.props.template],!0)}}},[e._v(e._s(n.i18n.t("Copy")))])]),e._v(" "),r("div",[r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-button uk-button-danger uk-modal-close",attrs:{type:"button"},on:{click:function(a){return n.trigger("deleteTemplate",[n.props.template],!0)}}},[e._v(e._s(n.i18n.t("Delete")))])])]):e._e()]),e._v(" "),r("div",{staticClass:"uk-modal-body uk-form-stacked uk-padding-remove-bottom"},[r(n.FieldsPanel,{staticClass:"uk-margin-medium-bottom",attrs:{panel:e.panel,values:n.tmpl}}),e._v(" "),e._l(n.fieldsets(),function({fields:a,name:o,onChange:c}){return r(n.FieldsPanel,{key:`${n.tmpl.type}.${o}`,staticClass:"uk-margin-medium-bottom",attrs:{panel:{fields:a},values:n.values(o)},on:{change:c}})})],2),e._v(" "),r("div",{staticClass:"uk-modal-footer uk-text-right"},[r("button",{staticClass:"uk-button uk-button-text uk-modal-close uk-margin-small-right",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Cancel")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-primary"},[e._v(e._s(n.i18n.t("Save")))])])])},Wz=[],Gz=Q(Uz,jz,Wz,!1),zz=Gz.exports;const qz={__name:"TemplateSection",props:{panel:Object},setup(t){const e=t,{i18n:r}=oe,n=Ho(),a=zt(),o=Be(null),c=Ae(()=>a.data.view??""),d=Ae(()=>a.data.template?.visible),p=Ae(()=>({...wi({...ue.builder.templates,unassigned:{label:r.t("Not assigned")}},(S,P)=>b(P))})),{trigger:v}=Me({async copyTemplate(S,P){let R=0,{name:B}=P;for(const le of["%name% Copy %index%","%name% Copy"]){const ae=r.t(le,{name:"(?<name>.+?)",index:"(?<index>\\d+)"}),{groups:Z}=B.match(new RegExp(ae))||{};if(Z){B=Z.name,R=Number(Z.index??0);break}}let q;do q=r.t(R?"%name% Copy %index%":"%name% Copy",{name:B,index:++R});while(n.templates.some(({name:le})=>le===q));await x({...structuredClone(P),name:q,id:wo()})},async deleteTemplate(S,P){await n.deleteTemplate(P),v("loadPreview")}});el(()=>{n.getTemplates()});function b(S){return!An(C(S))}function C(S){return wi(n.templates,P=>S==="unassigned"?!ue.builder.templates[P.type]:P.type===S)}function T(S){return S.name||ue.builder.templates[S.type]?.label||S.type}function A(){return F({id:wo(),type:c.value})}async function F(S){const P=await Dt(zz,{panel:e.panel,template:S});P&&await x(P)}function G(S){d.value!==S.id&&!S.url?.startsWith("#")&&a.load({url:S.url,query:{template:S}}),v("openPanel",{name:"template-builder",component:Hz,title:r.t("Builder"),width:500,heading:!1,props:{template:S}})}function j(S){return d.value===S.id||!!S.url}async function O(){await n.reorderTemplates(Yl(o.value,ke.index).map(S=>S.dataset.id)),v("loadPreview")}async function x(S){await n.saveTemplate(S),await n.getTemplates(),v("loadPreview")}return{__sfc:!0,i18n:r,Builder:n,Preview:a,props:e,templates:o,view:c,visible:d,types:p,trigger:v,exists:b,filter:C,title:T,add:A,edit:F,editBuilder:G,editableBuilder:j,move:O,save:x,api:ue}}};var Yz=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{staticClass:"uk-margin-remove-first-child"},[n.Builder.templates.length?e._e():r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Create site-wide templates for pages and load their content dynamically into the layout.")))]),e._v(" "),e._l(n.types,function({label:a},o){return[r("h3",{key:`label-${o}`,staticClass:"yo-sidebar-subheading"},[e._v(e._s(a))]),e._v(" "),r("ul",{key:`list-${o}`,staticClass:"uk-nav uk-nav-default yo-sidebar-marginless yo-nav-sortable uk-text-capitalize yo-nav-iconnav yo-nav-iconnav-1",attrs:{"uk-sortable":o==="unassigned"?!1:`group: ${o}; clsCustom: yo-nav-sortable-drag`},on:{moved:n.move}},e._l(n.filter(o),function(c){return r("li",{key:c.id,ref:"templates",refInFor:!0,staticClass:"uk-visible-toggle",class:{"yo-highlight":n.visible===c.id},attrs:{"data-id":c.id}},[r("a",{class:{"uk-text-danger uk-flex uk-flex-middle":c.status==="disabled","uk-disabled":!n.editableBuilder(c)},attrs:{href:"",title:n.title(c)},on:{click:function(d){return d.preventDefault(),n.editBuilder(c)}}},[c.status==="disabled"?r("img",{staticClass:"uk-flex-none",attrs:{"uk-svg":`${n.api.config.assets}/images/builder/disabled.svg`,"aria-hidden":"true"}}):e._e(),e._v(" "),r("span",{staticClass:"uk-text-truncate"},[e._v(e._s(n.title(c)))])]),e._v(" "),r("button",{staticClass:"uk-position-center-right uk-position-medium uk-icon-link uk-invisible-hover",staticStyle:{padding:"10px 0 10px 10px"},attrs:{type:"button","uk-icon":"icon: more-vertical"},on:{click:function(d){return d.preventDefault(),n.edit(c)}}})])}),0)]}),e._v(" "),r("button",{staticClass:"uk-button uk-button-default uk-width-1-1",class:{"uk-margin-medium-top":n.Builder.templates.length},attrs:{type:"button"},on:{click:function(a){return a.preventDefault(),n.add()}}},[e._v(e._s(n.i18n.t("New Template")))]),e._v(" "),r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.")))])],2)},Kz=[],Xz=Q(qz,Yz,Kz,!1),Vz=Xz.exports,Qz={init({extend:t}){t({components:{"builder-templates":Vz}}),Me({openPanel(e,r){r.name==="template-builder"&&r.props.template.type==="_search"&&(r.component=Dz)}})}};const Jz={__name:"BuilderFooter",props:{panel:Object},setup(t){const e=t,{i18n:r}=oe,n=ms("Builder Footer"),a=Oi(),o=n();br("Builder",o),ys(o),gt(()=>a.values,({footer:{content:d}={}})=>o.reset(o.clone(d))),o.init({node:o.clone(a.values.footer?.content),prefix:"footer#",onChange(d){a.values.footer||mt(a.values,"footer",{}),d=o.empty?null:d,mt(a.values.footer,"content",d),a.change(d,{name:"footer.content"})}});function c(){o.set({...o.make("layout"),children:[o.make("section")]})}return{__sfc:!0,i18n:r,useBuilderFooter:n,config:a,builder:o,props:e,empty:c,Layout:ga,LayoutButtons:ya}}};var Zz=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t("Builder")))])]),e._v(" "),r(n.LayoutButtons,{staticClass:"uk-width-auto",attrs:{panel:n.props.panel}})],1),e._v(" "),r("h2",{staticClass:"yo-sidebar-heading-builder uk-text-truncate uk-visible-toggle"},[e._v(` `+e._s(n.i18n.t("Footer"))+` `),r(n.LayoutButtons,{staticClass:"uk-inline-block uk-text-baseline uk-invisible-hover",attrs:{panel:n.props.panel,position:"title"}})],1),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:n.builder.empty,expression:"builder.empty"}],staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.")))]),e._v(" "),r("button",{directives:[{name:"show",rawName:"v-show",value:n.builder.empty,expression:"builder.empty"}],staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.empty}},[e._v(e._s(n.i18n.t("New Layout")))]),e._v(" "),r(n.Layout,{attrs:{node:n.builder.node}})],1)},eq=[],tq=Q(Jz,Zz,eq,!1),rq=tq.exports;const nq={__name:"BuilderFragment",props:{field:Object,values:Object},setup(t){const e=st("$node"),r=st("Builder"),n=st("panel"),{i18n:a}=oe,{trigger:o}=Me({removeNode(d,p){p===e&&o("closeSidebarPanel",n)},resetNode(){o("closeSidebarPanel",n)}});function c(){r.append(e,r.make("row"))}return{__sfc:!0,$node:e,Builder:r,panel:n,i18n:a,trigger:o,empty:c,Layout:ga,LayoutButtons:ya}}};var iq=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t("Builder")))])]),e._v(" "),r(n.LayoutButtons,{staticClass:"uk-width-auto",attrs:{panel:n.panel,node:n.$node}})],1),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:!n.$node.children?.length,expression:"!$node.children?.length"}],staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.")))]),e._v(" "),r("button",{directives:[{name:"show",rawName:"v-show",value:!n.$node.children?.length,expression:"!$node.children?.length"}],staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.empty}},[e._v(e._s(n.i18n.t("New Layout")))]),e._v(" "),r(n.Layout,{attrs:{node:n.$node}})],1)},aq=[],sq=Q(nq,iq,aq,!1),oq=sq.exports;const uq={__name:"BuilderMenuItem",props:{item:Object,panel:Object,title:String},setup(t){const e=t,{i18n:r}=oe,n=ms("Builder MenuItem"),a=n(),o=tE(),c=st("Config"),d="fragment";ys(a),C(a),br("Builder",a),gt(()=>c.values,b),a.init({node:o.get(e.item,"content")||a.make(d),prefix:`menu-item-${e.item.id}#`,rootType:d,onChange:p});function p(T){T=a.empty?null:T,o.set(e.item,{name:"content"},T)}function v(){a.set({...a.make(d),children:[a.make("row")]})}function b(){a.reset(o.get(e.item,"content")||a.make(d))}function C(T){const A=zt();Ga(()=>ke.trigger(F(),"togglehide")),Xv(()=>ke.trigger(F(),"toggleshow"));function F(){return A.document?.querySelector(`[data-id="${T.prefix}0"]`)?.closest(".uk-drop")}}return{__sfc:!0,i18n:r,useBuilderMenuItem:n,Builder:a,MenuItem:o,Config:c,rootType:d,props:e,change:p,empty:v,reset:b,useDropdownPreview:C,Layout:ga,LayoutButtons:ya}}};var lq=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t("Builder")))])]),e._v(" "),r(n.LayoutButtons,{staticClass:"uk-width-auto"})],1),e._v(" "),r("h2",{directives:[{name:"show",rawName:"v-show",value:!n.Builder.empty&&n.props.title,expression:"!Builder.empty && props.title"}],staticClass:"yo-sidebar-heading-builder uk-text-truncate uk-visible-toggle"},[e._v(` `+e._s(e.title)+` `),r(n.LayoutButtons,{staticClass:"uk-inline-block uk-text-baseline uk-invisible-hover",attrs:{position:"title"}})],1),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:n.Builder.empty,expression:"Builder.empty"}],staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.")))]),e._v(" "),r("button",{directives:[{name:"show",rawName:"v-show",value:n.Builder.empty,expression:"Builder.empty"}],staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.empty}},[e._v(e._s(n.i18n.t("New Layout")))]),e._v(" "),r(n.Layout,{attrs:{node:n.Builder.node}})],1)},cq=[],fq=Q(uq,lq,cq,!1),dq=fq.exports,hq={provide(){return{$node:this.node,Builder:this.builder}},props:{node:Object,builder:Object,panel:Object},events:{removeNode(t,e){e===this.node&&this.$trigger("closeSidebarPanel",this.panel)},resetNode(){this.$trigger("closeSidebarPanel",this.panel)}}};const pq={__name:"CollisionNotification",props:{base:{type:Object,default:()=>({})},current:{type:Object,default:()=>({})}},setup(t,{expose:e}){const r=t,{i18n:n}=oe,a=Be(null),o=Be(!1),c=Ae(()=>r.base.contentHash&&![r.base.contentHash,o.value].includes(r.current.contentHash));Gt(()=>nr.container.append(a.value)),e({dismiss:d});function d(){o.value=r.current.contentHash}return{__sfc:!0,i18n:n,props:r,el:a,dismissed:o,visible:c,dismiss:d}}};var mq=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{ref:"el",staticClass:"uk-notification uk-notification-top-center"},[r("Transition",{attrs:{"enter-active-class":"uk-animation-slide-top","leave-active-class":"uk-animation-slide-top uk-animation-reverse"}},[n.visible?r("div",{staticClass:"uk-notification-message",on:{click:function(a){return n.dismiss()}}},[r("button",{staticClass:"uk-notification-close",attrs:{type:"button","uk-icon":"close"}}),e._v(" "),r("div",[e._v(e._s(n.i18n.t("The page has been updated by %modifiedBy%. Discard your changes and reload?",e.current)))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-small uk-button-primary uk-margin-small-top",attrs:{type:"button"},on:{click:function(a){return e.$emit("cancel")}}},[e._v(e._s(n.i18n.t("Reload Page")))])]):e._e()])],1)},vq=[],gq=Q(pq,mq,vq,!1),_q=gq.exports;const bq={__name:"SaveConfirmModal",props:{collision:Object},setup(t){const e=t,{i18n:r}=oe;return{__sfc:!0,i18n:r,props:e}}};var yq=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("button",{staticClass:"uk-modal-close-default",attrs:{type:"button","uk-close":""}}),e._v(" "),r("div",{staticClass:"uk-modal-header"},[r("h2",{staticClass:"uk-modal-title"},[e._v(e._s(n.i18n.t("Attention! Page has been updated.")))])]),e._v(" "),r("div",{staticClass:"uk-modal-body"},[r("p",[e._v(e._s(n.i18n.t("The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?",{modified_by:n.props.collision.modifiedBy})))])]),e._v(" "),r("div",{staticClass:"uk-modal-footer uk-text-right"},[r("div",{staticClass:"uk-grid uk-grid-small uk-child-width-auto uk-flex-inline"},[r("div",[r("button",{staticClass:"uk-button uk-button-default uk-modal-close",attrs:{type:"button"},on:{click:function(a){return e.$emit("resolve",!1)}}},[e._v(e._s(n.i18n.t("Discard")))])]),e._v(" "),r("div",[r("button",{staticClass:"uk-button uk-button-primary",attrs:{type:"button",autofocus:""},on:{click:function(a){return e.$emit("resolve",!0)}}},[e._v(e._s(n.i18n.t("Save")))])])])])])},kq=[],Eq=Q(bq,yq,kq,!1),Tq=Eq.exports;const Cq={__name:"BuilderSection",props:{panel:Object,values:Object,current:Boolean},setup(t){const e=t,r=ms("Builder Page"),n=st("Sidebar"),a=r(),o=zt();ys(a);const{i18n:c}=oe;br("Builder",a);const d=Jt({loading:!0,collision:void 0}),p=Be(null),v=Be(null),b=Ae(()=>o.data.page||{}),C=Ae(()=>!!o.data.page?.id),T=Ae(()=>!!o.data.view),A=Ae(()=>!!o.data.template),{trigger:F}=Me({loadPreview:{handler(R,B={}){a.modified&&!B.page&&(R.params[0]={...B,page:{id:b.value.id,content:a.empty?null:a.node}})},priority:5},beforeunloadPreview(R,{event:B}){a.modified&&(B.preventDefault(),B.returnValue=!0)},closePanel(R,B,{name:q}={}){q!==e.panel.name||!a.modified||(window.confirm(c.t("The changes you made will be lost if you navigate away from this page."))?x():B.close=!1)},resetNode(){p.value.parentElement.scrollTop=0}});gt(b,R=>{R.preview||G(R)}),Gt(()=>{e.current&&G(b.value)}),a.init({prefix:"page#",onChange:j});function G(R){d.loading=!1,d.collision=R.collision,a.view=o.data.view,a.reset(a.clone(R.content))}function j(R){const B={id:b.value.id,content:a.empty?null:R};F("loadPreview",{page:B})}async function O(R=a.node,B=!1){v.value.dismiss();try{await F("replaceImages",R,!0),R=a.clone(R);let q=Cl(JSON.stringify({...b.value,content:a.empty?null:R}));if(q=await Ue("page").post({page:q,overwrite:B}).json(),q.hasCollision){const le=await Dt(Tq,{collision:q.collision});le===!0?await O(R,!0):le===!1&&x()}else q.id===b.value.id&&(await F("savedPage",q,!0),d.collision=q.collision,a.base=R)}catch{}}function x(){F("loadPreview",{page:{}})}function S(){a.set({...a.make("layout"),children:[a.make("section")]})}function P(){for(const R of n.stack.toReversed())F("closeSidebarPanel",R);F("openPanel","builder-templates")}return{__sfc:!0,useBuilderPage:r,Sidebar:n,Builder:a,store:o,i18n:c,props:e,state:d,el:p,notifications:v,page:b,isLayoutable:C,isTemplatable:T,hasTemplateAssigned:A,trigger:F,init:G,load:j,save:O,cancel:x,empty:S,openTemplates:P,Layout:ga,Savebar:Xl,CollisionNotification:_q,LayoutButtons:ya}}};var wq=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{ref:"el"},[r(n.Savebar,{directives:[{name:"show",rawName:"v-show",value:n.Builder.modified,expression:"Builder.modified"}],on:{cancel:n.cancel,save:n.save}}),e._v(" "),r(n.CollisionNotification,{ref:"notifications",attrs:{base:n.state.collision,current:n.page.collision},on:{cancel:n.cancel}}),e._v(" "),r("div",{staticClass:"uk-grid uk-grid-small uk-margin-medium"},[r("div",{staticClass:"uk-width-expand"},[r("h2",{staticClass:"yo-sidebar-heading"},[e._v(e._s(n.i18n.t("Builder")))])]),e._v(" "),r(n.LayoutButtons,{directives:[{name:"show",rawName:"v-show",value:n.isLayoutable,expression:"isLayoutable"}],staticClass:"uk-width-auto"})],1),e._v(" "),r("h2",{directives:[{name:"show",rawName:"v-show",value:!n.Builder.empty,expression:"!Builder.empty"}],staticClass:"yo-sidebar-heading-builder uk-flex uk-visible-toggle"},[r("span",{staticClass:"uk-text-truncate"},[e._v(e._s(n.page.title))]),e._v(" "),r(n.LayoutButtons,{directives:[{name:"show",rawName:"v-show",value:n.isLayoutable,expression:"isLayoutable"}],staticClass:"uk-inline-block uk-text-baseline uk-invisible-hover uk-margin-small-left uk-flex-none uk-flex uk-flex-middle",attrs:{position:"title"}})],1),e._v(" "),r(n.Layout,{attrs:{node:n.Builder.node}}),e._v(" "),n.Builder.empty&&!n.state.loading?[!n.isLayoutable&&!n.isTemplatable?r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("The builder is not available on this page. It can only be used on pages, posts and categories.")))]):e._e(),e._v(" "),n.isLayoutable?[r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.empty}},[e._v(e._s(n.i18n.t("New Layout")))])]:e._e(),e._v(" "),n.isTemplatable?[n.isLayoutable&&n.hasTemplateAssigned?r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.")))]):e._e(),e._v(" "),n.isLayoutable?e._e():r("p",{staticClass:"uk-text-muted"},[e._v(e._s(n.i18n.t("Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.")))]),e._v(" "),n.Sidebar.root.name!=="builder"?[n.isLayoutable&&n.hasTemplateAssigned||!n.isLayoutable?r("button",{staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.openTemplates}},[e._v(e._s(n.i18n.t("Open Templates")))]):e._e()]:e._e()]:e._e()]:e._e()],2)},Sq=[],xq=Q(Cq,wq,Sq,!1),Aq=xq.exports;const Oq={__name:"DownloadModal",props:{images:{type:Array,required:!0}},emits:["resolve"],setup(t,{emit:e}){const r=t,{i18n:n,url:a}=oe,o=Jt({total:r.images.length,files:[...r.images],errors:[],loading:!1});function c(T){o.total=o.files.length,o.errors=[],o.loading=!0,T()}function d(){for(const{src:T,replace:A}of o.files){const F=fa(b(T))?`${ue.config.assets}/images/element-video-placeholder.mp4`:`${ue.config.assets}/images/element-image-placeholder.png`;A(T,a(F).slice(ue.config.url.length+1))}v()}async function p(){const T=ca((F,G)=>Ue("builder/image").post({src:F,md5:G}).json()),A=[];for(const F of[...o.files]){const{src:G,md5:j,replace:O}=F;try{const x=await T(G,j);A.push(()=>O(G,x)),o.files.splice(o.files.indexOf(F),1)}catch(x){this.errors.push({message:x.json??x.message,filename:C(G)})}}for(const F of A)F();o.files.length?o.loading=!1:setTimeout(v,650)}function v(){e("resolve",!0)}function b(T){try{return new URL(T).pathname}catch{return T}}function C(T){const A=b(T),F=A.lastIndexOf("/");return F>-1?A.slice(F+1):A}return{__sfc:!0,i18n:n,toUrl:a,props:r,emit:e,state:o,handle:c,placeholder:d,download:p,close:v,toPath:b,toFilename:C,http:Ue,groupBy:Ci,orderBy:ep}}};var Nq=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-modal-header"},[r("h2",{staticClass:"uk-modal-title"},[e._v(e._s(n.i18n.t("Layout Media Files")))])]),e._v(" "),r("div",{staticClass:"uk-modal-body"},[n.state.loading?r("progress",{staticClass:"uk-progress uk-margin-remove",attrs:{max:n.state.total},domProps:{value:n.state.total-n.state.files.length}}):e._e(),e._v(" "),n.state.errors.length?r("div",{staticClass:"uk-alert-danger uk-alert",attrs:{"uk-alert":""}},[r("p",[e._v(e._s(n.i18n.t("%smart_count% media file download failed: |||| %smart_count% media file downloads failed:",n.state.errors.length)))]),e._v(" "),e._l(n.groupBy(n.state.errors,"message"),function(a,o){return r("div",{key:o},[r("span",{staticClass:"uk-text-bold"},[e._v(e._s(o))]),e._v(" "),r("ul",{staticClass:"uk-list uk-list-disc"},e._l(n.orderBy(a,"filename"),function(c,d){return r("li",{key:d},[e._v(e._s(c.filename))])}),0)])})],2):e._e(),e._v(" "),r("p",[e._v(e._s(n.i18n.t("This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.",n.state.total)))]),e._v(" "),r("p",{domProps:{innerHTML:e._s(n.i18n.t("All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission."))}})]),e._v(" "),r("div",{directives:[{name:"show",rawName:"v-show",value:!n.state.loading,expression:"!state.loading"}],staticClass:"uk-modal-footer uk-text-right"},[r("button",{staticClass:"uk-button uk-button-default uk-margin-small-right",attrs:{type:"button"},on:{click:function(a){return n.handle(n.placeholder)}}},[e._v(e._s(n.i18n.t("Remove Media Files")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-primary",attrs:{type:"button"},on:{click:function(a){return n.handle(n.download)}}},[e._v(e._s(n.i18n.t("Download")))])])])},Pq=[],Iq=Q(Oq,Nq,Pq,!1),Lq=Iq.exports;const Rq={__name:"HelpButton",props:{help:[Array,Object]},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me(),a=kr({},e.help,ue.customizer.panels.builder.help);return{__sfc:!0,i18n:r,trigger:n,props:e,helpConfig:a,api:ue}}};var Dq=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return n.helpConfig?r("button",{staticClass:"uk-icon uk-icon-link",attrs:{type:"button","aria-label":n.i18n.t("Help")},on:{click:function(a){return n.trigger("openHelp",[n.helpConfig])}}},[r("img",{attrs:{"uk-svg":`${n.api.config.assets}/images/help.svg`,"aria-hidden":"true"}})]):e._e()},Mq=[],$q=Q(Rq,Dq,Mq,!1),Fq=$q.exports;const Bq={__name:"LibraryButton",props:{node:Object},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me(),a=st("Builder");return{__sfc:!0,i18n:r,trigger:n,props:e,builder:a}}};var Hq=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("button",{staticClass:"uk-button uk-button-small uk-button-default",attrs:{type:"button"},on:{click:function(a){return n.trigger("openLibrary",[n.builder,n.props.node])}}},[e._v(e._s(n.i18n.t("Library")))])},Uq=[],jq=Q(Bq,Hq,Uq,!1),Wq=jq.exports;const Ap="builder/library";var Gq={extends:J1,created(){Ue(Ap).get().json(t=>{this.library=t}).catch(t=>{t.status===403&&Ut({message:"Your session has expired. Please reload page to start working.",status:"danger",timeout:0}),this.library={}})},methods:{getElement({link:t}){return J1.methods.getElement.call(this,{link:t}).then(e=>Ue("builder/encode").post({layout:e}).json())}},events:{async saveElement(t,e,r){return e.version=ue.customizer.version,await this.$trigger("replaceImages",e,!0),Ue(Ap).post({id:r,element:e}).json()},deleteElement(t,e,r){return Ue(Ap).query({id:r}).delete().json()}}},zq={init({extend:t}){Object.assign(Vr.components,{FieldBuilderFragment:oq}),t({components:{builder:Aq,"footer-builder":rq,"menu-item-builder":dq},models:{Library:Gq}})},setup(){const{i18n:t}=oe,e=zt(),{trigger:r}=Me({hoverNode(n,a,o){Tp(`[data-id="${o.id(a)}"]`,e.document)},leaveNode(){Zo(e.document)},removeNode(){Zo(e.document)},patchPreview(){Zo(e.document)},scrollNode(n,a,o){ke.$(`[data-id="${o.id(a)}"]`,e.document)?.scrollIntoView({block:"center"})},editNode(n,a,o){const c=o.type(a),d=ql(c,["title","width","fields","fieldset","panels"]);return(!_t(a.props)||Array.isArray(a.props))&&mt(a,"props",{}),ke.hasOwn(a.props,"name")||Object.defineProperty(a.props,"name",{get:()=>a.name,set:p=>{mt(a.props,"__name",p),mt(a,"name",p),Zi(a.props,"__name")}}),(c.name==="column"||!c.element&&!c.container)&&(d.title=t.t("%title% %index%",{title:d.title,index:o.index(a)+1})),r("openPanel",Object.assign(d,{component:qq,name:`node-edit-${o.prefix}-${o.key(a)}`,props:{node:a,builder:o,values:a.props},heading:!1}),!0)},openPanel:[{async handler({sidebar:n},a){if(!lc(a))return;const{node:o,builder:c}=a.props,d=hE(n.stack);if(o.type==="layout"||pE(o,d)){const p=c.path(o);for(const v of d)p.includes(v.props.node)||r("closeSidebarPanel",v);return!1}for(const p of Yq(o,c,d))await r("editNode",[p,c],!0)},priority:5},{handler({sidebar:n},a){if(!lc(a))return;const{name:o,props:{node:c,builder:d}}=a;if(n.panel?.name!==o)return;const{stack:p}=n;for(const v of Kq(c,d,p.slice(p.indexOf(hE(p)[0]))))r("closeSidebarPanel",v)},priority:-10}],initBuilder(n,a){Object.assign(a,ue.builder.elements)},transformedNode(n,a,o,c,d){if(d)return;const p=c.type(a);let v={};for(const b of Object.values(p.fields))b.type==="button-panel"&&(v={...v,...ue.customizer.panels[b.panel]?.fields??{},...p.panels?.[b.panel]?.fields??{}});for(const[b,C]of Object.entries(o.props))if(b in v){const{options:T}=v[b];if(T&&!dp(C,T))continue;a.props[b]=C}},async transformBuilderElement(n){const{node:a,builder:o}=n.origin.Fields;return r("transformNode",[a,o])},async replaceImages(n,a){const o=To.findIn(a);return o.length?await Dt(Lq,{images:o},{id:"DownloadModal",width:"xlarge"})||Promise.reject():void 0},layoutButtons({result:n=[]},{node:a,panel:o={}}={}){return[...n,{component:Fq,help:o.help},{component:Wq,node:a}]}})}};const qq={name:"BuilderPanel",provide(){return{panel:this.panel}},mixins:[Wr,hq],created(){this.node.type==="row"&&this.$on("change",(t,{name:e})=>{e==="layout"&&Tn(()=>this.builder.columnWidths(this.node,t))})}};function lc(t){return t.name?.startsWith("node-edit-")}function hE(t){return t.filter(lc)}function pE(t,e){return e.some(r=>r.props.node===t)}function Yq(t,e,r){return e.path(t).slice(1,-1).reverse().filter(n=>e.type(n).fragment&&!pE(n,r))}function Kq(t,e,r){const n=e.path(t),a=e.type(t).element;return r.slice(0,-1).filter(o=>{if(!lc(o))return!0;const{node:c}=o.props,{element:d,fragment:p}=e.type(c);return!n.includes(c)||a&&!d&&!p})}function Xq(){let t,e;const r=zt();Me({hoverComponent(n,{target:a},o){const{body:c}=r.document??{},d=ue.styler.components[o]?.hover;clearTimeout(e),d&&c&&(e=setTimeout(()=>Tp(d,c),50),a.addEventListener("pointerleave",()=>{Zo(c),clearTimeout(e)},{once:!0}))}}),hf(()=>{if(t?.(),!r.document)return;const{documentElement:n}=r.document,a=Vq(r.document),o=Jq(n,a),c=Qq(r.document,a);t=()=>{a.remove(),o.disconnect(),c()}}),Nr(()=>t?.())}function Vq(t){const e=t.createElement("div");return e.classList.add("yo-inspect"),t.body.appendChild(e),e}function Qq(t,e){const{i18n:r}=oe;let n;const a=({target:d,pageX:p,pageY:v})=>{n!==d&&(n=d,e.hidden=!1,e.textContent=Object.entries(ue.styler.components).map(([b,{inspect:C}])=>{if(C&&n.matches(C))return r.t(b.replaceAll("-"," "))}).filter(Boolean).join(", ")),e.style.setProperty("top",`${v}px`),e.style.setProperty("left",`${p}px`)},o=()=>{n=null,e.hidden=!0},{documentElement:c}=t;return c.addEventListener("pointermove",a,{passive:!0}),c.addEventListener("pointerleave",o),()=>{c.removeEventListener("pointermove",a),c.removeEventListener("pointerleave",o)}}function Jq(t,e){const r=new MutationObserver(n=>{for(const{addedNodes:a}of n)for(const o of a)o.tagName==="BODY"&&o.appendChild(o.ownerDocument.adoptNode(e))});return r.observe(t,{childList:!0}),r}const[,{fonts:AQ}]=Cb;function Zq(t){return t.map(e=>`${e.name.replaceAll(" ","+")}${e.variants?`:${e.variants.replaceAll(" ","")}`:""}`).sort().join("|")}function Op(t){return t=eY(t),t?t.split("|").map(e=>{const[r,n=""]=e.split(":");return{name:r.replaceAll("+"," "),variants:n}}).sort((e,r)=>e.name.localeCompare(r.name,"en")):[]}function mE(t){return t.reduce((e,{name:r,variants:n})=>({[r]:n,...e}),{})}function eY(t){return t.replace(/^~?(['"]?)(.*?)\1/,"$2")}const tY={extends:Vr,inject:["Styler"],computed:{style(){return this.Styler.style},vals(){return{...this.variants}},fields(){return this.prepare(rY(this.fonts))},fonts(){const t=Op(this.style.fonts);if("@internal-fonts"in this.Styler.less)for(const e of Op(this.Styler.less["@internal-fonts"])){const r=t.findIndex(({name:n})=>n===e.name);~r&&(t[r]=e)}return t},variants(){return mE(this.fonts)},internalFontVariants(){return mE(Op(this.style.styleFonts))}},methods:{set(t,{name:e}){pa(this.fonts,{name:e}).variants=t,this.Styler.set("@internal-fonts",`~'${Zq(this.fonts)}'`)},isSet({name:t}){return t in this.internalFontVariants&&this.internalFontVariants[t]!==this.variants[t]},reset({name:t}){this.set(this.internalFontVariants[t],{name:t})}}};function rY(t){const{i18n:e}=oe;return t.map((r,n)=>({name:r.name,label:`${r.name} Variants`,description:n===t.length-1?e.t('Add a comma-separated list of font weights to load, e.g. 300, 400, 600. Look up available variants at <a href="https://fonts.google.com" target="_blank">Google Fonts</a>.'):"",attrs:{placeholder:"400"}}))}var nY=function(){var e=this,r=e._self._c;return r("div",{staticClass:"yo-sidebar-fields"},e._l(e.fields,function(n){return r("div",{directives:[{name:"show",rawName:"v-show",value:e.evaluate(n.show),expression:"evaluate(field.show)"}],key:n.name},[n.label?r("h3",{staticClass:"yo-sidebar-subheading"},[e._v(e._s(e.$t(n.label)))]):e._e(),e._v(" "),r("div",{staticClass:"uk-position-relative"},[e.isSet(n)?r("div",{staticClass:"yo-style-reset",on:{click:function(a){return e.reset(n)}}}):e._e(),e._v(" "),r(n.component,{tag:"component",attrs:{field:n,values:e.vals},on:{change:e.set}})],1),e._v(" "),n.description?r("p",{staticClass:"uk-text-muted uk-margin-small",domProps:{innerHTML:e._s(n.description)}}):e._e()])}),0)},iY=[],aY=Q(tY,nY,iY,!1),sY=aY.exports;const oY=["hover","focus","onclick","active","checked","disabled"];function cc(t,e){return e&&t.match(uY(e))}const Np=new Map;function uY(t){return Np.has(t)||Np.set(t,new RegExp(`^(${(typeof t=="string"?t:Object.values(t).flat().join("|")).replaceAll("*",".*")})$`)),Np.get(t)}const lY={extends:Vr,inject:["Config","Styler"],props:{panel:Object,component:{type:String,required:!0}},computed:{style(){return this.Styler.style},vals(){return{...this.style.values,...this.Config.values.less}},fields(){const t=this.style.groups[this.component].map(({name:e,group:r})=>kr({name:e,group:r},pa(ue.styler.types,n=>cc(e,n.vars)),cY(e,this.style.variables)));return this.prepare(t.map((e,r)=>({...e,label:(!t[r-1]||t[r-1].group!==e.group)&&e.group})))}},methods:{change(t,{name:e}){this.Styler.set(e,t)},label({name:t,group:e}){return t=t.slice(1).replace(new RegExp(`^${this.component}-`),"").replaceAll("-"," "),e&&(t=t.replace(new RegExp(`^(${e}|${e.replace(/s$/,"")}) `),"")),t=t.replace(/(.*) (s|m|l|xl|xxl)$/i,"@$2 $1"),this.$t(t)},reset({name:t,internal:e}){this.Styler.remove(t),this.Styler.remove(e)}}};function cY(t,e){const r=`@internal-${t.replace(/^@/,"").replace(/-background$/i,"")}-gradient`;return r in e?{type:"gradient",internal:r}:!1}var fY=function(){var e=this,r=e._self._c;return r("div",{staticClass:"yo-sidebar-fields"},[e._l(e.Styler.style.errors,function(n){return r("p",{key:n,staticClass:"uk-text-danger"},[e._v(e._s(e.$t("Error: %error%",{error:n})))])}),e._v(" "),e._l(e.fields,function(n){return r("div",{directives:[{name:"show",rawName:"v-show",value:e.evaluate(n.show),expression:"evaluate(field.show)"}],key:n.name},[n.label?r("h3",{staticClass:"yo-sidebar-subheading"},[e._v(e._s(e.$t(n.label)))]):e._e(),e._v(" "),r("div",{staticClass:"uk-flex uk-flex-middle yo-style yo-margin-xsmall uk-visible-toggle",attrs:{tabindex:"-1"}},[r("div",{directives:[{name:"show",rawName:"v-show",value:e.Styler.isCustomized(n),expression:"Styler.isCustomized(field)"}],staticClass:"yo-style-reset",on:{click:function(a){return e.reset(n)}}}),e._v(" "),r("div",{staticClass:"uk-width-expand uk-text-truncate uk-text-capitalize"},[r("span",{attrs:{title:n.name,"uk-tooltip":"delay: 1000; pos: top-left"}},[e._v(e._s(e.label(n)))]),e._v(" "),e.style.isComputed(n)?r("span",{staticClass:"yo-style-label uk-invisible-hover",attrs:{title:e.$t("Auto-calculated"),"uk-tooltip":"delay: 1000"}},[e._v("A")]):e._e()]),e._v(" "),r("div",{staticClass:"uk-width-auto"},[r(n.component,{tag:"component",attrs:{values:e.vals,field:n},on:{change:e.change}})],1)]),e._v(" "),n.divider?r("hr"):e._e()])})],2)},dY=[],hY=Q(lY,fY,dY,!1),pY=hY.exports;const mY={__name:"StylerSection",props:{panel:Object},setup(t){const{i18n:e}=oe,r=st("Styler"),{trigger:n}=Me({editComponent(o,c){n("openPanel",{component:pY,width:350,title:c.replaceAll("-"," "),name:"styleFields",props:{component:c}})},editFonts(){n("openPanel",{component:sY,width:350,title:"Google Fonts",name:"FontFields"})},closePanel(o,c,d,{name:p}={}){p!=="styler"&&(r.isTest=!1)}});function a(o,c=!1){return wi(o,({general:d=!1})=>d===c)}return{__sfc:!0,i18n:e,Styler:r,trigger:n,filterComponents:a,vConfirm:cn,download:ki,isEmpty:An}}};var vY=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"yo-sidebar-fields"},[r("div",{staticClass:"uk-margin-small"},[r("a",{staticClass:"uk-select",attrs:{href:""},on:{click:function(a){return a.preventDefault(),n.trigger("selectStyle")}}},[e._v(e._s(n.Styler.find(n.Styler.style.id).name))])]),e._v(" "),r("div",[r("label",[r("input",{directives:[{name:"model",rawName:"v-model",value:n.Styler.isTest,expression:"Styler.isTest"}],staticClass:"uk-checkbox",attrs:{type:"checkbox"},domProps:{checked:Array.isArray(n.Styler.isTest)?e._i(n.Styler.isTest,null)>-1:n.Styler.isTest},on:{change:function(a){var o=n.Styler.isTest,c=a.target,d=!!c.checked;if(Array.isArray(o)){var p=null,v=e._i(o,p);c.checked?v<0&&e.$set(n.Styler,"isTest",o.concat([p])):v>-1&&e.$set(n.Styler,"isTest",o.slice(0,v).concat(o.slice(v+1)))}else e.$set(n.Styler,"isTest",d)}}}),e._v(` `+e._s(n.i18n.t("Preview all UI components"))+` `)])])]),e._v(" "),e._l(n.Styler.style.errors,function(a){return r("p",{key:a,staticClass:"uk-text-danger"},[e._v(e._s(n.i18n.t("Error: %error%",{error:a})))])}),e._v(" "),r("h3",{staticClass:"yo-sidebar-subheading"},[e._v(e._s(n.i18n.t("General")))]),e._v(" "),n.isEmpty(n.Styler.style.components)?e._e():r("ul",{staticClass:"uk-nav uk-nav-default yo-sidebar-marginless uk-text-capitalize yo-nav-iconnav"},[e._l(n.filterComponents(n.Styler.style.components,!0),function({name:a},o){return r("li",{key:o,on:{mouseenter:function(c){return n.trigger("hoverComponent",[c,o])}}},[r("a",{attrs:{href:""},on:{click:function(c){return c.preventDefault(),n.trigger("editComponent",[o])}}},[e._v(e._s(a))]),e._v(" "),n.Styler.isCustomizedComponent(o)?r("div",{staticClass:"yo-style-reset",on:{click:function(c){return n.Styler.resetComponent(o)}}}):e._e()])}),e._v(" "),n.Styler.style.hasFonts?r("li",[r("a",{attrs:{href:""},on:{click:function(a){return a.preventDefault(),n.trigger("editFonts")}}},[e._v(e._s("Google Fonts"))])]):e._e()],2),e._v(" "),r("h3",{staticClass:"yo-sidebar-subheading"},[e._v(e._s(n.i18n.t("Components")))]),e._v(" "),r("ul",{staticClass:"uk-nav uk-nav-default yo-sidebar-marginless uk-text-capitalize yo-nav-iconnav"},e._l(n.filterComponents(n.Styler.style.components),function({name:a},o){return r("li",{key:o,on:{mouseenter:function(c){return n.trigger("hoverComponent",[c,o])}}},[r("a",{attrs:{href:""},on:{click:function(c){return c.preventDefault(),n.trigger("editComponent",[o])}}},[e._v(e._s(a))]),e._v(" "),n.Styler.isCustomizedComponent(o)?r("div",{staticClass:"yo-style-reset",on:{click:function(c){return n.Styler.resetComponent(o)}}}):e._e()])}),0),e._v(" "),r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-button uk-button-default uk-width-1-1 uk-margin-top",attrs:{disabled:!n.Styler.isCustomized(),type:"button"},on:{click:n.Styler.reset}},[e._v(e._s(n.i18n.t("Reset to defaults")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-default uk-width-1-1 uk-margin-top",attrs:{disabled:!n.Styler.isCustomized()&&!n.Styler.style.substyle,type:"button"},on:{click:function(a){return n.download("style.less",n.Styler.lessString)}}},[e._v(e._s(n.i18n.t("Download Less")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-default uk-width-1-1 uk-margin-top",attrs:{type:"button"},on:{click:function(a){return n.trigger("recompileStyle")}}},[e._v(e._s(n.i18n.t("Recompile style")))])],2)},gY=[],_Y=Q(mY,vY,gY,!1),bY=_Y.exports;const yY={__name:"Styles",emits:["select"],setup(t,{emit:e}){const r="styler.styles.filter",{i18n:n}=oe,a=st("Styler"),o=Be(wt[r]?JSON.parse(wt[r]):d()),c=Ae(()=>a.styles.filter(b=>Object.entries(o.value).every(([C,T])=>T?C==="style"?T===!0?!b.substyle:b.name?.startsWith(T):b[C]===T||b[C].includes(T):!0)).sort(({style:b},{style:C})=>b.localeCompare(C)));gt(o,b=>wt[r]=JSON.stringify(b),{deep:!0});function d(){return{style:"",background:"",color:"",type:""}}function p({id:b}){e("select",b)}function v(b){let C=[];for(const T of a.styles)(b!=="style"||!T.substyle)&&(C=C.concat(T[b==="style"?"name":b]));return new Set(C.filter(Boolean).sort())}return{__sfc:!0,storageKey:r,i18n:n,Styler:a,emit:e,filter:o,filtered:c,reset:d,select:p,options:v,api:ue,set:mt}}};var kY=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% Style |||| %smart_count% Styles",n.filtered.length)))])]),e._v(" "),r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.filter.style,expression:"filter.style"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.filter,"style",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All styles")))]),e._v(" "),r("option",{domProps:{value:!0}},[e._v(e._s(n.i18n.t("Main styles")))]),e._v(" "),e._l(n.options("style"),function(a){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(a))])})],2)]),e._v(" "),r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.filter.background,expression:"filter.background"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.filter,"background",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All backgrounds")))]),e._v(" "),e._l(n.options("background"),function(a){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(a))])})],2)]),e._v(" "),r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.filter.color,expression:"filter.color"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.filter,"color",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All colors")))]),e._v(" "),e._l(n.options("color"),function(a){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(a))])})],2)]),e._v(" "),r("div",[r("select",{directives:[{name:"model",rawName:"v-model",value:n.filter.type,expression:"filter.type"}],staticClass:"uk-select uk-form-width-medium",on:{change:function(a){var o=Array.prototype.filter.call(a.target.options,function(c){return c.selected}).map(function(c){var d="_value"in c?c._value:c.value;return d});e.$set(n.filter,"type",a.target.multiple?o:o[0])}}},[r("option",{attrs:{value:""}},[e._v(e._s(n.i18n.t("All types")))]),e._v(" "),e._l(n.options("type"),function(a){return r("option",{key:a,domProps:{value:a}},[e._v(e._s(a))])})],2)]),e._v(" "),r("div",[r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button",disabled:!Object.values(n.filter).some(Boolean)},on:{click:function(a){n.filter=n.reset()}}},[e._v(e._s(n.i18n.t("Reset")))])])])])]),e._v(" "),r("div",{staticClass:"yo-finder-body uk-margin-top",attrs:{"uk-overflow-auto":""}},[r("ul",{staticClass:"uk-grid-medium uk-grid-match uk-child-width-1-2 uk-child-width-1-3@s",attrs:{"uk-grid":""}},e._l(n.filtered,function(a){return r("li",{key:a.name},[r("a",{staticClass:"uk-panel uk-inline uk-box-shadow-medium uk-box-shadow-hover-large uk-transition-toggle",attrs:{href:""},on:{click:function(o){return o.preventDefault(),n.select(a)}}},[r("img",{attrs:{loading:"lazy",src:a.preview||`${n.api.config.assets}/images/style-library-placeholder.png`,width:"1200",height:"900",alt:""},on:{error:function(o){return n.set(a,"preview",`${n.api.config.assets}/images/style-library-placeholder.png`)}}}),e._v(" "),r("div",{staticClass:"uk-label yo-label uk-position-top-right uk-position-small uk-transition-fade"},[e._v(e._s(a.name))])])])}),0)])])},EY=[],TY=Q(yY,kY,EY,!1),CY=TY.exports;const wY={__name:"StyleModal",props:{id:{type:String,required:!0},customization:{type:Object,required:!0},edit:{type:Boolean,default:!1},library:{type:Object,required:!0}},emits:["resolve"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,a=Be(r.customization.name),o=Ae(()=>n.t("Customization")),c=Ae(()=>!!Wl(r.library.styles,({name:d},p)=>a.value===d&&r.id!==p));return{__sfc:!0,i18n:n,emit:e,props:r,newName:a,title:o,exists:c}}};var SY=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("form",{on:{submit:function(a){return a.preventDefault(),n.emit("resolve",{...e.customization,name:n.newName})}}},[r("div",{staticClass:"uk-modal-header"},[r("h2",{staticClass:"uk-modal-title"},[e._v(e._s(n.i18n.t(e.edit?"Rename %type%":"Save %type%",{type:n.title})))])]),e._v(" "),r("div",{staticClass:"uk-modal-body uk-form-stacked"},[r("label",{staticClass:"uk-form-label",attrs:{for:"form-style-save-name"}},[e._v(e._s(n.i18n.t("Name")))]),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:n.newName,expression:"newName"}],staticClass:"uk-input",attrs:{id:"form-style-save-name",placeholder:n.i18n.t("Customization Name"),type:"text",required:"",autofocus:""},domProps:{value:n.newName},on:{input:function(a){a.target.composing||(n.newName=a.target.value)}}}),e._v(" "),r("p",{directives:[{name:"show",rawName:"v-show",value:n.exists,expression:"exists"}],staticClass:"uk-text-muted uk-margin-small"},[e._v(e._s(n.i18n.t('"%name%" already exists in the library, it will be overwritten when saving.',{name:n.newName})))])]),e._v(" "),r("div",{staticClass:"uk-modal-footer uk-text-right"},[r("button",{staticClass:"uk-button uk-button-text uk-modal-close uk-margin-small-right",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Cancel")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-primary",attrs:{disabled:!n.newName}},[e._v(e._s(n.i18n.t("Save")))])])])},xY=[],AY=Q(wY,SY,xY,!1),OY=AY.exports;const NY={__name:"StyleLibrary",props:{styles:{type:Array}},emits:["select"],setup(t,{emit:e}){const r=t,{i18n:n}=oe,{trigger:a}=Me(),o=st("Styler"),c=st("Library"),d=Be(null),p=Be(""),v=Ae(()=>Object.entries(c.styles).filter(([,{name:x}])=>da(x,p.value)).sort(([,x],[,S])=>x.name.localeCompare(S.name,void 0,{numeric:!0})));function b(x){return pa(r.styles,{id:x})?.name||x}function C(x){e("select",x)}function T(x){return x.style===o.style.id&&Gl(o.less,x.less)}function A(x){ki(`${x.name||"style"}.json`,JSON.stringify(x))}function F(){ki("styles.json",JSON.stringify(Object.values(c.styles)))}async function G(x){if(Array.isArray(x)){for(const P in x)await G(x[P]);return}if(!x.name||!x.style)throw new Error("Invalid style.");const S=c.findStyle(x.name);S&&!window.confirm(n.t("%name% already exists. Do you want to replace it?",x))||(await a("saveStyle",[x,S],!0),Ut(`Style '${x.name}' uploaded successfully.`,"success"))}function j(x){return x?new Date(x).toLocaleString():n.t("-")}async function O(x){const S=x.currentTarget.files||x.dataTransfer?.files||[];for(const P of S)try{await G(await wl(P))}catch{Ut(`Error loading style '${P.name}'`,"danger")}d.value.value=""}return{__sfc:!0,i18n:n,trigger:a,Styler:o,Library:c,emit:e,props:r,input:d,search:p,styleList:v,getStyleName:b,select:C,isCurrentStyle:T,exportStyle:A,exportStyles:F,importStyle:G,formatDate:j,upload:O,DragOver:tf,vConfirm:cn}}};var PY=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r(n.DragOver,{on:{drop:n.upload}},[r("div",{staticClass:"yo-modal-subheader uk-grid-small uk-child-width-auto uk-flex-between uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("h2",{staticClass:"uk-modal-title uk-margin-remove"},[e._v(e._s(n.i18n.t("%smart_count% Style |||| %smart_count% Styles",n.styleList.length)))])]),e._v(" "),r("div",[r("div",{staticClass:"yo-finder-search"},[r("div",{staticClass:"uk-search uk-search-medium"},[r("span",{attrs:{"uk-search-icon":""}}),e._v(" "),r("input",{directives:[{name:"model",rawName:"v-model",value:n.search,expression:"search"}],staticClass:"uk-search-input",attrs:{type:"search",autofocus:""},domProps:{value:n.search},on:{input:function(a){a.target.composing||(n.search=a.target.value)}}})])])])])]),e._v(" "),r("div",[r("div",{staticClass:"uk-grid-small uk-child-width-auto uk-flex-middle",attrs:{"uk-grid":""}},[r("div",[r("button",{directives:[{name:"show",rawName:"v-show",value:n.styleList.length,expression:"styleList.length"}],staticClass:"uk-button uk-button-default",attrs:{type:"button"},on:{click:function(a){return a.preventDefault(),n.exportStyles.apply(null,arguments)}}},[e._v(e._s(n.i18n.t("Download All")))])]),e._v(" "),r("div",[r("div",{attrs:{"uk-form-custom":""}},[r("input",{ref:"input",attrs:{accept:"application/json",type:"file",name:"files[]",multiple:"multiple"},on:{change:n.upload}}),e._v(" "),r("button",{staticClass:"uk-button uk-button-default",attrs:{type:"button"}},[e._v(e._s(n.i18n.t("Upload Style")))])])]),e._v(" "),r("div",[r("button",{staticClass:"uk-button uk-button-primary uk-margin-small-left",attrs:{type:"button"},on:{click:function(a){return n.Library.saveStyle({style:n.Styler.style.id,less:n.Styler.less})}}},[e._v(e._s(n.i18n.t("Save Style")))])])])])]),e._v(" "),n.styleList.length?r("div",{staticClass:"yo-finder-body uk-margin-top",attrs:{"uk-overflow-auto":""}},[r("table",{staticClass:"uk-table uk-table-divider uk-table-small uk-table-hover"},[r("thead",[r("tr",[r("th",{staticClass:"uk-table-expand"},[e._v(e._s(n.i18n.t("Name")))]),e._v(" "),r("th",{staticClass:"uk-width-medium uk-text-center"},[e._v(e._s(n.i18n.t("Current Style")))]),e._v(" "),r("th",{staticClass:"uk-width-medium"},[e._v(e._s(n.i18n.t("Base Style")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink uk-text-nowrap"},[e._v(e._s(n.i18n.t("Last Modified")))]),e._v(" "),r("th",{staticClass:"uk-table-shrink"})])]),e._v(" "),r("tbody",e._l(n.styleList,function([a,o]){return r("tr",{key:a,staticClass:"uk-visible-toggle",attrs:{tabindex:"-1"}},[r("td",{staticClass:"uk-table-link"},[r("a",{staticClass:"uk-link-heading uk-modal-close",attrs:{href:""},on:{click:function(c){return c.preventDefault(),n.select(o)}}},[e._v(e._s(o.name))])]),e._v(" "),r("td",{staticClass:"uk-text-center"},[n.isCurrentStyle(o)?r("span",{staticClass:"uk-text-success",attrs:{"uk-icon":"check"}}):r("span",[e._v("\u2013")])]),e._v(" "),r("td",[e._v(e._s(n.getStyleName(o.style)))]),e._v(" "),r("td",{staticClass:"uk-text-nowrap"},[r("time",{attrs:{datetime:o.modified}},[e._v(e._s(n.formatDate(o.modified)))])]),e._v(" "),r("td",[r("ul",{staticClass:"uk-iconnav uk-flex-nowrap uk-invisible-hover"},[r("li",[r("button",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Rename"),type:"button","uk-icon":"pencil","uk-tooltip":"delay: 500"},on:{click:function(c){return n.Library.editStyle(o,a)}}})]),e._v(" "),r("li",[r("button",{staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Download"),type:"button","uk-icon":"download","uk-tooltip":"delay: 500"},on:{click:function(c){return n.exportStyle(o)}}})]),e._v(" "),r("li",[r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-icon-link uk-preserve-width",attrs:{title:n.i18n.t("Delete"),type:"button","uk-icon":"trash","uk-tooltip":"delay: 500"},on:{click:function(c){return n.Library.deleteStyle(o,a)}}})])])])])}),0)])]):r("p",{staticClass:"uk-h1 uk-text-muted uk-text-center"},[e._v(e._s(n.i18n.t("No style found.")))])])},IY=[],LY=Q(NY,PY,IY,!1),RY=LY.exports;const DY={__name:"StylesModal",props:{styler:{type:Object,required:!0},library:{type:Object,required:!0}},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me(),a=st("Modal");br("Styler",e.styler),br("Library",e.library);const o=Ae(()=>{const c=n("stylesModalTabs");return[{name:r.t("styles"),component:CY},{name:r.t("my styles"),component:RY},...c||[]]});return{__sfc:!0,i18n:r,trigger:n,Modal:a,props:e,tabs:o,Switcher:ls}}};var MY=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r(n.Switcher,{attrs:{tabs:n.tabs.map(({name:a})=>a),storage:"styler.library.tab"},scopedSlots:e._u([e._l(n.tabs,function(a){return{key:a.name,fn:function(){return[r("div",{key:a.name,staticClass:"uk-modal-body"},[r(a.component,{tag:"component",on:{select:n.Modal.resolve}})],1)]},proxy:!0}})],null,!0)})],1)},$Y=[],FY=Q(DY,MY,$Y,!1),BY=FY.exports,HY={name:"StylerLibrary",inject:["Config","Styler"],data:()=>({styles:{}}),methods:{saveStyle(t,e=wo()){return this.$trigger("editStyle",[t,e],!0)},editStyle(t,e){return this.$trigger("editStyle",[t,e,!0],!0)},async deleteStyle(t,e){return await this.$trigger("deleteStyle",[e],!0),this.$delete(this.styles,e),t},findStyle(t){return Wl(this.styles,{name:t})}},events:{async selectStyle(){const{style:t}=this.Styler;let e=await Dt(BY,{styler:this.Styler,library:this},{container:!0});if(e){if(_t(e)){if(this.Config.dirty&&t.isEdited&&!confirm(this.$t("Do you really want to replace the current style?")))return;this.$set(this.Config.values,"less",{...e.less})}else e={style:e};this.Styler.setStyle(e.style)}},async editStyle(t,e,r,n){const a=kr({},e,{modified:new Date().toISOString()});if(e=await Dt(OY,{id:r,customization:a,edit:n,library:this},{width:"2xlarge"}),!e)return e;const o=this.findStyle(e.name);return o&&r!==o&&await this.deleteStyle(this.styles[o],o),this.$trigger("saveStyle",[e,r],!0)},saveStyle(t,e,r){return this.$set(this.styles,r,e),e}}};let vE=0;class gE{constructor(e){Im(this,Rp);Im(this,Dp);this.messages=new Map,this.worker=typeof e=="string"?new Worker(e):e,this.worker.addEventListener("message",({data:r})=>{this.messages.has(r?.id)&&(this.messages.get(r.id)(r),this.messages.delete(r.id))})}postMessage(e){return new Promise((r,n)=>{this.messages.set(vE,({error:a,result:o})=>a?n(a):r(o)),this.worker.postMessage([vE++,e])})}terminate(){this.worker.terminate()}}Rp=new WeakMap,Dp=new WeakMap;const Pp={};let _E,Ip;function UY(t,e={}){const{config:r}=e,{trigger:n}=Me();return sn(`Style (${t})`,{setup:()=>({id:t,style:t.split(":")[0]||"",substyle:t.split(":")[1]||"",toLessString(a){return WY({...this.substyleValues,...a},this.groups)},isComputed({name:a,internal:o}){return this.variables[a].computed||o&&this.variables[o].computed},async parseVariables(){const{variables:a={},errors:o=[]}=await this.execute("vars");this.errors=o,this.variables=a},compile:_E=D8(async function(){this.loading=!0,this.isEdited=!0,n({name:"compileStyle",origin:this},[!0]);const{css:a,variables:o={},errors:c=[]}=await this.execute("css");this.css=a,this.variables=o,this.errors=c,this.rtl=null,this.loading=!1,n({name:"compileStyle",origin:this},[!1])},150),async compileRtl(){return this.rtl?this.rtl:this.rtl=(await this.executeImmediate("rtl")).rtl},minify(){return this.executeImmediate("minify")},async execute(a,o=!0){this.errors=[];const c=await this.load();if(!c)return{errors:[`Unable to load style (${this.style}).`]};let{less:d,custom_less:p}=r.values;return this.substyle&&(d={...d,"@internal-style":this.substyle}),o&&Ip?.terminate(),await Si.call("styler.executeCommand",v=>{const b=new gE(ue.styler.worker);return Ip=o?b:Ip,b.postMessage({cmd:a,data:v})},kr({},{cmd:a,style:c,input:p,vars:d}))},async executeImmediate(a){_E.flush();const[o,{css:c}]=await Promise.all([this.load(),this.css&&!this.loading?{css:this.css}:this.execute("css",!1)]);return o?new gE(ue.styler.worker).postMessage({cmd:a,data:{style:o,css:c}}):{errors:[`Unable to load style (${this.style}).`]}},load(a){const{id:o,style:c}=this;if(o)return(a||!(c in Pp))&&(Pp[c]=Ue(ue.styler.route).query({id:c}).get().json(({imports:d,vars:p,desturl:v,filename:b})=>({id:o,imports:d,vars:p,filename:b,desturl:v,filepath:b.replace(/[^/]+$/,"")})).catch(()=>console.error(`Unable to load style (${c}).`))),Pp[c]}}),state:()=>({css:null,rtl:null,isEdited:!1,variables:{},errors:[]}),getters:{groups(){return jY(this.variables)},components(){const a={};for(const o of Object.keys(this.groups))a[o]=ue.styler.components[o]??{name:o};return a},values(){return zl(this.variables,"value")},substyleValues(){return zl(wi(this.variables,"style"),"value")},fonts(){return this.values["@internal-fonts"]},styleFonts(){return this.variables["@internal-fonts"]?.original||""},hasFonts(){return!!this.fonts}}})}function jY(t){const{ignore:e,components:r}=ue.styler,n=zl(r,({groups:o={}})=>ma(o,(c,d)=>({group:c,name:d}))),a=[];for(const[o,{file:c}]of Object.entries(t)){if(cc(o,e))continue;const d=GY(o,r)??c,p=c8(n[d],({group:b})=>cc(o,b)),v=oY.findIndex(b=>o.match(new RegExp(`-${b}-`)));a.push({name:o,component:d,index:p,group:~p?n[d][p].name:"",state:v,notGlobal:d!=="global",notTheme:d!=="theme",isInternal:o.startsWith("@internal-")})}return Ci(Yl(a,["notGlobal","notTheme","component","isInternal","index","state","name"]).map(o=>ql(o,["name","component","group"])),"component")}function WY(t,e){const r=Dl(e,(a,o,c)=>{if(c.startsWith("_"))return a;const d=Dl(e[c],(p,{name:v})=>(v in t&&(p+=`${v}: ${t[v]}; `,delete t[v]),p),"");return a+(d?`// // ${zY(c)} // ${d} `:"")},""),n=Dl(t,(a,o,c)=>`${a}${c}: ${t[c]}; `,"");return`${n?`${n} `:""}${r}`}function GY(t,e){for(const[r,{groups:n}]of Object.entries(e))if(cc(t,n))return r}function zY(t){return t.replace(/(?:^|[-_/])(\w)/g,(e,r)=>r?r.toUpperCase():"")}const fc=sn("Styler",{state:()=>({isTest:!1}),setup(){const t=Oi();return{config:t,state:null,styles:[],init(e){this.styles=qY(e)},find(e){return pa(this.styles,{id:e})||{}},isCustomized({name:e,internal:r}={}){const{less:n}=t.values;return e?e in n||r&&r in n:!An(n)},isCustomizedComponent(e){return!!this.style.groups[e]?.some(r=>this.isCustomized(r))},resetComponent(e){for(const r of this.style.groups[e])this.remove(r.name),this.remove(r.internal)},reset(){mt(t.values,"less",{}),t.dirty=!0},set(e,r){mt(t.values.less,e,r),t.dirty=!0},remove(e){Zi(t.values.less,e),t.dirty=!0},setStyle(e){mt(t.values,"style",e),t.change(e,{name:"style"})},compile(){return this.style.compile()},rtl(){return this.style.compileRtl()},minify(){return this.style.minify()}}},getters:{style({config:t}){const e=t.values.style||"";return this.state?.id!==e&&(this.state?.$dispose(),this.state=UY(e,{config:t})(),this.state.parseVariables()),this.state},less({config:t}){return t.values.less},lessInput({config:t}){const{style:e,less:r,custom_less:n}=t.values;return JSON.stringify({style:e,less:r,custom_less:n})},lessString({config:t,style:e}){return e.toLessString(t.values.less)}}});function qY(t){return t.reduce((e,r)=>e.concat([{...r,style:r.id}],ma(r.styles,(n,a)=>({...n,id:`${r.id}:${a}`,name:`${r.name} - ${n.name}`,style:r.id,substyle:a}))),[])}const YY={__name:"Errors",setup(t){const e=fc(),r=Be(null),n=()=>document.getElementById("custom_less")?.prepend(r.value);return Me({openPanel:()=>Tn(n),compileStyle:n}),{__sfc:!0,Styler:e,el:r,inject:n}}};var KY=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{ref:"el"},e._l(n.Styler.style.errors,function(a){return r("p",{key:a,staticClass:"uk-text-danger"},[e._v(e._s(e.$t("Error: %error%",{error:a})))])}),0)},XY=[],VY=Q(YY,KY,XY,!1),QY=VY.exports;const Lp="styler/library";var JY={extends:HY,created(){Ue(Lp).get().json(t=>{this.styles=t}).catch(()=>{this.styles={}})},events:{saveStyle(t,e,r){return Ue(Lp).post({id:r,style:e})},deleteStyle(t,e){return Ue(Lp).query({id:e}).delete()}}};function ZY(){const t=zt(),e=fc(),r=tK();Ga(a);let n;hf(async()=>{if(t.document){if(!e.isTest){a();return}try{const o=await eK(r.value,t.document);n??=t.document.body,t.document.body.replaceWith(o)}catch{a()}}});function a(){n&&(t.document.body.replaceWith(n),n=null)}}async function eK(t,e){const r=await Ue(bE(`${t.replaceAll(" ","-")||"index"}.html`)).get().text(),n=e.createElement("body"),a=e.createElement("link");return a.rel="stylesheet",a.href=bE("tests.css"),n.prepend(a),n.append(e.createRange().createContextualFragment(r)),n.classList.add("uk-animation-fade"),n.addEventListener("click",o=>{o.target.closest("a[href]")&&o.preventDefault()}),n}function bE(t){return`${ue.customizer.base}/packages/styler/tests/${t}`}function tK(){const t=Be("");return Me({openPanel(e,{name:r,title:n}){r==="styleFields"&&n!=="global"&&(t.value=n)},closePanel(){t.value=""}}),t}var rK={extends:bY,models:{Library:JY},created(){Xq(),ZY()}},nK={init({extend:t}){t({components:{styler:rK}})},setup(){const t="theme/styles",e=fc(),r=zt(),{trigger:n}=Me({readyPreview(){a()},compileStyle(p,v){r.overlay=v,v||a()},async saveConfig(){e.style.isEdited&&await c()},async recompileStyle(p,v=!0){!e.style.id||!await e.style.load(v)||(await e.compile(),await c(),await a())}});Ue(t).get().json(p=>{e.init(p)}),br("Styler",e),gt(()=>e.lessInput,()=>e.compile()),Gt(function(){new oe({parent:this,extends:QY}).$mount(),ue.styler.update&&setTimeout(()=>n("recompileStyle",!1),250)});async function a(){!e.style.css||!r.document||ue.customizer.id&&ue.customizer.id!==r.data.id||o(r.document,r.document.dir==="rtl"?await e.rtl():e.style.css)}function o(p,v){const b=p?.getElementById("theme-style");if(!(!b||!v))if(b.tagName==="STYLE")b.textContent=v;else{const C=p.createElement("style");C.id=b.id,C.textContent=v,b.replaceWith(C)}}async function c(){if(!e.style.errors.length)try{const{css:p,rtl:v}=await e.minify();e.style.isEdited=!1,await d(ue.styler.route,{"css/theme.css":p,"css/theme.rtl.css":v})}catch(p){console.error(p),e.style.isEdited=!0}}function d(p,v){const b=new Blob([Cl(JSON.stringify(v))],{type:"text/plain"});return Ue(p).formData({files:b}).post().json()}}},iK={setup(){const t=zt(),e=Be(!1);Me({openPanel(n,{name:a}){e.value=a==="cookie"},closePanel(){e.value=!1}});let r;hf(function n(){const a=t.window?.$theme?.cookie;r?.remove(),!(!e.value||!a)&&(ue.customizer.id&&ue.customizer.id!==t.data.id||(r=(a.position==="top"?ke.prepend:ke.append)(t.document.body,a.template),ke.once(r,"hidden",()=>setTimeout(n,250))))})}},aK="yootheme/pro",sK="4.5.33",oK="YOOtheme",uK="A powerful, flexible and elegant website builder that allows you to create complex pages within minutes and customize every aspect of the theme.",lK="https://yootheme.com",cK="Copyright (C) YOOtheme GmbH",fK="GNU General Public License",dK=[{name:"YOOtheme",email:"info@yootheme.com",homepage:"https://yootheme.com"}],hK={php:">=7.4","symfony/polyfill-php80":"~1.33.0","symfony/polyfill-php81":"~1.33.0","symfony/polyfill-php82":"~1.33.0","symfony/polyfill-php83":"~1.33.0","symfony/polyfill-php84":"~1.33.0","wikimedia/composer-merge-plugin":"~2.1.0"},pK={"exclude-from-classmap":["vendor/nikic/","vendor/php-http/","vendor/wikimedia/"]},mK={"platform-check":!1,"prepend-autoloader":!1,"allow-plugins":{"wikimedia/composer-merge-plugin":!0}},vK={"pre-autoload-dump":"YOOtheme\\Composer\\ClassmapPlugin::preAutoloadDump",loadfont:"YOOtheme\\Composer\\LoadFontCommand",phpstan:"php -dxdebug.mode=off ./scripts/vendor/bin/phpstan --memory-limit=1G"},gK={"merge-plugin":{require:"packages/*/composer.json","merge-extra":!0,"merge-extra-deep":!0}},_K={name:aK,version:sK,title:oK,description:uK,homepage:lK,copyright:cK,license:fK,authors:dK,require:hK,autoload:pK,config:mK,scripts:vK,extra:gK};const bK={__name:"changelog",setup(t){const{i18n:e}=oe,r={Added:"success",Removed:"warning",Deprecated:"warning",Fixed:"danger",Security:"danger"},n=Be("");Gt(async()=>{const{base:o,version:c}=ue.customizer;await un.js(`${o}/vendor/assets/marked/lib/marked.umd.js`),n.value=await a(await Ue(`${o}/CHANGELOG.md`).query({version:c}).get().text())});async function a(o){let c;const d={list({items:p}){return`<ul class="uk-list">${p.map(v=>this.listitem(v)).join("")}</ul>`},listitem(p){return`<li class="uk-flex uk-flex-top"> <span class="uk-label uk-label-${r[c]} uk-margin-right uk-text-center uk-width-small tm-label-changelog uk-flex-none">${c}</span> <div>${this.text(p)}</div> </li>`},heading({text:p,depth:v}){return p=p.replace(/\(.*?\)/,'<span class="uk-text-muted">$&</span>'),v===2?`<h${v}>${p}</h${v}>`:(v===3&&(c=p),"")}};return new window.marked.Marked({renderer:d}).parse(o,{async:!0,mangle:!1,headerIds:!1})}return{__sfc:!0,i18n:e,labels:r,changelog:n,parse:a}}};var yK=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("div",{staticClass:"uk-modal-header"},[r("h3",{staticClass:"uk-modal-title"},[e._v(e._s(n.i18n.t("Changelog")))])]),e._v(" "),r("div",{staticClass:"uk-modal-body",attrs:{"uk-overflow-auto":""},domProps:{innerHTML:e._s(n.changelog)}})])},kK=[],EK=Q(bK,yK,kK,!1),TK=EK.exports;const CK={__name:"news",setup(t){const e=Be({}),r=Be("");return Gt(async()=>{const{base:n,version:a}=ue.customizer;await un.js(`${n}/vendor/assets/marked/lib/marked.umd.js`);const o=await Ue(`${n}/NEWS.md`).query({version:a}).get().text(),[,c,d]=o.match(/(\{.*?})(.*)/ms);e.value=JSON.parse(c),r.value=await window.marked.marked.parse(d.trim(),{async:!0,mangle:!1,headerIds:!1})}),{__sfc:!0,attributes:e,news:r}}};var wK=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("img",{attrs:{src:n.attributes.image,width:"1200",height:"600",alt:""}}),e._v(" "),r("div",{staticClass:"uk-modal-body uk-text-large"},[r("div",{domProps:{innerHTML:e._s(n.news)}})])])},SK=[],xK=Q(CK,wK,SK,!1),yE=xK.exports;const AK={__name:"about",props:{panel:{type:Object},data:{type:Object,default:()=>_K}},setup(t){const e=t,{i18n:r}=oe;function n(){ha(TK,{},{width:"xlarge"})}function a(){ha(yE,{},{width:"xlarge"})}return{__sfc:!0,i18n:r,props:e,openChangelog:n,openNews:a}}};var OK=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("p",[e._v(` `+e._s(n.props.data.title)),r("br"),e._v(` `+e._s(n.i18n.t("Version %version%",n.props.data))+` `)]),e._v(" "),r("p",[e._v(e._s(n.props.data.copyright))]),e._v(" "),r("p",[r("a",{attrs:{href:n.props.data.homepage,target:"_blank"}},[e._v(e._s(n.props.data.homepage))])]),e._v(" "),r("button",{staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:n.openNews}},[e._v(e._s(n.i18n.t("What's New")))]),e._v(" "),r("button",{staticClass:"uk-button uk-button-default uk-width-1-1 uk-margin-top",attrs:{type:"button"},on:{click:n.openChangelog}},[e._v(e._s(n.i18n.t("Changelog")))])])},NK=[],PK=Q(AK,OK,NK,!1),IK=PK.exports;const{hostname:LK}=window.location,RK={extends:Ze,inject:["Config"],methods:{async importConfig(t){this.Config.dirty=!0,this.Config.values=await Ue("import").post({config:t}).json(),this.Config.reload()},exportConfig(t){ki(`yootheme-${LK}.json`,JSON.stringify({...t,yootheme_apikey:void 0})+` `)},async uploadFile({currentTarget:t,dataTransfer:e}){const[r]=t.files||e?.files||[];if(r)try{await this.importConfig(await wl(r))}catch{Ut(`Error loading '${r.name}'`,"danger")}}}};var DK=function(){var e=this,r=e._self._c;return r("div",[r("button",{staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"},on:{click:function(n){return e.exportConfig(e.Config.values)}}},[e._v(e._s(e.$t("Export Settings")))]),e._v(" "),r("div",{staticClass:"uk-margin-small-top uk-display-block",attrs:{"uk-form-custom":""}},[r("input",{attrs:{accept:"application/json",type:"file",name:"files[]"},on:{change:function(n){e.uploadFile(n),n.target.value=""}}}),e._v(" "),r("button",{staticClass:"uk-button uk-button-default uk-width-1-1",attrs:{type:"button"}},[e._v(e._s(e.$t("Import Settings")))])])])},MK=[],$K=Q(RK,DK,MK,!1),FK=$K.exports;const BK={__name:"systemcheck",props:{panel:Object},setup(t){const{i18n:e}=oe,r=Be(!1),n=Be([]),a=Be([]);return Ue("systemcheck").get().json(o=>{n.value=o.requirements,a.value=o.recommendations,r.value=!0}),{__sfc:!0,i18n:e,loaded:r,requirements:n,recommendations:a}}};var HK=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return n.loaded?r("div",[!n.requirements.length&&!n.recommendations.length?r("p",[r("span",{staticClass:"uk-text-success",attrs:{"uk-icon":"check"}}),e._v(" "),r("strong",[e._v(e._s(n.i18n.t("No critical issues found.")))]),e._v(` `+e._s(n.i18n.t("YOOtheme Pro is fully operational and ready to take off."))+` `)]):!n.requirements.length&&n.recommendations.length?r("p",[r("span",{staticClass:"uk-text-success",attrs:{"uk-icon":"check"}}),e._v(" "),r("strong",[e._v(e._s(n.i18n.t("No critical issues found.")))]),e._v(` `+e._s(n.i18n.t("YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance."))+` `)]):n.requirements.length?r("p",[r("span",{staticClass:"uk-text-danger",attrs:{"uk-icon":"warning"}}),e._v(" "),r("strong",[e._v(e._s(n.i18n.t("Critical issues detected.")))]),e._v(` `+e._s(n.i18n.t("YOOtheme Pro is not operational. All critical issues need to be fixed."))+` `)]):e._e(),e._v(" "),n.requirements.length?r("h3",{staticClass:"yo-sidebar-subheading"},[e._v(e._s(n.i18n.t("Critical Issues")))]):e._e(),e._v(" "),n.requirements.length?r("ul",{staticClass:"uk-list uk-list-disc"},e._l(n.requirements,function(a){return r("li",{key:a,domProps:{innerHTML:e._s(a)}})}),0):e._e(),e._v(" "),n.recommendations.length?r("h3",{staticClass:"yo-sidebar-subheading"},[e._v(e._s(n.i18n.t("Issues and Improvements")))]):e._e(),e._v(" "),n.recommendations.length?r("ul",{staticClass:"uk-list uk-list-disc"},e._l(n.recommendations,function(a){return r("li",{key:a,domProps:{innerHTML:e._s(a)}})}),0):e._e()]):e._e()},UK=[],jK=Q(BK,HK,UK,!1),WK=jK.exports,GK={init({extend:t}){t({components:{about:IK,systemcheck:WK}}),Object.assign(Vr.components,{FieldConfig:FK})},setup(){Gt(()=>{ue.customizer.news&&ha(yE,{},{width:"xlarge"})})}};Object.assign(ue,{http:Ue,store:xO,hooks:Si,fields:Vr}),window.$fields=Vr.components;const zK={__name:"HeaderBar",setup(t){const{i18n:e}=oe,{trigger:r}=Me(),n=Oi(),a=Be(!1);async function o(){a.value=!0,await n.save(),a.value=!1}return{__sfc:!0,i18n:e,trigger:r,Config:n,spinner:a,save:o,vConfirm:cn}}};var qK=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("Transition",{attrs:{appear:"","appear-to-class":"uk-animation-fade"}},[r("div",{staticClass:"yo-sidebar-close uk-flex uk-flex-middle"},[r("Transition",{attrs:{"enter-active-class":"uk-animation-fade","leave-active-class":"uk-animation-fade uk-animation-reverse",mode:"out-in"}},[n.Config.dirty?r("span",{staticClass:"uk-flex-1 uk-flex uk-flex-middle uk-animation-fast"},[r("button",{directives:[{name:"confirm",rawName:"v-confirm",value:n.i18n.t("Are you sure?"),expression:"i18n.t('Are you sure?')"}],staticClass:"uk-button uk-button-text uk-button-small uk-margin-auto-right",attrs:{type:"button"},on:{click:n.Config.cancel}},[e._v(e._s(n.i18n.t("Cancel")))]),e._v(" "),n.spinner?r("span",{staticClass:"uk-margin-small-right",attrs:{"uk-spinner":"",ratio:"0.5"}}):e._e(),e._v(" "),r("button",{staticClass:"uk-button uk-button-primary uk-button-small",attrs:{disabled:n.spinner,type:"button"},on:{click:n.save}},[e._v(e._s(n.i18n.t("Save")))])]):r("button",{staticClass:"uk-button uk-button-text uk-button-small uk-animation-fast",attrs:{type:"button"},on:{click:function(a){return n.trigger("close")}}},[e._v(e._s(n.i18n.t("Close")))])])],1)])},YK=[],KK=Q(zK,qK,YK,!1),XK=KK.exports;const VK={__name:"SectionsNav",props:{panel:Object,sections:Array},setup(t){const e=t,{i18n:r}=oe,{trigger:n}=Me();function a(d){n("openPanel",d)}function o(d){d.style.visibility="hidden"}function c(d){setTimeout(()=>{d.style.visibility="",d.classList.add("uk-animation-slide-left-medium")},d.dataset.index*100)}return{__sfc:!0,i18n:r,trigger:n,props:e,openPanel:a,beforeAppear:o,appear:c}}};var QK=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",[r("Transition",{attrs:{appear:"","appear-to-class":"uk-animation-fade"}},[r("h1",{staticClass:"uk-logo yo-sidebar-logo uk-text-center"},[e._v("YOOtheme")])]),e._v(" "),r("TransitionGroup",e._g({staticClass:"uk-nav uk-nav-primary uk-nav-center yo-sidebar-marginless",attrs:{tag:"ul"}},{beforeAppear:n.beforeAppear,appear:n.appear}),e._l(n.props.sections,function(a,o){return r("li",{key:a.name,attrs:{"data-index":o}},[r("a",{attrs:{href:""},on:{click:function(c){return c.preventDefault(),n.openPanel(a.name)}}},[e._v(e._s(n.i18n.t(a.title)))])])}),0)],1)},JK=[],ZK=Q(VK,QK,JK,!1),eX=ZK.exports;const tX={__name:"Customizer",props:{setup:Array},setup(t,{expose:e}){const r=t,{location:n}=window;Me({close:{handler(){n.href=ue.customizer.return},priority:-10},openHelp:(d,p)=>Dt(I9,{help:p},{width:"2xlarge"}),checkCache:()=>Ue("cache").get().json(d=>d.files),clearCache:()=>Ue("cache/clear").post().json()});const a={...ue.customizer.panels,...ue.customizer.sections},o=new URLSearchParams(n.search).get("section");for(const[d,p]of Object.entries(a))p.name=d;const c=a[o]??{name:"rootSection",heading:!1,component:eX,props:{sections:ep(Object.values(ue.customizer.sections),"priority","asc")}};return e(r.setup.reduce((d,p)=>({...d,...p()}),{})),{__sfc:!0,location:n,props:r,panels:a,section:o,root:c,FieldsPanel:Wr,Preview:Fj,PreviewResize:Wj,Sidebar:Zj,HeaderBar:XK}}};var rX=function(){var e=this,r=e._self._c,n=e._self._setupProxy;return r("div",{staticClass:"yo-customizer"},[r(n.Sidebar,{attrs:{root:n.root,panels:n.panels},scopedSlots:e._u([{key:"header",fn:function(){return[r(n.HeaderBar)]},proxy:!0},{key:"panel",fn:function({panel:a}){return[a.component?r(a.component,e._b({tag:"component",attrs:{panel:a}},"component",a.props,!1)):a.name in e.$options.components?r(a.name,e._b({tag:"component",attrs:{panel:a}},"component",a.props,!1)):r(n.FieldsPanel,{attrs:{panel:a,values:e.Config.values},on:{change:e.Config.change}})]}},{key:"footer",fn:function(){return[r(n.PreviewResize)]},proxy:!0}])}),e._v(" "),r(n.Preview)],1)},nX=[],iX=Q(tX,rX,nX,!1),aX=iX.exports;for(const t of[O1,cy,dP,$1])oe.use(t);if(oe.component("fields-panel",Wr),oe.directive("confirm",cn),oe.directive("sortable",zh),window.Vue||(window.Vue=oe),oe.config.devtools){oe.config.productionTip=!1;const t=[/^(hover|leave|status|states).*?(Node|Component)/,/evaluateExpression|prepareFields/];oe.events.log=({name:e,params:r})=>{t.some(n=>e.match(n))||console.log("\u{1F514}",e,...r)},Si.log=function({name:e,options:r}){console.log("\u{1FA9D}",e,this.state.registry[e]?.length??0,r)}}var sX={init(){Object.assign(ue.customizer,{ignore:["custom_less"],panels:kb(ue.customizer.panels,{ASSETS:ue.config.assets})})},setup(){const t=Oi();br("Config",t),Object.defineProperties(ue.config,{apikey:{get:()=>t.values.yootheme_apikey},google_maps_api_key:{get:()=>t.values.google_maps}}),window.addEventListener("beforeunload",r=>{t.dirty&&(r.preventDefault(),r.returnValue="")},!0);const{trigger:e}=Me({saveConfig:[{handler(r,n){return e("replaceImages",n,!0).then(a=>a&&e("loadPreview"),()=>!1)},priority:5},{handler(r,n){return t.dirty=!1,Vh(n)}},{handler(r,n){return Ue("customizer").post({config:n}).res().then(()=>{ue.customizer.config=Vh(n)},a=>{Ut(`Saving failed: ${a.message}`,"danger"),t.dirty=!0})},priority:-10}]});return{Config:t}}};typeof SuppressedError=="function"&&SuppressedError;function oX(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function uX(t){var e=t.charAt(t.length-1),r=parseInt(t,10),n=new Date;switch(e){case"Y":n.setFullYear(n.getFullYear()+r);break;case"M":n.setMonth(n.getMonth()+r);break;case"D":n.setDate(n.getDate()+r);break;case"h":n.setHours(n.getHours()+r);break;case"m":n.setMinutes(n.getMinutes()+r);break;case"s":n.setSeconds(n.getSeconds()+r);break;default:n=new Date(t)}return n}function lX(t){for(var e="",r=0,n=Object.keys(t);r<n.length;r++){var a=n[r];if(/^expires$/i.test(a)){var o=t[a],c=void 0;typeof o=="object"?c=o:(o+=typeof o=="number"?"D":"",c=uX(String(o))),e+=";".concat(a,"=").concat(c.toUTCString())}else/^secure|partitioned$/.test(a)?t[a]&&(e+=";".concat(a)):e+=";".concat(a,"=").concat(t[a])}return oX(t,"path")||(e+=";path=/"),e}function kE(t,e,r,n){r===void 0&&(r=encodeURIComponent),typeof r=="object"&&r!==null&&(n=r,r=encodeURIComponent);var a=lX(n||{}),o=typeof r=="function"?r(e):e,c="".concat(t,"=").concat(o).concat(a);document.cookie=c}function cX(t,e){var r={expires:-1};return kE(t,"a",r)}var fX={init(){const{id:t,cookie:e}=ue.customizer,r=()=>kE(e,t,{expires:"1D"}),n=()=>cX(e);r(),window.addEventListener("pageshow",r),window.addEventListener("pagehide",n),window.addEventListener("beforeunload",()=>{n(),document.addEventListener("focus",r,{capture:!0,once:!0})})}},dX={init({Vue:t}){const{locale:e,locales:r}=ue.config;t.use(fP,{locale:e,messages:r})}},hX={init({Vue:t}){t.prototype.$notify=Ut,t.asset=un,t.prototype.$asset=un,Object.defineProperty(t.prototype,"$modal",{get(){return(e,r={},n={})=>new t({parent:this,extends:Jy,propsData:{component:t.extend(e).extend(n),props:r}}).$mount()}}),Object.defineProperty(t.prototype,"$dropdown",{get(){return(e,r={},n={})=>new t({parent:this,extends:iv,propsData:{component:t.extend(e).extend(n),props:r}}).$mount()}}),Me({prepareFields({origin:e}){const{builder:r,node:n}=e;if(!r||!n){const a=EE(e);a&&Object.assign(e,{builder:a.builder,node:a.node})}}})}};const EE=t=>{if(t.panel?.component?.name==="BuilderPanel")return t;if(t.$parent)return EE(t.$parent)};var pX={setup(){const t=Oi(),e=zt(),{history:r,location:n}=window;let a=0,o="";Gt(()=>{const c=new URLSearchParams(n.search),{site:d,admin:p,user_id:v}=ue.customizer;e.load({url:c.get("site")??d,query:{user_id:v,admin:p,config:t.values}})}),Me({readyPreview({origin:c},{window:d,document:p,$preview:v}){const b=v.url;if(b!==o){const C=new URL(n);C.searchParams.set("site",b),r.replaceState(null,"",C),a=0}o=b,p.scrollingElement.scrollTop=a,ke.on(d,"click",C=>requestAnimationFrame(()=>ke.trigger(c.$el,C))),ke.on(d,"scroll",()=>a=p.scrollingElement.scrollTop)}})}},mX={init({Vue:t,extend:e}){t.use(SO);const r=yO();r.use(({store:n,options:a})=>a.setup?.call(n,n)),e({pinia:r})}};Object.assign(ue.store,{useConfigStore:Oi,useBuilderStore:Ho,usePreviewStore:zt});var vX={init(){Object.assign(ue,{uikit:{notify:Ut,openDropdown:ds,openModal:ha,promptDropdown:Io,promptModal:Dt,...ue.uikit}})}};const gX=[dX,vX,mX,fX,sX,pX,hX,iK,GK,nK,zq,Oz,YG,Qz],dc={Vue:oe,app:oe.extend(aX),extend:t=>dc.app=dc.app.extend(t)};async function _X({plugins:t=[]}){const e=[];for(const r of[...gX,...t])r.init&&await r.init(dc),r.setup&&e.push(r.setup),r.hooks&&uk(r.hooks);return await Si.call("app.init",({app:r})=>new r({propsData:{setup:e}}),dc)}var bX={init(){ue.customizer.ignore.push("bootstrap")},setup(){const t=Oi(),e=fc();gt(()=>t.values.bootstrap,()=>e.compile()),uk({before:{"styler.executeCommand":({style:r})=>{if(r&&!t.values.bootstrap)for(const n in r.imports)n.includes("/bootstrap")&&(r.imports[n]="// empty")}}})}},yX={init({Vue:t}){Ue.addons.push({beforeRequest(e){const[r,n=""]=e._url.split("?",2);return/^(https?:)?\//.test(r)?e:e.url(ue.config.route,!0).query({p:r,templateStyle:ue.customizer.id}).query(n).headers({"X-XSRF-Token":ue.config.csrf})}}),t.url.options.root=ue.config.url}},kX={setup(){Me({openMediaPicker(t,e){return Dt(Qy,e,{container:!0})},openFilePicker(t,e){return Dt(Qy,{type:"",photos:!1,...e},{container:!0})},openLinkPicker(t,e){return Dt(P1,e,{container:!0})}})}},EX={init(){const{tinyMCE:t}=window;t&&(t.activeEditor||={windowManager:{close(){}}})}},TX={init(){nr.mixin({props:{expand:Boolean},data:{expand:!1},update:{write({max:t}){this.expand&&ke.css(this.$el,"height",t)},events:["resize"]}},"overflowAuto")}};const CX=[pW,a$,kW,xW,nG,HG,yX,TX,EX,kX,bX];document.addEventListener("DOMContentLoaded",async()=>{(await _X({plugins:CX})).$mount("#customizer")})})(UIkit.util,UIkit); theme-joomla/assets/images/favicon.png000064400000007407151666572120014052 0ustar00�PNG IHDR``�w8tEXtSoftwareAdobe ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS6 (Windows)" xmpMM:InstanceID="xmp.iid:123FC8EA6F9311E68B85F57BB6AC93EA" xmpMM:DocumentID="xmp.did:123FC8EB6F9311E68B85F57BB6AC93EA"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:123FC8E86F9311E68B85F57BB6AC93EA" stRef:documentID="xmp.did:123FC8E96F9311E68B85F57BB6AC93EA"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>l%^{IDATx��] �UU>e�1AE��?hP�RQ)��Q@E�5�c�UR-��2��Za�2�Qt��ZJ�&�04E��A�aB`D������x��}��s�9��;����s�9�~�=�����ttt���Nz�!(���!���i��ɇ�r�:z4?m������Ӛ��ɀ�-?�.�@φ�=VpdW� ��te�K_ߕ��\ϓ�!�ߟ��E����D���O���=<�G�BCo{� �cq�5t�����b@>[�Jy�u�=�L��dd�$\~���� ��2.�@��Q���@BSA�\�b��W9f���)(.��P��� a���^�n��FK�S��ޖ��` |��@j�07�r�I���V���?�3,;Z����q�<�S���sT���vkgB�:�� ������Î���-�|��s��eԍ����b'�� �u{�)���_n����N��L����4��S�|�a��A�$��%�����8I�&/@�8�Ayng$����q��k����� xU�̤��n1qc<A����ڒ$[A�p?;py����EЛ���\ꡗ��饖� �0� �#����R3Ə��?��C��`�`�%ॄ;'�O 3��@��1$��KA<��ٗ� u�"e�� �M��L��~��i�����A���:l}���R~3⍍A-���2���*�/]���e�ɝx��K��e�'��[� �� %�G��e� �g� �� ���sۑ �9�r�K�%SD�sy� ��9��� t.���G�UB'��R���� z�ɻju��J� �4�g��h#i��� N�>n���*;�~}n �/� �t(.?����u�5,�~������@8�]�VG�'x�a���J�&Գ3�Fm 3\��[�߯�KCލX7�ys �aWsc�'�#ȩF�K��x�uiϧD&@�# ��.e�+��Y�z��NtF�ѥmJ�o�����3�����{�����Q\i����Y� <GoW�7b_B��u'��!�A��h30fh��W:$ț|����;\�@*1x� �uH���� ����˷)�y�/%��$|�����)�5��2a���<�<[�vM�I����� �t�#���]H���� �Y�v� ���7Z� �N�w���$���e��5�TvӅ���#an��_LcJ�۸B�Ӛ$���v8%@�j.��6HJ/4�D�!r��!&$,1��d��Rw� �������{ �H�7 �)�E!���iBBhb $0P<�D$|K7��(?�n*" ���%"�n��a�J���g����r�Ix�0`��H�>z�`��/ L��(4�XH��$��]&s\yVe7v�J@Dru�� ��6$�a1ɂ}�@�"�m��m�� ��0�� #���"!��� ����b��.ݑ q��k��I(�,n^��D`�(h�#攜<�Ϲ�}l�H ��< ]��g9 �&��ٸ��x����U�m����,�g�o*����{�Fl����g���1�� <�fd�A%%!�J╋a� �$0t Hh7!���*|J�RvG!�瞵��Z�zVѺ <�0�=��o��YԖP|�-��F��=�h���-A|W-�'����"F�K"��|�$�� ��3L�~�$t��wE�GНU�&��0�0�B�l|��/CYC|$<aX^�k��j���$�?�,Lǀ�ݗ�� ��� � o��w�����S�厸�l�A�U���s��q�t��+:��à�.[�`�^�6oM��WZ�ө� ��V������09̵%R՝?��=���3�#��rE�c"��!���WZ_g�ѡ���"�d1�hI��P��ѕ�tG�T�.Wp�_w�����W�;���o>��������<@��ͺ����Ӥ�����xg��w�K7t��8���?,5��""��`��2;�c>_����`:�|Je��sAR�SS~ �@� ����>�=߃��.bc�tnSf�1x��r�� �om� �f�$�"h�ʞ���G�8�����G p/c��i���r��,�-}���N��E�u�L�t�Sn�CrD̷p+������ҷ���G���tH�R����Y胋-:�Bx��D���%�����H�I;��d M����-�1m<���C�N��S�/5���{�F��=�� ����=�������E��A]Pu��Ɍ &��xN���K/T钏0*������Y��� �4Ȩ *n4A��c �I)�R�� M��=��@���x�� ]"�F��K�k ��i��r�� ~U�2m�f^��q�_:��+�x=�a�w�`ɣ����~KBu~5���W�m�@'v��vxI#��cҏ�K�� �<�u��B���b�)�NzOuT!S�_��=i&�ۍ�;��m���2���O������kF�k�"a������ȩ:v$��\Hx��Q��[������A�d��*}R��[��Z�yA�)KA�SiC q��rq��� %k8k��!�AB�+܌��RYĴ���K��@��"$pi_5�kK+���Zb���_����/ �HŦ�O���rZT�EVJ�X��ct;�(�B�XPK�EE<Ze�����N Z��b8w�/6��F��O�;1���憆풄�N�B1b�'`c��z�K�t��'�=el�|>�Sg�Dܹ��yZ��F����5�Oʗ���@�'�V��͊�QIEND�B`�theme-joomla/assets/images/apple-touch-icon.png000064400000045407151666572120015576 0ustar00�PNG IHDR��Ũ�� pHYs�� OiCCPPhotoshop ICC profilexڝSgTS�=���BK���KoR RB���&*! J�!��Q�EEȠ�����Q,� ��!��������{�kּ�����>�����H3Q5��B������.@� $p�d!s�#�~<<+"��x��M��0���B�\���t�8K�@z�B�@F���&S�`�cb�P-`'������{[�!�� e�Dh;��V�EX0fK�9�-0IWfH�����0Q��){`�##x��F�W<�+��*x��<�$9E�[-qWW.(�I+6aa�@.�y�2�4�������x����6��_-��"bb��ϫp@�t~�,/��;�m��%�h^�u��f�@����W�p�~<<E���������J�B[a�W}�g�_�W�l�~<�����$�2]�G�����L�ϒ �b��G�����"�Ib�X*�Qq�D���2�"�B�)�%�d��,�>�5�j>{�-�]c�K'Xt���o��(�h���w��?�G�%�fI�q^D$.Tʳ?�D��*�A�,����`6�B$��BB d�r`)��B(�Ͱ*`/�@4�Qh��p.�U�=p�a��(�� A�a!ڈb�X#����!�H�$ ɈQ"K�5H1R�T UH�=r9�\F��;�2����G1���Q=��C��7�F��dt1�����r�=�6��Ыhڏ>C�0��3�l0.��B�8, �c˱"����V����cϱw�E� 6wB aAHXLXN�H� $4� 7 �Q�'"��K�&���b21�XH,#��/{�C�7$�C2'��I��T��F�nR#�,��4H#���dk�9�, +ȅ����3��!�[ �b@q��S�(R�jJ��4�e�2AU��Rݨ�T5�ZB���R�Q��4u�9̓IK�����hh�i��t�ݕN��W���G���w ��Ljg(�gw��L�Ӌ�T071���oUX*�*|�� �J�&�*/T����ުU�U�T��^S}�FU3S� Ԗ�U��P�SSg�;���g�oT?�~Y��Y�L�OC�Q��_�� c�x,!k ��u�5�&���|v*�����=���9C3J3W�R�f?�q��tN �(���~���)�)�4L�1e\k����X�H�Q�G�6����E�Y��A�J'\'Gg����S�Sݧ �M=:��.�k���Dw�n��^��Lo��y��}/�T�m���GX�$��<�5qo</���QC]�@C�a�a�ᄑ��<��F�F�i�\�$�m�mƣ&&!&KM�M�RM��)�;L;L���͢�֙5�=1�2��כ߷`ZxZ,����eI��Z�Yn�Z9Y�XUZ]�F���%ֻ�����N�N���gð�ɶ�����ۮ�m�}agbg�Ů��}�}��= ���Z~s�r:V:ޚΜ�?}���/gX���3��)�i�S��Ggg�s�K��.�>.���Ƚ�Jt�q]�z�������ۯ�6�i�ܟ�4�)�Y3s���C�Q��?��0k߬~OCO�g��#/c/�W�װ��w��a�>�>r��>�<7�2�Y_�7��ȷ�O�o�_��C#�d�z����%g��A�[��z|!��?:�e����A���AA�����!h�쐭!��Α�i�P~���a�a��~'���W�?�p�X�1�5w��Cs�D�D�Dޛg1O9�-J5*>�.j<�7�4�?�.fY��X�XIlK9.*�6nl�������{�/�]py�����.,:�@L�N8��A*��%�w%� y��g"/�6ш�C\*N�H*Mz�쑼5y$�3�,幄'���L Lݛ:��v m2=:�1����qB�!M��g�g�fvˬe����n��/��k���Y- �B��TZ(�*�geWf�͉�9���+��̳�ې7����ᒶ��KW-X潬j9�<qy� �+�V�<���*m�O��W��~�&zMk�^�ʂ��k�U �}����]OX/Yߵa���>������(�x��oʿ�ܔ���Ĺd�f�f���-�[����n �ڴ �V��E�/��(ۻ��C���<��e����;?T�T�T�T6��ݵa�n��{��4���[���>ɾ�UUM�f�e�I���?�����m]�Nmq����#����=TR��+�G�����w- 6 U����#pDy�� � :�v�{���vg/jB��F�S��[b[�O�>����z�G��4<YyJ�T�i��ӓg�ό���}~.��`ۢ�{�c��jo�t��E���;�;�\�t���W�W��:_m�t�<���Oǻ�����\k��z��{f���7���y���՞9=ݽ�zo�����~r'��˻�w'O�_�@�A�C݇�?[�����j�w����G�������C���ˆ ��8>99�?r��C�d�&����ˮ/~�����јѡ�m|�����������x31^�V��w�w��O�| (�h���SЧ�������c3-� cHRMz%������u0�`:�o�_�F@2IDATx�b�O ��@ @S ��������3�����Ӕ�CΜ�|�$��ނӈ��?7:���Ŕ�Þp����9WtDh�/�}��Rp���c1��b����LU���>�}�4#3D.���,�p��;����z}�*���%AD8�!l��+�+�pqQH�0��* �7��� ��Uo+��:g�S�Δw�c������÷�Oq)�z&������ffda``Xy�僠 �����'La``��`���!`J����zN�|?ř����A��%�_��Ϛ��3�%�+�e��{:��'��3L�^��/��s��$dJФs��|�0��;�����s~�ڱ"��ٛ�|T��f������fO�$h�W�r���8�C���)P#�e�000|p���)A��R-CФs��.@����3�z�c�����;}�ϙyXLq�>��?����3�Zۄ)���1,�L�Ն����.�h]�ѦcHL]9#t��%�M��b�j������Zd��8bb���!|�:�p���.�hw��"�o�D�+g���Y�I��b���Xw���D(~ ��W~_��݈�C�g^l���]�!g<Uǟ��~���@��G�9Wrn����Z�������{����??"*, e4���k'�o2�o�D�E=�����3�1vW��C��<�VYC5$<e�l㈺-5���'�R����1y��Ȅ̒�8�BG����!���tL \V�:|� �p���n ��n <�M:�l �H �t��v���'H)�l�/_qѹ�T����f{��֘�w "�R���>��4�\Y�feb�� ��iz\,�� ;v#�'�����/�Zbq���x�{�!r� ���-��3�fc"���T��� A��k�30��C�p9H6�1E��F!!�|���b�?8u���R���~��:��S �SB<����2���� �]�v��F�n I��su֏eZ�E3���;�?��h����/v000�{q����/��}���x�2����O��\���9�/���#�x+��fB]�umv{3 '#��i��텣f�Z�U�?wG�ؑ��XM둥X�+!��<Q���#��o��h����ҿvG#%�� O�4��1��3�D�NCI.w֒�oc��������9���Lx���� �~,X��8��O~��f����pn����+y��O��l���{����r���/�J�k��r��Gk��Y��jmEn"B��5�F�FO�W�]9����>}�{}����)-O}�Δ,�4���Y-�����N�Wr~��)��=�bФs�V]9��Ql��5>���y�5T������f���f;b,�j��rK���������z����9��Lw<x�����������f���nO���i��'�z�S����s�`��������Ͽ�I�v^z�,<�\�s��O84�|��Ȳ�� �K�kj�NMス�;-#�&��;��阼3� ��=��v�jF�W�~131".H�[.�����v6��o�10���0���ݱ��;\���Ͽ�������+)H����=,H����V�����a�����_���/�3�����ͻ��d}�����&A&h ؼ܅���qA��Y�[���Gk�C۵���>���[�hMn����&:1 ����]��i����]ۻ2���scK�@y+�����D�n����7ݖ�Udd�QSG�%�0�q����8Ja�L����6������ڻ�,����_�w��'��~��{��__��*�8&�W_�V֓�q�a%`����b�M~��J�9���:��iB��η�^�h�d�TGK� e z��y;�@,G�p�K�ײ=���4�s��r�O����?z<�3����+�i��'��d�1�<����n�5����e���f�ŋ��ߩ=����:XK��L��2-{gT%����@�ă-��/Eq|���g�g�����x�)Eq@�T�l���Si!���m4����>�e-@�|�9Yf�t�G�W3��1�A���e\�3����-|N[��_��K���H@�?��KB7�6�,M�}���&�Kׄ�??Af*6ȶ�q��"�8�Q���C�%H������� 1������ь�4{��&���m1X��@"Z"P�5\{�{��Y��W\M^襸�bd��N> �R���Q���NP��UIgyq��WS�}�Ⱥ����%2��s����V��0EO�(^iL#�[�}Q��!D�� O��)���~��q��*~I���D��,��g�F,qĞ_��>؏���+? ������P�8����Բ1���fm���.��;n��j��L���x�Ġ��,E;hA�Vgz'����gs��k��sv�P�3�K�y�(���[o.\�V��R�� �`�f�Ns��-�sy��La��3�1jY�{)���P�֤��j�<'�W���ɭ��\�'q���]��V�v4 ���tU,�=~�'�a�=�z?���D�w'Һs�f��o��<'���Ͱ��� �P{j��|ߋ�B�u\��=�z=��9mޮ7KP���Жӡ/F����Y�h W[�4S ɓ��-щ��:SZe�Ұ%��Î{�]N1Ӷ�k}�T�,u,e�Ȳ�<�I�a~�ueY�bq�dh$��D�����~J!k/IH�2=h6�M+�Ͱ,l&8@z�8^���u���:��Β$`@�����|Z�{B��~��Y��(Mh/��\�i�� <Nu���rԬ�H2�Y/��툛�DHz�jʻ7���jE�#Eq�ؙ5is%����c��rd��v�y&D��m�G �uU$:���Ya^kY�p��$+��^��V9����s�QQ]i���i�A1��R���6�q�1����41Wa��`�4qلUl ��H�(������:o�{�����8@�����{��w�,y��rßQ�qL��1�c�q�xBe`H���m��'�C��~~�e~�9�1}~�ɿ��L�+a��\��S�Q$d��Ʈ��K�,�r28�$�6O�&^�����j�2���3��ur�PF�� ���%A�(�<0��Mb"Yx���R����K�"�����Cҕ���}w<*�ﻳ*�K�-�}wV%Un�o<���6�{�x��y�6�3�♺���x�����;;L8@c��� G��ܘ�[����K����D�]������gY�e�;K��`��Y��5Ly��x�:�>��e*��'_�#�/��{I>���g���c^O���c���$)O-IA�=�7��)��E��<E���z<��(�K1 �G�o�f;�E�0�*-��_i/���Y�"��T�Tw �x�<-�r��?��+P�c^��$�}1! �L9�X:�Ӏ�� �F������:c��H�=(�E��lrb�EQ��ƱbR$��z,�h��v�^v�^vq�(ڡ�h&;�2y�S����x�:�p��}�c>O1��9���`��4�X�F�mG_t�i�|[�Ǵ���"i��\K��H�<�y?���B�[�=�:��TuA��쭁��`�-�[�)�����,��B����͈�{y:�-�)4O�M��A���x�:��S��"U}̷��z���Ιkʍ=,�i6��?$:�&;fa1f��G�@ͫ���}.n����\�"Ha��|��]����]cn\"�RxiC�����x�[LAc�q,��_$����@Zh ������'� ����1D����Jw��'o�1�J|�+��w*s����EH���f�����b���)ڔ��,[���]����/+ّbD��k�/�p���I�.u���1��:��=�|�% & T�Ѱ���n���~��J��QF�]���o0l�k��+@��L̯m`���X�j���������9�x�j`�4����S��� S��0��t��T��.M�(=��w� ��L,����db~m�m3C���zT�����!��x G�O8�y=�|��*��B�����O��/{�ŊTU �P�w� 6GQ��R0�b[7�����U s�PމT�����y>�e�3����C��4|o��.�=�HA���}�Jeǵ$ <�V�:[�m�����?�P����ǒ9z��3�ǏW6�z@� ��;\�+�/� `b���[�V���=�ϣ�� �<!Q���5�"<�ۼ��{#`- ��� 7"�c����o�Y���j�@X��5�"���ݶ9Q�T�! {�{���nE��G��W��A �i�v��ϩSغ�U[I�^ ���ċ��nS��e���A;��Ê�N�� D"�/G:�S��g�]�91��Q%q!�i�^[���!�4�ER�4>�ʜlg��0*"EA��@��%�F��G��Q8�D��]�f1P%�#��^Å+�_��%��D�ҁ(�ri����3�8z�Ru����p�a�i�G�(F�_�r(D!�2��=�R ˾K��Q���ÇC)F�jb�qX}�,�}��Y��D[�� �++W%V� Y�5��H0���JUA�^��{���%T�$� H�XqӒ���O)(�a���e?UԶ���A�u/�.q�$U�e�q�yj���m��K9��'R�cA����r�~!urBa�u�<K��QoD�,�!8��2�jEBU���4t�P��~�"��o<{EBUX����"#�$7v)��k̍�0��Q��M��5�_-!q|ta��<�Ěc��,_n8�:�_ǖ�ɉ��� p*�47����aox̠��C����O ���rñ;�N��N��&���L:ҹhYox4�0���(w����'��r]$��N�\����f��U�sY��̓G����v\B<�����c�/E�� w�Yc��l2�kcu/[�p7�_6��2� ��2w�Д�+���z����A�3����>k��`[�c&�u]�t�4���?G�5U�o-u��4�R2�f.���w�(�I��R�X��2�v��\��J�� ;w`�먎P�I13exy�z�@D{�RL��p�����b�P�(<��l���`Q�ƪ� �� H.W%+C5/W�~���[e��_5�I��HG�y�^�XM���T��ˬMf(�`r�F�Qu�������� ��Ɏ�dҗ:+�����L��5ПX�TGS1h�'�M C�_�aur��Z�v�ɡS"��G �خZtY��Zs�����FR��&��$�8�qL��1�{gŕ��sk����HL$�ٌ( J&�1�5�y�h�͘%j�Lޘ7�<�L��qG��e4���:&#(n(n 1n8�����k�w��� ]��� ��>]��u��{��zJ�=%������������� &Rٝ�k��}�x��%/<����o���G ���ܾ�-���kՖ"�'_�a+��8�k�g|uy���*�b}� ��s�.�᭒̪���LB���R&�����&(�-�ͷl�|�F���/.-W������iDo�|k����Ƃ?���nPP����[(y�?4�-8�(:Sw@����ԥ5��jww�j�t�hE�%F#U�mIb>#W���ځ�g��_Z�cν0�6�B�*')_�i��J;/��b��F�R\ʽͤd�㲘Hȗ��e8$"Vԗ8u�gj���'���}�yܛ��$�G][5M�N�<M��V�������ǽ{4��q��^�zq��:'C����f�j�����1����S�����5έ@���\���7҈q�V61XfNj3�͍�/6�n��ba��*+�)̗X���K7��4W����ͤ�G\[&������FW�����A�:��F��'����jci�X�Ʋ%R���@6�uW��c3�q��C�.ExJƋ�c�w�*����+�Z٦�PކC�����������?�ؾ��u�\W��톉�c\�Jy��@���O�X�D�����A�Lu��:i\̛f���,f&|�餵�VB8�jȟ\��h��U<���E�o�̄��ۑNZn��BF4������g|��)�K�څ���"�@�!�~��dA��R*l�Z:ډE.N4�䰼���� ����pv�c��>A���~�� �i���]�'J5�Ϛ���v0}'q��� ��fr%�w����%�_�~�(�~ ��)L�t�~�^���/Q�3G��p��aޏ$��nO%��tM$^����t�D�C� f���}��J��-�8_��e��*��l0�����^,!xY��@̓�?�C�H�@����ށE�*"��2ک�<"1�o��$w%�o�ݐx�.˦V�=`ݖL,����e Q�ܭ c�� u�2��2��1��Y$s�}c��B��a��ޝ X&P�"i��V��ũ�HR�f�E�ܵ�b�>*8�p�qH�)9�L� rq ��o�V4R)��6��-��gp�.P�b�ӳ�ʁVkLl������1t9 Qr �U��ܟe[*���e�{� N"f�ip�}�f��m�6vh5���!/]w��^j��K+H��Z�v1z N$f�ip:��@~>��!��g"܁I�cZ�|��G�O�|{�����s:1;�"?�FZی���-��4��A�����k�������]�쩈gE,���lQE!�Fl��+�טS��K�$��8$0�;����IS3>��Ϸݳ���l�x"0E��[�j,/���c�A�(c�z�^J� @шU�r�M�5�!��L�|6q>ؒqP.��8 ������̖ʅ��uZ?�y͘��.���?��T� O��IZ��t$B��;m �]8�GM�S)�s�pjK�"����~�j$^����U,���Ki5��!�ba���B���=�*{�������j�ؙ���prK�bP����/F�B�l ����ň���GeL� V�M�����T#�� e�0iy��)���~0���mP�9@ P��O��ʞ�V�(F�=�G`LJ'V�M*d� ��������N�["e"���ډ��t)v�T� <Y��z �g��l��\�<sA�6)t��'߶c#�����C�Fp��ڈ$R3�D��G�YL 5%n��H�BTU�я/.qh��KH� <~���dH� NJ��;;�L]{��UЇ���T¢"�����J;Dv�����ъ��O�?�#���#z���7���ʆMfA�;)n &��4�~"o#_���Tr�O�|TY��!�6�d ؛%�--3 z/��Gn�Ӡ`h4m�C��;)n)V�(D_l(�����}u�vS�-�@�P36V�5q��+��0Q�@H8|T8v��p��s���G4�^�P����u9�b�v�ȑO:��o��m>r���Ƈ��^�\Yk⑷wЩR]�Jն�?{'���f�h M�T�l���c�%r��б���g_��n,��v�;a(�ږ�����.%�� ��F�P�8��l�yHxy���&>)t䤸% DD"dFNM�w����2�]&M�E�6���7������Zm�`u�8z����v���.G�F$"dDL�u�}�~���:8�]�����=���!���7 ���}t�(�ڄ�E�D1aL߹����u�jXE`t�n����<~^�ߑ=��75u7��V^���a���QS��O`"�G<����, />x���!�|9u#�1��Ww�C�0 �zp<��˙��"L$L��}����w�ߤ);v1r@�kY�;�Z6��1u�u($JmL�a�&�.J}�v�8w]q mo/���fe��ʼn��ݍC��i ]���CG�b>�P����r!�Bf������*+�� ��n���9�?p�s���P�N�+Ȗ�0/_!����>�v`�$�Jv��b����ʱ�Xr�.���!��"A�lU���n�r]���u���]}sG��:uם�oR*��ď�}���������÷�K�0���dE�(�2rL��p��Fx��ߚ��Pv_�-[����aҵj7��q�n������N��7M������'�>;q���Lʞ�K��̌A0f����h0e��%�2G��� E�!D������ �݂c���ܒ���ܪ�ɍ�(���DH��YY������ͩ( h74� �\):�U���>���8Z���W3���$LF'�fe�&<o��!��.�j�m-\��Թ�_��O˺��$7>���Q��9�lq���%�� ⣗����9#z�6�i�H0[� 2����r�Z;��J�Y�rKy����ݜ� ����L�&IT�F���kpZy�r=�9#z���k�����iwA*�ֹ!.��D�X������C:�D1}�ΟT�f��Z(�A�q�{1����Y,J 0Q"V�j`��ߦ�_9%�[F��/�ݫ�z³( ��̈́���S�A��bG�Ҷ)��W�kp<�e杛ԑ0|4s༼G�K{:!�dݼQ�E3�?����q1���{5j�w��~t�����u��������Ϟp\ʹ��jmcS���G��w������_Uv\�iC�gfFM��/���( ����Κ�x���矣�>�Y3�>�����eqǜ�h�N�A��<�sf��� ii�^�ԕa�a�O'�8".Hd��'�.��0��Vۙvio��f�Df�@�Y�|4>Rv#��ܧ���h?p�������vBXA`�y�pb�����1ӇG�yV"J�B��Iq�SB����~[7!6�c���x��un�w�M�}3/y����t^����"H��[4��/�&�G�@�l�SA�}>Xɦ��@8���hAP���/�=�f�щ���cw�&廅i;�Hzgl�}��U^���A�{ݹ��J�߶O�/M��G�ǃÃÃÃÃÃÃÃÃÃ���o��<.�r����9��930,#��j�".�Zf��V�YZ^Mд4�T�~��ҮzKд�-�MAs_WP0�A�a��l���-o��:����̜9�|��=���SΙN9 �SN8�r����p8��)'N9�p� �SN=X8l���r�rqZ���{� v��=_x�JI�k�D���j(Rr�䥐�;�+���M�D�Z2�u�_�r٣G����+��������"u���Ik2c~��i 9?^�tu�̸3�<uo����-M�|(g�k�c�)�R�ŊI��5�,��ń`q{q�(i�tp��?Z���4P���]}� ğ�W��#E�1%����Kc=�E�=�W�]Ĉq�<xF�b#���ˋ�b ����J�k�I�b?;��?S���I&�l��.����G N�*#�7p����#b��炄z�RxVN[ n�j]�'���r&8L�1����R^�w}�JU-��w� BX��rY��Y�//!T}t�PE)�#۪���9 �����;��(Q2b�?v������^�8{{���W��mc1�b�*�!�xp�e�f��>?6$��G�����̥� 1��N�k�S�����~��p��ݸ��lQ�h�� �X�\�4mҕ��j|��7��n1�%*;��݈�ZPm���X r]��|���WWJ0bj�ԪTY�1�D��QrY�7���FBH93_����Q"�I+�U,�����+��k��JY��R��d����w��&��&���r*/9�l��|��b���V��$K�uD��]͎W�/���*�K�+�� �$�85]/� ��S����V�[�r9��s���38���b �'om��H��N��6��5�1 �&f/ؒ� 1�_ �}�:3�����O�6��3=�i�oN��tq^��ru��%���ԏ�푶�@�*?��↮R�i�h����ʉO�ԏ��ӥ��]��۞��YW6��i�^�Y�����jI� (�R��hQ�0�� B#��<�5�Ė��,����5��RJ-r�MS։��U�:�i���>���(�����;� !���m/*�%�OQ�m�*`X-0<` `�b�v��U��h �l��K��g9F����{B��I��e��W��1�`�eg�^*>}/�QzI�e]�L��W͎��[������Y2��<ଦ��vi��G����7*��.��6��;:`�5��#eԜ��� ��+���h�4w�@fܰ'�hS��бn� �k��JVEx8N$%Tm��¿^��Hn�z��n�Ρ�0������ڰ��r0�=�\*��#�'�uw�Fc�j(P���=�uY?.`AC�a5w������i�u`4P��T{qM���c�aX]�s @Oz�����ߦ��,M�S����[�$w��Pi�0Zv�o'��mG R � ��4}�z����ic���A���L�`A&R�B�JS��S;�� �m�k$g�����s0-��{�PD� \�o����X՜�T�Ć6�Q�֨����V�D���J�JJ����87�u@*U�fL����͔Ϋ� �w�f@�=h��M�e1ݨkA)(E�� ����@��J_)Ud�:j"��/�mGWk=�&�x_Ĵp���S������t�AۈP�;_�Ah�J��?�qN�=sz� �23t�Gݷ|����J���:?�H����Ϋ'��"@j�~[B���ejv�+p' /Ҏ�ю�!;/9-=%�U;��vt���m=��l��q�S��j���D$3 �j���㏔��5���:��8lKK��U�x)%�?5������ �y�� !�*�5#�0F���#ا�;!+���~���b}\� 5w�-���c0���q�+�"v��HҎ�f��#�'*R��0�?M�C��\�y�Q9��˪X~PE��D�N;����|�6p roU�L�ԯ��n�����~L������Y]%_�1���(%�l���!Ԓ��XHؽ�0`7?� �\YÃ���sL�^`o�s�t����~TT�p\+�0�y��J�mg?�`_�%$w�->P� ��;f-(��h���:��+B �b1 �k1��d�*��Zz����ڃ�P�$B�ZcB���ܟD�/SRU��oKw��;�c�<�����a�`I�.YVԾ���Hq�ͻ3M#���6*S[���J�*�|�@]4�I�z�5>X�� ��vJA��g;a�.a�^�T�߭,��ۺ��ضf��cW˼�X�aQ�s�b��Aܷ�=88��+�3[���*:aU��ŭCքNRr$���@�%�Jث����܉P����_,�X1�!䦷�\k�j��_��"D%��N�(F���4tm����F�Dպ��6�w�N�?f��EJ�`��^>r'�'�� ��b�[^��i� J��o"�ζj�1��e��{��S/�+���3Ѡ�5ؽ%�7}��h���[�w��i<��NŞ��o����s�mC��-̷�B�^|�>�\?��l]��ؽ��_���ͽS�w��X[j����J��C�k���T� {��J�i+ \����c�>j��c�1���N+��nV8=�z�U�ERD�^A|�$��\?��d�f�1��W���+��[�k�B�[�/������xO ��Ub�0�F��Pmw*tk4� ��=��a���O�=6���ӊly������ �H�!Rn-��w�w��?�)��/�|�(A<_�9A!Ak[����2!-+C6h�vd�b��6��6T�#4 ��c���f�Un��0����s���"c��vp�|�.~�>\�(�h��*��Ŀ���H.�-~�C�z�K�}8q,��;D\ʭH���l6h��Z64 *!W?�Ӈ�~< =�'��hd����T"W�F�����sR�<�A��&`Ó|����}�ޓ [�ڊT`щ��G$�]��`�j��y�8�}ox�Bq�mŚ������� ���i���ؠ�k�/�]�"�q=2~���4��i�Fw�<�eԑG9��h<�y�U��"ث���0h��$Ȧ��*�"��G$���D�%�Ѿ�����I�9��mqˌ�ݭ_�Q� !�zO��%6h T�?�q D� {�/lf=T�;�Ald����n��B!2��@�a�BQ�LJ�ʘQ�� �"�t��R ���Gl�#��Og;ߝ�N|�#e�v�[��!�10�5n��K��q�f�\��ȋ\��*���q�s���<h=��Y?���C��.F��S�L��t @,�\(J�"uت���;8�z|�������اkկ|A�N��zH�vbY�d��`�]f�i�z Hb4l�{���s����m�@�P�����mð���1D0�5���:bu�rD���#X�%��yl�v�[�q������ԺxIQH���8%�h����Ψ5����qx�=gPi�ۨ0����9</�����P�& Z�h��� o!���y�X�.^Zԭ���q�G��|ˌ���K�|�$@�O��Ѝ�g�X7�T��c�0�=_x����Wg̺mqt�B�c�>�9��m+ �V;)���a�8�1(�C�Ȋu�l�V8��Jd�/W����#Y�7���t�ج�#2�{�v�t��!�"�|��'^]�Sh����n:�?rI���'/�NX�9{S�-� �N�{;���~]�XJ � �q ˖��� TN�z�����/��,d0�a�8�X�yI�ˤ�Xdf�MC�giY�#/F���;��<6bu�B��ʿ6�t�kKϮ8�c� � �@�pڍұ+3>I̺U,�#"L�6?��*�8��z����S8\(��s��BǠ�y�b|$��w��l�TlU�`��Y�7���3Z�AD0{���/S��Ɍ)��t���#�Җ�ϱH*��}�i|�Z��>ٜUP*r�i'E{�<$�M����,b�n�i�tj�<^p��h���E��7����_)�4�����f � ��uX�Y<��+2�ȕ�>�i��l:��꒴�rl2Ѱ��� qN�^�����ޜu�ݔI����#��VED�Ĥ�� �<.p\�3o<�g4�-<���WJ�X~�ӭ��f#�lLh�P�Y#8���q�<�h-���5.}�\�LXUn�Q����87{s֝2 �^����!���k�ju3���=��=p(*MJ�}�z�{_B��+%���]�?G!#&��ُ�o�?��{Q��z6�=q@�w�x/ �V8�9VYeT�K�A(�z���fo�*�*���1�:*�>����6cj��;v�ǎ?�pd�4��g�U�|�������b�}�~�uh�Y�+��J��G�Wb�'F���e��ߖ��j\���9�B���]��L"��}��^�{�һ�ޟb8����b��aY�F�����Gƍ������T2�)���~!�� �gc�'i�!���C�P k��ǡ[#[NҲ��8w{��o����cAD�D�O�0�&�SP���p����SQT�e���>�p䕊f�ص �Ж�.ϴ����e,�7xnv�֡mg2�.GC(��5�Q�ϑ�& �Ky9k[Z���i�{�[$������m�n|�O5q��k�<��[xy�ݵ������?�p�bw�N��L%�5A���m�v&��*�0fC �8l[��yF*��g�Ǧ-;pCV �r"��?����CW��a����_�(��2�2�l�2��qB��r�M1�5A�ᳺm��bFׄ�&��q��t�`Dlڒ}7d�0�Q'�d�������q��>ԋ� +�~�h@+<�p��ApӲĞ�!�c���)�Sv�0B#ז:�d�lK+��̷�rd�2���c��g���>*0�&��H����U���02x2�=�p��5�d;#v�䳷�r�&�W��|�Έ%i�ܠ�!@VIx�'Mx�����&Dڱ�l����:!��N�طq�K�uI�Y��erF-;;��_�Zy�~�QJ�qxl��n�$r�D̢��D�����cND!��뢂�z��iYPUۊ�ec��S��]*�t�h��L�fT�X��,z�s��1��?�*�$�¾�5����Y��+3-<5=�BrzA�Uq0D6�5,���KӿJ���]\h�L�b�T�������4}xܙ�)��R��E%};�_7>`�ӾnE7n*�����e��-j۩$�e˼�r�Iz����ҒR�[NI5ϙW�o@Q�Φ�o�9��� ���hI�-��ҡ� ��������0�!�t�����93o��R� A�}�!���6�K����3F.9;".��%�c�?7?���l�Yt4;U ��>�>:(�w���,� ?{>k�1�����YYа��k�Uk�ƌ7>����1���g���� ��'9��0տ7!�HH�M�;�v�~�Pgk�AҮ�E��\w�&B���l���¨b�S5�۔J��Y<�i_W�I�%l4��c�� -3��H�c���v��X��e���~�#)��T���~��Ĭ�X�֢�J���n|��DEIܰ��3��lj���Pd� ir+�l�Dq}�.�q4�x͑\�:�+>,(@x����n��3T��7{�1}C-��w`JT���Ү}u��qO��Ef1zȬ�g��[=���>M��m��aϘ>�� i���@V�~�,�] nؤ^�Q��QhK�^V����R���0C�6��|;��^��n��x�u�<.��2����u$h�c���:6o�*�%�m�A(�*�Xԩ��C۬�jh�����P�Vy?����m������Bj2�-88�4�� �S �U*)�epS/�Nޱ������D�����iߎ�ر�3��9�^=��BEdپ;�Z�~���+�|݂�����UTj��S M��� ]��z�e1*7�B$�J9���;ߺ�K����=���� �h;��o�z�*|.�8>2�5n�ǡ݆�=�np��3a��[�u+���À��(�$!�a��7l��k�u�}k��_xM�AE� `�|�ͼ��� ���dW�����s�Y<���q&%N���Nۧ�l��8�S���U�:.��!m>�h�J�O�fn�����n�����|�_�����=S�S �Yg �Ο�LO�<��c�6��5���w&���#�Q��M���^dڴ�s�l��^/�4�I*��A�3#� ��6�0?..����K��A)�X�������:���Q=G?۔�T+!�B��i�o��S��YL�Vn�3��0��`�2����Y.S&#��.�F�AދG��觷H�갏��`��o��v�z <�b���o߬�`*`T 7DT���\�.�ɛ��#���E8���)|�r��ov��P���hTB�l��?�f?F�� ���1�'���_n�M�K��*���L�~P���$�U˘��k�8k�l�k&�m�89xѫ�z71�BJ��M&�J ��-�D�PI!I-��Z ӡ�~bx� AKF�o��<�Qƽ��a�=v'Nr�x&3�t�����TAQ�ҊB@���J�� �L���#�� ��v�� Ӣy�c��4�4ty���O �298vT�O_i=��'��k�n�fS�o3��a�+�v�9����j������!ܠ?��wq����^�<��=~�~�"�s]�����\�ׯZ摜h���!�{b�n�T60�6��6O���6��vl�m�ѳ�����Gkϐ��m�6p���/��M|��@��^��j"��O�Ӧr������p� �SN8�r����p8��)'N9�p� �SN8�r���`ٺ�@���IEND�B`�theme-joomla/assets/fonts/opensans-0c46a53a.woff2000064400000035660151666572120015524 0ustar00wOF2;�xL;E�D�d�|`?STATZ�z�| � ��p��6$�4 �&��m5옑�������H����#&\����'$'Cp�D�}�N�z�5�Ķt��B�6�,�F�B���T�l�N��� ���t ��rZNX�A�0��p>��bRąMg��C�,�[�M���Y-v��V�l�����q7%�?}�i�A��� S�ܔ�=�#��2�����t�:S�SJw�� P�t�$�R{�Χݓ}x:��C em�� ��(g����k��`���،�)`a ���I��aa`$���Q��L�*�Z������o.����y�&p'���N�(Wz`�g�9`#'ԌT���̅� I�� O: I��wGD�{)�'�ұZZ�f� EØ79�$y,I�����u�;�����A쟐G�����)p�S�(������j�J��L�ޝ��G��F�}��GJ��w���?���.i����I$��Y3cP��W ��&�U��E��(����ܥ3ӂDؕ��\�l�&9�� �;xc0i�⥀� P��|����{�{�Nr`�)������4ސ�Q):�#M��9�+C-�1��r[)���6��cP|����ʎp��|@���lZ�U�n� �N����A����ea��j����j�$��2YK���5�}ρ���]Jl�C�Y��C�(� �/�0#`�j����N��v���|Ba����M��.�����Ï�%)�%f����uO�:���,��n��rb�)"� ""! !���b�Ud�a�U��z��c\uY���<+�IE�{y�}�Q�_�T����Uj� 0��t`�}��X��u`�}��YW���=ҟ�ҟ{����N�vQ�w"����!��Ħtb�A�� h2_��;�G�Yz�@(��.EoN뜢5�(�������-)��"��7 S�o٠�%�T�RC�� m g�n�k�R7���G I]�56qD���M�O��K?p`���1�M�ay=�m�X<��Q�2��R�j�5 4;J����҈(ת�?^�?�]ज़��>��>�1�����v��.s���7�q�0�A~a�}���;v,���Ǎ����~�X�FR���臾hS鍞�n�.�� Ͽ2S�Au�U��T����v��EI�r��ᰞ�7����.}A�RJ�c)j��fo�V���~�O���e|����>*j�D�dO���1ݜ�ma���h��N�N�f5��b��(�=۹m�M���ZX )��r��~��X��j���u���.z�Au��!<���`�V{5Vu�U�Wv�[q�\}��][A-*�(a� ��`��W��,����_*Qr4�(��m�?�Kn�R�U�� ����:7owR^/����S�[:�w���ʑ<X^5�A-��n�D,b���+[!�qJ�9״;�8��q��\��;�鍖��kSĠ�����V���z�^�Zg�X6.k7 �U�-}��2���a���s#����(s����4�Yu�� Gc��:ӌ�~�I7�d%@;k��w����#?���PY x�]���@�^A�f����'-�J,�'�@�;��Ř�z��tdqH���Q7d�}�4�>{��KV�Ly=�����Ĕ#}v���n�C5�L��Wս������\a��_��׳��;��g�"K%k*����7n��F-e�eƓ����U/��W q9��wb{�3g١jv���WOt �M wn3V�)�������LJ�jxRe~DX��k�Cq�eR߁Y��Iq��9�U�8k���Қ�"F�珠IS`��4ЦJ���l���'�����u(��K�+bM�q$Nę�"Q$�ēd��x��BRLJD�#�L%_��'>��q�1�� ʗ���A�F��Or<~�S�!�G7�}���&%��d�1G��ƀ�G{q�Ǥ��k�<z�G�028�xc��qA������4�5��b�pfH�p:�� v\t��kX��������F����2G� 4a� ���\��Yļ������-�� � ���Fv��{��$���A&�xϥ'�G� ��_��ٛ��Y�U;�!F{&4oON>��r"����J��]=��f����4�x�3��b��>��}�� �Vѳ6�'|�5 ���O~I{�>R�d"��z{��P��C9x����A�Pi1�!��&϶f�//��[*Hѥr��wԾuB TX�/���GC�kإ`i�@��ky#_�%A3�mwѽ���J����������n�1�=��E�. ">A������X�[�R�DӴf��0���� ��r�?���V��[q������^ԟ�� 0;g��~+)�l�&�@�^}���pU�w=�l�?�O��Y���� �*c�9��;~@)��F��4X�ed��*�=W�{��4�3�"x#�7PJ*���kH��U�P��*�Ñ( � �OD�=�KQ(����O#��b���'����D,��3BQ�S�a���4�J$I�##�T �f71$��:z�����;��dˢ�Z_�|�A���`�_L��fnNlLtTdDxXh��G� ��rs��23���)�I<.�����!�:-��O!����/R����֗�(�ৃ� ��FΞ�I�q;�E�*q}"v�T�g�Zo�BÖ�iC�ki�B^4�p�/�w�{'�P�'�y�<��_��ip�Ϡ�;�HO̟�7���&0��Krc�$�/�t|�0�<��ز�J����<<�uq�Rl�;('����+΄J�89�ۅc`�㔳����K r"���Ǣ��N���� /^3ښZ�>7�5�7�v+1�SJoǒ.�N4��vR�2qGx��J�`� :���[@t�i��&�<Rl���&>�� �I!e���hSa[��S]��@2�L0��Z�H��=�g�W���/� �K@@�-� Q� �3���h�s��X��0)趁�#;[X�+���9�ȷ�^̤�d�lڭ:�c�6L, D��~G'= }&x#�X�y�Yh�*Ix`ا��Z����v�4zFwSSmJ��J��jS���;=�Ö�9�{�v��t�:ڭN�^/,n�%ٲ<Xl�� �D�ضCš����b���k�i����%�>����Cs��>1�F��~��Т:a�=k��N�>r��儨�����8��3k�j����<�]k���Z�)-�IJ]�}[0��o�W��Oq��$�GZ�^4��F������[冊�I`�|��=#{��,P��Y6<���Â�<�w��7B���u? ';�VǩX�{u�1 �LNcKR�d�/�L0�G��<�tN]�\�����v.y��XDQ' o�f�[h�;�l�G��zg��I��zت�W��s+e>�8zԞnN�b��.�(F)x �Ac�5/�dil�{�K���3Q'�|d�3oR���;/Sh(v�]`B�jY�����;�%G�U;OXL��8 N�e df�����6���'��B͌�y幦5±����_�=:{�cU��.��l��5���� �ߕ,�HJJ�[)\v�شEQ�K�૫0.M����)�K�#P�QoD�����}k�<�I{��d�&�lť6ױ�(�$� ��(@�w�I��au��/�0�G�{��0�b$��lX_��V��ȧ &7�������h�ؔ��)�V{����c ;��)J���xV�=�G%��M^j0e��[�AZ&�N�sn�@N�w��7�w2�(y.ֲ����FӜ/��D�]`0�6Tvs� ǟ��0H{��p!��re����Q�yb�-�D�Ÿ�yK�~/]|,���=�hW�]�4)�ՉL]�S��`�@b�w�c�'EǏ�kB���\���#��B���N�(=jf�7Nn��˕��}-�Z6[2�L�V���<R�؏x�� ?D��BFM�'�I^���jm��C��b�"��j�)&x��#K��f��=:���A��y�3�m��LB�)A//97��K��v.���� �ܔ刚7��ӽѐ��A-#���k@�G�L�<?�ص[Z���9gb�b`����X�� a����%'h�Ikp�p(#���`��<'�(����\��~.�@J��&_��R���AIT�SW� �Բ��g���D�e����Q�9R�ѲF8�ɾa�U�NG�5����~��1A�b����ͷ5PE{>g�Tt�BT+��4T�+�Z���#Wa�֜�e��O[�r���7f�!������a]�C��Ai�9~k�P�q��Y��!�ɩ����^K�:�?��\ ������Z��?(�"�P-7�-3�߅G����ς��t�B甏)� �J�lUn���l9�8��Y��o��2���I�iҦG��[t���۽��!,�7������'�Ȣ'�7*FR�9�O����?�{�����䳗�1��7��v����I(��g�.�{L�!KF<�Yܾ2�J��z� �� KƱ�VcoL�@q2�n4Fs��k�P彁Z��0H�B\5BNk��fr��Q��U5�錅ip��.�vެ8�*�!�~6�4�<0�t��c�6����C��]Wq��6�z���2dS�f�; W�q �`1�i��~sX����R��f�x"*��-nC`���� �eu~�_�5� $2�P1}5��\B_��.��H�G�����9.慢m�y��r2�[)�cΚD���y�A��e��A֓ע!ww0�QS �����1�i�������LP���\]<�O�d��k��N���C��r[�r�����U�xM���X~���T��=t� �̼`r��kz��hC-֦k�{>�\��1�����+�Y:��ɔ���]��،>�7�/�"12R����{�0�V1��pjf� %M5$ h`8��!����=�_b%m�^jDtM���cWX�睹O<�R��*yW��*�U�b�N�H��df���-�j�v/�������?y$�� tC�3frNOG��������Q�y��"���p�Pb�ŽQ*�F[��^�,��@&�1���O��q�P�ߨBHSFhYy �W$5jT���g��)���_=b��Z:�~�r~Ϝ��v�@Z7��=���+�^+�'^���S�l�����J)�g�ZBg}o������xV��5��ZFhK&Rx0�l���?@�i�������<ȏi�s E��I���]���uG0�YPWV$�����x�6f�w�rf��#W7{)�N���@�$�3�t�'��,0��ɇ��ٚ�$B��7�����{�1����{�'K�W�?Cv���d�Z� ���H�r$4H!���Ƴ�Э#�����`l���|:�E�� �K*���)5��߱ ��}�U��*���d�eҼ�a�i錉��l�80tp�[�nZ���{z9�+��F�ʃf�.��y8��(����� �hv�p�;��u�9�o��I<��a��,�*���f�i�b|T*��:�b��TN൵f�!;�`����f9:_�+�DA"W��1��[��%8@�[pϨg�=^ ��X?ed'��桝�,�f�NvY7���sa�i�`��U����@��� ��F�ʡ_��τ�X�q���� A��O�8��(��P�)��9��x�ɔF�%��(0���#)��2q�[� )>$@�H1��t�7��7��u��R@�>a4���Y��.�D�_[1$���S���s�Ӂ�L��vw�KoS߂��^�[�ܻpZ�ϑ��͌#�@d�\Ƚ��m!O���/OޠO�������'�A�$��=���V�����^8IL�� �%� ��X��[}�o+}Z�����ڦ<����n�8hHb]�u�S���T<��RYg��a��2��^�ĉ��P���{��S�Y�+~���*���G��}ρ���Qt����~������VT��b��K��&7����U��7T�k���*�m�,Ð�+D�E���Uy�����V��2T��l t��vQ���[SE�� ��Y��l�]�³߉�v �b��Q��OE)�W��2 ��:q�]�[U�CI����d�_�E�m�"<#J!�&(���_���^R}2u�}0�%m�;��r���L�T��w�mc�U{դ˥�A�5� ^N��Ww��9o�Mcr���>��ʼnN������g�:����I�l��|y�W�c�3۳rO�$t��uV*G7H���k}���;yŃ��eE�6cG�-�%�U&�kzx>ډ���ԓ8�x�2b|�cuxA����%�h3��ф�̱� rpw ��f���d�[���w�� ���+��=%��+#ķ�/�G�g��ۃ|ӻUr5Ě��2�^IM!�P%�X�O���,U��Ik>ֳ��j��,o�0�(00����l3U�T��4 a�� ����+�[d��J7�JZ36j)�5�!� �rJ)Oٷ_>CI�q�A��S��TjX�x�}��+���m�R��}�#c�O#�wN�1�M�"��RMo�X7J�I7�"��I���*�x���;��v�����ϩ��p����dQ��X!=,�����Z�� L��G}���k�Bs��y�Ll�&���N��,r����.��Č�ɜ�����E�yc�� /�uњ���Lw ��BL�o��9q�Pr��k>��I��l\1Y�x�i�5��>zɝ�s� �A���r�'.1�t}e�-.?e0��ph��]�6t8�JR�='>��q�n6"�b0]l�u�#iK�#W� G$��� �� i����\�"�ᦈ�'����7�J9%���͡��`G�mв�m����dG_<�A�~����O�o�x߾����H�����Cl�[�{sqҭ��=�<��ϟd��ߗ����x�6�G�'O�{�pc�(�8�>��{k�M�!�^��!���mQ�]GyL��j� Ҳ�}��GL� ��F`��h���$4��/���մ^ 租!�=�],��Q1��|ק�9NX11��t^�Ä��ZqIŢ���!����犖[2$#�ڤ(/]�q�pN�t,��2���F�m�����g�)�D#f����}>�(2A�'�w���F��L�m�Lb���(9P�IK@��p�@�+��5����� "o�o�9�B��u|�h'���<R��p����`s��]��+�M���T$�t�x��Ѭ}$�hX4y���G��d�Z����Q1H��J͝$H���tp��>8&���x]]H��D4PwκV�Z@�L�Q�~����u�n y��C�l,Q��w�P���H�6[�ST<�9h�?�����a�F{�:;z;���Ξ>�=����Hf85�T���O�Q��6d "~��d�euq��,�9�H7��laEPIF�|:��ޖ|�/y6h�о�I^��)�3C�WI�#�=��Gʺ��EG�^]��� �۫(4���|={�p�Q�/*��64�%2�s�v��c1ś��kB�j#���;��#�&�FG���#��&[P�:��/�K�/2��p�J��v�R^�k�[��R#�SMq���.��o�03bScF���c{��1����g"��26� ����wl���)� G�LPyp�Ԩt%/"(�D��x籾J�V��6��c�b����E��B�dJJ��I"ܫV�����E>����F�E�y�$�VY\$��[+.��N� ����*(e��Fn��۹������k�B�P�]��y��`fs�O�w��S�5@.�P9�)�qG�O /�� ����2�Ze�7R?���C�<%+=��1)2�cL�b�Q��l��b�<�y���/�^�^~zya�f(�V���@l����|��L:Z �WdL,Z��n��.�g�.��/�5�����6��|�*�^#7q��'H��H��Y�����˟��z�6�B����-�J^�AXv@��4��x��ދ��rrrr.���� �L��Q&v������-ҽn_F �J���2u�m.�� �7$.� �Y�n��J+�o����1n^2��i3Uh�A[�w(9pHeƄ�?�1!ޫ�!^V��B�}�Y@�@'�"ܚ�Ժ�%��k� W%[ט��5EE�G`�>���]�"%+���Z������NAEk"B�"�7N 5�(Q�͉���qߌ�Ȁ����dIɀ5���nA�"��?���F����m����?�>��ԃg��x�4��%��;"h���\vBm�Ewԏ��[�Ʃ&��Ӆ��~8�Y�ޏ�"���[wᬯ�ы���P���9�CY��`G���1rXH�]�� �gcy��y���-ևW���)��v�8i��+�{*R~����K� ��8>�J��2 ���������h�:� ��2�J��C��#l}s#���.+ef�Q5S<��A��@u�#Z�[[���l������cGq��R���O����vY�S�É��IL�ϲZ�bV,-W0X����7��3"¨�����d%i�g�>&lw_�!֜ '��&���5�q�T?3"��xC�n�� `չ�؇�^��[�z� z�+�3em��͚{�Νhȹ�"�;i��]_wd�ab�N�m�e�Η:L{Zˢr�l�B�*����j>J�o���W%؏z�S�t�`B��L%�#W:��k$ �<tnzhc?`ښk�.�s)dssߵ�U^�lt)���w�W�ֈ���n-�,m-�.w�Kp#k�w[ᒧ*����t�i=�y��5���s� �柿�E9L������@�]cH:�� �K:��}�k����Ʉ��ltk��'C��Y�Z�6B'<�tx�bd�z�� ���`T�� U�� מ��%����5�� ��<P���×�N�1�=,r!߆w��V�`�qJ������J(�P'I���Ê㚂Q���S�z�Ks���<v|].�W���Z?�z�����F�gҜo�Z� ¼��$��1Cp���CXK�RAC��Ϛdm���A�3a��m��`=�f]�B�Ew�!�r��������N5ʫ?��{K��)t�.���q�*,p�0bۄ�`�+�=��9��(�fr���|ޭ?���;7��yfj&�5л7iT'���b�q�@j��O�+!��2#B��HI��9�·�)�f�X�J3�%$����U�:�'�1C���WVV�e��*�5u2���S���jUwۣܴ�}��$Gg;8&�|����X��<<-�� be|�s��N�Rȕ�'�U��+�H�q��{��',郍�����������pbZ�`Fϧ����BG%�Mי 0�E����ȵh{��&�ܫg�IJV��.�̹k0k��F��Oa&q���u��Nd���{� ]���g!��$�TꏯK�-;�o�HisKY��!���8x����@Jq�=���///߶A�P��� [�娾�I>_���Gr��7��<�k �2n���>��k^|R_� j4*����p4����o:��+@Pڃ�ݾY��Xq� �UG�}J�gS�W�.��+/�|Ц_��ݜv���֘7O����[ �>���)�*�Cm��^�q�Bm�q(N1ۈ�<;xj�ӕŬ1;��J�ל�#��<����)O�HydE�¦U�vU@��B�]�9|�D����Ғ*�)��=���]��L��!&F 1ᐚzI"搠�*���z��,W43N�w@�8�C\������u����\$ڹ�5����D{�mM�ϱ�e`�cmd簪XW�=�F�bABt�P��٤Ӵ��JE(� �EvƂ�z1V�A�� �s�穭���Kt���;�y��zŖ* �L�T2* <@���&�d�@� ׁ��I���Q W���#�#�R��!�#y�Fvƕ��Pu{�1T'�&��������P��8i8/"Y��T)�k�)��pˣ�4�+U�&"elm����J����a����z5�����4մ"�-ؑm����?��Yd{��lj{gt3�X�dZ�<G�C���$E�H��Vq;��T��j�O�������0R�m2b������U��r�̤�7�4F�k�E��uN?F���nS��o#�2<�38�<yi��0�4kDEN�(����_*�C�7���V������j1�]7ld;����}>��|��2Թ��+�� _�H�ȓ\)i��Ƅ \G� .���D?�s��upcԓn�k�נI�1"R�dĭx3B�X����a�� �wH��䞴܇�=\s��+JI����_Cim��s�[����C,juh�j���9��M�o�'~���N����3s}hI6�mɚ@K�M� 5��H�M�G˰����0xˍ�ݾv��e<�"�M��ߗ�;�^_�N�B�HYVF&��MIt�i��>���)j5Y�U"A�7{�I7-�+X"�[����c+C]U�^���{}=횫��ҕ?�Wg�h�b��������a����+Z'�,��z��LybW�H���^��u�x7Lh�Q�-qv�X#:kǡ>0�����V�T��SԨ �jU��jv �@�F���.` ��*WgG�ƹ� ���%�O�B�^ĵ�܆EiS���)z���]���:Ab�9��E�Lr�J���,��(e[��C^�U�$7Y�i������Ԧd٦a��!D���}�� �}�� �?.:kT0T2��N���-��U8���FU�6w��P{�^LB�b��҆�� �4jx�2����t�w���&;uC}-�qLi����T�V��ʾVjj�e��?טGDT,���2I4���^SU���gg���O��j��:��i�����lV;X��c�cpц��I� .�O���7|[m�\� ��җ�5۵L��j���f�@���^�>S��p.'-��*%yM��&�lc�G�j~��Z�\�h-S\��l9���8�6bM0B(�ŷ�T�9A�N��7|��TϩO��$UL������\8��3i�˭�D����[='f3;�i�D(�B�=�6W�ĘC�j0��!��ۆ� cy�[-���|^��Ѷ�ҙW�|���!� ��#��{"-��AK��ܘ�lWx�.�IXvG�p���ӿE:��]���$��.�Oi[����e4��%�J �{��:A|In}� ��6����9���T��3}� �}�k��d��Zp�?K��4�ɑT�*��p�N�H�q�\�j�YC�t�߾J����]��#����/=p@,�ٽ��x4_�& h:J4#Jjr�@['K���Ό��=)D��D�G�ۑ4��k�r��ab�{��N�}���Jzh`Q��UD�ٳ�ʅ�'$����t$Qz��vcH�E�ggM!x1W�����#k�GM�-y�U�p��Z����ź�BN�1�{6I�y�D��7��жZ�)M��+�E�I��f�X�n���i��hޘ�I�&�]�X�؋e:̬4M�Ϗ$:VH�4���͕C+a�vH��h����up��Ǫ���H_ E���L۞����`־��� ^��p��A�*�U���?ú��]J+��*�]��0>�H��u��Ԝ�MΛ����<H�/Q��(!��c�ww<=�Y�&�u��o�`�l���?���o�Xc�W��J<��9�q���7�jR��V�q�U��Mً�4�j&�A)� ��D��� L 5�/7��Kѐ�a�,LƎ��ς�Fo��JF�*]�Ю���ؠ�!�Ta�k�P�o�o9&���P�|=Y7M|��Y ��M�͑��$����Aԭ�Q��h"��!��LM=�N��f����$�E�E�n1�_�X/�AU♽P�xz�w[�����K�.X�6Y���8�B�<������(8=jۀ-��Hz��?t�͎m"ƽp0 u�Ǻ ���M��+�,�����J'9~������s�B�s�EN�(X5�w���w��ru�Vp`�J�Dqx��� &*CQUG I��0<Im���0ۖ���Wc�0�e�J�dsssw��zc��]W�����D����+ �G���x��Ϊ&][�� ����[!����mt�%�V&Q�pٽ �oIIʀK�}���3g�١�,!K&���.��oC�Yl'�na8��q�Q�K8��e��B�y�r���EF�se�n�|p�������-�,*,I,O`?0�e���E�Zn��a5�7x%�a�b�I���D4U-�� #�SW�d�4B�!�Q� �O�������<Ƭazy^�kPH�j��bx��B�GY�o��Ʒ��)@�{�ן���^lZ'E��$�&���M� uXW��q~�rm���cۖ��x~�����:�V�AsrՓH��E�e .�_������5������~C�s4�,�L��%�!lb�RE���I�p�R�W�(B�UCh�7��y�(Lr� ~�`���C�&��=�������R[ s:��k�)��Fׅ�F�*�Щ)�x6��?&�m*o�7j��Bױ��̞���:p8N�<��![�g3�pJ�g�h�A?�Zo?|Jڦ٬�^�њf�D�:���X;k1�!�Rf�=g�ׂ�F� ��g��7��͑[��41IƔ2�0:�ߗ��ğ�v��[����Ϋk�2o��ߚ�����晇�;�6�(�A�� ��i獊D�<b�g =�2r�)�X��6D������,�eڙ2a-da�xխ�����~�%��+���$�B�W�Rd{����e�ܿP*FҠ.�(h�+�;�m���Ы,�L��{�)�⥮D�}��2G�-L�.���AXj�%�RF�.3gA�,[@Ș�n��5�R@�n��fE`�4Vj�KmX��ie��O�}ԩ���a���Φ�v�����@Y��)�'u���ם���e�݀�`�U6���Ej���k�eV1��D|�Nb�C���h����e�|@]��.����1����q&�Ɔ(N��,B��� BP�7Z�ʨI�0k����=ڣ46�1 "����+�Ù@��ѫ�S,s2R�t�!j�R��+�����7pF�>��-��\�5p��b Q+!4>�����@l!j`u ��'��Rh�]��jl�2�ii�DN|S� c��g E�J/�o�G#����V�����݄}p7E?�M�T�dw���w�j����-���{8�� 17���Ͷ�A�rU�W@��-}�8���$-$���SӦ�7b?�X"2]�+�a��Yư�BI�)��`|�+��%�]�{<���<��5�;��L�W RӸ5K�Qi�;�3��fi��D�����sӅ3��S�H\J�B�}� �]�©��F�s�Q���8r�dC�%���G;S����sX8 0��R� 5��ʽj>���� �Y��C0�dʌ9���a`ٰeǞ#g.<1X<�H�Pit���� �LL��ɞH�V�2右�B���T�9PiQ��4�����ȕب���HL��-,��ml��e��!W(Uj�֭;�<z�ܪ�q��;p����"�L���&���O�/�o`hdlbjfn�X(K���'I�D��u��&M���9v�_]x�Ǟ��i�9w�ҕk7J;"�o� U�T�Z�Zu�5hԤY�Vm�u�ԥ[�^}�pЀACD��5f܄IS�ʹCf̚3o�aGu�آ�N8�ֿ�?���+��'���<����"��C�����2_��U��L0������"Mg�z^��@� Gp�Ý��~/vͺU�� �Jتv�F�GG�sy��8���q���l��LHmզ:ER{�D��dPTII��&�Z��r�a)�?�\9�'�X��o�*J�5CNX�21�'X�I�j�p��~Ex�R�#��f�d{��t�,tlRdtM%�AȰo�[���y�Z�V���k �S�`��H��S�4ծ34=5yခ��ݶ��;9�V�J�B�S �|�R�7;s_��b]��$�nu��+���a�i�ޑ�*g���g���������#w�8hDx�k4-/�F�q����}�ӁDŽ�o9~J�T�O����N�\�_�FaU�jSޖ�l�r���G�P�5�2�6�rS�x��N�e��\.���j��ܛ�$0��$�&gj�@=�������b��\P�j����b�>�i�/+edC��5���ٍ�w����x�Q��G����\OR��$�R�j=����z�=%=tx議 u`7Q��$R���Y_H)�`W��R��.�'x���f�6�y�3�����.�4�-��SM��w!��}ɽ��L6�v�4�����I'��!��ڶ���ԥD�^TʑU9�*M+[>���aiX$��u ����{�Lᦦ��ةXI f2B��E5��E�!��O�{�6�v�`\9��ó�]��Iz�(e�����8\�[��`\o��I�����İ�(\1�?�ŷ��7^�E���e|NZ���Sc�Ig���C{s�!g��/u�r�1i*�b� 3=�.a����R���% ����;1�d�n�N��/d>yf<�PZ�#�h��(l2v�}Oh~JI!t������d���cw�(�#�>�;L2�����1��{d�)�T<��KG�'1-�7�h�A�Dhɽ�M��z��&t�ծ蕨 ��C�|rL��D����H�Ej&theme-joomla/assets/fonts/opensans-b18cc9f4.woff2000064400000020744151666572120015616 0ustar00wOF2!�Gd!}j�N�&`?STATZ�@�| � � �:�(6$�L �&�^�B%�W:����(S�T�_�1B�vh��T(D(�X�Xw:iM�, �# KP�?�N�e�W�#C �Nqm�?Ų+�}Q��;G�^�Ev��`ǩ_Gc���[?u���#$������kn;���\�K�� B�B���ES# E,=9��6����E�чQb�" �a"F��`��s�.�W�*T���W�@�߷s�a�7�ͺ��u2��E4�D�.�\������!J�ӹ��#� �&m>����g���0_�8�6���O͕��ds�!ާ��=�"\�����Ta��e[V/T[e�er46¿�\�hU2���f&�ޕX?�}��^��kJ���p����?*E�u�I�<}e该}�n����X� �\:���U�ȀM�����է��ޝFa�~ ���OI+�HC�!��10'd�c66��@l�p`���$�]����m؟�Sw����]p���H�i1����yC7�"�Z.�z���b����f� �� ���ORR��� �� ��V� �F@� m�%�Zf9Z�G�1��ҵ�Ɪd����PSՅl��!a��s�̖ٷ6%������r{�� N����Dž��L� �$�,<����`{z?֔p K2I�h4���[)2iW��� ,���8*�f�5������B�fqU'A�d8� �0���}֟������~�o��������I�㵾�i������6�ZZI5T��|4����h ���F�}4��wwG��ֹ(�.t���(����h3}M+�+�VO�$� ا>k����kv�N�Q;d{l�mD�j��N�!ګ�}���F��r+UR�P�M�(1?�g���\��4�k�oya��}D��?�/���� �9�7�����.��w=+��Ԙ�C%y��P�(W�)�UvdY����Q��8������ǝx\� h�d4���[��Ɗ8��bYC,kXC,���<|]��R�@��}���M5�?���p�.xZk�|��Z��% . n)ťeU)�<�8�K-���&@�5Ժ��8��0K��@/�2�S�8bJ��`�&=���j�2d����>+�V+���ɼ���F��@����4<�}@-vrK���,����G�b��^�����Lm������_ruɫB�Tx����R-p�?[��t�h���.c0g�Z��fά�� d�+�l��d�|i�^��>�Z����R �V�s�\�h�����!B3�܈�|�1�4���Z���N���^8P�['A����P�ilY�u��QÒ�X ��}�+;��;�F+e|�V�f�O]�W�Xfd�a�d��P�I� H�0O?�X���C9��� �z�6�G\��d�B �M �@�Q�5�gUAC;�9�w'�b��ܷ m��X��FE���s�C��9я@ ?�A�h����r��w���� yIg�/OG�&�'����^�/ǟ��(\6z��"ғ�o�,ɕ�o���ʴ,�+;�N��k��C� ��m��~�ſ�m�&KM1�e�%h�F;О�ia��(���8��ۗ�`��?�){b�f3Ċ�Zi�۾��w:�a����3�̔�����u��zb@� �.K=̔?��6�]qcr� ��-��W,ݰ~���ё�A�@_��سp���C{������������ZW���(/+-�P�E�jU�B��+ˑfgeJ���P-���i���O���b�v.v1x�z`>�A|$v�X�g�Zo�B���%T�#�.U�c�C��� ��B�V�+kN��V�E����H�vj�2K�:,��L ��@�z[l�rnj�BA�<�ʱezz˸���)�^�$7�e>��w�.8C��r�7]m�ap�A����:"�p�PTh�o6���_d�<w�5�b��$�R�N�'q9�j%�ecB-_����'>yY|!$�Rx55~m�S�����d�֧�ڻۺ�ǚ�҃�A��S>�@c.sX�~����w ,M`� lН=Z`�����%���$إ��u�B�c<�����i��=�&3��W���?�;u��*�(���;�|��X�=1~J�S'd�x�u SW�7|����*�'������ށ��)��аO��Չ���iG�@l��v�'8�{��j\�9z����&��00J�5���)�U.>�AU���Ee���1W��z��Ӱ���l��� a6�HN��,�-�\��q��C��� us6{bf���2�Cuy�Y��s����(���N�S>����Y�V�|�(���`-b� F��bX��;��H���A*�m�TN[Q�|"I�H�ԏ���(�~�Y�S���>�d!�~B��IP���AV6C�P#�i*��q���v�r=0b;��4����(Ώs���Q����#?��Z� �>jگ ��)�X4�I����(�\EJ�_�A��P�Aݬ��?�|B�o��g��&��#祈_�V7�L�{�@�W/� �BP��Z�SF�Fq���7:̋��V(��zG�{i̽�� �R�i//nNᎶT�B�"�/�jN�����6�q�2nHBp4R��u����QR\�ՌX��שHK(�Ԗ&��UŲ��gK5��6��m���n��G�' -.��z{,��McJJ���f*�ە�Z�E��m�kl�b���V�ql K���ޢ�!���#o�l1m���7�� ˶:��e��9�"7�p�A(AM�Lx�1 R��1���E� 9�8r�a�܌" q`��OC�F�@1�� g�/��$H(�)Bo��n�Q��:R�� a�����f�l��B�|w��Ԑ�� �̜� Q��}��b-�Y�)E��S]���▷O NN�R ���e��i�� n��_�ѭ'B�MHbZ`�Pꨖ���˅0� ��P�\��6eo,t;P˴�U��R^��Z�,�_rSЈW �15Ά��?�%�Y��&̈ q*}�{-O�Tc�ey"�ڮQ�+������;5�jM����1Y!Q�k��b ��O����WeqAU�{��1e\���i乹�EP�����d���)j�*<��2�w�0��/�!l4�Ы�W����M0�թL�LS�*�ܑuE�&���8��I1��4�;/�od~M@i�/}��Q��#����Rn���A��\����v������ ���=�c�R��Ի��qN�"��B��u�T>�`����S��%Ĩ�_�w��>m�z-ZoJқ,JQ\\ �%?��.QZ;���3�z�w���|3'�pEeR��"�����L�o{�w����B���:U���V�R���e�/�}~�.2'��@�t̢o �sN��{f�BR���/x}`��x�g��[+IW��λ$�B�-�֕{�+MV��{U��b�^�0���g���Z� ܿ@-��V"�$��:}��ۯýÛ%�ycC�q �����T5ly)r��i��X5��%E�U�DZ���-^b��U��Q�|�����V���6��"HҼ冰�!�*�+����e ��v\�V �sg����cù<k+R̳m�Z�(r; ixm�x�����{hp*^Ѩ�H� ���f�K2��; Q�̇����/������ЌHL2�ᓡ-7o�{xp�$���O��45�r�0���l^�m� @�$ {h!g��8+���hԻ�� m`q�|����ayTl3���Z���A��V�xK)�x���bX�w�0��͈n�N�+�|�U�ޒV"�L���3WR��g��8�E 5M>��?<8\-G�|D,��A�������`bIȅ<H�9����, ���wz@�A6�&02������?H������r�T$�s�On[��,�4 �8�r�<�����'w9�O/����b��+>��| �F��m8t� �^�{gr����Ӽ{9G�2��d���u��i=,l멐���-�ѺM�ң�����w\ם�����N�<Or>��h]�0��??�q��D����o�s�@%�\���ө�P�$v�8l�mW�mY�tMh�B��d���=WG/�q+w�Z�ڹ�nr���$��L�#[�{���i��g���r�<�ٯ�1�t�h�wSe���Պ���|f�"c�%�G֮�0B��<�_;3\�_u��� �����N^>���lé��v�VJ���r�lD�u�qOC�;�1�[�[Y���p�^����2Ee�B�+���U��g���7h�.wȧ\7�E��8�� d]�:�Z�Th�g�nE����¥�ƒ�r�V�0n��E>��������'tۮ�k��Q���>Ew�ӯΝ�C_g�O,#�@5И���R=Tu�ɋϔ�%���$��x~� :�E+/ˌ�2ze�'�Gwn�ctxN:ٓpФ��2i�����3�V�^�K>V��x��5I����,��%=�;X?�o�+�:���JT��OG���_�e�����~M����Gds֜O��3�$<Y��S�l۵0)%&,,=&)!=>,,%~">)��eVj���S��7_QQ\�(���P4���y��Q���������y�T����7n� ��g'��#�~��̓�q�w�#��/Ǜ�����9�%z�JL;L���1u���Z�;J�̿�ִ�i�u��:0r�rd�t��p�k��5����m��%��e�[� � ���C�����p6NQd ;�w1�EEu�6I����Զ�/��b�Z�ʂ����u_��E�˫�9��B�_�m7���ҷ2% ��`��j{x��=���.+���|ngX��kf/_R��~Xw��K敠S�����u���S�N���^�LKk�/w��|�Meڦ�6��}��aE}�{�tƢ�}��L�U#�\T�O^ْ"s] {�Un���e�F>������?�~���������W�ol��V����J��/�^���V~��!�����2��=����<Z�9%�ea��C�'�E�2�f�fk��#����ظ�44Vc�����/��u�����g�:Yި�4;��4ҊG�<j��òS]^�Dy����7�{E ?�D�������4�٠�HnR{�B��߶��!N��;��%�i���f��A���!�dH�XF1c���`��uW����}����3���<�ܐW��䕯��<�I2�a�� �~R�t����.7q�5���2�4�����Y����ڶe;��g�Ӌ��l���ݎtiVz`�#��7��ڳ{Ӷ��YS��;��ssԻd��I�ڹ|�w>GiS%����4e���\�z9�Lk���a��k`�ڭ�w�c��Y9M�����l��!�)HH����#=Pt����l�X�P���6�Hz�q�����b!>����7{/`���¼�h&�S�xps��0�᪱��A0�Ɗ9������ZA%�3�(R8����$�p���#M��r�=V���r��X�w�kW����c���]8���N.���:���@�j s��l�a;0<'��0�oi�S��S2Bˮ:�`z^����6�h3C�:���<mN!��]9� �l�<b2|�/�a&�� ��~c�� �9����B�+y8��f������u��kv�a�o�e���RK8��C�� ��;���(�Z�v~f��a�,�3�7[��w?�o���l-x�����C�Y�ٯ�'f�l��r�e��U�/{>�|�!�a���~4l'��شw�?�B��ol���իί�S���٫��Ŀ����6#�w`ƣ�֘W��n&�1Y{���W�:�_/p.j-����� ��<�/v�Q}`�sV�����(m���LIq�� ד� L����)��᱙��-5@��������&�t�3�F��F�O�v�'�8�/���`���yRu�%F�����1YS5�������wk@-!�3-��YW/x&����w��\YB��)��lLxT���'����|���0��z��{�{�&�`\q�h�H�L�� H�^G��"���m��7<�)��s��G\�X�W�ܿ&)Oj��h ձr�5�l}�-�s<�)���q|�%��+�ײ)���cz}��-<6Sʡn7gU_�OJ0~�4�=�/&K8�^�t�^'_v+�����s|z+1��>���`� �d����Ş�.�uf�cB��-J?��p�"�c�|��e�B�!A�J���0�"����g�����w���UA�'ź�!p�Cք!`���q�K�L�W��Qb��t.X�՞��Ah]N*i�{�0܅L6�f ���r���q] d�2\�Ŕ�>� �E������Cq�gQD<��L�1u�U]����.�� S 4���-76��{�[7��b��/0 ����[}���g3�JLj-���Kr�>Y�Y찖Dn~;��|Ɇv��b�w"!��s�|��m᭵K�U�6�n]��_8i�C�`���2���56�s��u���q�o�_����!���6�Y&�a���7�."��ᷙ��/�B�D9�jY�@�|��j����5��w���w�����R�=�K�� ��p-~���|d��i��Z�>y��Dd(���ǚ��;��H$�~�h�0G/���(b�ƴS���)ɞʗ��k y�0�(%Z9O��#*K�Ԝ�w���ֽ�^�� ����S��;r��Н�sw5%��6ph��G�Y��Ug��=\r���hwq�=`/�2���z>@�h�b��Pp?���V���o�H�{{Q>����3��ŏ#����t�u��{\�ɗ���.<��K2��Q$��S�����UO2~��4�~*Q�ֽ<�j�$�<�P[�K�~���b�6�vt���o><�>��J�g�p~A��O@��^�6�QI�YI�����}���SA��� ���~Eu�����P`\�e�uۂ�4^.Ί~�D�/j&�1}�˝�ߖI��&٤�(Q�Q�����%ȱ7��o4��{�K�|��~�������W�XT�jrc!�%�S�e��dz0~�y.6�w�����UQ�' �a��VT�-�h�Q>��\�'VI��*JY���P����m��r�����\Ulj��g%O���7Օ�nqű<խ ���! `|�6vciXh]_v�QM��܇��@^��AX$��sg�f�Y28OK3V�h2|��� -�� �� ����s�����Qn��ݡ�B�U�NZ��䩑��\m�ڢꉪ��:p�T�Z�R�ٖȵ坭H*V�AV���B�kuT'K��P�=�;�N(9 [��Ta����=R��j0ұ=Q&9T&Γ�*�:]��i�N&i�X�ae')BX;!�RsvF��&z��ֽ5Rt �b ��'��U� �I���u��^��T�4j� ��B�c����a|Ծ[���/"��?A"�I�*M�,2J�J�Z��8dBY� 9��{䱇�y� ZC>6�2v��#N8�+n���ODx����O�L��N�DM��O�$��IFL ���N2�")9��%9 �Q�BM�Q��J)�� *�R��jj���zh��fZhEO��S��.�Y�Bz0b���+�ɐ4%���!, O�2�t����u�u����lh���8N� Ug�:t�b��V��`�����)��!m���(����8��H�4H�Gb��@ �@PPPPPPPPPPPPPPPP0000000000000000ppppppppppppppppq! X|wD8�_�W�_��Z���5:}K�?9��98S����gN2���<H�K!�~�[���6k��Yl�L���˪���o_�˽�5���x�L�P�qr���;��}�z��ضV#��,���6_�.���jHuR�֩K�MR�3[����z�K��\�V�^�|�([c俈-�-�f��:)�BGѴ�'nF�ԃU >O9d�fW�J�{y��mkO��gI�d�^Ve3��IJ�Q�#+�X�iEV��Y�ж���F�͍g�F{�Fֵ���ꈳ�>�~<n�Z��=����䶞�e�x\�Ѱ�CY/�N1�۹�[��o�gzCwZWY��*]�W^%W^.r�(;MNH��8�ix�^�ypǟ{w/R|�1_�Q0O�� ��@����E���*�B#�Y�����B�n�O%��Dae�2`O ��y!��Y�E=%�t�S.9?��w��/�*k�x���0(ؼe��һ;/n�s�?Sm�� wPI����;�[��)S�{TXc-�H�V$�v�R9�IH��<{#����{Ttheme-joomla/assets/fonts/opensans-9f31d6d5.woff2000064400000022364151666572120015540 0ustar00wOF2$�A�$�L�8�`?STATZ|�| � ��k�P6$� �&�r��;%��g�H�����Ǎ! ���"�.4&�t`��U�� ���EE|澹d��M��O��ɘ/�"{y����Fxq�����Pm��O�`h�ae������G)սiPdL��rdQÈͦ�,�NI?�e������'�-���K�#��y+o�c�2L4�D����o�� ���f`4*X`$�X�����1#�b��t��9g�"[];��ID�YϑL�JE��qL�Ax��D��v�7'�%�-� �X=�{�9��ٕd8"�����B;[�[��] Ă@�����T�Z�|���7/�%��l�X���K���soa��X����X�����8CJ�(�WW�G���7�v�N�{H#�����ɛt�W*���iJ�d;���X���=�*����������}�c�{�+�Erg���C�π�!(ڀ�D�HJ���]��ʗ����[_�����M��8u"��Y��%�%�߆j'�G:�Z'i�s-� '�=�W������S~@7��:�;� ŀ�=���9A:�7�\�~<Q�M�~�r}�A�)�� p��O��+/�tY�0ڑ�~��5|0�˾������\�e�\&s*�LO��SN �H�(��� ���sX�4(�#A����^y�.ٰdƄ1� ��U� �)�u��`�g�w4� ��v$�\��`��<< �O���E�j�)J� �רB�c(͐O�8-އz���t�c�2�p�������7�B������Ɓ:R2��{&~ ��Ɓ���Ea4@%e�r:D�r�p��l��gm���)@[�[� (��R%t��@�1���ARsi�=�X�ԉ�)>���>���֠$��%��'o4�w�D*�D@��$}^�Y����d��ŀ�,9�A ^Z�¤���G�71n��.y������v�U�?�?� �B�I=�DEd@��v� ����p���W�/!���'�0@����0Z]D!y��tuE�y8=���C0k��nk�#�{���fpN�o�ڛ�9���7�ݲyӆ� p�RDN�����������(����'����Jq�i�5�n��$պ$��X�S�A���r9!��m�>'���]�Q���h�xo|���R���f�vن�:�L��X'M�J ���P����|��P�����8|Ѹ��5�]v��Z���ޭ�������SVZR\TX���������`����$'%&��1cc��"#���А�@Z՟B�����pws%]���S�<o�E�ldg�ޏ�.�Ӛ��~�8B8{p.e�X� [0ezm��F��;0�`�lvp�g�P����#�5.Ny�]�B�g�n7�w��F�;��a]&����p�f0 �/�1���-K_ߗ| ���"ە������,b�!�k��J�a�w;�ɚ���?����S� �Ŧ..���h�-y_�����f#QPLE~��)�K+������|�![�����6CFт� B�9�87�^b���7r(�����Oj��,�1�g��k�1����=r��̬zB�朂��H+�� �͆>��xrd���)�6R$��,��AK��&Bs�oF�4����y��(?�iq{/����JOo�5e��c�A���*b���p!��`�ߴo���m����}j���e�/^h�Y�����ڴ6�����B.V���.����`6�+��k�zKW�hk�g�~%�9C1 ��������sd����Wf��N�<ph��p�%=x��!B8�wf�#����?7�����A>�Ae/�j6�R8q�/�J�d��I+#�ݸݬe [m~}�j�^^��TV�9Id"��H=��ȜU��g��D���BR��5�FC]ot�k��V��o$�B�(�y��֚E�T�84��p�L���Y�<Ŗ�s�SA�Ÿ��X�y� ���qωM����֯�� v��Vw�l��0�<"�w��78�m���uR-x�3���CvP��x���X�ؿ-I�X����ك�\n/ı#�p'�J�{y���00d��92G��`p镧:�c���N�8��p;�}��W0:����d��c�U<W���G�j���SDZ <=�gR_-S��$���`�FM����h K�AX�F�e���E&��kj5[*�Mí���!�h� ���4xr7�ȥ�qj�=q&�nI?�(�r��wV�h�$���^�+�A�{���� M�B���^w�Ԋ�ҟL[���Xل�$!^;حE:��t��;���ϔ�ؕ�ՔR����^(A.��S�+��!�^�A/N^�J��C{s@�����S#ݤ� �t�.��O��Z0����Mܠu��mf��G�Ȯ��Y��GD�;���#�R�Pg;>�0hm$L8���fY� ���P~g.�82`�<���q ��|�R��|� ��Da���i�bVT[X7B�κ�T��5"��W^_�VQdt6�ͼp3�J9@*FƲ�s֔ƕu�R�����,Dϐx�%2~Ez�x�)�g�!긿C�yh��ͥ��Y�Z�o!enI�}�G>����#�eJ��U�&�Ы���J�A�2�p���@v��1��D� �Їl��� �lbF$�+�˂X����ξ�T�F'����٨�TT��bӺ��FMk�hOK�ZԘ�@l���/�@��v��5����-jv#]��� ��Jjd~�Q+'�Y��M�%�;�Os[|�镹�?'��۽�%)_�Z��l��4����k'��:��H��$z���`5�#��n~��4�2��2ރ�!ouQ �/�p�4����ȚY��W]~�/W��;iץ*�ϫn�2�hW\o�`��2��Ո�Dչ`=+���}����[P$��50���GW t�h�.��+�j����ר�,�Q�^K,<0y��z��?W�/�U|��(���KH6/��W�:�Xp��9�T��oZ���0�,�w�γe���B&�#�r�̖L ����C����!)�~[T����E�~ @�4�\ .�aj�oLQ�Y�(CH�@H�7��8����4 ���L��� ����k�),:۵��-����\쪟_3ߵ��΄�A������n�-<�����b���ebDo��U�)o�D&��NI��{�I2�(�&�� �Jǘvl�H�H����d�@6�Yp��fK��$W]��]�bw��>IW�f���8�r� ���#�*I����$)��=�" �N����o��U �7���0���L��m"��~g.Y��`�N�g��k��S*i�v>E�`ձ��d��dj�r��B�gtKy�4�L�� ��-��m<fjr�.�����ld�⯦3wH|4]��� /�$Uő��O�H��X��-oW�c��5ȡ��?�$CaU�a�0A�zM�x��$�,������Y��q�v�"�������6H�_*�p/&���de����5ݫ�/f����P�����4�A��ܓ�&%�ie�a��xa�ruo$?#4���"`�O���@���S �2�E�����W%YOS��]씳��@V5@R%�v�����s7�F�������u���BK��R�yS�UЇRd{y-�J�AߥW��A�ϭfuF̹^�I�5��Ԭ�{��4��tS���Q�o����Y�tu�0*�I"u��_o��0H��|:���o�ޫ��Lh~�$sV?�,�f4k���6�FiODk4'�;,&tu�)^t�����b"<%M����#V�@j�����4)Y���al�҃q��������<�"��.mM`e_A�V@ʜ�5W�+=��6�Y���H�k���w��{�N��oL�=��;I���c>��Z`�&�����Ǘ��"u"L%�߂�2o;�p���I����/��߹$�.�c�!ɏh%Ϡ`��L�`�)�>���^��z��H8[+��;����r�]���R5���<|��=^J0ڳ��~������%��8w�Πsn�{��_�.�����[�[k��o���a[�Tv4�gрBN�E+]�XW�P}E("w�������#¢��wCq1Ln�� ��Õ%)N����ʿp@��]�Ӻ�u�E��A�W��W� �j%��M�|ǁ�V{C�z����&lv��+����l���!���=�}Q�y����{k���A�)� 4<Ho��ߚ�Qu��b�&+y%�e�Z@ �eC՞�P�F��N��{Γ�G^q}�s��϶�8�� �_ⴵ/r�G�+j/�Vʂ��4[���7�'�K��h��k���,��ԗ�(�ȓ���=v�teT�o�jz�sc����mm�c^����J���_�X�H�`�1���+_�p\~��kz�Ļ��W=�����w����u~,/;�S�֣yAyAV���V�y����u1����u2�Y;Ya��*+�C�?+b�<��&t��=Q��5�؆��B�I; ��ᢄ�Ԅ<��h����y���0q���د䯪$D�b��Ld?Z��Pq*%F{/Y;U�D��MJ��b��I��q������p� ��q[��~�Ƴ�S�b�SWr��m��Y�r���:�V=E�'1��9�0���P�`4cR�E���q�"n<e�VzJe{�}I��]�,�̮�L�����VANI�_~�|��ⷋ���K��ш����˷��W^��x��G52������5 �w�uY��<���p�߸��M�?�'�/_�����l��0�V[[��Ofrgh��1I��g���/]�CLSc=;��Fa�^��o5��y��}6;���Po������B�� �j`�̢Llr^)c����6�*ϥ�nD_��o���Ѳ6�h�s�Q���z��^��>�j� �Kմ���ֈ�I�BB"�QY^fC� ��^��m.�.�-]��,��[�An��1E��BN^�E'g8Ki����k햕 Jr��L�,2�ҍQ�H�?Y��u�Q������l]�֓؎ģ�x�]�����yW��4�ު���T_�]c�L�(�LM�J�q�$�8V�~zs2g\~�ȏ�/*��M]~^R5ѭR͏�V��*�\ӓ֥�����c�C',��\M�,����\�1.�\�X雝���W���W� 2՜uR"��o�O>#��Q����yl����CmT~��D�� ����\���fꤼᬲ�S��r�!�)7YN R>�(":��]Q�]��縋b�^DN���O�c�2��>�w��q��.CWG}V-��K ����9�����d"f 5��yu�o�':��n)u&R��N֡h.�`�:Q���\�,N�/���hUZ����84�3���C��D������z][&��A����]�.<�j�.9�{d8�ݗd*�>Aȑqo� �F�������'E%�iUC&C�����N��,H�v�(/jv{�E:�H.N��s�%Jh<Bؚ�m5%0���e�Z�rT*_Lz.�)ak��G�����+��S���Z�I<��4JL/w�u` C`�z��F��"���ʘ��##��N^�0��z�p�T��U��;b���Ѡ��އ������3#F0�*)A���r�um��;w:���5̽.��*ug�>�4��ۅ]y��j��gs�{U���Sp��zE�Ă�]��kM��f6�0�qRr��˖��߹��ϩ�O�K����A��?��0��B0!bt�.bJ���ԗ��?�R$��w;�'{�K�'�����X�9'��}1:�z0?8��|�����P�o3sj\�!�8��z����}r圣l�՞*1�~�������ܐ]���c�j�}8��^��4E�G�h������i�I�g�~m1���'@�jyc�H�:'�DZ�>Q�)�����=v�Q����#$�&��3*`"?�`((HU��rLW����|����:F�ᚮ�[�?Q�,0�S�T��S���:���Et1���Y��MD͚*4&K���;v�Z�?՚��j�W��H���珇����/�1��hvg�d�jPY�a2!7�8�l] ���*���dW���=���3��f���� ��'l0���2|�O��gG���e��D���BB�[*y3�%�>�$8�3��2mxd����nˠp��@ ��OY��3�`���!��DP��bͽBS��Yn?f�`b�ac��YA�-'��)w��3-��_�Ü�ij�9+������d��s��(Y��V�Ĉ+1ܣ<��V����L*��t'��yg��V���g35�f�z(�zh33�ꝃ=w�6���pt� ;c�"�6�q]�Z��ȵ9�O�)�,o�]\\ۈ�t�I_�rP<����86H?�ow 4)8a��r��DC٤�v���&��4���ZQ�@���l<���N�*I�\��qR��E�DJ��5Iե��Ev�� �7�&3���w�v����L">��4M��L3H��2v�^�X`��w��j��wY~��4 �a\^<���������h7�ܾ[:�D�J�hJ5��O hH#Sk$�f����ғ(�����q}��Y�H�PHɸ �Sj�]�����7�ŤL%'��՜�8T�SR��ȱ�5{}���� ��k[[c]�|c�}�䟤���M�!K�-�Y;�Zp��$P \{�J�?�)�`�_���qC����۷���B%10��7����ǻ�aflݭ7�e�><e�HU�<*#Cg�Tmäa�u����s?��>��;�x���L��Q��|P����Os]�x���ac<��,�� ��Ɇݥ��Έ=�e���π�W�i�;�&��<�k�n��� ��1a䥉�O��D� �7���^MK։ �����D���eh�e�m�g�r���s�U��c�3Q@�q��<�� r"ʙ�0��ܼH�OMʋM��sA՚D���&R�s���X�`�Ʉׇ[ΪJG|�Cޠ;[d��W<$V�TKǔ/��Du�����2��iRs� �����@�G`��(iB>����S)<�F��$aফnX��`�zs)s�g�!{i�* ���Cp�1�.�OK�b�;3F) ���Is�yM��.�?(�'�[V�-��\�`}8�'9���UQH��2�N+ĝС�11r�f{��@��7>�Eh���G��M��Os5 ���p�Md��f�u�g�w>�VYUZ?�n���C 2\�~Lzp�Vkk���c�6ss�q]����1�6�/K#��U�����њ�V�8L��)��MJ��@9��C3�k�n]/l�hm�[�߉�eQ��\>�TP�)/q7�>��1ex�j�*;�DH�!�_I��B�/��M377섡�i��5�˭��`I�J��LU�'�T��֪��؍q��i��T��Dҏ�&���N�i���a���=>@��tb��r>G�M@���?�Yi��]�3�=(���=�eX���YE�e$10�����xXJ����B����io|b�N�瞸5'��J�ڨ,��w1�f�~����z{l%��hՎ�%��LX����Xݣ��.����*WW-����oF��ָm����W�X%_K���Q�����^Q4 Y��w!K{}8Y Û���kF����h�N��������^]��lHP�<~tZ����M/+��U��<��Z�q ^�ٻ%�M��R� ���l�L9%�7�_�-�(��:��h�>�����U�=������3do=S�ݿ�*oBn�Z�6�|��\+�< ^���-�r�C�ech�[Eʸ�|Lr`�� Җ!4NcGZ``��!7�k�k�B���T�»w\�S�U��תg?���n����{1Э�o�\W_L�Jﭕ���m|�;ꣂ�.��`z��m�da�|�v~8�P�0�ХqF>�~�1�&`1b�Dl���]�x��Ƨ%�W?����ڊo 7���LC��H0�sT@�G�k���R$ ��U�p��D�b0}BL�a��XD���jL�D�R�v2d����L˚!��)���aF�7���3��X͍�\xPr��/Hu�NA�pl�0�]GMJ-D�@"�'U�/����T�t]��+r���\�i�0�M#�*��wj���~��TdϘ Ӻ` �)k[���1���L�"GZ0e�X���X,���÷�ښ:`�t���0�����K��C�1�h1������$��B|?$ BB�0$�Bb�I�$E�YrP�)P�D� Uj�i�ФE�]���g��c&L�1g��k6plٱOw�8r���+7�<x��͇/?d�����x��j��K��fB���M�7~�F��s��=�W��aP���7?�:�r�N[%l�|�g~[���P�y�j��)x|��k����>яK� ��B}l�qP�kL�LyyV�?�"x�_P8��c刎� J�s��*��_I�<HwPxbR�(���ݻ�V�'X �IU�"�j�1��RM�K�EOev R4%SW�k\kUu3K@P1�D-j;�n��Ȼ �S��Q��im:#?5�\b��L�<�?�Eo瑔Z��e�d��=�c��(�36�O�MLr���?� �����tꭜiy@��(,�8��J3/H�8 Ŭ ل��d�M�V��o\'z���fĮ�Ĭ�Do���;"7o"�+|�a�i��g���ٜ{2<�V��8�B<#`h�:�`Q�&G��b�o(�'���������m����q5Ik�2�Eig�_�$[p�\����[���N<�и6��6Ӫ��8��tL��3�1\hgMu{�'�O}�֍���@U/�<�p�ܖ��˵tŋB���+��,�p�0���`�v�lv����x9?��sO��=�^������x|��s���������W�ҫ�jh�ў2�z��|�]�z���R(h�&��,:�M��Ú�Ek�xCs��������;_��B��/��f^<�yۥ�� \~��U,U�p8Sa�G��a�E�8�<C�x����5����theme-joomla/assets/fonts/montserrat-4d9062ef.woff2000064400000100650151666572120016101 0ustar00wOF2��]�>�2��z�4`?STATD�6| � ��x��k�@6$�| �,��([ :����Eg���m��kz5���v�u���F�g�v �]�����K*ch0mD���;���X���n"lb8<7��8�M�8έgPuQ_���p�>�G�0!�!�8�Ƞsm�:^� {��y�3 �=�����g�Wӄ�}��͇NQId}������U�r|�JU!���g5�%�JDDVF5��?�Q��d$�d]�mWFC���6^�d���(kE�����8�o���˙e�72��_��8��L.r��]'��U&�t��`��@LiL3,��$<��۟{��[�5=�F��A�G?�0�F�����*�A�g��F�1D,�1�/�1ֿ={�PX:�)��S��*��(��y�L��立��z���I�a���d�Q����ɢt�R7WaTa�̮����c|�YȖd��y Y��`�}���%�x�H[K $���ms���S�(kъM,���B�ߛ���p�;g�lGI�L����J+�0��T��( �|_��-}���iѓ�m�� 6�p j�s��)�*QM�s�<w��o��>A�$a߬�8���Xt�{��e/�K�Z�P���DeD�*����h�эl3������oV_���rw-�Y?��J3��L���9X�� BU&Uw�?5��8��p�p�&��05���d�|s�����J"a>��� ��6F1�Tʚ����N}�08���<`�ӹv)i�c���!��$�?m�����;�_�C�^9<�4[�5���.6p���O��д���\9���ob��`�-:�/������{���*���g�XL�W���N�> ��YX��˲�¸��M��M�|dcLU ��3��:Б�����2��v�y����lg=�QM���l;Irڒ��LůL��JR�u8��vF�rȀ|J24@��`h�n�f��@����� �\�q�+��ٙ�hhXc��')�g��u��賢"K7"�wكuL��P-B���e�`�fw�B"K�5R�w�XzU�Vd� ��8pE8⫰�_K�Z�}Vfr���d@ 3b����9��J��R����$����<<�eB �M-�|�Ȓw߮�����i���h���s�4[��J�Re�9���Q,���b�Iuf8��� %�r�P�ɾ��v���o �~������33W�GD9"""J�(q��F�*�w��R�/��� �H��E��<$�C�u@�3Tqe��AN�Qn-����LJ�����C�K��dZ�!�z<�R�'�1��" �`���J�_�K�����7����C�D C�13���ѐ��!�� >| ~�!�-�����N�.� ��uRH i� �����B{ y� �ߐ�H@�P\�(��Pc@9M5f(������=�_+� Zj�ʠ�/ �zP;���[T�C��Tƪ�j� յgP/65�P#vK���f�uJhS�A���w.h�+���h1 AKl7�}탖R ����U����UV�XM�k� b���n!v�w��w���!��[��4�Ё� @�@��Z7�Uo�`�UV �G��+��[�]�2�]����!,�� �{�˜��. 8�c���ӐE� F4�gx�2��'�8W�K�qf��otS/ ����W�~���k��h�Q���jt�B���<�Xz��b���n���깲7&?�P��P�,F���8C�Ow�z����GD�C�T[s�]�^���i/{[�K#f܄~���}�����六�#&�Tɫ�dM�;�/�!N�z� ��K�|��?֏>07���$�����VW{��G0���v�#(�{gk�mz��_gw�W^>�.{���]� ��}���mf6�A�:�AT �8�<Z��h8�T�E���z�$|�Έ���֭�M��>��_�U�r�^�e^�&8��r��x�纋�jDgrzéO��2�Q'[�e!/cwU�1�ԣ��h�U�����}�ؕ؉ ���ѥκj|\-��n+X�_�ɕ-�X.O�Pb��~�zֹvw�E��S�*R�R�V���>21�XK��)KR�F���|܋��Gx���z�{>��\�(;Y,әM:Kon5�My ����+��� ����7PkhT#H�����sh_E��! Ng51����~��o|�oy���{��FW���t�c�~o���Ia=�����e-aa��6�}��A�XE�U?'�r��lYܽw��AW:ў6��Y�k�xw�jU= J+U�\�+�X4Y���*0<��u�!�2����~EIKL�Ÿ-�*zQ��������Y���[�#��r<���`���?�~v����y��?^9����Q.���U�;iC3`)(U)O��''�s9�$'qʪ���x� ��1���]/�&���c��E;��(E>2�,;.��.�阝r��Ѹ�(�� "���T���8t�P&H�b����D��|���\�q5�y�)<�=��◃��i��ΐ*���k/���s)��hY9�Zm�W�U+���-:5��<�C��I���EҜ+��ߢs�PP](�EJM�"ߴ��;�^��(�sFyd���i�i�ȝ��Rl�9�}�V��91:c���(���4%+pƕ��h��UHӒ��݇��{�� \�<;�m�[� ��й�ym�ќ��8�iN���Z�!s����o=�?%ݶih�c�xL��n:iCZJ]8h]��R#5e,^��,e�� Ruж/��1_)�|���PU�|%��H_�g�ϱ��:�B����t"���z1kU��t-�5��F7mQ_7[t泑h�㭞���$m�6�U��r�=�N�C�*ϩJ>�lDM���J�H���W�!�"�D�b[?�5U��42���ax�I�j�)�-1ҡ�������]k|lfI�EɧS�Fy��ux��%۳-8��Z`Ş�m9�4��j�ڋ=l=����ڋ>��~���r�3�FD�W1��m�q:k��d�����WfI��B��F.�ε2�J�J� s1���b�8mJ[���u��t�t��M;�A��M � 4�~ZxZ�W�V7Œ��{̧ �8=f�2���Uya���5-k��0J~�����#K��5̼f�@�a�#S��;������k%���ZZhE�U���3�`)L):R���H1��|UL���[�4�4�4�����I�,��m�ޞv1�d�KZ�n,y��l)ܗ�K�kj�vR�W�NI� �ۑ@y�y8�Җ�_*G�D�R�J�Z�F��Ɏ�����? ��(�ml�~�l�#��t��N����#9V,�p_�!ñ��6|HAn��]��:�� Xg��y�4�0b���`6 &TzX�Ҡ��G�(g�7Cc;�� 8��)�;w��)xb���Y��*�i���O��W{0`�>;܁�����},�"�c�d�I�d=�:ҩF�"��c7�s����&�W�>���i獟KY�A.hlV|���ʀv�/Z+Q8]�=��z��<圸�4u�{�ّ�Zj�K��sÏ�y/I � @�l�b��@��#R��0O�L��q3����~�8�2j'��s!��&�5îJ2����y0'��e�$6X�� j�C܃H��s�Q���v���CO*6�,���@�>�{�o���'���~�+JTe���r�%9���V~�Vb�G �% W��2�:V:LH��=%�'�܁~>`����鴧���-m�����!���u �[�2��A��OM���ӆ}<�� : sD}Q�'*%څ?�������W�4a�����)���-�"~� �����pq�Gh�����q�TD����7̂.g�J*;�`��u�;��U��6^�H�l��-�i�D�&��ǘ�N�N��Uݡ`�*����sk�1+�mP;�ڼtCS��d0��RKr���[��$5��.�f����� �l�����=���`S�Yki~�XOgXF�=��\)�s�Ǩ�N\a�ޛ�.�e75�s���|"�� ��`:n�4t������#�3q8������S�*�w�{��d�������9n�:�m;'"kP*����$<���k��r�Ǯ��{}5��<Ns�J�i��v����0t��aFcx̲]�c�S����#�px��˥tR�m�"�ՓN)U4���2W��]�t��I^�o�W�«1i��i���(kKL;��Ԟ`�#I��&sC�iwԏ�۷@��p6i`.,1�(_�F������I�Y�OCR�/Wb�U�cHҡ�h�:Iw�4�enOϚӬ��:\���2��:]Occ�z߶:���WSf$�!�Y��\��ʇt���@d`��.�d�R��*�\QE�4V���]�61{t�N(�;K�J!�\4��P��x�%ds���b� Z{�o@��/ysd���Q�GD`�x�v�c�}�;�C�$S:Ra�`&$t!��!�!r�gη �����y��y��y��mE6߅ 9��q�9ߙܨ)_puJ����^eBنP�����W� �<�bFشU8�� ��/���S~y�B�T�uY�]g|���]��p���[���� E]b�+�-��cj��h�ʌҕ<X�6��8ɦ���w������-�+�z�d����v � PZ4�7��a]//��N�v�w���j���S�=J�w�*�ct�������P����=����K�8#�هo)�5-�<?��U��P�c�V0�MUzgOƾ_{�|R��{4���9��}�ꃼ@����=��o#u�aeT?I�$L�jk���5;��qز�6��va��݉%ʼn,-��tu�!�es2�6>�5_#e�-2��s�`h$�����i�&�h<�6�|�ÖVHYD<��?�A+��"����fS��\��ΪH%I0"<b-�u-fp-��2!�8_!|!�7�P2���t$S@W,��82Iq�~�'�&KE��܁��/�U�y��菿��j�� �]���[ͫٞ��� 9Ž��Ly��ג�FM<�XUP4r������]9}ߖl���j��D�����F���w����?�!�.(L��6���*eR�K-�w~L�����Y��^S���LR��E8�ӛ�W�K�}�jҊ<���Xd����;gH�WF�Z��tko<�q�5�TN���܂��$��ֳD[�V�DU��pY�9:\��Z�[��A�+��5�+����~�`(��ACS���a�[ �.[ P�5D����>*�)��X��cUpgcj�6��|X��+��>��Ym)6ف;W���4?SI�� ���T�ׂ�{�^��Dg�I��T�_:�TImlՆ|����f�5k���a>Bj���m�ab�.9���,�,���"��Q��_c�7�g�@������@F3��W`�q�]�J�X����6�;��)״�]ݻ�n ?[��j��]Ky2�,kf�*�3V<wkv�ѷE�aÜ9A�;��3ܨ���B?�7B��H��-�BvNIpR¯ V�� �;h��;���"��s����-@o)q�AsJz� �)ՙP�������y�&ͷ�n�X�Ʃ��e�?O��#}�����0�5��{� ]7����q#�o�����{�q.q��h�]{�����?�\R��߄�s��<�4����NKIpk��({II���?)# un�k��k��F��,�c��oۍDj̢ƈR���v2r�I�/��L�gN�p�0k�Q�s�3K>6�<��i�8Uţ �30$Z��(_�2Xf��DR{�q{�w&�X���_�]��x�|�Yll�rVwI�F��n|�=\�86l�v}�m �0��O��*>:�����$��6{Dz��WI@��[�A�iZ/�~�'H����n�9��_���NDx�k5�Oײg]�-��m�sQ�t�qLO�ep�� ��(�̫TX%�C��D\!�����>���zS��d�xDHՆ�E5G{���\"��2�8�\�{S �rN���2�WD����X-�^���p��̙�>�>��en��>ʆ��,� a^�*�ߠ(�ڎp�8q�Io��[6�6@w�k܅��XH�F_��A�8QMJ�~�ڝ�ܚjn���ժܬz�y�<ĉ��ʉ!��r�� ���S�ƫ���g��Bo7���Y�Y��ԁ?4���Q�2FH � J�?��,���VG��K{�'�������[��@yK���']5���Ƚ�d�K�ȴ��:*�#�@�*A���`Ǝ����bn��2�߰T`�}��.{D��l�@˕ݠa)qV�ϛ��DZ�����IP5�h��(o}���d�]�x�J7�E���@J�oǾޢR>CL�߹ ā�VL�s��=��$v�G~�36;���#�6����O���C�����D�#��ٯ�+���QKQ"*f2��7.zg� ����?�S^�K_|�;�CVcnr�`K���<�NP<4�����W.[Y�3D!m����0/s�����5�J�[��ֶg���Njܻܽ߷����k�~μ�,T��X�Y��;�u�}�[�]r4��uW�#�[��o���n��:���\j ^UuK���[�b���?� '����@� `/&Z�x�\xf�t!z�j�0�2A�z<f�#��E�s�l�YF\d�Ssjϰ�h�f��aMt6� �2c�d6>2��Q߇�-AO"k�߰�-Yi�)��9mc'���h�pۍ�lD��â�˃%rV��t �����C a<��%�S�&���2��\�%].��-e���{�Cg|rΘ����B�a��D#pQ��=�d��πC���}g �.���%(+�YCds�sѰ���iN��?�S.q�h�M@�h �&O 7ez�f̀�cf��́�{ND>s!�}�y��5����Xn�Zᶮ�k�k'�cp;�IT�z�b�ǭ�Rd��ߌG��������;��l��!3[�$�M.N9%���¾��D��,T��F���rW��p���VDО�"+[Q/���^�ydu�C�~ ��S�ov�Ț�Ī��B��]Bvy� ��Y�:�dW�t�}��h��-T����{L�{�}��U������k� z�p#1��/ 3�6f�`K0h�b]��//�ȑ�5*�hIP�ބ��MM��iiP��g3�alVv�y�b8OAF2n%��[Ye�VQ������᭭�u�����p����Z;ޢ�[|��v�dc6U �6u��6��y[K7k��䲧�2j;�!�3�2ݮ�l�|�=�i&{��L�bFm�B&�]�Q�S ���W�z�P.LFL|:L�>ᄨ�&�&��d��'�?��Oozӟ>��c�3f1�dL`J*=Fp��B�Jh2$'G�b�φ� A�^g��ΊL� j<���]DȊ�ߺZk(��k3����;���0�o(!>KIL2��1d_O�C�I���SA���i��Q���ҳ���_4�~@�)��ú�cd?ȧ7����\s�#6����, �7�C�0�ǜ�������]�q�b ���Ws;�%� �V)�,�$��`b�P& ������d�����´0�B�.���3�yHH $�z���gxt�c��$=p14��IL2$&����-�%pnPn�v�Hm8��e�ZHJ�L���B�)����D�&d��l����̰v��k4:RX�%���q}�u��r��W�J��u��?��O1�|���!�m���Q&zĠ��y6��π�a\WJ"qہ8x�7�����]E�R�oz��h�u�-U�tC�}� ٨�glP����6 '2_t|�t�&_�b�4��b�PBQ�D���h�5����0��cj�q����[���6>u�W3!<��K�l]S˲�c�]�x'������{��NBWx��t��홽-�I�����0T���M���<˭U&�.<��Y���<��Jt>����{�_o�0��y|�0�\���U1^�(:%�o9|���o꽥6��YX��C����Y|��ˤN�p�!�� �E7����r� g�3�=��&�(YZ�u! !�B���4F�6EQ7bqh����$ô��{�8:\�ngi>���_�-�����BnR�r)���̬z�9�sn����5�������yz<�0?,:\ U$�U�1�a㋄<$١�IS�$�*T� �L���}��.ޔ͒�>�����H������A/)u#��`J�~��>'Nϣ��3ayc11�)3,���/�8�-�v��G�1X�@$�)T��ds����(�c% $"&!�K�A�uo�wC�� �o��t�!�,� rcȮ$�5�#�w��WvC�0�3d�}#H �������琀�����.}�vl�s�,� �W\��q4�vi|� DHDLBJ�>���rզǫ9`�;�fA=�E��,�V?KX�EXO�}��w=j��0�c��5f7��������}�������R|+2r�l%O��yع�~��Ǿ���? >����/�"�7_����s�A�5?��O���\�.�R�-�G��>}cNa�M��B�M%#o�-wo��w�Ң�w���]��͠{�2�g�|H����1�<&�q�S���̇>�&��ib����p���[4�Ƈ<��;X+U�=-��+&����urjis_�N��[����/(�scB��9B���11��PXpv5@pO����u�x2��(&{�ц��ƨs��O5��S��k�ߕ$1�&�mO�r:��U�Y�O�T�#����h��B��ͳ��k�[���NȗP�vbWvg=����D�+����"��Y�W��ǫU�K�'O��Jv]�L�Y�"�n!��B.@�۶�b:�����*��Ɉk��ziZL���״�s>�|�����=��/����@�S�\2F���� �S�?+�V �D�M�y{F��7�{�������g=�E/{������2&��,P�&a�Q�}=�Z�����k���� c#�"clUŹhiou~����@?y��g:��w�������U��k���w�K]�J�HA�m1z9-���hecz�+X�JV��bQ�Z9b�ps8�@���� �ʥ��X��؊��z���3�2ݖ�a: �ן�#�et� `�;x+D�`Ah`��St/�>6�� �X��}ീ�]��;��3z�3�0 �< ~Q���)�K��L�kؑ^��W������7�2y�)_�7-��Cq�5�yZ�<�F����`ū�װ$I���BEJ����Zj���K*���u��j�������>��$�$�O�hh9ڀ���:��{��)�����G���o�ߙ��Nc���`�`�ab_ƾ�}��=��d61[g(3��əM3�fμ537sm�ql�Ac@�ea�Fr�Ǚ�uY��w�)_j�3\`��s���nr����B�/=/�.�?�$!��)�@�il��/�����a5�e/�o�o)$j�-,*,/����sW�{h�!����;�a���a6��7k�����7�^����S�M��u�ٮ��7ߥ]�8t�l�h9X��r����?f��1��!^���o-�{��O���_�w��-��N�� Yɺ�V�Wײν����7k�����`Ɋ!�Qk�|> ����b����%+�Kkzko�KC��F�R�R���B�у����/��?�����Dcp��8� �UĤ�J�5���Vmr�f�j\5��_��w�6&�-7eK{l�kz��^iu�l^_����:P�#u:Y�������8�3��Qa/U�ޅ��E�Cp=.t't;����IFz2�8?�J�}6~$�ߓlv_f�e Ux�bC >7=�y�gQ1N\�0�3�nJ�^����ּ&��z�XE�4�sp�2��`|�KC��Wj.��[YsM��6�����z����]�z�C����8��]��M$�,����k�կ�/��AVܪ�װ��6�0�����$�j0�&뚶���ZU\����){_��ȳdB� �MN+�z��Vio�R�[�N�B<��\`�x7<벳����XH����cWW��:ֻ�v`�zo+Z��Zvs�粟cc:�G��4M��j?KAt�Kp&�"0�#�� |�4�lT��_�~M@�$YI���eT�q,ι2���1��j6�z��6�:> j�Ҟ��m��UX���F[�+�g��U�����v��uIrZ�js�.Ǻ.��{ ��N�Tf�����R�Yu�46��.Gh����1�nb����܊�~R/2�23���4c}9�����J�[�����[��l>����c���2��-�>[����w�E�->\�moT����'�$ߠ,�`�:���+.�SeWVig+�DR�)����a���ϵ�'ť�X�g^��d�=L� �����nv5����7�4蓖�21t0�)��n���@��"�C�T�1.Z�,P���,f�W�[Qkr�[�V���O���twuv����4�ljl������JVV���&�h$\ |^���t�mV���q�O%�"n�7U�q�E ���G�;���Όg����x� Lt��5����B�9�������,zR�&\�I����eۏ���6�� �)I�""�U:��f�}�;�3,v;]It�}��.A������r��6oq��$s�a��,��۰y���~� ,�뉓v`�<sl��"��}Q|I��Bl.������tT��l�r�m�JHQh��'��l� |�'7f�AM�BՉZ`���BTt�U8�&��s$��RA\ir�1�7��+ ܪ/N�V�����j�uL%�1�~5e?������BZ��}C�^��k��5D�֞$��T�R]�~t>s�p�Md�l�\�E��e�V8 ���k�#�)%g��2A�l�iź��x����d���X�i�f�yx��`E�@�R�ަb��^(gL86S�c@I�AJ{rY!��zRP��H�� �y�?lA�~�����5�E��.=�DyM5q�����(��Z�璋&u#ܶ���x՛vr�"�-$�E��|�_m�1��?e��xd�K�;�aa7�@�qb��͖N���8Y���ȜC���nk?Ej�k�Z�Mm�u.�����f�l���+6���u�u:f�h���+��#^�KĜ\��v\#�[���zyq �3�L�.f ���+�w!$���Cލڻ��=wM7��H��FS��ϗC��o�;��}�g�փy�dZjG<�)��6L��(�b��g23��O1�H%:E�;2(m-�L�>�,�s㓲�'�+��K�́��d`�\Uj�ƃ(�u �|���$I(�0�X���`JXr8�mٜ�|�28��K�����e�D=B�5*�Tl$�G�,Lq.��o��+�N�ܬ�eC)����\{P����"�R���Ĵ��u�A�M)9� �qH�s�B�1�Tw�Oa&�笑q�0� �M�%Pβأ9ijt�&����yiU�5��z�"Ǟ����L�(m�ו��Ȱ�s�AhT0��K3�{T�B�=�zZ����B��N`���@�t�\Aa�~z��� >�?p�{���Z�)f��5���F��[����u94���[����D���L ��5f��u�2X��75iPȁ�Ǫ�m�.�Zɻ��:@[���%H��� r#��k{����8d��������4Ts�����/�\����E������궹���Z4xB�D��-��� ��!q8!��o��&: ��/7�7�������ّ�_K������<�O܂� �c+�@�/w"��Y�BX~�u��$Ku�o�&[l#�k���"�"�<Û��b�ż5{.O��NduЩ���i��YǍI0%�-f��t[Wi�zx�R�v]��lߖ�=l)��z%�u?�CWJM,�b ��mk$N �n�O����/��v*z��t�q�t��L��j Xn5|80 ���y�����B���*�j��i��e���f��5k'��-��|�M�$������sR�3��\I�f���a��3�Ʒ0����UwgB/1�� �(��}E�J�����[��<��q���j58�B=�$�ɣS�옒s0�3-;����H�=gi90,`�?1��+��?5)��ۮ���z�K��f��J���A����d�@E-S9����x�d���*��˽�m|����F�QT�9@�j��K:�p�� {j�� �Lȍpl���I".��F]���R��b@��y���q�!՟RڳB̦2x2�|A�ʸ��悡�q'�(�"�i�s�PXl�h� ���s$�v���@h0(��K����B�LD�Ba�̼�>�A{ڒ�4�6y3�'k/�+/�E����Jx!*�1FG��Ð��+XV��1���J!��8q.�����"K�Hs��j�",��<�bD-�<-Vο�1�\+M&�2 J+��С�x��O* n�VD�ZW�}�(��x1�E��T�%5[07�d8��z�҅��9��*p�Y �����h/�[p�M��L �� ɘ̬�o6�γB�l vI=��Ũ �!/ ��5�������j�<��� �A{v����$g2gLh�q6jλ<��l���||ǝ��k��D�`ΚQ������O,B� ����x��A�������G��$�)�Xh��Ug���Z�,C�<"`XM�e��sW�U����㑭dd��f�Bzן�'�F���E� =hn�@& ��f/�-�ņ�{<�1����hdfB@�H6Q.E$Xv0�ŃV��Bl��Ȭp�lG�c��S���l�ߧ�;�Rc�+Y�E^I/]��J���� |c�ξ�RtOY.�����Z)�vDH͢���vU2���(eQ ����(e�x���\Z5#Y8����kg�g4cFJ��i�N��9��aE�3�lQ&����^!�j����Z�m�7C�n\�w�r9�q8)�\��P�v�8�1��o�|S�a��39S��D{���V���c�� W_b ��F����ku�? �n���)\�dI�<����W^�^ڥ��CkFkϺ��O�1]J���"�����!��Y�/�X^�� �k?sf�T��DtM��G�3�3��x�z����=I����j��x��!��ɺ�X�A|���z,Z~1���?A�(�c��H��������%�����"�/[�,�j��@5��x�B��-F�w��U���ϯ_� [�A�MbRAk����S�����"~IH�w�/����P��m�N��u��0��8Ԉ�"�~�,NSI�j7�촄99ţ�~�D c%��$#]f ���v!;v:Hna-�'H,�}�6��]ۮZpI��>�1F2��%��ϦKhn�:��d� ���(7Y��Ȧpm���@��c�|�I��0�~R�%x�1 �3�T�T�{�w�1?)."�t�?��4C�Ju��E#U �<�@�z}ٰ$�*`�����W6��Xp�;y|=6�d���65IY��5TZ�`JSBC���8�]�m_�H4��]��Q$�����Ƞ�X TO*]� �#�; �\�hH2U��DXt1�ϯ�.��;����ҫ��[Y����z��kb&�L���ˣ���=�Eꗏ�W�x�2�������t���)N9�?P/|�Xk�1f����T��:hL̤�Cr�3mX���J����a\&��nz�.��i�h���@j��`w��"�'K7_�[�M`3ٸ]�aQ�ύ9�F�j����|�i��x!���2�l� ��m4 \�@���,�E�#�E��&�* kIy]C�����t��[�H���ʥ�[uK���*Ѳ�R�-�&Y�kxyԔ�w��l�����f��>5��{?Y~��u�\�a$��P��z��Ш%B��*E��Uc������y��|^@uX��\�T,Fhc���{b����P�6�4�2kz{� ��-���@r�f7 v=U{f���x��F�Y_.r�����$b�8|����t���u�`��K6�#:�;���L��ahc���q�s���4Ce�k�v��}���Y4@�i���z���"��D� ��Z�/bؗ%��Ha*r�U>V��Q�I� c�+?FM����S�&C*�˄�N6�i��Aٶq���Q���GM��&�wr>�_ �I��R:���ϊh?�� &#�ۯbo��kuw&ʔ`:�j��?��(�=Pi���4&��m��$�^'N�*���KB3��&*�䑋�E�QmRxn�]�NU�wd�Y��M���O�p�#z�U�������ͪǃ��J2�6������Й'Xv�ؗ��,eG;���s�sA?g"̎�c^��)��d �z���*}v˓�"E�9���L� c�9����ͣ�E1MˊR�!���q�y;����%�m]t�c�ӬfG�o����\v�l��-pFj�P� ^r҄ۯ.�I�\��/��c-�j@H�w�Zj���E�� ���z�I�g�>��&9q�9vF�Ѕ�\������IS�"L1�v�;*8]�����0s�J����2NaU�х-*k}��ێ���. *�A�� �vu#�,���u}����N��H�Ψ.>���f���b�ǟ�CJy"�Z���'A�}��ԣL�=�g\<>Rc��gi���t��"��E������=����J��fox����`)�TRgq�$�ǦzZP�3��x��5k��@H$�j�$ ��.��5��M��D�dVIo&� ��x�4#Fﶔ��3�Ή�\U����9!��l*�Ǻ����(5��X����&YcHe��|���`2؞�&`į��� ����ɄZ[����њHl�|��k������7����Y~@�:����f��bO��c���eNfoK���!�h�!>�UL�-����Ŗ �p���)�?w�� �_��b�j5X�I�(Ȯ*�=�'\���rK��v���NwB�BMЏj�p�U�����\�Ljr�'���uF},*���*h�ϖ��Eדn����ݬ���5��7e�Il����[ﲪS��)�+����_����@��(��ӛy���D�z3sf�uX��Ϩ�����ō�k��p��ֲ�_���2���X�,Qi�3S#Eo@ހW��>�3�����G�Aa���ݏ�9s�O� ݗ7� `���B�����<��5(xC:����L�DԽuⰤ�\<��#7�O}M=m���A�{�\!V5K��o�����3Õ��d;,G��ԴV>��=4�uM�[��Ð麁�3��\r�-5bw��=��b[r�5��7�� 2���"4���K�dv<}�6Z�t��̅���m��VW��2 8v ��t�>�M�}~G��4,�Q����e�����\+t���L՚��P����-%��>�JCj��Z]���&�!�-�f�^zӐIS��b��F�<.�K���$9-�P5�ώ�V� �2�T6��Aa��!iBB���B'�w&e[j�k���������q�¼�|&r�*�����K�k�p`S�`�ܐY�i� Z�Ά��j2�Euu'�&�k�zmnuzА�cLR�)�r{{l���n�il�� r����V\w~7� �d,�`� ���\[�f��)�ʷ���y�1Z<�.p���Ja-Ը7!s)�=P��\-���IUk��e:_Q��c����~�L=��04���>h�=g���~{�x���zo�˲����W�ጫ���xiբL�`�LG8��J�鋸�j���F��FIٿ�P+�|�P�_�b�G���lR�<�&<���a�?3Uy��UP�THM�!a����j�aT�x꽴+\�A/ڽr��m�����O���Go�@�$5K� �M��8�wl�5T��\�E8~��s"���3�EϾ�(�V�j��4P�K#Z� �z���f������B�#-�2L�m�dnZ=�/�=F8���+���w�d�"�W���@:T�$��=⽅��SH��� ��i��z؍��-3��:�N�'e>}d�o�ݙuqU ����������}z�DuKh#��YW�,�B��4\�h��D�c� *oa�iX��}�KW*�t�k��� _O-UsO�����GGƗw�u,��W��+����~iL����$b�����V��U��.�x��A�m�;� x��&���a�46*���,|n�so��RE}�}$����o���H ��j�A˭���h���cI���i~ڑ�f��i�l:�� ɘ�}��y"r�F�@l��?R� �EtD��}��5���T���8"��k�������� 0� �G�S���$��E���:�8-Ds��F���R]p`�b�eD>ms"�z?���q���*$DE~e��ؑ���Ss��)�9�B�Sh�����l�f���o�\\�(_��?0VZ]=�\ �3���d�햌T&Ƅ��IyF��R%��^G��Đ^WB�H��P��hR~"P�/x�� 1�J������hO��Jpv���l�}�|'l7 ��tgO�-��w����#�g��^;���4��mI�ɘ%�v���}u����'�#n7� <�W�^~'��%�"�%�����`� �nM��Y�*�<gl�߲�8���&�4��r�a��U����Եr��{[�cO����͏�j�*�]���Y_��O���h@LE�ͬ:�Ɇ��:�5����a�X+�pn�e�+�R�p~����s.%� �u$���z!��e�U�!y�ڍ��Vvm� ������(p}�. r�E�S������[c!9���r�'_P�c�� 4�k�v����%P�e�s�n7G�����n������'�#r��KѺ<] L�` C�p�E��^̅�x���^F�1g�I�k��u�T�ou�2<���RѨ[�\��Wr�/�.`�%�b�V[LP\YF�>W1(��#�1ayB4���#"��(P��Je��_B)����+u^��߸��'� �d.}+��Uy|ʶr��,^�m�:\�[�W�<�r��C��}}����qa���~2�F���-�y�cd�$*iX�1}� &���u�3O{2�ͪ��#���?��� �=�J06^jU�i�N�bϹWZiXS�`T�d������<�lm���n">Г��,��_W�l7����1����6`�t"?�`���p*�0��H�������}I���|5b� �+�e�5Oy��}vx���/f4 4���l��7�7�%X��'%������B�5s����4�+�˴�;.��{�! PK �f�Q��[�����Îp�m���oG���ҪC ���`�pR/s+>�ƈ�Jʒ�Gk��ǭ���X��d�O�l8��z~�������ó?��8�8ðR��O)����; �_�uu�/2$E$��M&��L7:�G{��%+2�C�'���[}7�w>�X���P�i�-q���ԓ�}���:uvx6�D]s�_�~�OcK��0�L���l��� ;;�4�t���#�C�����A ���#������] U�)� d�$ׂ���vH&~y�rz9H���҆F��XK���O���ڐ���Zf�T�%�r�#ݗ6+���!���l���w�ݐ��Ϳ&Q��[��(�"�(�%��V���d�˽Է�_���_?�@�� �����Q�Q{Q��Ě�����G<�^�)��."ˣ�����Dȡ�G�u�Ķ�өԾǰ�ag85������%W��tZ����4�:Z���i��}98�x������)ylnl�Q�k�! EZ�֡�zL�`!���_#�LH��nVDY{}��`l�2>>G�(D��A��R(' z��`Qм�lJ橳�=S��JV�6�P���k��6���Έ��/��O1N����M }�pRUd�x����P�ޔX��g�ֈ:��<��e���w��S�:c�^�3-��#\b�Z��5W@��!�0�n�D��oڅ�r�:�0���¬s���RJ�A� h�bztZ��4�:�Q�@�rۼ��XͰ�΄�$+c�B�x�^��jx��� �?�� }���qaR3An�4�}�&�����-��2�n����B���,�0.NH��Et<���RX�\.V�GW���;;OY��"Kѩg����O�O�I&�s�?��6��?���e-<��f�V�JK�Cn�x�4���r��q�����S5����#�z`b��z�L�lx��b�\�K�ŧ:���S�����,f�Αv��q�<z�)���C/=�}{ǩ�"[�&�b�篇&����Y�˽��7qT9�FK��@Q����=���y������@��oa�ʬx����`��g�� $�g��,R�2�'Mhz1?P+�.�c���?������ �JcZ$Re,%g2(�%���k&��Db�hrG��}����"Y[11�>���H2�˽��E���s��<]�l��Zx@̔T���3˦z�D!eX({�e��˿[�1۟��slt���7�� =�s�?�?����o+��x6�u���n�ӝf��2ڊ-����B A���Rݘ6Z��,���>]�p;j�~QÕ���F�p��2�ڌǟ�~rbxu}���0\Z�zp����&cL.(������q�8)��^h�|��]�%ķ�[�!�^5�̆e�e.�V��3g7�d�^���2<��y�yɰ����64��nJ`�+&��N,�jBP����I�r92���t s���t=���G[V�����%��[fNC!As?�@� �@p'/|�BG�!lxj��� s_/b7og����.�cT~�_O����d"�t -��V���.�ٮ�/�t�����x�]9��{�Ks�1o�%�Ȏ�w�� �ġ�/���2�ئ/q�?�OBc�m[�(��b �ù9q-�}c� �&ړ�$���?�i���M��bzxx~���_���Zt��|gZ 36;<k)i����b�2b���/���ў����g�x�r��F]w\�j�/�@;l�MC�k��켐��2�ۦ\�b"'��ʅw� ɝX^7��(�N�!�Ź`�%������l&?�][�_]�X\���1� 9���VC��;�v�����~~��o�$1"^�y�X?�4.η���`�˥���BSP ���ɹ�}B�@�C)~�*��~荶���RQ��t����GW=�N�^�C��̽�`{}��Ni`!�sKvu`�m��m2�e�ʵ�YtK)ͷ=�Q�f>��˶�n���#����+���2*D�� =ށӵ��l��櫃���dX�>r��0�S�氍N7��|O��4s(bOc� ;%:��-�WfM���=���薗�mj�ri:l��m:�`"P�f�$��2ln��eB�`p�Fu=��J��YvgY>�^`�Q(��1ug�\��2��^n��c�o�:3&�'��-g�)4�@H�K�ŲPbB�����0�v���:�,,�,�Fa�6�RuR��Ƌ���vJ9�Nฤ��d�K��T�C+��Qh���o��V���T��Ի�O��=��C��p� ���_=��åswf�yl���e��S�a��PM����d�\�?����q��k��hޢ�������A�!��̊�4��[��MYeW$Z�ww��W���e����b����O���}����`�l�xm=æw������H��m�BV�fS}�=s��;�``A`�eGLw���H�I�R�2�n����ש��?_��sW�����?m"T}�(��7�In`���� ��c�˻�cpj��XT�U�ղ�z�L��1ӿ�>/�l2c��&�cu���Z!��)�/���}PưوApr�/����?",Y2�����uk�=�%�cl-� ,� 4��M��s~r�$dҙ��4]4����o��D#�rq ��6ՠJR�/�Xv�����ݓx�/�B���^����g�������XF1),6��f�����"dY��蝲z&x�Ҩ䓨���$I�Fݼ���O� �_W�{+Mg穒�\��Cf�-�� 8~9��b�B ��`�z� ,��4~VI��mG��6��Y�f��N�a�v)3�3���50L%#&[��k��3�̻��|乊e�Z����" �]J�l.~��Nb�4#77�j�l���LQ1��ikduu��^��{Rf ъ��@Q��}�X|�N� ]�SwB��M.dl2Bi� K�ׂ��b,��*"�j\�[9���PJ���� `���#��D��xI���3�һ�;?�:6����Gknu�̭=��N�m��-ubn �F�Y,��F�p�D�O�v2 h�Zԓ4$�d����w�>s�5+�DV��,��[���{#�E�~�cts �mζ矷��ce��\4�]ht�%����n l�B�+� 2���1��bq%��-�9�:~=���Ч�������(#��T"��s1�A �0��G����8����y�f��a\}�X��h��B=um��u�$���'�'$f AZ��DF��?�f|��8SU�n���j5��2݆z����@W_�g�q�D����`��rm� U���^XP����i9�5�#5�%�j�[NNZ!�QGY��t���� �g��b�Nh�<O�T��V�1�o�ľ�k�fmO���Sx�ޤdD�x9�'�Ƴub����:���w�-����5_B��(Yx��\1��#*�� ~�2�|�3�N�B���3��G�0�<�!��9`n�,��*//���7����z�"G��nP�+�-1�1_�X��r�7���T��}ŨҖ�������"�m%|��~K �ap���+���� &��NHa��$�_�y���_1���a�����3��44m�?��Ŀ]�-���ew���4mz�k���U���`��H̬�iv��7�V+�X�ˊR'ҽC'O�)%���V^ɋ.ĮO�%��v_Aۻסl����8'� |`�"|x ��qq>&���9�K`/�L��~�Pd�D���oE.���γ��y�x���TV����Eh߭�̜��������m�%EzG�-�vx�ţ-�I$��T&9��$^�7�B5P�y�<�iCb�/���VVCQ�X�ck'_�(צ6���f� �z�w�.�qȻW]����'� l��6� �|��˞����m#'����t��=0��&k��c�4�k� �!R'밫M�r���4b�٬�2�t�}���>E�xy~Bi>*��u�1�1`� !�K�BGW��G���YO�R���x`�";m">4D �$8��>��t�Tv�L�ꄧ!;N,�8��X����B��-��9��2A|}Ẳ�ߺf��r��B-�� ��8����!�C���R)��,pwh�6@�w�д@᯿Cf`\T<�2�t����A����07��*m���E4�I\�7`0zV�����z�U&�Zc֩�{�Xt/��*�]ј��Fn\L�B�{�|�T���&Y�������?2���N�I�A�+uG���)1���ڶy��#Sڭ�*��#�Ts�꙼>�T-W~��]5 ��f�S�]�o_��mOJ\��_.���t�Ȱ�,RdǨ�4T;������Bl<��F��gW�ă?��X���?'|�C��vd�RL�?�%�z��lcYq�\eRF���ƾ�DÀ�k��_�k�A-,RY���ιg��8�_I��SL�c8��A2���|ps��/����h�����3̙�K����j7�D�X�3�,+̓Kv���JX|��� n�o�5��n������}Nx�E��E����<1R:���X �zP�rO �p�7�q�a���p���R-��C[�Q���.��'��ჾ+�7��Ӡa���N�d>�h�B�-u�rJ���tYs�l߫��'eU�S���1��!܅FB�\ u���Vu��������D�S;�"�^#K�p;*��`Y�uR�a�e�+P���/�6�V��kG{�g>W%ָ&��u�������$��g�dl��~ݶ�a�.�J�4�����T+_*���+����gp'KΈ�I��K���O�v��|����aeacOU�3e��!�HD����%����K�C8��_����3g�����=+���Dn�]����ƕO���~�<{O��F� u�d���NM�e~�d�wI�_ O<��h�Wc��@�'o����@j��Bl共��)X�i�G��h'�&;R��e��㟖��ܻ1iT/B��}��?971�hC!����ÿ;��+�>x�"��Gu��8%(�QɅ��u��[i�����Oy�u��������U��s����� �V��g���8fR�L����?��ܜ7�Pj&1��!L�z$�ΥE��~���eC����Yb�S��q�*��})(�Tz��BDž���b�Ŏ�5�@4���_#�kڼs�o1� 3��`�f<ka�:�mLf;38�W��j�At�2�h~� ;>3q�8+��堝��6S�\E�w����Q_ w���.��l��RFӚ&@gz��Y�M�$��P&�z�E��w��p��j��Z�;�ʰR�*P���6��-��� q�ț4�o4�M�}օ�xՋd��ȫ4#��HՁ���T��x��iPlB�S��Y/�i�L-��� ����y���M�Nj�C�fOgo�����X�z����H�E���˻?tԝ��6)�C�Q�"٥�i'�v�#y��f�;@�4���F����0"v��W�i 6�*+���i�s����|><wdB?" O���x��G��A���L��vc�p֊,�A�b�s�S �e��9���6�z�B�7ĒH�<�t���"�"��D�|�h�; !� ݅nM�<��f�%y���"Q�0D&xE.+d�����o��`�ݔ!?�pЭ�,�2�yD"�7���a��+ �a�Ba �B�7�̇�}�,�o����"��%��DT�p���Q(�g���B���v1�`��|[��w�SrK��a��7�t7�@y4�X����ߔ��rk(A��xr<�����$W3��� ��T?]ϼ��(/��u��a���ӛ�Ns�#���~O �b��]�B'��+ � X}����'1�58�Z�����i'�M"��'�@\B^�U0 4s������t�����p����7Q���7��/�S��sȕIr�C+r* W������[v���y۠v�A�W0fW�J���Vj* �XbD�9t#�t���RxT��%�-?$�%p�(�Xݱ_S���;��E�Q�;ڹ߿����åp؆m�P\���̊s��Y��5 x�����;�rU�:z婆Lx� �bmȴ��/D���Ze>f����Jt��ʼ�8< �GՈ�~��),�&6��&Tl� �J7=iڶ���,��!��#�����JYBZ�b�w��(-��͎��^��a��\�z�k�Z}�*���gr��=��Z�P��a������f=�����!���F�[���-���� f�x.Z[�l4|��إ��k�^O�F���9�c�u��ţ��� ��,��v��γ7��F��_�LH�l��ק�y?B��a���hk������+����Ez��H�=�D�lx5�uI-A�fN���(I��n��D������0�_�F���������m�������ƅ��Gm�O;dZ��� �����]�]}�v������HN�D����ٺr�0XW��"�87��~�c-�Cv��= ��7��b��y�S��^X�n0?(_q�c��-�kI����/j����?F�-ᚧ�gKH$�<�<]��~8�)�5��9��F �(!*πF eK�/+[��-1x�_���>�4�����W����������&?[/ʙ��{!L����b(�@0V7����<�?6O�p�l �<���D�fF [�f�61'�b��(ӄr1�Pه&�ȯ�&���>�OQ�a�eH�Cؒ����4��"�W��UϽZ�^��_X�,�5g|Y���~P{U`"��7�Jwt�Ͻ�tCv9�lA��-�odB�dؖ*�B��%�3��Y�Ƚ ,H�J���Bc�1��Pǭ�W��I���x�������p���;�M�<l��V"V��D����o)n#X[ �D�p8G`�����]� +`�B�>Ѷ�� �k�Ĉk�k�GbdT_�A[<��ơ�P�|�\�_5���c��>��n.1��Wd�%˹��u��kr(��J0k_ ��Ɩ�^p-��5HPCM�t.B�f�݃��7�4�!Z��p�{9yz �v�y�D�Nͱ�N��0�ǖRM�u �[��h]ŲW0��A �W.[~%߲����8��g�7QëƗB�`H#y��J �V���`*o� D� gb�9�4\Ք��M ��ȃd�l��J��& ��Ά��%H���t?|��K/�ӣ��藓��C�"��s� �O��G��MG���Vş\+_8l�8���4u���"���aY'�9R�Za�e�������>0�!/���R�q���9��A,��I i����V�7�nKݸ4�$���<e���~ˊ ^�n�Xܔz�D �暝F��G �g*�\B�PWHwz�Ո�Ѓ�r�M����y6��d{�8�CH�1ogpc��Gr��͵�P��r2Q�8� ]!<�:�ם����֎�AX�B��L>�d�3�|��W�9�洿�t��y�� h¼n�_֒��o)5�'n�� ��?��J�o�_�V���l$��r��jG?rǠ�*�.�6:t��4�~}��RU�ۅa]l�v�Q�rF�R��$�5 �^���8W�;e�!���b�cB:q�%1���FW���K���F�f�Ў��b^['�U��}Nˡ��ƃ8�q��e-p����~L�g>��H�����es�0�[�O6`���.��E�~Q�d�Uh��EҕuU��1)�}�W]�c�u�j�sdx�5��R�����_g*}�%�`�w�~�o�Jͳ5X���L�r"Ee>KKQ�Gюg3� `��H�����4`wi]��]�I��ڱ�V��t�s"� d�S�6���XyK>|�ҧ\���������j�Yc ��wC� R9�,��+�Ԛ��8���.PL�5P7��NwF-Kv;Ea�-��K��X7�tGw{-���α`L�sU'�~�i�Q��� �s�����pj�*�m~y���n�Pkx[�c�2�X̗;d|s��?��i9�t�|�,6��:��^�^�q[� ��E*������ּ��#��U #��K@�a������p�1]Zc�0��e�}�J`��}e�@����ZEα�ñ�Jg,� �����vh(ݯ�I�R��%�~��S�&���?�pH'�I \�nHW�Uq3���3X��B��0IW�U�����W�%)l7���1����tC=Uf��p�V���1`5�RU�vsZ~X؊���� 9�>���&}����I�.�_�2�윮z�/:+����k�$q�{�@o�����=�3 ���N�v�G��A;��_ɑ�n0R�7f��L�A�ʃ�'b��.)��^i`�}�5���TceGñ��N��!V�ʋWi�r�}�������,���-P+���r{+�G�ELN��t�C�(��m���E7�v��Zy?���b�i��o�بkt�ޠ_�U����Ö��F�h���:]���A�v1���hH�H�Zy+�p�1��߆b-|2o�RG��OsU�q��6�1I�T~��G���{ǕExU�vV"Pc�y���*xS$����V��H���xim����3j��h4o�=��X�N���zkk������7��Se�z巗w��*?��ng;F�3��K]F6�es�j�O���9�+u�=�f��&���8#�9Rp��I�;���|dG�ȝ ����g���!��J ��n@�~�����?cj? ����ȹ�5�o-P��h�J�o-�t�ʉõ�.�� ��ϸȱ�������"�A�"��� Z.���c��Y)��zוJ���*z�V�MIm��ȭKZ�xy�n��B夘�JP�ʪ�YVX�]��t�a�N��Qn��C�����H�f�����~ʜp����̭��]�nHW�Uq3Kw��ɼ:�U���B�1 �H%Mq��X#ү��z#6cȘڿu��@*�Z�����}s_2�N��n�U_�Gҷ1�[�g1�l�-��JP�T�d�<�#{tn'1K���:��K�&h���/�.}<�o�ya$ eq�t�����`��r"�Ԡk�=TCCHC�c�w�C��ӕx}� �� �R�-G}PD)#R `���qQ�A��J��x˱ΠM��C�9���`)9�Lg>R�*`��Z�`�³M_sd�ҩ�@3w�Р�S�����m�@��m���� ����_�F��������z0���V�K{ث$*27|�<�-Q�{�����|~,�E�c�A�ߊ%~��}W��:�h=��R��G�m3�L���S�w�S�6���H���::��7��.H=�Y�o��T��3��$�) 'LNzY���|o��C�w���~�2!]�of����HI{�����6Kh�1\6�۬�B�b�%���B]b�4k�;G���w��[KQ��~t�N�~������S;G0�>�`Xi�$ك��wl�Gc�# ��1��+����gן�Bbp$-���IL��ђLN@ģc{r��R�U�;JG��yv�8��Ž>��i1�8+W�V;neOU�!Q�p��K�@}=��� ��'=���`��V<</��۩�4i<P"�4�0�9��K��Z*�wE�{�+%�H�#�U��4i�J"!9P��A6�~@���Q�����PJ*}?Pyj:��|�����\�����P�wT\XE)eut�S�H����������^u�Ӥ�0�=�켃w��::R,�����ӄ �)�(z�~Ye^2�P]vg�.z�2�,)��:�vL��4�C>�F�v�OX�鸠�O(ީ��˨���0P�Yn9hg/D�=��J�>@삚,�+��xʛ`s�s�|V��9IFl>�J�0�h�4"\�� �dJ9U���c<�{W��T�0X��թ����ݻ ��y@�-��an*s��S8����Ir��2�]��A����FԞ�g �$}�Ϊe�H��/o�KKţ$L#ê#��fe&��uzp �ۛa��%�ό�)�m�L��k�;�=�/?�W��z�UsGq�j�X�63�4Hy��T��1�S��l0��D�����'�)m)0H�1���jfk��s�4�é+�}�FOz�fi!7���j�u{@B{x�(�j9����%�K��!N+��w�M3M��F�����z��K�,�L�D!�b��X���HIsi�ed����v��� �C�E��zG�G��/�RU+߇ז��#��[�`�T��F�"`���~��K5��!�-�q0��{���ö��)�Sۣ�uj-��8AɣX��Avc�"k�ty��۰���*g͜ [� SaE�J�f�3t���%)��;x$����Q}�)��,G#ד'�W>E�!���������A��e��c����M�"��kl������צ�e��y ,�QK�_�,�O2���Cjp/+_g�X��T��ḙ�o�/�G;=�씈�c+q�(�⧢�{q kxm:[��uc��d��^" ��z�W���E�98>��������M�;�� �0�o��W��k�D/���2�������T�1��@~�U�]��!Q1���C9��~2��v�����c���0�ٖc������Wu�� ���/��8��Wu6�C��g��ӗ/�.m���+�[x=��䍪����r�8�/�'�Q�%��zNY��y�%��`Mx���qei�`�W�3�Po�E�<���E`ă�a���@�a�(a�7�[�J�q? ��֢H��IT���w�q�P�LĮ FF��EUǠ /��h �J�k��A��ϊ�ٰ&��<�}�#��e��˄�TW���KۧAa�����G����m�|% ȭ:�Hjh��H�,%U�0L�me�a�2�fW�*@��Ct�������9�i�K���#a�.�'73���]cLhE��Y�;ؤ�L4�9�X3��j��CaV��V ϥ|��4AY�\vP��kVCz�鍅�:V0�Z .�J��*:N���wi��680}��E,w/?S������٪E��ޒUU�2�\CEupF-�O���r�M�a��5ѿ'��)�A��up2xn���053��_�p�JΩ9���W��x���g�?��5>�x��Ŵ�=I��4h�s�`�Vh��F�0w��#�L%���4c�:���l�?.�U�v�I�9tc8n�IX��n�������xV�;�����i�Ç0d �ғ���輊�`G):! �L�L�x\���b|�3hb�m9����{3��=��x�z�x/h L�㙳�J��׆�'X�\����ꪛ�J�>��J���>at�;��f'�8*B#eR^0փ��vPW�����x�c��r�r��5�R�Ȅ��`�{�5������"�0��H�?[����vr�f��S���6V��ZP�x;�,�i�4��zt߱�3{L�2>{�lS���F�%9n��X�����W�'�� @,��V��>���@�Gl�y;3Eg��] �&��=�Sq�Q ,��ߚ<�Yc=d]_��u�ŵ���'���=<����ㄣ��q���lĺ/2�<%�`��b�v_��;�F�2c���jۇӹ�0 <�=x ����_����P�/�E B��9���KDBtT �#&T廿q.�ŘN�f�%�_Lc���G{_�c,��ɸ2�7S[ ��L�� .<�<6�K��F ���j�uܕ�&�]�r�m�� �˗Ű�[���{*�L�d5jh8��O�ӗ�o��cS�ć1o��$��E�I扁4�<�K�n������P!'�Y�v��r˸ )����q�/��s�8��+z)��Fo�+Kl<�}9��\N�./�X�_N��HDC�#b"b#]~���ղX�=�r�;�`���=���r���?��� ?��83��f�&��B�K<ɤ�M>��V��f���S6��-�Yh��>��=���Ϳ� V��7jx%��>?�X)�ܨ���xx5�]��װ�5m%��ײֵ�}��}��{4�^pn`��_��|�� ێ<vj7���DCap��`qx�D�Pit�U����B�X"��JU�՚LC� F�ْ��!�F�3n¤)�I]̚3o/�5�(#+'��H"S��d�&K)�������f ovJ������-�J��HL�z$8�1�IL��cfbfc�b��|��*;H9� <Dy!C�.?��� �c�#E�5O���bƊ��q��_vK�(q��ɒ�0g�T�ӤM�>C�L��d͖=G�\���͗���[A��+��`�J )Z�x ^+��@LA��v��k��[jU�>�:ꬫn>멷�R�7�w�ŗP����y��x:ء��b);��R����%�=щNV�d�/�<Q�w�3,��� mԝ� �UW} ���X��c����涵ut�ή��n�`����_}ݝ���@A�f���>��������_�Qw�;��^��A{T �F�?JS��j�E��V��q=^Y�A��-j��U�� �����# "!����c`ba��������SPRQ��>�t��U绮��R�4:�0f <� �}�UVQUs�ƭ;�<z���ؐ�����c-m]=}C#cC��Xe��@6�v��N�`G Qh�'Id �Fg0Yl��EbI E�FS(Uj�V�7Mf�D*�+�Z�:�z*/�ny�:E-��DXĚ�"\���`6NG���*��9�GZ踿NqP3<���B��:��=/�D�L<��F�%#��aC�U��^f���/y�d�#?$U��M�R֍�� -m��"����RM��9`�%/c��[�{�9�y�A�Q���ٓr��.��q�YNv㠖��'���DṔa�d��ʊe �9�&��J��d�9�k��R�\�E%�������C��.y���}��A I�Ha�;�w�:�jlZ)����گ��AOhSlTd��A�V�Z���@y�,�n" ��vK�>*dpr�gp��R�,^��&/i���7��A�� ���>Ԭ��7���>�P�2��_��&S'C�i�������N,�C�څ�\���9��hmh�O9�&a�i2m�rډ��3�H^u�8���p��YPd��k{~�/F+�f���洰h7B�t ��"��Ai��5�B�(%��� $��g�U�\�t��Do� v�� ǀ`u�%c�]Ml���J|�UcPTP�L&��c%ޓTf�8U�i@a,�Kl��Jo�WF���8w.v��[]��[+5�\��]$��^mа����Pبv*��8n��Vwl7Ť ����/!9�"�_��8�p�]�e�D��s���}��p�?3AuC�)2yʠZ+TL�V��씌Mfc:ARp�axy`^��Gij>~K�(n��$El3��w���m��G������>���`��O#� ��Xd/6}�����;u�Q��y x�V�� U�����$�d�3un�r�K5Z��!8&|�~E����N)DΙ�����K��O�|�k|�D�����c;��!�2��[b) ��p>��$��~�P0:�9G2rȃ���&Ћ.��\ZԔ�<a�a_�p����y��AE��H8��L���u���c�H��g���֢�H�l�hROb��U�B>�9�(g��褼�2�TѴ�[$Z+ct���ϣM������[#�g\&'��,��i�*%��e|$��I�,�'�>Ă�i��>��� 9&6'�ѡ��3'l�F�`H�9G�IE�����uC�Ź��z�p ��#��S�u<�e/u�r��c��L��C��P3�yK���%�/�*Yf��1�$��[��G5�"hE[�1�%pv�mgʘ���S���)5jC�yk[vn�4:�nƄ=�S�B��WGl�?��z�ӌx��1��K���"ƍ�4�\��q\ fV+!h�e��A�,1�fp�l��T,"��VJ��"�n��&8��N^���@Z��l��?0A/7�z�u���Y��cPF�£F]� �O�E�,���$���ʊt�c�="�V�N~����Z|��;k[:�Ih�Θ�����{�&��r"ܚ��4}���>k�bvP/�x���22 �^4g�+���N"��#*?�U��X�#�V��Ԏ�_J_j�+=��qy�K��Ī�f�"�R>� ;Ui��4 ��С�^>����Vُ�w3B� ���:;] �L�SNPac��?Y���F$� �`�v@�-�?�i_�z�3K-�f��א�e�X&�D�ZU����q��rQf^-�\;!+�uW\�:w>���R�ڠ06�Kt���wk���-��P9!�ɭ\!�a���R�ӗ'�E��m����Y��fݕ(;��!��9Bs�\�m����)�I����)����/��]T�"T�()�� ��b�"�]��T�W�O�0���8�a�f���o ��6 �SQa"��c �C�hF�#��G\�KA��g1��>�!3مY3��١L�'� _-��q\��X[�A��n�/��.+��Z����2)@�4~��R��ZL��A� �t���uO�~�>�.2M�X�hbq7��åe#.�g�VzPz��[�K��/媬V��y��c����.�O߉�À�f��S���E�W�W/_BKk�7Y�����#Q4u�����*k������i�R���u����`*�9theme-joomla/assets/fonts/opensans-aca37ae7.woff2000064400000007244151666572120015666 0ustar00wOF2�xC&�6:`?STATZ\�| � �,�/6$ �&R�+�XK������!^C�Y8�w*n�b��ӅT�[�h?��sr(/�uI�\���[�FR����I%&����Q$���[�>�� YM�-�<���͋��ي�<�VHLĖX~A9�S,[s�Ċ�2�$��.��j]n�(�;���Ru����e�M��(� kf�&�ő����=��r�|۹���M˘?���B_�+m}1s�-�F#�c"Qu���v$��(�A�eRtX�4�Y��ٕ��~\�BvH>���8X��ԥ�2e�����C3ڭ!�����qs}ގJ �ǩ���6.��tfv����ٴz)���/�7{5��Yk�c����j��˖xr0�!�7��m7�#��>��+�_`<ƀ}3�B��83W۷'B��}���W:��F@�$��&�I�`���q���D��9e ��#ʃP�}�&�ד@.0��ہ� xX@e�qZ��](,\+ ��R�Uq�PT� =Sl�D�$����1���0ȗ��Wv� �\^oT����d�e�d�û>l���ʄ��T]��2d_�o������P��׃��M�W��L3��|E`H!:z]q ��51���M�t�+U~v���p�$%̎����"Z�K��"2�p�O���� H����I���"v�r6��h�����c��e�|��m�,�,M�(xg�VRpF F��}��<�m��q軶��R����,W�F�|�R��DWv�<��*i iϙN�e5m��l�� ��.&2'"�*Vj�������e2��uYkG��9�Rl}��5(n��eS)N"��|��(-on�����1۲a7��EOr���|�&�b 5�Je�F�����p囪Oc�;J��!���1��>�ʚ��w��7-�ِ�e�a$6�JT�&?��i���ܕ�B��8��:3����F�*q) =X�ְz��t�ah��2=��3�Og�R�+��Ve�S=�MPh�4�������4�0�����5�E.�[��̟,�,��ͬ��(!��x��D�Eݒs֓0�,��K�7i:���*E`i ��[�r���S;C������לT�P�Ϝ'�V��c��w՟�"���v���*ҁӬm�k}-�d�O5�X�Y��(=�H�^~���q�³�ʵGW��{�Zc�����˭P��f۶Bi]���P}/�Q��D�=���(��5fz�М ����w����qF�ܓ9<"B�u����H��1g:�c�$�V(��m�Z��b���^:��b��s��کf4�yd�Z�+���O��"�[���&H{0 ��6��گ3̝�<။�̢q�i�ƙ_�U+�jh�QJz��1�j�X�jx�o�ay��W��ݯ�%���&B��}gh⯝���M}��%#X�eQ�}�"X��>���b�F�#��z���b���ƾT��#�8�=n�N�4�n)�P��1��$7����6�ƫH7�7�ۮ_� �t�y�cg���X�Y�q`�骸���Ww���rG���)��� ܥ;`nʆ$n���c�0m�p� E���6���ea��b�8�@)0>�,QҎ��X��)���Rev��# ´`acK*J�+�n9� ��`�PJu:��$���v��!�H�r�2�->��`j�=h��] �F�׀ݳ�B3;Qt��y�`Θ�g[A�3:IFХI�V��H4��h>�R�z7�[ʁ�]n�z�����%5=�j�JV� ��� ����6�nkO�4�"-���2{�����0^���}�h派~�ᆡi�e lcܩ�D��:�3����ك��Z�`���Nu��y�0����GrO4^�4���tưY�@w,c��9�����G $.CI�UvQ ��i&�eCJ�#I�Q�w�o�Y���r��aw*L��{��A�����������9_Go8���"� ����Q��J8�H�p�K껠��+x&t��p#�6��J�0�xfn�d���6�>�-�wv�4Y���V�c0#n�f�����Fp�1_����-�eZf��J�4�ǥ�SIh�]þ�u��^סv�B9r���Of/Q-�cN�Hž����y�����^^#�إ�t��|6�A���<@�y�H�^d�'; <�f�).�Ě�R]��:���[tE��c��k�J��.l|��c�m��о X��#�� �YaST�+�n6 �g�1�?Ҷi|֧P*o���/&w��-�c�+`4a73P>.H�K�`�Xu�V{;=R�N�U�+r�)%��MQ��7r�`��]���W��Y���3��ҭ�~��!7�e��.`�C1��������6#C0|g���R6�h���m��4E�)��&'=%g�Ȅ{1���_�=�H�n��j��!��F[�����ҵ9�!7&�2;J�~��$���V'��k��IwRM6fDRS蕩2� Gqy��%iH�0\�g��J�����e6q�y�H �詒�&�A�~Z�*n�n�囯�(�����|������^�7���@��%�������6�}y���o���sD{�����Ⱦ�Z����|�����%�?1��������O[�u�~vx���=����~?,�6����L�5���wkt.��t�U��^4l��K�\gӶ�]{ �!_��뗬lx�cuh��m .�e�H��;�~�: kuU�_Mˤe�ow��I�rg��hپ}����(+s�N��I�g��myY����!��c_��Ռ��y��[�>������s���I��M@�G\9�)��"b��g��!��ʾu��K��JI]��(=1(m���=(D<��8&�Q��D�J��Eg�6�Q���8�ЀSGKh��ш�:����; �h�B@�a����\*ש><l�gG3'9�f��,�j��S�R��W��_5��5�|���K�O�Jj^��v��jK�p��Wj��>`�I�E#��ի�6Yn[sKbvʵ���ˉN7U�3puOz��o�v<�-U��3�Je!M�}�j� y�֟�x�ئ��e�!e�f�K^�t��п�3��g�I���3��E>Y1t�Re:�9�,c�<ȴ,I�߽�X�R���o�EykB�!��"���i��_Ǧ��x��(�_��?2��ill�����ȭ�pBX6�6�����`E)�i���c��a�����r������(}c�1��l�c��i��7b�نN'V݄E��Y���j_�*۩� �*��R� [ɭ(嶐����� �MH�6�DD�\(%����0�#n�{8D��[m�"g������#5"Ԫ(TT�`�ڠr�HH>w(��wHv|/�3Bț���ϲ1[����{��%9;1��)���c�f�0 �đ�/)���j7���H�ij� Z(���Z�i:/w&�c��n6�5r�7�C�����/]9�w�)����c�/m9U����ʝ��Zb^��uX��O�.����2(�HU�{�������theme-joomla/assets/fonts/opensans-42a70f50.woff2000064400000025534151666572120015445 0ustar00wOF2+\R*�>��X`?STATZ�*�| � �0�� 6$�: �&�\�I��#�(B�2��.�U�E�q��;���&'2�`[�jdXU6��fs�C�BGք���e[����^|�la����c�+b�)➒��4e�a�Z��^����F6�*��=��}�k��*�Ԃ���A�j���c��=�t�=���,v�7߱I�͎T�s�X1�0r&��8Dc*X�=��0f���ތE�o��r���$�֢�j�{�5�< �$�X�0H�O�gI�{�}���d��#hF������,��?���O�{�a �4��f�e�4�,˲3?��E�x;��sٟ��&���#�2U�-����nW�S�Kk���)�� #PD�&|��qӫ���$y�H�+)P��]��ƞ뜹��˟���m�R�X�h��~i+Ƅs��J�V�Y�� g�Kun�IZ,Ǯ�%Ou��"����|�6�(2���2�&vA[�9Q��uAd|�(S6�z3�������:�<�)�����qAd-@����͜�6� V)�Յ�.s9�h--F���ժF��Q�,��U��U���n�4��sL0�fS ��g���=��lB��+6Im\���_ß��B�"�us)������q��.�2}�|y��j@���t&=r#ęg���FaRMܚ=q[xX��]������2��i�h P�;�Ѐ4���<$�M�G���bCL.���� � �йA�w�����;y-��|^ș���Z��3[�!��$�33S2.��A�x좤w#��& �k7I�ħr*�T ����96�M<�q+����r�ƹ81=�-QQ��Iq(X� z�ƃ��( �� �0 �P�=�r��X����G���=7�Z �AR�dB�Lf�kڴ��x,�؉xӪ��6�}�F�K$Y����L��[��-�Jt�J��9dEhVO�bZ�Y;}7!6�.pi">ƫx�}d�P�H:�6�6r�XP��\�I@j �Q_b��]ve��tG`�{��GS��N�n\������J�r�a,'�'Pڱ�7/�<����O@XQq���pXr�K�2K'�?Pr�r�#(hhR���oV�[�����T� �H���� ��B���噋\<+�����.���~1�QEQ����__��]z�D<�|�`/�zթ4ˁ��co_��m���2 �`�����l������%FU����~����"A��<yz��i�1!@��|�>��'d�8�g5���?d��*Y=�/�2���G��,8j��ȱ.}�>�[�)L�UP�vC��j� ۨA�=�xƞ9������g谺����p��TP�V}Mo߽�#�yyjW]M�È��2{^9+�i��g�3���Ͽ��h"�E�ޒ#�+�fwz�:H�n�-:�H/�XZQ���؈�33�@�Bs�cj �?�+bU�V�M�>�a��H� ��Ng��N#N�:GKT�Me���f2��SwM皩רI�����D�J�N��(Q�9?�2�*�����/��� r��@ ;� t�>�z��������p~^nNvV�0#=-5%9)1!>.6&:J����q�8�BC���,f`ßR)~��>�^�n�^s�Ru"��\�����O\�)֣�':y��.\:B>;�J��X� [䐮N��J�}��E2�>��F3MZ�Z�@�sƓ�o�U�.��VN�N�i��.� �{2���3A8���D���_�q�y��eY�[�Aқ�gbCҫ�=pA9Š�+�p���ص��'�`��Y�u��ϗ`K"hNj�h��56M��p���^f���)Dl���ؚ2z�p��w���S4��c�+�Os�c0�s��Pc۩�r��65or���Z��e&ܸa���0����s�V ��ꑺК�t�>���{�`��=>��c��w���^�Z~����o�ЈU|Z����x�dn��lUhNUbb�d�����'��x+�%�P�"B��t;u��]�ie�0��p����3i?��W���a5^G���ؘ>Z�4}6�b��t�����ng+su�Z �`�M��1���ྼܣ��s7U������H���ub�4Q�~�8{J���[�`4����v?i�"�cٚ���%r���S�$�Z�w��:T'pϻ��$�����&I�m����˸��sk�*�s�m�}/���ɣ:�ҵ�,5���#��O G�3n�~��V4���h&w'x�}ZFCKot~ z�y�S^��8��2��ܼ-����Z軽u�z\U�<)��v��W!����T,����8�:�K�ק:A8���Ґ"Q�� ��m��4���nI{b~?�� �_D5 �)��7�걞VIU�e���[kxX����7A��)B�{,vle\]H�Ă�J �Q�;Y�[*�Mt0��`<�d���+Q��ċ��c�֜4��<���k�[�Y�м��/Z�C��;m�:�kص!}�/���;M��E���|f�νԬOX���Hmo�S�X� g��-fK5d�(�0�<�N�N��x<���Qר��#��w&��%S�cj�'o;��2ig�Ɗ!h�AȲ<��C��NJP^̠{h��͍��6+3��`�O�����a��m2 �����ۏ��1%PB\HD[Q�Ag�&�K"����<��v�)���C/ɞt�q��F zO;���p� ��V�}�tng��V@��g`��cw�{�U��H�-�&�8Zފ�l�v/���N��?� � B��P���P� h��*�jŶ�8�Ʋ�e��n�Y�01 MD���tR�|��j�npc��1a ����Ӣcr�{h�m�=�1+� �<d� �\�1�n�Mɀ4'TP|�c=��d�� s���?v�:�|p�Æakߒ�|&H+�߱��!rw4H*��_�cO�Q��(Ʀ+��C]��o�wV�4u[�P��첇� ��hx( ��4/v��*���-I��e�.!E�b��3W4D��Ds9�=<��S��B:�O6��ͮ�ۊ����gȋ/���Z��K����t�]���FY:ߩ����@\|���dB'��-(����i�VA�݅I}&J��)��N����\~��M�%�ۗ1�À��7=��֯�&*�i�S�,�,^�+�O ��HWѺ?0�S���x4���c� WT�Z�:D��� B�N�w<h-�R�\M��4Wk���2�#�>�Ա:7;��o)��Ju�h;����U�`}��Y��Kh�he��gGS� ��&����[��^k{��UiO*�`Į����}ئ���%7� �s;*�Co|�z�rzrn�bE>�ƶ��� ��W�7�.�e�>�)���`TvO�kZ+»ֲC_�l���ȿ5�͝>�O�8߉��r�u���]�&w�Jd����7Q�E��El$L7d�e��C����C��^ٳp�`��W1l/���7�3."����ų�Gw���W�`��s����?�!V�#m�gat~G�/u?��M*"�4d��Mͦ�����ɘ�Ծ�Û�j3o��-v�� J(��n�-?s�=Qj�*,%,֧(4VXIB0�pYjNT!q[`���V���q!�bQi�hR:OA� Y"�b��m|�.8���?h�M�0����V�Fe/��PJ}={c7���H��+�ؤ��f�]� 'T�vK���.��#��FIY�Z�HN�"�Yww������y8��L�O��(uH\¯�%��~y�5K[�a���rYz���1�~��m�s�! YsfMʡ_���+ ��o=��O���b� � Q��"56�R��������j���D�(�_G}<���䔏X��}���=U�M�I���cY�{��j���/sӬRD�U-z?��%[��=jҢ�C!��% 3(�j��s��Ĥ��0aɸ�+�j��g����L@�8�&�/wH�"~����9Ȟ'w]%$��-c#�E��%fR�R���\�D���߱Է��ƦAKswL�%O�y�4�S����>���D?f��FO��\�DQ��|6�"W��/b������Z���C����(�ެ�Hw�>�`�V��:h[�AKP^�$# �B���W<�`�@`ŇPI��EҚQ��y��N�XS}�Y��n8Շ'|�uwl�P�����v�Gk���W��;"��'�zj'c+զ�>�ͅ�,���Ц��KnEI�b?-�����MY���pa\Ξ�((�`%**��S2�_���.�z�6x���N��$Z4�>P��BĤ���ڻ�!y��m�%fL�0���'��IƘ5=�A9�q��uv�]gz��h�VV6a^)0}�� Iz�>�P;����-�ѝ|EPv��G=����'c͖3�dEԈ���^ͣn1��U��@HK�`(��h�0/��HĹ��D�����k��GW���dA�Sϣ��yZ��^WQaf�a�%Y����gA#n$�aGtϽ�����k!�@�|�u�p-�5�Z�J���4�p����U��Q1(\9�$�5�K���+��,�;/\�sk�D�j��:ȗT�k��]�Lk!.�4\X�V� �B���[Uy����*�� ���]I<�*������Kr�or��ea�{s�&v� ƍ�C����r�T �A�Ob��j�H����I�`��@�S�/���Q_��'�@c�L�%�~s���a�\����F�ѱ�����π����a|�� 4�F�Ś�y���md�4����Oÿ�W����a���KRՈno�G@����He�Z ��~k�oCV�$U���ZO�� ��;�c�@��ePq�U���ƛ�g[(�o�����X����k�h�-d��5Ϩ����).x��ծ#�S$��ð��jrh^k���\MA�-n�~W���@�ǎI��f��.��*o�I��+�kW��6� �>yu��g��3dH쵢�:;2�H|�C��V��_6��=�G��g$2 o,^� ����e��H����r;�r(�B�V����ߺwvicФ]R�=X��m�d6'���H^B�%Gq8`�>/-�~��5�}��$�::���dvU�j��w�f��_-�\�s����_�Ӵ��;�f: �Ѓص�_�_�ja��M�����s_ú�ƛ�����hz���۹�Οˁ�.=2_V���8b�E��,@P� Z�ڒ<|�l�v$�-�Fl,��ܿ�.tR�M���m��#�N����'͛T��7̑3�.�+|�V��#.�=�Q\�C0�ڍf��²X��B��PV ��xk �/}�P�,ѳ�<ʐ$,l�bߊ��k�x��B�8 I��"��F0����N�.��Bbͫ�Ɣ��暯e`J����8�(#�a-���u6�C�k��b����п�`��ӭ�LWn�LT�_���Zb)-�)ۉV@�U����_�Q'�����j'��i�ݾ|����{��K/RY.5���̌h�`G�53s�-�up���r��Ѿ���M��S����7~\g�0�ٓ�?�L2�1���ʝ������㣳-G��ŋ�=�ڮ�3��Mg72�hq�%��Y��u@��܄�n���4W��$�勗g`?�u]����s���&a'S��Ӂ�F�;���?_]��gӻb"�Nhb\yB���j�/���GՌN+��d�>mr�e�/1S�[:S~��uM�o��*=�tL2r`e�8��6x �wA�����Z�~2?�H}9�p��L���[�P�2Mw��iT�#aV�3b4�}�j丣�� ��;����� s9��b|ʦ���4��I\�s\1�\%�x��՛���k�O�HJ��?��nw>2J���l�L�;��,��ԙ��UkO��}����y��U5�f\l��t���⍏��/&{��h�Ư���ܛ�� �\��ީ/����l��kZnz�It�HU�8Y�S��n�$,�����V6�&7����z��ә5�.����뷊o$�<����:�$.�^9ِ_� �T+�c��bԾ�}�b�0�G⽉��c���#=C[��s/��[�t���t����,(�W�8�X�I�'��%L���C�,��`B�L�Zq�(�o�N��xpypG�>ova"��kl�ob� �%Zg�l�G�ј��qr��4Č���Ce��Od/���<_����^W���f�^H���4)���x�U���eֻ&�^�g�O��3�n��_{9��yObBR��A���'���×���n|i��$�(������� ��O�U�6�֩~�V��K�˾�k^�<�3��Ǥ�u�'5�RM~�+�q���B��㗻����9����vr���SWVť�V�y��|��*vL?yH ��s�"�i��&��r�v"G�����\��{A#Dk��v^��4n���<MX�C�;����^=�S�5����`�~�U����I�u���]�����R]^�з'�˪��h��#����Ӆ��^|/l{����`JO��ۨ�<����^iJ����w�S��"��^;����MW�K�Z�a��4��`�|iY'=J-� ��M�=n;[��FN{�_̒ �EJ���Q�T��awf�[yع,�τx�PJF��d�t}NBhH�:���=o�u�J�&e|q�N��V3t�8 ~c����jX�D[����rxX��C(L0v$K�u�����Ƚ��#�ӊ��� � �����{�܃����Ή�9��4N���wt�ӂc�<g��MX���*�`�������I�Z�E�)��Tb�[&�W���5�ҹn����T����]Z����L���h�։5P e�a+�e��'l�[8���6s�_�������.(�YD���e��m+����� �(��EB*�G�Ux-� ����� �*8"xyq�z�|��<����n�X�Q�hSuvV�z[afZ�w]闞��o�ן�}���_H}������~�^���F�¼�cb={81��?��Fׅy���,�R��<*��D�Vg'N������̩��Š��섋pla��M-&9���bфhK4)Rz|��.���!x̏VM� x�u݃W-������x%�@�&3�t7��u�y����#Xt���l�zT�ݘAL�n�)^ZA��V��u����<T�J���;`1Y�QJPHV:,�=���j�.t��DFo���j,�+r-�Js]7 9�S���b!�k..b��t�yI{ŝ���2���Ġ�⿻��ߊ�lzV���۩l���6;!�b$'�b0��f%2,5���c|��{ލ���c��3�9�ا�;ס,5�9g˔.�rq��i�E�Y1�訜�wbk���<��n��2 /m뙷J�-T[���W� �{����t��ϏĮ�amw5�)W\��f���a�Ȇߥ2ӝҢOR��o��0�p�ܺh��Pu� Ht��;-�#�ˎ�zQd����{�E&ˬ3���M�n:�նew�fp�S/&^|?\����?w�B�Ms�F���-B��?R$2�i�q�I��n�ֿ]�9�-v@� �% � ��Z��7�-�}�h+�zd�͓_]n]Z��ki�c�#㧏�����ɳ �T����(�;*&�;N�iFW*��tگ��ٯIBpO*.�GE �P(ꝝ��zr)"P��Թ��uk;]�"��T?�a��\C� ��G㎳���]*>k���bP��f�/CL�]��d�}�r��X9��3Lօ�U�^�`+��e#���(?��@�@�R��G�=$�*����=�K��Q�m��;����t6�Gh6� �؋�3��c �� �=���^�9���й$E��@� �/s��!�p�7�Y�������GX�\�)>ʻ4#� ����<�Ih�и0,��i"Жb��Q��f�(� ���p(��iX��k�<W[�wY�x��?�� �n�^W��_b6�Ѿr�X���*b�#z x ��H�2l!�1D���E���+����.X�#��L�A慱|�o���mFf�V��;K#��֨�u������ ��-{=��Ϻ.��[��$�,�,6�g�'D$/�]�P7�G�&nԪ{M��o��o#�:-K\����&-�s-K]��ѱ8(�趴Ts_�,n���Y���¤;-�PP7�}|��ǧg�nq��}xrz e�Ʊ���7PЕ��7� o�����D����Jt���k���S!�Is�N�q"�9���ap�����4_�<G�a�q�.�dF�I6 ���L!l۔��9Ҕ�C��F�:g����v�ҹ�k���:��ȡ��k�8ŗ���ix��� �V�R8��C��jH��������%�u���4�H��䋩훩�t�y_e���!���5�N�㈞�ٳ�����4*�����=/���F'���ŀ��d8Df�; <B�A�d���~M=�WX�Qtnf��./f,��h����n�y�_NR셅�ዓZS�p�$)����P���=�?R�8�@���i��iV�����ȣ����Sr'�1;� [z��)�5�+(�D)�ѩ�;�"�{aM���`�) �x�sk�k�Uzy۰m���Y�;�sߦmQa�3Y�>Am�Ы*�Q�|z�w Uc�=IF�:�^T0�oSJM�VfH��&�n٠�yc�'9��� ��S����(����,�PL�J�Gཊ 2c��/�3���F�#q���0��z�$J9d������r��w?�M��eܲ�ә�3!�9������@�қ�b��:t�����mf�˲�c�]�#��A���u"�N�/z���x��\d.��T�����3 �%��<�^J݀r�՞��tw�r��k�O'�5�8��5��:��6��!�����%E+�� ���K�t��c�%H]SY� W���ir�s�n�Ե�ތ�p)� ���+e:B�i{l@�K� �9X�H�6�/�V��,�.��P-E��j�!�5��,�KÊ�O3}R�3g��$�܀w8�ٍNc�-B���p�Z��8�pp��=�HM��O����/�[�3�E�����J@�"�}R��u��_�V�T�͟[J��O��%@�8�`x��E��ntZ �}��M�c���ߣ��5ci��l��ʔ�mxJ��;-�$�J����lN&v"8��s���^��N��J�(F�l�ç[�P��L8��Q�P]D|����� � H���l3Q�����J��+<�۩��_�;��%U�Xx,"��H���֮�PY�?%ђG������O>��P�"o"'�T��_ ��o������UsP��iP����69���G���+b6�j�l1�UT^S�_`Y�V}Xÿ"�'Ҟ��,�W("�����Ň+O�:�����54E�!���{7nͪu>!�D�� -�Hj�/l� ��^�͠u���]�Q�>`usI�P&�^X?�@O�[��� ]'�TL��I$'I��4�q&���zFP7 ���-/��x�2��b �����s�b��<J7%�$�KpL`�����\����1�0���#�0]7_����~;i�����}9���d0oO���$FU ���~2���6��Nݾ�+Xʖ�~ /�a)O҅/E���s�<;5�g��&�K�#�� A����PI��a�'2�Ć���>���̘Jڬ�4�Z�����J�.@$. Df�#�Q�D��(��g��bq��RO���5"i�\L���/z� DJ�5b!\���P����da�;v�٧�r%D��6�1}���C?�Fc���`P9ɠ_qǜ)��y�c���4m��DJ�oq$��:^5���$����Y���� �w��P$�#�*s�s.R��NdI��j�4"_Y4�*���,"��H� �Fv����u�ɓ5CPqж�_�(!0@��K�c&�v�?6gŚ=7D<�Db` 8pNu H�D"AA�D"��`cWȅ|(�b��'!A1� )�aEbN"��J�Z��� �Q0�-V����"wH<y��� _~(�h@t�bba,D�C8�p��O J���b���$�o'��nM"� �Ԅ�'' A��(�([P\�aB�3�,&M�i�mG&4:��2aҔi3-�Uj!�B!�Bc�1�c�1ƄB!�B!Fg0Y&L�2�2�n�&�D@��O�#�ܰ��?��P ��@�p&['q��p����2��\�8+5%��g|�=��+T|���I7c����;�����f��-������D] �-^S�=#;�BI�.�J�D��P3p��x��S\��f��f��a#GHc�:��1v�f�6��%lUi6�=�����[-g��E-����_�o���9�O^�w~rxf#e�L��=ni�B��6N�qL]B7 9$@��h���E0�|2a1��P.����^1V�B~�NT{�(B6���4�R0���8$B6ՠM�"�6��nN(�+DF�v>�{�L��˔&��o��_�,�:x^}*�쎌\EX�?���_�\��̯��:���3��z��� ���L�:h^~J�� �Lԝ����ء]0%E�a RvZ$;���)$_=�=;p�����P;�3U��t�9 ��]�H�a�ɀ�e��c�)�r��NȮ2e��0@F0j����d�Zm�theme-joomla/assets/fonts/opensans-cd3d2360.woff2000064400000043020151666572120015513 0ustar00wOF2F�tE�N�:`?STATZ|�| � ��X���:6$�h ��+�Ax5l[J�n�����6"�e��D��B�8F����Xb�r5�D�:٬��P�4�Ak�+�����ݑ�#_�fF������%l�=��!��$�;Ht!_~K ިAW� s�ip�NBs�W2�")�,�I�������ፃ�ͦA/����'�?�o�Ͻ��������K>�șI-�Y��`U���}ʲ,�r�������pa��0�MqN�9gM�ܬaP&( ��"!*�X����ԕ�\�r���ʹ�D�{�����_ 1���I�`���!w��8�w�^[�z {�fJ��x C�.��陽w��C,gɗ�74�>\����#fU��@����Έ�I ��ˁe7�1��(�������Y�rX4��8y�e�2/ lΉ�PK=/u���@D�8RHsz$P�,�tq��o�/J_��W�û�5�v�H���1���أ��1w����ͧ� 4B�8[K}DP��_,���U��g�)ȼ���)���RP�(nk��������,A�<�!SᐋF���]�ֵ���?��;3��b`I �|. i����˹v$�K�2Chc�tQ�vrg]"d4�m3��8�UTq�_����:|�Ͼ��?�/XRꦔ��<�"���!3+d9/R$@���_U/Q���JaĈ�������ǘZ0�t�m����?`�����c�L,)RY4S����CM�Nq�p�]�qFl� �t��B'<�P��i?M��KMu�]_UWh�\�2�����x�Y�o$�+‴�0�������?` �:�9��?3�X��,���.�i%�arz�z���x�$�ɍ!miHUJ�U2����% �"�g�#/�"f�|!�E(���6o��}���O����覮iYvN뺥뺢�;�V��;���GҊ�Ҿ-m��-a�����߬�Y=�[u����:R�j�9����X[��Sm�PUUZ�շ4�T5UV����J������W��.q9?�7��1����>�W�ɺ�n�K�l��b0� xfkTK�L2t���K'��Y����(�-)ʸ/F�X��� E�Y�$Yf��v�-P��.��?_��n�1�T�G7�ǻ𘋞(2�[����;�cG��k�� ?U�`�[^4�c����f��+�`��=�/���I�&�5�pUc��~(�����G!eI['d"ю���G�-@>[��F�F7"�8#�"Tӓ�`QJC!�0�3+�SK7����yHtJ�|�D!��c�l��R� ����r��ճ ���<ՔB/r��yYQ�B���Ϳ�&[i�m�6�k�K�%t҄-S��f�fG�n� ��o?烁)����Jf� �ɛ�����:э�Ϳ��8�0�| Fi&T�B]�;��\0_71�TQ�)�bkN~������j���m�Z2�)c�g����}�����N�� �W���I�0��� DP{<WUg� ��q��P�l@ji�#K}��N������4�T{g�~:��*���oǿ�e�������[�K ��`y#�鹋�bֹ�T��Z��&�Ն� P�n�)�)G{Z���k4���4i��ŗ����w�0�����C���YJ��5Qp��ᢠ����m+l���]�� 5ƔV�� �M0�j��} 6E��P�|�i�5{��gH-�:ztv�����JK�� ��r�9�Y���Ԕ�$�(1!^'���(6+2�ɠ�©r(��O��PP�`�V��@s{}p�aRn���� p4�7�AMōg��X�eKt�O�+�`�7a�P��y<-���Xi^����È*�^J�4����R�TNaY&@�&C ��ǕMx�m�s;j�(ر�#UɃ��"��u�r�A��#fIϪ�����p��q uڼ���j����D4�cKGg�+�[ͳ#�묣�z;�k6A+�ُ�Ie_K�����Bҡ����"��A 7|���*g/�m�fT���L����A����ءP��WV��&tM�G�\!�J7A�Z=8�՞�WG��� ��_��G�5���Qg�=4�#I[ڳ'ŀ)d�`�����hj����_#8��v���"��n�����ևAb�0��ۈqJy����u����eY^�[�t�i��#y{�zZ��h�S���n=�pÜ�JU`bXq/XsK\�p4\�S6B��HyOK�CDt�T��Hh�잹���( �ua�bl�o��OE����.=�DyI5���G� �#��e�-��Y�A�5E��O�z��\����4)�▌U<��8�N��8�t���MN��<8�]O��<�,�H+G�� @#߹ei[�(E�!&�\��<�~����[m�"��4����"�ׂ�~ZT�ߦ��,/�.m���c�n�<��*���+'��Xvbz&�V~�PW>���8N`b�1=r�!�x�MG�1�ko��uR��F��a�b�]W�0�<�[����Q��73)�� (�I��yX�~�<-c�pxe�C����āļJ`�(�+*�w�劝�˸��&ae&������_����$Κ���/$�pG#@��kk�� �MUl G�õf��nM ��F D'm��7� 1����7G_i ݡ�-����vݹ1;�x*;ʩGk�D+�b�!8�6�a_��!1]��]a���-zuy�) � ��*]D�9���� ,BJY���C)�Y�q5�m=���5 +��W8�������Q���sf ��n� &Om��g�i#`�pk}_��@dT�v���#Q��%���FK2�������p.��2@�:��� �(zuv$��D��e�ݩ�?4�Ƭ�����!QU����KGՅ8�n�� ���h�]kT$��e=6=�u �2�x���,(ud5�A��7.ȯL�n������(�k*�ޱ�'xf�X`Q�_A���5�I��o���)���J�AG��{�ߍ��8qm`A� � p�=��!�FE�U�)J�A�=Y�+�`��6����jr�eR��NMG�L/��@܄K�[#s��B��g w!3��K�C�#�-��9Ҳ��ՙ�bE^A�ݘd) �E��<t�}Gه�u~T��q�j�Nq��m���0�[��m�@R&n�ՔweG_{\��i~@}��2�2�����E����c,�g�Ǎ�l�X�w�_�b��1�%��0�:l����b,�@�b��c��+"(�L"$�Hh�q]ȷ��(�`f�k����l�W|�d��Y���I�����T�G �viM��"ޢ�g��;�}I^e^ ��1w��s�D��a�M쫳��e*W��e唟Y4>����Y�H6il�dcR��!��#J*��3��b|Ӻ�ov$S�k�/\L�j��/ݸ���m�/ꗼ&���GU�\4� !��N.d���|E_���_glv�;ޡUB��V�> [��N�\��ٌ?��#݇r��vl��ŝ�4��A`b��6p�X�J�=���"�8� �&�W�ѳ1�'����97j-N�T�b����m >���8&�0vC��ƥZC������Xa�{��o����Ѱ�%��%�7_�(ol˂��h���~�'im[��$u�|(/Tdy�g˘���z��ٜI�_#i�WgH^�e���y�>�qxʚ��lv� ���Ѧ��(I�!�j�m�a�|�@� k��X�lP�+�)��|����<��S��jou-�o����˹Y��d��8�pomU:UH}.���<L��QP�KҀR`$��X�R���H��g�<m)'~%�4�W�Od�;kx�8b����N���^.�@S���e�`QF_�i�ԑ}��z+X��V:>��u��Vʣ/���dp�֜��W�Һ��&b�����K2,��7��`����XTOEUA9�� �KZ�+����,w�%fh��[XW�O�,xګxl��]'e_�V�ӡf�I���y[��0_y{j���Ծ8�:h,�-��"$�+�L��g� ���.�����L���-k��r�;lw�����H�6hՈ�� �{���pύ���ͺ �1���'<��$kHR��"�yr�.a(l��O#��{Y�_��W��)�S�X�@���-Y?�}��H���x�,������̽C7n� ���ZpJ�3^��?ޑZü�1��p/��I��-6��"s2�^3���ͬ���]e�|��>LN}L+��'j��ЄQ���z���Mu�uۈ �1�~�7��H�������V��[S�X�ϰ\m���:�}�o�/�f���H%�#��>� �U���7^��24�*�$f��;6B_�W�l�7ᛔ����)�j�>A��徒�>��n��PӀL�h�����sj.Xxx� ��@��[��[���T���"�ҥ���E_Md�b��>P6�ϻ������J�u�;�� w��Υ�yY��K"�Ӑ ��Mς0�6�-%�rm�wށ�wZ�7Y��yxl�n+�D� c���lzx�m�p� ��{#@�1:G��"�����#���[u����Ŧ���:���)L�d=�x�ls�V����f2��F͆X�^���m��ղ�e`�,���! ��� �y��&��lO۠W�ţw��%�&���H�ZFke9M��� !>�叼�[ƍ?����]�wrM��_�B�㗱���I��j�7���Y��oS����?��zd -�h1�������ݘ莤�@�ń��fa���r�-�'?�CQ�[<5�d��&�X�=�c��`on=�z|���_�X���VO[7�c�r��E5��w��B���O�Y��%�{�:��J!�%�W�Q���ïiN��̖<7s����3�s�Α'�ק#���$�r|e�+a�s�I�.?s2G<����{>z�]}��1�Mo�@Um�J��XC�����ZE&Ip�喉���{�����SD��K�RRs�CHmM=��c�'��i�h�idKTTT����T���\jR��G�̄��� �D5"���pĢi���O��;D��}�����A0��w�����b������&�P ��]4D�G(�c��5�L+�AV��kVV��� �"@��߰(l�s/zҵ�H�¥�Xݰ"'���G�핇��[��#0��a�nځ �@%�L�*0��ؿx#���b/I���pM�5�G'��Wz�.+a�6hл�g^�FW�2_Nwg�=��ؖ�M$�D���GEq;rPR��ƙ�%����%iZ�$��C��D�A��b@��T#8|$�ԅQRp����+@��U�G*)2�b���`!�s�4��kL���%a��$�� �b �>|��=��%�~�w�/�l�ٳ�OM�*�&tdx����W��"I��^m5ߛQz�;lfG�}U�8_IW��!ų�.F��`�;�ՠ`ލ�1v����"|�H�K��Zj��«+�����[~�l�2Y�%=���Uع̕��K�����l2�θ:N�c���H!�`5��5��Z8A����c�"O��A��v�s�I��t��co�F!�=U �>�ԜG�_ v��V�����~b&[�7� �It�h����- �m��'_���<`p�9G�G���F���< �:��z���HV�����>2�c� 5�7��7���|ͽ�� l��L���'t�� �=ژ�.�lƟ�l-)B�ӆ���1C���ͩԛI��dh� �6�eAk�EwYL��>G�ŵ�D߄��r���eᮠE:U0��a��9�ь�~?X��z��1�H�zeͧGU�w_��0�R��C���R��zX�9x���<K�>�QX�uk�+��}d��H��I����p�s���t=���&}�^��[0�iq�v��C�j��?ē&A`&"�e?@�k%�`iN�*�W/���H y�L�-����FV�d���mTg}4�3��E40�UԿ�;�-�½�&S-�@���#g�J�Xv�d���6���4l�L���l�'+S��;�v��\��uh�np��`Ie��F�]V%�)�-�tY�Pr��)���5�;��BQ���-p�N�cY��ɢ�ޔ)3�C�Yy`w��t�fS%y}"��X��Wkz�<�����]����8+f+��� L}8Ǝ�u��f�{��}���鋿?ا^#;)f��Ϛ������㵘0�,"��I����#���m�=�k��C�~�\�V��?�;}�'�1-n��Q m�r�;���^�5I>[C���_?,�k-�u*4+�$)��Vp<����ξ�:�.���Ù�%#��;���9��kbt���\3���֡J�9�U�gQ��|�ggh��0�0[��@�Y��R\���'�짙�j�\�� 7S���jĖ8�-�$ن|�5`)eI%��v��α �PJ����v��ؚ���ބ�d��&�!\J>4܄*,��%ŷ�%�ψ��gUCW���;-I�O(Ĵmde_.��N2��dyRyY���BA�(=�3�x��?Py���b���*�:!��S-��8���; C������SY/:l����@�/�/� ���O� ���N���B����I���}��vn�Ď����'�A!�,�ۑ���ֹ�H�QD�Q����+R�� ��%QRzl\�1aB;<jF~��kpxG9�P�pm�w�x9��=Pi��͇�ÞU_�����ʓ�'�JI�NA8�����UJ�,�m�Jv��b�b�ByE�V��z�2vKjz`*�cp��P��xd��(������j�V���{'�jyv���vQ-;��Yq&���L8[�B��,G� Bտ�9�p�����l� ���`����T�.K�H�^��Y�}|��TO�֮�X��#5ݏV�bç0)�d�4 $ۙ� N $���s�7�W��<ܕ��nk9^z�Id��o�b���T���kd.]�ˌ*�v.z�ށ��%30�٧�D3���a�8��7t)L�諃t�K�r���д���!�}4�B�.ggEН���!��-�]��r>�#���s�������G3Zs}� d������`��0��@��IL�rτ ��&�X��Q���Z�Є���z�&Zy�a�0���ϨF���(��ÖP�t�n�= P=T�\t��1��֨�[�h}����<�$�6��J�8�=q�ġl�i4�Jza?>�<�On������FI��&����h�� Ru��t�j� ��tR�*�,��\Y�^>�O�h5>�<;����Lſ�n�OJQY�zO���= wgt����-NHg�����B;hi�Au�7v-���EfX��?8Vè? �1�n�f`3��Sj㙪�Z_w��j�R����s��=c�ނ��(2���V^���g�v�����4eˋ��)Fm�r8V�K\`�NTZ�aL��F#A\�s��*�SA�9~� U_�F)�Cks�L�S���Au�U|���ǻ�aL���}c��eg����x��DzbZ���|j���ʵW�t�mDVM9��m��5���OuoC���/ �Q�rC�9��1�7n�p�2�bQ͙E�Ú�(wUK?��(6��J/5 3�c0d�S�Ï���+t��G�_�ɞ>�l)3�ӎHA�ӱ�3�-����+�S�I�Й�}U��Jr��\�~r�T�+�'�r��p��\�@�G莄�r�t����w�w�so�0h7&��t˓t�'��.y�䥩����b�I��~MB+ڧ u�'��,�`���� �т��Y[�>�?��Es�Ů|ug{����Oҍ���mȴ�r!����i3�hy*l� K˨����ʮ�#g��7�Nl{ ��DQk�c�#(�ء#���Ę�T`�G�)���@)����8�8>E���J}�J�a�ԌJo10v8�1�6N�0K�K��wm}*h^RD��ZK��Y�vw�I�|a$�`�|�L�Y�1 b�xWNI��:R�19���A5�6JQ�Qơ�>q�� t�Z=.�{+�SDtL�����;�-���5�K�N����GF���`�hW4��<qŽD!�//1މR�\����7���V�a{�������G��u�g���_5>��h����B�Άf�lé�"�J��u���e�ⳗ�-p�i�>� ����:��+`��x~��lj�� �R�2�"��'˞� 2��p�',�H-�$`�IͰ� GY=N���Ֆȡ�q�Z�vzyK��)��К,�f_�Bd0p�@"������Lf��G��AA�Q(ם V<��y6��wג��< �I?5cM�_?lT��fݡ�͚�(��NM���`@��X�YQF^LTq:=9{_m�0��>!8p:���Yc����H�m�A-0� X�nD��� �Z�h��>��Vp�L�ӌ��|1��������BǙ�o���#�+�T�y#�3!�R_]���ш�N��=Qc�}Q㪿����P���;e$_��?F�n �,�o�#nvw���G�{��N%�� ����P�N���.SVxq�o(�J��y���f����F�����=7+|T.i ͙���N�q��k���x3�B�����[Hć������ �>���#o�ּ3��� 6Ǒ8GX{�;y�L���̼��T�Ls�͖!�uffJ*��ۘo�Z�^˲=)f��)]�V:���!����~!-^h� S �����,,Ԝ,A��#�@l���uw_S�R�X=h>����ņ�����p>���V�dv��F���Y��ptt+��K�U>j�P#��y���J'R��!�Z��ޑVF�w*�fI����gx%��G���/_N� G�:�9��'�i9�0�>�}��Lu�>��Q��j��ͱ����g}ap��FACTC5ང!bj����I���E�>��>-�rj9�u�� zA�%*m_���O p`��E]��� �G^�:���4�Ht�"ޏɉ��W&V��_��RSsF\M������$�Qxd�#vWq�1|��s�:!����;Q�vf�����)�;�J)�q`zEس�|j�fK��jL%" ǿ_|÷�<�V�T�oe{ݧw��/Q�Px��w��o4�D��3B��]�C�x�a����2:�!�T!��;�C�l��%����L~�Jh�,���We&���c)�e!�pvՎij��T1q!���/$}%�'��11=�m%��*�R���!H���85���P�A�L摂��/��orn���%����).����/�KT�E��*� ^C�F��Oh���p��jyQ����Ǚ������ꁝ �q��)Ԇ��7E��H3,h~�E�8M��.�����Zf�@�����(�ty ��F���S�@� �8]�q�ɝA�;!�[U�'��T�e�Qٹ��H�"q��Q�T�hw�W�Q@�����}m��,��U�J�e*�F�8^�R��ʒ6x"u��-P$�w牗���Uk?6?�g��<��xg���B�X&�l��Dw[Wec���I��|jÉ�ʵ3��v#���<���M0���y��d��@;K��<2L�~(RTZ����GuFԉw�?��5d��u�ǾrN�{�G�R1Oy�`���JQ��`}�3�@ƥ z;� ǁ��H�C���Y�d؆j�Na�O�^���ضZ"gϓgX3���!��I#'.�aؕHI���1H�l]&h�&��ʾA�i�f�O�6��W�-0�B����3���PHb��zɑ䟯+��4ò�|����i�ٙ��fK��"é�iƘ�����C�V��-<+'���7�q�مR���������i�#f�mQx�|v���s���]��u���xa�OK,��<����H��٨Z�����If-�%,��.�Mt�U�US ˨�m�7�h������e�5Ғ�������GW-��r��{��Oc�lK�~A��T��*�Kb_��k�z�������s� ��Z�A�'����&���y�M��5�Bx�8ۦ���i4MU�y�ɋ|����cGJ4�K^�ێ�6t����ya9 Z�L&�G���x^�k��� 4�7J�R #�c�E?{�ǡ�Nv�υ�gK������3bc������ג]�֡���m>�X?S�b��u^�B������B��]���\��ַ��K�7�T�3�E:�`�%_ۣx�Y:�{Y��|xʉ���?�s�a#-�~�UV���w țq�e.���1��I���tǕ�!�7�!�N![�UUui2�]��S?^�1֏K�m4�H�Q7+�|��%=Գ'�1�I8���0r��08:�V���oH��'u�%��4��{���e�3x�S�\URB�oU�����ﲍ�u�黶����+�Iͯ�t}�7��g��}o�����3�>��x��ט�sbB>���������G���L�O��L�+��ۜ=�W|�H2�����ĜsJ*?�v`k� `�&��G��*��B/�+��j]�����2w���S���[���˼��R��W�JQ��FA6>��W��q y�*������G�WLf��8�cD�-��h4m�W�گ�O��'���Ue9����Z%����n%�y�eǛW�6�ۼ���D\���p���7�b��϶J���0����4;֍V�c��%��D�.A=pz*}t�C3[�ͬ�9j�!�㝕��X!�uɧv��ᷮ��6A��� cWX��� #Zo�c`L��[�{�{�tԛ2�f�»�i,����ѡ���'�,B%��A��=�Y��Q��[x�ͻceqc�L�|Y��e"�$� ����h�f����������ww; ��l���G�V9����ѧǜ��Bĭn��^+kX ���t�=��iW'���{,�N�??��h����4��lv�J��3j-�Th����9���������c�Ӻ��t�����'�|p ~#3�kVM�����(�.3:��)�0�/��=�1һW/j{�� 襤99���Ժ�1ȫ��)N���!��w$�g��Q9O9_ �7���a�0�&�ֻ�)��^�5�,͚Y��Cf�C#� {lp��Z���~$�Gz��u�� 5XMw2g��p�$���I�nM�������k�)+x�� �m�1��)���u� ��{�Z#�Uw�B��i�v�ѳ,��iX� ��@3tP�%#�B%*��<���؆������!_&�u�h�l�mf�o��<]�ı���mAǼBO!�?7�ҥb�-��G͒=�sw���*��d�Z��*�i*,�,Κ<g�2̒G�y�,�:O���x���v ���K6��Pܣ���;W[��� �S<�B�x�)ka�;r<]�зx�����2E��M��g�C�;@�:a�tp}� 7��W]�~�q�7��Ĥkї�lXE��f|� Y${S��dh������0Ճ�ƺ�~�<$��̹(�8��@G�=jY؝��� ���ɥ�ZR%����W�gy^��!a��<`eL=拾u�zP0�gk1����p�>k�=��7�S}�s��4��Z�k��֢��U�QP],ͯo{������Xamv$���;F^{��0iɣ�n���Ƴ��V� ��� h謆{�t�{Ӻ+�2��p|r�U]8�Ȗ�-�h���{����u�]���_��Ά�&�}��{y�B�[�}�}��ޫ��AQ��H�0^P�ƶ ��Y^A8�8���>��ř�G�vѶ�B�k�(d�,i���r�����M��� &���*���p�"��!�2:����q�ڒ�c=(I]_ �eUCaImBiR�P�m֮ .!2��1��&+��c��Rj �S�M�,�eW�#���Α�"C�n��.��5N�P����M�V�!����O����T7�� � �2EN�!�2Y���r���("�k[�Mjq"�����7�+*�c�xRZ����we��ܯWZ[V m���v��p�ARؑ�wo�~�m�}���z�m�X�j�m϶Q��m� �gu�tS�#����#r���d5gg6��y�(�pv�]�Ė&]��<!���(�U��+�+-4�;�6��R�m��mBk ���!�Z�p'g5�ḿzɴ;ۺ>�P�?�,���i�id�M���?���θoͶ�`���X�V�G�,��iߐ��͞b3�������\V�sb��?����Y?s�� ���ͤ���G�l�L�Ïg�}r�����u��y �x�.��8�v�D9R�n�m�ꌦ%Jzs�����y�(�:�����O�!���ۡ�.>.��6'<����F�K�0���;���?Կ~p�����ƒ����F��Ӧ��'ϵ)��I�Uq�i�DBq>���|�Oy���''�� ]S�t�W�ڀ>7�Gv6�>f�ȁ^�Z��o$1��o$P2X�u�i�bb���؈0h6����S�zK��ƭؕ��Ѹ���oĮ���Ꙣ�� �iD��5�&��}(�T%7�gv �wbWi�]��[� �1����f�D������|6��N��z!�>��7��ªU�挵�q����el�[{��N��M��1V��&�����$'����&v.Xu��w�!ޘ[B�%Y��p��H���v����S���c�nvFFbr8�G(���D$Q@��@�䣍p]q����B,���+SEd���e��*뽱�-H�őn�{u�-O�)Hw�����EZi��d�+B�g��\�Q���AL��m��.�[� � B��9h#����9bju�zӏ>ޅ��vq$$�'��g��Q�{�H�k[G7�-�NwCl��e�$��+ÂR��alE �*(�>�ؾ�em�<SmC<�)$ReA^�װ�pE� -�ղ�w�[�Po�>�\������u���}�2.<>��w���=y�V_t��� k. fƃ���Z�ac����R]|¢ω��tpԆ��ŀ&�滑�ϖ0%P "���Q�{:?_�:�}e绞�CH9����1�k��O��1Š|�z�t̝�FJk�� )54Uz",�>%]��~0[욠�`0���Y��n0ap�\��ס������c�ն�㐙G6�A/=�S�|��j�5��`��Ik�]��T�KC��r����wV���|�5�����Ŷ;Ӌ���)�: yhn咃�9� ���#WxՒ�� �y7���J�O�p,�%�me��A���lS �א������3���Z2��W� gٳ6e��D7�w�D&�Lp`��Ä7��+�VEbP=Z���� �9�2�'��~�?����dzE�9hE��X�d砌й�$Ttb�3fBr�b����s�3��~i�1��������G�`�d��D�{���1Z���G�+R]��9�g1�r��[=َ�����y�����P��5Y���P+eM6A�`̸1�V �QU]�e��������E�>�(�%$�iQ.�J6�;;s�)l���3V�a�H���+.pipt<��#��w{+���U:��E�G���l ���QQ@�m&:��bz?��3,��,:5~��(�_�H��j9�.�� �~��V"���W���d�����7q\�ϹKc �5"ӝ��X�X�� �+Fv`��=Y!�� t�F6s�v\{��Bwe���g�_��Հ3w�(a��v�mm�B�D��bR {7G��J8��rc�e��0lռm�WJ�}/�n�ڥ���t�j�kij̬'�@"�c�~�D1�=wCH��k�C��`⺭m�1��1�Q�u/{� ��r��z?�����ZU�Um����)��.V��B�l2m���%�1~�I�������~a���qBjJ�B8��MZ#Z� ���p��?�~_�7.�,P|��W�z��C�l�c�q�^XO$�`?�:42�O�]��s �"0��81�L�ח�52�~o�d�X:�/��+�D��Gj�o��pRO&�gs�LDuq���٭Z�7@�r:j�X��n��QuF������������V�'�8K/{������R�o��A��?'��X�C�[ܾ�}�:\�EѪ�xR��G��PRR(�`b�|���npX SB��OY6�Cq��D�T�c���d�_�$��2�����n����7��r`5��m�f�2���9ůÙ��IȢ�.�u�&<S����)K�A�Wm���Xn���F���m�k��ʹ%2��6��d�gP:�L$i*�QA��Y}?��_��W[-��v�u�z�r?�ge��?������������\K`?�-�R�'@[�R�O=��}�.K'�j3:��Z!a3>�N���$9��KG����g���� 7�ݥ7��ܜ�^<;���P�I�S��L�J2��%,�gv�R�s#����?x��WϞK� \�""aWMd=�_OiM� �G�f�fv�Noq��+�PJVk�e�Qn����8Qts�FY$�1:0�s�uddAݢU��V�!1�$[Æ7E�D����D>�-�OR�[���u����Q(�2�ͫ��������\�aɂ� c�,Ŵ����;Y���._�f4ZB�4,�$�;,-S���4p#��٬(<��e���NY\� k$�5�њ��2�T�.�pU��%+�H �ijBDa�ar�d��`��L�eޔp�D)d���8ۘ���JА�h��H�X�8&>[�M9�{İ��H��b�a'�L'�,Kf=bjuUے���F�Un���֓�1)T�� d�Tg�j<��u�Z4�*��6w��n}ѫ�kP~]�z�>�tقO��im�?��|�'��x5����_Lf�H��L�*�:�r��w3�/A1�o6R�1�����3��+��ށ��$�CpBe� ��0#J�5�V1c�x'�"�i��P��;A�@��aFKy8���]ޭD��*�9#b�?W��F�^�w��QR��@!���䇐�O~I㙙+��rL�@y�a�lX�8�h1xm��(��g���>��ш<�E���y@��o.Y���K��3��_�Kn�;�cP6_��<mpr���J���U]����!��=�$F����@'�^��V��ѝ�pn�ʻ5�g���-����m��N�ݬ���ˊ0ԯP�@�lowRrn���&6�Ȍ5O�A5\����^��p�ks����X�����ܑ!1�:��U~O�%�Yص'x�=�`S�s&�*�:tt'ww�=ID��c)��� ��Tmc��V��r �%3����]���Z���HW�YT JϦ��H0������8�T2lʑʥ��R�i F��;�_gFw����3}q2���c�&p[F�#\�1��Â�酨<.ld G'�|��8m�|����P�Q�]����S�Q�|!�'��PY=�N��� 8�RS��%�#s��~�ѧ�h,\ZLΙ��[�h2D�U�h_�2��w�2ƞS��{(� ���^�_�d09U�\s���I�q������XȜ��L�!�Y(v�@[�PO�2��1����i�De�ћHgq�r����/�k��)����1E�����܉�]��e����ò�?�7��V.W]1�6�5��+�+l��R��: �����!42��"��jՑ�C��R=��Μ������� �y�RV&�B���J���U�x���짘q�3�DOO\�Xl.ؕ+gծ~�w/5VW�� �SG�� 9 ���] f �S�����s�5ηR���֣��16�����+��R&v����xj�}�;�$�v��>^8VS� &�K����cY9��;��Kُ5r��\6�܊�Y�L��χ����L��Y���9�������K���M���T�"���$��vZ �{?.=���f�1+'���R��6W�u�i��@b�H��,3i�T����_���t�{�O������, � Wr��>��3�F\*W���$�qezj����!����_C���j�{ەg�S,=,^N2yg�����#�i�k��A��BNB���S�w��a�b:8�k�7�����מ��T���*���6��t����?�\�=mؐ�<���Н�U�sDYIwڸOB f> �-|:��¡f�{ �V�Ā��'�B�I<|q'��@�` ]�#=��LPq �;�8\w�ҪY��t��I�JY*�4�y^�U^'���k�.:�lm�-�z�I퓢+�鮻���F=�I�n����#^�;;[�1��ܵ�Uj�e�;�|��I��(�K� <�Z�0���<�iBh�ڤ�����)��i)5�깥�=h�� ����b�# �/.���=���i��$+�F�Jx-z�j������֞�aP2ղ���=�0"@��/�."$H�,E:��E�dS-u�C���6:袇��>b�1ARbZ"��J�Z�5426153����9�vθ��ջ�[n�c��]����G Qh�'Id �Fg0Yl��Eb�T&W(Uj�V�7Mf��fw8]\��=<��}|��ap��`qx�D�Pit���py|�P$�Her�R��huz��d�Xml����]\��=<��͙�`ђe+V]����İ.�^.�y��Y���7�����p��jZ�*v�P:��B���Jkꛚ�++4Նꧣ��0-�l��`��`\��T��j0�`�v\���qaZRَ�=�P��qaZRَ�=�Pk�%����7�%���m�@DDDDDDD$""""""�P�1ƅiIe;�����������Xu��ݯ�5m�����[u����cQ�?�4t��g���]"���m,m��/R�,]��܉G6��'-��:a' �["�R�wXx�T����p�Xƴ�`E5�d7�qE�X�'�����4����R.j�Iɋ��2,�B�BR�N��VpB3(��X�bo��$��R��ot����|��Q�x� �/�Ӂ���n/u���3�y��$��/@)�!R��$��8�� =��!a�pj�pA6�& Ui0�~u�M�h\�U)����c���3x�͜Q$�fA �PC�1��b�sCq=�P��[���b����1��ͮ�r�d���G�6�o�����A�#fS=��=��6����1����T̟^մ�S� ��$�_��� [c�i�_� >�)-�f[��D�c�W��ҍTk�*@�]N�x %I3��8��ًxtheme-joomla/assets/fonts/opensans-b04e2538.woff2000064400000007324151666572120015446 0ustar00wOF2�dq&�6:`?STATZ\�| � �0�-6$ �R�e��u;�R�U ��C7d�5�=�0ĝY�]6at�E���t�(�L{������AP憂��ah�l�� u�,K�52<�}��\�t��-F�S~ʍ�o;B�Y?�}��d���R̳��3L���S�9�6lK��*_�"7t�gq�&xZ�)�װd%,a�~�v�_Q�ո̺�CL���P C���К �A�'J�v,|���q���M��h���[�W�MҲ O�e�u<Ƃ��4)h<vҿ.���6W�Iw����D>�8�8� ��a*AQ�:�K�n�`��+:��@�x�xd�ɞ��X� ����# ru/MEL]��)S�鲴�KJ',E&����=�Z�!e���5n} �x?����bP�M���@7�k=���K�W���m��5z�K�s \�Q�o\�h�;�W���t�pp5�7���WS����F�* Qo��r��˻o=\<���:m��5@Po�3�������#ƅm�����a@�Y������`[>��9����X P���3��T����Q�,���h�P���Q&�G& b��A�-�"�����\�́�}2�7)����>��� ������ �շx���L�� �+] �죄n�4��r ��?��jJFӌ��F肽���r�c������~^��j�X��Ż��=9H�"�.A��u�s��.X�HI�|�������O96"@Y/��H���N��j��P?u��� �>��5Go��ïm[�lq�j��9��)��1���d<��n��j6�j�T,�s�L:�Lĕx=��z7�W|5_o�U�L7��p�b9��`�%��3��˚���C(S�,f2� �%Re��c�sG��<��y�}�$v���C{>qN��@�I��� hI6�PQ�y)��u��Ia=c�e�n^���I��OJ�-�68KU�����#�Ht�.�N)�B���+,�ԇ p%�t��˚�=r��{Z�ِ�U����[bӨG�e,M��'���U����~aQ� �>�1�\� �1�VC���z]���N_�=��AW��#�9��+8�qY�+Oʶ�Ty�O�z�"U`#�k��/�����oֶj:R�2��*��Dl%>�,�F��#VZ�"�˵��+��Sj8�a�?�-p�r����`Kh�Iu �Q�"7,��� &h<x����8��ٌm����8��#9�k���Ӳ2�iz>�|ȉݾq���J�������Eݒ[!;�����U^S��`��(mI�����k�Y�z$��ɩ:��,ob=5�D��d�;Sg�2� o��3z����)����[_���\@R�: .���'�:e �l���?���"ɚ�^|�(��~M�وɅ�ͦ���nn<�)�,��-�������Bt������N�C���E.��,4�^ˤ2��F=�u�����ک屮�ڷrjxZ��paq�w�n铤�^X�KԒ���HT�bTv��<;c�u�8��Ɣ���~}��n��j�����e p��b��ޚ>W��S��!g�� m���e&�!��w(��6½.�2�]��`,���� �sL����O!��6FkO7��ex�U�f��ٹ#WȘ�TC�sf�eet۽?\�w��I�rc"!�Z*4�p7˯����9\�9���%I赥36>k�R�-8^1��䀹҂0-Xhڕ��d��R��:X6�R������P]a��{����c,�q��뚪ؾ��5��tF��@��V�}�)l����;H�Y(3� u��h/�{2���H��l�� �]�epm`)��YnQY�f*�W�[P;FZ[PĐ 1|��ܦМS�.bM`<_���U�`�6��ޗCۀh)Bh�b�qu�M�Q�~��u9�XGRU猬ۍu�IL�����\ cHѓ�S�~0�3�d�B��kJ�����fE��[�X���Ir��E��P�bՂ�U@��dF�M�=I�a$zޟ�a��b����K�6����av��8`Yg�U ���f���ܒ^���Ռ�0s���$TY�#�D(n~�>�V���1T�pƭX]��� ٸ�z%��V�s\3N�>Q]»q�":@ ��"E�h��l �v�j���wm$(��8?�V�h��EZ�y���l �pǯ�Lz�� $��Z*��j�� �l"<��_k(Oa�`�xŏٳ$M��z���<"����Vl#]��uo�xX����'��2R �l���d��M�j��D���By\��,��c� {�~���/=w!�B��(���?�v��>����S���&��55��_(����c��㥟x��n�Z��q�&lgʹ�J�*�vN��UE^�y&z~��!�ƹ㔒cu�T���F���[<��*��岅#Km�c"���L��=����fݵL0��m����(l֤?��Y�>i}֞����L��"(Uᔿ5)騰������c�����d$T�K�k�����G��Dn�`�rc�W����� /��˪r�� �=KH�m��d�@�DܓU蔩2� �(���4XS��S^[%X�*ֱ�����*&`=T2]z t�"�U�����7�-;�|��({���i�;�ć?zk�η^ӯ��;���${��-t���si�mleD�������}��Oz��+�ח<�zɥ_���Q��x���^t��j��G��r��֨�N���Q��U��Ϭ;�~��}��ݧ7�d�m͜�n_ZV|jY������eUZ����������9S?wG�3u�P�����h��x��qg�������I�8F��rO>8�y�ߦ��ri���d��c�7az�y����ֳ��G[*`fJ�����x�e���D�ɠm�<$�sO3s���ri�Cg��V1փ`��� �_�=� �8� � ͩ^����ȏ�J��P��ZS����-����T]���鴟��8(��Jz��!�[Q���2i���0B@M�C��HS�LS��f�X��uL<A�P�y��h�a��^=�Aia�փ'Bc��a�e����$�O���t<�l!����hy�P%p�>�����&��q4G�|���`�Qu����}Q��hX�'�4d�Hl:��T%�,��L�4nzrpPK� ��3�$�� ;᧙ [�*�k�=�L mHH��R�\[��B�ƕ����G�������}�V��G`���.���an��j�!�!�����t� ��11f�2ӹ#7�ƽ�F�[3�Ve���5{l�6�)k�\��4s�5�z�M-5V��k����� ���9ɲ�d�= m��Kj�P�ŕ���rMD�E�a�x�?���F0���>�n��W�X猜iz,62��J���Ǯ�Y� ��=1]� H? xy��=���{�����t�w�Γ��w�>���kwmUwܮ)��J[[��fV�R-m��?Q��3�l��5b�ΤQj��0&�j�� ~ )(lcU�����);�?V)��,�;�1������G8rt�]�A�Q9�A`\��E���C��}�8f�/ x��#s��������P �5_��ʢ���nH�B�PCN�P�I99�BNO�ȭjtheme-joomla/assets/fonts/montserrat-9006bb6a.woff2000064400000017340151666572120016072 0ustar00wOF2�K�z�R�@�r`?STATD�| � �|�,�j6$�P �,�\�(F5l�F�n�sn*A���r ����c�Tm2¶`S%�+a�1TL�ɜ�6��G<��Գ�B ��Iǭă���U�"k���p)�xn����&��D���&.%��n�7�vr�Ʈ�y~[���=y�� �Fa����"�� 62��5�1�L﮳e��u��lt�C�c����(�EK*?��P�Z%�mC#���~O��}\I�ؒ`�"�n*�$N��5ߣV�O��%�ӫ�ECO��Ķ~U0�O��{O�99�X9W*��)p�����e�;z*�4e�2y`ۈV��1�C����U�4!=��*�%�h�t��ꇚ���0tk�� ]]l�������(pӿK������ڊ>����@K���Zsg����k��oK���ex�^=�b�D�Ҵ�}N��LS�i��bSLu6��*�f�/�����ɖR�`��0+ӌN�X_]����P���@@0,'a���.� \!�0�H�LH�<�uT D�R���i� q��wp���;�6�%+p�6�@6�(��6j�iκ' ��x3]}a�Co�J�]��A|q��!�J�N#�χ ��L\5q��� �0�n��띎�[KA�Ky*��F�Z�o%����/`�bC�0���,T�`���֩U�ZUʩ�#�L�lbn(���,�"����6�Q��d���ϱۿ@8���tԬ�κ��]u�%�V�۰�CIs�dD��B+� 9U��A��A�ře&��ID�&��FN��&�_��w~�G��P0/!|����|�{��nVanV���s��U0<̍}v봑�lլA�%����&)�jQ�)�-�G���O����5ȩ���ٌW��<'m0DJ!]�t�Ұ���`r�<"8qj �ȼ������G$�L�8��@��8]�qXt<r��Y"�:���o%�(,:��F gQƸ���Gڶ��8���V��mG�!�C�^u�<&��9�ޞ��}E[��%-[c-�����|��LK� "ZؐD$|ŗj��DK_���X���^`���I�3�� :���k<�H-R��r8�� �(���h@4h@�f R�n�̋n�Dd�����/ð�� �� �T���P�Z#K�#d�O�yl�?T�1�,&T{��P�i9Apj�0���tg⹚l�����Q�<�T��7�L%�Sx����8��ۚb*;����㇣��o�kU}�4�7W��S*Rr�z"�@_=��y��Z��&�9:�lP7:�ԡڟ{K���^���&�v�������E�pd��>����j���|���}�_�3?�}���~�s{P�80K�'oM�)n�C�Mȹ�T;�f� ��Fs��W�G�^1T�`������ C20�x?j�@R(����iG�q�y�AI�3������Aj�� _O�x���!1p�o�ُ�n�]K ��� `T�x�̕ ��q�{�CsP_�Ĺ�k�YE�W�®�V6�q�q�`����D#�F73k� ^��&�!)0���QՎDcO��2��&��<�� ��A?����+�F����9.�����F���nq�۪�V��<�p�Gx�ӗӉ��ν[��Dtm�5��5��.�ޫ�{�7�T!�D�P�P��y���(`�E��sf<"y����F�Q��Xo���e������W��7 �A���8��sUf�z���s��!�J�����IDn�Á�]���E8���э}�S�R}0�����|�4���}P;S}h�&�_�ߛ�N�=dʙ�B{U#��%&�n��6��I]�\���g&#�'|����=�7�E�Z�^)�2�\�'�-�Y�b�[���C�W���ESٜ5ԭ��k:�Ω�o�zW��>�gํ_y�x��|���M���s�PFs�0)�w��Y8ʏFP��%:�j�EG����gdxhp��`�w����������hminjl���۬�kk�-fS���b_y�^�ըU�����P�/��O��9Y�T�S��8H���!G�So�3��k�a .��@ZF�Sغ^�x��i�+�H��� ߇T5Pbձӽ�`����9{Vd�9���xF��o�J~�!%ǖ���Wv�{�FW���>(�:��ܾz�kD{Ubv� r�����%�}�e"ؒ�/�9βa�:�zj�;�B]��|�ض����1�4�Z?�W�������X�<�R��m������7s��`j}2���)�<p٭���(��(Q�;.-�s�(S��ȉ��!ई4����'�>�����-c������Ay��X�>�`6�Ug������+������R�A�TZ����p�m-QK�%���L�wY�@�e8��n��i�W��Ɔ= �o�$����p��r����=�dZyhsZ����U\���k/09\q/f�\�f��V�DA�%N[�����&� Ac&&3r������xS"�K���3�9w6�K��.5^K��D���lC�(Cs�K�9�ֆ�n5���봚�i��ɍ^Bbzh˞J��_Ա���<f�� �Aw&���X�A�5���h =��SZU�ɢ��5�}��%�U2� F�V��촚zg�e�)Uن���r��������Eڔ��6�r�<�+ۀ�e/w�E����d�-�C���8J�8C`��Z�63��0$?�-{�\ޓ�T���,N�Nt���D""~� ���Y�X�}�rI�SP8|�'���\�!�xe�v��8�t���$�*�{)�1d}�5�[c�MUF�o4IklR���I����R��3�o�6lM��P^!��M��&&69��wk��`�aS�}�;N�Y����H�DF7�.ې��28],����)a*:X�Jj��(��0U(p����-ԣ!O�1)�%����IiF�)�qy�Pr|4r�I��jW�{�Z3+�ԩ�~��P��j���`b�0��N�12C�A�[8��±~�T�[���y�M�:���6�oZ���N���B$��fLNJcg��&�n� �OC'�g���[�G�!�a]��(mX�S�t����h� �0�\���uB'����]Ĭ.�P�Չ�L��8+ˏaǣ�r|�$��VF��W�^7�Z����0��S�~,n4zJ��=V=X�}�Q�nL*r���J����ys3����UiVq~fV����q���e�y�[]�c���o����kCkU���(�G����.*�%��1j��G��Ze� ��C��@��k�;P���80#I��v*f��S�����|���`e��ەz}�.GӅ�(�o�<M��c��qq�̶L��.���az��|#4I ��a�6���ZPb�3"�Om�n"4�Z��a�L2η��{m���L>,�:š�Ȧd�Q��h���=@ۭ�Z}d>L��W�VS�[�xĵ��h��m�[�[�A�cR=�*a�=X�=��e T�;�m�}�����7�����7�.�wT��� �q�R�Mɩ���s�7�n��g�u��^'�D��ld�EJ-��jW��a�R�3A����+���+�����OQ��<�K�� g���s�6��� ��ʔ��Z`�Gy�@,�3�V`a��c��>gd�sp�g��9a����],��}�q �K[����+�70����W|�w�!��j�ڷH�![A'����XG;���W�Ӻx[�� �F�!�����Q�8ђ�Li^ �G«��(�2ΖSa�C�%٬:W'�g���"�@�(�}��h�b V 8�Ps%��BG���W8��~������J�h��9�Q������ j�Ds�F��|#�^��08�l�����=. ��C0H�V�O�<����fz�H ��gR�6�Aw��&��+3��!��F&g�;��{��j�Gҫ����$��)��7dK�ת �`c��H$����kF��E��^x$Ħ��͈���}��x�&36�z �h(�G�1i��b������w��O��P�>2'�h����b�c ��ƭ�>�8|�p�F�;Sgk�0��^�7nyyN�A���KK<S����,�n6AG����Oƙ�6�='����z����IKZπ�\��NĄ���r�������� �6Y)#Ae%����r�����hsR۳P�(M���=��\$-xh��fMw_9^��:�N5��>qNy�h�igT˷�wt�)<0i��t��Tm]�^� r����fI??F$�i����⚔�l�,�^V_:��~5�i0� ��2�v��]Y1�6:���y{ڔ�=��<�2X�}>��Kl�m��6��o��h�gM�YM���}�~�d�ͻLO�%Z��1gfʲ.[[22�� >-#�2���ۖ7���L6�g�+r-LI�GQ��5���������~�Re�u)*�f���b��O��ȭ8����Υ0�~��ř�#�uFcM]������zϽ���9�:7v��/;w���|�<�0�*�ZJ�|�����t�S�-�eRb\i]���2�$)c��#j� ��,*��(,�:r�;hݟ����p&�H�4i�qj ?���iv�b/4x�c�Ǵß��j9T�*+/..�U�p�C�LIq�$1�H".I�ī�$鉥��+�9� `�@N5�����ۣ-6T�+��)��JΤR�T��.U�J�J$���XM��c?���C4o7%��&�ah��*2�[(������&K����ē�m:� �<���u��̴�xA�ӽ�=?8M iԢYNky�HYP��PS��<���%F���ϥֈ~�:Q|��;_�Y���C�A:��s��»n�8�8��;�X��a�, ��T�)z[k�x��p5�8:�? \��/�X�h����z���u�;B�Ie�ar'k��R̀��:��u�chaxvijP�w0�k�B�%xF4��V{�8���ȭ��!"�P������0�ƌ6�e��PVVu3�9~z��+[p�_��/O�#a�J��r�I���!�#�Y���规��0��b���E�i^0,l=�>���=����n=�������uJk��\�+>�v*/�����K��Q�S"�rp�B���@Iu �5��#&Y)l~��)�����|pZ��+���� ���oP�bor!8�ɘmd�(,��j�C�W���#JY�:Hz���G� j8w�ΏI`�#L�������ϓܚ�?��:�Z�v# �!w5g�4k~�;��;����(`vo6ռ�i1'%�M�� e k�M��5*r@������P���z�v�_���z�@w!�8M"�iSQQ5*�� �K�K i�W�;nb�n�fM�.j��"�*��=o���8���A�C��⬉�P���%B`�v�6_+��1�Ѽ����?~��;?n���z���W!�V+�n�j�����`P�Ў�ru��X����'#-E�� W{ 9���-IpA�P���t��$h s�v ,���&k�s2�7��.^B�����-Ip����|��𡮊�L�j� ��k�IlqԂ>#��|"�J�:[��|�s4�I<*5g$�Ioԓ:��= Gۍ�K;�\+�O���?m��(�?�+��觮�x)���ߊ�n� ����Q�P����8�����f�+��0�q߶�t�)i��+�7]p���K>X�upV �e85Y������l��ԛ�j�~=��v�?۾Z��,��9���H���d����'��'���+e{�T��k�Wւ��z�_U��E�P)۸U;�9��s�?��F��o���e�]ߋ�� ��-�3Z�I�r���7as�U�v�.����x��~�dn��2*�-jgٕ۟/���T]�z�M�[P7��0�K#��g��"�)����q3a�+���ī�a! �oE�N�&!9^�G�І6���b�����>���)�L8s3����THh?|��fߣ^x��E ���qm&������G�曵З �,���������X�/�A��C���ڻTGc}�л0�����`N�A���4c�z��?}Y��O|��x(����8Zx�Y�t� �w�]��T������C ���(����K#�/�w�� >^yt������� ��g@&��w �W^]�R�4����2��Z��� ��P����b��o�$���<�Hzw�����H8}� �ynDb�,��v��0b�={ ��w*<LžǪF� ���P�� >�G������k|*���NCh�=PE�y<�c}�#չgڲ�ry-�Zޟ�������̴-��-:�d�V&�!,�p��6C��")ыa���B+����K��H/K��^�2�k���0��o�p�gF@`ХC�N*nu�940i�Т�[�&��k�ӥ�[�&..u�D*�r��ݺ]�\Ʌ��L�5�U2d�I2�KK�>�8[��z9x�H�$)��1���\��Poq@{d�Z�,J��m����ŃEdR�J�?"MD�|�wqZ���r�i%j�a�H{��p8�P/IÌf��MdM�j� �<�r}W��f@��i;�i������`�bqx�D��@�ѓ1�,6����"��l�L�P��m�:��X���j�;�.��K^)��B�"�J�RR�cDC���^�r�T�dT��̒Y�������S_���4k �spjӮC�.�z��r;��A�2l�Ǩ1A1� S�4:��bs�<�@(K�2�B�Rk�:�:�)�j�Zn�o�`�,Y��˺:�� :�_��d{n�:DH\V� ��J�,V ����&�d�n�-�/�4�\3���P ��eb�+E����M��|}ʏ��� �����@�n��1R�>УD����ƪ�@���%�Ѻ���CiКĨ�"G��&�fB�=F��oRnNQ#F���"��K�U}���j�|���!������l�W���)R�R��H�c�Rn�6�gT���j�T�N�V��L�v97���.�X:4�(I�]�L_���)uJ�Dj���^5M�/Œ�#D�q��� �G]j�a@l�`�r�>H�]}�4t�$ Ww��X����-�D��O�ێo���V��� ��n��>�w�y���ШD;�aX������'�-Gq�I�-V��=pr�q��?��|��J�l�O���7�^f����T�b�����Eym�&rAI���I����{q�I��a��!Ƒ�-�@n&F�S� ��&Dqk���ﮚ�����Y�@)��a!,����6b�x{�p(#��"l#Z��,K �$��-T���>�"�@zqΚ���PC�����]���hlg쒺v��|�so���\�����U���c}�^� �)���i�)`����U���K�(�x3�e�:ʐ���Ϝ� �'�)��'�|�r��!t7\)j��}*w%Y1��theme-joomla/assets/fonts/opensans-b0adb64c.woff2000064400000046364151666572120015666 0ustar00wOF2L��L�`�~�$`?STAT^�,�| � ��H���"6$�@ �x��}'7E��7K��S%�uG������IIeM�&-���,�b%*��y�:uT%g�,�"�-�i\u3�O�:"�7��YO�s��� �+���d�"� �#��tE�=����ȰtTgcX$A 5�P�۰Pv"�R�j�JSi�&�E�u����,���� ����o���q���bṟ`�,5�u���}�KDkVu�� !�<Yl�Dl�_$��1���FH�mĜp�� D"��b�l�{���YB-�lK��� ݱ�2X�W�m�R��YX���� �������`bL{�=�ͥ5�m_�G/��{��:ݻ�Q��=�-2f�Bh�� ���3�f�s��pM?et��1/�$uV��X�j�۹����(��p۟";č=��0��<�6y`I0��~q+�6lNLS�=k[��zik ��E1�L#��v�OOI��ab� Y2'��/���(�\h�ǘ3�I��B4L��O�h3M�����/>��i9HZ��A��sU��R�H�����i��C��b Ϯ}�3w�@�yP��Q�@7�'J쟉¶ ��e�RPӤ*�(헶�gL8�h�dhU��uL8{��:���b9&��%O��?���"]�U;��(=+���y?��p�"�j:�p ?��^��Բ����$�z��YCYR�#c�d(�#e ��)T������fa4�b(�c��2����G�8�>Ѭ#�]����� �w/��_�:�ݻH�ib �[l>ɘm�O����Lѐ}��ɍI���S��?��{3�����˲H��� JY4ESz#�����cU�h�}����&����ݽCA@a���z������a>�619�Y};�Q�w�m0�I��d j�}du��AHk��� »�K>T7e�[>�_��� �wa �>ϻ!7I����X�f�\R�C�$HTzG�w�d�F,?���<�ܳ��?��y�z�2(Z�}(76Eҗ/u��(�ad�㋌�>���n�Gg�9��b>W�9��$��Q��e_�������˓@�aN��o:<�F���#�V �Τ���s�XN�H�Q�~�r����+G���hbZ�����7J��e�̉�q�،���s`�kZ�o��An�J�r:u�ʑ�ˎlʚ,Ϣ���L� �R,�\�7:=�3(}�J�tL||����*�1��2�ٟ�]7����7�R�� ]هz�l� �j�K����ֵv�vv��Щݫ�vb�酷k;4�-ۤ�1C����b��7��ŵ�Aj��B��ku�Rg�$U����bcΕ��-�AE�����WE-��5�&���+�F�Wɥ��q���^U��\в)�2*=�ӊ��Zֿ�YN��z�n��ue5�ӫnU�#k�ڱ6U�u���B�E��S�1�]�����B�`��cvJ�%��宖�:Nj吵@�f�q�����Η�"�8l�6���2T륗Eb��-��L��<�������/z�Ǿ�"=!פ0�b(L��i�,}��(E,��>������&b]��}���vJ�tdmL�� }ɰ��z ��_�$8~zf�5�T�й�.-��6� !��|1d�~_�2t��l�� �a�%l� �1������2��ű86\���%�b):�$l;;�F�l�W��`��1��6��0fVl�t�a��5�t���Y.�|;����p3�A��bX��z��f��X-{��2k6�U� :�D��U&g��}-���� �PE����@����t����a@;Q!�F��u�ٟ��T�k��6�lZH��M��A�6��/���:��4�'_'��ۚ�5���9�A)�`m٣@�]��X�X����y`�X̵��j���՟��� �~�-*�~6t~��%dO-��8�����-�S+���fcKm5�����/�xd�C����em?��/��J��/ܺ���$�%�<k )θ��i?ғSJqN)U�a���xK ���G�v|�F9q�c[�&]�I��I['j;u5eL���ߔ,ٕ6�|_�549�����2���d5��.�$��֘�Ԧ�k*Mc��%��8]~1!B��8mVI²�ύ�\Dn�(��W��U�C�̛�� ��N��?��] 6W)����hM%�`�� ����{��?��gg0�\ N��I��}�,��RÜCI.�ɨ���J�dկ�!:� �`�Mv���~0#fd ��ݍ}�o�5���GA'LMB�0������v��u�[�����������v^M�� Iʈ�ѡ;{kftD+L�?�A5���_���j?�۰7��V�«��mLOMOLwM-�7OʪiF)���O��~-���Tsv�d���VYa�qh�+Ag�p����Qà^�: KB��#"�^ք'bށW�i���9��z�M�N�,I���.{�o�fʽ�Xb��v�jT`�5�,���6�+��In�[�1a)��� �8ȏ� �mTv;4R�a_����H��RQn�OUg����̪��t�,�/��s�Z��>��Sͷl)M4�~�-��Σ�u#�Î���$�UoO}�B^+����|�o��طu��q軶���ȳ4��K�q9�Ąx3�A�Qȱ��hb�s���1oM���ﮎ�mm?؇��V�P��M��#ر��D�{�Zo��z�4.5�JYĐo��p��q#T�I�b����%�{̓�T@���l�۰�6�!DO&����0-U�Ix�X�?3L8�h9�,+]Kr!입��s�^����#h��ǜ-�@�\��� ��|�4����TN�y>��$39�F�C3y�;[V �/�N;��H�|[o$GP�� �EHi���2�6D1k �f��b���7��B�D�<#3��Y �Z�EJ ����'�Da�����B�v�!N���n��=jOP�ℇ�-�<��!ְF 6���E[�1�IjrC8f��S�huה�j�j缩�<��N�N4�ؤmt�`%x�� �d*�S���{�eM��J��O�g�:E�ݡ����иM�C&8570�<WWL��/���\�e�1��!�[J�~����[���s��mb:!��b_I����� H���_�7$q�*�\sM���v$��*����1�C���U�mS�`��봇�d�Ѯ�I�^:x��E\v��z�Փ�{ۯMXY�M��HKre��#-��1�&@�����5��)��SYoqK�����h� ��{�vy'E��� E�^Ћ�ˡYA+����p�Z�cԅok:�� �~�W`�D,-����0)+_a_���<���=9�� �:��=���#\_D�z5���+_)�h�����^H�ɶo�"��II��t0�dn�7O���l������?mƆX�nK�I �.�@��*����>7u�8j�Å��1��f�4�+�b����*�@� u�e��f��v���4�W�-��8��N6�+2��b�ь��*w�F�Z%�^N=פI8��ҙ�ک���XUt����\�TQ��9�& �>�U�,O#)>]��K��#�W]�~�I����r�@"��E��]ڀ�W�`#�W2 @Y�#���V Ԁ)~�����^�}����,pj���#nxŁ��S������8���ԓ�BC�·"[1������\grg��80� ԭ�Z�j]Ck��rp�'#�}�;NijG\(�Y*��*��;�J�5��7�t\��&�%ApV�D���Y��pW���+����Ӽ[�7�����U����a.p1,��BUh#��X���M.m�ל� �z���dX�|φ�(�8���Z$!=�zUw�Ҝ��d�b���&�R���v����f(E�PK�|�G^�[qu�<����0Gn���S�����w���k�t�sB�%5���/�a��?�c��W�G��gҊT�g�>^��N�m�|M"u��R�/2b �{�s�!Z&@��>�pQ]�8Q긃. �G[��x%�L F�43ý0��j&�|C���J�쥓��ks�1� 4�e����"�<!dz�c�ik�� ��}2s4���� g(�Si�Ӓ�z��"����N tv��a-�!O��%3 9c�;�*9�Ϡ��U��1�Y�6�����\�Y�������i��'�WA5I�w�� Z6+*~�9�߲�p��l�WT�)��sg�Q'�����̝�B�|j��a�JU[u;̙ l�l���5۾i0x��lY��NP927�1���Ǭ7�z���.SD��d8��2��P��s��Y����d!�ّK� �<O��%��� Za3w�Hb�<���i���>������� .���l���lyCe�����-�Ane0��l rQ�k�؉��[��K�ǿ9I�h���@M�ǝd���g�`�{��̢�ۏ?�傉�y�Mt�o내\ጶ�,�/�p�~�)�����{�ޞC*�0Na'9�n�@�sĭ��T��cY-����w��2:�a.ZG��"e� ��+����̚c�3#� �� )���?%��S�-�Ѣ{n;���-��PF=����ϑ+�Xp=d����<��%.��F��z{8*A�¥��@[f���r��{���i�c�9�*�0���A����-�V�!�Y�?����U�<�Tp��vʪ��"�i{��r*��r��rA�Z.ߏ� ���8� Y/�N�qLf�V�332��k�Fy &D8{ȇ���SP`�,?�ɰ�M���Y5,0��P��-pD��}�/�C��H/�cSl�t;���*�+�Ix;�JS!��*�y|�6ċ�ܬ_��B4_�A�����#)��5��y!R\��ㄼ�XXy=x��i+-Nj�ʙѣ�V?\�� �: ����-{UYW�4�;P�辭��C�[����2.�m�Ԉ�I�vdH��a�'�bs�Kup��I��@��kY�!��*�Y*�I�j��v $&�\��o�1i�d��nܔ��|&��ޯ��ɗ(Iwg��cIK�) $Z��,�9�z��v�#B��|sU���鲞xg�ᯪ��~ MA%�Ҽ�o�@I���5'&aݫm� ��Ţ֞H�NV�E�q�Zև���b�?�Eأ{Ua�~.*=_�i������1\p,W��&EY�B};�Ͼ˴� ���� ���s�㡮��������EE���\�t��:�Dc*�%B�s��[ �x�`�R�@�!�4(��'�d�,��p��%�_��e]���D�]�.PV|b�B �}K��c�6V�R����%��zْ$��>G=���5���}��6�g*&�0+Q�F���*�:��q�ϝ��`bQ!��8FZ�~�}M�V�) |��J��%X^W���6����:��)��.s�{)2�~�k�b��I�9W|�n7��ڵ3�&z��R���>x [ ��ܨ����)���|�������h�x�u'Po�D�"�0��@-;VF\�]�>�)�O �|�T�RW'3�X�\J��8-���j�����Df�\Qq����fM�Ӹ�3�C�&�b(�X��R�z�a�� ���ݥ].sP�l���J\���z���C���r�ED$C����Pq���,�v����["z#��{�N�! �@��:P{q�a1(����ѕl�DXP�o� q>`�͉��� h#jw��2v�=����Z^������8'(���^�5�7P����L�)����`�T�p��liF`u�hc"�ȳn���P1�1�;�cˇ}�W�9T)��5u��Mg�|�ޙ��lO�ִ���~�`�YY��4�8N�.�?�|%�� M:H���1]�N�hL���2�������qs�H��v<�)��E �����pu%Zn�g�m��t�~I�ӕR� �!c�W��_k�-� �Q!���Qp^:'Y@P����ID�:":=_i�섬L����<����4B�C��U5���=�8y���,G8!���d���&J .d�2&�X���mZ&� 8��9b�IUq�=�{N�f�u.�=V�;�q�;^�ؼ ���o{Bx�E���dt�q4��tG� ]�Dmq�ţ793�l���*-`?#=A�p�;�B�jct�:���M�؝�Ke%t��y6�՟��܍����=�T)���6MRx�soM���ƣ�fTum�����;en��D��c]_�8"F� ®bG4�˩�[�@Y� ��U kp����_<L"z��q'�v�c:q���<��(��@j`@^B|5����ڊ�_�AG��l����AfCjg�r�Ը�l�;��L��88�5�Z���n��*�A�"u��h���Vu$Ҙ�,L܉!��ԊG:rq�U`H� wH�ܱgZj�Pm�Ӆ+8�Y#�+�XA��H:�d��bg���*��-��ѵ8gޮ�J�n��.�������⢙|ى�HO���=��b�[1� ��1���p"2�R�\o� J�^T��IO��n5�̳����S��a�q�^��������}���̒[Q�����f|%�Z껺�_a��V�w.�-(7q����ί���ጁ�UP�l(�{��+�1�!��%W���_y�����z=��HW��j\B�yd )jgB��2�3�m=L����� �S��D�@!�]IwL�V+I���Z�Z���y���Ν3y?���eI"Xg˹$�e��@��-�⾻CE���7Z�l͍�^�i[�.U�H�m��K�Zw/����_g��Yd�yUa #< �h��$��S.��%f�Hk���E@@A`����� �$����v�� �}z���#���גsX����0X4g 5��.|�[�U�f�-23R�ZS��^��K6��&/q��;![ ��8�O6���y��C�xc�qXL��:��x];��8f�6_� ]����|��^�Ei�p��fZ�F]o����<�ۢ{!i^A� ���c��ǀz��;]��2)I���C�s���>Mh�!X��u��3�F�`e��IV�n�pR�{d�o�Y����A��W������<y��0��!l��B qzf�8G�S�f��3��uMO���t��w�~x����":Eg����i;��73���B��j A�(�N� �����D����_]�ϼ�����5�1��7�t��(QB���O����� �Z� �Q�]���2�)UĘrLv536��"�_2:�Cg �䒑��?�"���ܪ��"�%"D�H�"TJ)�UV�"�GO C��*GRJ�D�����Ҕkq���#f��&�N��w-r���:��wL���/6�6�g��3�O"�|�I,| 2$Қr��]��J�C{�`�qXl��:\�M��;���jtQG�����m�՜���J��.�����+b�ם�n�k���iR��y5L��!/��!T��^��)~eg�q�͞M@��u-������KV�6IG�� �A���N�Bq~���vVfX�֏f�b{}B�����jWU�Χ�����x��ޢ+��M<A�iYW��hWɔ*��HU`i@>-'6��W/��q[���q�N�K�˅O+^�c1�K�}<Y��J��O�ꩨ�bcOͣ����;p|�r�G U��Y]+�[�J�i�����"��l9�o��_�G�����\]�3��8&��u_�� ��ĩ�Z{�Oo�g�R�c�woY '�::��"%�R�D9���`�v0��u��j����^��u<'>Z^# 9p�{2�������G��eɌ��/N�5$J������C�}��bV3�k��f��wjU���Ԋ�0\�N�J�Z�h� �߬ǽ'G\$:N�B}ϳF9&��^&�=�U�ĩ�Zzs��.j�\�����TL,,v�Nu�tS�(�_{n lB�s��!<v�a�?i�F���J|�n�H��;�>?t�7���1�v��3Ϻ=_�P�#-�����~_��2��=���M���U�d��(!* ��OD�*�J��^8� ��_�ֽS��$3*��[��m��p�`_/��t/_d�YF����Cƈ�H2t�+%cp��|]���BE����q�AS�LUT:!�c)�b�Q��E}I���ԍk��k���X�2&�{�{��:헭B������ᐶ)��2n~�V��A#U�M\�p�ގZ�=o�\���\O�� �%�l�3%1E7@z Ͱ��KD]3�@�g����K��7�p�9�6��UQRqRr�{ϝ�> _0��Q��lR�#�7������C(�ݱV%/�OwS�Q��V.��-��BuD�c�jw����F��[�f�%r�d�ʻK��M�S����ݝ~sO��#���Y�-rg���9*��O��O�`=o���߽Y�P�R�ĕ�P��RW�S��8U���꒰�td�aA��Yf�8+�a�K��3ݛxt��O��K �% ��N���ƄU5K�g�CH�~�(�F��-�$�ئ�O�辮�{��i��Z������&�+ݤ�i�١|m0Pϊ��� mA��m!��~Hw�&�h�U�FĎ�%n?�a�L�19�O��28�JIq=���F�����cO�3����cg@?��=��3]���|v����|�]��uI�.}��L�.�k���Uk|�ͫ�n�ԏr�ѱ��O��Y����ޚO;^ϋ����K�{ ��ۥ���w�ӝm��2k��BV���7DS+s��D��C�¬�`R���Qk�ِVO�Y�((T�j,�s�B};I�%.��-�� ��H�����9�у�fL�Ԭ����]8f �����ݫ�u�Iԓyk� �f�o� P�C��Y�,��Q@�q~�2/�����US�q�5w��)�ቇs�XͲ��� ˀv4�?�]�4��a�hh��,�(N��'�8ò�?��nP�VSmG�7�=���휶}$v�&�*`�æ������^���]���;Y��/��.5����uWh�`�I;�F�{�0j�;��~��7�d}oPU�=�{�X�OcY��a�m.��~�<'�Kc�ɮ&F����[ߗ�Ǵ� �2G��8��*�8�xDˠ�^T�#����zW`�"�ԇoh�,����s�6���q& �� �W�L���'+� ��k�e�$W�Qۮbo�5���z�����'����w�<�%w�.������KT�>��W����Ï:߬���H��І�:k_�;@��!��5n��w��Z�N��I����+n��=�q���%��M/O���p�Z�S��n�\��B%�L77�Τ���.*t�V:�Cu͟�˅�5w�+��0�Q��ET��=�=��6y˟�D��dG�+�e�t#W^Bi-����Gߏv�e�yf'Bc}CQ '�]�ZZ�Wo0��,�⌫�_�%�����x#] �߭�� |˨�aş�� A��/DI܂���*��0���(����(���4��� gr�����E*I�H�/�X�-�&.6��הv��Wea*�ꃀt<^���;ML:�(��?��7��C#����Y�VK��r�/�1g��x(�E���|!�v��GyWd��%���7�������ݽ5��ȕ猴�ZM�܋�.�Hjプj0j|���#�c��ชi6�{ď{���"b�\�pO���p���x�SI���w��ޫ�<]����w��կ���L>��JQ�O$dU���L���J�n�k�:�sï \��-@g��6�41k�81?�ykK����w#pL�}"U�֜�Č8���z�EX�R/A�Vo������K��䮺nę享A��/�k'S� ��r� /�9��Of����q�W��^��Mض���M��H-kT�/S��Ĉ��7^�r�*C,��i�mۑ�yS���Q� ?~[Ub��7��� �#Qs�_u��;DA�h�~89���� DV�8��Tdr��A���L͍C/fk(���i�2�@�,����s���r<�����yFL�C�l��Zl�5��XVWUڑ�"C�F-⏼�1G����Z�0E�ӯX�����WLIF�_pZ�/�@��g������曤`�Y�X H�Z��]��, ��Z���=c� Z�,5��O�+5m���}���9+�B��,�>�)Ӻ�3nM[�j}�{�H�j'�xD��(��څ'�#�+B�-��,���#��f͵8�.�q[3�#�$pJP�������`��R���Դ ���T&�H��S�Q7�=`3@|�Tե��O��O�x��Wd�e٧V�zb�b�(��2�a,�%���4Q�����ug�ԉ��=�*�*�R?Bx�%���Y��T���K�B,��w���+P6DF��V�fΐC��w��T��w +A�PU9���U|���3�����3m�_�n�C�b�01�|~h&<ա�F)l����Ƥ���t.�?��J(����,��s���1�^��g��ẃ��Ev�y꣺���h��۩�x�K�K��#S���L�P<P18TX�;�Zn��)��1�9�y��Ǎ����;+tV��S[q�iE�����f �h��G�.�d��&Q�Hz��,@��5��0�x|�E� '�ܑW�W� ?�#��X5��U�*�j�[١+5H�Yk�*�\x �s݆����E�f��I-�NX�-I�?��� �����6 ���$�I|n���&����)xBhJk�N���Ga�{��a�\� ���&(~�ͦpO�Ǣ��%�� ��0�`�c� p�%>[��bZH�I����rM�I,頙n�3?�]�C�g���d���; Jt�Am=�^ ��x�����P{���4}��&��Km}g��ZANa�Z��C{H�}�u���T���P�h��yu�u���c�/���!�-P� 4^���So [�²�&oN�A>k��=�{�+�U>_d���$��Os��_�0��|/}��z���a�o��FT���]_��@���S#v��q����~���=�u(tK$Enwu�7� 3y`O�\,�L�\?�3��}��e1�Ty ��^�-�k��Э��_����Wa4+C63�̾�s�/��;R�g�s5_��>L>*O�v� �n�ʄ����xt��u׆���=t�_���O@�D5T���}(��I�T��q��������z k��d���t����+���?���qf0��T<e�% ��ʊ�y��R� w� �k�C'�͵�M�]�h.�~�<Tp���Nx����O��M�p��&�H[U�ug�Z���Y��c����'���\ϛ�F��Z�t?gM�^x�r)��j' y�R��\��ƴ���)�q� ���p_?r M�_��W&jJ��_|�w��UzՍN�dw��Jr�M /�n�ݱ���q�暸1흱)ݴ�Ѽ��e��U ]�-.X& MS���>h���c����Jۊ� �����M�>�*Οr C��(�68���F�̒����!����:A<�D(�;�)�Hf����������UyK �+(�k�Pqw�?3�k���|J�`��Tl\�������R�fbng�������D`y�R������~+�����ᙅ�?�m>Lx�l8���IV��X��;b�oea���''3\8��5��|�c�ju��ݺGmH�8�So���<�K�t�1U~~p���CW��d3O,�;�0veՊ ���Z���~0Q+�?�}��s�C�B�r�A�6��:�^Jթ��8�T#F�Ic�����8� �z��.��fI�b�d0紺z��$5���'���`&q�1���'��Lg�q��Jr�$,����7����<2����>;?q�%Q�k~�KH��~���vMs�s��i�w����x�D�z����z�ܢ���Mt?~�e�}k�'6�8�ާIXn�95������V�T`997��ϵMt�xe8g�(1�!K7j�Xe���gO�ϯԽ/+J����NAկ�ڱ��>���Nq��З3 ���L��ė�KJ2��n\�?*�g����]�*x�*�Lj�|EA��;^M[W^���V���)�U���(t����/��-���`���US�˗����)Wi?|\����w� ����jr$�s���NY�j2�V�`jG�H�U��4��<���v�����jǝ��B1���)Y�z�[ڳ�E����6�z�\o�唤me����Ip�]���T�j?:t��|�o�!��u5-�0 �ߖ�w�Xld�1���\��$�Ih�e��7�~ۑa���ĝ�h=x�z٭t,�\<�t+fED��M݉Ѓ���c;�2R����_sj��F�!���ю˶'up��I�,FO*������9b�����ִ��ѵ�&�j>CM%S腼�BVf��7.�(4�������S��J���zrv��nq�'uM��0j3%Ԛ$>�Ə��=�X���L�K6�BD1q�lIiaaF�ďoT��Ê�~)ާ�f?h<�����b���(��Z*�dE:z�*�sM@� )=�������qzR�ӥ�2m����+���! j%�d�8UR?G��tĻ�F��a+��ԈA�e��}�A�t^����Ĵ:~�zW�#����@4�M�DGE�>j۳% �v��M�@�`��3=֑�C�����y�� �!��F�oSf�/��:��4D^XZ��Ū�%�rYQ�u����Ԉ�`�@6O>�0��#�$D�xY��D)#e�x4~&-I�z�5I�F��k#�풨5RgU3�%��h�KY�!�!��D�\����_���E}���q�y-��?�y}\��z����ׄ��[/�fH�s�m�Ͷ�]�nt�o��m�a:��_�y;l��}�}ڸ�Z�678�n=��n��J&+ٟx��u�XLJ��gS�kj�4�N�hfV4C�Sm���z~C0NBrb"�D�1�̉|��Oo�)�O'��&����9��@z��bp���03(�6k.������Y4�C�]�-mMk b��ո �,��'���}�k��'��G�m�9Ɋ�ru���9��>�͛%B��ؼN<�JW|���O/��+?'�]��o�ӎ�= �f�ݟͬ�i�A�l�x�3{?�g@f�&��&Q�tu�18n7��)�� ����]az�GDd n2,�=��L�1C߽|������/��~�,b3&�f���mB���`�V�Z��q�V3��%��g�0JTm�ܨ�F��Eg,Ԋ�$u��LWBX.���3�N$%�����l%5n�N�p������#���,��WvEB�� Sz* A��t*�&I��æВX�,g/<̉G�a/b�n!|똧�e�56y*�u{�7�3<��|B�s���N���&68'��������Z?T]��F�O3g��) -�`0�ig�j��[R�j��8��ӬΤ���XEy�z���W��,J�DH��ƫ�~��N���,<���&T�r*}ӅE��OAm�����0҃�C�~����ܻX��?��"o�|�uf�:9��r*3f�Q��TvVF�炨H�?,-���"d�Ȏndsw�$��cil�Q��|�����1�P��y��s���gV��s?�!p4)�p_�CE��@(����7ڇp{���L��}�Ρ�{��I�hS����@�/BJ�ؓ6�f�Q�npp$�e��=}1��J�G�@����d�d�6d�ҝ�����f]kٚ�p3�l�Gn�k������13���{㫉�KffO��&�f��nn_�>IUOrI�ci�'��~�}��J�R��A������l��|r�<����\��D�mqQ����)m���ITh3;e���v�*{VD><�<k3��G�I�Eٟ���3z��S��܇]У�ɶ�5�g�5u'`�QII�rրc<��+J�J���&�W��J��U���*Zp-JyJ+�PK f51y�Ǻ��R6���%����I'�+�����hBjy��g5�w�m��#���(��'�r�&2��'f��RG�d s�\�}CA���G���2��}K�����h���[ce��ֽC" _R� ����o���%���ct����Fh�Jd#���ݵK>�}���[k_�I��e���0mt4Xb�Li�Z�Q�A4?����E� ړ�BŦ��\��G��z�lpfI���0�S��#)7��"rC�_�eZ����H��B��JX)+g���U��ZY�edt(�7��2��^�؝>FU`,�[ޒP���v��d����JZ��3b=��Y��Xվ)��: �T3���(�4��VO��}%����W�c�ƭ�ۥ����ɓ%[ �z��jC� ��d�aP�V]mH�$�%[ �z��Z�B�nZ@DR�o<d~E��������b6m��������v���n� ���m���s�I;��ns�fJоt"��*zp�"���!h_=�0#�F��6.Iً�<y�)�YkQ��{ږ8�yݞu��q��8ȶI��&R�M�j��?����K��z��yvZ��{È�9�Η�ݲ�/��>e�T��X��7�jm�T@�v��jz���ʃt<�o���R�-���S�ѥ2RS[ޓyJ�_�3�Up ���z��sBxE�fyUH�阷�Z�X�-��s�j���Ժ�,O)?8�ͺg3�PZ��7��=����:_��I:��+G��"�o.��>�TFjj�K�S꽮�K=E�k��@'��m*eu&����{��kQ�i Q*8�c�-�����I�>�MѬ��SnV2M.t�0�r����U�Vç�6�9a(�Ҝ@�Ժ�n��.��Α�-hdO��ڲ-���l�.�U��/v� ��:J�������Zޕ���>�]da��]�I�q��=��m�� ����m�0�[���I�G�f-�h��zFHX9���O7줷k^���y��h�tγ#��$lz5�Y+=G� �:g�-E�N�0��5�����<�Oo���Qa��eo� �ő� �2��n�4�:�Ѥ��g��٬=��,^qG� ~��2>{�ތ�;N<\!�bAr����[�f�T(8�s�u+D�5�j~�La�IIf�TOy�"#�7B��J�}�m-98f��j���+�����ns�׳~_��,�Pbw`-���� �LPTL#o�]kQ�W�;�*R��^a#�I��R�B뷞�"he�` ��'y��#���0�{S3&�\*�� !\n'������(�:r�����^3�8�n�w��hKC�37[��Mu��X�ؚ�^@���=>�j�����E^����RlsCѦv;�YL�]NS���zN��:N1���V#�b�n'�̠ *�5z8������c�� �9�ڗC��1`�*�E�(��X�[u��iI`K3y�@}�����jDp ��R*AVw��$���?g>���ά���9�P�����;��v:�cD�a�1\��8�)�\po�����*�m��VÝ�`�ñN���� d�##� �b�Q��pl�١|���l�]9x�����m��T�oj�l,rQ��1p;��L"e���p�n-��F�^K��iiC��4�"�����\��َS9ɵ�Px�p+1��5q4��;�7�PDz%� 7�^�o����?>ք7صi T=C�!��)�b��ibs��Nހ�r�p����&�u]�:��h l�QX�C��x)��7z4x%��'R�l^w��x5C�|-`x،��ځ$�e��5�<9F�����{�M�f��/���A�((R!oʹ+���XtWl�/�a��L��k�ʙ�N��f�������gG�i��͜N2�A>���a�<��% �J�M����c�ߩٝ�=)�<gY�<>��_WH�v����S�<P�ղ�z&���5��ʫ;g���q��;��NQ�0��VX+9��G��S���3��O"%�-��*Z"SVg �GV�����۶�F Bjd�>����l2�'�7�D!}�<Q�`9F���$��䷁Qj���[3Y]�))ҰxM�s�F�K4ȟ%�й[�sJy �C9%h�<�9~[�c�l�D�k��7!�E�9��1z E������ ���S����Y�����np]� Oo�kѝw�u{����s�B,K�qb$��� g+w٠�s���f�Ʃ�P��{iø\�4�w4��%|�v�4��6�2X�R�,S�)�`=�a�-��X��9�q���)�X���h&�<�KY2\�З\�͡���$���z�� 9c�}�P�8^}p��$��鋆���۲�����m�\�ɀ���fYl�}70V�����F��9+����y=D=�f �bSE��Em��ఃx��_ h�ۀ��z��\�/$��'Hy�_�d���������`��� ����Y���d+�R�1�.(F�L�A!0Yه9�<�<ȉ�� ?���N8n���(/��M�ӳ�b���I����'�0�U��R 8�,��00�б1�u�C�%D�5�$T㓽M(��-���.����ȧ�>��2��>��.=Tg��UI���x/���U�J�;��� QtZvh��tW�9c8!�q�<|�<h��"M%)�L�3i�ጷB�c�E�y���8r��Q����;P��R�ur��<?�ҟ�ɷ��LP�/�H��$�rC<=E�[�u�E��!G�� g>�û���?5S�f\M��px��3/��]��M'������Ĝ�=�ƭPU���떅0H�Εݧ��XO��Ë�?۩�?+�Ji��7�K=����$S��s�)Ǹkv�M��9������E�l�ע5�g��(:��ʁ�G�r��a_=7�m�^Z9��EN�)ov���1N':O�r������2�1�d��Y�p�uz�~��[�>�,MS���&� +�~�R��K�]�gA��3h���Qr��=/����^R!L5�264l��w��O�N��໋$F�=��������:s�T�S8�.�p%�9H����?��#�D,r����~���}��G^_b����~�3�|�]��Mz��1D��=���ǽ�]n:%G���w�y 2Jӎ�2熢uʼJӇk�I5Xn�*�����k9}}�ȑ�C3h ����3���C��Fm��<.��M+�`)��%ƨQ���U�U{���iIV��K8���L�E>~Q2FN���rDc�g�Nv���`_2N-�g�*V�� �K�&5�L�Fuxls�|�`q�T��"��F� �L��ʃ�/�n��Wd�=����m����'�A��R�K�zT��A����tٺ�%*�s�W>8��rMR%�9vH]���Y�l�BW�(~P���#�r@�t�u�$[Xsd�d>%�<~���ɏRtt������`�C�^T���y7W+�v�D��r]�~��W,�I&J�ܶ��Y��1�>t<$�z��t�mZC���R;��zG�x�J}��ǡ���l�����[�F�^R��Ǎ��$�c���2���&���̚7p��sܣ�qIY0v�y�J e �3p ������U0�>����s�!09�eC"/�,�R1iҪҶsJ����Y�'"�R2��zOMMdZg�.=G2c=M|.Yץ�F£�%|�|��,%�"���Cg,(�X��,[�F�$��o�߉@��$m��;1�f��vv܉�\ٝx��h�H������������$]єJ7��G���I���#Y��L9p��̎2#�,Pڑ��b�B�F_P�ɥ6%�id~�2���q;bɴ�ƚ��q��E�J7��0�Zrx<a?���� ��Vj��K�i,��@A���6�.@�[A�řɓ������R� ��qM��n/�GpJ��%�D7�a��J���(ҥv����mv�����s���R����u\������������`�'Id �Fg0Yl��Eb�T&W(Uj�V�@��,O ��*��`��.�/���L���L0[If/���ף���oَ��Eb�T&W(U:�z��F�&�f���Y!֭����C�<�=��n�<�`�Z�h����߯M��`S�ם� )��� D��ݶ��茦J�Q����B�X"��J�Z��� F���5d����wptrvqus����VC���B�z 5i֢U�v:uQ��E���p�MR���V�Q��u������n��fqs(w��{����e�w$�G�ي�"<�K���L�n��Fj#?\[�:���S+y�}V<�K���Z�FuV���4mΜ��θ� ��1��-E����֍���C�]����fto�L+2�T]Mso[���'�a���o�l���Ѫ�W�a�Ixot�3{;��x�T�fF�>��p}Mr͆���Q�� Yį��V�!aj#� ͕��f�i�9�lN�З4I�w�;�TP"w0���W��j}t�sv�uZ�Oƽ��*;�\6�=����8cShqN�y���GZ�x zp�#{�`7� ����8 �@�$���'!f.I�l�SM3�3��c��|�'5��6����ƿ-��u��r�1�?J�%(�����S���dTv��4�r! �̨�2"+=�扑�-#�r��a��O�����X\��w�$DŽ<Goq�:���0ђ��.��e�:���3�a�E�C�����(�VM�dl�Hj��-�D9%#@�,�F �� !V��h~ 7_���.��"��0��Q!�`2/�����7�u^� ]s�:.��A�P�0jw��K�>�- lG[|A0٬֜�Y�V�l����ǎ�u�;:��˷V���ʀQ&�D��M\��?��a]l��M�����쿜>�"a�a�M�D�e]�E�]jo�?��j�av:�Dx������O3v�@�S��fW���Ǐ��g�/u���D��7,���,V��|��=��E��|Rpt���R�0p����yC��jtheme-joomla/assets/fonts/opensans-99466294.woff2000064400000046420151666572120015332 0ustar00wOF2M�hL�`��$`?STATZ�,�| � ��|��l�"6$�@ ���}ě�����Sw~p��F�8��W��?%9���l�Tm��K0K�2�1����ŵ U�2%�Q�P��vt^N�27��MbM&~�`e��{��u�G�Y���ЎKUdv0��Z�nI,\�Y��M�H���ڴ��#�Ё� %>?{����$r���� �3|�_,,��{��Xز3<�F�$'�A8��XǂE��̬X���MĜ�i�C@a���{:���`�b��m0PQ1VV�b$%�D� ���U�s�E�/�E��=�����G�P�!<*���ea0. ���\�^�C�7?�\��Z��U������V�R\���=�P��(w���A�� P�,Ӕr��&��rQ���r�fYZٖt�AWM�C��`�����j�����b�&�j�K���v?��aZa<��9�.3 �5��Y���$L�ooj����\���?c�9G[%C�:Ԟc��[0,չ5g��1A��,y2}]� �S�bd�������{�X����f�v�=@'}���T"[����w�+�$쯄n �i7�M��g�����/�3�����l�%�p!W�:�}z{���OXM����U��h\�-�v����U��<��)U�coʧw�E�ҭKW��}��P (ΐ��@nP�@R�Z�&p�m��q��_w �MZ��۹(� �hk���{�3��5i�Ej������� ���k� �$���P+� �Yj���ҋv pN@�ˀqz0H�fE`+�Ǹ� Õ�x�_�9���<�H=�U�Eg#��v��\dӵ+q8�Ԑ�_���s1��*OI�;fXhK#C��E�Z���r5����U�;���n��E;�*3����7�#"t÷~�=�{UG ���u��Ӕ#�>x�@��,�Hل`�E��)�IđA�˦�%�H�-��Ø��+G6,| r㒎��� e��o��c����/\�E{�]�?���Γ�uT*�Bt�e�w4:ک����{ M"��a�R�x���ё��24%��'3~���;���6;�8� �o�p� ~Ĕ�R�גaYƻ�G���B̒3B,����7�\"��1�>�W��� }y.�uz�,�e���R�ܟ|ˇ�y�n~̵\�vֲ�錦?�iNm�S(n���$FNh!ѿ6� �O�㘓��Y�`�p�ϯ���0���<�۳?Wfw�Fju��$<xxz�}�zJS8��Y�eJ'~b�5�!z�8��?��ױ��c9&�妣=j̐�3���I��I�J���4������~��\��J8��������������n����-�vL3:�q����l�>�6m�ƭߚ�OڪT� �[}��z^���W��Z]h�ڮ�Z�����'�<��}ցp�~jr���-��Is�v���H���-�[ �y��}���, �7n^�k�+�P��q�3?E��)�p٢/�5�F� ��#��Ϊ�X�÷�6�8ԗҞMq������L���i x�>������Ȟ�AB��]�b�VBt3%�/ҧ�y7xCa��|[�@j�9����l�^�Ҳ�|_4�)�W���$� ��-�uP����B��oB�s�Z�B{Ɠ�ka�V��'tc�(p���=D�LE"t����@8*�����w�h!��D0�S>��eQrJ�e���:��N0�0��)M��9:X��(.�"j096=��X*�0fXMe c���a`�7]�@�`܃q�w�&@�$p_��C��ǁ[q�Y��L�U\����g��~�x�0�����F��-�c��ڇ{�0u��:~жzk`�a�Y# ��I- [r��kkm��MS�c̬�o:����炁��P��#��υJA�fЗv}����`҃��� x0p,3�V�8Y��!����9Xp��7<:�fY��Q��0;��}T�'q,� 3�u���i,Kt���U���ߵ�]w&��;��;��N-lY�h�OK��P��c�%��M1����z�� �^Ӕ=3?6U�s�.��t�Q�Yu]{ l=lD&ҔU:"�茽�x�|�x{Q�{t#���\�4� ���slX��t�7{5�9p�ǰ�f5�{�E�����&���X��/Z�ٲ�Yg$�{Hm�h�*0Φ��$�� F|����C{��XǑ�B/��PLQo�U��▟�1Cf1����:s���,�H�R�� ��*�Z��Y��FM�.�G�W[�UjG����z�:��,����(3��rfh��T���Zji�R�c%����=��Y9-'���^�3¿�y�;��7��#�~p������q��3�j��_/3C"�g���,H������h_b���:�c�B�'XS�D ��Ș�ɪ:$�D�����mu�Zz˅�֚�����:y|�E&Y�x���5W��橶܄r7\�R�F���C���Bkm�,�a�91���\���>�d�����TR7/Zm�u6f����`�LjD�B��ƙ�l����6��U��Ԧ�kյ;���ѽ3�_hG{[kYiIqQaA~^nNvVf�$=-5%9I��/� ���.��b2�4*%:�L"�H�� ����ꈷ�� ��o/��l~�GGW�yg)8�&����R�1�z�\�;�B���g��"�d�l0���⏕�'�S�B�w�����פ�AI�C)d Z� 0���LS-k^�X$�SL:Ϩ:�,K^Or!왆��;�J�J(7���~�QO#P'V��li�L2l�����Aj� E{J<��ܱ���=�%�s�Й� ��DЛb|3�l�fO#��՛�p˧E�C0���H�#��-G�tiGM�e��_<��2��٭[��Q�49(�����Mn�pgc�y�.B9�8AP���a���Q��U�Pk�E�[�ucy~<��Y^�d)�xa�x��:D�⧫�tf��������0:y��v�h�qL;� ���� ?2��T<��`��#���K^���U�֩��@�Q�f�^�*Lpo��*W��L��� �)�ݫ�mR~��?g���@B�#h_~m�r]�*�g�dX�����V��xN2g���?r�5��i�3"ء���G��#x|�$��V��Mu� wg�=%�� w��i�G��L��Ѣ;ְ��_����~�Qi9*d�'Q�#�iA���5��g�4���F4<�[4��67�B�hhsgO��l�;+2�{&�hj�5=_},� X�g/h�']?�����WE�<��,�~�`�X,-|��0�g|�%�[��k�'���)�<C�՝�p��Ć�>��E�7�ȫ���/��-���+ɳ�1i�v�f���̌���͢&��x(���e'���n�+��҆|���U �td��DB�Y�r�a]�a#5�E�S����8{���d��x�"(P[���DE%�ՙz�@��L�]u�P't� ��Ku$M����r7�f&�v�i\! Bohs���]8Z�|;6�-U�!?G�@�P�/�(U�4���a�\:zP� 4zŕ<�`F0Ul̄�Q�� T��3��e����j����lh/�R��B�F,����v�ٚ\�F��!�]v༃|QO�0X�3\3C� )7'��p�\�o!�G�y�fr�p��#�ڸJ@Mb��*%a�����3���q�E���J��F�v�h���_Z����)v6Xpp�G4����?�����(b��H��4�W�šA�g��C��"�T�l��d�J�%�U^��t��u'B�����:�a�� `Kt% ��V}�[��W�G��xq�sD�$�N{,:N�n~Q3����#��x WsM�����y�C�`�w�}�S�G��[`��X�n-IGO��Zh6��S�E8�[��tSj��F�x*����Ѩ�x���W�a�D��sM��(�X��+�����k�٫��r[Qx���{|)Z������|���S���ʾh �P�/��7�r�H�%�:&'�k@�rn����*��oC���U��Ǯ��u����~� �.HK������x�\���V1ނ�y�Gdo5۰�ٓ�;��PR����2�Q���ܻrő\�Ѱ�����M=��I�'�gMU��;�p5-*?D�t<3�W�4��; �(�qK�6!p-��=�D����*Z���fU�T��6⎛����M� ���i���hQP�|�1*F'��D�#Z��z�_����g8�o���[�`(�HJ�����^��Ty[jZ�����S�*��_�XxZb%��y���Sv��E=t�?��[��kZ�?�֖��w��N=���rB/8\�eј�X�\S�ؚ)Li`=�(��t2��e�鯐�)��q�w���x0��TF�<��HR��鰬Ei>�H��TJ^02F�+���~2�G�����87��?^ d��D�ND)�I�<��GO��t��h�K.Z!A^z"e����+����5ǦgFz6@s����;����VO]��F���vvKq-��Џz8����#W0��z�6�Q��y�;�K\.������pT�,�K]{d3m�E��r��{���i�c�9�*�0���Ѓ\��-!+y���r�,��f�H���4\�C������i��N�@C�$F�s}>]�;�{҇�T{+���D��0��9R���Z,��%4��[�����\�:�KS���\�R01mrl�/�|V�Xb���B"�U�,.�&�_�"�3�Q����!��M�������p�Š��5���u�ƥjri� %�l4D���Y�d5V�UP\�VPuss��z�N�Ȫ� �L`\��� �u���_�#�˴��rN���Su3��X��U� �4G7[@[ր�t�V��0#�Ӌ9���\_�E� �X���J�s��X2Z��,�A����l�Ip{ �:�p=�ւ&ڐ=���0jl�Fn:Cec;��+#A@�0QV�����*;i>^j9�(�����X� Ew5 ؎Xɭ��cbƥ'B�h_�����ɵi���A���I��H�Pʼ��'Pݪ����P�!a'Y��ʽ�s]kD�1F�E添z�y<WG�+��G'���7�����/�97�w���h��U�OH��� ���U:��C�m1;�< �Su�W?�N�PF�=�9i�2]/ڤCX%�����Sva���)�s��(�D(#�$�}?[�� �/6I#y��k�ڿ��|�ы���T�L%"4f���F�,G�p�Loet~��[��M���[��5Elʰs K��`<A79\:~����G��C����]���S*ɉ��¶���N@4���6*����P�8zT�^8(�Nv���4�>&���3켇ɤ�!��mY6}"��_���Г�����IY�w�� ���bx�iܟ�� ��qBb�LoUf�-I� �.z��W3�r튏��V/�&����*[���!,�����,��>x�%O�<LÅ4B_�MT�W����$ҎՁ���G�M=������� ��qK���K*���ś��F��m:�Q�]d�ORgl�� ڍ�~�_O��d%���h9n��Ѝ2����N2��� ^YI��< I�z/�ߜ'��V&�,v��x�QigzQYaOHDY5~BmҏO��b�C�A��֮v��B�c��@��_��p���Bk� jk!�ĵ�i ��p�%籡��Q�;�q˚@�I� 4Ls�IS�8cQ��>���p`(_.��]_�O���M'Y 秤j0<���3���ݱ��Ce\�bY+����N��;\��$�X%A\�.^2�KKW���{�hA�{�D�ͧ}hM�P'Z��R�i�b�UAS|�En�({h��-�+�ZV��V�֣�%l��u���H`���+��Xu��i�SXB��+c$�Z����y�˷���8�>����T��ڱ����T�:�$��2������Cv��P̻�to)0(=��B�F�u7�B�����ڜ�"w����~���%����C�jX�� *TP�W�Ң����1|�a��z�Y�ȀbY�g��yHr��4(�У�ċr�'.��D��$:��ɛǠ=�yjҁe���� iU�'Ľ���M �Ir�}��'��|�J%�!Ta��B�����:��J^"�_��Nd\j �9���@�S��Lӆs({��б��\=_��t�xw: c�;��̈́�T�o��w�%�bFs����!a¼؋#F�&j%��&5 Ӎ���(n J����y�X�����Rl�>��Jʐ(1 J@�L��LɮE�Ⱥ�b��~�+b̤�͑�@\�R�^��<7G����8^��'[$��8I]���֙�8]i�rMb��7F&�Ǥ�Y�wC>�QjmU6��{� �W��$�-��LKj�.�_�{�?'k�i �Z�M����7a�k���_�Ƚ#��&�����.%мRC��bU��Dm��$/ ��=���^���n�6C� a[ ���H�f͵XS��ԑr2Q�Mj ��3��,F�~� ����P(��D�L%�B@�`�=L�af﹡)�g�H$���;�fN� ��^pHz�4�_*ѷ�%�g��ml��@�����j�����M�*P��^~��"��p�S��r�ʖ$ܖ�i��Q�2����ڴFG��^�!^ �>��%��\Ǩ�lH~RH�~<1 �s�A�S��ig�+���7~�~�W~� =�BD�[Z�M��g��<_1��78F�]$��P��W�ȧ2���ZY��ɴ��7��/L�^j,̡(#��a` �g��%��T��W���V��"��0]uHҎ�ۏ��!^�viM�[��S�)��|��0|a��1J�X�\���GH�y)$d4@��`��^��g&� ��KY�ӎ��^]�K�+�k�`���Ix�+}zڋ�eV����n���F���<�<]��R-u����h��� +?��$�����킱���V�%��/�;��pP!$^ ��B�D��y��~L�឵P�>�r6�Y���Љ ��h�I�a�c$k�i�Hf� >\X:6�R�<����0MP*8��`^8:�[�oҹ�X����-�j�?>y����l��b�cp9���=�W�t[��X_O'�jH���ؖg�s�������%[F�X^h�v�-��/�����U��]�����^v�,��K�l�I�wݏ��O �+{ô_��*�A�����=�OH.I�����Z���xv^�-��̑����bCF��m��ƿ��V6��R���q��Qf��ܬbc_��1?�#N���Z���:b����U]��/��+��v��Gc�~)���W�u$�;O�_&.��V�j���CO�8!AQ�ӐA�PU�_�/T��0[_;����#6:R3)��Iz�w�ɪH|v�)i�aB���8 �wfj��:���ųˁ�����P��}XOOuE߀?8�F{�e!�z�\�j��:�M���1����a�pW }��u �)EԘ�Hiܩ v�m�'Ȯ��y�LTS%�T��YY��J>{(�O�ni��Z�w�ޓv&�J/y����K������RH��C�`��S|��'g!A��R٩��'~�.������er�gO��r� P���.;e������@��q���]'A�B�X��E�l��v��m��r]h~����Ƕ��!y.�Q�p������Lw�C����n���m~���F��+��S2�y�tpD��=<�=�6I��D�����hH���?m1��P˜{={�k��%5*Ld=$�j�eg�Pʪ����)¨�>�"Ҽ��-g� �6��ڌ�3��W����Y��X��\�.�L�i�b�$;�\���1a�� 12w,�+6b�ξi�h�U4J�����,�7J�v���8#�\�h��?���%F��Ǜg���[���R'�*o�\54����'�'l�4��99�<l�EYM� �a+�q< �4�L�x�.z[�e���2�V��4�0Mp����TE1���EMZ�EOT*1�f�2��\9�Dl�@A)���V����)�OUrB��4g�6L���$=A�m.l[���S�� � 6�~�cdw�D���Z�n�g����PQXÏw<�q��Դ��(��8��].��� NQ-HD�[�Y�Л��_�e�={�.�}���(�զ5&U.*O3�s�3Q��K�1���o�4��f$�*4E�W?d�Q/@ǧ��@���A��� �OE.�T�֓�9���o�����W�j/�=��H']�ҋ�=k!+��?��fP_���3t&~�$��f�d���b� \�"?�߶����Ѱ s ����tv�/@H��y y�}<(�ӫ���_ZA���/�P�l� �k '@HM�� M�&�ӿ<���~�)}�=?���h��VrۖnkM��`˽d8�js���~��YH Hn ��G"�rB9�>�M��q��v s���ˡ�Lt����ɦh��([�4��+�4�����Y�&��ԂL[�e�2���Xp� WW�dD��σ���`d�:��+�����)���˦x�PmS�����ɲ��l=���c��˿������`���b,�<��d�|{!��ױ���#�֗܀�#���H`@(^� w����B��V��bf?�Q߆��^�u�L��)�����ݼ�k�Ji��jH7�#�=K�iN@��p)�LIV\�����K1t���#�]FQ�3R��b�at�xFҼ/�$& �4�ͷ!7���I��7q�-K�%�D���x���*���!2/��d�4���!Ր�P�$]�*��{δ�Xf6f��˗�j.rx�U[��WRӋ�� A��jF$��EiD���M+�B��M��jF��::�.���*p�G� G�q�u54�����,OsXyC+L��#HУj4� ��g�3��=�Z�R�"���������N��KIz���9s�m�9�e�Ȉi��_��P�US�&5s���P��ZL�I9�3j��FZ�����/�Ar�j�G1X��j��4!�_������y�Py�����H�3��ٴz�X~s��1xt��#WUPcE5�Na�x�iuFi_�^^>/_���u07@�T{�M��Pђ�S�p�������Us)0���Z@j��-���|6�~M����3�,xZ��K��^*��}Y�Ā&Ir@�)����7g$�Z�8%����P����ҍ��Uv��p���6V����]�N"����z�Օ�<_|ka!��Z+�z���t����$ FEA�LbG�'~��lm't��#V�9 ����<��$��j�Е��lq���1�uY�����=��������]VTӸ��x�4)�|Hߙ�Dm�6��������f�a�.g6몧�7���m{�%�T�1QJ,;�ŋ&U9eue�M%��%�U�'4Z��9.f�4�a6����qę�˜�����%r���1�h�ùp�KOKKKsKKO���� �Ch8��-.@�Fyf%x� ,=��楥Ѫ�"�**���|�n��MaF���4Yp��A̱bT1\��ʅ��m5����b�]�w~�w8� ��.I�±j��dr�KT�`,$Fɖ�&��vĭ�?�gr��֏��T.���78�&wĠi��~F�2F����l���ͥ��f-�_�s�u�;��Ec�{5aw�2��� ���n�i����VT˪w�s����\�c�w��S��E� o��>��^^ZJ�8�^�ُ��g�N��*Y�w�^���_�Q=� #(�oa��YA�0|����U�/^�ba��چ�(�S�ʰ�[d�m�'��P���x��v����r�l�j�r�1�$f��ʼ��i�1�Qtа�7�7�� @1%-�� d�c4�f�D���B{��t�d�{U�� z�����"q�����6�U;���e6��r� ���+��ƎZ�`4n��d0ֆ���Ye(|����})��u@���q������`�ӽX-<n[��G`)��S�z��yr�0E�R< D�3�Z��h�� 6Of���^�^w2���&� ����cp����!$�!D�(��/L��Zl���nؓ�Lð�s�h��q �^���h ����-b���X��"�gk�Ą3q�~�D��J7Fxp,�����F�#�\i�lj���> �j���q�����T��/�ƆD�2�N����~��P�i�V����LT_��L��0�v�t��/.2 4yO���I\2�3�P�x���yk�8giCͼT���5C�a���ʪHDw��|;�1ո;��@�r*B,BM�����9�&MWl���=Q-�{ �����@�8��+t��P�� �T�_hTG@�-ჵ/&@UL̿C�s�l�P�@�]j>7���FT�W����W�+s�����|�=<��p��M"�6�3�%��ܪA�{�8��9���Sz�_���|� X *��9V=R�������s� *� �@(�`�ؠ���J;���p�ڜ�e"�Ğ��JS����f@�r���tw0�6K���Pj� ���M�FD{z{�8��ȳ^Y\��� ����� ��.��q��|�Ú�)�[�9���s��)�s �3�W��,DV6B+O+/؞q�c��=��/s%�ЅU�.0����sv�p�Qed"-��g�i/�$Q��z*#��k��`�6�0��CZ�;��X�D�����8�k�ݰ>�������P m�<j��V�&9n|�,�od]�[f�CR~=gL��mz ҤtR��9���j��T����m�/[��ֿ�$2�#ղ�~���P��:6�S��cS *�Z��z�G�c��hH@+���}s�3 ����uY���ws��]Mo��2O�O;dޠ��#��f�^�>��]R��}�|��3��+���bdGǨ�+aڏ]- ;/���W�e�Z���e.p.t�<�7�],}�w�!yZ���6#��s�� �.5q��]Fz%�s�N�'γ�����M^�a=�����ya��W�[�A��,Q�� ����7�~�?����7s�'� �4���h�g�Q:e@����LQ�%\�څ����F5߳�E��R�'�YU�0����""��i�\_qHg��Ji��Ѣ=��? ݛ�~�%�#�G"ɓ�uX�Y��͑|��,�,Z讙�Ԇ��]�����/D�ٮ�,��&̈b#8Ҙ�Z����%D��@;uy|�#3K@������I���Zqs;�mu��ү��/_lh���I��bT����t�s� �����1b�d�BX�鞹f8�'�$v٣c�A!�Z��0,�(�r�R|��tyR^U���B�"�csf=�qm�p�y�f(�����N��!.�!�{��s�!N�1�� ��]�#.�~}��]M��qt'�@]XV�n�s+9S7���aK�H֎��qq�b�3��l��^c�������}��Z��y���}�2j��-��ɏ��QGK��|�)�-����p�\z�<�H)N�9jE��L�WS5*��;������t����A�&L�aѝ�:��覴eM��Y���w�� Ϭ��E��.�|q�]LJ�P�9#s�_2sn 4��L�p]u����) �6��:2��X'2���hو#�2��;ւ(Q�8��=O���y���N��"��'*�O$���-�(}�>��W'I�x�~��۰�'��#h�p#*��CQ�`�}V�Y6)c;�p-���r.���؛'�ߦ<9�_>2���"*�\0�����~��79~�jC�V��71P���v FZ�� ��hr4�Q�l�i�fƿ� ����%~�W��vP$�<�Y����{�$�a��:��"�%�mo~�Ƶ�@��!p����$'O�r�l�*�k4�#�4��!i�ڳ�P���~6-�i/�C�=}0����Vh��$���4�<6�P��t��؇�]�[� �J�3Uk5�|��"�/��8�&�_����8��2m� T�+���uVx\H�*#�|�NG�.}#� ��mdp[h�����j� �{q���}��Dz�7���h�p� 3;�&��Ԯx5��z���)$#�b���l��oM��O�O�R�-�Y���-a���l��[�]��ĵ}�i(L,�)� J5�/���}�m��[G�}��x��<]Be��N���X�� �>��P̜֭H�����Β:���I`(��tN9XM�I�_��֪�qN�U4f��#�_�R式�/�J�Kʞ�c2��S3rrc�j�T�奒p*�"i?����ʢ��Ξ͆�� �|���$�^'��)���M��Etw�E��}��9�*� �9�8�0Ş l�ciZH�f>�Id��)w�*6}im�*�����l��QZ�3�レN���N�MU���nc�G=�U�^\s`t��^Y��<�{ٵ3��j�L: ��J���&��Z�M䑖�E�o3�Gا��Q�4NӚh1��ckr�S9mI�e�}5�e^m!d��^������U����������"����~�mM������5�w�_L/�F����a�E�*B�Y�I>���I��"LX�V]��ѻ�~��=i�����Jxa>�Hʍ�%�ѩy�x!/5�J�y����,q,���XeI����� #��$����f] �z���f9�nfWп�r�p�L�F�3�O�)�}���������RX)�d�e@�ר�]�6?�S��) ��ބO�F�;a�::+�*Vu=-���u�9��ijif���X9!N�U���)�鱍��|�zM'�:i{�ub6���0L鉑�����|� �Ú�����CXa��t�M�3,�>�MgŐ�=q���z4��OAG� <�A �3%�2�C�ڱ4jIez �3(�����{�H�͉�R�Q[{��@�B����Qx'�4`�gNqIR�\'������{��c��WPK��'�����������ty8�i�۰��:�qw~aB9߀�����|��yB��s�x�#Y�yY����� �=5`6�e_�B�]��3[u:����Y���U�����o_7<oF�rV�_b-8���8Kj�i�`�J��e�G��ˣ��S����jJ����� Q�X�hv���._�7�-�� dx!(��XF�]z'� ��-���-���[�)�`�UO$�QS )�R�y�u�E�yaQb1��r��� �%�>��n�2r�;��G� o��f{`Iva.[�_Ē6!A$��b[��Ą= 6ǩi3�z=���ƪ����,.��s)�ꊉ��h�ZfS��{B�O1U���v]m㕢{6�Y��'���g�+M@\8W�݇+�I���[%aI^R����gFy�� 8�k���;��:� zܖ�V/L��;��vL�(U�MƇp�)E���v<t�c�'�>�7��{G�_M�����H�+��U�<>2�3W�L/SА 5U��uV*�oK#P%)u�"�O�JK�*+�'A�*zqH�^��b�[�@xX}%Y���b[����� �p��NRb��#���b��ɳ���w膸8�f�F�)�Q�y��n��G���������;��g�)���-w��Szokf�� ���v!h��d0f���S]�?������WI�%����!�1Ds��sZ1��,4?�5��.M�#��0�^��8��+7y�P0�y�V��%��N.z���������3��`�\���N��A���.��7��Tց=p���?��߷�L�^[�2����o��o�Z��˛O��k�fx۩q~l���OG߷�)|6�̞Ē->W\n+s��>���P�7'dSd��N�;"k� ��!��b�j�( Si¨�>��Tf"�،��N[<]R͡��փ�d��7[�� �*g}X55f��/8�"���N���7U�}x��6l������$���'���*|V0{��ʺX���Hf��>��z�����l��5��S�-e�`����f0b���c�Jl�H�UP�M�g����d� ��'� l>�ČQP��=~��q�㟂z�)_�)迠�>�����/��*GY������E-�c�oG��F�N�&>$�?ܝ�e^�:��ͬ��9�t��������Ip�X��hA�>���³�fsO�B��Q�ˮ_IU�²\A� ���|�A�`�#��G��m�;��dm�c`�Vy8��dF�f�)l��݂f�r���O��vh�j�m�H�x��;I�\8��b��j{��F�']��V�OಏC�G��b92d�g��8�Xi�92d�g��8�X�K�Ȑi���:�`�-���6ŗ",�� �{�W���)���h8�{_܅��ܧ-i���]\dzȗ���Y��r��س�[�k�Ʃ��Ld|�� f�k�m�b�{�kn��,?�0�]��k�h�*��bY��kvp�3G��Qq�[^,gs�.�w��b$�ɧ=�%��4/��s�ߞ�g�:��:�z��7;���8�kX 8���)��iDB����j�wZ;9���I֚��9��l��=��j#�OZ1�Pj����vhͭU���S�C5 ��u�}�]g��hfN=1��b�憵�����<7Լ��������l����⡚���;�}X�|�9��SO�*Vj}X��Wz'pCͫ���4�ݤ���]��,[�H��6���%��j�1��'� �9�ߞ�n� ��&������ه��"ư4��qc��3�܆���5���[������Қ<d]�#�y����1�E��麹�{� a�pA�m���u��~��^߀P6�\*��!v(9z �nW"Q,QC���<E�W!R�_춈�j鼈��� ��eG�Y��7��_�r?O8��F�����%���`�.���W�#���;�ADP;��S�<��l$�6��<7�N5�S=��)U�1�*�xђ8fdA��n9��s�i�^��V�l��Fg�GK�V���\�I�K�n2_�pF��=�ibI%9��)��ܥǚ��':����Բ�&�@ M�́�TJW?�D�\�$���h0�9�`��|��ۡ�^A��}�(���̮��C��jl�(��IC�RZ.���f,,:�����ư�d��JOde��N��)9���\�#IΘ'z���^�F�q�2wbD���1j ��T�*���W��L475z&M��c23/۪�<��91�,*\X���B���Z����i�tI����+\D���R��䖓��4y��@��r$�HArI[�O�.DRT�0���sx#r�����簽Y�QI�L��F2�{H�Z�!�֔'ISK�Ddž!$M�ɏS�`rSr_�낎|5�8������j���ph%C��-���}d}q�5ޓt4��w^����wTj����G��q@�������&٦��g�4�.M�ߪ�l�4���pU*�F��� �R�?��~x�o�5��m�|(����\��F�p�����GR�jc�I_ q��B��:HZ�x-�R��Tޠ�1;r K��[�1s��qn GZ�=4�h�"5j�b�"�L�Z�m4R�JJ�����V?|��;V�f2����;��3̿��K5I5��Qh���#M ��rk�xc��~@�[ľ'� �D�ֈ$�b�HB�b��˯G�����FAْ���f�T�q(ώ�EUc<h�CAv�o���I�(���M#���~~��v�B��@t�hhQ�����Z��{1�aW�ƃ���/��52R�b���Od����ܟ��4����m�m���۰�od�V;�4�H(-�W�\�i�yo��D�,Yz�� �ri�Rv���𰃃ܮ��MO����ٕ��wAK�,�ܛ�E[&���8�j��NȩU��@pL��� �(��t1HB;3�[وr�����%!`d�!F�n���?�W��/g.pg%/��)A7�$��=)��6Y=@4o8�x&�u))�Xî0�zA4G$Pp� ��t�FJiy3ΔB�m�i�m�ҙs'1XL�x4�<���,#�d&B�Ⱥ���t<7;�{�~:^�v?w�R�t����ovG�퍾���A������`�����;���,li���f�h�K4����6N�e��ˎA.{�װ��,�b$`���2r�I�R<\�/6�T��{F͉�@���:�=,�&<�k���"�oTKNd� ?=)����&�bΌ�\�59�e1���PO�/�Ɯ��A?[o�����-�mKۗ}���?li��E�AT��w��(�Q���ߏ:�`���8�C�cmw�d� ��ȱ�9+ ;L�ƕhA��l3fBʙ�� Ī��_�l��FD���,���Qvb{�T�R8(�����?UI]��c�W�0o�� Y9�<H�ȃ\�����̡8����2�øU�u_���a�j!�I�oe�N�I��S�D)��u�I�2���G�r�����/zGx�-+c��.���j��=�H�E�v倁�>�ת��;gC�6�sv�T�oS��LK0��N0��n�{k%c�Y�#|:�F���9D��_�S��d�L�v���W�=����ֿn�lv�'��W϶y�X���nߟ����C���9M���S�����قS�g�D���߶Wç&%9�ɮ�ۉ�l2�+F�>w�\�6�(i��X�A� �f.�Ec[*��[��3/�8^Oɜ�_�_�����A�]�Jժ���&���#�}���`�kt��[�4S�6\� i�f%�I�Љ��Rg���å����'W�8D�㨏��oN��Z�8���^Ӥ�mGW����)�x��/�Q���;l��-��@�`��;�����)��4)%�ʉ��+չ�V��Y$W��l��a�N�����7��fҏ!��[)Wf�{ǎ�g��� �g���Z��fT?H���>~�M��,�������~<���Ѭ+��ǘ��(rv��o�4���߬��O=���џ����D7�\7�1L�P2p��n��N�N��s�(�ߚ���o��l����+U�ZQU&� ]�L��*��˫5I�DW�����*u U���Y�dk��kU�<*��|]lw84Q�tdx�5*T�d �u5d;�����]�|�:T�r# �圞PĞ��Jo�7��#�m7��kl�˝ ������Z��ˀ��m���c�u�G+�Y��~�X���y�Tw�Ґ�@U;l�x�d�l��3l�h帝�?�a��?��B�W�.wȾ�s68�.�K{Ah�&m�a���xt�����C��I�rAhR C3>�QX����Xy���|�x�貮<?�1�p�J�ӯȻ�^q�Yɧ%��(u��V&I�k���y�}sQ�p�wei��#M�E|�'���#^�jW����Z,�]�c4�]B�94~�~���~v)�&�zn�Cv��A._V� �y~/�Vk+VER� !�hX�ݲOg�z6̷�n��|�`{�Cp����T'�owpw<��[(��P����/�ݞ��9aHWEmߦ9=y��A �0�$h�-ܿ����XgҨ�IM���^tU��'u��xȼ͗����@���h�����@>R��P:�|g`}�� �/�0ç���r��y�,�\��ї�!D�˕,�|W D,"� |�e��LY*�J�K[�`�N�<���@���H TqWuoT*�2O�֨���������'�V�L��p�bY�ԟ�Q�r���ܽ���&��Y?��Sc �P��*`�/g����|�i��C�L.�hż���JAn�JqkN$��I�K����ٔI)�-���|�',1*cD�Vf���Gl*C�Ӥg���)�K�א���SrBw⇃P��M���O���Pj�BS"KV�ٰ�bǞGN$��\�r�'/�|���/@� �B� .B�(�~w��x��������*L�H(hX�p��HȢD����c`v6R�aML���>�]��.�o;���C1�P$�Hq��������������������5aSW;9��#�=��,i/�l���B��~u��YT�nc�4k������������9�z��;cdlbjfnaiemckgR�4:�ɂ`�p�tptrvqus������W�P�b%J�)W�R�j5jթנQ�f-��ۘ쥡��Q4:�]�j[��d�Y��YV]��v�^q�\5�$���qU� Q���x�QI���Ys6�δ�?�����FѠ�s�w/�9��vr�/n�#���2t���3����o��d��U\Gk�v�Sr�qM�\����+�9�'y*R���v~�ߑG\�8���ڸN��}���2��-݄��zi�Ʒi u��8pO�����*��B�V<o{ALlo�S�IޭC��pX���R9����3\��C�Xą�ϕ�h�5\c�QA"V���;����iK���tU0���#��h� v�w�Wp�p�|��?y2�ۭ����+���N��!M -/�O��� ���|ҞB|��9X�G@��:T�@�@�J�������6���6��s�*q\�ط}��j(������l����7�x�?<>��5�E��s�i�s�=�;��6��-,\� +3�<b�Vxc1c�I0g�S� k�90�G��|l{��;c:��-��V!�<H *Ħɴ _K�*���VS��ʡ[pDn�qX�f�CH��bD5怸��GMJ�cO�a�ȅ�w��H��xx?ܽ7��� v\N�nl�J� ��k� #�.,,�6)x"�!�_�<�p�4����^��e0���U�M� Ї<�M�X�k�Wi�5��Ô� ��υ���3g]���~*�e�"���9�P�l�)� �@s͔0c�7��o�\�u��Ԇ-xS;�7��S�쨁�c�}͎$ď�`~������OD�(Δ[ϋ�`�Z�4�8Ȗ��U��}�t"��/�L�theme-joomla/assets/fonts/opensans-10abfae5.woff2000064400000035640151666572130015661 0ustar00wOF2;�x�;5�D�V�|`?STATZ�z�| � ���x�6$�4 ���Ym5�ӣ���vD��ً/�`�@i^���'%(�0�C�V�j�09L��g�U�&9J����XkV�) O����KQ7b^>��i�v��5�����fpۤ�[�O�)�� �n!>���-���{�yuR/Z�%v�}�j���WV���D�|����L�*��f3��$�r?���M~�Vu���x<벬��$><m���[ �,`������� '6�]���`��U��� �=LR�jAP�Ɯٳz�3z�3&+uUw�|wUn����3�Xkb/�����{�%��`�JzV.xX`���-��=�F �F����4$Ksȑ��Q����BD� W5�N����v�8�w�+wW��惠��J3z&?0:@�i�8�ͷ���^[�z {��(C�U����{�Öz �н�Lb9K����)�~n_ �d�+���i�m�����9@y~��~���ڡ�cPDi�$��~�>yjH�k��d2 /�?�]�4+9��B����jU7�{SDE�nB�[ �O CHj�k�M�~���dJy�@|E��d��&|��q�:���g��e���%��uxgɷ|�O�)Sh\��.vfv����!����F"�8S����H��>�<yg,弩�F 2�Re.�>�m��f���Jq ��2��_i3�&�/g�Ng2K�]�"(&r�ƈ ��+[G���p�cUH��{-[�(!y�kn__T��kfO�}���J�����a?���[�m�&ÁA@�����| [��c��Y�zt9'��^�6${�����c`R����ؐn3YIC�6��wy�|���s�$��E|��������C��N�!b�bM�A�%ATE����%B"�]_8(E5�!_�j@�F� �{5p �٤1�`�& P��Q8�O�~�s���0��))���w'�G�a �˝+�-$'��Z��q�+���@����+YJ�d�B�� �q�$edı��@�S�,_���JܡD ���D�N@�0�Wۻ���.}�@-�]�*6p��_�_k �����#?§��|����빘�ˉb$��V��Y��� D;5.YQF";va�I1�A'"��gdq�4�NjX����o���}�7}���3>����{}):��{��b��xy���4��k1�$��bc���kw$��#��E�i�_����}��#�V[��:�S:d��[۔�vk�\5[e*T�Թ6����C�؇�&tҁ$��)LW|,�@\��eﹲfX�?��X�S~�݉� �mr��}q��ܜ�Ccæ����Yjn�ۖ������,9�`��/�>;[�t꼳��8 �U����q�#a�#mڢ�3�S��<�����jꆾ��{��8FL�w���wL��` �v=�{C,�1V�ʚ^�}J�ֿ��4'= �>cUq0��О�I�;;\��ÅK��[������<��#����M[j,n�}�DhNn�1W��;:�@�}�͓[��T��ቷGv�d;lF�k�Hb��af@�]w�����'�r8n?w�3kK�L^�F�zT] �g��-p�)��*@<9�h?�~:��IC)o�oUb�jY)�d�7���$r8���J�<L��=V}��z< V7�)�m��(���_�S���X��� z]�oE��p�����d�q���A����<?g�@�Ѹ��Bx� ��Zo~��&ol� �n����_���2����λ=;'�z+G=��)���.=��,�O}u�g��9Jw�.��-9� @v8Қ:މ�r$ܿx<�<�TMA�8��j�7� w�;r�� ���DZ ➲%24� ���e7�u��t/�P7�FGM���DԃzR0�P8�����t&]H�et��~M���~z�R;/H�=��#�!� ZEڤD�/ ��t�u�Z��jerIPO��u�?�v*2:N�i��r��L~gv@�A���zX֟V���ӌ��̤�Įg�\iiA��k� �Ņq� ��C0�%�N��JN�=i� SӮ�;h(Oc�Q0 �4e�S�w9La�@g1'�B��ep���O$���'6^�JU�+_tI�M/{� ��^8N�M�?��/�`&4{�x 20�����.Rs�tțD�H�ʜ�@���&����.�uhZJ��q��z��i,��zr�1#�b|҆�g�'g��_wՓJ$]�0a��JT���k���;i�f� �D�iFw(<9b���Dn��,�^ve�3QWT�#Ɉ�w�xFH���3DQY����U��c�+MZ���Gove_�o��#4C�i�O¿�Et��uo�7�K���y�]�S�+��=�:ZY�{@;Z�~����� {��k'��}�W��Q#.�exnU�J��E��Ӧ#���&�K���ճ�϶>���맟�{2R�oߟC'ϱ�� ��gD�J$x�w�@d9��U��l~��1��E �<Sg��L��z� k�/>>U���#u�j�Y��B[��'��$������6��,�w��ltHd�B��^U���>���J��1^�%��j�YZ�����OLU�͆t�\����Ed*ln��1��ё�֖�Ɔ��ښ�ʊ�ҽ%�E��ڼܜ���Z�LOS�Se��X$�y\�ɠӒ��$2������,����AM%?X��0'�m��@�b z��`�ZMm��l��e��Ƹ��w ����� &<��Z2�h�Vn+s�wn�IET���ϴ&�@j���1��h�t"�ڄ� �����1Z�g�Y6�־���I�44�p��: C�)���.�� QS:���]����y� ^��[�^���:)����c��V�ِ�U^��8���A���Ƕ�����N)�;�/�dB�S�n�&��~�IL�asG��tM�`pb�B�QW�2t�O�S�JH�T�H�� �q���Ss��0��(A���ё��>�]Mx)~ +� (��X�:-b��7��B��;I�� ��$�7�?x�����cW�~ ��nlS�7S��5[�i+@���x�O5&���h��Ƃ6��f�8��Z�O�n�J+��1����l~�S���A� �ߡ0�[r;l�1�|��{a9��9�e��T���G1����z���0�u� *RO}��l�^����-z����z�荏Kh��Q����|V�Q+A�m�k�Q�o��+4�&I+izG�e-h�F��v�lzd�Ea�="�f�3Z�+m�8� z. �KT��̴tN�'.�G2J˨i��Ki�6�쥩�]��@I�^�����P���Xf��v�b�XD�/�����[++/�;C+�/����̑�&)˩�g�>>�d�0>#۫�.o2)�z�9�o�w�������a����g)��I�fg���brm<���/�f;OW�h,Yz̝��Ng@�)�HZ)x A��B��X%�D͂���������/��~��t��M���2E���v}@�\�4��B�k���z�֭X�k�P�'dv�/�AA����W�r���+��ؗE�`��䅜q[z�`0W ;[eC9�I�a� { �w��2=�H�� �6 ���e���U/O�v��l���E�xk �� ^�Ya/�h:2�p�@�A�?d/� ��6s���]Vi��% 5Os�%��#DS��pD�9����#D9�Ƭ ���\��G��t�U���37G��E([����U2Bc�+����@����尋tޜm-���+Wy���O�:���6��+�`�{���2-G5��6��Bh~$tX��A�~�3���(k�jÂupA�n�U�!��Y�B��ѭ���N�N�QE~z���+V�t��^�{uBz!�Un��9�n�����o[��i(��ߑ�t�3A�S�`�`���!uK�\,��'z����VN���� ���I��Ji��:���Ъ�����D0���������DS PYVWE�S鵽&�f+��i�ʛXf�\0Òg��0L³l�D��6p�(8��mC����yX6��0%����t��۹���+��Y��c8y(o7��Y K�~��+��,b�x{���k���������i��4�W��0���Ò��&,����\��/�l:�<\�'}��J�2f�ɩ�R*���%+��Zl���w~����o[V��V�\��i7Y��cQDr�G���Vd<�g�y���]LJ�9e�Խ'���bT8��R�G����W!�dgU5A�Eݒ9׀��$Z']qҚ�`+{�o9IQ�x� � p�e�;bq�駫��^�$�z`T�a�PU�ijUAo��UEhz�K*�2�"��� 24�㎤%Cծo�Z�sH��U~0bSe��ƾ_ެ�)OC�"�߰ �c^�Q-�\U[-�dž7dD��a�-0Q�؆� Ј�`�0g��HJY��Z����T��[@�m����RVȴ/��P�m�[�Iy�.�Z����o&:�ݒb���s�l�9��2�W�<0�J!���ӍxO�}dɉ7�c�v_4�I�뺦v���cĺ��%�t7�>)�6lGc��R_a�b�=��s�gT�1 %_�UF;��O�(�xj�x� ~�m<��6Dk�ŋ�c7i���~2�tV�{զX�|ÿ�;�Ǫ�Z?�e�7����%�b����#��^�Q���d�+�C�u��1� U�O\�C��k�U�X肷g��*X�H�\X'� K4*�M���P���LfᢳVϖ�m��+�Zfg;�m=���Nw@Ԧ����-r����۩JNR�<�:��a �� V�RsV��fo�����-�J4E�Z���Qc�.K���ź���Z���xL�߇gq;h�&��V��%����S�t�ĞU�����-! 1��"���C�#ȣ�c�\em�hGY����ҋځ���*�j2��~�فto��=}?��`�>0�bc3*k3|J��QJ�ƶ���BN&�G* �S�^�U�X>p�h�VT��Kx�����U�/`�����RK15��U�gx�~��*�˙�섐Dr{��g��Xݺ��|�q�Ϸ ����{j�G�h:6HxG�̥�w.�!��2-��R�ttQZ�#�R��g�)/��5���q�!���5��3�]�$�26<��cG)<5�ʠ���I�7���w�;��G���U�$�70X������j&0.���bgY��@�P���6#�̺�ct��wdj��e��t��[�84u/�~���DS��Iԙ�liڰѨ�]ޮ�4���e��߈*e �k��Y�䗄�>����@�pIkʼt�匾j�uȋ DŽ�C �L����g��y-�>�id!�,��!9�R�-�מ_ μ�Lx���j�O�t ��FA�WȎZ���y�~�]6J^�&،��f5���^7KbU��%^���5�Uz�ve�m7Xi\�CK�I@��n�,���ɋM�lj`ݸ�V�rN�I����O�M�e�ӕ�i�Eu��A���}z���|��3\��x�8P�&s�����g�B�zwp|�o��8�\�5�7���v^��� �y叹��h��K�$�G�fz�7�|ڕau�V{!���zZщ��Kly-�Ie3�9�AA���ޝ�D��d8\�jq��;G���s;G;G��0���ʾO�E�N��,�+��<�|R$ �J�o�������#�3��c�Cu�7�Z&�m{��R�d��pd���WC8��6<��)�6|8(P�wN#��4�S���@.��T��~(��S��S������0�vy�b�_��w�.>[���02V����q��F��p�#�3?qk�+�J�i�O8��!�i�캞�I���u�e�� ���H�S�J�p]x�r�����r��%)�a�z�������ڬ�P-Z�FX<wi�,][^���N�����%�z�� 5� ��^����Ns�`Ŏ �I+�N���;P����ίe#K���V�}���[�$��ɮ:h��>��8?�HAǮ����� �"&� �N{�����N�Χ133���iur�|�|����KO��I�JN�?��e"��_˓ؕƟ߬�h瞔�G��|$2�E���߅o�`�}��D�u�g�����i�m��{;���6�f�_v�e��ąTK~�z����C�jX���.kwzILnG<�����^xB$A��F��L=A09�V{�r4��9��@�E���� ����H#+#�<��� ��'ˊx`&��/�/�<��$:���n�ʋܙٗ��WY�� �[;�!��TГ�%~�Nm�7W�{9$2?�j� �9�w�%K�Z�x�*ŵw���2�J�:��Yl����{�q!卍+? {D��b��44�/��WT�j1�� ��O�ُ#���w�M��&x��5�Xi�T�/�����Q������=��K�1#tk��~U}���UoY���/�<꺤Ԝ��i�u�/uJ�A�4p�$<�{�A�]S��yN�en�h�d��3�V8��r�����);�5�*^^�;���������{x�Gh<���(����(�ij$Ϫ�%��E�ej9=�/���$i9Ϭ�����W�/��m����e���f�|�b�Gq�BcW=w� ���kA �-����s�4u�E�7G�4v�ߵ�;�^��� z���UXV�n9U�����sw���� ^L!����}��l���l_�,m�4ܠ<� �ٖ�ك��.�Ppv���@�M�8�����gkO�� �'��?�'�p�s�A�)e�& sߵ�]��1��;�?p�&�\)n�M�r~��;�}���8jhAN�B����SG�{�3Α��P��[��7�ȑ^T�=gVO�tv>��۳�Z&J"0j=:Ak E��=�o��n�i��7��\���\��`3l��_��0YR*�Ӫ����+�s�#]e3)�S� ػ��ũ��X��c,���e��]X2S�x;�;����XR@v6�6I��z�s�(?-=�8r�nN���r⦞� Ԗ,%���������w�o��&�CUl�66Y5�fiޫ�cW�gE��=�����8����=~��Wu�^}O��o�Kl���nZs�|���p�Y1w��h��-c�w�3?F���a=�/�k\(e<�j�>��h�:���QT3S�S�)�V��F�Ȅ�8�ٗ�j���q�C!o;Il+XEn*)���@Az��� N��O����-���0�7S0V�TB$ћ�%`d��ZຓĴz�~�����c:s�Nc'=�>!��9U�/�c/�U����E>�h�U�L�Xwٴ�{�S����Τ��F���Q�7.{[g�jCK3>��]�=����3�{F�q0��xw\��-�sT��6Y���ݸ �){�BÍ��L�k(Jd{�:!ɂF��Ԥ��3�υ��#��|���%-����C̪`+ff������|�M-���qZ�Mij�pӶ &ݗU ۋOR�hll�:2�@�L��T�}�t9����c}�Kg�*��%3�5���i(�9ݓؙ�ا�˟�`qA���'6�I�hQIx6'�N��=h�jl�9�fY��]u�d�,5Z��V<!Q(��NM�_8A��{�c�����+C��8~����2B�?��4<��X��G�5��9�粴"BJ��1�,k�XP�Cx���Dmֈ+:�����&g�Y��1?��{#0�}�ʹ-��D_�ߪ�e�9u���b�X � `�Il��/�eZ�l}�A���.�~|�=)��Pԏ)?����Za���M�*�h!k{0쭈�Ur�8vn���u���r�l��fUC��a>�>��������ѩ�_0||��sCuc�=��cqY��4A���m����>_����)�2#=��^��"�4B����h��_j��~ҷNlaq��̛��@>۳d����@�i3lc���7J��4YR� E�U.rG�N(צFמNv�U�F9�7`Ծq0Mq����*���Ɋ���/P?s굛����M�6^YW��<�]��jzN��U��'-z)ՠo�6�CC+����l�����jM�J��V�X�"�ȝ�����_� �T:�/W��xn!S�>�n\�R�R���Hg�l �D�PǶ��� J�G��� 1�2'ZQ�����R�����e��)EʳP_ǏSp#�7ឬ�,-�~���~�I�xL�,Wo�Z�u�+~f����_��-��U/V&��2B@��� �q#\��ư��l>0��s6��uV�%�f��so����� �uׅ:�\7f?��y�eE��B����{��6�on�t�ܺ���(��'-�S"�N�1�8��Gf�-�x1I���Z��� ���b�l��̈��Q8Ljx�4&��@$�̗K+ e��9��T`�G �����c'_�'Qj*w�T�&���<^~��=|�����+�M�ͯ�y[TUK�����:ܐ��x~<K��-�T|n �S�^gZ��"�bc��`���l��0���m�����HBL�X^Y(��Ҙ��e�c�4&� ��FMBI�����7N��U@#��Ip����#�~�@ڜE2��,��|qﷴ�$<,�#�� F3�\�s7s�� �?���:���<7�d���ls6�qX���R|a's,w-��Wz��ֽ�A�Gt�����'w���9-o���X�3�:u���|u�Q�U�{����D���lv�U#�C��zM��x��:]t�Іi��%�P�8��>n!�E�s�Q��5��'��͋��7y��g�#>�� N�,�E�j�A�9�?���.��C�t?����.Ԗ\��"�4�۔����ҕ1aԃ�ܧϲ�"&������LN�.�ZLGMCa7x��ԽfEIF�����Ta%%n �%, ��&U@�~_���\R:�Y-��4W�j��Y���9TS]�x8y�//�y{�227$�;�� ��ЖDDz�|V�g�$�z��� H�� 6\TY�*�(��J$��>��Ʋ��=���־]`��^y�;3�"w�*���sxo=^x���D$"�%�m�ޒ�j�`a��T���g�7��+�e-6�|9W���;]7�3��!�+Z�� z d�^�j�85|�Hx �G�8��g>X(�k�/a<��>�.m�>�ڍ��]M% +e�eC*�<Q�Ɛ����z���=�ѯ�e��Ru~ߖ��mH�*�K���,�Z�����`���[_ۺ}W����I�2�����)b�ư�d|PlɊ#���N��|� �M���mc'�%?�R�/��#���^��kgZs�]�u��Mԥk�+�VO~��pUVz��1��C�D��_�W?�53{�6��IeI�0��5E�f�Eյ��_~�D��݈��Iq���v@�y��� D{�|�����`�ChBe�Aҧ �\k��4F��?)`�<-/��}���Kl�I�X烺% ݊������j�K��m�t�_m|��Yɽx�P^z��>�ޥ�*Ne�@h��v������bȉ�TET&�<�|A!dm�첪����Df�d$SA�Sb|o<�Rx��O��Gp^�!����w�o�������� bOS� �rk|b�N9�Lr��-�9����?P�\eU��� m��b��S�i.}_ Ð)22�z�1�e�uqB�]�XЮ�&A� A�jE�&y9+�eWe��d�L˂���} k����.[#�]#���$��nG���u��p>��PK���XL�d|ixlԢB�E&�+�T��U�cM�R< ��[�/ �e��U����m��t����\�N���'�=���R��@R�X)�}�#&YZ��aЍŜ�\�2���T��!�X�!�Bh�hӓ��^�u��S7���p�.���'y�Jȡ5���.�H6>�J;uxE� �����j\�9��F��F��/�)�o���(�>0��*r�~`����){*�A?���췸�ҿZM�ŧ �@��Ũ2�*U�@0�o���k(�������M^��e����0�d��H*e�d���%�Q.��;&�`/7����Ҏ��R� �=kæ�NV��Ʉ�G^�QY,������4�Ȣ�3�0ZG9���ѿ$��.�]�)=/�T�,���0{���j_�����9�]&ڊ�{�w�Z>�:��@���+f&0���Ϭ���m�e�9��t���y��U���ї�e��+�V��ˌ�����3�Piy���7�l��R�����wqrlx)���� ���>��My��|����ߴ���?l��m��d��������?w�W��/�����|�����b�?�s��ڥ�K����ܐc��5��M���b.�M�Ve'V���G2t�\�p���[�o�+xp8B"��&�����Q�X�q� kw̔�@ ೳ�'��{pF�v ���]5G��\�-�i߲�T�� ��ӗ�)G�4q���]#G��Y��mw����7��%�{�B�*��]27�ډ�6Α��^��;�Vn%��蝢9�q�9�R�(z���_�V�&�:�" �_�i��z�Y���sj��CZ�ea�Q�]o9�hf����<�I�Cr�v�� ��7h�(g�-�d>l��d�s��)"x���2g�Zsp�^�qI�mQ�\dT��H&���LƆ�{ya�o6=A5%أA�� v>�0&�Ƒ(W�&·B����wD��H���I��Q;J�79P����V�y-���wm �wIUZ{ʸY64v�[A�C��x�zxޗ4z��#jD|ߋ�pwr�FDօi���wݒ��q@��ȲѼZKO�5����F;~Z~8$��G����>�z�D����E�v�X1��А��@T��=ή�wK+�lu�395`<iTt��D������ ��;��x+��yﯝ��s�9�X�GApw�'��R�_I�R*-�(ː��/*|�X��ı+�Q��D��J����ZB����Պ��M��ZpA�UJr?���y��,�{����o�1��u�_ �} G�C�.�h�/H��hO�&�k�d��=gfl&z�\�ֵsU��̘$�+!��8��茘.zJ1Ja��Euy~K��{g�xܢ�,,f�c:)`ό�ݺA�%i��Ϧ7��+��hKy�u�f� ��m���y��(#m�*���-��l�r 8��N4�ؾBE~��\w��������b�}{ݮ�嗉��G� �=�%� ����3c��\L�Q7�bJ`��;�^KϹ�04_ig����Y�t ��|J�gO����g,�����zQ��M�*`� �,r֓7�:%�U�t�:��+Bj�-� #a�1�L�a��(�.��I O�L]�`MH`�5�K�3�D����2��w�E�7����$.���fm �rzYb(�n���8w����NR�{ ���u,ŕ�'���&�Ymz6���"F�wm`�*�m�2K���"�R���K8�M&Z��xT�M�Z�E�ȱ�*e�//J��__^��J�Z�r���?���u�ı��Q�zc������w� o��i0/�O\W_���t�P�NQ�!~R���B�j�4��^%��' �%���j��:w�2��Bl��!a�pM��#w:�e�����Z�:G\,��tO��b� �O #~����a;c$�ϐ�3a�o����̈?�aihLCm��{k ��t�� ��USJ�tn�/'���P4Q�sX��$����"K�H�����Hu �kt�jL�Ҧ����u�aMBA�֒(�!� ��8kAK���X��NgJ�P����B5+$c';��7f�j6ˍ<��>��f^�DnU�j[N�8�g*�]�$;���*r���%���L���nc�2�����"��*��s�T�,eP ��L%�N�� p�e�t������>;�.[9�7(�&�a���N�hF�٢b�2ǁ�Q�_��2��:��=��N�A�q��y�r@�©�� �fn��H][��=%W����A��#�r��r�s�I�jۜC�ق�so��A�x��I;�*�����noR�b�E]��{o�n���E)�����o�>|�\O�#3�9S�H�m��6�O�6�N�#܍�ȴנ9̪^�"��u���Nd�HK7d���RH�w@�H�=c��?���=6��vs����Mc�)�j ���M�i:D-EF;S��E&�F4����1��l�S�B�i��/�{�eEt�:e�K���U�c�Y}��2�L��^B4���{E!���*�.s- e�'#X�:|�����<֔�C}�n���+���h��ҁ�/y�M�p�A�B�>ο���.1s[���}eg���V @�zy JOu��� ���!��ޡuu�S�T�Ձ�� Ŀ�[��:�~�������PxȊ�{2P�뿐�6G��w|xٵi�n�Īcy�86T�xM눊�!vޏ�����X�R�y�C;0�w����B��|Oæ��/���4���zXo����z�0��5�`��u"�2�6hZ�3I�g�S3�)h]�]��,"o@�?ߚ�;}q�E.���XzLo>>�/щ��)�K-z˵�1�O���j2���+���I՝Ǚ9��\��=��\���Q�/2�o�<���#d�I [[ם�c��^<��(4�t��9)���Wj�0����D��N�oO��?ب��ó�/� �ׅEc�L�X2���e�)&�U����u�x1O�eg�5ܤ�3�pZ����i�ٰ��K2��jL��B����l?�=�6�#�C��ں�j%��<�b�'n�{\ �W�\�:��{p�_�g[¥ܹqQ�����d�,�T�f���Zl$DK���Uƭ�� ��Elmu�X�M�6�`Q��- � kL�i1�B>���v݄j����q�#�z_c��Y��i0&���p�%��l�6�/��2��0�Wx�1Q�{ _6�x ��U1��|w#�;lEl�: ����q@D��5ў����Ծ�&R]�2ۥ`��[N�uSC�J|����cx�n��[0}9 {�6��v�7�1[��V�.~���c�h%�@��{SRQ2v�0������\��KD V���)=X�N��shAl5X]�w͢)���L�U�@_�H���O�;�,�я!Ra��^�X TPq���.D�| �g��/�Ш43�K��{ ���Kl���D�^���H�Y@�2C��l����B��Dȡ�D+�B�$�R�#S:�" G�B0 �.2��L�3�%�<9��!�Sha��t�2EqJ�(r�Bcݞ�(Y�}jH�?����!�;���~��� 6[Fc�P,��/W���W��Z#� O3*�_Ewj �M��LQ+KS�/�D%�a]�2��E��2��i�9Fh�B�%���ւ�ф/����P�����(�A�͗��*���J�(�b�I�R<"2 �d4tL,l<|Bb)�1�j�<b���c���������>+�u�2=��.�/����_TG"���704261���3�+,,�*+�nܺs���i�E�A Qh�'Id �Fg0Ylп{�����"�D�"�+�*�F����d��ʐ��A�'tus�J,�ʔ"E�=��}|��a�5�o�$ ����"�L���&�����H,��� �J��꺝���l�������� U�(�p�R�D���}��C ���2hr�Y3��z�/�p�-�8VgTy�Yq]0 U~ؙ6�KL F�3��:�����W�W��T�m�\-R�Gָ��G��S�*>�;kow�pNkۡ�I`��t��bz�f� ���b�)=�>o�˱����v�@Κ��0B';�o2�LnsP R�ؓ�:{�?�ƚ�c��y�U̓�4c�5��F��쟃�o[�{�r��Yi�w�^<�{=Z�%�����T<ذ1��_i+'vꠣ�@1���E9n���`�@�w��|;��)����z�g��G���d�� L|RV�ڱ�3SG.��?'��p���7���n9u��ߍ���ϥ�6��IHQ�����b�P��'s����o�-5�v\�S��FF���8�'�e'��_�ˆB=S�=���O���0����!���$/�ib|�1F��8᪻D�����u�<�T�7���e��燧Ο̸�xA�^�/��䩬��}��E_Y_U_]���ʮ%lkb�12D�g��x��V�p��:�2�<�Te7�g�C�O�����"�+�b�W����d�^�R������0��f63�H�Lt Wh z�4�8�J�WQ�E8�x��N(ocx���v��-`������;� Q��T����7�WG�[Wk^�]�Ū�`VCLz%����\ ����4�E�\Iy2������5����z%�?�x�lEl��3b���z��Ԣ��"ȡ?u���5�V�o�j8߫$[P. A��� q�|\�K��@*���R��j�#7�ݘ�� �����-�ط��>��OOf�Owf'�N|ΏwJbe9P?=��?ݛeê�,>���S �_�P�S*�̶�n�����J�N�m�h��'봃���Tx������l&�����]�K����~����:�/� ���h�䬶�X�S�ڏ����B*�Vnz�^���G���G�>ا|theme-joomla/assets/fonts/robotomono-5e86093d.woff2000064400000011034151666572130016022 0ustar00wOF2&��4`?STATH�X �`��6$� �X�� 3����A�8��мL���n��Bke��L����'/�=�V*N�\f��z���If�������"Q��ذ���E��ϔ�n-_���K��[�h]¢�/A��~�%J��HQ<�N' ��H$��&?�}n�n�ϕ�R(��H��a^���F�� N� Hb5-�Լ�'���F�=%QGEJ 5�Ϳt2�� P��`{�Ϸ������R�ۢ��� L_��Lr�Lf'Dw��P�����SUղ�B��"i��]᮫Q{��w���� H)��g����a��pj�UOF��|0�%5S�Q\��eP(k ga2�5*8Eѡ7��!�J�� ��V� �Jw�7@]��&tV4]ey�q�M�5��{Z� �uoȀ����@�\.{� Ч,5�`bp�Es1a@#`����]�#���d:������/涑�5 ����j�{��n��N_�h��Ĭr��a�a�0k=�x��c���� �.�fzfl��c���#K��8��90���B�=J%@�)!�k�]>i/D�Rm A�!r�x�Ӟ���p014�;�W��c����Y^y0<�7��aC���.+�0ƃcV߫�%��D~vQa��g�Ӓ5������=G���t2�:��!�!f�v�am�!�LPh���3*�1��֙��R`D33dH7B �3r���:�I�zU+Ѫ�����. J}����[��6ϳ"��G��Q���'Vϐ��E���\���m �D���(R�f��!r��Y.j�D�)�6.���f4���x�Q���&��Vj��� ڮ��A��)��Ǯ�vR�]s��FJ�z�}R7eו�ڏ�dȬ��sɔb<���5)�KՄy ����֫���\�^���\�hi�F�cV3��Sۏ�(O�ݧCk_�*)WZ>��/�M��$mi��8� W�i��B�C�H��b�4!�L�9(m�JqJV/�_�ߡ���Z۶�.}���ntBw�4�DJ��f(��p����-O}1P��i�Q�3hs28�����L͠��H��y��Lg��>;F�x���zj�������'�Z���^���s9�8�����Iz-W��K����ւ���n�ȁ�"�6��4�x�l�.4u�U����Ȼn+\�����s�s��z"{���ݨ1}H����{ ���Ӂ� |,�-͗5�[�ڈ7�n>�7�����.�6B�9'��%��l��ei�}ɫ����)n' *�r��:.-��z]6�`r7���,�4":�k�۟�1��`o9���Hgɓ� d�K���5�g[Eש��R/�U�8��L�α\�_3ï����z��������uPŝ�I+��L�Ox�eР<}y�w��6�\�Il0p�)�d�=����E���\�9n�2�QaW?�[*��N�R���?�tkw�E3�c���G:M�]�]0�����o�m�]#)�aΜ傼�e�9� ��Nm�uޤX�9s�������W�^x�u�zEE�x �|�_<7�"�I��/t>c�|6AdT�g��|3�D%�R4�!�6�t��& &E\9DB�m pnCy�.a�0z{����SããvV@�6�� ���$�^�S�G��'L,f~�G-jn��S�<yVX~�m����G:�G�'=_��ɏ�_�XC���'*�Z17����(�@l���y8E闷0�{�Է* ��ժFx68)8�3�tlkLP�A�V�B��hYdIY�881$q��V���Ԉ��: '�;'�.�@4%�5��J�N�� qe�Ԛ�E�f����f@ɪ 9�ߗQ[�I���KȺ<ϣ*�XL\L�Qe���;;�jz<�,���S��=a=��*���K�^�����5|q6��r�WPǵ��9���/kz�ެ%��v�?�aH�%��Y4Y��.��UE�DՑ���,�:�3���:"U4=�t�����׆�8�e���i?=gA����^�%�҉=9A��I��R���%��X��3����� i�J������W[�*U� ��U�43G�-�������dfO�C�B�9�T��Tw_�֢m��q��a��*8�-�Z��~�fT�v��=;�w�f-$l!�o��Xt<ZP�o���$�����rs��uX����EVG �B��qT�,�Qn�K�B��#{y��'��|����������\�D��-��֤cr߉����-!�ǝ r��P��FTGf��m嶣+iźz�8��r:4Ϻ�돷����ͯX�|7���i��O���?E��㾁Sy�l1cD�����Δ�Nw�W��)��Ju�����?����Ϛ�Kn��R�W�+w���X��:pu=���/A���?>T~}�h[��u�Z�t��цv����-����hG�dN�^�l�B"=폄z��&Y^)���Nb�ڵ����b�O�'�vZ=ʣ�[?��x8�{)�|�����ۥ+w=,���ósw��V�Mc^M�[ޚś������Q� ����o��NN�F�����C�zj��é�fW{?0u�6y��3�31�6��jn��H�qS�}cDV�쎜�j��S�Q��ڼ����|����>ѻ��&��|A��������)��Ƣ�������Igϒ���5�2H۫;ؔ��ͤ�3$�(?]9�f�@��?�1Õ���Ͱm���O��;�Q1�� ��4+lh��Vs�%NN��>�)�'9FGOr�OvO)��㵾H������J��T1�U*�lfjae%0�0����A;*6�(�R5K�]�Zmqg�R�[�� n���6)�SL�こgLɴ�~f3-�Ă� Y�����YSe���z5H\H`&��J���;�Z�s,(נwP�S�As���6f�<�2��-�s���� �]��7 l���2m��4��zǷ`��mv�W�U����BA>��6?�$H���eQ����<�]Ж@��T�5�2����}�kI>�7; �'��[�X>� �4�T�:�&T�D���)Qw3f�-��bk��'o(�}�FS�{l�E�OJx��#�(�}��YN$E�ņ+F<��&p���/B��Np�PUP5���6��K�l�����y?��w�jj#�/ ���jqդ�dj� ���jqu�*�i�pb2�Lc�_��'�c.��m�h+�缱M���(�i��dE�B���8S����r�:�#�x�k�(H u�Vd1u�ɰ"��K���̅���"��`.4 �)<5I-�L����Gb�����&<�b�P�U`��;s����iy>@�O�;rb]�`�:�>�9u&�{[�����5��4Ahp!M�?�ܐ���] ���N��Ʉ�O@�����=���D�����W�~���_T�I�%ZX�@N��l�p�;��ĘPq_�k�'9M�i\�@? E�h�o�*�I|\�1�z��#&�I����}>���Ҟ�ka��9�b����it'�Ǡ�`ҋRI�v1k���H}�����~]�Yi`������O|�ȣo�@%~�wd]�eڞS$1+�}�$�RC����f"��>��`L�#�cʦf��֕Z[QvD[Þv���s6WI�xW�kfG�8�HcRI3���u3�dS�B�D����!v���h��T1*Ζ�?s�G@@��?��]d2�H#hp���7�SS�����2o�@ ��ደK6�[��+�.��z��g"%�vJ�\�z{�ZG|�)�9�x�^`]Z� hj�����w��� ��h��Uy���{?�%���Y��}�/=�>�7Q��0�N��2r6�=>��5����K�"���b�~%�a!�N0����"C��\�- 0̴��"'��!C�6L�˕_x ����I����\�����㊗�/�l?2/�r���^���K~�Y�˙3F�8IN�2!��r���f��U R�1�H$�K Z��r�4�ª%q����}���LjQ6�g�d�VW� wI5�F� U縷"�\��xz�o^�'�]��p�vy_�xs���& �4��҄��5Kfr%�e�t�@�U�-Xmv�3�~n��N>R��J�3�,6����?G�P$�Her�R��huz�!A1� Mf��fw���%$��ed����UT��54��ut�� ��ML��-,��ml����]\��=<kt��߱ĸ���?�mG��q�y]ʚ���%�N�r�@��I���$�}nVI�ͱU9�+ |�l���`�_7��R�(6/��P.Lg��Ҁ��GC�g�C�ܽ�s��7�`� �n<x��B!�B!�!�B!�B�0�0�0�0���������od�ktheme-joomla/assets/fonts/montserrat-77cf04c9.woff2000064400000025560151666572130016113 0ustar00wOF2+p[|+ �>�$�t`?STATD�P| � �H�&�R6$� �,�l�(�P5l�N7�`�u�%GQ"W_4�Zx �����b@����!���a(��)#B�*s"E�����g��k���W;!vD�nȵ�)��Ƃ��KE�ƿ���eQUu1���Gn�%fKXĉ�g��1�Z�x������ꞁ�|�\���(_���= *V�sq���Td�3i�/�_�F�҈Fc[����U�"Dp����K��m�>(�l6 JK(�)I10��)&F͵�hW�E/��z���m0e��T�\�2I���]�Q`��_%���Q�����ܹ�ʹRHW��!HűÎ��nc��@�sq�����n����&�/k~�|�{r����=pɐ��q@2m�9�G��.O����O���=9$����yxDru�\30g�U��E��j�3;�q�K�(����S�S�\�n��vvw�c�ł|�e�AI~"��D������u���BѺ M徽��%��7ω�rS�$`:�/����٥�I�kذ�5��#A�s:#m>�# �;��J��cT��0�!�}���1T�h��J���Y[ߊL�e���N.[�a)������ł4%�t��2d�|��`�y �@�҂,W�� d�f�m\ ;����r� �i# ���l!�]KA^��-������D,�l� �����c ��pew[3 \�V�bo�nw`N��z��I������{s�ㅓ� 1�kF/j�6 �!Ԣ��$�%B��f'�(=����)�g��R�[AV�M�%'�0�|3= kA!����� ����������������,1߄a}�{���`(����C��>[��|�|�?������N���؎گ�]�SnP|�eE�\I�كr�y$RCp-�`)�ev �nv!�Y�l%< ��%�E�@ �p �(�)/�ȣ%B��`&� �D&�H�(�1[��Z��sX����f& �Z���{!�"SP{��&V�'�\= QY����"�Z�݄$jH�r�'1Jn+���k�K��,����I�g�plQxxb����"^��H�U!�f��� w�w��f��Ŧ|r��ϣ�BG���VK\�Ř�n�I�&��=}��b{Z���/'.�g��k�9ٓ�b�6|�M2m2:!��V��G^�Aċ��uV�ɬ��/NT�����"�����9����(e!G��\��L�Lz����T_���2�584gY�FK�m.�����PCk�q����8Ρx5>l6l`����h��D[�(���:,��sI;N�C�@+��O8�\1�����N���;����oE�_6��i{.���� �ͥ�-$�6P�Jb�~J��AJl1!��_��:B�^(S���欨��E��_��i�C E��\;/���L��,1◉�䐿ԡh@1���@�5u���qi�f^��B�=<ҥ)�;k��Z��x�+�h&��Y1� �Њ���F��Is�t(�F��!̤�Cխ��[ �"��չ�+��z���#I�Z�lj��"�$�?�p��Ӏk�b����/i�#�B��<�4�恐�l��c��;ʩB���s`88�%#O�)] |���r�dzs������:��^t�5B�t��v/�όO�ҩJ�//�p�|ϑW5����Aq-�'�H� ��@���JW���p��u��� ?ii䅖��gիNyE��`8��T% y����wa�N��7<�� ���t3�)�,�s<�V��t&�.�,��K4�� �YDaI^�/� -�x|jW��@��)�� �>uh���3�m�E�q-��;��H��D�@y����*"�W5W��!��跓2]�Ȯ��t�V�k�� �@6ׄ���~�[QE��9UmP����v��.�ǁ%�_)@c���UX�>Gn:4}8��,�c1�iC6)�v�(�y벎�MZ��TC����� �� ҇ĕ���9ވ�l��yı���U,��Vh%����k�%W^�h�7��̀%E�]096˩�f��8:w݁� �"=|�Uɲ��ѿ�_�0�4�4�1j̸�&�2�s�3��Zd�% X�8����)W���E�Z �98������z��G�i�D�ҽ&2�N��7������@�����pvA<]q�g�/`��K)_Ƚ{=p⛩K�J�F9X�/��' �>���������z ���]���~�5�6�C��FJ�j�g����7_�� ۰K[�.e֧r���1�U�o[h�/ ��|bn�xT���6��ʀ7��=$cr�[�c�ꜟ�_ ���]{�p��/���R�Qtˇ3�~�p��IH�� Ȥ!a�+N�X��R�qpe��'W19-�U+]�7��6�F����֭G�v�T�d�"���`^B��/����s���&�Q�uC����Y���+�V7�B���鑥�o�<섕u˗�����������h�����r:���Ɔ���j����>�`^zy~��l:~����G�����zqtx<OQ�qk}t���0���%�����ǂg���bG鴍�ް���vk\i�o���3��?��hʣq)��vrL�LU�� �RʠL%�����-�$�2��v'`�o�&��;�/ x�<�ӱeY_�$NJg�%N����eT%�����\!�Ѿ��& ��n� .�� ���J^<-ͱ����G�M�Wſ�B5?+�z"h��H:WUJ�Ļj�������`L&��1��e��ф|���t�0'O��U!ЄϮ��(�h���[}|X�>�Ϥ����B��[�,��9�@�*�= ���_��B�-�ԙ��u4FJ�RN�� M� ���W��LdߚR~���Ԝ�i�D��I�Ա{-���pc�ӄ�"2��u�ۏ@/� �u��>mݪ㝔$��f��礣�:�Tp�z�pe.n�09Xr7x'\�z�������!�5EEW�z��(��7�>̄\�{ ɍ�0]7�M����}�e�E���*w�C����"�g��l|����6M�д���F�: ��v�>'��=����R[FS;*.�q��5l���iY��r�!hw���Y]�GZA��%������Y)w3���>��e4��F���h7�yͲE�IJaC�����{%`xтA� �/�ބ[P�C��.���� b9�e?�M��ʻN���R2?+n"0�eL�k�:�Y�F�>��o��\��%�i8�b�`�;֣E�NR��-�H)��z�iTLW�R�AG�ýI�zpu�a�<Ȏ�wxU�:�p����SN��:��"��s�B��d�ٴ�-���U���!�&�UKGy�VDy��aV��Gmjsl0t�k�Qpՠ�,���5D{����y�*��[�I� ح"XPE��?������l�����"W����RA]��(�aY�o��aR���CF\jٗ7s\�zyT �Y�C� &��v�p��XYF��X� �8ӱ5J6���a2BCa��5�`Yo�"R��-��̏F@�b3<Ւ4Z�D'F�(��r��X�r�p�E ��%��g���X&B8����QP� =���o�E+��XZ�)D� !��ڝ�X�� ʣ� ��������J8�K� �r���:��<d��Q9� UN����Ѻ�a�p��(�rօ������DF@��?�ǿ�~z�ʂى��q{T�Q���.�G�j�n~&����b����ƨ]�ewώw0�ssK���>6s�9�Y���РR �ʰ�h��7���2��� 2��^up�o�Tu^�ou���v�6�UR�Y�&�����!�7�Q��Q�����S�9�Ɉ�h���ء���ŝ6��K���*����1��R�^�H�b�en���� ���=N��`q�K� ?d�.1J�'��Ξ]�PQ&o�5P���H�:���r����č+�?{ɼZhЖ�V\���/��J����i�mU�b*�e�1�G����G~��9�K�6X���O&LΞ��b������L�C�%��8NJ�l�b���G����n��\`O.�e��4n�DtА��h���PMlr?g�Z�G���cLK��;ٝ����7f�KQ�����L[�DzWn��Ņx��U;��� BL��U`Gp�k�8�y'dM�YpT�Q�?�^�o����L+��/�M@�l寬����w�ÓW�ZAL�U5r)5db�N���2�)��s�ͱ�*���v���!aXo0=�>t��j��$E6]�=r45�fm�F��2�$?jXHf����Y��� �)�9��>��߀�A@��9��S ��i�s�SLcH�b�1����vO1��`�s�_�T�'�Ղ���=(&w��WH|�n��z�$�63K�!�=��X�CF�Iߢ���� ��A�c9��uY�L�������T�h��|7t?�=�9�(��b�+,��c��hX�CPlA��y&���&L���i��ܻ% �!�P<G�_^�ʫ�ϰ�P�q� ��ҫ{��s��B)C i�ev�<3�*��["�!f�z|VN��2q��47�A{��@> �����,��rVidBU$f/�D,�[�_���<���>��őfeG�3�k��sEE�W��O��'�}U]H!�#�2���x�Mj�7��Vo����*��w��P{�+B�O|!f,O�k�W�}X�_<cFZ��{��߯n�K���$X��S~�雧ZQd�F)�f��״�����m���wڄ��*d�o�%y�:5K(��sĨ!(x#7�LG��t�ysB���I:1�`Č>�����@������O<+I-d�� ���/�"@ =탺,d�ܡ�?b�^�4Ĵ���љK\8E��"Ä�#[��q�U'��3}_E�r���ı�smp\a���p>:��/�?/�^�/F�s�����AV�6Xys�?��Βѻ-�zZ�UW��{O�`��X����%;md �K�.Z�/. ��s�.A?�Py�� ���1*D���1Pj�|P�!�(Eb�M'堁9��قn��y|�V�eS`,��XY��r*Z%��a��rw��^��{DZ��H��$'l.�wKJ��)�;^��j:���#w�J�$��%�y��D��~ ��4����s�=G�(�v�дm8����|Ǫ餹�z���sK�!�i�C9��Rwd`���,�{�D��TL�_�Rt����zr�� �~Y?���Z��A/�0b$�ى�O�Vs���T�%g�dn�Bs�R~@��x'��e���cj$>j���Yd��\i�S�eP�`�]� 7>������`�,$��\Y�zke[�t!��sNL����Æ�=�(��1��fN8�f��b�*B��߉�Z�_Q4�+�^夼v��eA�^< �N����o$�gFn&�_M���<�p�g)��VO{y���H#a�zS�rm7�)�\�ޔ| ma�c�tʘI��D�{ױۭ �����A*�xc���gЪ�#��ܱ��nR�����?P ����q_�Yz6|���>�F-�/�#��=��0(ɦ[�>�'<������d_N�e{�u0��m7��/� ��� z�O��y|�ϛ���1 h�� h�0x�F�놱�v��\P0x=�k�ї3���~��?K �D�m;yP]�h�ڋH�6U��T�.�!�R)�HH�w�]�rF9���>5�f�6����F�n�]k�h4�Zg�����5��$�'�M\.�$��x�J��P�?/���=��XBm�hJ��I?c�8��d0��I�dǐ����r_W7؊6���Yx� Ҙ�0A>c��j�C+DŽ��\.Nq8�8Q���7uf/�r4[�R��ߴ��k�ެ�Z\,��e�W�.ڰ�v�R;ٛ.䉧���)ǔF���Ө�̬s_�%�7���gk,�+��1��<�U#'Sd���'D��'I�k>�N��M|Vr�0�>U�5�]z�\q$���=�ח'�x�-�*c��4:W�+#s5�9r�X�\� O�#���f�mpc���T��ĐӨi�j�~u�"��ĔMN�/J�X�`�qV�ju��a�Q�����!��h "Y�f@D#�A���g��L��|����4�bi���Ia/:�(��4 �3�� -�M��}"*�j��i�\�J�=�W����]Ȯ��o.�X���G�Ш�=��&���d�5q6��@�P�$�O�+�BI�bO�~��U|MI)K�y���z��s�bs=G�r*`u�L+�a��,O�,W�'?K�rC3�=Ƥꠝj�Y�N$͡�qx��(À�z� ��n�V�;�4���`���B��6+g�U�#�F ��y]��N_���݅�@w����y�yykR���]2d%|*U�dߋ���=)�t3ך����a��a46ɣed)Ir�c�n..#dU�N筅���{yT_�D(I+�Q��`�8�"��e��4�ﰹ��?1!�#5W8k��|B���<�n�<���e�r�1)�%Jם��F0'G��yM��<�z��6N]�n�m�l=i=�Rg�WVo�{����S��1Pi*�9g=-��8)Cr�jo���` ��{��{8��f`�Z'�>�k�ӜH�_�5x��{ FD��"�}�:���7���]Kc��9�C���V;�%��ͳ�U�Z�����TB˵^W������u�w�u�+����(�,��z ��_Z��C�� ������kaiLI�����:���.!��R� �z�Y�v�Tx�q�D�J|r�M<]�?r����PN��z�T�%���#�.�yk����u�v���<ٜ?��o(��e�����e���Ph䘬j��b�uX6��E�C0L�I$b�� @X�)�2�.����/���b\���-?��I�Ӫ#��Ov?��,R���o!W}C���!/�z5՚!o�ʓ��;�� �s/9Y�U�+n)^��K�Ϫ�뗞������)�v�A*�s ��{�N5$=����'B͡��3�o� ~�T�����K��<��2�?�r������a����h( �T`��O��U��F|�k�r$HQ� l�����[`�y��B�b�s�@��TceY�+��Cz �g����^`�{7~����%��0�r��ܝ�L�3�#flUh�Re5�h������{���h����;��P�F=*s�� �L:�~�|��i�� SJy< �4�Y��#C���<~���/vj��O��&��g:�\.�)�_���PN���适m���N����"�A��TUd-�9e��0-:A�g�_K4uy��϶wt�u�a=87��d�k���u�)d�k)v)`�L=��2Du�kP����?PPP��4]m]�n!C��P5�rN- �8\b�Z(M�eN\��lH�=d`@��Jq�TmK7����9���]��8M��xC^d >�1�� ���B�L)k�k�A��攤ҩ0�IN#Ja"0b|��2��A^�[���l��e2)��3�0��P�0bV��N�L���V�X^��GIХI����{�. ����p®�Oƞtt��WV��w6��L^��C������h<؈������u��9��{�\w�۔���i̴�k��1�`/�FF�7H�ȃI����rD+N(�~�%���:8�)T��������S����?��5/��=p�1�=���q�D���}-|���(�t��1��_|���úRL_#f�f�IO�n��N�=]ر��3���$ׂ�5���w�����w��o_8f�w@'揍���BC{>�;6����Ph�o"Q� p �Y�_4m�"3���q�����:W�u�g3�/�Wꍘ֝����S�p�/��O��^��s�e�_��d������>��N�o��惆�rcI���²�F�hiG��a����f�xm��y��:{ܾ�z[Ea���Q��Tъ�����!��_��56���Q���ŀ�����g�ځʯhT����U=��"���'��R'�8 M�fS��94u�+3�%�iYJx�/�d� ���S��6]��&� "��#��G�S�a��G�)�K�e���iB룄�܇��DzW �Q�>X֫��3�$:=�G������(����7�5T ��`��J �B��#}nR2�~4j�����<Z��z���Y��<x�����c9�F�&���)�4���y�e)���]NiU}22^������77gov}�Y�~��N���Y�X%���3���X:�d��AR2y��*�u2�J23�z�*6�'��IΑg��w��ot�\ 'Oo�&�����~b^��q>�åA�fb�>�H�[�"����y>W�K��A{\�g�J�u��K��{�}�l[���b�4"U�P�K�L��nb�`b_و��I)圚h����7�i�J!mM�*3�����|�����ÍѠ�� ���c��F����MG���g�17�Xl"�zQ�n��1��m�mб=8Y�4+�j � '�ژ��T�}?ͨ��/-�;z\�ʾ�\uB��"�i�dW8��rR�D�*~�� *�<��mO�r������☉g��$W{���K���ɛ���Eb���2m�`��K*��̠۪8L8+_�8=f_X��*Mԥ�ZT�~���㉢t I$�Ӥ ���N���ަ����!���g:�n� ��LW0�t9D.F4���)>�0EDNR� idxd�)����H8�,�b%����2���|����S&|�*0�1��~�6X��ȫ��`�mSg�˱�PGi�3�x|�2�sXz�% �!4D�RSeB��}�t�\�,w:)��[�N��k�u�S1������� dGX��27�_g6@���T�w��0�;�/q=�^)������>�d �B�m`,K���o�g<���o�� E��L��ꤺዽeb��<�������#j/�r%{��(�'k^�7Y�R��RDh�hGv^�W�usgcѳ�M��������o�NY2�Ynj��o�F_�/��|G90�Nôl��~���BL����(&o����c'��7��m���|�6�������p[�s�ˇ���&�`r��o�ŭ�}��A�oP{��� ߴ_�V��g��o�Kd�4'���w��o�MS�)�C;2ߠ�@�3:WW'�7� ���>? h&W�<�ٹ���k`,1[fs�A:�ǣ �}3{39y9��UA*����Āo��P����k��&��3֚re�7��0>�ȥ~Ǘ]����X����]t?,���|{M��D������g�#�!������Cܮ��_���p�Q!���}�(Y��iM ���J�o��p��B]�'����PĹy ��=�c^�Ց���4Ʌ�h���X�S V�L��u�G��q[��\U��qB�+�YxJ5j3Ys�hW��,$_ j��N�|m�o�P���M�s!��$B�&�}%ߡ�[�f�|�� m}� ��c�Bh��i��л��9�q��X3{�L�B�]z;YL>�O){}.T����7���V=�h��m����7��c�B:�Zq�S.�ׇ��K��i��s-Q�JXĹ���iB̎�z������p���l&m� U-D��v�1�ى��I�����<�w-CGMlE� c.�)3`�~U�[���wۀ��{d<'���| �* :��j�!�@x�4<D�U␠*l�2���lʩ;<db|HC7�%b]�&e��Rϣ�I^�(~�3�8TsRh߽�l�J�E�FW���!⊢�z�N�̨�F]��x�m:���b>:z_�u�z�h̰3� W����uj���|8���ce�a4O����H���!t��Tk��ulH+���[[���X�������:.v�Z9�:v�XÙ��"U|�f��W5h�'tJ=,��;h���d�m�Dz���o�L!@$�X2p f��)9q�s[X�����aZ��z�aBRi㸞�Q��Y^�Uݴ]?�Ӽ��~����/�%RX&W(Uj�V�7��KJMe���*Ku�������fojv8]-�m3�;ܝ]�=�}���ACE�7bԘq3M�e�9�g�&-���GO�o�ݯw�H6W��Hm�0rCBp.���#s�����`��=<� ]��0JVn��P4V�4�HP^٥�4�\3KPN/�8`_�M���aqG7mc�(!8��#$�� ���$�:��3�#QB�r{&�� �ʧ1D���.�q��1X�rz��1�u��;����e,k��������R$�2����hy#�(q����ww��q���0��D��;��:��k��;�t�^�Փ2�'Q�)��u��7��O�*�F����AA6�^�����f����-�{�r{�������o9��&O��g&���;��/o�cRģ`ӈ����{�� �� DU2nhEEk��״����m�l;n"=I)�Ť���eZ���J�A�E�ײ";�i��i�qq���>ο�kd�Q��x���)u��l������Y7��]��c��]r]�7jc�58��r�`�Z�E*3�E�-��5�%���5�b�]\ǯy��R�A��.�U��z\�-k��r. �s��>���_��W��|"�ƒ8���$s�s�i����n<s�⼴<s�c��05theme-joomla/assets/fonts/robotomono-64f125cf.woff2000064400000022570151666572130016102 0ustar00wOF2%xK�%4`?STATH�Z �,��d6$�d �X�Of>EGl�8o=�(J(�Q��I"������^�)�R̞6�B�� pkca{�g��{=m�\�Z�UN���rw�-�r�V������#4�I.<�|&w�<�]B�;�K�ݺڭ~�����=L�&|�h�T(�h!�L)�5�Rah2��P1r�F,�MB%�DkX�Q���1W���b�S��m��pQ�;��nsH�'U��&2Q��g<��Q�ofhڀw�(���m�H$ � w�}��}��l���у�'0��E��R�R,Ӯ8B�����8j��n"��p9�@<-��o�}����}?#��>,nCw%��N�U��;Q��%ܥ�K;�-�g�te�z�l��0��>�@#�)0O�T��#�2�tZ:��Kc��Om�'�A1�PF���u�/_25�B(nF��R���x"!m�}��*��2>ca��~�ts6x����Z!��=Ȣ#�U�Ήq;C[�ZU9���U8(���W�J;P`7�H��I㒇��Av&�,��n�\��S�⌢p ������@�[�� �� PL�Q3G��A���:��Xa��Jx/�Ơk�(Y��R���<�:c�#K�P�D"��)F1��g<�j��>s2����$IfR�� ڔ^��\���e��BmD�����cY+����/��A\�^��T�W��Du�C�,�JB��짆p5ņ4� o��p1\���/^���yP2�6��o�.R�6�.@�J��KY��_�5"��� �L�f��mb�b�-�lě�e>�E���[�g�;�E`)�e��$�HOl�$���,):��B �-]�4=2H� �R��2�r�����O���(�N�����2Li#� �b��mRe�rcJ��dRf� �4���K�z{L7���9r�+5��Y�y��v��M�tv�@1��w�V�������`����p:<�����(��o���pt�%eΜr���lg�3�������m�j�y6��f��LFۦ>��+�������WT#�1��_�����F���A~���;�K/I_=����E+ca��s��_�^�P��ͬZ:�><��Ů�A\y*�h��_c�{�^R8�Y���E?�9�Sa앴�0��"�b�x�?}E�f�"TgJ��l�#y�'<�lO2�К���.�>JP��`$� o��`�:! ��N��wg��D"�6p:�/ �4Ʈ7Ic�- ����tmiu�u���9���AҤ���Lꘊc�S��#( ��D�� } -D�OmsܗXR���DX�d�ۂJ�F� ��~W~ �||s��3�\;/Ue%Q�S'Q�`�N<��j1H����RgEB��m8?�A�f]��#C��}��~(�a�l�S�h�&7I! ���p����Kj�)�9�R�� \X�N,cu��H��e��� �\�Aކ(��I{#���sy| ��xZ�y�!�u3���K��v�[bb�K�K���eד?��)Y�y)�&��6ER��s��\ϕ 畘���T�2*L�?� 0]��j�Y�H@�0Џ�͆�n���猡�G=�d�&S�$4�WI�,����qf9_M�� Nے��0^oݤkޒ�&�O���7]f���P/�.U��E�v.8���R��fq��|��V��0��-G��{S�Md�a�,k�6����r�P�Iy�T�����`��z3g��%�+�MfH��(v��z�4�m]{wH*�վRÐ��'�z�!�aǽ�}�nt������X�f��U�T?�M��}�d����+�b��j��\i��S��rqdN#�K�i��>����̱�,GO�>$�j�� ��B���,�t���*:k cg���V�9q�I�f� z���}�suu�G�*ekC�;�a�S�J�v�.�>n�4f+�n��Z���I*I� ɇ���i�(��j���f̘�5�۹W��3�Ĝ�dog8m4%垐ZH���M �+��;o�: �i3Y��T�g ��LQc��&2�tg�ڤW�?���A�F|~���x���AR��N���k��0ДP���;�07Ko��{g-Mmy5�Ms �r�VGAÍ;dNd�]��{�hD���(4>��EK��yGXX_�$��+ ZKg�H�4EZ��w�4a2�u`�C�)_p��n���d�Rc���k�S��5�+�r'q��'��i\���#�o���6�гe]w�>K�f�;��5�5�H�Ė�#t*o�U ��^�ˍ1�-(;K���R��_s�3G9�6��1�ƫgå��^HNr�j���.�f��c��ɮ�9�|�b����e���!��Ļ�p\�q�6ܡ�O�6���\���$ULR���X|����Z*:���Z�����K��ԓD$ΐ�F'����F�/�]�r�Q�#��O�q�����L:>8K4���,�&\o�*�(��N��H� �e~W��QR�ĸ�]4�d��6�f�x/��G��!x��T�Z0�t��-�z��'10��4I$���i`�&yg�����)��ca�f�-G���V�X=Y?�5�U�����l��)��Tp����Vއ��n���+�=��{n~��8SH��V�SC?�%A�Z9dM�`���Kןd@R���z�P���C+�i���ӞU��B�[����P�yK�(_���/����#x<�~���ɺ'>�+��hþP��<���T�N�$@H�)q폴���ٺ�J3n��z B�&P��!E�����?�o��^v$���.�L~d����=&_��40FeG�#SV]M�Uq*,��ȧW�@��&�I#�l��a�M�Q�*��;1H�MqP�߆S�ލ�$)#:TZQ�@�ޥ]f[^#�E�� -|��QK9Gq�>{VȍR�آ�0�_c�2;�G��aW�vD���5�>x?H=R�ji3��:#rJ7���I�%%`G����U��F ʁ=$������Ee�^C��d�h�<�[3�T�kc�3�$=`Np �����W� ��4���`̙۟���L5�xX����@�Lyy�M*T:���sJ��ũ���p�T�"�y�8)�X6��V����ϑ8��.r�X�L��>R7 b!�e��7*d#��]���j�J�cj3J�����(��i���r# �������E�al���� �l��57Om`�U��o�7A�_�ݽ�����?�7{�������o��>u5�iv?��1=P����ۯ�)W�8��v��ٿ @M{AT\`F�>���4����$y z���Y�����vJ�A&�5��w�H*a�^К��z��;�[��\NRS��,V!�BU=�Xc1l�y~=TI!��B��v���p���Or�!�Ҭ��ct���5l2�������iO� �g6�ΙK,�C�s:+�.�lMl�li[ �����N-��췐'�`�D�����-a�0n����0������^�U!o�2d�tRfK�ҏ�.�dd�3��($F�C�˗m�bG�#Һ��Җ�"���D/����V.�`��� ��0�������fp#��"TPI����&x�x�,{KBYɖ�8vK�U ~��䰥��q���iܺ�U�f��F�W#��]oL ����ĨB�Eup��u m�N3�@�G����_����� �TԊz��D���2jL���C`R��t�.<�$��gs���~E�2�ܽs7|������gx#���!X7:�� F�kj�h��Y� � �p|�b*��+��POc���4�Ό1Č#� �a�(V�;�I�O?tP8� � �yH�$ؽ�q�*��ҋ�=2˦f3���vf�bPB҄���,sO�_N ��OΝ��ȟ�.O��&�/K]��$K4���)��&�iKX�u� 4��v(Z�K��M \>O�~~.�&����]{Z����F����mC����Ŝ��(��tE�ʫw�@�)�d���E�L���_�U�T�0�zc�)3{}yభ.d��}~,��gS�t��/R���'ߧ~����$�#�T�G��b��X|Е�l����G� �#�M�Q��K¤L� �tU>�h��G�����g�Nk0Qw��fh�P!��)Q� t�<���q����x�����|���� ��u}�����2�?'vpa�Po�̶�k�L�Ș���!��xET��ŒP�M����� `�C�9/��J���LG��ꂓq�x6C���f����v������e�Vt{�G�6D���'&��A��Ԩ�=jV��M��>�k*%5A_���s�v�r�KH8#�]e�84ߵ�!*�f�ŵ�W�+W2uBM%��Sn �E�#WjP�[ey�D� �d���--��J����F��͉Q*�+��` Ϊ��O��ǜ���&*����m��2�b5˭�{����o��u�n�$>�O�����N_�.�#��l��S�5�<wFԨ���(i�1��<:7��7�l��tV��5l�o��4��at+|�������Q5�`�˱/x쏘:c��d#�w��^��-f������^��\����{Q��TF2� �%+��P��� (��grЀ[�4���)��_���[�&j�3�]���|��[�>�% ���Ǥ|�R����p�*�6�`�k���1x*��ZFt�%�5|A9^��iiD�����lOP�[ �G$�;�@f�+2�썟�"b�Jg��Z�+3�ޝy����'���lp5��Y햒��a���e��a�d]��d|�j��RMz��@��R�?阎��c Y�}�еg��;JA����+YD@�<�� ��~��"��w���|��Z�2RR�]�ت�: ��¿�yy.��).X邈��z�$��јm�X�T�� *��9&��8�dś3��"�jA����{XF5t�`�Z��Í�|�m��u� k��Zz�lq����M�f�l y�VS#5����d^r#�)j��${nz@��g�(\�{������özM���~"���E��h4X1M��8�`�1tn��^���W ��s�$ŀ�n\�So�o_�n4!��f���/Q�����P?����IJ2| �g���|٣�#a�����o�����,I��(,=y�$+-��. �֧��+w��� #)T.�G��*Ae?�G㍤�@�%`3���y��f�?+��K�J��o6�Kv�<�Hԑښq�Ҝٍ֭}m}��TޏS�* c�v/��z�q����V�>�.�,=�%9,=�n�av��u@v�1��9��A���^�I �s����������Q���g�d���F�`����ԅ�Ůb�ؚMa�\[�A�xEϋ)8ذp��6>���e��0$�Z�m���j� I�C��\�ZrTU|R�N�*��9�zPEyL�rY^�����b��9{5�L�<�d��K���/��:-/�/��6�.����D���Ԁ Lb��\vh`�-20a�mn��|��aH^����$��$Dl�#:��+T�k�a/s���7ܧ�~�L�j+�,�o�9g��m=6�R��eљ��K�d�W?|[��<擆>���bC�僳-_EI0�n�*&�Cހ�-'��J���<ީ�/�t�p�`6���� �W�%y�.�/5ϭ,k�j.�8�jˇ]p͍���I�{���=�nj��6�:ӓ��<<Wp�����;����9���D�j��wBdYV�<~�0\ƭA_�:kg��|��cs�ܝ)��KH(���Vw�Fr��A�^�y0u4�Ƭ�BN�țn�*�SK�qNC1�.`�a�� /�a�nW�s|"���L"��;�_�F 7�������Q�S3TW0�sH��ȗ%Ї�4{�p�p�Eb9��D$ͤҪ@(�\$֨y��r�]�8��f)j.0�z_��mv-����X/�a�#�։B��~z�>\ϗ�.}[$T�m��(L�}�l���l�\Ia��[4�]��S�Kw��Si.�*��t����_.#�Ś�e��ۅ��~ex5�D��ҿt �%�o��l�v�]DzF�'Ie�=� [� ���|T\��k�t�:�lL�I0T�8�"����nGp��vmv �����5_�Wt����믨�<m�ߗ��0�~`��H��qD��Ӊ�$���ee��Ą��- ���?����z���!�����+��V�y\I��`�28�4=@ �n{L��K,�P�����Z��D�j� ������Qx�`�&�'�1#x<R��,����~�&P�"���y�����z�^��G���P*}��q�c�^��/��y�^C���/ڿ�aC��+)oz�|�|�^=��g]n�D�uC�Ά��4|'��(�D A3�J|�h�z�r�����'�* �|O� 7%[1��j67bD���#�13%���n�?��V�!r���?�EY8�+v�.o�W�Q�2�@I�㫟� M�:�I��Q���ב��'N�ў%�NN�y��h�����L�wV�L_;\ �p�Ɗ�$t ��rơ GC�N�a�������KX`�J�fס�� Uɖ"��~ۡrT��e~�p_@e웙�m[6�W{�Ω3��ۭy���V"Y��H/qcY���.)���!xP!��t��fcv���f�Gv�GH�S#���Btm4MA��W��WT_;�1��؉n�;:8�"c�Y��,�s�Mx�����ݵ)O��t�$�d��l�t�W��3��=@�� �|��)g���}}y��:Ս��G����A������U���Ԋm>V�X�Eel�gz7m�)`!&.�N��+��p��!��*mN�x�SÚ�h�^�-�ܚ�f]ҏu��`�vn[O���Lб9dk/D�\Cf��$^�5{�J���������&sH��#��pzQ�"TT�>�����#����U^2�x�.!ϫ�)����]V��H��w955�ǧ�izV<,��2A��*�6F8i|q���h�I8p-}�M�1m��lO��'��`��H�]T-�MkrmlXN��Ǡ�6��V�|�vO��oN��F���^f�KƁ-��V:��V�p������J��hzx;��u��b`>|.K��I������d��%�ݛ>+��-s�t�ECV��_���=�g͍����,�ȧ5��/�\��JC.���~ l =� �/���z���6w���<A�@\�&cekC�cWn*7����+��G$>�k����:�Xׯ�%���d���;�i>(�/�_����Z��B�^|@B�>�}�#������r���v�&Z�؋J�صU���W2ރ�"j�/�*���ѷ����~��Yv���y�=�]��&Wj�6_�`�Go�k�wVH�d: ��k]:U�]|�;��0��n������M�ƿ�kM��&�o����jX�9\ .����N��?���Ժ+>�� meMH]��i������A��|�ܓ�����ՀN�"v�nC/�"��B9�i>(�G��=�2@�x!c�[ڋ�{���F��I�h�t�5q�]< �) 6aWO��%#�|l\|��B�\5�va5�6��N@�x7`R�ղ�U��L_n��r�.�ѥe��/��v�r}����Q�'w ���^�@;��wÌ:���8ۈ����Wn���c��>�:�kֻ���*��!�\{�f�*S?g��o�+>hM_͙4w�����7�&$_�N��9���jVR�Qg��i����A��A��f�G����d��9�Os��=l�=�O���-ʔ6\�Ÿxg×W�_�ٴ�v��A����8�~.ґ�!н�4�'�}nt������<��;8�"}i�#�`��e�x�$��q�V�h}���r��z�%�Y�u�21N⒠ ��۾�sjc�9���i�>ߗ������i�]�� �џ[��J��1]W�#�x���Շ�k3�3Mkˏ�.��32NW�6�6��U���?�R��/�0|�H@���Ur���3��j���̘"���M��N�-% �Go��ڌ19�ܘƈ��a����M�j�T�Z��9H�F)_�z����O�4/ (r�M�_YF��p;q=�(^�E���>Oۥ�l!�{�u�o9��ӕ3_�٨Ac<PD�&S/�\�8�庆�1���C, DZ�'A�����*rNHn3KjNbʖ�O����l��O!�%c��k� �K���j��]�MN����߰�ˊ-h/� ^�� j&�{*�D!Vk�����}k#����RѼ6FS֚{�C���)Z@���V�P��q�J)dRu+Q����ԨE*��� �je��B��2%�Q�bzZ$�:6���D�*�E� i�&V���U�D~�x�0�~�y!��um1R����D��U�(��AkH%"P2���2����QFEAe�Y�W+?a���b���:EH�,����*�i����7+��,xp�q%�{�7����G@D��FL�)�h�b���7>!��R��H#%�)K�i�� �B����X�v�k�!�����븞s.������/.n^>~A� ���a�x����tO�-#+'������������^P�g�z$ ���X7O ������&����a��K�2�"#�RMO��No0�����p���G��cY7����t���k���v߿,�E�����?��N��R4�r� J��j�aZ��z�>�r��J�G�����_��A ��}�3�ktB�atW8q�м�#�WP�sY�߶Xt�!)'}>�P��r�O��6L�ڕY�0KpӕJ����/��l��D, �A�R�N�tB)�I.�:���*���C*R�j4�֍�+���W�P�}�&&Qhg�;�i>��LòN`lv{ gF�;�s��!^hH���w-��ϼ:�?S�4-h/���!��xؠ0��,�_P� �Pm@����uu����=ꅃhD�D�kBZDZ�U��U������u�!�bĈ�C��!|d<�C�B/��xS 䯹N��/������co�KIM��H� �G�";Ji2�[�TW��9oDxx�ԩk��u��n���-E�Z�/+��*<��"vnDX}�CU���xXSRCj&-�h�R("�@�a~XY����熅��\~&c �b�}�)�X�=��d�theme-joomla/assets/fonts/montserrat-f05a0e21.woff2000064400000027434151666572130016072 0ustar00wOF2/d�.��V�N�,`?STATD�P| � � �{� 6$�< �,��(�W5�O����\�x�s�(e<���1�1&Ԡ�� ��L�p�����w�S ����Aaߊ���4�2s�i���JTbֺ�m6�0�8`ҋ����(�}_�<)���ꄿ�E�����Or�?�_���6��}@�Q�!~N���"!D�<� �� ��R�.��hG=�Z������y�X��줋7��x��Ԯ����{�ۙ�Q�E�VC�,�h/;�m{�d�h1܌�����S���^�;D,%��^���Y�e ��s��^&����a�2:�:Os����i����6�{K�Y �-����>w�p/�I�5��������?*E�u�I�<}e��ܓ�p�`�`�V��<�^d�u �����A�R��!U��9���g��Q�,m�^���(������� �ح����)�[wWTח��;e��٪%��+i�1��$H;�;�;��� �J�p��H�?�Uu/���n�ノa3�ގ5xΉxADB(��y�1��~k�B,�w�&c@��o�4�b(�� f�1�s��� � QbYl��X���L �Vb[ v���Z�hq�nG�q��Z�$+A�f��mq�M ηĕ>q�C �0 �>'@<�4�,A�{��d:�{w5�ܧ�Vb��.�� �-�q�v߱���U�+@�Vb��5?��ȋqɭ����h��T�������H�:�k�����ֱ;!�î�h ��A�����/䄨_�Z�@U�ww���6�ռZ�+ϩ���O���:85��,I4���p��{�{�Z_H2�te&xdn��F�jG�QG��[��胛8ʛr�a�H�R'�� ���i�c���[�"7x�s~"<Z�Bڵ�G#��c�ثr��9ƍ�$G<�Y�L�d;Se�a ���$����B����9�|��(�h�y����À�,�T����@����:Zj,�i�χ�"�H�ҫ�� jw�-���4D:8��+��9EJ���=\`Y��m�Ĵ�P�8"�IC�p�@���釆���6��,D�7��W_��l��L-4�kG����\���jM��[wD(�8(�:�� +`�^��� 3M%�;0��]V�DI�W��OKO=:|��W�Bc�A�Ԉ*�� �BX>���PT�ok�x�AB��#@ lY�#/��Ln�lp+�8Vh��OJ�t�0��6�� 7�ٻu@x�T:i ���l��ӫJ2j9�%8Ƒ�0��l����-�eQ�i�cM�nn8����HHN<� [�� M�B��l��|\&��/?�X:',��DbG�Z��^1qf� ̱��k��/!��;�� A-`^���yDj�y�p(���3�������A�`�V���E��*���$��c���{F#�)6��m�5$�_#���'ʎ���P=q`̛̈yeb FQ̪d�s(�T��K7�^�� ���܄��V[Oo��L��fv�q�N:��� ����1c�4ؕ�(����E%�=��Q�DC�' '2ڗ �@�~p�YT@zh-sS C��L�S���0>dD:�Ò a��8��v"ZZ�D�Q��+`��"TIu��^�����k�غ.�jѨJt�J��đ-� �eI���@vЀ_�<6Š�����h\�Ԙ-�wQ�Hr���`�"� � `��r�"���(���"F5�ZC���陯��7�%�f�� �^t�����V����ߞp"���$��@����M��D�V��?�_�EQG�8r���(` o��U;���.�t�ܼuA��NP1����m+��b�U�W�d>�I�`�3�qC�<:��`�E��M�k���� ���#�� yY��>�:��pT[����<f�ěTa��yy[cml���'q!ke�1���r\����qY\�d!YL���/�۾��_��Y>�V�G�/F�4���f�)Y�nx=b4�pT�cjE�CЋ�-E�T�� D6�b�(�1��0.�R�0-�e�lr��g�|k(��zlplĵ �f|[�%���6"ۉ� ���.2�������|@�C��Kg��(rP�I���1���'JL)uX�#�}�b͈\�XW�D�Ƀ�<����نG�DW�e�N����Ʉ�v$�}�/#�rަ�K�FG����ܽ=�]��t����4756���j�5�j���ZYa)/+-1���E�N�V)r�T" �D�j��Y��^�Os�Zź��y�(K;�3xy0��D�ީ�ό�ް�Suw���L��%Q��;@� ���I#T�8�s�).�9>(A�R�� X�!�m��2�����R~ɘ�WN�'_RL:Ϩ:�,�JUt����m�v��%���Dz+�XV5y~�K% �����ⷼ� 3"؊�Ǣ�%�g�ϝ ��v"y�kwqJ��v+�?O'S~�m$7@)?��WBJ��z2� ����)�/F��S%�|��-Wl��R��4��3i�,�4I`J���YZ�s}+���k �tz�渙1�f�B���m��"|0�1ʵӕ0_��&#��p�zN�N�Z�VzbH̯d�F�b�#I���[ڭ:фc|��!����,Abļ3QY��g�?�Hv>Ix`ا��S����{��4����SeJ���\mJ,���N��b0u;#�wIͪ�Ho����C�ʅ���.aB�����u$;(�x�~�Db��L�F�7�m���5״�F3����}��`8��OLb�k�_-w��N0឵[{'����� �&-�hxB�^<��5lU��g^Ѫ�-M^�d��T���i�s�>� �"�,���QވX�g�?�GZ�^4��F��+��[���,ř��To�59K��@�N;�tT�a���x�.�k��$t�8�c%�b���T����c�`)+C�p��#i�m����]��n>��5�<M6��fp�;��ȫ���7��j�[hK�N�g1II��d�wO��k�ӝ��3���q�馩u"Ή�eU#���)M��X�CF�A����7�� ����� Μ\�l!�)/lL�v���".JLѹTE�����)w��y��$0AⶂFcS��Q���v��J� �X��Zp�jE� yL��a�*J�{�����:r7ސ;����!�*j���Ӹ��ڴ1��mwS��$��`JT9��]'���x�Ǚ&�X�<Xb�N�#�Yc�D���a�rG�cFK�ҷR֜��s��nkr�po92��,�4�`�LY�݅@ 6�Hq'\ ���cM��8�k��x�KC`JXEjC� ߭�O@��N�rg)��ʫ�3C��Kk��A�r�@z� 1h�����]DW쾲3����+���S��\nY�v:b� �N�5ڟ��w�P9��8� t���B�8� �-9S�+�x���Sb[RW-E��b����8�W�[��G)�bN&��;�c?��=,0�86{@����<J�(��j=�|,�*�oK��Y��{<P�.إ=�@�j� �=-R\�֖"5�_~�ڀ�a�"�Eƃ�)(1B�,���ק�����'}� [E���Zk�T�y*��6�F��P ?�NW�CvJQ�|�6�?��\hO#��Z�w�0� ��e"�L�i�`�MXW������)�hH�>l����R�c�k���DәQ����v�>�b�K�'�1p��.*�է������ �ϡU��'��l��5��_��Ν�',�_�b3m���R��v���&��?�=Jz��2��^ +T"/��-*C���ku�N��O���<Y�|)r�}c����� <�kN\ނ�S[ݲs��Z��� X�?s�c���� {�(�aS�=�of��$����CL����8�~k!)�p���qC�o��7�R���x)=B�������ڸ%��9h��\ۨb�~��8=�m��2`�Õm�5Ud8ZB<!2�s(�U]f�!�@�?��Qh���Μ �����x�j�`C@Y���5� ��L�W�R��ͱ��{��~a'j�I���]���g�2=넍�*���]�M����X&�V�pe�l�ɸBVX�k0�ٓ���w ��v�M[>z�{�Y�FfѦ1_��V���<=AQj�eI��[�����(��T�˳�u� �H�@d� bUZ�ccxog�铑p0,�P�۞}V�2覔N�$2ޟ���/�F#���.���2���p^i-�㖟������sb�Z��ڡ� ;L!�A���1�B@a>�DZ����Ue��*���㑅\��^���T(,�#ɔ�}��}��7<ï��P^rݽG�??�� W��IP|�א��j.*��Tr�"��V�2e�Q3���e�k����`D�~a=�ߜ��3��fK�c��|oi�=)Rf��)������/`x� F������<g���+����p��$*�^�Vz aPlBF�ӌ��6I�NLq�B�mF�B���[��BO��^+Ssjz���PJc�����q�B���W���3�g<>�t\�I�QjA�� {]N�z���AװlGE�ȇ��yח�]�J�3�.j��V�!�G+C2���%�+<85����|���g�BI��vzR��������K��A���%8 _�kQ7{����o��|�6ڄ ��YɌn7��W"Β�3@��g�'��3`��rjE͚W��-�A16,��|�13��&�4��֓��6�P�9u�n�4�}�a���@�r���8��E��������m\c#?��S���k�W��' �����d�L���[cQr`µ� B��?~�U]�J��z��KV�R�* p&H̾������^j��=�=�Cojŵ�����_����2? y��g�*����������q�lGC�o+�j���*R/�j�vZ�An�n_��;��gR``������ث~ d@C�q�N����[����B����6aK�(Qn9f��`-t�\��X���E�29��p�9%A�>�iqP]�չ�m��]�{�luWbO;6Ͻ=�2��O4��6��l�8���.�a�P�~�i.U��IZ�ȖI&k=e�Y�F�O��"'R�<��?���I���n����ߪ�:��C�`�14�#�������aoL���/����Zr�sx�o��g��i�����=�R=�=�P�8f���Cf��g���,���=^��Q���b��g�Q�sJ��Bq邔���s�:���#lW� 4<�?BYt��6�#�1�`�6�9g-u��if8��=��|���&kQdb}��D�\ ["� <4��� fK�e��N��Ig�/3�6;`��4�dY?�f���l�_ v�����"2Z^�c/�џ�c84)��S;)��[�]y�ߋ�w��?y�ѣ���~q�O���4ðK�/�p����j��o��m��˲��.�ޱ� w_l��,^��u��t�����È��x������#�g{Z�B�Ժ�M�m�/첉���6ŭBvP˨_�U�\�ђ����"f�y�ϰb�OU�e_��������v~>^���\��R������7)� c�{`6�=u�g����H�YR��U�U�B��Y�d� 9p�����d�06��``�� �d��Z��D.(��'նX���/Jm�o�5K3m�B� k�H��SGV9ϥn�4b�l1�� k�pff1�ß��5�D��r��^�2�� -�L����� �=��>c&Tu�FD������.��̘CG�#)��^�&����A��nJ�0�J2IH��(�i"2Yy���`[�����%b�PM�ۓX�}���x�<#�*"�R�D�6�Z։t�,"���$��X�7��))���٪YS8����YLv�l��Qhn����)r*qb!����hZ?��r�<N�I�gFPS� |&��W&q�� �j�[���*��W7$�(U��!�N�^�k9���!��x�$#C�%�����d����t�ݽ|��������h{�x>O"�'�Z�����0�G�]�4�n�#N��UE˶��n����K�b�F`�j��r��_ԥV�z'Y�'H�3�Ȃ���D)� ғ�����j�]�<������҂Κ�t'I�'^M?��0�M.�O�&�:���4�3�[��n掻K���O���f�y�3x9r#͜��&*��s�q�K��<�$�u�O������w} �@t��m��'�w�?\s.��jS:C�K����/au����&��M��D��e��X�~]W�gÛ6�X7tE���]/�24&�<��d\�Ffg�e������.���������%^�֟N���&��o�!-�/��Gо�9X� ���kcT{��Z���4\s{�\�?��.�˷w�H�m��PX��P2�����S����@�_u?�I]O�V���z���;@�xl�@���]�^��Z"�@ ���e��z&~���{ICc����I�^�����d{�`\��B�����zl>ed0P�|�K϶j���s���%cX���X3�fW�Tk�z���qW����Vw����8��͇g̋� x�M jYeiZ����4ye�:��+�H/a��;�� �bR���7��_>���T�X��'�z��'ۺ�d@� )8����jX`ð'�k`��@��Ž�#�^�2���4k�F��!6XO:��KCT{�%K���Պ�.����%矷"�z?�$��JAqgT��8�:~�]G�>Z�Y�a5�Y�����0�̲3�t�F�^<0�7��Ժ�vq�&��\����mQm /B.*)��0`���6g�����O��t�9C1iPW�,'��N���l���g�� <���u�\�Y��J�擷W�~��۶Z��l=Z�ΐ�� SR+"�y5�;")$�Z��a\4Jq��F��1�y�& R���ú���_��%�zc[i�W+���Ƙ Y4��G�XXsV��-4���v��2�O[��J�+��L���h�&t�C�j�J�^+��U�/\���]�Cp��� �+\�R��e����CRh��QX�u*���U�#�)f�m���>���Cع�t-���g��ڰ���/�I�Ў`�S@p�w��o�V���<�Ӌ�TK�C�2T#��V~rZ��!:"�!Ggm�8��I���^�*f�@�@�k�.����#ڠ��cf�|��b��4Z���r�&Aa1��^MxZ�~��)��Q�P�15�H)(פ�'�ڒYJ}v:U�e�|�ۇ��.~��F����g��ͷ����C���5/�ʰ���l��b����D�3u�9Ҝ���s�d���d0��U�0�&��'�(��M%�U5�EU���6��<ڞ�7y�ɳ�T\��h��߿N0�&&ڱqI�ZT�R�1�e��Hd�d<�HB;���]���a�3�Z^k�o3Ҕ��Hgd��d5ߜ�.�3Y�:ꒀ�1l�1k�1Q��E��j�+����h�L��l�����Y#|>����4;$���]p ����X��=��J�N8x>z��N�����;���O���N>� ��q3}C) }�>���I*�6�T�&��Pr��o�{>��K�>�+�Eb݉��~o�Rt �� KBS=C����E/;��J�0�3�T~L���ՙs}$߯٨ў��]m��v��3��>.�G#��{I^��;������|6�a溣��l� Jgl���)�����t��!��}�ԑ��g�(x��� ]b����LA�$Kz��1�fOx��2A~$ь�D�)�j°�dܯ*TF��&ȧ�%�D�C�-��f��rϤ҄��;�����sU��"�b�Ä��B/��B�?�`+�� ��zԑ�xq������>�a�����*���}��|Wx B:���> |������q�� ��Y�j����z�~�mVJ)U�M�n���O�@�Ӭ+j�t�Xv���5����{�/�� ��d�d�:��LϠ(�� ck��z3s��i�Z%�K��'��K0d�JP]k�u�FM��Հ�,��!����ɏ���q��;Q��D��S{':�x8'A�zǮ������e�ς_��\z��|�&�S�xe@�c����҅�[�h��~�x�XQb��o�`���(��B���n�Qի�C�DCk��ţ��!9b�ǎc�H��:�㓞��ycv�gHǬ.���2���TG+�m�[�K��&9���t<�6/�i��RWv�C����PO9�e%Y=���"AظŨ�5�D�5�\��`T�9�r:���ͧ��On^��O�jw�z��i�.?b]{Թ��y�\�N�:ً �O�u9�<� ���e%FV��YQh�-��v�~J��咸�d~f��(�ʞ�)��6efм{��~��z�'�/ߒ%i�R%���n��yѳ�1"y�<�,��ib5�I�~œҖ�$�g��� ��F��@7�{fs�L2�Q<��Ⱥ���ϯ�Lo�d�ɔ��Y��ǵ�4�3q�,a��n�c`��+��Ѐ6_"��S� ��F���=���J�����S�S.߳sv��j�{"�S�G��u���l�&��=���^��l�QwƷ�m r��yW%�m�Z���<^�����v�I8O"��8!%��*R�$~�M�L\��7��E�*���-�=)O=J���s%��,�4W�)����'�3/xX��`Ki~��3p|�/�F/�YQ���%���"e7EƿvrT=�V�����r��A$56��D�L��e4/���=��FD���d�����'%3 /n����LQ��>ܡ٪~�_�Y14989�!���Q%/sB����p��P��2Y[�:V����d�M:L�U��-������?f��%�o�� -/i!�%�|��8']��Gfs�1"�?-шD�m81��Fxxϙ�&]ݒ����s|Q6Lɫ�800���V� Xg��IP�� �����Km��S�y�2�(�Q�L��������#?[ �V�-�0u��[I�U�M`�E��,�� �Eƌ.[�D���w��n��'�}� �D�k�쯛>Md�K�/"��N���ObX��1LJq? |�F�~O��^�x߉�,���i�G�����C�>�����a�c��.����7/�z��'l�G�>� T[�o�-��ergp� b��s�� ���q�0=$෯M&)�HM��6�Y V���e��?V�~��k�L�c�1�t�V�g�dRl,�>�/x�<�jl|ݡqP\�w;�TfM�8H=i�rO���&)�$�s��_x|KH�`\b���x��41hꗴ/�S]S�k&�1�lt��kx7�8�ĥE�W��h]�J`�-�n�H�f� ���/ � �(�q�a:}ݲ`g;���$�k�w%�e��7`/��-z�C�CU���\�xY�wQ*�F�ju)J�F�h��E]�? ���q��"�S�]�@Gk�N��F��@�u��"�Qc3�Ѥ��$;�M��hήN��O��x'��H��=W]�&�u�ws�nRx�Y�E�싶��j�ef�U�����jE���U�m�>��&{�-4��G��2���%V�v��?�ʥ��JmҵS��5�˳�"��j�>����CdwKw�"�'[��O������GH�ˣ��iN��4��kuwU�<��'���[�!�f['��z}����>znƱn� 䁴�B���3���#�u�J�7����@���LAfq�.����]q�?��"��+cN�eX/p@�P|����Y�g6�˛8#5� �ʩ��Pt�6����y�L>�#������~�:pt%���X-���~ܾ�Eq���0����MP�CK���$� �C@}hϭU*��l�~G�N����l��~��/DS߹�D��"b�|g3(���|w�,8��6� �e����CCƁ��Kjx��mS��0ae�����ҼZ���4�]8�������b؏x�w���Bg�����@�+S��X0��6|AR��_���o�[�e'eM��%��e�W9���|pqQ|MF |B���� b�p�m s�GHX+��{T�f���h�@���f|���/Ha�Bp�C�?(E!��:�n����X�\��飯��yD��z�6<&X��yb)g-i���G�#Ob*A�n���o!�{�A�/�$|����4V�I\>@���@F�AΎ����c��y"2���C��"._�~t� ��FA.���yH��е�� s��;���+�S\�,j�',���,֪;���+L���{Ѥ�k:����k�O_��q��+s�j`�'��e~Ar�V�I`?`�x���� ��k@W�!b_�g�]P��o��-Y������2�+Ee�')�"B���BO��E�_<�W�6��L�Zz��E�, ���;)�%w�d� �&�����;'�Ё�P�c-pD�V@!xT��Y/��6��m�y&a[Q��m˹���m3���M�el�*Qm[��.�F� @�.&#e�E�zZ���*����=שaU�TsxB�D�p4��*r+\>n�JT�8��#+]F";n�"E4������ƀ>Y�Һ�ۼlN ��E V&�FF�j��\z2l�G`MP� ���&dn�䢸�E��%������f�nl�܅j 8=eŀ�� C�o��PqT�FY٦�u��$ET�6W�O�)%"/v_�'������,!"HE�1M`�)) ���̒�,o+Z��V��լ.��)/�+�*]=}C#cS3sK+k[;{G'gW7wO/o_?l\<|B"bR2r J*jZ:zE����(U��E�JVUl�9�p�U��K�FM��hզ]�N]����֧� �#�(4���$2�J�3�,6����"�D*�+�*�F�˴�F��b��N����X����茍�<?;�̹%Y�{�K��b}��!�@NP�6��=@��J�"VB ������a�{��x���(+է�,�I�Z����!�B)mj�44��U?E������e��R��Ř_�g^��U�p�n*�kNȫ����u�P�$Y -las5U?�1�=c��e�QV��T(@����R-�IVC�!�B(�M픆��C�r�O��C��k��J�p~k�L�����>�LK�������|�b���8�lp�I7O�,��{O��w�:.��<�YUh��A/V�i��b���[�ï��ytp�F�8�o��N?�� �Z4�la�B��v��3m��v�yD���]O��j��)���J�s0��g���No���\b��~^��ë���A.�X0��6��{�0c�1poY���1kމ�0���Y��~�{��RBQ�KHzۋ�l�'hu�k�1G��7 �^��V��>=4E�r�v�)��@�>o��敨B��_�iN~����2>� [}�.U:��F�/�6���ے�W�,�i*M�����A+7=y�ߥS�i��Лˋ�n(#l�i�RO��[AjO<"g��XKZwxRo8B!�theme-joomla/assets/fonts/opensans-85ab3d4b.woff2000064400000046260151666572130015611 0ustar00wOF2L��`LG`�"�$`?STATZ�,�| � ��H�� �"6$�@ �&��G}7��#��UQSd�N���`��E�q|7���3��1�`^-�� �e�(����R4(W�ж� Q�]1@���Ufw�-e��v����=��d�P\�Ee6����t"v�|V}�����F����l)�g�u�r���]�Y���}�X��C���\��N����(���s��B��n_;��m��}�����lW�?Q(�Z�Kh�F��*@�i1�1 +���9�Q3��+�n�����U�v��GG҈G�t�a�l�� �|m�:E��z�<wwg���M��N Ur�78ge����#��CH9Iii2`c_�W��>B�61�'����]�&��q����w?=����`����m�(�R�G��o ���>�ҵ<�%�>�ӎ)�����F���n~R�>��3���.�Se��E�# �Rv ,� _'��b�U��gm-AJ���]�M{�#.�k�d���ZQ�c�;�j���]����11�V+WD뗶�gL8�h�dhU��sL8{��:���b9&��%O��?a�gi�8-��L5�,W*� xN��z�!�~.*��vggf�\,��@�D����R��N��N�b�ʐ��kW������\6��s%�=z����/pMQ�:!�[�Â��^Ӥ�X��L����,���h(���\l��vVhA�T�ŀ�/�W�"����)�� P�ؿ��Rf���q�#�wB��l��A�UH��O�0�1f�PA� h�{�"(�Y�ɱWM����0�}�'�3(����(op��" >��� h���2����j� �?�CY��l��-�Ldd� P���$����ڤB�s0�G%"C�!� Eѹ� �pd ���`d�����nK�/UϽ�↤O��H�5?�"6%��^��)�,7U�1���=y~���|gM$�.J�D-&fO��S�@��17��y$�`��Z�t�lk} �i��G-�IՖE��2�q/�D Ed$&F�"�j��D��&R�V�C��b�8D��,��v�Þ�!��l��O�4|����m_�I����+��ٞ�r�;Ց\�Oo�mnm�[Ԝr�Xv� )�Ģ��[N�V5)�:U�be��Ĭ�۾��ϋ<ʝ\�e��lT1�f69��t�=��Ni ��]�"5��z�ϸ�.1 �/F+*���u㩽�7�a��_�����}���or�o{q�����]����۱܃۹�[��[�y����٨ [ڒ[�Y�:�͚���~t�++"!��1���'sonٝ̕�sr�g~�fd��rH�~]����k�l>*�x�hpd� q1�F%@ń$��Y�\�t��tҎ�������/�j��R���!`c #��D�(#)sT�.*j@z�e*5ӹ����G_yP%�P7� l-0*Ց�'>�Iy)@�`�*bȆj�<�7��|���:�N(�8��k-c.W��p����>����E��� &S d �ݪ�E=7�Q1�;Fe���L��Xf�M����$J�FZ"ZӧA g��%*Ns�B��w|�E[h�f�f�9�Xs4S�2a�G5L��L��٧v�r&������/D0��bZH�{�&E�C3�ދc/Z81�.�H"�`8�������\����M�F�<��ht>�P+�7��A}�LEr�/�B��@�j�����<��H�/�����Ԭ$jP��ԡ.3��h��9ދ�cc������߶:��8���+�8� J6Q���Ȁ u��X ��!f�)��cs�~�<N�z0�a�ᴾ���Z.Mi��a�o �A�Tk^���]��E��E⣲n�����ȷt��-���ct��p�VĂ�$(<���;$�_x�½�9��e_m�;2�����']'8�/��m��F�į�T��I������ڔ]��:4���wV�Kv����~��h0�3�Б��X�&�]4C�C�{�y.���ņ�p�%�:�*~���[�u�:@�Z�q�X ���ޓj�?��_3�r3_�3OLC@�nj�����l��p���3jH`�M*����CB$�e|^�&*�j� 1�]X qZP�S5e�M����J��c�#�N���:���p!�Ri���C!P#�L&S��a�0-����E�b�"��؍����Q�2�9c�(����5B��?�X�\���zY)�EPr�Ww*�+�*�+o+o�mlf�8|{�e|;:�y��*%&�pط�����z� �Oa2��x��<�s�wbͺ N8iS�A2 q�$p�Ȃ$@R*��Zs9��Pި�b��V~sR56��DŽ�[bD����tk1��yR��+�f} 8�i�T^� W��*y�}���߄�l�o��07ۓ1�P@y$�����X2iF�F��&�R5Z��Ê��@�����QB���ʧ�~�z�>)8�iq���h���ꬩ���(/+��o��t<�KșOw�����4tMUd]T$�L�Q�$"��b�&���#��r���<��]�{��F�YZ �{�GP#����w��ް��!��ڸ��V�e��z���ZO�e�S��&.��5J|�n�[k�G�Foh�'`T�� ����$��L�k�8�h9�,KYCr �O��yCЫ�[��r-�!{������� �@�]&��o�S �,���h��Sl��X8H c�Z�>Wg����v��:R��ƒ*�5�!��]S~Rn����4�(#����@906�ś���e|�=��8�nD�Q 1ٲ�z�U��9%'�o���n�<�7a���SR��1�Q��a��.kH����|^�2�|As�n�x�������|���>���j=���u�M6�u�a�6ma$��� $L�.AM�l6���5C�K�!}Z�D��)o45n�ֵkJ����ʲ\]� `�7�N(�2q����|������Tu��!T�X��e&�<^�G��ҋ���Ƿ�N'b��e �1�\S�f<#��ڬ|Ϡ8o�d@���UnkS�`���lFI=p������s���x��5lu�ǝw<�[�T���#+��\GZ��#� ~���rڈ��L�|���<�{�z��;���N����dcE����ݮ�C+����+��U!���g絟�E��h�`�X,-���0 �d��X&0�xJ�#�Ld���F�s���s?`��CIL_��e��E�-R�%~��ْ�\��Ȥ,�cO���df��!_�Pg�K�(���Zl���T ���20d,�&P3G�hYs��\r�FfEm��gvS��K� |�^�`�`}@CQQ�E�:����)a��{8m��8.�O��r:��b��9S��$s�F�Z)��=�8%�Sl袂ғ�0S �|��z���9�& � �e��@Z��C�K3�7���\Ǎ�|y�F۵]ӽ�E��B&^��F$�,@���z� ��,�Y�ƥ��ox"����8��=���� �:�^�۔=�?x�99a� �a��3��!g��%_ �{0zNE��0�:=�#�, Ckg F�Z�`�p��#�Q��|��m��*m��|:]�ԅ⊹:�4<�Sh,2�% �#g�yoA��J=�9h��B#ؑ�Y�#�Ү��p����P��؋�n.�a�,,�Že=S�mt�M����� qk�]�HTQ����X���8]�A��hVu7.�5e�Oۋ�y���#� ��ㄭD�4Oh�R���<Buˇ(��3q��\�@�6�C�^��0��=��>B�j�ri�DpF���O�a#�jq�!���oxNe����8J�J���kv�6�tD��\� ���k6:m�*���˰����?����ܜ��-��� � ? �ᦲ/گ�I���%U�r�v���[�LBSZ��xa@���_�x�Z> -�Z㪇���6�D��ؾ��K�'��%�j�y���p7~��GæZp Oy��Й��5�/�KL�#()���@1w��K�sÑн3�\��>V��X�xYN�"����S�=�) و.�"%T|�k�e��0��I#\Qy�8�e�-F�!D�E<����p�S[�US�ڠ�P���l�f�߭G�$`��EA�7�b`Cn��#V�bu�V�Ҧ��g8�o��2��[KU18$-`�:��7o�R��-�N�H�(o��5������j��v�Ӟ�{�:��{���B�z��cY�` 1���Z�u�-�!z�\�L�Yr�(����Q咉kBJjǃ��j:�H�ڸn�j���*2Wt��&tCM[)��_�/�"�W-�d��� ]�&\�¢mC�p�8�ء��$��p`���L��Ӳ�]J���> Z{ء��٧HB<❱DHt� KM�1���y��I�2śD�I#�K�u��fݥw� kR�PSps��陬3h4���q]�bv�H�>N5�����_hu�x��A"RH��u��D��^)�5%D4mg��w�r�ޞ��uy�?�MᡦiY���D��8"�ao�!��uP���G�)wDq��uX�������?N��{#!�O�7��l�|���ςЦ��W�D�J�Eè[j'�o�Z�3~&��PںѲ9�jd8ˀ"�`C��ݧ�H�pE�c07�P�|Y�*2�N�����H��PR�[ �Cz���K���8��2ۛ���r�.�8)ě�/L�槬�O�=F�.\��$j��פ�AYd+�6���#8B�Eu=������K� g�ς� ��<�p�PD#n4d�/�PYO�&V֩�'�>C�B6� �.U�d��p��=���I�KKP�]�Ҩ灛\��U�.3��P;4�5���B�Zj/?q�'NѸ�����6P?TR�P0]/�Y3���@ӚN�#�f���]��t��{�9�����Q��EH�s�?�@s�w�G��}��B�P3U���郻��El��aI��S���~�o����u|��@!���h3M���߹�IR��$�:��3;K�RVT� �cx��B��Q���wa}���T�������>-�C�`�,z>�[ �\����,l�J�Cse�-de�i�c�n��~U�3�BC��$#���D�d�&�,�OVU�G��RrP�^�4��^)�!G�l�`�����&5��bn]oԍ�Q�-u95�ӶF�6PR�W���c.k��d��م&n��<���t��d��XCm�ȁ�HCM�j6Փ��9T�u�1���5�!��PjQ��� ��M����]'k�:o2(��!�F�M�X�U@,�/-]�_�L�$��vl�ݻt�-bf^B��\�k���ۉ�l(�VW��x������ Y�ޑП�J��B�̡��zX)}�Q�Pw�!8�3�W�7���c�pœ�Ѕ�D�T㕢;��H�j�E�z�R0�j\5]��:�w"�ᆑ�O�0�T@b;���úX�pH+X��D�8��V9M �Ѣ�!�v!I9�IM����=鄨�Q��1��Ү�RZp8䮝����1�F�?3���� pU���D��S �VW,�AI�Ct�a�g�ݍ5!��;�q�c8��;�8����o�M�dt��e!�Ă�Kb��)�/�Y�RS80� ���y�LY��8�&>i�h�N�md��"��;?����ɏ�[K��[������~V+ "�oh6��%�v;��dׅ�'/3 ��"EO�>�-�c"�9K���So�D�٫�iZ�0�Pzal�{�S1�r(�O8�h�D�$��a? �A}�a�9�~��#�[A�b�[�5 ��^�;��e|>��pNaGb��!Q�5}D� ��wGU��z��,�!��;�e�D��5��*�l�>jA6}0��\����l��&���1z�M� �E�i�f�-W�r]�eAZ5�D�IM�=t�鄄�z�{8�w:�{L�6m\�e '�����j�d�J֫��� ����J�<�v� �R��1Up`?Z�s��>�m�D� �C3=�J���E�| �w���v�""��\��l��.���Mb³R��K� I4l���G�Gg�^�sx)��_��i��,���2~�nmWl����zsřh~r�y�yP�e���/%�E �8FY�?��5�w��Dzj���=c��an��=P)�jF�]<V�30Ch+f~͋��2�6�I���nj\Ҝ�y��ʛ�.��Q�$�~��Ð"s���C�D&�VHc��0~�}ߘV*ӑ�����>�(<&���U��RK�j�e�]:������7;m�0�_��UE^/�U�ڮ�@T�0x˽IXrf����ZK 0��w�Zl�RI�Y�72o�]��H�śC�k�(96����{͔Pw��D��"����g������6L�C&y� vs������w�(V���Mg<��a_��a�sN� ���^u$Z�ީ_I�15j�L���iN�ּ~�i�j~�^Qkq8m�zq�'�UI�VS�y�����C� M�������p`b����M cSW�1d�,LP��DP|��U���qՃoE�a�S��]���SN���Ә�d��C�R�����=)��?���� �mW�����rb�( �*k�]�!���}�m>c?�0�=x&�w�?t�鶮lkx&`^� *s�{F>;�"�gg�.O1��D��%��d�+���O�a �Zyy'���V���|���?/��bs���1�,��?K2��΅8Dqp�2� =� k�-q��N�Cm�,��i�Yf���(��`'8����;����5�cl���F��xz�P�AhOZMmKh��e��5zG��i�����yp>p�i��RfT�EWz�8`x~�~���!7�[���tϹ\�bB�\'<vM�m�YH�6�8���|ɡ�T�u� 8v�{N�H�7>�\��y��� ���i�@��U-Sq�Xx�,M4�.~{�v�DZCCo��};2�h�w ��>�~�W�+��nQxs�GFd�[���[>_�v�-�]L��E6���!6>^j!� S�QY&Pˎ֫��av��aI��"#�^�d���a�'�X�|*�"ך�ۍh��pp$/��S�4<�A0W�z2�6cH�*hl��擭}:��̃0J.��Vi#�e�lG��+��rws�<��g�,�WP ��1}�b\�Kֽ���t&~���� ����l\�m�l�:�ʟ�̷t����q���T�F��)i�,��9�sRU����݇B��=<hh��B����{�w�ޜ�Z���5�w���Q���&��'�?��|M/��LϷ���l墨(nQ�����5�!j�������QϪ�=�+।5 ������|��w�>h�.�a'&y&;�qnz#7��kAi� h��S�<�:?��������3�ayՖ��W�O"��l��N��z�$,3?>������x<�y��>�����+�y��sυ�ǒ,E"D�D��RƖ��8i}�ڛn�s7�z���]��6�_Û^u�ⴹ� #Kj'�*8��o��'9�� �e��Co��gNX�H�l&F�Z�T�N�W�j����D"g��/��\~�j@�a�w�����₶BZ1������u�5x����OG��* vyH�}��؊�"<ȴ59�-��h�~��CF求��$�!�$��S���{1@�F��)��n�g#��9D�?$���S�H�.b�z!B�{�1H�0dHS˷Sn�=�v��{Ƥ9W�lS�z�r��x��_��2+F�jg��/��ͼ��URÀ��?� ���ܶ"z������ ��G��|S�/5`Zņ_(a\��G �i��9�4��9��3���T�}z(���&/6���ف%X[������9���l�o�Ń�k���CS�|��(�d������#�$#�L��5D��[���%ɉD��>X ��վ7�Z�\=�ýHsah{up--T�[��ƙ^��M�r9��� �(��HIE{ �\�1�Gً��T5�DfO�J�o���6l�s�6<a�ܺ�+�*�ߓyȧo}*vn̞�C�� Xi���#��u�I���ZM���f��0�u�����|]�nL[�[+8��E[V\x\[h��V�F����W�M��%ko���)���*N�����Я�?VS��B�Ꜳ��>�Y;HHov��MD~�,�d�0�.���s��> W�9/�<�z�&̂�E0�W�۽���g�|�ąOq��=��?r_��\2���S��`+"v�M�;����ޞ5n��ю���S-�gӞ����o�ϑ��rXE�P�p�%k֡'5�_Ɔ�?_��f*��;j��6��H��>H�O��k'���t�����;`�j���+ɞECqעdg����,�Zk��I[}O�<-��oR.�;kѶ�M$�ď�aw��@MZ���C9n���W�O�ASJ�����s϶H�IT�5�0�:V��B�$X�B����q������3@�=稪�O�d����,W:�~����9Y��u�2��8�"�Q���O�F���˫�nU�w 9�ҽ=.Z�~�!03��]���֜9We��ce ҽO� _����֖�U���W+D��c<%����v��t�g��K�YG�mJ�0������0o��F|�F��r�e���b�e�ZG�N����,�(�HOz%&�<�v,%�[g���؋���-�|O�{��-MC����,MNO��)职nŀ-��g�o,�Eٗ���YT�/�~�-ej�r��P��PB�7�E5X%\�h�"G����)�&��_����Va�#�P~ �(��!���o�c���+G*��F�k�ݐ3���FO���>{J�jh ��ւ?���c���g��Y#��=lU�w�⻣V��_����?�M��~���u!.�S���F������ԴY�yz�{{#|�qQ��{jE���t�?���Y�P8�B&���G����z���˿܈��Æ 2'O��NI�e&FGS��q0�0�첣5�YlF�)�I�Ɠ�k4�Tr�%�`2������ ��)�˫Kz#N(�U�*ߒ�Y��@~���;����X�C��n��y��5`T�v�u�. �/)�)�E������������������"��I6ˮy��l�)�0�Xd >�U8 ��_��>̫���Tyn��'?����G��c&�Ƨ(F�yC_J����>��M�m9P� �P^"F�Ry@n`o`1}��2<��"k� 洨`2�E��~����#�^c��&�����gB7�Iϋ�i�CK��īX� �G�N��ܑ�&��N O�N8_�>Z8j����J>��2q�w&V�1�X�8.'-��I��r���N*5�^r���8�7Gc�5��7R�P��T�8Ud�P��t�R��9�N$W����BtCc���.{����M�i�ث{/b�}��.�R��qeM'�w��y��X�H`���ݛ9*��+��}� |E��}ِ���S�M�D�؍��� �7��7:#�v��t����i�E�t��}�J��?~����B�m��69�D|%\�aQ��^�~�X�q�X�N�^�T�{�j��uU���0�m�0,&�0�u2?�u�0��^��h%��V_g=�.����o�c��L6���!�ކ�X����":�2��v9!:��<�s�dw�D�A����)��vT+*y�1�)M�&��S;����0\��<Xɻ(\.݀[��u�ųT�mix��Sl)���e��2��%n�� DJ�`�ؑ5�A/��:�d�b=kS�f�-T\��U�i �7��t�����l�x+�?W�w�*T�0U���x��R��P���/�=�4j�.����ϗ3I�W�gi����G��yiI������Z4�u��(��f�ӺoZ4���"�AD�����&�W����Ji�-�̦�m���*S��r��(�)��Ʊ�A�f�J\�V%K��U;��r%U��c����+d�T;��+����Or�hP����j�۹��.�$�t!���d먯0�p[�0�Q�V� �QNnQ}���_�T�Vr�Q��ip� J��+��5.�bٳc�}��5�˂��N�r�rX�^��p�w��#����Rx_��0=��%+='UQ6 ��fYyYc���-���q�(WJ�a�V�k`�TI��u�����֮�~���E�D�l�#�>[�ҽ>!V����Е��G���3��Kn֒G��>���M�0gg��D�`(˰-, �� ,�5�$���>z9m����1-�t�f��9.��8�� R�0����a�S��acC�G%��iZ��<���� � �r���v�uE�|yHWy����s�z��Qs�i*�R�3m����c�����ᅣӜ�̻��S����M�M'akK��j��{�8�4^]:��7�,$T�w�Ǡ���rg��eV%ē�N��.�.Q�ٴ��m��6��딽A!$�q)v�pQ(�����%�r� C�'���#������ec��6ͭB�e�G�M��-���P����^� Q��T�`W��,��/£Q~�E(4]\�6�̛�{�u�=�&`���t���:!^*�O��;QJ��͉q��X�G�y�9�am8:���9��Dӳ>�5�� �i��r�?��]1h7�ȺsYq�;�~��H4�%Z`�0�;��Z�fd�50���/�)q�孷Vt��M:]�3u�4"�p���eM�/q�c1���ɚ6�BȽ�e�}X�^vo�n64{�<�W��P�p����Ν�;v�]�n�e�q�}S�F�p����7/��Q�>���V�M��1B���15~�{~�י�ß�D?z�,���:�8��sF �<#�������>V/�p�B��|8m 9ο{.ʆzm�5}".�<XY����챕���Ò ��O=��\ ̗B��O��ࠦ�)�W��wjӱWb/eGx��~��ҵ=x�mߠ�fG��U�W�%ΕLt��RA̕3)�� v�q(����q���ub�����Z�_�o����gB�������F�Y~*� �EA��ZX N+Z�m�?��،��|�^4]��{�U]rN�̩����{q��G ��}��P�_/b�p���,Ħ�,����<* ��)"�����˭嚢������U�9�/w�)�:m��]��Y-��%��m\e�a�jF��Ŵ����O�D��p�.���H�|�0���1U�l/c��Ub����ӫ��0?Ӵd>��Y���R'��W�,,@�c|�E%Gtl滧%TÑ8�_1,<w����eZ.���¶�T �V/&6�wѓ�uތj�?��X�����|[��^��c���^�8�@�U�A�B��jJ�ru��ЃW�╃�D�T{.M}U.�g�@LƧ5�ǨpU�Qnm+~|���7��kg�����"E�^���x��U��C�?81O֖%�CR��ƊⲦb�<y�O��K�HU���/���|����Xk�"a�;O�'��#��^\^D�oiY� �A�Qgղ42[���&�*���&�;Z ��,�Сkz��#�SK��5p��w���MC���w��c�,N�͕�d�K;xo��%��{,��/�'kˠ�b��tLF>L�'R<Bj��~ܛ>`�C�p�5������(RqH�?��*Z��V��� ��}e��2 4_F0����c��ā1HZ�L?Sù������g��Y��e�i�]3h�����vj�e�N���W%�Ǔ���+��|ެ.�_���5�nn�/�����(=�e�zԻ����$d^�W#]���x���-"m��*���bҲr�(|,P�ھi�{�W5}�MIٗ����Y'��D���v��In�E�lA�z��S��}�ج:���rH�f*Β�5��̞zg��^ >�O-}���<Z2\��x�U��K=�4�� Gc��,U�ә�������r��Sg��ݬL�8|�$V�s��e?4~89Y�as�I�Hw���a��X ��A��"Y��z!i�f�K�6�r,}.�i<�\���9�� ��a�I䪟z̾vmm��%o�^�Ff|�L?=p������A=�g�n@�`H��ûC�?2���>��!��%�DhX�8�~^c5y(��JSCA[<�!c��Ԯ62��$k��͛D��G��M:�C�e�m����$�'�b=�u���7p8�C� 7�+Ȳ"�g���.�2��d<�^-�&.| �+�74&-���ZJɥ*ʛ�ׅ'���P�j2K�z��Q��rN:��'W5L� �N3�(�- 7𫣝��[4,,���,w�--=��f�ȸ�L:��MOA�n���"`8N�j��y-A�F�Ќ���pW�Jz�G���?���G\�[�fv��k�5��>9@���R1&քܒI�d�j�ARbl;�_uM�n�T����R*�`�rFu�h��J"�`���n>0�P� ��MqkO�|{��M!�6-$g��1�~�$���P��|��E���^��O����]���7�������Ǝ��cޮnf�OR����������=��Q�� ! �B��:��b��ZxC �=&ܿ��Πu�{ƻ��cucǗ�,hL�:0���?��E�&���~�Q��Tsr�͏�4�س�+�m���>�a��L}���dA��ۺ�ھգ�恳�f�U�`��Dgi�O�)����\�Q9�Wge��63�<>�JB��m�ۚ�lI���k��}�x��"��^�hR�C]��3m\���aÚ��ʖ��i�z���#g:K�FÍ�rKT،��GZ荓�����O��i1W�0N<-c��-���Nt1�`=��H�����_ܤmG���q�#���@<�-3[_���O{�-u�mH�r`Y���u�\IZ�)^��0�pn�KX4���J&L��o ���}�,xU�0"bh2�2qN$79������(����]A����� z��@���d�GA2�N|��`���.���3�P�� �� R����K�|"ht�uh��bS�6ˮ��f�|�T� !�ژ7v�f���LH�ǩv��,� |���s�ߩ�c{�n����x� �ޭ4�UЁl���[#��r�Z�w�J�Ż��Z[*Éu�Ę����J���u��p�O�X@�~>*���T�_cuӃg�Y&��YZ�>V2�;d�- :������^�m��S�-HJ �����!6����|Ѕ�D�� rx�9��ȴ�l��*y�'����.���s���� ����ޡΪ��O�U�<��No!*�A���e$LCJ}�ڿQ������U��'t1���\�~����A���!{�=�_#�$/�h.�K���Ѕ�`D�\�h�����@Dž��ޙ�ӵ+Xxa@�}Dg4�����zd\�<�/�(���!z���b��j�p�h�C�(��j�T�aY�<;�Ӈ��_˃���S�3���5)#��|ϩb��;��HR(N�K�f���s�1=q��d�F�z�3�����&J#����^쓥Qm� �i�~UO�/�[�3�������I� ���()���J��m�긔|�eO��|A�����Mmޟy����o����ܒ���U3eLt�bd�Y��P�8�_�~ێ�i�Z4e乗������u��ȡ�kE�=|2I�q��fwu.w�k��c/�?�t�z�Λ�s�p{s��h?���I99 ���Վ�7__>W?r��kq���~��fh=���H~¶���ү�o-�K��pܵ/��gU�(��Y� b�UI��~_��A"�RN_f(��\4���xX��G�/�/:����.�:�s��san���n�_���Q��P/�PR���4)�f�KY�T�N�Wn�`�Z��w��k- *&�z�b�bO���b$�0�о��` �&CWJSLd�����a��ˀ0�=��=)(�ɝ�;O+��O�b�s�s�^�o���gWW7��[-\-i7�Е�b��m-�Az$�=s4l�7�!nX����� E�e��c�GHYb"M�>;:B� ��2B���5��M�NhT�Ҿ���&�3Z�uM'I�K�� ��&��anXV��ak�����0܍T#�P��N�����:���@Z�m�:[j_�XG��9P�I��-U)��d�3N��x���C�s"�. @-���"�����'�s��vv�������bMt��P�2����-����k��K��kS��an6��ϛ/���/�/�#6�?�an6��ϛ/���/�/ ��V��$��}�̇�s<�!OM*g@��Z=~s������n�i��4h�L֤c2��lI7�s���}�b�����(@_���o:���R�?*��;�취���Y�Q_���z�7nE��ԶV�`j�ɡ�OrvG�V��R�G[����[j�$�0����~}�)��x��~��W>��"���3�b ��{쌱�fY���*o�TJ��YR8���m�{�R��Ʉ+��d-�*鷺�eQ> ���.K�1'Wzn�.{�v�����1Ȟ��6꾃�C��Ɲ�Sם�EV�&M��N�m�e�%Ҙ�+=7������/��,�A�����/up�)5����\'k�U~!Mdq���.K�1'WzB��Ns���آ������l��$��KbL��;�^��o��,�Eg��-sw����.\TI��cts�+g��6J�8�a=��K�le�ņ�Ƕ�l-/�G�D����1_������ ǭ`]٫����N�?��n�����[h��' �@�9A#A�����e{l���]¶<��YZ��8ye�[ڲ����Z�`㌵?D���`E�;byNX?�-�3�XB��de�ǽ^;�"�@����*���=R֜,�$>�e�����<J���_M�J�x��9��p(���O�0��� �dh�ϥZ��z�:}��%��&+9|"�����G�Af�) �)����l�p��ҁ},�����IW���p� �13eeB8���2�>�`��/.�ùթ����RKڟ�ڥ��;����)�=���ʨہ��i����ɻ��x�Ԛ���9}��:ӗ���m�AV��"�y+IY�$'�8���^���t � �QZ��Bz�-�,��p��Ǡ��|��QpQ�����<iQ!�e�����.?g�v��z�9��yg�`>�)n�$t�H�Hj?��IjP�C�*/$]3�Zm�%��b�>T�`X�oOR'��|��B�����f��(���(bDš�;�J�iE[x���)r� 2'��Z� �k�M�4�d����D��8�l)s�CC��2�jT"��k�� �a�{�sRL�v��_0�D�ww��<�}G�g���Ή�kM����VU�aT�<��"�L��C�e�ލ/��{��%���l�e�UU(�جzF�uḧQq����/%����`E�Z��D�7m�T�����v��l����C'T�-���R]����V;�Qz�\�u��!G"��2��f�d�c1˭5�~��^�(w��тR8����@F�b�څ ֘��$�7R�^�]_ķ�$*�wX�V�uG������8�i=w��>�2^����a�]�(h�<��H`����X<��V@��y�K�kUħ���!��$�@d��$ �]u::��`�oj�����x2��0x�~�EP �v�:{�Tπmߡy���Z�</��XLQ�0���+^>'f�z�h���I�(��1L!<5��#�`�sl$F�<Yn����o�� ߓ�>���w>��0����Ų(��jW|�uO-��l�u�o�#����o�ō�;�i˄�\��S�*I��A��P�Q`E�jTڙ���(�Y%b��w��4|�4H�)Yλ�� +{��P�B�2}���$�Y`����56�_Apn���6Y�a5���p��j$"k�.����f�F����5s@����{l7�R�q�*��T��G�ͭ/c�ZkN3��L���xn�_�ҽw��{99��ĺt�}]mD��-�8��X���6 TS;`%HF,��o�85������v����L�Z�y����/��wI�Nlq�.`SJ.U�������\��J�ѳ��f�Y���`ї�=b�ւ2�PK�*��k��^$�k�lB'�B���&8n�TF)gz"~A��sS�z�7�}Q���|�h_K�8�Q����V}���F�Z�$*d/E>oq�.�`7�<�a��6S4���I�0�~��/��+�{V\a̢z�4���e��Ӳ&���!���N��i/��#��`���n� r�a8K�m�r�.[�t \���P��ځ�B YYsd`[�� ԏ|��� �]Ѝ1MbKV���<�c��P��O����e: �Y�_�� x'oM�v�Lhm��Qg;\Bv=/���]:Y�w�m%D{;2>/�|��V�w��Νt}��֔��s�H����e�1�"բe��eׁ�_��Ayo-2&>K:·��O�<I$�}��&X�+�S� ��]����W���d�s���z���7�߽�Ձ7d�r����Vz�����7ߟ8N3��x{����,�Ov9|V�H��&�Sz�>锄ڟ�a��B�gk��Dv��^q�۫i$��c]���O�Q�U�!J��T�,1֒X���u�������e�W�(:����,Q��<�1#�6.�䛌q!p��X�k�4�fIHE8�#>��ΞNj�a8�oQm�n��P&�@�X�9qlk��À�s��)��%ǵś;��:l�]�Cܖ߳���ba�u��T���Kt>),�3�@�2 ;�~�V��N���?�m���Qr�U���I_>Q~��K�M���&�P���?!����=k�c�Aa�wlB���}:��� �I������}<IqJ4z�"�����M��Q� 0�\��mr��R���>� ��WnZ�� ���6V�I��/ {�2ڴ�:E�|�l�Crz�oD�{��:���D�"J-�4DX��G���٣i �&4�2)^�p eZ"�F)��6D����b��V���\��)�O�IM�y�� jD�`B�$*�=�z�η���U��=O�Ը����|��C�S���{�q�_ڂ�G�I���w6Cr���QUc�Ko�Z�_�K��T�#�,ce���ᢧH;65���X �e*,<n�Mȣ̀�>?5�.4��c�M���H�*xH]�Q9�q:9K:r�c:���({1B��s�ۆ ?�t+��4/5�� )`sk ��04�˩���r�s��R{��Z��HԞ��d6Zhʣ��GWz�,�!ākim|=��D#�a�_�HKa�mQ�{��ߧ�/%eaih�Ol���-�,�`t.���cX�Ywۛ^bJ����G�m�M�\QSi5�]��\S�)h��y89�0�����qɊ�p�8&��T�5@.��JQ$�K�o�j�6���&�t��c�3�v��g z3�0�3|�-��I����"�F 51��mXx9��@��V ��Ȉ31��X�З�V��5��~�q`l��p��������v���5�g':�|v�#���}S��Kb�g3p�;%�ޜ�L'O�`� �s�R���\9�R�yH�K"6i{YI���[p�I$�$c��B�d1��GZRH�vӠڎ�,V_ȱ�4P���#��3r��4D�5x��~d� ���8*�0}��X�&���V� i�ĜV�%�U��&���~-��F\�y����M*��Y��ʏO��˾�K����ox�e��˷����(�w��OͰO����n���x}�@0�Dc�D2��ds�B�P,�+�Z��l�;]Q���x2����z�%f4������0{��.;�V�$gَ�ܹ��� �����$2�J�3�,67/��`}B�"�b��R� ed�Z�WP4�n�z��Z���A�Z� ������������Nv�.�������[XZY�d �Fg0!a�9\���p{G'gW7wOe�U�T�Z�Zu�5hԤY�Vm�u���F�v�ԏq}���nl�i�J�Il��gJ��o*����Ejж�����k���:�9�UJɡyD�k;Z��� ږFVa�Ã]���8W�I9A ��� Æ�!���Ɇ$��%t�3��r�L�c��L�i����1d��1ne�A��(���g�3G| ���zT!��5f&�ř��Ve+:[��2�:��D+����6�~�.;V��k�}����$����[UG}�G0�A5�?��h���E��F��f��t3�4����fM��ΐ�j���r3q����|~W�]Gۤ١��I��V�ٙ�k�%C>:�\�|�SK�͐��Y���la��[���,l��n�[��-�f�������@ pͳ�I�&�l����n�����5s5W�ß9�8 ��BϿ)|��c1�L@�Η�?Ϟ>���<_��|��vμx�k̑5�Ks"J�BL,c +��*� � OR��Mc��nª���[��o�<������G�sO��[���Ė��f#�C+2�7�3��::z��z-��*������Ǫ�����SA��;r" +ːo��"EH����!��ؖ;��nM�C/B�N٭ƅ����:�� E�0�Vd���a&I%6tt�ͳ�w�B���~��H;�I�FҨ���e��w;�[�9�j�����C�]�i7���F��Fs��o/!m�n�ǿ��l�A����ߕ�ad5j`ىa�ّ��Y�� �t�!?� >%�L����[�0�<@5���Y�Tl~��B <r��WbѾ���theme-joomla/assets/fonts/robotomono-170a121a.woff2000064400000030610151666572130015771 0ustar00wOF21�Zx1.4`?STATH�N ����J6$�J �X�a7G�l�F�E��2�C�>�>4�R�4��xX�������~��K�?9��d��|5:BK���~�ܙ'�U�z�.5"!�ți�/W5��A���� �@�aW�٩�K>$���<~��2��pF�m1@DZ�*QmB̘�iϥ��6u�46ek����"�c��j�ʚ=O��9T� ,��'�$�'�ܹ�e8 ���ScP&"W+������B�j2�`�M�O��~��Ci�{۪�4]�0'��q*���&�%���O# c0bU�vF��r*�x,!+̚�g&A��ᥛ]�Nv�A�� �2M�"9(���36�C��1D��^D��{s��G�.�#��\�K+��g��X|vϪK�����+�(���;��J[�}��m�7�"��0�+��5��[�F�I�B*zB�t�@+����j<�ji�8�Y2a42pޫ2����^�DJGtT�g����Y!�+���h�k��U���/v��:�4ͤ�Ă���F� |$��B0����0� ��4����Q�t��H%�< �9��B�5A~ �渤��Xm����������nTK�.����+/?T<\{��������0Z���{�CF��seS27��-��3Z\F�$h�Z�ReVZ$�N�f�24X��F�r-*��]�vUz=���(Y����ׁ�&�-s� �qp�vU�,���]#$ �b�5��N� ����66n�Ͷ�a�:�M�0i�Nr &���c�n{��~v�ٜ8�9�''U�_�t��~�7��4:��?`�%0w �%�u1��8�4����RMu}&$p&���,V�Taf�+�x �=1?�`��3�} �&4D;"D��r`i�8��ɨm$/QQAJ�:��c��~К���M��ciz�LZ�#6���kMIzG�'�X+��J��$郠�� ��'��ȃ����/���u���t2 �5a����+[��OVf0w�G��Gk�ik���o���!!��$�C�Jd�g�X��h\X���J&c1��Y�t�[�L��>8�v��3���ly}Oy�����4=P�>Xz���s�.���,�m<>ZB�Ui����H�I�P�b�d��3�6�;�)��$QE#r]��I�Bݓw��ڱ(��T�҃��G'�R�\�e����&,�p�c�k�]e5�1'� �d �)3������"�[�2w��5���y �V��O?���)d;m)� YI�*����(7��0�&qe MtN�4[U�fQ��PϪΒv�� �Z����Z__�$�ޟ���V��9���b��2��TͶ���)�mހ�ĭ�G�7�O9��n?����n˰��<:�1!�لERop[�L�7��� X����9��H����`���x(�1�q{0�'��>�9�YM�Iy�$�<����QQ��2��,fU<,d꜌�Ap�7\�!��P�^�-�='S�Ui��f�k�k�����k��Ɗr����7����l���^&�C1�Nu�|l"V�%��{ף_ѿ"M�@����ic�'��ˊ,��n,��*���>�`�e ���h��u#@j<�y��(P�N�_q�{O�u+�Ds]^�q��s���;)�g�$g��d���U�spI���^<~�����0�,��L/�)AZY�9^�^j��ꏆ.�*Z,+�Dz0�Ջ���x���[��M�'��͉笔�W)Jp|M�!Ԏ� MA��:�64�aajiRN� S'V'����#�����7Q�K,�^�={��{�:Wk��#c��J4��c���h��A)��d/�;�t���ߣ�'R�[2��A�O"�"�����G��Hw��fΪD��>bxK�!@Z�@����c�;��G��Vym�"�&)�qIa$��ezQD����;���r�5|��_��%���r����:k�T��������b����س�D^��#t@h�9Q���Bk����Q�H@[���� ;A�?�]Q�$:��V�2n9K'�T�Hl2fް�������!Mܫ��Ɣ���0�D��f��T�M,b�z$F�������3b�d�����x�Viiσ�>4B���1���T���V����?s��<�xkĪ�A��RF�4ϟ85�o)��j��Q@���ԧJ�)=u����bር��G���n,��i�<��qm��qL���xT�f��c��M��n�3R}7�J�3U>s�$/<hJT�v(G#��F�����pb8䵔��#p�I��m���b�j��~C��֨s�!�(/<ܤ6W#�S��1U!����{���ۡ19(G<�\Uu�p�E� %*�H\����.fL��C�f��K#��2(v���s���*iM��ꌥ�\�f�QV���3��}��,�EP�YM4"�-hE���DG;�8\ڽ~�\�3�����m�1Y�o>��t/�c�-��\(AALC���)K?T��Y��J���{ΐ�s�ՙ�:H}(m�u-A���D��lQH�:^R%7�e C�_M�ă��H�\���Wi?my`4'C�q�QӉ,Ea@��(��p]^cn��c�|D�1%���:0���Kk��r�T�%Y����ME�A�'�%2X�Qc�C�F�r�ȕ���K,���SZ�Bp)X��a8y�i� hR���>�R1��R��� �w�`���G�b9���'��~�Ш�p�_}�k��z� ��d�+��^�K`�sP�t"MZ��a&B �grڭ ��_�X� ���"N��hQ��Ϊi�@�?̀�T��i&���/A���]DƁ�����_pA|O�E����XP@a�8b��k �Ixj]rα;0uJ\Ee� xZ�"�HJ�R���R�S�z��v�+��q#gnuG����U������Vg�Yw���>�8�"��%VTj�2*Sy�F�s�f��E�\���^[�S�f.;��t!n2��f`~^� L��۩��@�hV��+�d�*aA�8O.4�4{s����Ђ��f) K'�&k�mq�Ax��d�f�wN��г�Ā��mҍ �C��#p�y9iN�OW2��z]�˅�h�F���DEt�۔+4�s; `���5��@m̤��-P�t�$�Z�mn1�Z��"�[�99.2�� �V� ˃~���Y�cyσ�9�����03��|&�� ��閠3i��/��^� ��:i-!Ϣ�~,-ǭ#G짏 ~{|���y���f]vF�p�蟷C��a�. 6��"��k6�d���8���V�V�rl#�nLRkm?��;�Rt&�/�2��v�Vw�Θp�E�9V?�U��R 8.��J֡͵��XO1��lU��H�O�� ��吓S%t1��7r�w�آʋ�ޣ�sO����щ�vkL�UK!� ������"���LF�#$[��Er�߫�y�@�,�n����U������]�vSz��G��Wu�/=�n��$����]^oG$��ܓ�}-IY���qYy��L4zQ��$@ow��LGU:D�ߓ��|��Y��5�D��@���͏S\�J�)U��v����)�;D6�>�?���t���*�Wr\����"�UG�_�F |.�b�M@�_%�X�UT�PA����i���;H�#=��ɸ�Dz�X�Hcî��X?A��^��)ʺ�Ň���6�M��őc'j�ւ��3��K�F)6#Snk�/J��]Ef��b ��O����[l�Ǎ�eh�B&>��</����o ��Ex��*.1����-'�\,)�Ix�P?B��c%�ű�s��O� �J RiX�-��'��ww�[����9�X�#�����3 �gd���(�n�s-1�`����ب��"D�В:�) ��f6H�U�X���֏H��}|P��L+�<�p��I0v|~� �} ����h �25��l �m�#Y�O�6+��v 8v�zsjyآ�D��7�P ��.��Ӕ�U_�D�T�p� /T%���5ʷ���tln�:��LR���W�3&�2`,@�/Im<�S?)��q� d�� X��4[���V��q�8�fW�����2�2�����SJ������ 4/|�6G����ۙ��)���'!9�����[~����h �9��`e:�hV�f`ej�}�g�ʴO�$��_���l�>`ez���u�/ Ţ�c��E���m�v ���-�$�47�����R��H�^��z�4|(�d�7'43ޏ�O�+����)z���Q���+,&,�_\��1�م�х�)����Vׁ:�"zččo0�u����d~H��-�� /�r�s���0o���@Pxo�������ef�D��R�#�%K�f�iIK{[�e �ھ�hZ�����ˌw��۬��z�'��|�I$"�z师�F��W/��EB#�/�� /��/o�/=J�IR�� a��5�Ҹ�\2���l�L+ӡ�A�.(G����܈���%A��<&J��3߇¯ڷ��o�;b�7ȡI8� �5�|?B�F�KX�!r)��/��1�N���$ǟ���&'�r�~���<�6���$q�\b⺬��U";rT�Ů������Q�� `�O�3�oe��nC��Zf|E$*�2�Z���&�� ��=L��KV��+.������~�M?{1�b��%���OA��<�8@M���H�rp�s�a�ө��2�`�2��K���� 8���{�/�iW����%���i�Ͼ�ø�e����� ='G@�q?�Ŕ/��]�#��Qjq#��~�t��ڗ��oG�NWc��Å�|R���"��L��6~���ѵ���64�scM7B��Ώzun�/�]�*��^����� �~�T�0k0e[��~P(d���^�#�y�J���HV-�&�� �ϟ�o-p��L�E��k<N;jA}���L X% ��R��j��@`�`6�ӳ~�X�v�AM��)e�, -f�`Jb�5K�#����m@4�'�˂�Uhh5�7��*M�������)` ̑�^�ΰII��1�uA��t)+>�.���%e�Kb��.��}�zYY�!r���i��:��*��v�.�gj2M2�P J:�Z!;��?ɭ���Fy{�+�vB{)��v�N�M�����F�wm+�أ:��T-��j7�s�c���B{B�j4�:�7��"ٔd�6z�ϼe ��x�h.Z��f�h^٥�\Q���-4wG��f�"ԄmM�b��OṴ ����<����߫O�`_�V5���׆ٍt%5x,�����=m�,!�.X���b�J��jฏ1^�o�ت1݆���"u ��og�||��~�bo��19&O�!9�5c$ǁ���k�9ô\mS>�.�Fk��h�,�����g���ŭ;�5�[������������οy�f ����z���.�����P6U�&Akớ�4�'^�����d��ef̶Ȑkb�_Tt���p�x�<[L��X�zX���qE�����ʒ�J$UU�O`�Ԙ��b%,&YMf88� �@��+�ry%{�cz��m�:��'�b��`�&�-���B����$�D�[5��z�,~�7)�s�Ĥ��L�t�*�=J[N����{�B�@�'��a�e,�=>�K�#���-�0��S6��/39�������Q$*đ��=_�����E�S^ʦ|��TR��C��{�^c�+%A�S����^��.�Kp&�u R��WK��̂��cӌR�8nh�]#�ьj���!s��O^�@�o]�9�;����_e��76n����Y_Ϭ��srT��7��1�ٳ�#`�Y�����:��m����6y���ҫO?����+Yq�=àv�1g���U��/���g�oUJ�������f%IU8�BVx��z��W���@� ��n���c��Sck�n�I���ݵ;w�l�nhܽO��^_A�ݘ���W�-`�ORF`d� �]�!6E�a���l$=�p ��0N������{�^>Ԉ5x�|�j5�z�$F2W^&a����1C�8F:+-+�%[�h�Z?��?�b7�br�\� ڈ|/ ��C�b���<\���l�S9k`er�\�l�=��,�Q�_�)k�hb�utl��+�͟emΘ�#K(��IL���E �&���JX»���ٿTP o)�����H#���E�L�Y+�re���OЮ_��a�#�$B�D�tj�;5��Z�n��7n�ݶ��6i��NG�h��̬��Z�N`���~�կ?cO�+L4'�P��q �����hz��EJe��Y�f�sk�7�,1���\:>�Z=-������K��67m�� l�bߟ�ܱ�e��Z�jhPe��.������ 9�G���FLyD�Hb 1 ���F���c9?�.uy��g�:9����z�0C$�f$���tYZ���;�77{���N�SR6g�ڵ#��arek}6�_71)�~�M}�X�� =�:A�kwP�^�Ȣoӄ�?js���3YX}$Ljb�sQ��=��1����,fn0��5��P�?@I�� �:#��td�۷$������-�����*j�Eɓ�Z�k���ۚX^>�@���y)��|"8���3�6ZX�GL�s܄;<=�3��-F5�QzՐ>��qb��2R��A�����:-0�[zfz��k[}�Xj�:>���b���lʨ������/^P����S1@<5V'���^^���[�P��ܡ�L�fcg��]0܉W��1B�2��᷵���I�EE~옼���peԈ��IH ��q!�ӯ��''�o��!0�!y\e!�#�l�WY�9xz|��E�/�x����~w�4t<�o����r�˙��!c��"����A8|hxgI��kt�Z�Ԉ#���7E&(#����5|����Q<|6�~���0���ɮi0aHMhUR��1��O-� A�����W'�G[�Y�7ܦ�QZ�������5� A��n���w����G���g'�LX|��E��*8�9����:F�?6�I�d��8�5��9`�㥥c� �̿��w0>jq�Y��>���@F:�~��M�ŧ0��Q�o�$DN�&��ucE�wrN@$F��z3(�ؐ` �����o���������ne���%vz���x�u� ee��^K��>�4����w�w��4��0&5b��)��'H��ɡ+z7Փ�J(4Z�>��Fׄ./�A�� ���Ю��,��٢`ʅ��0A�`AP��t����}Ay(<, ���$$��VX����2F*�I+�F��89��Gitw6 lX�2�r�kp��n��!s�'ZN�0NP8d��N��xݺ�� �}ۿ�����ӧ5At���-�k�� |���fN)�[o��4�����d�w��P�Q 6��/��� 6Y �٧���7�/^�J Sxye��<#ɥ�~��f���I3��k%�k&4����4ڒ��%�V��;_�`�O�,֥r��<T�j��b�����bó���b�6�@�]�z�Xo7p?u�d� /�`����pŇ�rE�96g��XԌ�>���:}zc�W�=O9I+eM!�c%!���2��q� ��f!;ֵ�$FUh�`P�X��th;ؗ7�33�o��[��W��(=����U��P�{� �#�&�I�e>#�@Zg6��ی��܍Id IB��� �"��)a��^����?��4!/a�1��@�m1 ^���1�}���͝���zy+��n�q�F��@�O�����^Q���k �u�ب���7�p �����.T��Mvv�X��'6ZƘ-g��Z*F͌̓s������dsg<��M���;���vu��ԤR:��>Yf@�w1����\�B���q_^"�y�@e�i�|-Mlw��n��R����ɩ��I�>Y��ij����������};_�p�8۵W!�f�C� �3Yh`s��_��8�N�j�B���уlK^P��)�(������P����V�%z�w<��rlp��#�M���k��DX�V��P`mv,�쨋�z�*'�l�Sq�W����5L6,nBrai��E���U�@��ZLm�|!!�;�pu]۲�%!�!�2xmVYe-*��z�J�G�x(�l�=��.��M�v�T֏�al���HA�����[�5�.:}�0�6e=�N�|ã��`��t6?J�̀�C���w_iu�y�M�4�j�v�hL&t��:@��"�z��"���ׇ�HDt�7�7�hvЖ��1spXA������T1�Y�FY�&u���ҒX��Z��XMpd�GI�B���H;2�O�ئ_kŏ.h4HgW,/�j�}�*x$BP�f^oj��H����&�%�$��f�S�A���7�-0F��hr��/"�!_Q��3_�Ф̿��!?1�������6ĕ��w���b��)m٫�o]I#е�U���i�����S���9�u�t���V��7Z�ʖ˲>�@i�ݩ��t�5����������.*қ(|��T�)oI�H��zgx���jtj��雗4�c�b�`�|Ktd>��ߍ.D���n�!�GT~P�nUH��|1�8�P�rƯ�=qg�S��EX*T���.S�F1徥Z���כ�E���A���`'�9�9xX������`W�������X-��`Qɾ*\�t��)��%;�%�xT�Xt%�sC'�SkV�t��+Z{'p��9x~W��Q��t��\7ls¤n��"D`Mbu���3�>M�]%�Z�W� I����T<n�Uܰ�2v��w(&c=��[�,�DC��0K�1�] p�nH7�����N�'���4�8bO�� ��$���p�`���hѠ��d�>�zi�,aNj�Nq�(��֦z~h�[\���k�PJ*#��G �w��x�8�Ҧ��1�;u��'�mxs��_v��F.Y+��7{L�>������[0ހ��ۆ����Pw��x�NDa�SSr:���s8�p�S�5ך�b�S��r�����QA�����^>{����7b�r�b0��3��e��[� �O�<{���W-XT��R�Sw`�6�}�U�/4{��>�?�å��o�%�1]!!�����0ۅA'@G�R������b�ì�Q�����:˱FAď����C:��ѣ���Y k�2������Ҭ��`g�v�u5ʳ"�0��F'�5�����L$=���x�H"������$�P� ���J�q5�j������:����U�<����گ�k8P���k�*���(k>_r� �����y-pU�wyO�û��;m���_�m�u���`�Q��n����`7��L298��- E����YKH~lW�_�+���/�^��}q����Y �\�]+\S�טI�]��7��kkq?y�R��L_W>��^�>��ԳP�e��j+f��Z�{E�m� @a�:���j�����`bɽ} 4��-;�&x ��6Sa��oP�c���WVE��q�ElSa]dO���e��Udp�,���~���r��xǔ{��T!�� W�ϱPa�� dA��=�w4>��hG�L�k�� ������ak�d�7����Yp�M�����d\�]�ن`�o�WginܼP�5�$!�#�X._�+y�U�*F�:m�$J@D��� ��[#+�.�ذ/�4$���{�<u�m��ܥ�4K��2�]�O��5�/HjT!xp|�.���tfW<���u���� ^��S6 @ę�b/��B��³���t`n�_("�����r�LR�c��2�����*K���[���7��1W{�G�`s�ٜ�c��a�w���}��i- D�ȋ����1�~��F��,N�*���%{l�w���Wf���g����,�_�o�`1�Ɨ;Ul+Wx�_4����I�7o)��'x��2�.: ��5{ʘ˞����E�|��ϜxN���M�ph�O;\1ނ����M3E�ʤQ:]��WB*n��v�`��)��(��;��W��Lp�(���V���>1E�Q}E�O�Y������(�� <����2����<(-��#�1h��зږ�m�7�j֘s�~Gm���y^1m��nf�?���L���#�\6-�Λ�颤7,�Ids��@�Dr�X��*p;>:hG�&m�Gl3W^��d��NL*fɹ�8`o,Ω�a`��s�.��e�Q��j�Z��'r;��N�xП�\��r^����ac��#�<;�d���Y�W���=�b����u:ȧ߾�)���gp}_���J����Jh0��[�(^��� H��y.���}��CSR��@�5�+@ b������үP�Պw�˗�{"!:4)� ��'ࢰ0�x�,� ��O�!�Po��w����{����t�˾����ǝ/yS٤n�::*K�[Ӌ�օ�(ׇ��� ��N�d�X�6_k���Ԟ���P۪�9��DG]���{�*�9� �� ��R��I����i��4�qk)�R*�a鍤|�uA��]0�T�B�1��mUے6����ر���R7��s�.����S߫�ػd諾�{�ZTwx<��U���:D(q�V4G���gZ&u��� �r��� ����~��ګvBs�,�?�mĠ<�rٵQH��Y�u���ꚊON-[&_�O�5i=(wC�ܙ�g�-"�1��Ùs�LG�͎�����l�h�1�X �]:B#ܱ��H?b�;�$m�~N�sz�u�c,��@���.��FΚ����^�q���b_�.s�l��L�-�\�խ�b��VG��>�aRƹ����m \ݶ�� ��k>�BE�5?Ե��n��S�hJ� G��Pz�}�.��6��6����p}B��I�:!a �;YZ�k}X�8"�i(�t�C�tz������]�� ��}`u�>B��'�2�匵6xFu�{�h���`5ɨS=�O����x�5��be��Ŝ��~��ۖ��+XS�C���&g�/2bd��gs[�.ؘL�C�u%���={p���NŭΖH�yȌ�8���e҉!��Au"҉!���DN�0�t��t��hB�k���b��&�2�ᥚ�"Y�@{$�$��B�y� �,G� >@E��1g�0O�����B�{Չ�~Q���#w��W����}��s��B����jQ��w�_�OZ|���,�o��:l��#��?2���m��/��ߗ�x�:U��,WT�"��h1 ��J>���c!+�a�lt�Q9������(tT�������S�a�z��ܠN3θ��L3���fu�G��ߘ5.R�"sX�r��E�bē�\B��FOb�.�6[�B��x��u6�zkH:��� lt��"^����9�K"�"�ÍbkJ}� ���֤a�U�e�G|�"���C�F^0����/('��6혁X�D �>"��˹3�M���&m�UQ�GH� ��j�?�s���*�\Q��6�ܸ�*d@�'��TXf��8ڭ*�%٤��q����eH��ez��~��~ ��'��Jyrw��n&͑��X��2%tJIT��+`�a�!O�ꪻ�\���PΨ䒚R�[�(UJ���Jy��d�9S��b�(5�&t*�;SIԪ��rJ��b~ �d��z4�hFa*V)��:��!�B&J�����JP��BF1����2ϯ�X���5����R&��0F^��͕���YS�i6�r��8\�'�a� *L8��4#�BBFAEC�-�������L�x �%I����"U�t2���ɋ7�����#F}��g�Ƙ������?u�w���6s��/�����r��^�l�t�>��h>ƖE�'G9��:o�h+7,�l5zi�U:�[(&� ˬ���_��b0#��oN;㕳�9�\]��5f]uM��T�H�B�J�)W�J�j�Ԫ�X�%�רI�V�2���M����^X��,�3`ʍ���1�I$d(1�3髄|֟��d��^��8s��/���cD�u�cq�H���"����/�g]���웄���|8~u$�\�Btheme-joomla/assets/fonts/opensans-848a42f3.woff2000064400000020644151666572130015456 0ustar00wOF2!�GX!>j�l�&`?STAT^�@�| � �$�$�(6$�L �x�^��A5��gp;Qt�GQWK��J�d��P�ۋ�vǒI��n�&Ŵ�0C0��]�}o���W�X�b�k[0�c�z� ���yص��SD� ����5�>?�}��������9%�_�Y�|^�F�@�q#$�%�_{���=B� �@uPXȫ���F}؟ީ�w:��D�9@J))P2hY�K��(-��.�@� J����k����"+�#��EazU���H��`5:1�F�wQ�"ҕ[�j��ޓowf6�;�V�\�V�'��fv��-��Uv/a�I����f.^�<��Z����2c�W�Y�d� M�Ͻ>H��3�S�c�P�ݽ��A��̪�P]������0����_�*}}!�� � ���9�.I+I�hl�Dt�W�T-���"w��+ޝC��Jt�z.Z7 ����K�AZ)�=ʉ��M���9��_�Bt����E�pQ�,�t��ԓ���M� F5�g[��v�VkV+aj� ַ���Y�K-K������?�s%F�� �.& @B��tͯ�n.���j?��� �J Ԡ � �$&$ �v;)�{Ղ ��B�@�JU�Հ�{@�h��`w��x�t*��sHD, ��E�r�0�P@� 2�i�x%�I+�b��/ʄ#1!����T*��n%�`�Hrg(�-T�)2�������Twj��ժ!|o��A����� ���@�+�7*%��4��l[S��f60ɪ&x=�A���?џ���B�uO7tIg4�Ú֨�թf5�Y5�HGC.�q:R���x5`pdֱ�5�����,�IS�ڨ�h0�C�}�� <�G���\_���`B���z�{2�t�{�������P���u��������4p��j�ۛ�F:�::��hJ^�(< �@��A�+,�+x��ԭ�R�j��^Ը>C����{o�~��_��� �]�YYAF�,�1�P ̌�#�%B�\h���2g�(8� �C��%�ϾF�$R7j�"��j!�j�V3�e���/��-�/ts� �:H3Pp�y���d �\Zm��%�Q)�*ݜ< K%��@ H���Y�n3*A@@"�Xxd�����S�yTpH��@1Z�-@L@��(�X�X��7� ����l8���P�,�`��v�H�<�>:���k��7%b"JrCxYy���H�ڮ<`�� ��{# E���s�N��zة7�k`�^��k��g� �� �GШ�d���X�S�TL�ο�[�;~Y0���#|�#pz�I�G��'��F�j����F�A=���r4�5%m%j�ȥaʩ�;��L�$٬�0�e�JDe�G44DŊ�h�Hb0�Q5`A]��oӠ���Zj��z8f�ӷ����uW>���CT9 >��i�)��35�'�����h! �0�R�p����k�c&@�Z�����)J�ŴH�n��I�8�� �W�%���Ơ�к�/��4����* � �/����sL@h�8������o��~�+W]�ŭ|]�>�'mP� �=����F�7���%����I�ޙ�t�WWr��t��ɠ�G�W�Bg�6��o�9�$��U�I�n�a�a�u��H,=�Agb�ՠ)�N���)��=Y�a-�� 5Q�k�������eȘ"��%��+U�I�%�5dw?�t�v����?�z������K�CZ�}���i,-����dgef�����)HrRbB|\l� :*2"<,4$8����������YL������iy���y�,���ΠZ�?ƻ��S E!?�q����H�-c�7l���x1�5Qx��:H���p��7�P[A$�&9UW?�c$����v{�8���Խ��n� Ц�����sM�ww.F�0�y�ǖe��J ��OB�4��XN]�(Uf6 �}���Xa�{�9 6��+����U�5#�d��h=p�|q$|Ӌ�ֳ%���o�z-h�H��=����R*3��>&�$���1�g���Cȣ�:)���9ʴ7�ۆ�C���%*�"*�!�����qD�K��UB_�7�☛<A�u%J��]]����T%|��7�1B�~SQC��8���>]�TZ���T侸� ��J��A�ŭ�1^�o*�cU"��]A��Nd��%��-0� ��)4�Y�c�� �g�[}��" /�T�D7��Y4�}S�3��yZ���ˍY��S���ϸ�3j?u��5�%�. nnS���+�D���D;!����2!��4�,��t�]9�'�a��mn�G�4�S"���Y�k�#h�a������^�v�ٮU� �$��{}' �א����Y�hY�V˿:�jy�mѡ�k{ٖf�N'q�9�7�6:yN�R��LJQu)�y,ɽ��4��fި7#{�U��O����L�3d���l��yee��W�V�^�-�R�KxЕL/��ܞW)��8����_. ���`$���j��8 +�G�+<o���'P����Z��b��Z�o*�_Bj|���L貮�q?/LFZw� ۓL����Ƶ��|+x���b�k�&��1� �P��Q�B����D�i]r�kWīX �Q;����4�l���f�����SUD4�^�;�]с��_tݳ�q\� ��&ZB%�4m0m�^�h�Q��L��L#�0?8����u�=0���٭�)[*�C�G�hL�?C�Q.dKUy��:��oڅ �\ü�lM�A[���MIJʎ4�v�{K')�P�Csk�$�"zo��E���+9�j+rա���S��Ue�T�Q&~a%τpS�S7 1 '���z�Ƴp#�b���C( ����� I�v�4X�=�2$�n��ߧ�2fd�H����8ꊸ�*̒&uM�I��ߐj˱ele8W�6v�hv�h��3��;����l �Nn������AL�Q����p��������xy�J W"�W,�q"(�1|!��b/H���;_`�9�i$XB7�`�c@L֫�|8/9�1��I��ꉬظV&�(�n$���bG�R�4JGL��`C�1��2lu�NN6} W��A F�9��6��l�Tu�r����ȁ,��{� �uk���J&2��O٘�+�Bg�^�b 2�����*���JR�� z���R��2�i�L'��f:P�(�ݠ+�;�j��谟�:�D�C֦rqBswY�Z�`�S*�e���j�qDF�k��~�������ja�k�&4P4�[����T�� m�~�B�Lh�x������P{T��@��ʞg؎\U�[�W�'�3�������qll̸�!���mp�䚟gV�,J.L�.�F�H�(d�I)��j�X0�}�K��#�G��¸.(?�ο��k��E�=�EU�-�U��wLԢ�H�A�G��82���r�&!9bצ2dy� f�A��Ƃ�w\틫O��U�T{�� V�w��� �V�`X�Ā�c֧^�a"_I5o%� �l(}B�Q�YV��_1���4.� C�֤wv�q���u�����D��� Dz!ޕ�N���l�`�]��l�<ӳ4un�:���Nh ������w��<���@�D�CU� ��r�����|�����[��J����jy�B�b��VU5C��ZTYcTV$\��pI�ο5a���%�zK�]�{��*�d�{��dX��\n%��R̂� ��g��ԥS;�S�x��3x�42'���p�u��D�Aߍk�N���|��E�7��1 >��r�1��e]��}�0�$��@��XW>�*��@Ԩ�г'����L>�����$����?Y�7�'�g����<79ݢy�.'EN�'1��e�5��|�B���Y_��fCkw���7��,M��m���e�-C��K��?y��"C..fT��;��r��¡3���A����r�<���J��yrZ��{����L�_�<:&�4�ş���"����+�Y^C~�?��J��� !�a������п�����\���Nv�M_1�>��� V�����o�x*��MÇ��M��×����FG����e���q�+]�ʂ��c]?��~f������§{(�_Z�D���7��W������y�ɷ��%��j�8�����_[����4��%���ƅl�����N]u��:�{��>]����KlU���d�"��6rI�'`ߒ���i��cz0�l���'��̟؞�����:�ّ�F����ٗ�� ޫ��pXm���Ci�Zyv��dS��z|����ѡ�çΟ*挦L�[�+~t@3%o��&͢��J����2�%�9.I��r�5��qb�6���:66�6C��0�Uh���Sߍ���,�T����մ���5�M��W�^�K�}�8~�/��PG��>/��l��qC�ԗ��D��{��r�:�[�����D*�^yM��ed}�3���i"�{a�>�nʮcS�.J��ʠ�z�Hz���0C+��7K�3���4>g/ooOS礂�V@�+.��F �Z��;��n�}rʱ�Z��gLr��,�$/���n��A ������%{}[��E�ƭ���� լ�M��F1﵎��7�j��B�����u��������� �ic�o^���M�vfq}xL�D�1�I9��3�;Gm��r��[��дWZ�VV� �ur�������l-<~�p�j��K��.0��W�2�zEGr��=ܔӴ�[� �4�YH�.�>u�t���}�//]hx`�/DˋT����I���J�"���>��J& !%�%kͰ�eX��R��F�lV���7�v��bf�F��#�]4�Md���EO{���е�DI�[σ��n�|�����\�����Z��~�2=�o9��g� ��'o�SNg����{p{��� ����El8���ny�T�N�e0���YI������n�N�V,<~kC��4<�C]�^�c;)��y�64E( s�-�8����[{f���=T��c��f���,��a���7�%������Ο+��� 3>����fEtA:�[�km�]@xO���?�3���|Ү/�])�e�|�=�������zm��k���#�0����Ǜ�>G�'e��{���u�<I�1�:A�tO���%w���3� (��}�@t�{�.��}E"ݓVʍ.3���[���c=�8/��>D�Y��E��$�OՕ�[}�"p7sv�t��Dz������bɊa�̛u椈o���;�$�1����� P$2x4��� r(c�N}���� ��S>x~P�U��pA�xbJ_A��Q_YQ]-�͎��n�a�P�X�����.V��!V�O4d�[WYY]%��!K�K����'������C�u���'�����j�f����?�Ӎ5S��^ti����^W~�n\V���mo����30̏�ʧ��oE��g/ܻ6�oҰ�RobZO���*m��`Jd�z!�7�����R���J!\�� s�"��(�ݓ��յ�����q��P:�� �R�>�����C�����Wa�q1 &k�KaM�GE��ZG�h�W��&q�X�S�߇�� ��(�� 5��ų��h$��}`����\�3�H���?�X�)�i�^�Ġ�}$T�����x8+V<���Q(vA��{�f�����_�3( 77eQ�E�n��Hg�ʅ��ܠ+�5�U_d�����k��y��P��чkz��ґ��h�yW^U����A��ؘ�����}tt�G�/�X�\E�gK� �n�OBч��Ƴ����VL!�܌�р7�w��7�2wЗ7�=� �7���A6o�nHm�H*��Œ��9� Y�M ̶�~c���~k��e�w6.���{g��E͒��Qj�mi�~�F/��������-�b^c �����Y�[��Y�P��E�ˌ��8 �PCJFvd�(|,�t���Fʜ믶��Y�:�� �*�,��\���B�I�2�w}V/�u������'bL[�<�ds��ꑺ�|^�����P'n�@�&���*\hsɛZ%[}�!q'��Ҁ�?8HU���kyN�\��l+�<�-)�X�^?1y� x X�� ,u+�`��&t�|3Q�<_�R��dA��d�1���P|�jf�Z0��Zr���x�A�S��_�R��dA��d��`��Y��0�Z勑���'�]^��!<X���J?*��ϛ����� [>ʘG� .���YB��ȗjn�=�x�W��4��֑��)�of�Q�u�V�� �C!%��l|��o�^0[vzװ��t^'��>Gʒ-\LEJ�mˋ�,{a@;w�Nj�� $ �U7�0<:Ȧ�ɕ&T�m2�$t�[#pS����^�;M`���uOҦE/u���b�(�y� �p��n�o�4��V Ҳ���0� ~V��d�؆�� �T�IR�g^�::�면�a�y�m�L�@ł�Z� $\l�m/.�](��[�A�w�~�*D��ɀ#^JL�p �5{%� h���6�z��6�(/�;8�Tm jU�j�waF���e� ۅ��s�gN%/�eSC}p�f��>����|�G�z�"�g%�HR��d�-[To���He�9�m>��z�I,�(.D�XR�i�w�F���`��{a}�_#v`�����ӻUn �-k ���e�e��_�jfv�~Y���p�������3��ǁOY�t|Ov���]�O|,K��e�uoc��8<�#25���٤De�R���v�ɲ��l�G 5���F�P�����x+o��ޙwr|��� ��¡�� ��7����� Yt����tt�c)�ď�z�q�%����\v�Վ���()k~aC�uP�&Ϝ��I����n=��Wp��ԲZ1�=ڿ�JO�F���f�^<n�b]�(%b\�t��+�8� .7*�$Ӥ%�5���#K��rEl��Ϥ�T�F4�(� �0���%�#����Ͳ�yř�٭!7������1I�~�O���w>v����$�9�?� �k> 2�;�E���X���nQaߨ�:/3�f���3�M��okk��z�C�h��Б��)X�t^�7t% ���v�/�+X�0�LP/R��H����"�i�p�?�5��~�q�{s�%kr���z&��o>�J�,��cp�#�r�9v|h���h9vL�u��CcU��P4���47=@? �5C���9�Aa�[��|Ôdž��~ɵe��>^3G�a�!��"��xowI9~��4Tk5��O���Ө/�&�t�i��Su7�`��8 LCF��J<�Չ3��<8)Q� ���#���Ȏ��{���:z:)�@������E�"\�"�I����u4̥ ��:S��-���^�"j:��I�j���z�R��_io�t�)Z�.���}s2�:IL�2 .�$-Dqj�%,��6}�(&g���D�TWo&/J ���H(�Ĝ�@'>te")�]��6��R�9cD��f[������Q��Z7�;G�qT5#��JoC�tӲ�� �q=O ��*��`"8\_ �%R�\�T�5Z��`4�-6�v��N�h�'Id �Fg0Yl���������������o`hdlbjfnaiemckg��W\:����{�[%M89Q�zl~����G���t�7�c��8[Y(���f|'���f`�0s�ٯÉz:��E�6�R�)�@ap����aC�08��`q����iDDDDDDD$"""""""�s�9�s�9b���_��/��~��\����h�Y���M�`�P��gM��i�μͦZf���iLU���ƨ���+��3�qM��\��l[���7ǿ�otN��8���?��jg�i�g�g��2�k��+�72�D���-~ϸ�8"f+K�E/wF-�E.T�XW�^F�ʴ�Y!sO�A�>�ӛ�i��FJ�!~��!�|z�ƻ�C����Q����pڂ���j��F��*�L��JionE�y�f&�,�Y_��!��-��"���������F�[(��czwBw��WG���u�#M�˦��k%����σ�������6�h��|�`�+>UV�N�[;T淁�z��c�����dXq�h�/�LOkQ�b�����ޠ�Q�㼅��)�!�{̓�?�o쇷�j�(q����x�On��"~�w�cf|(:f�Cms�x<mw&W��7-�C�wnO�ޑ;�3�ww��-��m/>N�̖�1 )�����d\��0P��k�{�L9theme-joomla/assets/fonts/opensans-5e4a508f.woff2000064400000025504151666572130015534 0ustar00wOF2+DR*�>�"�X`?STATZ�*�| � �,�%� 6$�: ��\�I%c�����f@�8 �a�(�����?'�5� �r�騜݉WB� ���Fq)�=�nS� ��M����98'2�Դ�z�X�&E�� ���uC*Z��ld�^��%lR���̻������t�l�]��8�|B+0����Oryx~O��=��!�8 jSv���|�J�!���U��%�2�>�t���c� ʼ4�&@}�4u���6�CEE�h���m:�γZ�@�HD�fb��\�f�"���.ʅۯ�c�<���6w��d���T�u�W9�Br�C�͌�����2i�W�b�Ѓ�/0�v�� �%57\{xI�Q�����Y8�l�թ�2�r��d�g_��BV�6п7�u�$�w!D3��-��p|�_�}�"�g�#Nם�L�N�.�ׅ���*\��K[�3&�stU2����uL8�dX�5g��Af�]�?K�>��O�S�Ӳ,�N����@�B.�J�atf�J*Tͤ�4���pir�ϧ��P�i�խ�aK�k�-�pwu�(��h��M�@ɅtS���^EJ�u��T�l�2�y1h�ջ���R��?^`�1M$�H��F���Z %�w�!��{�A(�Vkk;<�Z����& z��M;�%|�mu6�a��N�b���=�j���mJ���3����4ó���y�$7�|����e� ""��~ѽңd�z�f��{�g��su߫�AW�@��ݽ�Ln�5�l߸�����8o7�}c��[Wޗ,�� �g4�:LO�Š�a���S�,�P�}�(;�{���0Q�ơ�/�}��p�S���Z{���h��mjm�[��fT��~T� i`���{���=��uM���:��U�)�`�r���7^x����Y�ңM�j� dK'�'�7W���e;K��RϾ2�� ��`u����Cw\��,/62�[CBc�&%��A>ߛDrU�����?O�;�Z�*m��H�_�7�g�#�_G�I֦��r���&�W� јS�1���5�"'�аD6B*��D`��6�b�@<.s���X����FXy&�X�=AMOp"�|p3@3!l!E�&#P�R�lp*��Q|��h'!l��,i���+*x�39C؍L2D�e��-���Q r�O������1@��:�.�/MA���5�vUC��*ZG���z� ��0��k�G�Uس��3`��)�-��2��U�+����k�[���7�����%��uAB&�m��E�����sf��Ȼ��X����@��w�Z�^��t��t�Y�:r�N�����&�kjSF4K��+6,N��O��Z��,;��̕k2�ad�28��i,ةO��!��]�n����~`��ƭk�Q䢀@1��á�j���~L��1�(]�xO�-��!NȄM͜���;"J(*���5�3����=ϓ�e�V����1���s�I,*�t��,٭f��d���w4�7�]�p�_`ZE�[�'k<��cG ��S�a�.J��U�U�>��b=B��CzL�,���֬S�5fU���<u��Z�u�Ϛ��#�k�}�\Ū��)����>ȲIՅwb���V��`{��T%�6�|��}��طu��졷Zr��;k���3J0���z�\��������{����ׯF�A��ܼR�J^(;Y:�/֧^��4����C4���`��D�h*�Kc�7l�M}�WZw�^� ��h��F3MZ�ZO"��̛�@�]�YπF�� ��b�9�Ǹ�L�%��0#��I��{��_J,:�h;�,kuU���Ëy\^�T=�(��yO��3��V�Nn|__2��exSm|�U!2��<Ɇ2}*ܸ2:�-y��g��b��$�������ʯW[�����JH��OE�'*�T�wU-,f�٩*��d�ko��TgjL��B9�X��%��x҉+�I65�g�=���(��y����;�N�3Ԣބ��W?��� ��c��M�b�Q���ʝ�+ ��Fߚ �e���{d} ����[-�t ^�D�S'Zp��ZL�`1x�-�1rE���������'��}}ڹS�թ(^�tt���ީ:f�S���e����`�M�*0��ؠ�Y�z��MU�a�#��{���$������!�����s֬���Ո�9�n��k��5/��Ʋ5�j8��IF�����,����h��[7���R?F�Gl\�~/�a����c/��];��M��t@���H+� �!�*?��� �[��r&�Tu�e4�썖K��/���"E�h~2 ����r���/��RO��l��=�Hk1���W\��`�S���^�R�"�M�D`f�N-�o�Q��xΒ��xs]��J<KCgq��w\�"�6�*�>�h�GzL|f�:�'�^S�oK�0փ�&h�i^g����7(M���&d4 �Y��/x�,�!���&��3^Qv�ʺ���f�(* ^�^�f�T၅k0�{ ��^��%ǚ�*�������k���䄶H띎�u�L�ַ�0a�b&h�>{��"���v��խ8V}r���ɖ*j��2�f�$�0x�� ����.;nh&J_u���H����1�uΧ=w��?�+� ��<09F�<k�KZ�.��ޮ��q_��e���WD�XN"��{�r�X��h`ކa�uP`4�X��;��5Ӹ#B�>�"_&w��C��Hs���cA�.t��vji�������:D�E�h0 �N�������7O`ma�{\��GN�s�J�=��}�娽��獪}����B�#a�i�:�;��0?��*'��� 5���/T� An|Yÿ��w�$�L�q���(P��}�W:������}9xR���Nr�&G{��^���kUa+�X�ߍ�d%��V�����Ԡ>� ����xD���D�����a9C����T�a� Q�On�t�\�������{�3�I���,�.$�����f�K��-V���ޭW��D�W����T�00�p19Ly�'0�7Wv� 3���qzb���H��ݭ<��M��}�\��-�Z���}@�t���L��*u�� �W<_�'��Z��v���'����tsk��vsCt���F��É'>����Y�"ܘF�w�Bf>����%g��.���g@�J�.k���� o��u���e�~#� }�ࣥ�N���*��#Ms�����7�{7x���ǣ�Z���~r�7����z�=<��1�gz��\��v��X��L��=L���N�-� �_s����Nf� �T�~ź쟞�ठ�3���P���6B�>H�l���^�:��}*�'� �W�\r^Ӗ �'r�Ǡ��=�h;�O���'�M��~^�ᑊی.�@�E������f�m>|�� �cN�E�H��@�vd��A�ȗ�� |�P2��7���I�= ��JW�� �&C%TT\Eko�lM���T�Xuk��`<��PX�QaZ �0Z�?�&Ke��?�6<�*�6�E��� ���iy>�`���S�, �0�ML�ͥ�[���jK���,S~̅ف�І�E��T��ϣC�S�ق1~[S�1�oQ��v����ҝc�@CKT�dC�c?2�S���}+ph�m���������.֟+�H�'��K�&�_�L��Dce��e*oʦ���ګ�\�m@ �AډF8���tg�C.累Z�x�W�qWr"���0�e�&� ��'���Y����=D����{|'U���v�P��vM[����Җ��+� �W���}Rv�ԉ����16�������]~�$���P�V����]P� �`�}����r�Ė�I%艝5�u��[�S�~k�0S4��U�qznoZ�3�o0�KLb�E��ݡ�M����8�O����k:����XC19[ҕvB��S��wC�m,�p���?�t�YX`�-�)$IYW�,B�Ͱ�� ��g�.���8 ��=��/��<R)P�h�]�RhC �(M+>�Ֆ���fc�n� =��^ b2�%��lf�.O��C/)P9�T2�YPܸ^:�oǁ�ر��!��]�ǿ �<<�}K��q``��m�:�U;��]iq#l��J�������m�P 'X�]�d���P8l���%_�} g�1�#z̋6t+� Vth�D@�7-'�B�o˳ ���P�A�$�F`q�� �{@�O�{fYz u}[��b~H7�e����`m|�R�]l�a�ǡR�l���n�|�"T}��(ϥ�!!�Ԝ��F"�)GΏ�W�G�漵���ʖL�#��{�h�@���Dm�jӝ3����;Z�L[�jKɔ��Ô7my�Vz@ϙ?a$�-���5%��<t��E�{�,Y�h;UAo��kC>D]��1E��G���~c�]4�&�K��2�������b�!�{;��I���7��G$A�c wd2Ϣ[�'>;r��z� L0�������6�g�O�݆�H�Z��'��Sd�4��d5��S��j/��x�����6;���'N! ݦrM�EH9E֮k��PD���+Wҋ�]K��@E�c�]��LeՆ^;�eC��HӬ⣊�C�v_K�ã�)=�r�}O=��jJ��|)�yqe��6�,oY6�}.'7G�X� �]t}Fku<����c��_N֨���T���|�:ȳ�S�7���t�b�6UUQ{1�e�(he��/.��c���DB���C��j�,�.$�a�QLo�$V��|��_�I�>eN15c͆����kڲ�U�:��¿x��/ ��QkuG��UF'� ���L�bC�C;�X��<���`e/l���&�ҷ{��a��pL�vP�R�@���N��3�=$i�^���=�g��9���d�p�f����B�����)��"�����͐8ڤ���q�%�k{K7B�����+W������@;���AU�j�P�3?��X0��-�1��ar�%ð֝�ܕ$��A-��7����&#�@~�#K� L� �7>h5Ϋ��p��Ϻ��O=6y,��?�RK���s�h�F��@AxB��O"�@��s��q��c����֑��Q�������%E�`~�Aj�%�̈`|r[������zN.?7>el~9�k�<.J�qt��ŝ�B� tPzj_Ѭ�}���r�X��Pi4�Uj�4���Mdn��=]�x�[�a���NLT�ci���q27��ά!���&��Z=q!�SGS���MM��o�ݔK�o_�����Q��$�c�h,���p�fX7���'� �ZΈ�����ѿ�T�n�r�E����۽�~"-8��(��?����}a�6ys��S<`��t~,"���$�_�L'�F?MؙLYoyy����Y��p錧4���<��x�&|�.9�śZ| �(��JOϿ^s�=d쮏�=�Ƒ X��^��F��.��d�m�j�˲�r�H��VDE{%�vB��'2�yz�<���FA�qFrJ8-/ŕl2;M?��K�u���9�ּ��S������1���gN1@w�T��j9D�BH�V�% ���5W�Q�}��������%CT��t�s����"�7�2S����Ҵ�s�>:��R�~&�� ���W�V`�oFr WZ�^���ܧ��+Bku�rv�������1�ð��Ku-�+/��e�����qi�Z�>��*��hn�P�.�)Z��B��!�j�;��y��Y����c��'����� E7ɇZ�w��CT`�>o*�o�'NbPL/�V�a1_Gy��R_��&�YP�̙$�#8�r���$*8��I��9���)0����r2#��g��ђ+��~Ъ@Қ�9�w�`J��*��-9��^9�qDQ8�P|�()��[ʋ�{"=�'��Һ=2��2�9]�x9j������w�$�~\�1��ؼ����߲⟳�ZCAv��MԎ?�ƍ��}��͜��2�qD�*�v��P���@M�'�,��㟟��&:%�)�F��Ù��4:�=���������)��K8/^F��|!��4��7��/�f8x���h�m�ь��$KnE�U��ϕ{���/�7�17*�����ES������%�f�嗂������V��;�֎�-���V�p�F���x�W6o��p>����;������ֿ4y&����g�8�i �f�ɿX����״��&1�Q�c�: ijJQ.4 ;�Ѝ�g�wO֧DO��� Ш$��D���UvXp1t�y1�w��ݸ6?��gR�X?Rp�>�� �)�W�ݪ���:Yլ�Ȥ�\�o��9�:��3��?Rr���6LË�;���'�P�R�9�X�f�Կ��#�pbg>���r���?�%�m�Lۋ��-�p�!OWǀ�:eF06gPL�Z� ��&�~����F椡��;�5��aС!�[�V�������Z��$=���ۖ��w]S�+����q�6�=J;kl�C��i͗���\]�������`��sq�/'Onv&b��$yI]C��A�ȸ�\�q�2��]yƅ])�^j[����:�� ��n�sI[��W5�1ش����w߄W(���[Y%����=�/k��c��I�oOg�[c�.���_�br�Y�'boP�k��N���1�tMx�j^nz��_�u�bz�#Qx����m��2�ř��ٵ�l��B��=b�7y����f�Rd�s{�'8[��9 �x�J�? y&DAz��]��V�M���>�f�����vC����A��&���3��L���O��pjf�y�9j<%���UDH�)��� �����K����lF��֘�u��HMm�Q����V3�pMC�������bH�� ��UU���Ԍ��Lu�Lҿb1-#���mO�wj����k��ZB U���t{��tSf�@��BT�[wFw쌞�8���C.�EC� �Kq7�6yrW�f�f�f�E�fS�B���Rɗ�N��5}���=��$�2��.�W��_�I Y-�f�ͤH�p���b�iq��&>��Ȥ,��Y��}U�B�C�%ř�I'=H��p!��'���N�v� "� (0 8wS���U�"7���~�BhY�?�E*�ѪGJV7}v긔K���4Q|yj�-s{��];�T(b�(�5���展ܽv�C�s���>�Z=�4߂x�?�b+�.���t�� ֢C(�J�X� �)�˗�,�+E��Л����ӿ�ɼ�B������x7V�)�~��e)q!�P����UM��X�꒺ݭ��E�"��R�������l���f"��9�ٵ��}�.{�I.K��H���(��xg�K47�� `Ew�*�=��y�4��/we���� �?�e��egQ�ǥU��%�N�D���B��c��u������ٓ�4"7��*�O[I�������(��;�e��>3�Z}<��r�Gx]B�W,f�s��=7���m?݊��m�0m�i���#� ��\���i/Z��C�Քա��7Z�C v�x�-�\�`R�����猙N� �i%�<���ʍ��_^&#�ۧ²ԭ�~[ ����x�{�7j�������Ґ�D�Cq]���ؼ�Qy�蘼qM��~��K�y��}������1� �B�B�:��m=Ă �J�1��L6L9辟���d�-��Sv6s�(;�;�(���y�y�s����3,�q��\o� 4��ĸ�����������!q<Us��&y����r=.�J��vn��Ίh! �s��&,zi۾(�L�/<�r��������t��@<�%���8��ۤ�XȜ?S%2P��� 2Ƣ>�`�8dL���� �$"(C�2c4K�� b9B�-,vf���v����q��lYd�=X�$���z��%��I���� M>��>�u����C#|cxk��A�,�~\���!���v���~؛��~]+@Çbښ��ݮ��� ���$j+����ﭹ�� �dn)ߑ�2W"Oj�Nȟ{�t浭U����4%M�� �1,��Gq����0䤑��C�f�/�Y� ���@(�����@�(o%6��ʴ ��Twb�~l���+�� , ���nrg0��'�����\G�����{��?@��!V�1'9��'����Ό����I[Ӯ�{��-Pwjm�����g��(�п0��R0�����9U�;&����خH<3�b�A��m'b�Su"��y9m��r�O�c�Xd8�a���#y� ���A��2���TM��c��U��GQ��m�[��l�~��*�8B��fN}��e!RQ�6R(���5xWg �f��ӭ�ؑ��㩞0�!T&3��>3Fm/�q�=�k�X���q�����"��:�*�Ű�� �Y�H�/�a�K�N ���*w�C�s��������@�{4Ddx�H��+����'J��n]�+R�g���e��+�g�J���J[�Ϲ�����F�5��,�bI"��o���~H�����~ >(�;�Ɉ��M⧵p�=b���u���^Ƣ���Lf���Zq��<��ʄn ������/ƛXD���X!��%�p�bț���PY .;6f�k��ߛ*�c��vKH�Ů�R ߶M�_�+_����̶��, b�o� �J��R��O���WKL�:���@�ũ1��=M��m5:��3�������x�Da":�<9*;���Δ8�%�7�hr���� X} ��`��3{�C������E�*����`Ҽ{��>���4���A�.����0�E�:�n3�x�j�x�Gp�ΓO��/+��Q8���h�?|���rM�&Lě%�O2�|쬪�r�IƔ���N��w�2P�w��m�&�l�9G�g4�>$;Za��[� ��5r�2Y��JK�B���"��^�J���T��T�=���(��-���`��|QDímp�E�@��"�w/�����X��D���[�����G`"X������' >��q����X��`���P�b)���4j��۠bd�W2�N5:J?��6M���W]���� ��5D��C��i$�qZ\�u�4�,I���"�8[/PX��!���:�MGq�{a��)�N="��A�m}&xĤ�RHsj�F7�U�K�B�]y���,��V��\[�q�i8�a�G��>�r�y���Rc�D:%��o=q H)2��t�d���8�# �����'�RS�oק������ ����OAI|�����=��u�ۛh@�����r�����빚�1�\&�aj��?��X"�YH4�����אj r�[$+�iD�2�<��⼸���Ѩ���D� ��̶r4�H�C�����,��R�J�`�6�T@�Ejkd��B�r��UJ�R���� �S��ި�5l��%�!���XS�1���q�0V��1�V�!�쪜�jX,p���X����>qng�}�)�,�D �D�������\��2Q��ɐ */����C�*\�{�R�X�!:����{�������QƪU,�"�* ��'�eC1c.7!.�F�͓�7O� �D��HP�a�RMWݬf�kH`��G��< >� ����@��b �`O�;��Ha�@�����%20�l��-E�,%=�_ʼ�T��� ��-��.���҂:�%� ��@O/D �Q���㻙>�Sf�6K/BB�-�g����,�.�Ɵ+��$ �&�2R�]�l��YI � ��RX��+�x�籚�Mf�Q�"Q����3j�ݵ�0/2!�O%PŠ}7���b��ag��Ǡ��� �,F����4��.�)-�/����ND��,�d|���ه�l5DwdJsX���v�`�� @4��d9+�l�c{�춟w���@F(XH�?�9ʃ �"��@ep���Hj�iФE�](hz�0dk+c&L�1g��k6lm��v���`���k����̅+7�<x��͇/?����QP���,K�0�"�E����-F�8����$H���9r{��9��ľ=�>T7��˗+"~g�o�K�ԥl��jV�]w8���(����f�N�;�D I�$I��Z"(�����K((*�D�'H�� �Q���_���ɏ�ϣ"$f9"ЊS��D�q�?��~4,r��o��,>\\_SBI����7�!�y�IO����,��_�F��-I��S�EbDB[܇f� �hr�+�'/� �ӗ9�Ni'����;���?��Q�}�`����K�=.�<GL=�in����e`���}g#��3�6��i��hX���쨚�a6K�tD�$��Gv�H�������z�����a/�C,��l�h���3~���i��v[6��^[� `ְ��F�F�\��*�JzA V�2���Q�*4Y�K�N$T<�.�APL�YvC���ٜ�82���L.؝��vMXh���/���C�c�G�}v�;��ؕv�(� ,�+�����V}F�Z3�O���"=3�wg����m둭+�����ߔ��}��M ����k��S�ڲY�}��ļ�����Pgi?��ܜ�u�gtheme-joomla/assets/fonts/opensans-3e16e5c4.woff2000064400000017400151666572130015526 0ustar00wOF2;��Z��f`?STATZ�D�| � �4�'�.6$�X ��N��5��=0��E���p2D�����"!"B�nkJ]�M��*�X�o���8��*��al��Ghh�JE�i}��l�R��J[�&�����ƿ�N��0O0�,y��I#$����?O���Am}�����*IPHT[Q,#Y(�7C�6��=J�E�hT�� lP1cb�:�D��*]������u���t?������X���=���U��.�*��4�{�[�!췾?�r��OM�`A��� u���Ԓ�4Sw��Rg��1_��S��pI�ǒ��K��α��k������z��ީϴ���/C��)�̈u@�6��q�K�����c}��feZ��U��:b��l!r� u��~�5��ԚRk�Z�d�tԻ,�f�/w43G8k��"��A� rR�6*�K`� -+��~\����=�IF�q|�����m��[���b����>[ �fuL��*Rĉ� Q�d)R�ɐ%,*��S�: ���l���� ��Xi�+ښ�`,��@���2R��l�2��8Ĝ��L��8e��~п!;�ퟑ�6}l�L�!�a�'��iB��B�HX�_��/��?�G�N��˦���?γy2���ծ�ƟVùl����*S���Ua�v?7�36#ݛ�zBi>]SJ-�L M�<���]?�7� >�9�v�Q��\]�3�NH�Ǿݟ����Sj0z�QK����4 v�0φ6������ �P�8�v����W���1G_��lxs��V߁9hh�b����c�E��|�̈�7�@ՋW�E�8�Z:cPQ�@ԋz�$ME����1Q��=���)f��7�,`@����AG1�e|�g���ћ�Q��8BQ� � 4sħ�݁�I��S��[���@��S��5�6qCq�������� b�X�x�:3����fu/�EO�`��!����|l��a�/{�>��p�C���(���y3�����eP ��v��2�.D�m��Ec_� �����7�n�&��a��-Y�%�]-;S!^��=��<�u�;q�M�-�$(��k3#�SJ'U4 o |[�e"�E��Bd!�V-��'���JHLBΙ�\{��@�UO��q����M��I�;�wp�y�I��o���������<`�`ka;`���B��� w<\a�b \X���a��qQB�&�9� g�n ��O˄��ǾF�_���~���ߢi�������"�M�By -Eo��"Ɵ����o�m6X#��?�����75_���i-����_�����A�θkGr�o�lҶA��c8��^�M?��Ѱ1 ���ꐵn�1� ,��Y1�c�4�~7�7�M��w�'\�$5:m о�S���9e�;"\�+�ow>�� #�b��O�S�U6G�.�m�1G�[������9>ut�m+W,_64h�����vu.�ho��[[��M K��j=��r1���_]]�^�\��Mǣ/�������v>�W���S��\�e)�n�p�zD ��`��X�p"햱���`�]|s\��OQ�N!�z�ᔇ�R��%�ƺ��?���H�2�v�L�%|�~�� l���|��Z��Mg��/˘t�qֱeYeƒ���,4�]�V9uAR����-�p�0V ti�{�>��i��[� �� ,�G�� ���j"�}�h�X�#�'Ķ^K������fK���4'�$ih��)�LL�4Хl4�j͛ʟ�c&�/*�P�F"���t8�$du��Y���r$��A@^Q�3�\/���HG�*��l�!~���:��d�7f�2MS&����~ ܷ��w�L�ɝ�K�-�c��t�6��Q���p���cĪ{�.g��{�Sq�c}�}k���$�a��v;%Is��\s�~x*��t��kq��@m����2���T�)�Q�с�a������M�l�<{�����U�iX��"{&�����ܦ�wz��D�#�6k��s3 �4���y�F��U� ���F�b0��4o�h��EL�hY�V�|��kyǸ;�2N!(�K��9�20>���UZ���Y)��Oe�</�L�hh�./�_k�kyϲ��]*J,��]�?�4��+>4t)?�5�:|?��[����A,Ʊޅ����K'����!���j;Y�� ���~�\'�ol�X `��IRG���u��n��Iu���»�K|���)e�� O27փ���u��r3s?7]��0�Ă�a�#Q��ɦ�53�mZ�E��_;��T�PuvG �[�9''���֚��g��l��:4缒/�95F��?1���8��K~c �������f��@N1�����a�5e�zp�L�s}L�n`���~q�ʖ �Д�hD���OPi kh�z/�.��ZCn�FE�&��`��������.�BgJ�+v��!�|j I�@�D®��Fb���z%�հEu�*b0�o:,�<�g尪Ԉ�_>re4�3��eBOBi�ٕM�u¦=��Ŝ���EHC�}?���8�.��&nx�X�-�� ���ܿڅ���&�z>U;U�/�&�r�X���挶��.ז���N�-�Z�?t�K��e�kTN��Y���X{�nm�Kh��w8�'МL/X�4�z.��+�\��G�� 6?�r��Q~����|�>p$����B�9��Q���vǖ_:K���9 kV�_�KF����ɀdFC��� ��)�6�+�n�Rۜ��챶�# �ک�ϸvZ?٨Y���-���h�5��;�TH�1�ɀ�h���AE����K&��ƼSU���(��Q��ĬR��)�m� �n���?� P}�Z��*��יؠ>!?�L�:�=BG�}�k�B�^�;O�.�h~�6��-7>{��!aY+�x��5� '�3��C4�c�TF/�Q�"J?�P��`!�����.��P���q�j����\��.���j&?!c�șc�;[$�/4^�Z_����ڟf��|����.���IK�t�R�j�v��Q����y&>��p�!� ��pA���駢��n�����<�TU��}ej��f�uq�W],㽫��nc�p�ZЯ�<��QL�|t 澘����'�����g�fh*���ZN�`������Ŀ�7����`͗��h�C�ߝ�C6wc]빂��V�rU�J��_x�����K��R\Ռ�4֥`z��(�uMWز��H�QXg4�7=6?7��HTıVP����;�;�9���-�I\jI��� `���Pr �a�� �N� ��и�N{�f��p-�I�9�ʤk���r�S��� =� E#cN!�9�����S,a� ~�n�ut�Ȏ#�ת��g��G����p,>�H*D���9�b�����z֮��B:�6�7>��u��@GfS���� ��s���w�G��bm�,H����Y �<� �;�hsx���F�N����S�!9�N�6���n��A��^H�f��������]l��p i5Gj�K}$�`n�Q����,:�s8����u�G�S�O#�,��ll���^DDq�V��{��h�Cvv" ��a7{b���R÷6<<� �C���+�ѹד|�����/�۩Ee4,����aX+�o��K̵s;�m�p۞��mc\�Ĭ�s�i)l���5 ��k{��4z�w��[N�ԗ��Q��lT>A��x�xN>������ <`�P�X�8�7����p��2��\���8�n��.ˎ���ٰ��}7+ZRr~�_�ۛ�'�F��R�3�\����n�U���c�ǩx�sן�h �.��ȷ�����i��0��{s�_���k���u�5eM���%h��4��:ݫ���;�"T��n���S�H#h�l���z����@�������Z�(�E���l:X�쭡V�DI�^7�冷 �UX�VX��W�szH<ۚ9��l����� v�T�E�~�$��z�N`{��{t���u�m|&� 6YD�G���lJ���B ��پY�@LY�t<86]�O����FֱQ��J�n���,`�67�P��Q��$�������)���ľ��B���m�a���㲔.dIvٌF>�R�RE�\Q^�Ϙ�r;���Ru���ߣk%���'�c���6G�;��+�~��:I2P!J'Yo��ma�K�,ԡ��� B �Y�_��2.c�}�����\�K��F� �8��cu��뜽,�#e��;���� O%�ӚE�E$�W���@{IZ���Q�?ϲ)LX�-ן|f-W䩏xE/��x4����F�h����f��W����<�W:��MNf�kJ����۠opdp=��8o<�,Vb:X.�}�W~v}q�3�4 8�������e^��6'��5%�|h|`i{Ŝ� XM( �mf%��}��E��~���О�OCb[z5ٺ�Ж��_�^��ó�_��9��2��'t % �%)�4�-k o��(6��Ǹg��8���������Q�����*;��/�lL�q?�㚎���W������K��)��~���hR�g�d}�7�=v�S}9����p�;ѿ�bcb>N]y&���w��TTG5GO��w- ��HJ8��xZ��W������aOƥ8X���UN�>�Ү{I��;�Ҹ%:YYf��)`�`�� �z%��{4"E���{[h����b����y������/e#���F���ʾ��D�w��-�߃����䷀7DR:y�|~N�P���NN+cU8�7 =�����m�������t�5?���Mu������%!��&Ju��^�ZS���Y!+�&p'�����<��Gh-��o����Z�W�*�i+`�:EK�,ٚ�U��)�/���&���ٟ�k�k���r�tqQ��O�cZ{�x��l��;������6I���Cu�S5>�/b�߾� ��\a�q�����o��u����M����A��zwD�9��@VͰ%% f��Z}��Ù���: ��d����^.k�e�"0���F=�()'�G�ۧ^G�L�+���$^Rz��d�{v��%3j$9Km���w�aWТK��?0���$��N�'����d�t��Iҍ�2�^-_��Z��N��_u�\@��C�d9�=�X� �U��kĶ��m��MCl}�u�����6��w�Xj5��yuP��a'�h�S��}��ܗ���{2%������qr%�ώ�LǍ���y����N^��^�����{�K�ۨ�C�J���E�[�7o�a?�5Z��(��H��7c�Ջϖ�/����'�H�������n�CA�h��}9k�68Myw� �G!����uc6^���k����Ӳ���1I���*�A�2\`Q;Q��x1+��&��wd0��j��g�Wcn7��>�'(p� ��t�?�3G������M�t���V5_��5?<�ڹqw��qn�Y���{��'�{�S�uG[��ri�qr;�,ck.ϺGk�F�GnQ�?�D�h�jˌ��"/�&n-�m���NP* t�"�\)E�Đ"�M .^��k��+���i�=D�g���O$��g1�H#?|c�?��RZWB{��-\�*�7��ȍ���W��J.���P���g� =� ��Yi�5�+�u��_v��:�I�ϯ�<ZSp��H�DE��B%����c�~�6d%o���[�Ϝk�ܣĨ(����8z^��2na���8#��^F��9��:>�ץe�׆ ʬ$DO�SH9%*Bj-/��&�OZ�c3����E%LZ��`�%ֳQ�P��G&J��Dh# 1��C��Pv���s�T��йZ2�0lj��[�h,ZZBs�8j�}�M�+��'���i����9�o�w�ή��o�~�R^�l�0}A�i�7d�w+_ۥ�ㇲ ����e�@�$�ъ���6d�rSॠg�� K��{P�[,O�GQ�~�Me3�A�d�ᣟ�BՐ��OC�GŽA*��,n!��$����R��d��8h�+`��oc!*!�I�2� ݤC��g ȉ��B@�bu{P��y$C��m�[���f0�m�{�Hj�.�u�I1"��uֻ+)��v��U���LD,`�D]��K�F�$�L�vl�`�R��܆cZ ��>��iM%�#�}D@���ݝ�֭KF-��r�$Qj� V'X=�;`h�6�����˘�F�x_���v�M��� <��A#��w9l�J����,l���=�(자�C��ج4Nr^����P���)�����1���&%.<LXqؕy�"��n[+A�&V�����q�]��@���v��P�ozK�-��!�;��=�%f2S�����<�_���aӂ�r2�A����O��0aPT ��ǼUH��ids\j��U!�eG�YϽ��cQ�@��EN�"`�cZ��0{���i�VSM��O�.���ժ�q籟�']��!~�:F�Ak���$R=�W@��r+g�:��~�� ���z3�葿�P��ɭ7�C����a��0��?\�~,Į�����z�&,��b�99z�^mh�`gOk):�6�����t|C��ïT��h<w��G֞Ij3���Le|��,z�:K�V���i�6V���0�~�ӭ��#��HB�F�`��7Ɲ0^g<B���#���3��������1�όk��I<��� ���]>f��~�I��4���0�����!X��=�nE�;!ή���^�A��5Xjצq��� ��@l�54At�00�^�z`)o h�b+��$&@H��j֨B�m*�ԫ�a��!N���#T'��Q-�o��2�ط4�˥s�o���'����S��|Y�4�'��ݑ)����N�H�;���5���-�?L"�I2AIxȔ,G#kg�ldô�%����xd�h��5H���TY�Zb�*�N�v&q�h7��Ubɨ���Y�J�U�c��<P-u�jX@.�O��N,i����.j��/"!`1�y�?�dE�tôl���ͰO����n����Q����d:�/���f 2.�Җ�y�Ò��'Q!=��*^t0(8� B�t@8& �2V�Р��4%`P0p�!B�Z�ӌ�A��C� JP/%��X �A@�������~Zc�*]�oS��<[������+�h��ư���<�d�طL�7�0�iP�Ɓ7 -�0�K�Y�Q-�Mj#3j�c�W�;rUq&*Ü�}y@�,��� Wh���yY��^- \�廛���^���>���{V�5�,�2g�a�tc�Zݧ��T=)�LV}��2Q� ʎY��f�ɳb�1�ш��Rn�t@�)`V�B89.��!d���>h �"�u<�{�g��ȇ�o�lp&�����>���BFj/� �1��(a�cB�Ɏ�'����G¬��)��g�z���K��P��������~�z�~N=飌~�a�a2|C�y��}��)?�Jp�z^�ԩ�7�a�?N,�����bl�@�v����6Eκj ��@9� ����c�����4��X�v-���6�!��9�i&���as��ū#ˬ3����MÂUn�U���D ����(��5�Y>theme-joomla/assets/fonts/robotomono-8310d0b8.woff2000064400000013464151666572130016015 0ustar00wOF24( �4`?STATH� �4�^�J6$�J �X�#� EF���߉�H���opڒ]"�B ��B�ܫ]�]DYy�7��Sݻ����'w�n���.?l�ί�{({b����6;#1Q�$��@� [$�Q1 D���U9]�c�|�~������?����{ڰh�F��N��B�q�����\T�%06q�Y�fq'�ŵ*),$�e�O�0/�C;1S{k��"�� L��Ŝv�z� =7=����ÀB�4y0*y�f4��jΙ� )��R]�6�w�^ݻ����L���*�P=U!�k���M�o�`��M8�R�p�m���@�(��Z`�je���W���!�~n��.M:9��I��V"��xo�����䦩��퐻�G���7���P�E�EP��8����C�ơ���PX���^����C��RT ?P�@pϺ�x�$d��6¤oh�G�A�Y( ����'�8�HVw"�j��<�=�"_�7�%2Ym�&n�}��e��>��ڀV�nw�(/r���R�T^�&2��+a`��=v����##/OJ��9I�RXe�R��SPJ���NC+��^&#�rYL*�YX�T��P�S�\y�(��V�dT��%]�B���b�6�đ���J��97�eڱ�l�����e?���"!LE�#�D��H�tHDh��Е(�B�Β`Tx�C"�##�Jr�Ȕ���Ģ�)���T� �fm��8���Ť1F9%����:l�%Rِd����,9Y���c�q2��A�X�\���i���*�B{mSȴG���j\)����p��eZ�ֵ��e1��ȺR��> �����~P�h~Aſ)�����;��Y�SM�\AZ�^_"��Y:U�G�Lۦ�"vb2[{�+X #�D����K˴��J�q�i�A�{�8��K����d���B; _#@�WJ� zCh�=})���O���m��i��R��rv o��vpɏ��1s�ϥ���U"��p���r:0lB��Ni���5����KoL`���6p�U@��rB�h�5Α%��P�Bu�Xo wo5.��5��h� �f����c���&'�r�Sb�c���T��cɐg*�R�w� Np��t��5ip�&Bx�5<�����.�Ͱ�I�i�wE�W���x��0rA��<��$�>�A�o��|�F,��2�^��7��e��+�6N�Q��jd{�1���c�K�Q�nU�LQa�P_JA�����>A�_�݆1�.!�Ɔ�;��!�6p,WsR~�:,�4x���F�)�pF��KR�ɻ>��➄Y��Xӝ�W���!��>�� ��5C9�����XՀ���~.^9��!^�d}(G'��C癋WoT�����u���i�i��V��N&�[�o ��3�A[~Ә�Ψð)�J��ե����x��z�%�~V�w��~�:(�g��Zr�C��i���@�Ó�!��I��!F�P1 K!L�T�c�.J��P�J"��`�(pQ��UW,��w�uV;�^>;Pl�iw^��x�lz��Fbz&�{$V-)�������!��{��t�8�kG�¥� wh�����7\���>.ݸ���m+��� �V�j�Bg7�/�V�v��|��&�m�1/���<�S2�pad�`��T��-��M���T����F�e�b�Wfk��6���TRˍ�D;N���HI�,���P���;�1�X�9��h���ey�8 >d7F�;2d��!�� ����Ga�(P%\�E5�i�.K���V�?�z慰 #F"�-7�\Qz��p�����ʑ��nڛ&�� =��R� ����ȇ��!����}�>�g0o��8�P�E�BQ��8�$'-�!� �� >�� �~��!b��U����)�`̩�,eԻ\�Y�i'��В<��0�r����\(�y�PÃ� /��z�ļ�6���6�S�)�ܷ�s�']���Z*��kG?����я�`6]x�Fm�o!q���,4J���K����3���"+�]���2BE��I<�d��N�6�p��4,_�l��j��̕�Ғ� �2J�5z����e�e��"��v* ��ї�f"��.��l�����S�ח���$�XIc��0_<w��<��\!;i&��5SWʽ$;��?�d��E�4��E"ZK__'�GxHc'8w!0vf� �yY�wO�}��"�P���I�=�z�z�~�i2�2����{� 6�x�^����!"a����2�US���i�z���ʔ|�P+&�a�o���-�^�V�`/i\�1|�XZ�|���o4P���w#���Q�(�)�&t�J�s�N�<r��B�K?x�MՋO?ܼ�{ �����s�˙f�^�pC�o��N6{�Ne���3h]l�(������ ���?\ٛ�,�$�������f���<.�5��?�X��ÂU�WYv���L�al�r3rs�[�f��q`������R��[�~=X�#9�t/͆���| v�ykϧ�/燲��N��[=t�AP�h���O ��� �l�V���u�����B�qwrDq��f�7�4�y�t]��h5�k��z�= ;����t�o*]����Ê=��罅��B���?> ����y_�}}�3�g���h�����t��Dbu��.c��cF�n�?� ��T"-�Hf]N���#9HOX��n� ��B�h&aՂ����5�~���`FV�O��Um+����C�����j���퀺.L�ԆRU�]��+ ��RZ����}g~O�S��L=NO�U�7*��*Ħ�u^�:�I\�x�Q_I���g�< �3G���5&0Ǜ�^���C|�n��m�klJ8/��{���W���O�;�jg��i�5_��-x�$�Up3_�/ݥkt��N��ݸqQW&3q�>ì�v����%���s��5KTE�'�0>���|��f��ț�?�)e5����L� �^�g_�J�U�i�4��X��h��5�6%��g-���;�in�ػ��./8$��;���q�5�eS��ՙ1u�"^���2̌�Tӓ'��P��?:ɎH�'��o�Π;�z,�=�1�SGԬOx����a�&�od٬a��o�2��ބ7�ƽ�al̓'{0���$q9m��yeLE�`,Ɂ �n��� y��o���p�j�*�(?AK\���-1��4���aS'Rٗs������1���t��g�HՋ��,#R�ft����~�鷝����#��I��d5�5���=�*u�_�j}�4���B�.'S�:1e�)~��R ��|�{�W[V�QS��k�F���ѥ<z��=5*&y�O?Yn7])��ٍ7�QT$R}r�y���m��|e����#�=�f)����B~]�h\�R1��cM�Do�V ���>p�12|�Ih�k=�a+� Σ � �Gl[9�im��HPqx��D����:^������Qxr��/�����Z(��c��7ՠud�lse*��`j�c����z������߬�~���L���$ȫ�,��G쾄�Iڃ �rs�ꗹu k;K�쏇ͷ�"� UU�������{C�w��1A��E��*������,O�KX"��f,Ѹ�����7���O��K{��<w��t�T|r7�TJQ�XuI5=I��a����II��A��e����-{�T,���+��0�L�O�I�/uŃ��Ծ_����O�l���x�2�˴�@Ac1�'O~����ׄ���-W3m�V�-.����m ��˝"nٯ-�HX7��JPg���w�4&*��#V�D[���viXX� 5��Z˔e*�ݮ�vѴP(ݳ��Z�1s��C)�8��*5�*��E��0Q�%<|=�^�V⻝3,ɑ��[e�Q�Nd����m��,E�Ծ"�%c�,�*���x/�*�.��ܗ�&����D-~]�z�|�d+FCX'.p�h��L��?.�9��9|��0b���m:yM[eA�~���<����`i���˱*X!���/)�z��n�ҋ�E�"}���<f;Z�P\�{�r�.s��[�-i̢��K*!"�-�����-�5�9��3��ȓ�6����?I���|l-?q<i� .���Pj�yU���� �oh�����[�7�H�~�����z���]��q���<�9�Y�܁֯�_l*z�R�������_�<�����wc,f��#��."VKR���ì���x���X��t� �3�-�o赛�մ0�w33O��*�c����օV�y���7"Ą�]�. ���И1U��eB�+a ZS R@��RIb�)Q�2O���M�� �. ��Bv�!���m�.,��ssyˍ�f�y��L|��}B��|�y-�Wf�`=R��k�<sภ�q�xh��t�d�m�9&?^F"9��I9��"���v�{�`��˻���K�'8�gK1�4�$fg�)*.���ս���%�U���CoMD��vN�R)R̳����l����N�{S�4�X�������J*����k�BE��R��PE- U[K��* ;p8e�w�Ox��F^oH�^�CP���9��CE���XA~��Z�B�ܲ�R#����g�� [2�$�P�� *�H�3с�G ��ҷA$���?B���֤e%� E���^�(��FB����"6q�K<���(-����T3�Q����������B�����Q/����$� �� %�G}ItB�Yꟻ��[�W�^�����$&@���P��p�C�:���g���Ҫo��`9�u�G�/�ux2�|݇s��p � E��0����c�4��V���f���!�*���E[y��qu7mf�X�� �Rl���`,��dGQ]ֱ����n����5�R*z�FC�z�H�I�/S�i\�Ҳ���q�˟9���q��G�������]�Eg~ENx3c� ��Ŕ�^����J�?)���9Wm6휝��p��U)�a�z�"2`��F�!s� �l��"�`7f�ܠ�����J� �vބvz{�1�;ݼ��<���&�w,=p�0�lt��;aְ3ݤ���٬Z���Ph9��j��� �L���( �|�����k0�{��������_����F�H�rN��z(y��]�5�r�Z��Zڢ.}x��5�.l�<=<7��2�[+ol��Z�A��CG�:�W��7ooS�S�̍��R1n/ח�,&���.W,��P$r1��!nk�q�'deX��cH�V� ;�x�[�kO�DM��)�u�jo�Ո��7��[��au��ƺek�[c6$<mtq5c5��" *���~�E��(U�Ru���!aP\��� Ӳ7yQ������d�as�<�@(�)K"��J�Z��� F��b��N��� ��IH��)(�����H[���6��ٷ�����Jt���KO�岮ȿB�GM~�M'�Fc�m� Jnڟ�/�+�v+��E�����e߬���ڸ���tq�0H�uw�V��~����^�J��kI�l�ڏ�찱�I��G��@����+�KM��T�r����_�^{Gf=Ћ�n�9���iQ��̕"����%�¶Z�C��5�ו�r�Q!��qL������V��;�u1��v�2������\� ���E$6=/��Q��B�ZD'��yM�����theme-joomla/assets/fonts/opensans-77a18457.woff2000064400000025544151666572130015406 0ustar00wOF2+dQ�*�>�.�X`?STAT^�*�| � �(�'� 6$�: �x�\�I5����ڥ爢$��X5jP�&����ƘP�V�r �zum��j�<YC���ѭ٭�+u�q��x)�B�c�R�bo�Y�O�����;�Odb�lV/)м�ה�c�E�C!���[e�6_����,L�&�adw�P|�>Bc����~��K�oѡ[������0�L���U3�?]���Hf�`>K�.�p���|-9ttb[a�W=E�{,C����BtN� �Y1D7]8{{��1Qm0���``m����V��E�?�ih\�E�f� )a�ղl��2'!]����Qh��l��P�㚣�e�]Ns,�\�1X���`Y���B�&d�۷I( ��&�n��Rח�c�nY��,�쓧�6�Ԇ�G�E0�9�����9���j�1��0�0����L�%3=�[�\�R�Fh�=��uϣ�JC(��y�qH�-��jn%�AbɽIڭf��[3�L8I�*|�_;�4`�����c{�S�N����*�K��ϧj��`ĕ����Tt�uչ����}$��R���fR����H�U�u.CR��1u� ����4��WW9�.��ٰ�o�,�����S��IT�H�#K7����Q�13BD��x Ӏi���q�F9�,{���-X�?�S�#�}�`u^_�[) mc�I��R�v_PD�j�l(��1�'���x�B1�N���b�KI��" xIL�k,����n<1�1�2�������߸ER` i.���5�88z�Cw�k�h Z���> �B�P7tj�j�J�bCP �EC��ɮe+w����n�$��4�Fh� �d B���_�i�V��\V2�S9���3��'�)LN����BKhB�k��dov��hD%[kM.h��b��W�Mz�{n����F $L��WCc2_1��E�x�!/ey��f��1)+�3��H��$z%���+����ҭ�L�:x������Î9K!�T��� g��Z!g��S��X&�a��sd���ۢ��w���7�S v�¨Xc�e���D�ώK-Gm�ǭ+�m-X��Y>��Z�%�9�g��Pd�vY<�0&+bo�@�ctV\Ggz��=�1��(\�@@�g��՞팟g`M�9���ZX���d�|�uw�A��5��~�w��kc7g��X��n.�7�E�&w�ͣ��`��Ȏ_y���eBQoe�d9 ���O��zs��I���5p����B3-�1���.C�x^~��`dc(�e�PW�B�,���r9Qʤ�x���W�Z-?Ͷ& ����и$Q���N�����֍<=Yp�YD��>��q��7)����S(��7�P��X���W�%���N���#E�{, �H�y�^v�����; )�t+��THqk����(��\У��S�7��m���W� v�v�;�ݎ����͇��Tl_���!%: ;�L�0@�ڼ �_� �� �g���<_��t�65��'fM�r-bUk��[Uv+ԢS���Lt,�oB�om�fm�Z�Qo�oP��|E��V���f�2`D�JM�-[����G�b���A9J����_�z-s�gȖ�邻��M�����<vnNvVf�`zZj �����C�vU\xmͣ��"��],����۷ƣ��{���T�}��b{[�`>*KT�9�r)E�V�@a��x��!�()�t����흫�C3gLz1;��8�F �np1� |Nq/-�*qZj� ,�=[��-�g�w�o<D�� �Ӟ�*�q3�5Ҟ%����T�f{�[q����l]���aB�)�f�� G��� v�'�=2dc���D�PP����w�@ Z'�<��l6<������p�$f��:����}��*IJ?��Ǟ��|��1 -�0�N+[i� ����� ��x��Ԑ� 43d���(Zp��h�c����YI�B(� �x��v�K����_;ըG26k|�ϊ�X8���\Ə���)}y�g��X��_����7���4]�+B�m�V�]�P�h�mDhM s%�h���Hw�H�(�ZoT�>O�S]�K�Q��(;���y��C�U18]$�0ƞ[D��j|Q�q�%znAb;{L�zΓt���xb]m��m�*I���Sv��H4O����]x�ۋk u)vڒ�)�%����hI����t=\�N�1��p7���H�M��,e����(�˓NG+�n��gVmL#]-tj���6�$��=�"��"R���h�Z7q�vCl�Z��1�N����e�J�y_s����IJ��u+2��u/gzg\1�qdS4���nL�)���LI�踉�^;>B�7��p\|H��|�5/��[�w;͐t7�=h���#���Pl;K�� ���'}���Yl���Ǜtt���Bj��g\ҹ�K�˾�N�zEYݟ�)I�\JP6���(du$��;a(��dH�I�^�n�?�-R�N G[tI�[��^���rtM�YԽ���'퇯�� �nɚW*P磁Cۢ�R����ẍ́����K,�v�r�\/g�ݦ+l0�/z��z��� @��4҇� �T'L��5<����z��������Ub6��N�5�7��&R0�2@$/ �Z@�nʃ> *�C��#}fMZ��ʪ�DLt"�J�=�T0�Gt�S#"8���Qִ�i��{�D8��׃�[B$��� N݀.Xc JB�uK8��� �W�b�n�`���F��sk��Gp>)���Rn��\��2S��O�0W�k����7����e^t(l�ֆn��� F�����H�`����5��8����M��&��=S�� R"�V��e�y[�'�`.��Ĕ���P� ���W.���|b.��L��1��[L��jCh`v���!/X$�V��4�s�}��R0�Yy�2�G�u���V��kYZ��kZ�:��>E=��kzw��P�:^(g�J��Ձ�E�D[!��\Rl�](x@`��RD@�b�u2��6��Me6��L][��� R�EԈ�}��y 7�P��YMe w����K��34yG^py�3�s�}�ܐ�]���͆�5���.d���&rL,�S���a�dJQp�MR���Χ�G}��g��>S����'r�N<�/ԗ@�� �TO^ތ�/i^9~�5_X��h\�%��$�ekւ�Ϣ��\n;�~�~ʨgR<�}C�e)���D!��H( �T�w_�J�Wj���Rg!��_��u��tb��H�����e��b=��s��W�*%]J����q(b�D/Q� ?�x�㧲�B�p_�F9��v9�&�EU�P "D|1��l�B�k����仓b�W��t≮���v�.�� ���[����|}�ms[P�Q9�>�Fd��r��M;PB�b�E4�߈ۂ� ����H;�.�3�ş�4�ǒʦYƱ��>�����)G���Nb���:������>�����.�kx��Q�������/縆�,�W\���N^�7f���oڊEX�ʼ�֬�E\`8Ʀee�Ʋ!K�z_CKs�/ 9��)��bX�4��_�P]�|�%��P4G��j�}�P|�?,�V�ɖ����ݝX�İ�9pS$C7���^���'�߰���&4��S��J&��%�/�\剄�Ã������Н�1=8�*F��_ �^���|����o�y�H{�A����H}U�� �]��]� �˘'���z@�Fq���q�*]�F��}� �ϝն�����U��C��>xď���e���`�[��zw�� =P�/rP�p.3@��nZr�c�Λ���-z,b�<*�g��·�E~ܹ\����� :@���M�k+!���@@|�|�J.��+�xB'>{*��-t��r"���Z�����ǚ�����w���U�2}���[�MZT�BH�BSԿ��pb/�_����?>��l�BvkW�.ФZf�@�8�)$X�����M�� ���=0�k(�}; ��I�|�$B�>�핒�,�I�2���9�Zj�di�iכ���wR��9����ifs~�e/��?4���:G�p�� ~Ǽ.�Z�g^K)F�ъ�rWA�%@*���5��3�1���!�mm[DBP;�jx�zr�-O27���Fa�\s��8�5-�E2s1fq����#+���PjD���zӂS�GXtF�q� pH*��>�7Wt�������2�U�Ô�<-��_rݳ�C�"kB��IRh�3g��(�$?HB._�U'{5���]��v�V�(�\ q�R�y��oTZ@2�,��0���Z���Y띓<1Rʶ���V�$K9la��Q�+YWb�i�ݐ�#73�-eiD��aeO=!�W�~ƕDS��z �����%��U*����K�:u9h[���er�}�eᓥi�@�ɧ��N�R�kb�;�hy����3*s�S%��\�}" �Z1�U=6��x}����Ud��"Q�0��� n�,E��і��P�61���u���EkMy�����j�?�f�^5�֍,4XnT'���髜���8��tQ��͏ko�FS� ��Z��4q�q���T�z����C�Cɷ� �`�>tN ]4yDN�k�۪8�7@"S��U�X�u�I��.ۭ��٬��ٿ���Ŏ�|/8�s_��I�֜g��+N0d�� �<�ֻ�G�Y�N�{<�S��W�q}��=ulk�U�F�ߍ��;#^��|!�c��ן�qk�>�h��$=����7�7��7�?-���T��H�����Ç�|�W��8>b�7�����MѓPU@+.��������_�T�[��0>��s���{v���N]_����M��������Ո�TB��_�sn���J�9K��S{���jOVo��\�Ϟ|rثnS&�Y���MӴ��ݮ �N�M�FB�k�X�ƿ�W����a�u%���w�R�]�"�]S��F�A<���9�5�|�|y����_K�� ��.�P�\���?�5Ftk�^������FN�>`izd�K�C�.�=_'$��ޯ*�[dDR|Jܶ�����jl�F�vМ�q��/vN\���\{��S=R��+���j��W��&��q�|��./�q��r��}+4J�c��dJ�j&�AC�7h����6Mo�ZO�N��#��y����A�*8%E��dZ�@��tO���0�Y��ܬGW��̼PV��ɒW�u켜"~�EXV8�a�����J�pO9�%L:r�%GY�e�5%L��s�LF-�~���~��2p䑬����0�ߙ�r�� �wh-�x�Ȧ�)tH| �,$ZT0�}-�������tZI��{��T��ڀ]�p��)P_o�!��V��fH�K��kEk7�z&V���j9� m���ݙN6&��ٻhZ4�ww��1;C�Q���gH3�3S���<�NS ��l҉'?͘�_{��P�N�~�+"�ض/���?{O��|$�d���B2���"�ӚZA?q�Z�D�45�^;w/?���ĭߜb$e�)�`�'sNN눸ZK�]�u�F�~����ֲ���e�x�"�nkN�P��dS���Ȍ?j���~����;�}!��&�Ss��b͡���У�GG�OaU���G$Z/������������ �\�hA� ��ڐ�QAdzX��+�jhf��U��N҈�mA.�`�q�/->�d�2�tg���SǸ��/��Lv$MZ�x��b]���,���_=�K� ���oלr�C!��q/stE2v����Kǎ��o�C�c�m��j�U�}p��!Yo�j�4�:��6ABť�t�I�������D)���JJ�{�m˝rh�V}u���T?�qi�jU�!!?a0���z��.��x�8i��nV��?Q��V�&��u6�]=y\��G&�YY���a�Mxʝ~��Y����5�U�_I o�֓��BOf�����/��Jwy5Ս9`\y�9 ���خ��9]�$��}4�U�Dǧ&�D�1�2M�:yZ�Þ�i�ť�%���=K����>�~f�ti�������8� �p�6�����K���w�~�~=�n�\SE��Wj�r�m�3�L~fqű��f��:� ��֫��.Ut�d��$���"AzzF��6�"i�DQ?qI��KS���mϞ������eܭxg��D�/j��n�z�ʝrh��v��~�Gb G�n�@۪]Ԕ�1�o�SpS��/iXT� G�Jv���1(S�x#/�&Y��ꔢ�qv+U<�ŏ ,�lK ����q����nY�Nѽl¾xof®߀�Ψ�\0H�=݇OO1�S�M���Ӹ7FV�:��I�f�"^�7��W1�S�K?���s�M�WS�����;���^�Xh䥿?����+z=|b�M���^%�Ӱ+�cb.�x.n�U�<V�S��4�El����7�S��&�\�g�@1}�^�m�Zͧ��*{�����m�g�j�P�U�e ��dA� .�t��ӱ�1���p�>���༨It�E�6���WUN�y�sօ���ۻ/օm:u*T�<�����VK �_m�s�ZN!w��d/�pM���#��;=��x��c|*�����Z�F�6qR��2�e�l+K����U�}7ʻ�<�z:#�~�DƗ���I��!�?�X!�n��ÅK��uΑt: ?�М�o`M������Iקe���z�܂��5�J/ ����%��9d��k�s����2U�B��P�Xh�����m>Ay�;,Ɉ�����0^�W 4�W1�I3� Z �ϼ'�a���cZ1���zJ�MX.������gc�A�֞�:�R&����h�&4�'i����'���ԕ��n!�y2 7�݅ޚBMU�5x�"���hR;���U$�i�~ނ"=��ߒ��s`p��]䡽I/�q�J��re �6n��Wz�X���yg�b���*�I��!@Zj�b��X&[I!>G=LJ��0ΎÂ��I,��KHv#���I+��N�O�E���/�z��u��XY�E `�T9��ڟ�ꢻ��u��gKI^%��ѝ��Dzg���t����,�B{!��A��QIaq�}�>;��a����c�Y}'Fx<<���/|&��Ж���H+��xb��"�%��Y��2ͿaΣ��0��$�}g�9��G�(u����%�ʣ��cԧ�G=�xsV�oTd�k֬�7̇���+O�S�f@ÔG�;X��EV��-��6�m �*�poU��%�{�Ų��Ѓ~��JB�aIs�6��W���g�}��Q!� Ɔ�n�����L�[��ӔnL�~6��s�8�/q}�|�\qD\l1�nRQf9][�x�V{��缝L*���=���;�W��f��hx4��[Ck�����nG�pײ�"6�C��W�ߚ�*��f�E\�I��źN��^~�^�5N����-���ί��{���uH��XZ\��'��ɓ�J�+3�p�7x%Ԩ�q[��8�n x U5i�WF��5�x�J�A{^���<��\J��,���ҼӤ��o��g7��"�\T���縝_i���|�� ��ܾ$ɩ���ruj;��|8�թ`��d��ƠCY�ce��V�ok�e2q�)�����be"�$���N�W%4�*��f�����~%n�-I��1�g�KSRo�xyb�W:3�3�蝜�$�k�Ւ���,i���;d�X"F;��q���B��P(�%��#����ʿWx� ���=D��i��vƱ��qx��b7<�&N͟Ԉ��6Y�9��,R͛��7_�el���s/o-�:m��r�iƅV���[�-�Gq���3����5�k0�l�xP�]MM��_�=(���yh��cp�+ʉ[���� q0��D����N�� �-pg��6��=�.gv�~`Έ��Z.w1� &�`�ΐiƘes�X��&�'b�9i�-V�� l�f�x�?��[s���3òZ�mg'�0Pf�@)7�+m|-�Qw![�.X��[��xo��>�O�w�����{�"?�=[�����g�1ƤQj�%�(��� R%�n��7}�@KI�N���@K��>��� �FI)��5<� %Y��T�Ύ��$�E���M$8��V��4�����R�6�b�h��o!a�AKR!WR�j���\����x��X��\����Mi}5�v�i�f�[����_��W��:�}�T}����z��&�h��??Zֻp|��Z�t8�� 0P�Br���|9B<��'�*���.k�cjj��(E����#7�4Np��To[?��1�2d7e��n��t����n��;5���gR�XL�����9���Hj�8�4g^��%�w����is_�]�ߔi ��J�Ӛ���ךY�4H�2�xn��h���%�:p���xo$�q�;�V_�cFA��D���/sސgu��Z��ik��q�.�=��Z���;Eƥ�eo��+���Q�-1�76ϣJG�ø!ݖ-g�12^��j�)�s��`����K2$ $#�.��$�u����������Gn�����*�r� ����)`�ZS>̿�T�������J]��@�8�w����ڞ��Pv=s�G>�.OC�^�Q�Ӊx�QP.�lr��}r���u�ZJ��l�t��(^���� ���iwOR�:uwǶ��2f ��+���i�k!�ó!x�`rYSBjHK���:�]jɡV�i�R�é���]:z�1T�z�j2�R�Y�z���,f��(��Z%=G�@�1�P��hn�]HvI]�g� �n���J$(�o�H�̴�/=�F���U�:�͓�F�����ύ�p�}�n�� ]���A�\~��W�����%t)�YN��.�u%�J�/z�G�����W�sq9�3%�jŮz�@1�l��m�5��\o./�����n���BCN>Ŏ�9�_Q�,�B4s�6 9@�--��~fc��eY9U_���R���FŸ��<�N� ��(.��T6) �sL�� i�70��9�,�e��bw6��u���:�$��L=;4ת�/��CΈ�0:����{Ӕ��P�!�f��w�'��|��j�)���C���lj�|Ė �7��ny1x�y5���5�K��l{����{��\�����3ī~��������)4����1��M�%�T�)�c�8�jl�Yþ��e��%E��Xa��O��,�Jq=��ԠUwT�O�?�Zis���.K1)�wH�˷(�3YRꪓ�������l�j�ʼn��)}f:���?�[<YT���w7p�I�ԱҮ�/F�.��Ҷ������7o��i�����p~����}�����!��7ʩp��zr�_���̘��ԭom���bP�F��n�E9"Y��4ri`Q�+�\���y������D��&����8���D�vA�iɮ씵_.�����s�9�����ϫ+��L�~yԬO������������BHd?��qf Ys�CԂ�P4Pj@�6��5* 6��ͩ�m��i��jG ����MjAZ5�LlV3m+�� E�X#0Z���E���!+,"�a�k�%��=)�22\}�]-G*F����\ZSS�'<�/d=;y=��|����9�ry<��Ź�q��x �����̬��=���:�m� ���X��X������cSn��t'H���v-�\,1n�Έ���WQ��B ��-���<�vs��(hT��@3��ά���9��,)��9Jn����̓�L�.�Gh:x�(Pz[�K�>;����|ZN�]3}�*Ϝ��:�PҞ�n:F�Gj�3��yr@S�����ufIF�w�D\�V������O����Y��eڳe���}�pj�G@;���C�jç�5nʔ)Ϊ��˸�Q�k�z�!���J��8\k�L�M6�wwe?�:E��?@���&-:�0��lb'3{�j��[X�8:EH��$M7�-V���t�1X�@$�)T�L����B�X"��J�Z��� F��b��N&�������o`hdlbjfnaiemckg���������������H,���+ �7AN���!�S�&Љ��H?<�!� ���ft�Y4=yd��"UM7L���pH�T5�0-�=8�(���������J )R�tô��ދ$��ד�O�[���?����7�Y��qEb}���Obx���F�NMM��'�ˆ��tcb8Oʇ���|�jc���,�4s7KmH��<�<�,�!+E�`�gƒ#R�(��h�s����"㑯�7�p���aW�f�!�/.y� ߉+�\�z��N���7��I�\��(�"O,�b���z��$��~�[^�=�xVppc�d�ѱ�k�;��m-�7�g�C7�� �H��P��n�ھ����4mXc\&�B�txU���wB�P��U��Ȁ-�$� �& ��U�.ޞn���̅�@O��<n�Xc�6^�`y]�:���N�,+�3���f��Dz2�<���O�-�N��m.m�m��?L�m�5��>���Ҕ�2=%�,lNm���Tw�Y:�e��E8N��sH�U+����<���4"���w�R��C�÷��5W������t ����,���ߧp��{{<��a ��t1�C��Ax���n��1�theme-joomla/assets/fonts/opensans-b082909a.woff2000064400000025104151666572130015445 0ustar00wOF2*DNd)��j`?STATZ��| � �l�@�r6$�N ��J��E%�&l�(��_�(���Y��������U��B�Q��G��Ѵ��L�j��vE���NOn��8�NM���<�������<oQ�����U����|�=�"��w��/QF�'�Y��|��$�m��t%`�xi��K�K!����BN�h� �L%B��!y���Y̙X1�@]8��H�l)� Fc$F�;1f��ڭ��E����~����%&x[�M��l����MӁL�{�3a�t'Y~ 3�D�\�doH��P4掻�����/s��2d�LA7�TҜ�P�] ��<��?�K[o3&��h�dhU��uL8����n�7H���B�˒�Cmx�?������]�� (���*� =����sd{�jU}> R�[=B��p�Y�=�p�Օ�r��EeW��}x��J�PHH]�F�v|��R�\��Hio��$�S,�2�j��UN��E�)ϵ+���AM��nk.+D���ߟ�܀�6�H1�3�����Ʀ��?�-����V{�8����(�#S�#���JS3�� W��l˞9�[mro��E+s+��*7/�d߾�0:ŕ&���[_ܾv"�o&)m �ٖ^� ��K � ��Yr<.��@=fT�W�Dž� �!Я������mVLo��׳;�� 2��Id`���?udW��}R���0��C b�� u��{��1�-8^����ez��x#Y��M��������`��r����[�m?{���[�S�?��= �p`l���;�|�x{�^��x�y�D+�%e댁�o��>,їȡ)�Mu�zD��j5�7_[`̞_y�����p�uz9�7p���H���=��i�a��Ύ����f���>9�!`�^}����?$�m�I�ό���Ji��5�.�zC�Z=�5�gL}�SnhD��N����<[0c�)��&��Ѵ��x��<��PS�HCa�yF�ZTF�+�+Q�1�?�P�:������H��-W��mk�c�9H��y�! �dHlwWgGUeEyY������ ?/7';K*��_JOKMI �|���f1t�B& x�B&�#�bc��"���)�@Y����OlUϟ��̞B�p�t;���M�~d���-,��7Ǖ�s]���#�x�j��&�P�3E��pl�k��A��Ʌ#�t���VDS&@�� ��F�I8Y�ǿ���yFűeY��% A�<<��4+U$�B%ޞ>猘������@4�SfNF���+@�D�cѺgؘgO�ub+M$�sm����Ķ�N�S��z�-�7�C(Ի�� ���v�2��)1L�T�h/ۧ)9�M�m��c3�����lg"�?|��"'-��:r�"[2c��p�Bђ*LpP6�w����=CJ��p�~����E�` 9���C1�� &{ ��gPNg��I��J�ѧ\��l�JX��z�>A�]'���bD3G�7<�(ZG�L܆������>8���ڰO���3���H�Is���55%�Lpz��QV���Ճ%w��0��7 ~��}"��k���6�*� 6V � �./��HDPx���y���rJ0��q���k���FS^��ek6>B����&1��ַʃm�t�G��h��37>��ai�@�#&.c2�5lu��G ���[�.��Bլ=VE̬�ȑV�0M�~^æqO��`�_z&�M�iB�hh鍎.7Z{�Q�]�YQw�c��"�=��Ϳ�YA%���ɡf�e��6��$�!/ܥ��m\���r�;��S����BO�q�����hx��@Ab|-`��2L_Ebz�Ų��w�"� � �����X��\���2)w��,��`�d�F�E"w�<W;lO'�X]�� �MA`�ښ�y�61���Ǻ�ƍhE��a������m���)x��7����Q^�hA��yn ��ق��jF���D�����n55[� v��d���S��dp�zO��ꬎ�`�*�r��̖*꒛u4@ ��7A2]���<��K�������;��I�>A�s��ED6];����<�������QH6Q��� ��)�S5��=�L�eR_u`��QʩJ�<8���Q����|�M� ���^Od_҃�K6�*arm%KX�����V�� FǕf�\g���@��{��(G)̗�Y�X.ε=�៝An?�?6H�ɱ9��(�c�wD�cZN�4�t�=^f8� �NS��-�;�BeM�pl���r=T����r�Jetm�܉��S�Ɩ(Q� ���a�KW�p�|�C���Wu�]�4 G�GF��*�{����9(Dq�ӱ���Ua�� &`�'(�\rb����=sb�vN<��J�a��s�y�VJ��g�=��<}N�.�c9�����A8�J�˺�i�*��wX�=w��dq���2bJ@3XJ�M�� y��+ �� �X�v�k�BrD�A/pi�B'���r�|t�� T߰�k&rr��OwL�32��������IaT�>x�:m�e)w�9���pP��;v]�x1��݅�F�Οp\���j���� � �<�u�9:ðyc��g��;�R�?b�X*Ʈ�m(��{�U�y�^�/�tT�&��e΄S�R�[�H�Q�(?aܖG�7����Ņ���1B`Z���=p&��YvU��ުj�JU{��ܵ>N�ڴv�Ƿ�C��{w���ΐ�}f���S�N9���aۏRD�eX�O�U����J���&���y�k�^*��*���x!�_V�eۗ������lY����=<t���7����c�F�I!~m��:�cl���zت�%�B�&պ1(a# �1��K��`������)��Ġ��y4���(�<�k�o��>�9.>��~U���h�v{ӃڶT���j���3�F'�ڥ��dm.�M��Vf4��2�X��k��tݨ%���#z���ΪQ�u�j@6CC���RuR�ǩ��)U+�3-�z%�V9Ԭ���È5s{? M&C����.�X��Y�p�[�r�Cf9X��{P$�3�P��Xb�A4d��a�����X|�yL[�p�݇�e�Ye6i�L�W��j,b��/9ιp���C�(N�Di�̇-�f'�Ķ���fj�=ocg�-{������\d={�J�8Y�0�$��,b{?w��u��u��肴Er������`&L㎿5�`/�Qp��^L8�j���v��J�m��dV�w�ԕ�R�1)��9*:�y!�����Jk�@�A������@��/-��z�k�i����P|��Y��lHK�� D�|X����@��hUw܉��<��Y3��\EdnJ���GQc�Oܝq���0�R��9�.�Q�G7���G�]�������l�3J��d�S�?K;8�A��꾉�;LRr0���S�t�EP����t� :_���֭��+7n�泫�>��� �7ag�vp�X��&$��7#`�Ï0xOAݲ���*NҔ�a�*�h4����z'�l�.bh�~������po�TI���%B���h���y��|�t/|�c��,���`��/��@�V˷@���d�xx� ��K1���c�d���+�|C�F����O�XQ�FǪ`ܥ��IP��Ff�nȶ4jw�d��Pe�9�旝�����q����\�����=��m�r�cݟA���,��qR�:��7�$��I>�=>�i?���L|�p@� �*�ck�}�H��D�\Q��h�KK�Џ k�%��rj}`̉�ԀDMe�i�kw���en�8�j�w������11Y3ǀ�cjtEK�40��mg4{GG]�.5��(�n� 5�\�|M��}`�� �9�*���J�:J��D�|ПD��{$a���?�ImEq|$�H>H�h{��zS�$xG�|�ƣX�'� N7�����bg;��~��pD�,~���w�n�J~Ծ�&O�e%��Zf^����ں�dMa!Y���hp�%U��}Ǯ=()_��hH�����G�듥�5e*Pj����Z�Xr&ΰAK�Sb|L�ef�v����,"j��s)�����;�.��z>W��6��Թ����0�HL��Fҵ~:�i��r���,��>�v�~p�f�Z�����'�8q��0������c��P�7�����DŽ�AM���_�,}�^y����W� �.���gL5�HXSj�k�z��L�����7-B��}w{v���Ëg�N�ͅ���X�7G!��~y��p8<�A���"�gLҎG���x#�V�._$���O��g.�a�ޑ��a�vQ� oV��9��� jT�&�8�ZK'�A�F����3wߦ,e�v�:q0�O<R�U�\J��X9D�D&Ʌ�s5M����G������k���#�H_������?LX@&�Ja*��n(��5k{{q�S�d��E��xX�u6đ�|�)*�&$M�*n`ڌ����aΪߪ6�/I��p�w6ގ)��hRh���ܻ�<?��S�I���!���E�鍜��v�b��oF�G;c�;3Y3tjmX�}7���j�u|B g|�x�b�]��t��Q�\:$�y4��.(�]z@��ߥ_���PzSy�X�Z&���,꼂�5dUmOL�l� �[I�?�zY�*�֩���,:� C�cC��Q™�s�J�8L��P����3SKĠ��;�W{s겈�d:l���j��?���y+���7��w�&&�f�3��� �n�����T��T���^aث]��o�K��1K-&F!�l-�^)�u���ą��h�Si�&Rd��t� ���y6�h����3��l��cc)��k��4���y��7 ]��N[�A�Q�����C��c_���o��Mw�X'�vc�:�����w��A��>�21��j째�p��rSk��K3�Y�n�)�,��7�[i�&n?=7Lr�֥�]��(������<ve�B�]y�,�:\�~�lo�|3m�:�Le��'�}�}ՂjB���h���i��{�k�0n��ϡ���n�X=�J՚(��l+DO���Յ�K�"s��u�N�m{���2J��������lƍ���(��QF ��p�߄^j�F�r��$h�gT��&�+�zmpL�_N� F���::�k�� ���Wh��O��\nCŁ�},u�yrs���L�k�`�ƕ��s `{�BM�磔��o�3��P)��7�I����Ֆ���[v>�f�X��^��6�7R,���η���y4����.$�O�+7f��U� ��[V���HnK,~ğ�s67c Ϋ�SpӘ�UK���UB��{�+n9��ID�E{�`(��Kg�C�2�+,~�%" �S��-��<͖}�[���/������-p�+�������!����M�y��k��0�U�5hC��=��hX~R`P.♎+Dz���ct�uBP,�0p�~��/��1�M�8�p�V�`�|��v�"!ki^1/>�}w[Z+�����-;�W��V�2O�9������"�}W���f������O�Ag9�&�$a[��5�9������ɲz�� ���;|t� �>ut���DP����uX�4��U��9q�˚�>c8-��NCOݢBT�_�Dl8-�Q7���ɺb��'��9 F�����܊쿓��� �9)��̯rS�����p>��`=E���|��T�W��Z_F›�J��&9��5�,�S�G"� ����/k�;��w�����u�YK��7G����l(:�~�&i���KN���<��"���Ƴ�V��f�'� ��V�M����yB��b�s��:g������� i5R�W~q0�V�n�<��F�#e9��z1��ֹ�>r{[��jp��]^�����F��长p�;��rL�؊� V����Sg.i�V5V�j[k*d--u���:�9��tj��n�M,���k�s�GZ;�sFi�M9����^[p0/ؽ�)�������)lur6L��x�������^M �OR�98�}Gz�z1�J��A�����=x��;�<��d�X�?�|-4���g���5��ޅ��ܧ���� ������ct�Acdr�7E:�d�?��^O�:{�֮�ޕ���u���nAw���~a#�E�G���9˨����E�?�Uv<l��7ш~2�]R6��<���{2�W�}�7ؙ�{���`=��[e �M~Ln�)�J���8�O@���v8��?"J��� &<dI���W�:���}qN���g���kK�)�G���<�� ��Gv����j�r�dM�����?9:�0�q���z�:$>����� �(\����6�z#�Z����:��cM��9�h\U Ӛc�JLc�=h^N�r���1l��h�S#�*<����(����(���`Znx�<uo$`���Xbq�M)!�L�ap0F�*� ���X8E�/���팶t7�Pq�r�Ű�ap��K�Ph�����p�)��Ff�?����PM��O��p��; -�^|���E�����{?���� 7p�)��5__lq�|�n���4[��|6� ���0M>�\�������dMR]M�V���K3C1����N��/�<�m�gN=�:E�G@W&�� a��_C 8��ޱT!X�"���H(���"�$�܄�����F�J�R.���a��Bޤ|8�Լb!� ��� 9�lY�,%���d�c�$.�E]�-��O%�9qВ|��������ߜ8$�A��¡H?T���[��R;T�a� ��$Z�q{/�[o���t"������7P^�X��ʌ�i/�C ��J�Ctb�%;C�(�$���L[�%�����O��#�(zBh8 u^[U�a㊶�j�K� G���$�ȳ8��H¿��?���I����-:P�YH��s�Yg�V�8ޠ]NG� ֨�)�����eO�O2?\zr�{cӺ�Vl����H h�@GV�R�ws�!wz�$*+����i����သ@��_j<�k�,!$ؤ�/�4�WI����o#S�q��[��Ҧ�-��6��:�w����o�k�/I�2f�/#�����J��c~A�f��@�w�3��q�FF�������ٵKm����F�+�ct>ٰ��(Ùp��!�&��FYw����RK��D�>d=t����Y�3�M�ы5��Wab������Wm��:��z��9�cA&qW�^K\qE��?��Xf=��O]CUEk:�US§@R�W�pr~s}%��,�@�c& �`7��p�~_�k0�'�=�Fg&��B3��'�:4r�� v�W�*������#�ΥW��f�$��bqKce��pqE,�S�l~Pޱ�d��Eh������%V�d�!��3�����5?w{��t��f9���L4�(��/����P���CN�+J%��柍f���p�����7�%�f��0���6*MA3�E�;oE�y7��1�A8�a`� y(�H��<�v$-��?��/�θIߠΫ�)��7�oi��J���{�x̟;gl�5;��3v�-%�N�#ٛg�&ɊoX��v���6��u��;oŔdO�t��}���iŖ�Ǯ7˻�Ξ�{���ؚIL]�V�(�I��С��H���q����6��KK��J�t �� _zi��l`r�7㹝idT��K��8�|�����C���GQ�?�>6_1��Ѿ���DM���,~�o�7���ܚ�%�d:"�;����G�{�1{�����[�?��Y�{�l��n�O\�V�*�ҩ�/ٯH��\�d�и>캞j� ���G)O���sF�aD �(m�f�3��#�H0��@�.o[jYH���Dc���M˥)����n�[�%I /)�'����ƂTȲ��2�k( �ʲT,��i>߷��S.G�➵ݢ_,)�!blX,k<SW���cp,(�Y�ʶp ���eY�)�RQ>�7�cv����oy�(Yv����.���4�P)k��TF���I�'�$�.F�@|+�g��k�Ʋ�Pg�z��)���:��3c�ɍ�� ��bB��-q}Y�L&Y1�{p��6���N��t:E�,J�9!4��)����IS�e9P�>�H��ʷFi��W/���A_ ���6���S��D��AO]B؈��($�"=IZ�9N��I�z�!R��*���q}� X���`Ƽ���_0�'\͙9�5�1 q�Esw:�i�5�̷\���c܊���� �@nm槂�8�>�,dT�ȃ�*5}f�X�8#� �*4q�T� a�:�Y 4���9O/9IDZ���e�z=�L@��sԷͅ�sC��΅I\��D�������Z��y�T�*�%ch.ዟ�t^�a��h�RTE^��&�����4�cbAH�UH������T:�s�D䬕��w'�ʭ-;�2�֣�Ȓ��`Etü_�f�Q2�Jac�5�O6*�ɴUA���5o��>�{=�sf�/��=��tKNH%z2�xf`�3��]���L��to��zVv8��2����Hh�Sj�G��ȳLK�NBÄ����:o�� ^wei��լ&㍐�-I���)xB,�U;���,[� ��{j#|�k���BRi�F��!Ei�U���a�߿��kK�O�ߗ[_��y]���1,�X�,�Xz��XQŝ.�}��a�S"�k�-��Q2(�8J�5�@�zdT�*�1LSe�w��*#8r"0A��b]�poI����-�XQ)�{0�%Y=�6@�%�wkC9-�g���5,M�:8������DM�� �X�t��5N"]��2G?�bo��t�S��8el� �#B"�T<���(�n�<(�hx��/�>��q+����N�'�ŵ��\�E�5��_��y�%םmvV̋���`0�e�"%bC��4�%���_ު�a�L-P"�[J�5�@Q�(8��ꁰVk$�-#i��0�E��ǘ�ܒ�!��N�X2�ɢs�N��c��]3�)�v�L!��z��w�vʥt�7q�} y�����z9$U�x�϶�h��S'oڐ~J�C?�n��60� '�x<��s�X� Z=��xN�ץ� ǂۥ �=�A�Mw�T�_��c�Oj،_?�`��]�7� T��>��I��?z���������|-Sˍ�\ J���$~�>�i>��p��gH�_�b��n���x �V���p���?���'ѣ��.���}��X!��=�Y�C�����x+~��շÓїv��v�������k�.���Y("�M� 4���y����ڑ~VWeb�*��]i53��c*{%�3��DJ��͙�4G)}fX@��������?ϣˈ<&[&K��<��r7}^�|�<{�n�m[¯��C���ʈ�d�b����%&m��K�TyFU.��S���<K��r�`�M� TQ�z� v-;(k�P�Lۉ��ک�ۙ�N=�۹�X�Ъn]�k���*���4���d��3�������ˤKŖ&�$U��H(#�I�@\�������4��և�)����y�#��$���eRJ�$�݁ �I��ED�^�K���;��U�EAE�1�a�T�|����mܢ0�\�q0n��oq~���G"��0b8��[�{�̔W�FR��8 J���<� ��GY_���:S���/���o �0`�@Ɛc&L�1g��GN ���pu�9�]��"w<y��×��)J��� �K�������G@DBFA��С���2-;;�q=É�e�!E3,��$+���&��j�;�.���T��P&vFJ�>u��ӧ�0�~:=�o���[�����U�/|����n����m\4.W�S�RՔ��X���4|L�3&�Y�1��v�K�$�� 0S��(d�H��2�K\)���&��Ю̓���Ox��@) ��4H��+%LP�Bq�p�8 $0C`�`�f���lU��{�~��+H��H�Y2��d,�/Y��I���F��N�J3y2EC����5t�x��ܾ/��$�Z��jV����MF��7^��j��E6)%A.H�� !������&&f�C �@�d&x�:��Y�6�cFk�ЌT:B�e��V�dV(w��C���q"h� �C���o=~���x��C{L���Ӄ��n����6oq4�ޚ����F=��+lGb3�a���*�v4��Zq�\a�ztk�Jy����X���ov�Γ�x�.�Eй9�p����̢�����e'��N�����5h(,����G�{P���N�YG�jA}+�C�$�����_�Z�Qvj�ܞ�B��n���m�I��G��� ��_~��&|"$���&�-��'�M!��&䨾�b9:���4��x�Ij3��Ztheme-joomla/assets/fonts/opensans-99694442.woff2000064400000024604151666572130015331 0ustar00wOF2)�N<)�j`?STAT^��| � �X�C�r6$�N �x�J�yE5�͜��Л�o�(J�(���ߒ" �լ=Y�Le���趻���3;��:T�d?P7�-�v��D�`i�[.E�$Լ�Z\X~?���wpi�d ����r:��/���B���W�砯EF��ǖ�t��f���A:Bc��^������A�C�n�7�3L4�-*:�G�5m���� �p� u���Nf)� �ٲ���IY+sf�;n��o��Tce����إ���F�u�"�,|�D~�rj�6�HV\~!� Hr �L�J���_�Gpp.����, |_Ay�_���~��������"n��>ضO��� }���U��\h�c������f(F��~��R���wg���*���hx�R�A�w��C,gɗ�74!��5A�Jf&�A�����W��dM����ƃ�.aG=P�����$�/r�G���CN�}�x!� T[�=T-`7��TK垭:�ۭ��nm����okpv�~˥�q�[��Q~.�1�5���,����9���Q�=m�T�+;�!ʸaT�v�y�6=c���62S�z�>��ԫ�������M���W��u^:z����_mf'����G ��[Hs����J��f��s`\_�P�(ڱ�&E+�f�1ep�U��������B�6�n�Eљ�(���1�#�xP:@s���f�����I���P8M��K ���b4EJ���]�1�&v���m���h�E�<�j�H��0�������9��+?��O�iNF�/l�g�9 ��Nv��6��T0��ѳ��m��%D���d�>I���$�0r��*lt5�@��5ka�X�#���������!$���:^�1|�؍�(��_��*l�� j� ��% IP��o���]�O 4[�Lj���4%�Y�5����U뒪^�|#�7�.C��#��!��/�}&-���ѨS??��+3����OP���~e� �2�L���-�H�����"�j�r?띝�U�5�<�◭E���Z�tU��'�%r, ������\*)��J�� ��v ss���L^FzZj ��f1����tZlL4�E&�8ld�B��ZB����"Ga�����a����~�)�M��'����T��\���m�xXZ���d�"�@�n<����^�s���;Z��AiO�����V���ѓ �iq0��o3�.�_�a��~ώe�^�5�L���Wܫ�>(�z�Y�X��5bM%0q� �âY �K�ZE�%���{�Ӏ{�J Sa���7�B��U����5�����J�œZ%�0�S]~%�4�B����k������)z�����d=�y�́�T���D�Q0L��D�S�{|�s:���ֆ-�B��F|sQO��?�Zhb�B�պ�F0�o1�`��t�'�?�U[� �O�C)ϝ������ц����)N��l}�A�����9��1Y��t�#R��{*Z:�_W��זCuK�v�=�tRE~�}{.z :���{���܋�)� �xyI����,�=m����1����m��<�H2n�ɺ�(i�=�y�I����A�r�^~�xA��<���`����Z΅��f���}��O�w%�AҢ�fw\Z��%g�i��'�N��I�cv2$�/����'�5�DUE��W��A����D��2YZ�ۖ6��4�̆��I[}b����ژE�Eљ��ۦ�mx-9�@\ұ���]q`ꥺK��h��3�L��q��,�qv�@ab;m����7-Fp{!r�z7��'�G:��|?�)�ϐ��Y��[���I���&YX�]��Ɯeqe��=S�Y���e�g�@g��E�6)����H8�J(IZ˖� 5,T]���J�`Y� ���&��Z$��m��k�A���ug=�5L��jA�>���eB��5�t�5�bvw-5I�]�C���n��]�w����QI=r�Jvf�ä�}�Q�"���p��]���M�g<��v� PdH��Lx簄�� C�c�V��]�!�a�d>r�~�@���� 1���\Yc=r�r��,`Z��b%:R5���@m����\`a!�i"��5n�/{�M`3�%���˕��Q����Ԣ��K�G���(�1�Νh�6����T�a�ݨaz�~i]�����ՙ�q�t�<v� Vt�^�-I)-'��J���[���D�y=к�G���A��P�cӃ�u0��A1�4XH��u�+A��;W�τ��c��LyzR�a4�v��� `�}sP��]y�sZP�݉;!h,,��T���"&҇�-�N} wLL2 sHG}@w*Z�~4�A����g��t�l����H�έ�w�m�I�."�7ڻP#���nF#Ȅ����\�F���!*��-���-�Һ�_sķ�>0�z�O���M)�d/�ے(,�Ik�� `�#��0;��W�'���zqsٙ�:*��=�zn'�(]C�+� F�ZD{��ko/��i�w�|���n����??WN���� f�QzC�)��w�~��M ;���.<����=���2���a����|�J�yk¹)�_<��Q>v����K�� �_��yO�$����/6��-��2��'2��5O���aV �T<0N�B>���[��� ��u�Rz,"۟6��Py��7����N�ϥֳ��/�Q-0A�u'T���9�wT騺�X'��\I�����M5��\��a�!*���Z��|dr>U��9V3d���x�~ 6���X�����rJ�I�ˮ��>����@�E�c�תu�3��*t�7�N�Ύä���h�%�9���.B�1߁5���!�(����H)�n�H���ܮ�*d���� ���\̀G|�j�v��I�X�ٙ��[A,��JS*�0��MKS�]���m(Թ�¡UzfZ?�\'�������M }������/������ͻ�YN�����o����KJ�SD�<nG��$J�[���f?*dԪUŢ��Jk��ʋ�K�q�C,�V^},��ܱ\�E���a�Kf���1�;����T�>�a:]�Z����4�3����)��-�~ "�p�JQ�ð7\�MT���J�e��\IǜNd�L�-)SZ�q1�Q��Tij`1?���JՃ��V^�X��*��@m3���I���&t���G~ d��K2�fɑ��v����Ar�C�a6zhk{�b��ȭ�E�31��E�U���P^�!M� �^����E�e���21E�5�h��h�k>/*ċ(Ʋ��6\�ϷC^�̴���¦�F�饰l>G�I0�$#e,�P��e'(�I��0�c����]k)Ā�!fD�� �zhpKrׯ�7�)}l��@B׆��mk�AB��)��%�$J\���$&�*I��}��z��h<x'��3�}u�G-;�c=�M������`6A���6mg��[���21Iٺ�q��U0��j� ̲z��b*���j>���,��C�nX��ė�A��"� �Ew{�P,!E4����R�Y�G�i��P����$p�7B]�2p���d^Vd��@����n� X>\�&��{�OB�ӣ�a7�+,Ʒ�Ł(���{p��9,_N�4��#t1"Jp�v��7b]3�"�$ohv���XPO�*��,k�t�!�pt7���|�r���6ǑP.�k���C�gG� W2ߖ;��m�;t���[�@�7� .��cl�ι�[��#��;�O�Ы�1�*.7��/�e�-�����P�e#�%£ɫ�j������L34����l�j&�g7���T� [�� ����r�B���{�ĝb|���V:��ODB�#���T�(�����p����ǫ�R�l>l-:P���Q�ƿu*v��Tf���&�h+�a����V����+f�����D��KHb(�|���a�nG�$�B�oO��bUl��V*3X��W\��{j�r�.�&��7 �]��h����P��-�S�Y���#!ժ6�Q�፶���ImR R�\�DJ���Z�����l�GE`q��ze�K���v�7�/�,�.q%�U섟�F�m.����{���$?�*EN�$'���r�.���o8�g�y� uO�h��c��<+�ׂ��λ�V�'�_���{�]�3;zu��s��挟fuyVV��_��I?��J��>�ꫡu~H� )����eʥQ�5�� �RMymZz�T�<��Y��;FBPy�����uz�����c�ki~�J����$$�*bb�*πf�Kr�]�>bm�c{�9���������z�p4$���,�,��<��YX������o���6e�g��.��@݀QQP��H�C`.ŭ��w.W����y��nhч�9�ȓ��3��V�e:�W�{�\�@���`�L��o�F��#Z�[ٰ�Ps<xe���yZ�a��!V����k��>�ې����>�6*�gv56�ɒe|"м+��l�KMM:�!�:f��%�،��h��41ҜnݖJiJ.ȝ���}��9[�$�ԥ͐;�����̮#8u����Ɓ���\:�����E���������SACr0A���Q 1Lj�۸�>���o��jՈI�p<tu���iZ�~<�ʑVr��9Z�οs^X����!߿�HGf���ZX-x\Q`#�W��B�����OÎ�I��&���`Ju�,�9V�����>J(/��h��iȰ�^E��cF�w�� ��梼����?Y0��1�3�_ qiu�[!���ݭ9��x"�N��� Z�&s�y�����i���7���!X5�@�Zd����6-�G��8����_e�����6M�m��q-q&C�d�Co@o��4����? l{�w���<�p�]�-[�e��}͉��OV�eq���֣Iuz�+dC� �g�2��I��4<��ݤ��;��L5�D��x�m<�t`�o `ߪ�9U��I��5>��~�3@(�FL^9�g���� ��^ �U�r6T#{�k�y�����kv���ě���! uc�`Q^9�l� 7֢��?��N#'�Flml ��Ǯݝ ������*?NM<��m=�i�C�<=�ռ%���!ck��}�vS���sx�st_yE���/"�������<�y�����= ��� v�g#Ԗ�-2��!�mߞWT�lbWEư��3�1Q�?Q�u��M���&[�bѾ�q�D�f����p�뮹�ޑ�hDr�̞���Kr,#���/Q�r���\�"��l�{PRHD�>2�Zd����WM�8ӆh;���7�]��.i��ݘZ8x����x¬`���zu��x��AI�((�0���0q[J8(hE';n�<�� �qR���9eo:���#��:|}� d�n���t�Z�-Xr�&I��}FKP3��|O?V;J#���j��Oc�ܱZ]�X����wO�K�ݳ~�����~SA�Ǥ�iY�A���"'�EN�}V�f-1G��[}�T���[�%w�P��G6̩(�U ����Eu;�ls.B������(��IcdE3��`�(]i��"m[�Sr�K�E���N�Xo�e[�N`��i����{�A�|խ}��/\i� g�<�+��t\���J�*;U�!^����j��C����ʖ�r-W������9G)��c>��+�n�/��ܠ[�+�����t�����;�_�>�v'�j�pﵲ�*�,������f���m��W�ҟ{w�*ިi����ht �-B������c�ck�UwT5~����*���m�b��p[�^�x9��7 �}����1�V��)r^n�|�"1���L=ip�"=h��ʚ�wpF�@�(-�Յ���}�ڥ���TVX�O�@���n��JSKJ ����|!?�8?�@h�ҽh��P3�DJ-ђ]D�\���F������=DB"�HR�Ո�Ǩ����S�e����X��א`":���k�24�=yJl0�P����&>X �c.����|CpB�Y�W7 � 4j�S0�N&��?|���1)_��߰�9z,�9'�;"�,�{Wi�YnХ�| ��"�h�g��1�,m�i�Ǘ.�<�Ov��?���X�FJ-����!�˚br3�a$M��{�<���@Z��� Ym� ��ܐUIY�R;{������C����jJ�=⭺SN�ZxUT�K�8���);fʠ5�˵IBVEz��Z����W�,60�����-�i�*e٣� z$���e�D�)�aWn-t��:y���Z��-l�^�N9B�$0ە��TMƌ!���T��\�c聰�r���*c����E����X��s�0�kα�$d��<hٟ4m��wZ���@OD�˜o��FZ+��3��N�:_RSiu�'�6�B���L� Y�ߩb�Qn���s���ת �K�cw̋����mA.�MJ�=F�?���"A��N�Ej#߅*���F�p7N��~���6��e�(S5B�#A�C'�������C��@I�¿�� �/���zK�Q���|��%�%ץ�ƀr�cA��(]t2!=�_0�����ڀc9���IIϷ���#��|:�x����"~S�0-\HΛ�x,� �;F���쑁��5>Qb�(3�=+E�ANwi��/74%���K�3M�(��ͣņg� U0�4V��&Lr��AҎ���� �7���jz�����q��ZAW=�=���w��w��F�<R�f̩��K��ܟ�E%������B��J{��JF���� �_�!V�d5E�+��"#w\CXGG��d��20��a[��5VY��� �����yz��ܿ>�w���-6:�����"cbR�^WFCSq"�ʽ��i2�D�d�#�^4I%�Āni�{)T!+k@'��/O�,R����)p�3^eV�=�2H��t*��u�T��[���Y՞zQ�t��[ <���[#:E�#�"�~/����& COG���;<�/� Q�i�ۡo�3������"��9��[{�Z}�zv��0�a`hC�&:[�9�%��U�q�V1:�KO�L��WS �_�7�Z��O��Հo�2�����O�2�њ�B� �.����6Qz0M-���R**�C��f9���jA�%?�#R����?[}=Xpo����[_ ��=�w���F��$��bH#�� �g!!J9|v��9OD�j��|:Ӈ��Z_���B���$�L�`|�Qoއj�l�f�@���%���(�����4!j��m~�!#�aaJ�l*B�)�(Ƴu#Eu?7�(nk�J�c��$: O��zS���-���H� ���%�I�]��_x�^�3'�r�&.�M��OOn�B!-s�V;�la/� S�%�^��r����5��Q�2��|W���$��EHh�_��C����9e�eՑZ�����ā�P� cw�(k[��z��\ܶ�B�� ̕��I��KGx��s-���?�m���ʟ��`����Y�O�ǑzEC�$Q��/}-p0WDo4<���ق���� E���D^�a�y�%�$�6Ă, �QM�<��3s"�C�k믡L�. NA��x�sZ3M�S�?s�P���'�OH[?~/��}|�5:���R/� �|dzWc�h3�z�[^8^��s��0v�_v�K/�3q��M-��r��b���0ڌv��0jFfT�:��~3:�6���7����^�5>�)�uIy�67�˟��g�p#�/�a�/�pН,�N��}���]@18�E����2-Y�{�T/0�������?��A? >Q�Y����?<����`?λ?�ɕ�h��"wDO?���h2�0��u�R�R�nK̵�Ǘ�bz�l�;�� ߙ�OL � q[��7�lt����7��嚹G��@�j�5�!�Y g��K�yc<� {K�ry������>f��\T|0��|�y�C'A3�Ż��h�:���i�rӘ� SY�#B���o���go�Rc�,Ҭ�G����Va�3��V����qV�)�H��j�]�dYN&0M��ƀ��F���CO�*�@^��8G&W=a�R�a��ȕv-W!���[�H�0E1�JB�ᝌ��u�30�f�5Wg�7{�,=e�H&sЍ�'1_<[#*�N�B��j6�U��P���mN}�a�� Jo�&�5j�dΣb<f:�[FC��^�d���{z�g�\TQ@u��s�=%�RZW�OP�j4�⛥B6zm���Dà1 ,m�I8�y��X�13�"m����RXT�qaZP�H��}W#��3+K0�3չ�/8 YD�Z5�k�S9��^d�m%nS8'��麑ًE��F��\��:0���c�A-�a'X���jyfѢL4<��M����0j���k��}��G�<���A�Δ��RT^@5�s�w�RU�ς��)��휌�ڹ���.�L�G��u�횶��-� ��#�=�u`�۫�m�B�yKRT�V���#�o������0���,��a�i<��i"S����J��T= ��^C��PI�Ⱥ�.B�g(��=ӎMպ�BS��nۤ��B�8��79���z��4Ki�X&����{>�8 ]����_F�����:~ �/�p��!��Ѩr�-�����*���x�����B^����^O?Y$B.;� *.>+nх� էO��=�>����9M`�t�߫� �%��y��V�n����y�������.⪮-M�����P�[^ݺ��G��,�_�8 %;�'����9H����7F)�Ya��4p�e�4�{�yi�xf�=��`�51�M���*~�6Z�ol��u�����>!�5k�yU���u�Z��d�������R̼�3U|����(���f��%�9��'Ry1I)X�7+ao/�L����z4N���%���� ��@����eK���sn�<���N|��ȿ%lş�Y��j�Lޕs�?K2� ��!�IS���Y k�f��Y��Ǟb'��.��9�Ӹ-��lN��ծ���D��9'j�P_��Ȟ�1��������dd��LUT(��N�Z����W-�Q�:ô�m�G�Bd�1꩹���Y���nV7*H�0�����X��%��j]�geH�i��h�� ���A9�(E���r"��y��Ĥ�ϓ6�Α FMH+�Ͻ��a����ȴ��=e9 � a�U(WV��˥R`���8z������m�=�g����38��� v���U 6�d#2��.}Y\f��6�7Zլ>�4�Ј�N�2`V8q7��a��$#m�!��\�@lhBӃ�A��C�ic�0�*�t 2�d��4\I"q�w��Sr�8>1;�EfE+f��@�����P��`O@i�Cl�P�P�9����0�rؔP(j���h�ra��Sq�@˗��:��A��1oO��N���ʹ�1�"a��>} ?�R"~�_���o�'`Q���P���$G�ʤ+�r�}�]R&V�@��o� �+��wX�p���UFK��b$] z�0d̘8s,Y�fÖ{9q�w<y��×�`!B�AB ��! Y �h1b�\�K醙 Ҳ�,����[ZYg%S�������3��`��.�/���L�P��:���(�r2���G*�l��y��2�ϞP�k���������s-�<uv�p�7���4 �&� �8֦��m�4��a��)���`���B������#(l�d[>Q�݉I�L�mj���K���܀��<�D*M@���$N`"N��jx�I��pF 8܀����<r^t�7c��'{��Bw~�ͬ��l�?��$�f�^��5O4fJU�-�p�.���Y.*���$�X�3!W,�ܝe�;ϴ��$j�$�� 5�%��9F9*&)T�0ì�%�@D�3�}�&�Uh)�v@9&�Va��� ��K�M�Y�Y���F#�o���E�jR�#�e��\��a�r���S�G�r{>>}p��������G��3�xe"��S7����n\y<w��mo /�_��"�/�wӪX�����]z���I�ߛA���π<d�W|u��.1�3J`�_@ �X��*�K�w"����]����u?�UY#Ȯ�O�v�����q��Q]IF|��/`rk��5����%�t69˴>1s��'�ؠ�ґ���.��emŋ����nM��,�etheme-joomla/assets/fonts/opensans-22fbba1b.woff2000064400000017540151666572130015655 0ustar00wOF2`<4�Z�N�f`?STATZ�D�| � �8�$�.6$�X �&�N�46�6l�̠LE�j,��/"���9��>}�TUj��A��e��yF��J�+�O��c���q>�8ؒ+ɕ��+�G�5B�Y�j��{fg/H.G��$�b�1:.������~��<o��q7�ՁE�I�5����}�A�� �Y c�ҞbM�1;��BK+o3jq墌�(��vW��/u���� /�!VƑ�Pi�Aȡ_�����E�e�5-�V!\:A�����eC�m���������^��p/|�������/0���t�A��rd� 3���L5I�J�#�c~:�=�5R�UR��Peg���z~n��T:��Zz��o�Ig4�۱/M��!��\6�]A!8�h�_�53��X�s�\Z�ʾ"�+��ڞ�^Y}���SJCwA ��B��PP8(D����4P�1&u8kK H�������w��"�G�7��E�m��K;�D24�l�룕 P]�B�(�~}�QQ��҉-F�D� ��ڒ`�����R��S�W8w�W�CSm9�� ���p~T␡�\��#���9*���?-�?�Vl7��j�k�!h"�����g�3�V�D��T@k��U��ι%G�R�4<���K��;�s��~�K_:�9?|7_Aы�d^����|6wm��ciΝ�����r��>�S��4e2T�疕|ɖ�ܴ�;I���?��_��a�ܷ��q/�v��K1�{2F�/:��I䮎�h�z9�;ő�;0?��H:q�C�`�+��S0�SP�(U) �1{@�`���,lF��9ƍ�uųl��b�$}rp���9@V � $a=��� pR�˙���x��9�1^d�g�4��z*6EOq[9ǥ��?X�8��F��l'�i�P[�VL�c���f�CL��º���X��ӄ�m�A����l��-T[��Q^ k�);�K0���O�`5���+�Ұ�:��Jsy Xq����d5��*-��4:m�/����Q���I7kmt����0�Č�f$��P�;�����bh� �&`�@����5�*y��Bˀ�Ԕ<��s �I=4����Du�:p�e�3潦w֛��}w�n�U����֏�6�Ѳ�E���;��N�l�l�l�l�l�l�lE��t�ȋ����Fo��Ы9��7 H��KW����(ؿ�'��<0㞚���6 T�>�� �h`��Av@ͺY[A��Na-��[�DE�¡�PR x�w&4N^r�SW-�����@�+��c�b�w�����5��3��#ۉ�Q�vb�k���F��Ξ��V�N��<�k|5�#�������K>{����O���o��9�j�1nr�]��8�G�����Dzt��&��u!g\����U�=cJ8>�iէ��5�TH9��E�~�4s�*�SC��L"��Y��Mєk�x�,�P-�`���H��d�U']�R��p�3��9�6��7��g̎9�=t�P��}&����a2G8���o���]gϜ>u�������&Kc��H}]mMuUeEyYiIqQa��a:�����/�Kg��}1��\_]^�v���leyq����J��ļX�j�=���<�k���^���Jk�X#AB^�:�墇�L21�0m�Po����R.�@�Ck��,�&G�b���+_h�ߊ�K2��Iw)� �dR�����c�q��5ۉ�":Z�3�g�r��Z��*���s����S�6M��5��om�Ï�`W7V��Xٝ�es^�լɹ�_��f#2��:}�S�p��u��?��0��.�ո�x�,�*-ߚ�L{}ˍ9U�;��R����T0G9(��*���rFJ)�J�eZ{>uV5��[^#����̧���㵙�Q' u�%��#�I�c5�?-��&�Oڂ�n��ȴo��+�#Psx ;.�%�c�!��T{�f#�����v�8��)�&J��@ؐq��+�;��}��b'�&��Xeg=in�5��x~�cod��l�W@�Έ�;ΐP�70���_0��e�lY*(C��O�B���09�`S�zr��>E�y�Y��!`��_q�9��R.rE�tc_���#$��TE�S��[i�Ay�=�����tmn�@�B�m�����(��:��<�>?w�~��0�W��a����f4VT�B�r+,���R^bd�m�E���h� ?v�l�%Ij�)/W3[? ��e~��sUs����S�~*�n\4��X e?�]Tӷ��n�<^�g'�{MLT�2"՞Նb�^ͳ�TQn����0R��4n(�r�w�����x�߰�"-�q{1�RʬA���d+�$>R��'�� �;��e��CV�C��ulyWJ/��F��꘦a����n�%�Ni) rpDHǷ�8�!{�Lج�K;ya���������2�qA��:��λ���x����("iY�]�H )��D�T�}Y#��7�aKƉߑc�t:K qt� kʨ�)7A�0���A��Ҡ�W�mO/~��C�]Ө��m t�b����h�����.�('-B�����jE2I�C*���(6GPN�t�7+����$q����l� �h��gB� �D8��ҁ��%L^��E� ��8.�T��W-z�C7����C�z��ݘ�K� ����:W�2D���p-�8X���ٻbX�W���~�2�VyD4�it�����!�Ky~ 4rq��W���� R���½�&%�����%�=�v���aJ]�}%��ȰCLڕR�Zw��>?���ycA��~���2�c�d��s�Ϋ9�t�"�N��xr������AV��_ �:�8]�*<�nC\zg'j�y/�$�] �v(���5*㖜~�<�bd���4!��v��Cۣ������!3��{��6��h��[\�O�{A8����瑀SY%]TEY�S��P���8$u�nn>�KL�V��hh�ԼC)� ���q��6���d-MxD��s��G��|ɼ[:.5�^�fC:7�Xpɩ�O�l��M���.��E�=F���VϠ�O�=7� A��f�n#o�*?�v$W�kΜ�� ��G�q����BR\�w�^��,����D/�I9<�m�d3�v�t�Y��?g��b��K~�Ai9�t?�Q�%H�l����ܱYZ�C�m����'�y|g�ٵ� &�!�>��0����n���+Q�ĮZ�zt��"�j����%�Q��N�3����$�����#U��꽳z�����F�02�X�!��!���:}�y���<ܴ����B�4P�U:dr=���<3唜`�]ʄ]x��ND?v�j} 4l\��Z������`�qu&�H;x��ģ�,v,�.7\��0ZDZKCX@cat����� �u`r�N��O��J5���N�8v��J�a�k�m���ßk�q�τ(��Ύ�m�� ��rT�r���]��哋�'��A����Z�y����F �ٖ:� �Z����T�Ɩ��V�ıд���#���7�DT"|~�[����U|�J�7۽f� G�n����:�����n=��:T<�C,H�}� "��yƬ��3�L4�㙾[BY�-zӖj�AXsbKqwi��m �lS.�+|hb-���#�֘���qݚ�G0�*b�D`�=a���Q��=�����|�*gj��B�n�]���{�0�:F��}���q��kV��Vrf�AQ��X?�eU.����PY|U��C��]CC�]}�H�����nںoj��ň�c��w�O�3�:�y>˝�n�[Z�����P�p�V�4�Ų��k0�ker�ZSm�M5����iV�1:獭cM=H�&Mg~0[��Em%�6�&jD���iو�ZDr��� DqB�l��$S!!�P�-i1�t�=쵳ޘ��i[h(�5e��K�Y�m���~�PY[�*;t��[��n�Ϸ���nX�ňq�Ⱦ�y�w��!%%��\�b��e"�����y�Zey���5���o�{dS!'`�Z���u�(KL���1��o �Ӄѿ]�Z;�r㉢���R���Ы�� ¾b ��&[�5����w��}Mv�jk�5��]�����̽e��wMrm*<�Cd`�t��K�>�)k��L�6iث�@Mcۋ[�Cupۍ�[�=��,�b�C����mתc�m6��`Ap������NX���va �F�ՙe�PU�L����+$�$2e��J��n',N���I��c�m��T�Z8lp�lTD�S�����Z8iq�`�w�}�4;V�L���u�G���:�x;�n~j~ ��. i'��o� /� ���Kˉ���`DS�W���|v��5�wl6NT���IV�|*�?C#>���u�N��0���\�㬒����U>tC��K�����$*��4U�I�6�&�'S�h>Q����Hj�]7_KL({DΎ0Lۦ�'�&mMBn�4z^z�T��ڭ?gZ�� ;�F���?�8 4&Y�]���b�]67���Mr�O�bCq�C�H\��c2�4��x��4��;Ylm;��h���l����=�k�8�C�%~rZ0��__�u���mmj7���\�4C��,8��}�,ǥoY�}���s���c/X��i�I��]��,/آ��e&��F��}�\5w��}ҀS�$EKY+*��e҃���R���x8슑?��r�7n_YN�*Ǵ��F�7��eD��f� �5��n���ă?��š����5��6q|����?;���T`/ď�b̓�G�(m>�b���w�\Ҋ>W��b���a���.N�e�>��.���}��Gf�ߋߛ\s�c/������Y>���T�݊Zv>V0|%&�?��`k�x�~ �ZM>Oo�|o��tP���@�T�.�}b�����Y����%⿻�f���1��~Q�NM� ���%�vJ9�BnP���/�M�~%��;y��m�����K���V�)kV5;��e�R����$�Tt�y�Gt�S��!�ޡUwI��K 7p�BE'i�j�4��B�K���G��h��?���u�ʓ�kpQ��`\�繰}|�kk�C/�b�Aj� nF�J�(����_� !��s˞�/�?���� ��6�G��:�['�t)O�:��?���7,5�CN�c�bB�+7��CY�/5bK����<��v����?:�S$��]W2�3�7������A�ͱ%���h�Ҿ��v��q�����y�d���}[Mws��:��sLէV�tG /�8sؿ�zlo!�e���߂a>{�tK���&0��?��qT��*?��o��Pz�5�`V?-�s#}� �}˽���,#��?Z�@M���o�z��ל�^�Fͯ��A7�#�p�8��n��>J�?���a&m�H_I�vey}�WԂ�eg�a�-�o�W>է,"��(�mZ��q�Ya���~"��d+�|����h�i^��5�\��O���W�p��x���d�!�0��*c��C��msafQ妎5��Qs����d�����B�HX$�i��P�HP�$�.�S�@`���s�ܓb�H���^}x��X|�'l�*�O�F�V�ծ���O���Q���y)x ��\��f����Yc���w /� -b�R��;�xg|"|k�yⅿf��,� ��Q�Q0DA?b�D��_���z�iût�����H�ya��Xilۄ����D�����_�����="c�%���i칎�����MS��(fW):� bŅM�,M�_k��@��MI�<� G���,�LKjF��T�]�]����So[}�y�ݸ*�3-��l��#���3�ΨT�VͿ������v�B�� �E��AX��m);�,����rb[����6��v��.kǟ����On���s�I,&C^�OS2�XGt8Beh��R%��q��X���T��l܀�ػXy�'�#���9���d$�6 #�N!c�(���MBH$��þ �V��5i��@�+���l} �&��0ٞ;�r����J���t'�+?�� m��&�S�- �O���v�zx�TsɍX�3�Rj�l�g��@��~�����j-�����9�N�����"y UCtauJ+d�T'偶�������fh=��?��3}g~�c��s�Wv�����"Ri�$:�Z�b�)���פ]~�CzQ�sf��3։�\�H����pi���.b��x���hb��T�lMV+ˍ��=D�����>vލOm��ʁ�����#���43�x�Uo�5�� 1��Ȫ�f�MbN�i(s�v����S@���P64�0#���V�h5�{j��� �����BZ�������i (A�~���BSq��.P����I�;�b���Klk{W�fi�������O�l�e�)�"rC2�I7��)6� �Ƙ��=�͆I~�!/P�~�j)#�ܚ��9S+�Xj�yA�@P��>~U�W/1���`̏�kY���ג��1���@���\�V+����V��xɫ1�G�q �>�`Bf��4'Z��|^�a\�8�Oۼ6�̝�P��d�4�@�\�A>9�{+\ј��^��LyE�h����Cn�� E`�XEByf�BBZ �fGh]�ss��"h��l���ٿ�������75�?�1�\ ��[fz�����_˹PoX�?3o�6:�8ԣ�+�*Kq04Y���L�� i����b$��Q�����h� /�IkU��sy�5E����*�ߦ��L�CO����s������7 +�/�>hZN0�̯���Ǚ7��6�������~�*V���WO.����?E�O�W��F�J���t|��K�P<�m�PT�Fm��:�� �km&E=�R���nu U�VK)m�K�Zh^;���+���3*�1)��I�"9�EU}�L�2W#��<E ٚ,O�Td�.JP��r����)?~tk�jE��r|����ɻ�H��"�HV8/��$�*i�K@���$32* 3p�Ĵy��i��pvF�+}q+ʴ�ʑKS '��nG�SY�j1�/��ȣ �у]��f �� �#7x�PW&�|���<f#�r�#�ݏ���HQ��t���!C�%F0T��1�a�`c�&���)\p�/|�#� B#�(b�#�$0x!A�Ә�,�0�,B�)P��A9�Q@%�QA5ԥ|�X��� �!�'Q�v.��<�H"S�4:C M�P(��(���/��3�Ф�G0�'I*��m�x�L��J��G���`O ��*��H� �l���i�b{�/��|T*��+_�Ion%��7�������%� �9$~&�S���1�s�n�Q8����#R{��I�I��3[ +�L�6�ǝY�i�j,eƎ`%�S��WKQڰ��Ͱi�m��T�W �J��AS `^��/B�dz^��x����)�~e�;��F���Jͻ�`n ̬:�p�0��r��If#�D �(�C�;�_N�!�_���u��8�g�� G�Enld}j��h7�6I�amL��&����Ϗ��������&%�DXi�9p�����V��Yb��-7sӘ�w����?���S�Td�V:�3g�9����+���a�+������?P���;�_�r���2�=�������I�Å_\����237�����~g����,U�3o�ZK���\�t/�%O�w:��;��1theme-joomla/assets/fonts/opensans-e4d6f7b8.woff2000064400000043160151666572130015622 0ustar00wOF2Fp�XFN�":`?STAT^|�| � ��<��/�:6$�h �x�+�Vx%㘥���ٷ E��}Q@�=�B�2���T���̠$���DV��8ɋ^��+�`P��XR���;��H���{E]siw<;rʚx�K�/*S�����3����7|rxW����r���^?ұ$����0�9Bc����~a����MTTNT\l���[���[�4��ف�s�W�DA�HĜ6*bb5�X�X��X�K���\8�v��Wn����Y��%L�'�C'�z�f�_EY���+�P��U�k����+-�b�ȁ����S���MP>�� �]�%�����s==��w��=�5}qnUҗ���T�`��Y` ��\���|.�@.���u��.ӝ����ud*���ɛ��~�:��C�gm�S�J[�:{e�Kɲ����r|ʧ\ & F�4w�q,n���N4L�/�_B����/��5�+�8'0/��o������PS(�H�7��`�"<YZ�g�*���mif��^{�d���E�B/�U U�m�Z�=jd����d�7Ґ`��);�5l��E@�bxQrytpzA\�Ar<��B���.���f#� �&t�����K����\g���/�m�2��1"�����^�?c�W�1]ڝ�C�������̶J���# �u1/X�< c������}�*���t��XBAx�]e@�]Wt��.?��f�|��N �`��<�,=�FD�=��!BL���K�9�*I`� 0G���?��]��:{�-��8[ �/���m�+�<�nu��\�|g9� �9����x;�ʦ6��խb��-������z�Ǻw<T��m��:� ��_�jV��*V�2��8E�"D~"�]β���җ�U�������ᱟ������0��~^��\�y%�9��s2�r8{�=�&˳0s����ɈJjz'!q�H�4OL�F��B 2e����`0�'���xO�A܊kڎ�X�)�J,�l�QsL/�;Z�>��4�#+R#!hA ���$�p�J �l�w�[jmD�q�>"���5V(�D�]AkC ���-���M��l����G��8��� c�� @�+"���h��f �F2������j$!�_"��Ic_�E�Pa�g����\��!�6X<�U�8�BǪ��GD �0p�x��>���W��(4)���ljM�Ɨ�#,NQ D�#i���Dxh,)8��D����Wɪ��xI��V��*M�0���h|B���aVÝb^ %��"�N=�h� ���I���7�x��2!�TV$�R�A�~�Ț�F��CQ����r�Jl�NG|4Z�XMi�s�"5�#R�1��� v�^"����\٠�/\ �M��-�z�V�[�p��5���a���=�5��kc��ƉS���m?��jլ�1��<9q����`�Xm�u3��� .8�8�D~��V�*���B� <CV@MPc*�w�Q��Di{ �B�V�RK@0�R���� �r�`��\�f��#1=*<�����ݿ����>�����nC)}�6�a(���{�^=��39��w3A;��(e�P�� �+�6I��M"���(uaE9�S�G*� B�ra�� β�p#]��㜊gxL1v�R�JL��`����2�$ӔQKgX�F1�4� ���C�m�|$�B�h ,�[+��{U�%@'��{��JG{%���������߮��i4�����>���>���}g��U���o���Ua������l�ګ��<��������� q��ϛ���(��&�7��!��R��=�������5���o�=bQ�j{�Of��L��P�/���1-�@�FgZ�O�ˮpw� 2�%;�Q��Q��ſ�`(��\ʚM) .�.��,\(�HLm)����[���@.��04D�9n��N��v�dJ���i��2+{ln�~��5�dm[���~=$�N ��<L�|�0m)@>7�$��ٰʣ�Hb��@��5�檛��53� �A���E����5�qKGT��PH���BCnȆ�(�Z:�.��H�b���1�����]��4�w��C�-�"#��ٯh�D��e��O�W�W�@���m�L�dÉ��!6������Ly}�:5D�sV�u�0���P��Ҷ���d��$Íb*+�BJK�'ϊ�#���li��ڃ����TG�*Ν��AU�F�u�%'2�F(ɥ3;�W��;쨀T��� �~��D=��*G�X��8��ޓ�K"��yG���LaF=(�gq�CY�����Lf���N�����$k�� �+����f�D'#�7~�Zfɰ��C�v�@��/ �=YF�#\���P����*��"��w;q��)�Eʬ8�iU�~ƷJ�elҪ���(�rW(�����rV;���ύ�ڮ���V�^5J���H�z�?^5��y�Ձ���5����)�36�[���Hd)��Wde��=6���9h��dJ�-�~�]2OO�l{�$ΥC��u4� ��;Lζ̩hDj�+,��_e���Ӱ�ia�O{���OҰ�7��0�.a� �)�f4Hey�QX~�ף_��\H�7��~ �a�]�����5b �k ��nz%QBXp)�:��L��kXH"��.�cYSB9�s���G ��7h�"<�����4,l+����H�Q��B(Ĝ�J���4�"�p�0w������ő�b �q��g>�SDC��\7,�80G��C�!W�KA�7�q1/�l0yJE�{q&�aL�*�*�}[��@�s;O���E#��A'��pG"C�f���K��b4��n�+!���m�v3m�o�^��Ǜ��~�(:��dwK�FDUOV�OΕ}X��VC�����T����u�E�6�8�(��Auăh���ȳm)�_ �nt�с��c����d)�)W�aN `��k�Eឆ�k{Ԙq�ٰa������+~}k���r�,(Dp60@;C�2wT䊠�= E�B�'w�NeƠ��5l�A��%�グp�Qӡ>�O�[Ē9w<>OA�r��fF^p�j����{�ϊ@\(4\2m� ���b���X�~��d)(f3����<sCy��uzX��q��*��<(��{�L�2 -�4 �����WGoL�R�W�2Dz%��:��D2/f��c��i�#�[��q�)f��C�v�?#~� ��Q�[ n����/=�A���<�8{��?�g�#�ѱ��:�4?A��#{�Һ���W�������$������q��Ζ� ����viɒ!�����,�����, � �w��_�<���gT�a�-\n�Q��A�`)R&'�SL�d�M�`���k�!W*��D���������^��h]��8��N�:&-,�wz\��� c���`� +�d<�V��0�B�����s� 5M�~�Ǥ-�G����]'�vy��ڏ���q� �Ҕ�=�hBTK(�y�e�&ΐ��,bGSo� ����'0@��O���U�j�?���?j�߽�5X���,�'���f� hت��e��Ċ�����e�ګX�*�B���FU��-<U��z�"Z@���� ɦ�9ZR�tE">]hy{a �Ʒ̿�{n^��= �m�&�{>�V*�sx��y��W3��z��n�cv_��N��#��1e���q���8���r6��."1;�s�i��A��#Xt��$���趼�:雓e�*^���o�/�׃A��_^&�ܭf�6&�<{����^�O�yiFôX��q���ڪt��}7f�_�O��!��ai���ke���kd�/:��Tq�N��:W��x#���[7�����kn���ىt��%��cˮ�t�+����{��ª��b|��l%�K9?׀�C6�`헊O�W;���<W�&�nbd�@�/��6��Kz���K���Rq(��MBzf�C�0�nԂgXO�\/=w�N I��웷�}ۻ��$��\�:�&����8�}л�I����BR�UJ����y�7ʹ�jRtX��6�ǰ��%͑���}� ��M��!�_�0WV0��p��`�"G�8p�G�?�C*�g�)}c?)��'0;�IY�t�X�L���W�Æ�S���%և��G(u����e�I=qQ��*��u���-�O�#����u�i_� �H�dF�"pXzy�W-�e^[Ŋ�]�*2'r �k�V�TY��';H�k���5s,z��h���D�:�NͦL2�flA�~����N U�� �Ha_7����B��?x�����)/ȳ��W�%�pGn���'؏�1���i�PJPMUՆJ��$��$d���Ϸ֛J,l�/��Oz�c���I���L�>���!ϫl��2Ky7[�����m�#1�Q3O�0������-JoM&g�цUEޘ$���|%�!�����4#BV�6-���ۊ�%�枓w��C�hTw�Qɡ�Yv ؈諸D���j���g���m����0� Rw���a�mC5��W}�V������b�A���������L�]ܾ s ?�O��5e4�3��� ��'F+Z����Ʃ��\� ~���_?� �c�}U~�I�}cD�(#��C��êO�s�Գ����Ky����) �o�|P��3Q����'�R��u�0�~�����˔V��$s��H�/>����I��Z �,WP��R ڸ�p*��QI �e���vZV?��-�� ����r+X��8�X���lT���N�ނY��P9<S�~?���q%BE��s��\}a�z��Y=���b���0�+/�%��<�ϖ����?_$r��+ MNIn�}�Q\�8ߝ��J>����353����$��f|I��~��6�V �a��`*�#H�`�6X��b�n��t�,�o %lY�fN��P�G|,o�C �J����XD���]C���R;w;&8�1�1�F���d�̈́��[�:;摥5���Տ���lZs,�+�lr +�dya�Z�#�������Aw���ؗ��9�V����쪷6�>#�(H(�����1kް;šഃ��S&����RU=\�����EM)��)3�g�����O���p�_�S���^`ڏ��Z8S<J;N}'���������D%|@/�%O�c�\~��_��{��"������^��*�� ]�7�aSc�?�ʠ7z��~����mmaI]���K����ᜦ �Ë/^@�B��vFfeiz���5[�����وͯ����� 仓�����k �i|g�,&�hK�B�� 7��~�����!�ժ_�N̴�DRϠ��\�4߆�9\2�.� ,�Eܕؿ7Me���~�[Kb�����2�R�8��$�.�J�u_�����0y���+r���Ms�a!q�n�!�i��ej�;��H�ny���v0�D�D�ƒ;]�c{�s�=����˟�9m�3���%�%B�Kb����� -���I���l�*k �T�y'��5d�����\��B{���;D���3G�8-�8u5��3(E锁T��d*]��y�/� .%��01~.�')�U�\�%��$4^@N^*�P�?���*�:���飢qc�یL�BM�V���J��n]l\�S@��6��0�ߪ �8:���<���W��S��d�-f�9�RFr5BY h3�;�g�Q�&W�"cb��d4�ݮ���D���ԍ2���YЮ�d�>��1��!G%�!5����hC�s�v��Ӄv ��]"�w��N �����~m82��S�4���� ?<**�������� ;���p��-kVH�X�ۀ��u���.zc㗍��={���)�ƅ.TŅ����d%��M'�$�}ⲲI�k���u=��2���LEM!� �D�� ��l+�%/D���1���G�vjpQ�J�4J`�^~7�5^��-� ��$�W�}�c�&r'�I�mQ�������՞�$�_����2>q�%�ؼ�{��'�7%HJ��)0��^d1a�ZV9/����8��6$v?�T�N�v �K�� �T�JK��1vAb���\my"�E�������湡a]�� ��ϥ��ް�(�1��R���H�ENa�1*ɟ�Q՚ȆK��^�����qſ� �h��h([�G�q��Ю�T�ֆ�G3]o/��G��!�[y��b���v��о��adJ���?ϟ���4VV��q��l������b�w��G�)�����ы��%��!vgKmy@C��`�J�eM�Y���&�s�����?���q��e�)>���R^���1�D�H8�%���'z�dN}�{~�M��5�b�\%�+�������d�L������AKS��ڢ5C��$M4F*N��ڟ�WO��S���)��gf��LC*���@S���w��օ&i4�5z��~�-/}Brb�U"��%�.))��!��u��2Ƚu�7�MSZ�h�&�4��ϾWdYt ���[*��1��?���ZS�&�m�l�$���%yx�T"n9%اxM�(���<I�Y�o�D=��[<�ї�b���l�Qy���8����<Y�Tm���9�V�����S��M�2qRky4�����\Un}N��D�rRndXB�.'��IҰ-ǩ�k���B'H�jf�2@u䊟��Xm�C~P�᪱�>W]m���?|�O�SF��-ĨFw�y�]�.��'�E����u��E�u��u��/F_��;���Lu)��U\8�\R� J\ξ���wؠ� s��ix_zk��R�".,����cs��}-��]-�g��zn�$��Ir^P�P"�_^�|w(����P$E8@T���%����a�)Z�����f�3C��^I�>1h*��a^Iȸ�-��W(,�B~m<,C�I��Kg�'�YŹ�y���:;�p�pߒ�n�I��g��|)\��>���a�n�>=6��C�5�O8���S�o�1�� �k>�z�-��R�Ra��i�]���Upō��b�^���38�`S��#v鑞~��C����m��EYhtE���wY���(����s`�C��/��zUK���u� L����~��.�턖*V�N)!���5�H�r_�Z z@8 U���˄�A(Z(B�4�G��B5�����q{?�<�]��i�����v�4���_{�ſ:&Ưm�܊`����K��.�Y�E��#eC��Mw�P��� �H�~����7j]��0��T��I/��s����6�G�h��炒^�{�HL�DR8���#/�J§�-03߽^l�#�3Q�8A�.�S���<�E�A���4.�}�)�3ZP�z>�92y;���x�v]1DF���]l+ s 2c�WǕ:I8�H��Þ��+Z��Xx`��:52e'���� @�-hJ���<߅�8n���`�z�/���858L�6�ٻ�5!v>{��K����W�9�QT�)��y � �G��Pk�7{:c��V�=��s�?�Ga�L�{bh�^H�b�C�t���͘� �i�Gbޟ������%i;5�ՇM���:�g�f]l[��9_)n��=��w�fZ�Th����gb'�>� �=ci.�����@�U��X3Z�Im���a��h�Or5۔W����s��.^�Ɲ?�Hc~PW%�E�^���Tb�J瀠r@��~�|�,g���:!.]�1L��� ̮��2�E����2��S�Sr��'�����U�;p:i,I�S���:��E��.�Y���N�}�|��y����ͷ#������q����J�?l꠶=��������-�<�ά�9Q���12t.N^�g�9$�#+��U�(Rm*�+-����Z?����z@�cS��<]ը%$~����9T�G�[�/iNQq-q����|�$ b,�T��A3}CP��� Rg��լ����34���2�q�*a��g�)�Y2�W�m�f3nu~(���9g�>��@#Ƨ��y����bx+�<�]��p�%Y����M��F#��^�ϻ�aee�u�IZ��1N0t:[Z�m[9��a?76O�D8vW%ߴmJ�D���ݭb��""N~1�k�$"�! �+���9�����k�C�ȅ����������ϫ�_�YP�=LN{&U �y�?(�J��!4[��^j�ϓ�Q�11�C�B-'1:%+H��A:�O ���B�%���1�PB�p�����-�36��vK/Ù�[���8�P�M�;�Pj5��Y <b���CnAխ��A9���x;��(�d���#��ǭ�O��3���I�E�D���$�g����^J�K}+��k���)��� ��sRRZ�ʓߍ~F1j���٭���z?�������d�NQ����i�j4t]y)'8#W�(�JQ�:� %�*�~�T5h!�N#E�>d�f�%o��*O������v��+m����J8!~�B�.�A�ۯ��9f��KJR�ǽ�ݛ/;{_%vn�ˍ?f�e�o��?��=����u�%��b��ņ�ε�0IWĩ�_E.(�R(Gl�l��p�M��5��Ʈ���-�]�!.��[��))�������kZu���_n �>������ ��(��ζ����O��~>�劙�ЦFΚGJ�N���i�������)N�R��=A?�������죽��Ȇ_65�,+�[�Ox;���e$�ofr��T�bSܫ��4٭&c��16�����ە�F,�� ռ�Z���U��H_e�T�Q�K:�W�dD" ��ڄ9��P����*�5t-���L��d4�/����t�X��r,�؎�q(z��m��&�t=�,��,�q��1�K�K�Y�.���0��AHw��6A��C�N;���[��zll�E����:ƴ���椝�%L������, ��K�edC���� ����?z Q�2,9��4�Hu�n�\��*鼟��4�{v��u�l��H�s*B¼腯�n1��A�v�wr���aRE�����/�T�/�Q|iQ�W ¥j�"��)���������VB{)m_�G˹ �ק�oP8��C�LʑwM�FTqϪ�;��]���/ʸ�2���I��!�~��Q�S��MfO��bci�7�iK�����n᪫�M�U�~Ȗ;�)�j?��u`�p���vU�]��,N�k�@�%�q�U�����AhtzdB��3�C������r�8��9�����Va�X�gpT�5I���g�z�y"M�/�%��;ɬo�M��HD>:�\�id4K���%S��wA!6c��]8�Bp��.Üi�K�?81��U��:ػ�$�5��]�$H���=���PrB�wN�;D��uQ���2c`�L� �G�m5�F.���HS�D�(-=�f��k���&^ �� �j-����XE3 2h ������Q��X�D�J�+��� +�a�_�:���'�{ �"���I�ތ�d�x|�ͧr�Y��:�(gtH.(���L�o��B��r��� a���wH9V�-�ELO�Di���тe|+^i���qIs����aMQ�����7 7��K����@�1B�'�V���C�KhuLLp�*��qOQ�/x� &�+ ���p5=�{�i��E��`�~�`?��� �##6e�q���'�M���6/�o^�8!�_f�A�C$ ��[-?$�%��a���)*O�|�qI��*��'KA��3k��O�J������J����b� F�0S9�����N������N��(��g@pI�S����pl�!S�[�o ����<I�������<�� �MrNp��X��|yװLj�R�hƣ��jfTB�^h/1������ofx1�ʭ�3���+7O]�Ey�i��P ��{s��Bz5�\[ �j�e�/B�XÒڞ.����>l�0s�����q�~ i�� ����'�eg�H���UKV��Ԃ^�B��{���#�#���g�F�B��7��v]�T�R�\t!)?i|kX��?�AǷM�K}�4ٯJ��3e(���+���G.V��+�L!�> >Ϳ?�26wK�`j.C,�Ч�O|�r�e� ��6p8��ӻ��8 <� �Ay���)����}<8I��1���A� �Wt�*Pć��"J0r�m��N:�c�D=ǀ�/rX���P�� ��b��2�����{63�- ~�u6A�Wr��!��4�S��-ނ�����W�g�]���2XM���6���*�}�x�?��p��_��}����uN�z�7t�e�����~�� �9b���~�ǝ�'t6�J�/��+m���ȇ���<�@��6J�҇���l��b:��q.�8��T�/^R{��ō�-��A-���3yy��:�����@a]����Qo���DPnU:����C��i���Zdu�"ss�-q���}I8=��T7x�^CA�Y��{]N]{'`��� �X�d�5�H�ȓ���(�{����B4�l�X����ߧ�T:�PpZ),�ה5�����"��?�6[F��!��ͥb�L�.�braK��B.L�Gq���0�X��� �:���Hf���8�8n��8Az� ���m�E$n��0 ��ll��Z^���@�T��r�E�<�0m� #ت&�yB?����@m�)�8>'��f3�;��}G:%6~�tk'��6HC:ɶ�~`$�&K�}���{�x�eR?�(�%o� K{wnw~�����(]�ɬ�O ǂ{aը�������~S��TNa��4�אreʵF�1D�=<�ȯ�#��]�rQ4?��� �~3/��5���c��M�dr֒sU�ǶP�pc�?�Sv��,�?��v��+�����h��\2zy��L���؟< �����f���9]�:�,��"5�{t��wgAJ�X�̹2ڡP�,�lw��Nl�*�U�Q5?�X�N[B.���x���d��O��:�K� .���|]$O�w��-���V��l2�2���0����Ӻ�BWl��})+�-���v�ɯ4�m��9hf�7"Y��%p���vw�^��~Ayw��ɭ�� q�h��7��mi���8��Ѯ��:�=���s�,鄼��6��Q���Ͳ�NjsN-e�6)A���?��VW� �ݭ;�^iXIn����t�_j"�[� �K�� ��@��;A}9��YӍ�k�ƣ�����D��o/�2��ܹ�)��_pʯ�H�3��0��(Ι�� �v�p��t�ĸz~C�F�z�~�{���3���#Aȩ~���!�bp�忀R]m�[,85� �C� ���$�a�ulቒ��]}H��l��fR$b®w�PŰ��( II ]9��AX�Ə��r�4n?�(75�#�]�?pK�\��kg��Ϗ�D���9Y/Ĺ���W�9��_>��+�ߟD�tw/n�k�A�}�����]*��bs6���';�T�2�E�eB�fKS郏�#9h��Im�4�1�؛��\����V��Y7Ha�cO���=ș�����5D����ԣ��sD<���f~��f{�쐠g�m��V4�i���9ڋ~{�.$�A��0#7�9ȫ���?7fnJL�ۄ�� $���o��Ϭ`a���!�?u�}�y��%��G~�E7�����J����,Ѵ~?+l���U6aO��?[$� ,p��NK����~8�jl�`��?H���������D;�dܵ��N�� (���)� oȫ G9�C�B;��5�c�hlKdD�QXL��{Pm=��<v��W� �|��kG�DP3�N���n��w�Wm������?.�^ IN���SK�� "7�=J��U���]ͫkB�����-R�}���������"�YW/SjZ|��6J��u�1l,.3��JF�YEC\�Cñ�dFy�Ũk�aKXd�QDX�N�$B�89�i���+z��\R:���4/'��h���K�B��:�ZEO).�i��� ��u����M�%��ܨ]p-��q*�.�&�4V��)m��F�.�84*��(�G��]"e�a apN��z 5��|�0r�O�C� iSNE_@#<�����i��]���5A�oډތ��l?tXn�c�)U{��cQNGw8I{B�N���Q<��� �YXW��_^i��G��G�bB���#MZ�.v>ow�p����2��L;�M���O6Z�E��n Z�F��q��]�P�Ǩ�2ūzT-&,� 3߿�i�����ׯV�#��ڦ���79?Lz�x��}�k�K�`�&"�6�ܯ���s3�R��&�r|o�U)�p�_d�^�^q.�������5�R�kI��iY��4��_��\�Z]z��������\!��W��JO�(��̿�ysm&�w̉�r���:ܾ�Q���TPc��GcZ""�0a!MF�H�V�kh5\;�RUm7Ģ���/���fR��gj��]�����a�3�� ��Y�к�����w�,���ҏ��Q�L�05��t�8+��T(�N�r,�F�xI�z�䢗,�&U�(�P�µ5dS�Z���6{�Cb��ٳ�VYN��b��ؘH�����?��%��ey(t�D�qRHH���_,ݩm��T<Hgw'b4��-�r�� X>ޚC c��P��Exp�5X��hY"ܞo1\�'2�.�)aS!Bś�`K:=j{9&\�H�h}���Nx}yM��a�r*C+/�;3?I���2����LEn?쮒����#^���G��q��iv���q#�X�~L�⮅�W�h������39�2�c��(�A*�)�j@�S�6aS��"�m�Cd��'`��[Awu�Veh�!�:`ѐp45�# J�qKQRB�� yo.�zN��$��"�z�ψ�`��|� dy04,�uBG��ozl8#ts�7��c���rt�RW��*�r1衬B B*Q�B(uwO�/���b�UHQ�:n�V(!k�V��i�Ӵ�`2�{r�v��9)��/�3e����A�p3(�y婒qTHC]��+��x� 24&$ �`6>�_� �#Q������?�^I1��C �C��e�v��m sN��;��P�h�RaĹ��u ��_��@V.)L�Lx�/*�}� e;g#���'��}č��Z�6��%�B��4?��*A�BO�b6Z�%�LRwr@VX��u0�� dD�Y���'Tl�2��5���V�2|p ��. ���k��!� d�p- �F�+�}�k�����b8��C�E"H�~ Z���M�?��g5��YBX�b�P)�:d�����}d�_mZ��r�Z?9�;���F�;�$g�儞�3�7���5��vZ���IP�'�p��!��D�n|"�ɘoJ���R�&�m$���3j���K �U�sP�Y��O����w�;rG�Y�� 7��+�W�� {����#�g�����sû�Q�L�V�δr��y�qF�\T�Z��u݊Ć�)�m�c������i�qt�o�4��DY݇ ����{w����@E��j�����8'd�Ek��>ӐA��l�ݒ��NNl�'5\��u+9���^0d��5�81�9��u���pT�{�)hԻ�J������E�?j!ς�#H�(����� "6�g��҆g9&e�t�����m�%�����b$ѫف�lUEΦ{���,��D��϶�6釃~\�܂l��C���k�Ĭ��Pǰ�Z�`�"ye>�o��J2# �0��y_<���a_���)B6�@Y�Q����3c��p�L�پY2����q�g�lh)�Qt�� ��J���;�ԷE�G�y��, (�(F��M��݊8 fO� �}�E�J����T���a�d�1�"��� �Zl�������־�,̺���WN'�)��� !Y�oEԷ���'�c��q��*��&r/�� �٪Q��p0���w�,+c��k�)�-���T���Y��Zq�<�3�0#�:�gըi:)��v�ݭ[쫎x �e~��Vɥ�9�+Q�� n���C�|���/Kk ݾ�m�N�W��{��l����ع�a��S �Kb`H4}dW���g 1q0ZO���tĠ�G;K��9��6�c�a��H���h�t��2�ڽ#V�]�l<���A]�2%8]��5K��0�ΠGc��g^�w൶�}m2���[�/{:;㮮8^��0D�:y9� n�f̹�͋xyV /�F�C���-��m��mm�8��/�;Wў�I�7p�ą&�=щj����;Jx�E�t�?[��|} �¯o>�58^���߱�c������i�jX��������)q�_VBv}��`2љ ��D��d�\=_"<��r#���H��2m~[$X��B��s��m��y�_A /�L�T⣖�����gxd��F���7p�8i��b�|6��2/��~�[z��n�⽉(���J\I�dM6_� 0�m�+o��^�זȔ%l�j��Tr���'��&�!qJ-�v�cq ��b����'���ۑ�9o�0X6��� ��G��L� -��.�gv��FfV�Jҟ���WϞK�Z쉇�.�d��_��E"�Of�`�2�!Y�Nj�������9w@aH����n�0�����u�E��B�F6:�E�Q#�:V�*�&6�Ե���h耊��C�W�<����f�a�3���V�ǯ_�c�>=�.^�a!iPg�V��~��G�e�O��|�qԃ��7�����%�eLd�d� \� ٬��myG�5��~��Rs���x�6L��bH�d��P�+�,��|:�a�ܝ�P�7%�q�1�s���4�5��T ����E��ZDZ닕R���C�Ō&z��o^7�P��$��jɩG�Z�C`lk��n��%��-��Ѩ�R,�"P�R^@����p�ӕOxV��q�?�m6���e�s��|�WW�\:�*�7�3�e�9�k��{'���ʄ�/�Sǰc����-lgO�&J��dU���Q*�`�Oo�|�M��hs���x��;�^���IJ��6�%0 "�0:�=,&���0����\��T읰% ��F�(j������{(��R�����= x{�w�|���d���y�狴�~I㉙��W.��+w�I� uߝ������NaOY6��ϼ�`�>��������,ryNo�ʴ�x%��'��O�H5v]�^U�|�2�iC�MM��H�Y�ҼY�6��q���GGx��m ��WF���"XR��J��K^; ��/�[��x�s+��ѩ��.���.e(6�\�+;c|ڥj���*�{�*�ܲ9��S��j�*���G�&��+�X�t?��H�vU.���1t~��~$���Yڵ+sAo���9�.�5H�.�=;��&%w�ז�[��(ۑ26f��i��d }~:�N��z��r���-\ykP?�O'c=�`.\�_~�@)���J�!PUz��W��V�)�L?�;�l�Iz�_��_��!ն���qᴌ�3F�|gR?N1�셨0.ld�2��KS6���8m�<�p���1Е �w��IBC�!��zBEʎ>��8�c*U1%j�dyӜ�7�t��4K.�J�~gmԙ���a����G-_���26�"�6�#�궞)G��4Cۍ�9x� �*�p�Ɯۮ� uΌD_�G:�T����X�]!�p��/#:�m�8��4�?gO��}+�RFA���@�?Lq����� ,�F�g�����_�A��� � d�� �w���EpT6F>�+���uc-{��@��l�M��Ki�\��0�����L�`L�2�ma�_���K��o(ʂґ�h��Fz�' 6�]V��{��:�� z�S���}�ʹ���~� ��V�-):£�f��|��[���/Y$�54W�1�e)DF`C��6��L��N]�MȮ�L��iQ8��g8�z�Io�<���l�|�~��W��Pn�4�PH�!�7䀴e�$L档`=b�B�gOj6����Y��Vf�f!��Ͳ�~U��fzH*F�!�5t�.j�gD�V?�ZB����UK��I�f=�e0H3��ЦJ�v�u�G9Z7e�]6��ʖp����GNr��X~X���C�+�uH-K�|Zq)�$n�<7 l�=���h�����<���jZR5���t�����ً�"b?�<��1<�0�o�Ц`h�:�����4��3�NS��љ5��s((E�5�t��)��|��a��(�8<�%��<���������I*b�4Ft������r!@��?T�!�� �w��lA�q�(Q{��Ja��,F��O��I��0c*�`�7�I!�H�q#�2�'o�1+ؙe4���X�m���b�K�2���]���=��X�3�� �d:��-L� t`���OL��+D`�!7a�#�唴5�1F�Μ��Jk-oi'R�>�����4���E�I0�` ��&gɌDpq�Hz�'{2�I��0�:1�H3#���ҏ:�i�֩,�� $��&���g�B� !�id�{< a�H$I���$AGAR�c ��J�3�,6���#�Db�T&W(Uj�V�7M�l������� �Bc�8<�H"S�4:��bs�<�@(K�-,��ml���2�B�Rk�:����������������N�Ͱ/�����n����Q��Y^�Uݴ]?�Ӽ��~����ϊUk�mشe�Ny�,CT��3�k�Ť���+�I��e��95ʆ����17����wiQ������t���L�e;�H��n��L�e;�H��i�� qRw(�oَ�'��n(�oَ�' ��[2���������������YDDDDDDD���F���[��z��`��-�b�,��_��Q��}�p��1^��EF\���B��i1�Ql�,�A�����Z��<9 ����.�Z����AH��I��ag���m�Z��M�iK�<��3�M1�aI��y\��1���2r`�j}C^��]=�`�Gk��uhj)����ke�A���uL+�ېU�*F쵼Rz)��)�r�MZ��L#H�����D�H�h�D�mp��- ʳ-�'i#�6��n��qTG�s���"�a�Ԫ��b�]%_ y�"��x�\ ���� �8����@�&���f.t8N�������YD:�ը�z��S��C�b���wq��A���B��E�۾������Qj0xP�4��,�;�6}g��\��RH��GA��0UoҊ�_�<�!V=�^< 9�É���?�T���8����)����F����czb{���m:�1�4(Ng�{ j%���X�l��Ktheme-joomla/assets/fonts/opensans-aa375dd2.woff2000064400000022170151666572130015601 0ustar00wOF2$xAx$L� �`?STAT^|�| � �t�\�P6$� �x�r�Z;%�!�<@B���E�q���A�_�RS�K��N ��v1G�H����͎rJ���,�;��� �F���J�ze$�CH-�~�q�:�?b�OKQ:��n�.�唣��@3;!�l����ޢV��� �F� mF&8 ��u@�)XfRT@?�'M�>e��R���֓��̆t�/�� O����P�0сQX�l�Q�a&�0s�Άa�����&*&FOQ�F�h�\T��z�Ͻ�[;99�;��;�,M���J�cp�ԛ��~3��MT�\��[)@H�0��~�����Iڵ�P���\]~�`�-Q����g�Ј�@A�7u���,<���8j��.���A��`h �{m���徳Y�ҫ�g.@ð�^�4t�"�XΒ/coh����"�bu��tB���y�<�#l�Z��[�tvGz�c�W��P�,8������̬�F+�G�u�����+�kR����K���R�_Ji�%�|�x�����E_�4�!�H��4fր�R�5�!�Hh�,W������ 4�]>h�D�XmX���m2ϝ��HVo�BR��.~�<�#��J?��q�f��1: ����ާ�� ���_p�q���h@��<s�:��&�� �s5��9������2���E�ݩ�{�R��0�����f\"||����<��G3�A@� �i��^y➛.;븃�X2ChH�v�j�"��t(���![W- ��¿XBRJY[� �!t��@Y���7�f�nU�bZ��n�YT'� ��H�S�\F��- ��HR �$+���wT�,n?y�H��ښ�:P,��o]�Y �g�mD�O�:�a4���Q�vÀ�I;�*p�R(Џ����U���>�Wb*P��:�O��?bP?�E��^� ��@�1(*�j��~#S��r?�3��yh3��������� ��b�`+�M@8�~�Cj_�~�i>�������0�n�5���������%�a��s�{(ς�z�2���W+��L��.(8�N ���9�0:lٽD�IRm��|�9�����8zrl���qϋ������^�<G畿s��~�Yw�mݲ4CR�I1��� Oh��w}��ߤ��[~&"��*�4�� j1��|N�S�G�f� �i O��>�R�SBw��2w�ݺ ��)�ThF�j� i�U����-4jڼJ���AW�FK=}W���s>(P�?xe�]��>:�,� L�^�]����*^eEyYi ����S�k'��d�i��ܜ�LJ9��������J$���w�L����ѳIMƝ��sMM��'ω��̠��g?�f2���6�i6���~2줜�[�P)�b�Of����\��r 饛4��@YMp.��%= zaЋ�dtK=�Y��u�W?[d?縞9F;c�v��N���s8���Q�M��-.��?��� dq۱(�5�Dɖ��fj�x��07����� 9W4Gt���V3�c���}�e_n�X!���BH�o�x��T�P�ɫ������u��J+�Gj��3��!d(���e8���QŜ}��n�� ���6f��c��ȟR��8�~ɻ����_#l�L*:����ooE�����V�i�`TP设�Wp����>�q�n7ߦ��E��q\{��"� �4�%LQڀ_Xֆ��ݭ�F�\u���Mt�ӲЋqڙH6�SMD��XԜ�$�i5No�0;�r߯4���H�mהö��v(�˹��Z8yy��F�6���G$uL�o#L۔�=P\I� �d��=���O�� ��>��l�9��m9��q�'�&�"\˺��d�����*_ER��NŅm(���F�.L�]����x���sB�b�u���%@��y��T���h�w���?���A��iɷ�w[��N����D��|b����"Qϛ��F��|�5c�=Ŷ\��6t������̷ �v�f�;6 � _��� �<��]HgMM�~�jno;|���ƌ���P�I��o�x�3 %^��2�NZ���d7�8p��QI8/�1�tg�e"�a�[��x�z7ywW^%=���e:��¹M�Y����$H_4��5���bm�fɸ�bc��g�}�ԩt0WTy� �}�Z�8�x}a��k��Z���MxA(ṍ�`���m�A�krT�[2|�S�d�ky;J�Okm��=��&����f�x�n >X��f�hw"z-�����Nݜ����+�Mۑ���$P?,�G=zoQ�H��̥�Tj�F$ ��e�}&���� 8��-Z���DqEѿI�ݻ4M��|�G�a���3��So�"p�F X���%����0>n��0ФMW�����B֠�2�á�ǎ���h�U�]� �v��v�Ն������}���E?5_��CI�U �IH��K]%@��4��/�NoV$� UO�F�g�u�R��'������ ܰ�z�l��o�W\�xJ����u� �~$��@jM+IO�wI$:��op��VF� o:�2����W(��J�ո�H�R�m��M"wM�coA5)B�X1t�6� �xi-)��V�'�z�_���E��L�Ӣ�g�`���g��Ӓ[$'�r������A�H"��/�@< ?�d���}�%b`#�Ö��p�8J���p6� �h��y�\AhM���^x���]B.#��f��ԺE��ќ�r�Kg=F�~�a��� >D����j-�0�?v`����מ6�r�7��Xv�sg����J�u��3�־�6����]��檏��;= �Y��<�$��|'N�D�B��͘�y�'�X�SJ�*�3z,�[+�r�{E�Z��B�A۷���k3�o�,�%�0�{�B:&�yIj6?tJ����YxLꘂo`������?L��/L(� ��_�����v����/9���N�5UY�NL$/⋒Tmv��y�D�@:X�t�F��Gd]`G��+�{1��NTmX�o҅pI��[r� O�5�gi�D���������̿j�̌c�j �|nj�46b*y@�bnXN�(^By��_&�Eb(q���X#5�A�[YJ��M�3FZ��(��������a��Z�:�dk O_������jt>x�1e�w�Q ^�f�����-B+�KcO� +e������k������?T��� �< #�Lo�����GO��ѦĤ��T�$Tl[���.6z�����Z;�M:�z0]C�����L1u�uK^�a�pk�S�cQ�g�Vt��M�V� C,���a���3,�W��F�E�KX^��eY�\��"̥��&�FV��x�F�RX�5���~��Q>��� ��+omW?����P����"�z�b T�z~^��]wi݀�Vz�:�.o�P��^%��RG�v�N�,�d�c�G8��m�,m^��v�bW��K��IU���7NIq�Ya��*��+�`�H�.ǔ��� ��R��^�LW꒯Z�oP�1�F�$R�(��o!�t5�����l%{*�m�r��x�o�S}J��X�(D4a|����R#WO�%0#3^G��2�6�jr�o]WOճ�RK'�ӑq^��$�}% FCׁ���gL�Vv��o}�7���9�S:v�X��j4�Q�Y]z��2���l#RH��a>����_���Z����uh��-�.?n�k��9��_˯ �ҵV��Дї���,'B �c�i¾�����]�c�w�@���݅Q up�`�'B�|��{$jz�잶*�U�vz��ĕ��#�n�9��rL�^H����Ȇ�Fܿ��sc- 6?���^~�v�=7�y�5Ou�r��,��?�v@6�=� 9����](�I��;7Г��""mS�����@�s9��rj�j��s ��o�}�m�!v���wNQy�+��]��ߧ���D���.W�]+aa�q�k_,q���>'[<q�l,;:���x��9nΠ�W��F狱s�bpX������l�K3[O���Z�_�!:��]ߥNT��5{^Q%PV=�U]�(�,�'��Pk��>M�);�y������ڤo�=6�U�g�x�"X����Fr{�O+�0-�(�ET@i�&0NC�8#�����6\�v�a�E�Oa9ځ����7%����spS��ai��������d�Ñj��O`]?GI���O�cvc���%�`�^�!�����"U'O��m�O��M=�Z�{�a����?�|=K�Jt�OQX�y���nk6BM��]Lt֔��-y��O)o���u��jZ��f��iPE�xΪt���]����}rq���c{��o���3K��l�+k�5�?��~u�*��0��A�k��*[׃v拃x��k5+��'�~����MG�2{�5��h���Ub�RX��U����&��v^&ƶ��o�FƉ���F��~�x|�V��ZbP�ihT�n"���8���(<^UZ[^ܔ�T�m��<=L:I��\�]�/�I ��0'M���x:7t�5)*���s��-��v/VT1���P�߆Y������P��(;{��h#jhS����P�!�jU���C[�<R�WË��c��F����ܶ����d��L�H�Z�p�vf������ekYJ� ���j*�AFtd���L#Z��ӵ�w����9m��m���|A� ��p�M�>��-E|�k�}˦s]���h@�i�6+�B0��8�[y)�Բ�sw�籖�OI�Ǔ�W��S��ݏ�S����������K�L��/(I�N��~bm=;EI\+�DϝL1Hz.~��~���c����� |��9OEy�3'"z�A�1���˟ �o�]��r����bI\m�`W�oۑȿ}g�M�G�ݲ�59��q>;�e���p_Gr^�)B"�s��Y빧I�j���ގ�ׯ�ݨ�;�]GS��h�H��{�ބ��i)�� ���@e���B���Y��r�Ιr~�\�&|Uu��� ;��'��GM����4R|�.��>��#�_����d-��sc�}i�M�Ý�e��f^+x-?d����+��s��Bu�cf?G�X�H�Ӥp��$5S�z� �P��S��ԄhG'"'�����Nj9���0{�e��o��;~����d�x��/�^Ǫ�$횮O ni%d䴇1��u/�ֶe7Z`�}��«�"i3�H��y��Wj�H:��:y��I�e�| X�D�v��~�IRii81QDlCb�b�z��e]� ��(�l�� ���qug�SOn�2�\��d��ſ��V�Y�ܾ�Tu�J�&F�"=�b><f�I<6]WTSQ�;�k��C����1� �2����7I��}�>s6Ii��g��zC���X���m-̪�A����hW�hw�j��KSBȑ�����0�m�[�G�]\��BR���U�3Mr6�Ք��~㒳��q[� s��-i����n�N�Z`����K72P:E?�z��Bcv�����$��a�.�Q���^%X}��2i���^��>K���*w�ׅ����˦K���Z������3Պ���1с}�^�$d��k��R��D�7��{�璘�M.���ʽcvx�6����a��e��\�o;#�'�k1i����6���Z9{�~��K}Qc�7ng�-!�U�PO*�[y~���ڤ��V���4�`�s�A�1�.�<G%J���v[��z[����[�x��V���<w�yS���c�����o��j+�5�s*�d8�)����0|�L'�o����=������VUj��AUY<]��=V��?741��O�>gB���)?���RTu/� "%>h$��Ťé{&�/T'}9����o�l��T�<>�V����UNσOg���V�.� ����B��2u�: =�'��}�M�/[����=f�TO�dDw+epI�)n�.�'�A��F%n���@�Y(���r��d�Y?��F~���������Ȫ�q 5��I[���@��x�D�%��9Ñ�D e��dT��~\s2�x�6�0G{�ӢYҔg�;l�\��llּ���D[�xz�S���G�a^-[O�����O�]ĻJ - <5 �ao��3��MYM����2��|�\�V�H-ԯ�lT��c*�B��˖gy$����������j�Ah �9���=fmblB��}�?A̸OŰ�n�.�s��}��A�zk?�����U��8��c/�I�Y��5�:��߆!��:��}Q�E�e��dT��A\s2u��ϑ(��8:H5��˷�A�s1E+��M'u�:=|:ڶ ��3gW��H�I�a+�6��-U/��z�}�>��`uk�}�HI���?�84��j��PH\C��l�F;�;�H�)=�D�$���&���q#��c M�������6�D�㖪+���U��;�L��-1��1�R�ː1IP`:T6H �8LH��d�����e��0&I�X�8�a��4�O��U���ꨦ�6�RG= 4�D+Z���Ԙ��v\F*f�f�;�gC L��"�~���;NB��L%�o�7�3t���u�e�7p�23]�D�W�8�����]��9��w��� ٠yPBN ����*m�xw�9qh��6��V";s�K�ti�7� ~���Gr��߿�p��P!c�$t�2��̦;�o����u��P��;��8R��c�v�&sxG�~W��.vz6�z�P-o=i2Z/j�$�)��t��I����mn]�(ȅ�#a�u@�����<��"~���3Ƕ�$���Kj�����V;ۚQD�@�5�|y ����c1��<�G��<+� �#��&i 5.}�Jp[I�� �j[!����~K�,�A�xt����<�q[U���0�]k�B9�`a�%��xo�U�������ܡ�TƇ����V���sۨ �� 9M;\b���R� �� �����{�U�N��J&VX����ge�+.��ǵ]ܔ$ ձ9X�O�d�(8��I��Mxw]�r�pT� r�ɬ�~���=���m�iq�Bey�+<͗U��֩s�n�n��kE�hx��)e�����<)�lv=�v��V�~�{D�CH�l�sή\��Z#"0�ӗFG��z��B^�_ci&�V���/�h����3�����u/�U��֠=N�`���M�*h����[s��!j6���r�7x�E|��(kҵ]E@���Q�=�sG&�{�i�xiR�|�e��g�~4�X#h�2̻Յ��I��R&i�+�����2�J�5��|�?G�/����2*1�1��F���*�I���$�7GM�0 ��PZ}�9��:pTy� �¸��xJx�Y�8f��g�M��=�z:��B��ix�1UG���:�nEI�X�)";��]l(���FڭI����Z�nF���и�����sp�5�,}~������(������1@�Ϝ�K�W�o�za�z��t�z���7�(+�ׯ�]y;�8�Ez\��G��˂�y� �D-��A���/4u�y^r���ʐ��{N.W��_9 ��㾠p��j�`]o' �i�� �����?/y����8��ܿ÷�A�������9������ϗ�|����+m��9�� �7�����j��6�RN���� wU���YK�+n]���I�I�8o�i��=�h��rL�%S�n��]�l<c���y��_�ھ�W���#����`�f]LA�}il]&���fqؐ)�̻�T*j{"wSO}�1���W04�L�c�$�`�Pi��]@�۹�`i�::�I�k���C���r�U���{���1��2��?�����s���d��A�{X �S_����v��=E�'^�2=<W J����=��g� BqO���xp����^�E��5ؒ�� �q9�3�z�`� 0�e�6f��Y����ʓ*�?�T������Q1T�U�[*�)rUЬ��W�`�(f$a���1Un�E�/K���%�����J2(�W����WQ�~�lo%�*{/�Q����"<������Ӓ��j��{D��D(����S�HB���c�4�i��RQ�`H�Ғ!m��zSL�2�ڠ�,2��(h>n���C �hFLY��;����6n�mxb3E*m�����`qx��������Id �Fg0Yl��Eb�T&W(Uj�V�7D/B0�b8ARit���py�҇��W�SW�䋶S�7���k���)�8�s�˭z�ѿ�Nݢ���W��ΌN���L���,X�T�Y���7��١1�F���d��B���|�ੳ����Uz�W��L1H���4��BK]X(��:�)�`�ɦ8K���bn���g槮*cj��4n��p���,?a2O�(��?R閎���:������Q��*���nG:��<`^hfӛ��,�7��\bI��Ι���)��%�7����r#�~v�kݦ_[u��l��/�� �$���ˏ�a<�m�ko�.�a�Ә���3z�G+��fy�I���j,'e�q^VHAf�%d #Ăq�E{Hi���6�G��GX�ߓ�;c��ƻ�s{b] b����E9����EX6��0+/�,C4����i6P�4/����rb8�b�h����+��oX/X�S�����<����)��7���<dv��B���)�]aDh�~�v� �׃�@a�q�����AW8��W|..B��\�z�Ow���v�KW�]��^>]U_��N�J~��+�7�����U���*����㼖��M��W��/8P�J����˥U#/��_:,Ve�����N6)T3�t_���E��2=`�/mD�.���o��?��_���ٔqVo���yY}�2I�+$�N�Z� d��kY�?�'�<theme-joomla/assets/fonts/robotomono-68e9c833.woff2000064400000032644151666572130016041 0ustar00wOF25�ht5I4`?STATH� ��(��K�Z6$�Z �X�d�S�%�q�mo�H���\D���_�cB�UHDb�r��Hetx�à� �K ;�4h��w`j���("x�3�I%zt���+��q���+R?�)�[�g�T�>�0�8��}�;<̭���6�F�Y2�e0*G ��,g3�BO=L���~�j��9K��]IAb�͟d<�$y饓� 8��)�@���6ə��.�7�0��R� R#�����/�Aك���~��e�AK��`^�|���R@7�rq����/R���ϥI�?�&d������#���&�V�7���~���"�N�L�*�D���o{�m�Q��~�=E�-[��K��f]n�@��5?�E�n��]�T+{j{���fv�A6�g�f����$K��B�Ť�ZEj9�$����U,|���uִږ���kug����y��=�Hm��pM��TIm#���b�݃�o��D���e~j�d� A�NO=�[�x]n+%��z�r:7Nj��&���`.�#��A��z] �ߺ�b���@0��-A/w����M ��Zdz�����{41u�G���G�3`�M=�@6~������. ���}TC����b��!�|���p�����59�'j"]�ǯ)(��W�qC�MhӚm�u��ý^�O���g��H�r�Z+��*���Uo��/�a��ey}29=y�9?Ըi����3)�G�$�ʑ���〩iAă�wtJerEWwjړ���g<x8/sf������G���/�������=��|���굒Ҳ;��n�]W�{����gϯ�x�f��;w���M�<uz~������0���P �������g�� �w��&��&�2Ϳ&�u�)�d�����>�H��hx�@4ǐ�_��gO|n5�;J��cg���C�}{p���p�� g6�������A.�&o:Q쬠p�����L܅[�z����l��Y���=�^l`��RR�E#c혰� ��u߆Ñ� %�%zi��&�*-x��k���O��\Ga�:�q굅ź�����1N�p5����u�����X.4��=~>z�$��[���+.��@?��Ps�{E[����UR� &Ԍ�m2�l���NMN��M�k�i�H�דּ�ߢ�`��i�<I�=K�/p�>goI�Y^�X�7jz[oD��f$Tଃa�ǡ�t|�ϻ��v;6;�e^��9j�E�(LI���fE��j�mv�d[�dg˲�ҹ�����}}.��E��,¯� �LJ�͎p8��Fc\aڦ�� �>9?�D�������A��,�:e�L.�2l�\^W�(���Y_\�S�ϸE�b,�?k�2�֟���M>�>ϼK��ɱ'{\P$��T{-ٜ&xÈV��_��;8�� �������L�'m�@� }zl�*@��`�5�Z�"&g� �8��س;�t �����S��)6��X�;�s �s��-vj�z��N�����x7�%�m.�8�(̰�K��e��Uz��$�u� ���i�,g�<�D��ôFg�L��:8��r�=��j��Lv��Ɔ;�"��G ��w/iZ�ٳߺə�_���oP� sC����a��7���3�-�@�����U>`~G��]�P�9�Ԝ406��n���].c�9>A���q����e��<�1�`Zo�>��,<�3]�9�iRcCs�J�6��%_��P����n�q9��8���{��M������`xҦQ[�Pb��$%�~NIc�$mf��*<�SH�T��n���~=��P�}h4�}N�^R��Xv�ޞ�Y � �&��u�6B��RU)�͋�1���D��� ��N�n���h{ �>a����Z�3`@���h�`��WثPy�� k(�c#bl'��xn�>��l��yi&��k�̙*XP��J�Z���S�������)Qu9&�%ZW�z�����ž"2l7�i�-�'��jSW�X���ȝk��i�zxY�&_[�6a�,�_��m�{��ZŊ�G��B�S���q�����d�\ Q�K��dw)�lV�zb&F�-b:�=�|Z�'p�<|@e��;T��#G����i�~�}q-��Ij�T�d2�.�+��1e�Xm��r�� 3L�)N�Ե��NՌ�d/z�V:�`�~� 02*�=�Ld��sq��)ϓ���籇��H���x��.t�:�Q��(�DZ����\7lwF�a*�>ꈎ�:�"� k6�r�����mm��/9�C|�ð6;e���n�naZؐȓ��i5,N�9v��6���}��I�6Q�t��6E�EU4���[-�TĔ������= �7��=�yT�E3.��<�� =�_AKH��K��uy����P�p}����V������H]���ӹ�~U��f��4ł+%z���C�F��.����S�3 �J2Po��N$俳�iۑΏ��K�t:+E���[��7d�� �]���[��p����B� 8�-?^�@�C1���ʍ&fp48��V���{����}�d�Ihs��SRz R^D}���G��yz|trN�ߣ{�cȽӱr���r:+���<��d�&G��Ҥץ�:s��H�ۢک2����s���P;���&�� ӹ����h.xs�N�P��ܽD��-Z��h�9��(x�|�I���jQ]��7=x�`����@&���e�w���>c��ƀ<���/ML̮p�@�3w��#B*^G�����IJ����dt?677^Sae0�K�u�yƊ����Bk��'�º,?HjH�3���� ��1�Μ(�^��Fa�6b��|�g�3LzD߶7�����}=:����#��Ĕ�9�.�B��.m��%�I���)(�=?�f�RV�N$��"�Kv!���#ޛH&�=B�|rKf���Y��a: �ƹ��·�Q�}�(����i"��G�8�|F� FC�f,!C�͑eb����Ci0�N�HM�㥉u���d �r|v��TV,n�Z�%�9�$ng���Q�R�e�C���`B�L�'�n�#?Yi"+uRV(�� k4�mfr dp#���%�2F�02_6�~��f�0�X`[NHCu:��0b�*�\d$Ct�^�Sf�����H�ʬ2b$���)�S���8�,���\�"�85m/�<s95�b��T��Ҷ��X��e�Ң| 4����.d���[��Dj���&ل?mul���v�mG�����g��-���@� �%Kn(�? �B7O�5�{�u��N��Zr&�hy*"���)O�Ѧ0�{��ˡEd�]zz�/��`9vQ�����EE��T;��H���|D�*rD�9��4^�`�ex!�`a�m_�9��B W��'gT �ZW]3���&*/�~�J�$���?�Iz�j�UL-BY]��� ,�1�oQⓚGôM]!�S[wG��<d�P�Yѱkv�2y4LvÌ+�8��(�,�D�T��#�b陰-n�ݽT� Ɲ^qܖ0�ө����o����Y0�>��iQ��[��N1.f�>�-�F��S����e6��5������p�M�����X� #<������*⃣�@�����0H�. q=A�A�u�B6�2�UFO1�-��ܕ��NpWP�=k߬�&3��Sۑ�'��%�����L�\#爀>���Z�|A��/N� )�i����yq�N���jF.ٕ�dF���0`F7i3�FbE$�B���B�ϸ�}�Q��)'����[�e8smY 7��W%+�Q��\c�� 3�����i� wܟ,� �:Q��z����Q���+D�f�K� ��d�Ƞ�����L�˧IGX�ڬ&`�Vڲ���f���1\�B�����&i�X[8u���mtF#F�{�X,��=��ͭR�,��i q}���^������So[Y�b�D�����L/����V�[��rB�F���"QL�>.��8y�a�7¡�W�5U��zC,��~��.} ݕ|���a��G�?����/x�!��o����N�~v%�i�����xZ���G�Ͻ��w?!����i�����̮���'���>��mWG�y6�� %�Z/�\?l�P*d�"�\�%K��W/mt��l�˗�,13�,�1 J���h��}pTX��ж>�.EH�C �o �>���m�����o�E��6in�P`�EC砀���tc�dls�f`���'l�ؔQ����^���)��(r�v�˔��[/����@��FO9\ݴxq;5����B�������c(��q�b�|8}�ajU9����ggS�,*�E�}�Ҧ�d��MūYz�--��,?[6|y˺�$N�6�0����D��ζ��J�ۆht��TܝF�u�x�6��%�jN; �糿� V���K��)Yȭ������&"8!�PVָH��K��)| �/�9E̬������p�^*�?�}%���ر."�����`4���M�2�aIR���j��#�Vs���� �!%�����ޭ�B5�G�B�a����䒰3a�Pő���!��S��@���O�T�C��ku���#����'b �+w3`���gi7�pdA��K��Q�k�2�:�>'�����ˈ, dz��A���E�����`�V��1�aԙ��aq�A����c�5�8B"����\�<)��$'"a[/I�==��+[WW�%���|�φ�g:%p*��*J�5�,en05ma$���f"�'�Ո������t�➨�k ��rċ��R���(|g^b%?2R�ϳ��(��$1O�SEV�@e]P��9��6��M^G^7��K��Ay9K��f�b�\u;����d���1�w�P��C�3Y��w�X�Q}.p��i�٘1f8ߠa�w�/�!�Ap Iw�CH]�#��a����mL)��I��o<yU��f=��5$�ç�4\�S����B�W&�o��u��`�7���^^� �j��#!TDH�)RF��������u�ȩ>�|M�R]��ò�@���n}�U��K�V�M��٣�����8@p�R.p3qR�w�,���s S�/QS��%�S}!��ѱ[Z� Ƣ�RAD����s�@z,��oi���e�Y{�K��*XJ6\<�@�Kt�QWA�!�K �u����s>�T�����B�^�K 1�P�78~N��ٍT�.[���W���Qbm+���d���d����-��[������`�f�0p��u㵴dΛ_ލ�yƼڰ�>��N9�JlgX )ۼ�õ��h�ZZ�s[�u�v�Ȃ�g��N Bg'�"��A]-�����%Y{(ߛ K@��H����JxR�b<��Au3~x���#�so���лx�5_���{����BY��O�E�,#��%�V��UV�Hk�I���4@��w���^b�����3�R��k��m�6^\`;Z�R3��s�ô9��9ȷ���� 2G��r��ۯfo�no?�.��v��m�ٗS-�GZArOy�&i�4�0#��,Gʎ`Eoȏ��?�K�h��(V5��� E�����8�Q��7��f�-i*�����.%ep��D;��?TV�� L� M�T���t���&b���<<,������\F3#��Z�!�+Y��$� �:�$Q���@��(_:.�� bH��yA���wq\�oOw�ֻ��-�tĉ��kh�p��9}}8�����5�Q�{2.8�e�"��B={'��gde���ӌ��'%I��kf'ϳ[���L���n���dm����h�N�sT��ծY� ��ںH'��A�p��G{�e5��*�R6�L�L6���>L5e{�a�p�p�1%a�RQB�F��(�e<�?O��74Q�ji�V|�$4��̓U܉������c�s���'CNO�;93#<�� �5�E�v �(5;g��7Y���� �m:c+)q�����bN�.�7���(�������\���Ռ��-E>;�S�y��=�g���L<���&��r���T1��s����q����l��O��ȸj��KF��2�p!�+&��}�X�"(��d�]����^l����qk�� ���N$��k<pg���uF�+@�gf�\��+@z`�߹����O �ٿ��%�h���1TZx�1$?l�k�f���NG�C+�m\k�"���.��RZ�Խ�I��Fn���.�Vp���8'~�\�E����1U��tߪy�{�|Bc�����3x�I�8ᚭÛC4�O$�<9�l ��wvy$O&-N��=}]�Ln�QU��L4��0��^�u&�ӳk.�=��;y߀�����=猻�¿�con,yaQQ EDV���t�����`jPs-�����N<��A��]��*�99�p�Mo"<kn�;H�s�?����E��o����O�x��<��RJCa_�P��B�Quj�s*�/0��j��X�~!}�,�^�37�s�������:�8~�8��w���֝yM�tsW�J�?��;h���2Y�z���upC��E�f�up=<�i���^����t�zo7�d����Ƅ���D4:Eﳩ�kAh�5=j&�ڀU��>Gzc'9i�¯����# �-�U9K'l2M:��\�`���5*fI_P�'��c�^�_��k�v'½�q1�2�#LM;f���q��az�p��H�q�}�8el�!2`n��O:���nD���kH+}��&�U�1�1-���xs��1W�a��i���vzsG���i��ޛ�6=��j�>|��qW&w�ͪ��F���9���o��74��A�q4�%&Y&t��-5.�� ]��]c�F�����_7���(��4q��FK6���⬓ӣYPh�'rN�rϓ�dG'��$��r��E��^�o뢅���)���TfRKk"���;�'� c���e��p[��Yr��4�DF�=�� |��)qL�xS!��W�d`��M�"K��$7L�Ϣ7�E= f���^$w@��nl�"T^{D��v�a��ʻ�dO$��^�{5��h�@B��YN��=��i�_����;ŕ�yHMY�;A�YӴI�t�3ycaYs� ����f_V��xZ3�7_���OAR����x_�b3Xᘢ�w�Œ�� Y .*�'1w��������C�?>�~u�(�v_�������r=l �j�ID�*��N+>$f�8l&3�֍b�R�;�{�m�SI|P�������ћ�"�Cr�%�o��J�Vw������m��4�ꔓl)Z.��.N.�����9�` =/������(0=�o��(�LD���^�2#����3��LBi��(b���I�u�a�s��aG�av]J���8��*��wx��<��Y���%{��X��N6szK� �C���#�=�� ���*�Q�� (��%R�'��zR��� ���D^!����xUf]���ޘ�YWɨ2k݅�va0�n]��Y��~jp �b�杶����p�,\����!���� e3����5�x^>?.1a~A���.��.'�띺�7{a��]m�1{�)���r�j�h��L>���N��L�x 6��F^@l�����#��s`�q�u��؊_�X���E4O4[o}���w�+����߫G���֭^c:c�'7�#&MOx�it�_����iʷ�<P��=��g����n����%�%�_���3I���۪hRz��w�;�_�(��j�6��@��|��, (���*'�ڃ7O��)�kj��b��pۙ�^. �����UD9��;%�� �3�ת!xG����z�3�c�i�Q��E��G���)�@� ['m^�כt7��iK�hv��ݍ�F� ��}�.MCyYcI���,w}�U�v��?�4ST균��,�A���w���սb9{��"1�`&�\�CfK�,&Ŷ��z�����T�õ���b.����fᎅ(P<G��� �z3�53��莴�MsƆ+����D�~}�F�{s�(��|���{�_���ͽr�J��X����sl7u����!�%�xc�L��w\륽�zy���ۚ���s`�07�V��E�4y��*��飙��v���UJi1]�o c�p�UZ��LwDÏ��K�-�Z/�;VTj[~-y��b"�"%K0-DB�X�L��w�$��q�k��C�"�^ѱ��`z���)Cک�g_R�_-A���z�9���,��5U�KԀ��}�!>v�����(F�����O^���r5T�����F\y;5wj� DD�z��B�:Qä�҅)Nɺ��\$?� ��f����W��+�C���%�1�`0";Ƒbu����U��ظ�C�覝:��f�L���@����Ǒb�w: h�½�J�� �6��H�F�f�z�p�j�FSk�ܰJ�yYi̾_�)٪Fy�M�n�&��H� ?{q��ż���YY��|q�$,�&{�,����t�륒��� t�lզ�B��K��Y�ۤ�8���X��W(��UU��Ƥ��"��z~�k=�Kƒm�)�8EI��� `w����x��m�c�Yr΅�U�2d�J�'u����m���̅�.�I��5@$Yx�7�k���^�P���vv.��tWd!�q�e+�f� ��~Ԛ�Y <P�=w��J��P� Bd�����]yN=y4M@i�V� �PI�1~�]�7n���!}�����yۛ���3[���Hz��L.���Τ^��N\N=�{&�u��Z��u?-y+>5�j�^�g �<�{��)���92��o_�3(�l����8t��Z9�-������+����3��,(��� n�O��h���%=~v�U�E�yA�!�����fg��O��w��l�$�w�]��;C b���_m6>�`'�_��2�sf^�*d �+ޱ!c���ԏ, ۻp�:A�š ^C~�6�N��!AmI�D!Q�S�d�Ha ������{66��v}��HS�����G�:�'�,�q'&��1�$�9G��[$vW�w��QqYm|�dYZ���S�>YdW�������zI��i1�,��x�D�]��f��dU���o-�Y^�u(�dz�ҩ�耀t��|��s������Ru�9Y����w(-T�Sȯ�6�Jh�o��l��x�x� �%>�'9Y�X��#������lQ�0o⮓��,BX��J`��VWIIi\1I�.��a�q��`.F�,]�VP�n�zD���V�V�օ6��z0�<�w�;��x���,?��Qƈ6c������g;���[�g��5��2�e��gƉ�E���t�e�@�����{�w ��`%f�ݜ&�o��$��G��'��o��VfD��Q�ӓ%� � �������W�n���yUS�$�K�C+���9�C�_��e�����|�T�!D�5OaT��Ϋ�ƿ�7�n ϑ���Md&�����6Ȋ�;y�k���i�YE@�+���z�剭!5�s��P�X4��RX2��y����R��k����4�Z[��:����-����A�͵λt�!�}���q%\q��eu!�A� ��B;0�m�y\w�n��KZ�ſD�z�`"�?F�Ʊ%��qߕA��>~��}6��4��$,�u]<����A�jhm|�b�����=p��F���B�����KU�����c�yp/&e��{On���l��R&۳ة���y)I�˥�mr����Y�B��'M� ����س;�n*j3J�Qd�|�i'�~�f �����G�S[��;G �N{� sģyR���BD(U��j�� ��W@��}���������IE��l>[6����t.R|�#��} jr@���U����%�Ձ>Ų�l���(����젉���`{�s��k��3�|H������Rz��۷��4�-w��o���tu%C&�as#$�T5\M�. ��:h��I< O=�LEOBR�ԵV���n��u�,,�7ff�o���^�ױU���q\skkUT���X��v������U��N^���`��i�K��@ao��~��rx����j��0�-�pWY�$���H��l�s����[kؠt��s?�?�lf_0͂qʋ�}x�m�� ef ��W�Y�ڠ�g�+?�/��&|/��jr$P,�`HF|���)���^��:�գ"? ��gc�kg<�� �|�uda�SaZ�X�B��Dk�� ��]��~2�$$w�4r^���a:�;�L���Y�WUP]r�%���0ui�B47��%����ĸ�9ޢT��R���)�w�A,*���z-<��AT$f$�and����n����w 7Z�^�����j|���Y�˝i1���D�R���[���eǸ�� #f���<�GGӕ"��3�y����1�]\�:\�� E���4�Ӷ��(�m�c�L[/�<3,ބh7�-�Ԃ�����:;Bm�i.���?|��ڷ5#2���`���}(�<��va��d��& �<����c"�{pe�&Z���%�H�V�f����y NE�����"��M%�`y;���T�r4��u.���^$��4ա������]��f`�;�BO���Y9�$� �}�˙⛔�y7$��1&D������G��n&q�sMLDŽ��Ν:)��`$b���'�u�Z �h�'�����-6�v���Ep�� '��G��'��`�3{)�5V��������N�"y/�:|�v�\{��5�=����}�%��xA6m�����}!�x��n/ۨ��P~箻^ �#�;�`����A�pN���z�Û��� 8eW�j�%��8k;ۼ��@��f7[��#�C�!�����R�!)@�/bI��R�(߸�og�ס��'}��k�|w����R!n��+�e�����f �uH�WDF��������b}?��>��j��iE�Q:RO}b�y@��d��/�)!�D�Ʌ�s�MI���B�bH"۾td���e�.Z�3� <N�mc���c�S���,ɤ_��kvv&y��Y�R����[$֔{Vs�nʟꏝ���+vϭ�J�Z��Fr$P� �n��ZXŬ�>���QC�+VH���~�N�4eCs?(�ˏ� eE��p��2$����F?m��r�8��x�,C*��w�W����5��r|j���T�@� ��k���`�e�G~�('��S(b���b2^�N�1��;F�B����zp"b�����A��=k'0s�]Q��ĩ���W��s���߾=us�y��|�B���8����G߃�f��BYdrv}HH?#K����bv���|<;vġ�J�w�ֿ�h�xS3�lu��]��_wk�`H���5V� �H�� ��EDTP�V��Q������q���ݠ�ޜb��<�?�h�p�9�~�A��Bc���]�����o���<���_R�A�a�Ď��t�~���n0�Ž�O��o�n�n��z?ѯ�=}Ӊ����Cŏ�9S�J��Z�l�s�64��b��r�8���@f���x���)�xE�!�"��`�L;��Dhs�v �)�����9�>���D�?�ب �i�g��Dg��ڳ9�r�Ma��a�,�Ps������䎃\}`K��'(��~� ����-���ۧb�i�3�"�)dEj9�I�l�J9x�2d����� �'�Cp�=�?���V#�a5l�#6������YЍ��O�n�`mm&P�3���B��uTL��ZM0���-�O}1���xO+ڔ�>Z;���}�T����n��~���3 U*,������uf�q��x@��F�&���E(��<�1�#����P,�dM'����j�`5~ �� Mw�����1��r��s�β��lj��@�4!��iʓ�Э�$+��H�)dh�q��0o���Fc�\� ^l�)p<�:����FvY 1>��Qo��v��p`�������6�>�O;�4j'�8sp��AEc���y�J����a�j.3-V�7f���b���f��c�j�m��,��Y����*�8J�3�U��%U�����<��(��J��<4N�2n1P�#ri 9d��?��s;��G�h8�N����T� ����A-��ڣ�(�ppȀ�����꜅T��^�_ؒ��pF���|���ne��=b�Ṡ�kN���ȧ�����m)�>��bڢ���߁e>߅��*�EI[5�e�#�G��3-���d�ʂ����ح�a���*��$�zZ�4�A1�}��A !�/����rI�ʂ�b:�Q�t�p�҈a��(Ю��2!-�Q�J�㒇�2�Ő�(� R�J��N�u�/��F�����Ѹ1[Q�)S�Z�t��Fu{���; U�Մ�e���#��+Wc�MT�J�՛A4�@�,p|)V*�!��Gcb��b���/վ ��!�����0��,A!���ҨS�2��8v֧�P)�nS� %��8����OQ~L� b0z�����M,��`�/M)�Gڱ�|��t3�f\��f��3��`�8Y��v;6�P��"w��U�T�2��)/QH+In��+�qK��V��E����1]�z�$��8�H��ͳ��H(�T�6�i�YN�8�N�x�o�7�3l���\���K��W�Q�Ķ��%F #9K�xrTd�h:�"��zN �$�,}���M�+�*���F�5���ϧdn��*��:�D� ����s��M�u�dx$~p�%AJF)V�t�6� p�A����ÔdE�tôl�|V�Z�næ-�v��Cc�8<�H"S�4��`��.�/���L�P����Bc�8<�H"S�4:��bs�<����������@(K�2�B�Rk�:���f������������>��Ͼ����~�����G Qh�'Id �Fg0Yl/��������������������������������~=�|�e���w����M��Ku��3�K���2^���f̔q�t3!��)@L<ʸ�J������� �ģ\�n!�n��G/V�q!u�f�r��p��z��2.���v��u���(����_�+�����o+�y�[��H���T�[D� �ģL ����GRic�@��Dž>��)���ج�l]�NO��ٻ\5�ӄEw��ɑ'*W�4�Kw{���i8theme-joomla/assets/fonts/opensans-ac6fcf45.woff2000064400000024664151666572130015702 0ustar00wOF2)�NX)O�j`?STATZ��| � �H��r6$�N �&�J�|E�!nBj���EQ�G��Oɍ!���Y 2��$�q�����.����4o��tpI?��T��l� �`������ُg��x�� .G��.�Z7d�������OZ��\��=��&��1�ۏ�6Ѫ�!��ͽB�3Ow�Dd��:3����_�5�LI�}�'8|��wg P�,�t�tN��k�(5@��s� *���0 Q�D� P����sV,�E�9�����}���^�i:�%�����q:c �Z�v����@���F��\�ݧ�_�:�`)�J%}�P�N'd*<�u�y�8���ޅQ+��`��Ɠb��8g݄T3���G�)��V)-a�d(� 5s1����R�A�w��C,gɗ�'4ņ�gn!O�S�����NH���?U�vV�ͼ˝��я{���9���\a��p��4%��U�DʁT&/�+J���K!U�ήn]�P��ku�e?���X�[$1�s����Q��I�1L�"��M���<ܻ��I����p�Q��x z8б=;D3(�p�&�}"�FFvz���U=��=*��9�I<x|؛��}��e4�?���A���v����C�Gٽ����?�Qɒ���:Ӏ���θ�U�1��9����m�т/�qӤ3��1�I�Ё��@�D�z)>��"E�6K��Yo1"&��º�������>G��6���&z=���,��k?�*in���7�#g�:jU����.�;Z��%@�?��W���@V`��:�3S��M�����=�� �����*�O��.�1ɉ����=F�LQ(�Ŀ͌��O�2�g3���s���%���jXr��b R����~�u=uV�ZS������u��g�Vǜf�K ���o���M�_����]�6����z��͏��Wi1�@�ajSZGf�����K� 4��QN0��tt 1�w���8���V� <u�4���ڤEG4�g`d&W�Y�>��jM��.���T��[�ȧR+��z�ݮJ�flX�wTG��kn���P_W����ҨU��e�J�\VR\TX��'͕�sDBAvV&?���YL��FM����ID> �(���97WGGj*���AvB�P7���G�Ǿ�2��ܶ�Ii)�{�@$ň ~V� G���\��M�Eˮ��3N/թY5]mn׆�5�M��f`���&c{�"������c�~�5����bC���.(�*Qs���[\!Jס�8 d��5��41\�� ��<���6az���M�ݦSU}�x���2A#���V���N�D����R!�]�L�[7pe��ZԋcK�S��T�;��a��Hi�q�(L�XND9u�^��y��*�\[Ɍ F�2�P*��H��O�A�3��/��*@�5�b�L��>b�7�h*.����K9�D���/�m=�O�+��1��H����k�L+�}�u%�EN�`��1"9?�x���0���A`����BC�p]�sR4����0C�{.:�7�wd��/����NԿ���Q�U*:2:E� 6eb6#���z��d< �UQ�H<�zhI�F��,�P��M�=�!ω���O�:$�<'�a2����9]�Q;Êk�k�Q�o�7/=��j���K�ԟӲ��<�ȴ� �~[���PL:퀬����DK��%@�Ϩ,�k����*�f�?/��i�-��ba�V��'��v[& ��{l�yve�<��}��ѪO� -Q�QxHaE��L��O�4,{K��/�,4�*dxT�$0�x�$wolJ�!��}Sw6�no"D���������K($��;�EB�e]�p9L ��a'.|�������J��J�J�{�c�M��� ���M�a�a-c���0��gA���,�Xӥ�8I�AQơ�>ˬ���cl �b/h�x�v�RaP'�� ��0jz�8�`�,�Љ�P,�N1m��F����+��4.Fa��:1��� \,T�Y\`3�RAr�I��>2�.x���"-�O�p���A��.�&�����LTĄ�(�i��y ��+�N���L?r�����$P7*���� �aiټ��H �:��is߁�D�i��<?���>c�#�b �h� ^�^%{]!(�&�%�S�TD�Q�h�� 6���GS�d�����V���>�H+�0Ys�vWCe���/��}9��2�?�HY��5v3\R�Z�haZ��4̥g���7�ى�q2,V��E�A� �3���@@lR����c���n�Ŀh���`z&T#����'Ր�������O�=A��r�ϛ�]��}'���/����AD��^eE�Q����p��(���t�u��%z'�4�vN2߇[\i� ��Iլ �g�3�ݕX�U��6� �.��xM��~�a4��(D.��(��/��\1%U�:#�g�`!�L���Qк�����j�,�uk��X��=��1#��C�&oLFyQS��}7 tT��;��]E�7���V�,�h�TQ�0�����}B!w��s��T����ABp��;=�Y�a�(�v�Dс�݄��7�������h�s�m�[�<���u��{�����q>�n�|o( �{���ߖ,}�U�;.����4�/�ID�X�>�������p�e|v��sA���g~e�?F�'p���x��_��U����n*��+���WM��w���?���0�!��p@��'��o�?�t����;��4M��������C]��K��1��s��[~1HeF��I/�S���A����\�w,�a���2��b/��+�<��o���h,��'�T q�r�傜c�7dح���-�BP��p@04! �*�rS-�#�c�q�l�/$�����%��6"\r���B�Z>IF�R ��F� t�z�_.�����?ć�MGڬ�y>�n��Υ�keԪ!ѳ��ު�g�X~�H5��M�mD{����`r�]E�f������I��.#ε��5��]c�r�;g7�\t"a��$��,�α��Õ������c�OF S�iw,-���5��'Po~`�Џ��3o����jܵE�'`W�p�NS_����K�[�K���R��r�p���L�aC��S�Р�v��<b���P� �i�e�Np:C�?���%!�YB�q���č�P̷�H��۷������ֿ�Pe�l��G5��H�, �ٓP�H�Q�$G��=Ife�����(Gѻs���v2�l����)��HH�2:��fRc_\".�к6s{��j�ÌE7�tˮ��oے6DV��x�ء̓��8_}�͂n䠐�DB�E�(u�B�mR�s�e�k���v� ����{����Bdw�Qvn3Ùs��3} ���nޜ?VF 4i�'�Qt��/2}��jM�Jtd���B��}� g�i��Z��3�5�g�!�>��U������s�)���^��0�g>����qv@��\H�b�c��S�xn����켞w��=�U0R�S|�GC��j���g�S $D.��7��e�{!dۊ�擓�R�$&&��9H����i��w�<Ȉ�v��]5�_{���_�T����"�N�0m�Q��U6�ީ�P�dn�_<���wL����J�i��^S�mB��c�H�a�a���W�G���!�:�5e4N�6����i=1�Sƒ�uM[��;�Y�CJD���ZqT �ƪүR�`j�{�!��O@(,v'd8Je4*��`Ȉ�Ó8���\��Hs9R�E�=���W#(*�%��0x���E�eةHx]�%'̍�ͅ�#w� Aô#C�!@�sg�\ڕNփiW:#�D��9�<5��<� ,��6� O��-�gI���w��A��$#��I�_�.���@��������ze y��g��ZU�.�(����)��ϽN�d ��X� sM_O�ӑ���v5����)7�B��Y�0C�����~��Δ�S����g�w���(0F�ڋ�ҡH����T݀���w�(- J~�����j�e:�IU�N���������Z(�^F7m-�?���f��YVX�ӼK�Z�tT��ZC�=�H��2_m�{g��!�����!�R����VƬK�\�f}���&�S&����pW�Yt����G��!������؇�jm��] ���+�9J_ʍ܇�9p��+����_��:�]�(n���xuk+��㉓�ϧ��:�F��ʒ�ߜ;�F^��-��cc�u����`�V\fw���]s���Z[T�:����W�d�� �C�-���7��G���]��|�O:�RQjgK�����#�Z���j����6��ۀ��ûU�h.`W��z�`tB!S%�$U���~�M��l0�|�Kz��o��q�� ����}�>���ޗk C|��z?��j�P�o*N)W�x�]���lIgE�U3�{1���$:t���XXA��ʓ_\�x�qt�Y�w�q�r~����-��FC�rR�|���%7:�K�_�St.u��&EK�P��SC��'ED����Q0}Ͽ�}s��熣=�wM{�R1��4B2���(dw 5U���9�;_yX-N�n*�"0rI\G���jJ�d7k����rpI�r2�1^��k�)�������6ׄ�H.�]� �o��#�q�y�_�.3 ��ʹ�;{g����,J�/��\�d�}���]��({�R�~q+��3T]�YŬJJ(�����$�0R[�_[�'�f�.����\3]��.9V��v����6y��T�L�2�[5&�[�M5��[Z��NV�I�=��o��|�k�+I�� -������,o�Z�.d�\������b{��U��:ۑ�>ó?�^�l�]�7m%�s:Ȇ�ߛ�$�̛>�Pwu�8qbǻgod��$��Z05��� ]��}}�>���\#���r�_�x��@���|����1*����|30���i?���U��&���=CSښ�B�t`�3���{ʜ`>/tO:Ӿ�t��n�!�{�q��E9�a�S@�d���iG���RO��:�S�2����B{��ݲ ��WL1ƭ��$��Dc��n n��o܆o����^� �����h�k�F {A���U���fc;��}@,�gg�ǯ�t���/�G����4��z�����l5qic���Rc_��F��y�-�?��x/mP�:��?�fE.�)yl�����7��)���?�Y�#�w�*qv3�)�+ F��]|ͫ<�Y��_'"��6Yg7I2~��\�mf�O�Ҏ�⮴�ל�MQ;mk=�Q?�P��Qܘ�D�>R�ޥ�(E��W���ߩ\�lO^� 涳�y>����F�t{e�\g����"�Z�����>�߷F�^~:xz��byOzҘb�&uE{���:����y��(��������u�W:�7tF���,��`�l�ud�Y�:��=��8d�eYs�3�8�V�Y�[ �x�Y֜�l�jh�}KO�m S�m��vٔ�MÂVW!�u(wH�MT���M�l�̃N�6&~{��oc�G0rJ���+��z��l�R�Q��a�W��ydr�(R�/І����T�;!~�6�#����U=��� u��5��0�Ə kV�������7�e\��j: 9�-�)M T�gK��5 ��.�_D��o�4��5��P���_iݣ���5�3��^�����=l������������������- �3�>�߹�*�K��C�C�s����N�n\B��=߫俏Ԭ�M�͟�pЗ�Q�����kZ>�?W�����dw�y�[�`m>�c?f9�9vJ~2!��==C(%Wo;}B��D�ɖ��?��wI���!�8z�DV"�����+�s��nIF_��6����eGܺ���F�J%Y�^�]�v:���c�cB9��ñ"LhJ�)�l23W$˕IJ�"�\&��|���1Fʝ�X1�I��gk�ns�.�����r� � ��h����PJ>�N�L#l�7��V�.��ac�x��I�,P�O��xc�O��+� �|���s??(wl4��xG�K_�-�I�����\�hs���/$��$�K� �(XU�M�ix�%8��A�W�3�l� �YƷGz���{ZWǫV.�����ZF��P�U���=]W�j�ErKW��5�7wM�����T���P��F,�Ts��kײ���t�1��B1�Z�H�lg%�h�7��,o�X��?f��:^���AJwM�B9[�����YA��7�c�Lo�a��#��vC�vT�7�.�xٝS�2R .��G��tgj�"}z�.����?'�l�)ǰ�4��[�3���fAM$8]�F�.���oR�BإbBbwqt���N#��X���0Qģ$x�����'�A��)��y_�M��l�s|f���nZ�x:y��ủ*���t�F;�����t����f�ڒ�jV�b5: ��ޭ��{�g��m�=o!t�c� h�^/��ppMH��R4�Y�>����Rg_�hi�n˵�V�@�i��A�4 p(�6�ۅ�߾� ��X|l��h�ti ���5w6Ѐ�*�ߖn��2�F�:�~���zrSP>0N��z/$������%�r!��N������<?������S�nl�Ð���ə�w�b� Cڲ"��B�][m�$��i�J�B���M�vY�)���t� �OF�<��x���Q��\�<)���.�+~팀�3�����8;#�U�֮iS�����aq*�0N#O���c�&&��tK�����Q?��� ��훩��DB\H 9)�)TV���Ǒ���Q�{��cN钲R�+U���2M� �C,�+����B6��NE��x�G�R���.�e~���d$фM�1q�?91l��i�ZB.87�E�ڃ�\'�8(�`u�ȬM��EOI�}k��������Ɣ��d�`q��q?��Cf{F9�h>���~j4�nU�a(y��ܸ�����^���G^љ9�/��T�瑠$��¼����>Vc�6!?8���h��߮��y��+��A@~���1֞�tbwuK�`m̹�zb�P����+��J���r�|j_c���C�-�wc�f� �G%�<4��������s�R�Z���ƙ�}�>w��cIN��>�J��`��6������3nr���?�<:85��ˏ�ON�c;z{\ ����t�:�`�߹���?Ë�I!Z�4�9i�����G��F ج��"�霎c4��xd>���N�&�S�N̻�&�H�s&��(}7�`\6�^D���:��t����ήƦ��}��4JBb1��̇�����v�y �sb�R���r�'N-��5���m�ۦ�X��g��(m�s$S ���I�g��8��������Ǜ\{�c���:e�{b�i�T�<�Z{��B6��-���{��ء����[]^�}�? ��'���3�y_\'��� ������ss�}����^�����S[,�ɪ5#N(��&�m����/=�S�w�!��[=t3�J{�R>����8�k.��W#��% �������^��2<s����ۿ���L�������)1!,翔3����Y4R�o9��$��bT�B�~��h�������<z���u&<��Ӿ�2m��C{֞�g�{���M�ewY{��=m��+��ݱ�v��Y^��~�P@$�:���V˾���6U�|:v�7���C���EB���Of�Z�6ޕq=1���w}���E�J�z���3ڊцS�ARk�o@G�PI�;�����e�C� �������G�K��/��VN��B��s�����l֖e����s��S\_��x�h��d'D���FF%'Jc��L|uJ}�~�4��&�w ��J+�!c]�Ѻ� �z4Ќ��X�J����ެ�Ӕz.�Nj��g��B9I� �n/�0?t�ڶ�f��'�����N�4lm��2:dQR�ZR�������5�k��z���d0D>��)4n-����"�~)�|�E��u`���'�I�3c(*�0LJH�(�$�E�O�Y���J�]���j��2�zQ���yc3��ӯu�a$�6����wU�#�9�צ�D8�ԙ��� #s� ��˱3���,5^J�XEì�i��=UH�a.�]�D�Ƹ�K_�� ��e(��[F�G��R�|��s Sz�K�����a��(*�^�~gʶ"/C��!���@�B�i5`���$��Zd�]��76��@�DT���y+�w,*�J�b>������H��^�ϼ��x����8A�$�^V�S^4 Ћn��1 3]hDZ�P�F!�g��U` ��V͍�.^��]]��Y����L�(�lh��Ձ�[��s�0(;�(��Bse�i�8���#�w欴`�ڠ�bj�X_ܛz�@��O=��$�W$�ie�ݱ�h�|^u�|��T�$�jc&�eE��Y �eVW�NeѶ����g)���D�266�'Q�V���¹�U2oy�D�NjlYf>�G�Om��4���`�ЅWMk�������E�*�ng��S({�d���@���]�K@|2Z}9�M���-X��-����*�|����5��S��7J�'hik�/�ɗĀл����VK��#�s����x=T:����Ѥ�t�����O�;�eW:loE��t�� �s��J�i��{�Σ��N� vR*�R��q�N�>YE�&��:5!�N�V��/�r�Vj����%�nų�Lk) �x�ɖvc��ah[�Xn�hz�&��wB�Ć�.2[]�� �͌rg�5`!4�ff�G��j�],��(�כ&��)Q��}�ܻ�GII��[G���`߃aKp����{4j���3,8aͳ1B���rQ�Ao����S�!A(��Rd��wA(}]kn��^��؉s}��f���R6��41�ˉ�lYg��~�Ux�0�/�¦n�` �*�K߲rtF��jun����ִJ( B�t�8>�38�cx)��$ΎMJ_;ג�]�Ւe(>dw�M�1�:#YB+(�8�&��d�L�M/8�厐��.n���6��-��-O�p����˴p�07 R¾cc3�!��=�S���:�b^���=Uj�2�� s�$`��)R��,n$� ~)�q���K��GQܟ�+)Y ���ȣx�rߣ�{ ��[v d���Wq�}�W�+du* 䴡e��_[�cd��!�Z��.G-"_Q��j �9���!�9��v��[�ɃGr�;l��1Y�'��y<+��hV2�-��S�ل��a8���a�B&ۭ���M;� uA@�E����ByD()4��ҔC��#��\ĥh�"MqIT�S��T18Z�@�@�D%��0#��G�Cڗ� =�rc�J���A��}$1e�`%G���i�*Q�RAx���xz��lx�kX��+����Sp��]G1��Yb*��@�Hb� �>L� JM��q�Ԣg *�P�H�$E���_���T�Xz�_�.��Z���!i��GN�m� ��v�|���/@� �B� .B�(�b$H����$Y �TTi���10��qp�d��k��a+vb/�3�I��E\ٲc�Wā#'ζ��r�� �;��P�0��l�͇/?� ���ş����s���Ɖ�S�iI�o�07�v���O"I�� �VY���?,��!v�n�ۡu�����/������0�O)��K���J+FAxhu��^g���{�'�xj�^�����q�W*�F@k�V<� @-�)�;_������#�K�E 8�����*��J���}�z�XKG��ȶ/�,9ŚI���9t f'_r��\�c��Q�dLD<&g�Ո�T��&��&��;�} ��et��ڸ�mk8m.�Fְ�n��o�p蕡UT'��I+k����JaRr�3���9�1u����I�Mb��I����r� ���;;�5;�ĸ��v��(�.�"\R ��5��aX��0�PpF����8�V�6#��<�0���\�00�mN�m.0W�/�8}��p�0� �Wr�;�߿�<��a�b1��p���v���I�S��;c�&��qv4��f���G�^�cI�W�_0�D� ;�mg[��b�8�[cb���v�#�1�a��q2��%�Ǒ�4��Q ��0��K�+���W��⏎��A_2Q>�q8�i|�)7��^H� %�5mzB�Z�}�p�����)�j�R?theme-joomla/assets/fonts/opensans-99a5f1e0.woff2000064400000007254151666572130015540 0ustar00wOF2�LK&�6:`?STAT^\�| � �,�06$ �xR�#���jN����%��p7BZ^|E[��`�3���6Cӥ�a��4�?�g��//����v���)'w,���c�N���>�I��.$J���Ϊ5��*n ��������~04�<�0��<֜X��ߋNL�I"�Hi����T�t��&)�7��VD�8Em��P���z^����J�V��tf�le'�R��U5���֟���,��")l�=�*���뮼{��$�Hd�,�d�c(���J��#A`�"y?! H` �Ժ�1br��������)<E�u5��4 @`{2Wy�Jt ��]��]�F=�`<[8��db=R<��k�]7�#[�*�ޠ/av,�'�8�v��z-�7�2m���s�ʈ��2ۊ�>�;,Y�K�A �}�����l�C����x�A �!pe�'�qC]�x�����y�F�`�գ#9mؽ:�4*���$r$9+�K,���L�~�h�տI�o�'��û>��� �`o�{�O�оV������������s��:�j�lrF�v�D�{��h�Ǎg��uԈ�ѯ)I����κő��7��ѝpIO:��H������(��m�cι�טݙ�j]m�O>�݀Q;��{4�0d[�Ь��ٶ��T?,��F�4�=(���ٽk��@_oOwWgG{[kKsScC}]mMuUeEyYiIqQa�q3�N����/�Kg�_=��/>����^��.>z7[[m�1�^��l��H�161�M�ZX��,6X}9�yKi�k4r�#Le�9"%v���場�� p�ZcEV5vq���p�2�1t���c���L���i���"���џg1lcͰf;��D/�����ȟ-�6H�.O*��k��҂������#F5���Cy�\���o�ԅC��}WRÚ���C%�-�n6"�y�KF��㥭�x&�/d�.����x.�|����V'����O8U�v�.߯��uR��0<2�2��V�F�z���#��˾�͞�/?��I0ᬼ�����������朊X�_�g�%1��W��LM�RN���v�\�<��U�Hέ%rIx��x�����˦Q�T��#4y���K�"�A0Ny�x���,m�+�R�Znxe�G�<S�b��r�����R��u&�G�ե��� /�a�y�.�}���R��2�"�5o>&)+���I ~-�D��~z�G�KH���;G��$'�7�x�W�9���e�+"H�ު�hw���s���i�Ay��i5��(_����W���Y� LBtTK+�b����r�(�8���d�u^��M!h`��,�g\Z�_<呍r*�4 �&N�����f#M!���Ij�~w�ܬ��9�<W����u��ژ�^[B�p��q>�D���th5M�e���\�1n%(�<&�J�<���6�S�X��T�T�Y{ �؟+�"�y-v���&�^x�`�;^�z'���v��u��*Wk��G���`���PZ��'��{�F+�&݄��,�mai�w���&�Vv��k�~�<oA�`iE ,E��F�e�`��N��w1����3��n��vvK�#�TMR�����¢70ؑJ�=�y�s��sr� kʨ��l�RpT�;�p+f�p�Yġ����k!��-g�y,#v��ܩew-x�ᢴ�'�B�L�X��h�=W����.[�_W�Z2��MK9$�͑��.ҦܡT�����JN��3l'!�7��hj���U�{�)H`�Qu|pfs��sm+ߊ �z�Dx�8�~?��R?S�o7�i�_��ù����:>�5�1�� /�Hy�&��S�d���&�&��4Z��֬����#a��q�/<��<?�҂�&(@&\']O$`h@�#-�/$i�wG94�YfD�lsC�9�ӗt�oCuhƁ��K���2X�E����j�����Z 8�w�;/*�`�����8�a�%�:KU�It'�2��ONڃ~����@�����Xk�ŭ�����O�bN`�_�<��]�ٱ=�$;e[�n���������jE�qZG�ς(�3\�IG\(�ȅ�䗪��.�rL۟���!AvK�k|̍I�D�7�j�!%eP�e� 9�H�un���IX�c��ė|ay��K��i6$�$��\A�f(�pcS�A� {RE�_�P�����?���� �A��m@!c��?� <6na+�9?[8�?���`�æH-H ��H\���\��b�V��'�К�]��@D>8'!T����^���+���3J��o��#c �P�s�[�*=��[�En,Lَ�U� �OZ��� ���E� ���1'�#h~7���־���Ʀȵt5��[�\ �N�r�/�6���o9 �Ru�I�_�-��l*��Q�|m.A�/H���x�ĺˎ�y]��袿x�Y<f"�S��up{�˲ۼ,�k�Pe)�"TH�М��^[k�a�:McC2Kf�`s��e�fK��O�>��fr�v���Ƒ�_����4��[M]o�&_��w��m�ȫo��-o,5�<��ʫ��?�s�z�o5v��,��3������8�o��'r��|�-;�O���YI~vw���mgξ���vw��s�9�Ζ��~�BK'�.�#h�r��N{����h�y���!?ݾ�}����i@:�ߢ�% �[�O�;"�B�[4�+{���&[�n�w�$�9�dB��!�.��ge9~�c��l)��B���*y|�m�oz��~�ه����Z�9��IR< �met� �W�֞������3�0�t �������W�+�0v�c/��m�` V\$����D�'��U�w ��';9���Na��A�:+&a�Q��#��oz���M,0Rd���ʭU!Y���[/��UZ���r�T�N�hu��w��S�X��baj�LbTX�;�bi2��U��*_+9�@�,hTa�T�ԍFUy���j��:5��\�� R)��8kg��t8��N�z̎��(!�Ac��Q��F����S��Ǹ7DUC�^2��5�J�P�vNB��X��� �.ǒQw�,�*:�\����{� ��$��[��:�F/ÎJ�V�e���|~�ak�$6��)���07�����`�����c�-b�5}��z:����Zh��������.L]햩�C�*���4e3%�������gYY&#k!-噔t���&!a,.��HeQ�GD� ��7_�`���`��o{�M��,@?���G�d�np�$2���3�>May:����gp0:m�Q�������{v�gԠ��@�.."Ľ"*$":2XCɭ�(�F/�枺<����9n-;!ѩ8�S��٬�2W�*Wm�����fUL�Q�ɒB��ըJ���z���� ��W�)z��6��~`���'ҝ�9��M�S��Y�4�&7@C_���4����_&ڨ���#r~j`sn��9_����\بί�^�����H$̮I+�M!�x�k�N?�Q�\.Ttheme-joomla/assets/fonts/opensans-39402e3d.woff2000064400000036024151666572130015447 0ustar00wOF2<x�;��D�b�|`?STAT^�z�| � ��l�{�6$�4 �x��Vmpg�n�i>u����g$�Ѹ��9bh����j���M�r�����VS-�V��F&�=�����^�8����alBi���#{�� o��ɩ��x˦�r�h���O����jR3TA-�sj�Zduݕ�E�e��x��z�=Ny��8u�����[��EJΒ��� Y:Y����� ��v���Xʃ�� T *�L��P�|*���T�Ih������$����%��( �(�;.�� $B�CXv�?3۔�����h�m� Q$J�H� �)bb$fM1�N'�Z�\T�bۿ�<�߽_�ܺ�}��4�3`�� u�Q���U%�?��M�" % ��aR:��� c���-}�~�=�o�͌���E��:%R�:1�C��8l�>��6$�_�-�bP�Ͷ�;%�-���À�ԕ�+�|�C�G C�?� �4]��I�\Q���d��n� <�W��s���i�V!.�k����P�8ܯ�I2���-�=��wUH��������ɭVMjX��m!4D���2�+��w�]�xWn���!�m���ǘ���tw��@`Ix0�Drɯs�hLeU�4�V!WI��wD��8���Q6m~�1�Oղ�!��å(^�:����:w.C*J����=�AѻJ�Jk��$Q�{Z�v���*�*$�MZ]�V)U1���]T�;]���p�����+���S+��:�؝$��D���ڧ��;Y�,BY��8�O&���� +Ld뾓%pk��)�B�V]� ÿ[b�s��D$�D$��7� uf�s�",!B����b�?FK���k�E���~8\e�@�'�[гv q8>x:(��M��F_� �t�:AG��Q�NP�t� z�}T�]�o���@�L���{�����|�w�� ~���fq#.�Ĝ���|8<<O"!RV��2�(ķ��Y�U��?�wE=�A|/(3B��\>"4��ϗ����%�1l6�<̕Y�SO� �K#�5�������'�6� �Wi<��]Q"ҭ�����jZz�:���ϟ��b[�!�4ni�i��v$J�T�#�R���xH���� �m�� ��m���\�r�B�Eh?��>oSK�V��\N�&G��IU��q ]iM}��1�%���v��K�O~2�.)�KDZ%8��E=�T2���w�#��u~�{��K>�c���˞�Gܷ�F��߸u����G����eF�b犦���I�qXN�����Tqr��x)O�� }��s/������.���uX�����kH=jW��Ԉ���kT�T�:�B�Mu4�&��vO��5j� �R��'p`?�g���~,�`n�z���5�胳2�����eμ��TX�aV�`�,����w�r)4�f�N`)���/��MĴ�� ����a#c�i;?��ӏ�u��g�D���7ȥ����M-�s��U�N�C]��Iz��z�G�zK�BMҨ/�!��kCw@�̞4s>���^�gr���}q�ġ��@��K�f�(�ϔӽ�u�B�O���#Ge'�>�i�<��ͪ�lT��uŶ)@�p��v�-Z�28��Q�ph�χ�(.�bwk�`�L_��=����?�z}����j�Er��U-+,���80�Mq p1� "7Qއ/T��Z�����T�3����V� W����i̒�3�B#G�<����ۍ y����#��wm���Uw��������#�`���T:�~|�[#,$�j\��(Ý���˭|3f��t.��3fՠO��4������(��,R���D%oCY$���J磤^r�4�/��ej����lZ�Vb7K�"¶5a�b��izl,��.��ís�8ɛ�;�%�^��dG��\D \�m#�:7�NN�A"Ͷ��!���Qj���C�C-��,Fs��͜!�3��S��?"sa�-�Z��L���#�"�0��J�sg�J4��@4�A�L�T��\.�-aVb5�p�=�uI��E�$j���&���V n**�r:?� ~�mA�|� ��j���ߘc �`Agڿ%$�/�:L��-Q|�=��2�d���'��˘Ԭ�V��O鿞�'�����Q��0�8u�:`0���n�~ԭ?��I5������x��N�`\�E�}�Ba����N}_`�W~φ0mL�����җ��B/�>s�o�N~����/A�\=�ٖ� 3�F��d�EB*˵��Qa4�����f݄�8nP�ܸ��EoEq�wX-�[W%���a�Os�3�����{O�Ng���D�eq��7�:�[yoB���z���n�O��P�!����F�3P{� Ъ�$% �wj �����+�+D��2T�_j���zO�aGwǮ�>��#�cN��WD�F9U�������ō��zG���{\ ��*�Z�O��'�M�1&MAyE9A���M7�������m]ѣF�1�}���v�9�'��c�|�}��?/gg����}�JK������wO�>A�����p'��,�<K5_�Vzw>^��ϰ r����@غ���%�u:> ���V�-�f���X�¶�Ks�����<+����2� ����T#��bkl��$��&˭-F��}R�l�Hu�IB(b�֭�W~�}���ds,K CL0]��6k��?���ƙaa�4!��m����f�e��kf�m��e�=u�Z�LZS]5n�ѣF����AfiD��]g�6�v�^-��t2��a���-��[��͟�cR�}�N��[��u�<NWa?���������w���`���a���X'�ja��l4��$�ԑa�V��/����d����U.�^*�Y���B���u�-��'`�1&�uk����ƨc�~kkH��շ�i�b*C�J/_��%���C�]�G���f%��/S�\�R�{)�ټ�S��)��ʼ�̍˗�QO��'�诳ܗ�����BHql�t�7"#`�c2��u�4�S�����㑱!�8�JC��Vӌ��a��㥄�m���)W@X��0A����0��ȜR��$|����5(��H�T��4�zMY�?�KSD����l*N���^���;s�kgx��D�ܾ�F���ɱJ����1~&LP��y��hlx����!y���Ӳ�Ia�I<��o���}������۱L �܍�!W1X���Ψ� �u�J#d|Ap>S ����d��hۄ5�}���]�����z����f��]( �0\�GM�84� ��F�: �\�QM�yӍ/��`IVA5]���Amk�J���v;;���EDQ�NK0�e%����+���9�g2Ͻ��O桌к0�F���ۍ�~�h�,,��#�L/�ZE^��2[F�|��aN�*~Qp\긳qp � ����&�K-����8B`�r��w^Td��� �)����C*�������b�`>�� ��$2��|�9i���J�Xᘤ�wlA�3ɯ� າG��6�ֲ��w�b�� ՖF�-�Ȑ��LE�v�b��z㮔ƹ�pTH{[�����`� �F� R� ��jh��+�ER�d%���а���e��2��H�bL�`PҘ� $�@���pI�:~�k� �@tꚜyKz�` S�`�������$�03p@P�x3��*^��o����������2v8�U ��ђ����*�7h�0�������BLhM�u>�'�|!<nq�+��fU� ]k��%N��Qc�I�-vyx��&9a�J�1G5>%Ƅ�J\m��C!�^/��5���m߇��Q��TbNוZ�?�;|@bv��A��Ĺ^���"�lϡ����en_Xk$V���"-�#d���;"Z�˴�L4.��lAizAhw2�-��zC``�-HwYu!p�W�����J1ńn�_��\��Dh��yGT���fk~�f��{�ks�'�;G��M�4���]�u1V�-��8!5��=��B�NrNBp��t�pB��a��C�T�;=�E�^}�J�<?{�R�0!�=����R8��(�����-� r�8�|-պN��¹o���,�NH��ܿԚM��\C�u��,sB����J� B3���{�*�Ȳ"��B ?K�a�"%ǔ0�\��$���}��^��)S�E9�Op0�m1i� �/����WF�,�y�`�5�9��%ܳ��a��b�X�0������t�� ��ps��GK��I��b�&��t�>��BH��L�dm�� 5q�..�Q���g���鱉���(ɂ�=wp�d#�,��7��<����(��sF����%��o�O��ͷp��_��<T�C�\$e�h#O��'�Z�.G�g�&`=�$#�M���f�טs���_W���{i��6���+���KK�1$��5���� ����Ta�OH!HcD�"%%��7�R2�A�֙xG�p�?��IOA�B�;��ƴ^�F���^���-�� ^� �Dcb�v����/qӉ+ >Υ s�3@:� �=�Y����#���.a��+�K�ɰ�s|���Q�m)g��<+��s���6�[���g�A��g����m�Yx>"�i�!?�!�'��6a_i5�?>s"�V��?4w��K>Y�`�<K[�S��fֲe~��:�)/V��w��n��\/"� ���Qg�Ӎci�x�lĆ���8/�u[Ow~ƋDZ�[X�I������d���<.�O��|RS���+�*�����r�f��Y�� � 0BdȾ\�x+�\��7M�Q5$2�H1eI�~q!%_©��p[4V�z�67�x��]��b�2��3c'YDۇ�n�1Z*g%S�p w,#y�� ����{�h�Ї�L\Z5)ޣ���,&��B�F�����@O���j��m��0���'?�x�D����S�j)�9��N��J%�6�4�Ae � ���X\8��u���}�b5E���^��ܰT2z����`p>��i�mjSt�h�Al��PM�2rެ�Rk@�i�v���^��d�T�����o��̺N��I�S5/B�YC ��qk9L�XE� �Gf݁j�tb��z�%4B�ph��?�d���552C�s8��(�=xfS4�6�K�*�l@++��0+́B&W dc5�>}�^�(����8��W�2��*qL�'s�#�"�Q%�ËR��C:� �9;Bǜ�I�8�1Hy��SЉ,�FJ3q�g$��^��ŗ���r��"�[�pbJ�=���*&� L/Aۿq�W��Y'a��Rc(}��jz�v�J�[q �x+k0)��F��矴ӥ�"�J&��� �������rA]Iזj"�@��4KSO���<=�$�,�����'|A@����e�*}p>3�F,�.y�~n�]$"�� ; �;��slƓs8� t��w�_�Vl��h�!��i��2s�Y��I��EY�:�]X23���o4��m!$z˅�t�@le~x�V 8��Ĝ�H:�� J<;gMA E\V��WS�4me�$#�{���~���=�\���q�n�����@a��|�́\�G���'O~�ޒ�:��dq]��S��m�G����Dgf��s)vi���X��^Z P4�9�A�:wMS>�-�|�<](�l6bB"J�`9�*C�Io)/���R<�!���~J&|S���K�AKvf�W����u��@-�hxH�3��i�Z����!��Lge�W���X<�Y�I-�:bzmVᑐ"��oʣ(�?�0��ƜXs�� >�'�R���H���o[z�tS.'5�L\�u�I�>h��h��6s,K�K��C�Z�aG[�� ���i�����:����]�Z�%N66�@�\�ϫR���y�Sc�%_Z�+��pjQ,Hy3��Ҡ�+k�a�7����w���:o{9� o�Z�9 ��K�x����ȼ��gm�^(��qXů^'�\_��x�ߦ�DO��6ݔn�i�3����6��-;�PE>m:Ryӹ���wQ-��˞;颿S��l�ΙͿ��pĶ�T�����3U�@��>GO,���zQ�?�u^F �t�F�W#z��-�&����n���8���:����\�Q�4�s���;��;�.�|�>��b8z�eB?�;�3P�|��9��K_!-p�q�k��?����j�!fU��z��4�T���Q�Ձ�;�2Ӣ[[6�A��k���hW#~h�j�f��Ђ��Ӛ�A�j;���̣E�ygV�n��/�y��M��F��.u�(���Yt���~Ss߲U���t��:��ϼ=����sv�Ag��1�C������ұ�U����G�%�L��/ �=R�J]�q���ꌲ�{El�ҭ�V��'Gwj�-� X�)�� ��Q�h~C����PS=d,Q���AtɅa룤��]����82J�J9W#V3�{�� �݃O�R�V���h����c����$Ƣ�N1Km,R���<�2d�.#,gu���+����ԇ ��'�\��}TV�6S�c���6-��t<3��cC(�$�lS�w��̂ȟ�[ ��s�cF��B}F��q2�{7�@� �$����a\̤Fs�4W��mW̅�Kg?�Y���Ҥ����%wr��^� ���0�=艃{I��N�F���l�E9 ������6���e��5���>�u3�` �F}�U@QO2�dS-�x{J.�ɶ�+[a����f�a�85n�_]�����*�U_$P��Іe��E˛���{?]����Ύ!�|֝�5ݚ��c�v0l'�#��k���+�����v� d0`�*e�����1e�T)4:L� �Ą;���T�%ɪ���$�w���=�\���3���ah� J�����v��Y���?nZ$d�"���8�Ԝ��R���������@\�f���t�ECk�dPj���h�R���� u5��q������0�x���4鏜rr�E��u��&B��}�'�M4��u�~X���f𗻐���D@5�̀Q4��l�#�7�{�e-S cO,����~���K�E��Ѷ�U��%���HΕ��k�Ux��^P*Y�!���K��p<�хw~��mf'ԝW/�����NٔZG����u��2�1RI��$W�o�.�f������!��qg��¢�L�Y�wJ�^<?�R��ܳ�W���bN�g#�4�o���'�+�L�h�̌�s�u�i���Q��֪X��Wx)*�>á��(�mzѵ��`O�!�X�~�����GK����i�"S�k�l�v��'�%���i���?�k�����V�����5�&+�Iҥh�R㵙s bEUy{l؊m�Y�yN�iH���{�e@{p������pܿ���4���Q([���~1O7J< R�K�[�eV�O� ���8�&�,^��=a�|S�jq����FKs���2�[�� �<IP�i�U�]'�[���N��`�/(� �w {y��=�<�B���<i�v�848��eR��"fEH��,��s�V%�2m�,�Td�'�]��7�9��t2t��|}x}�/���C�.������@�3�����Y�?+�������ş���99\������ϒ�^Q^�6!1w0&�g��O�}ԋ��XD��KNa6_S ����*]cAy���cR�[�$��<�[ ��՞���wmM����l;�CpA҈�,�+>/�70�?�����<c�vF6I r�C8koI��%~�$Ϟ�sP��s8*�I����4ER�r6�˔3�1]@�oW>�;b������0Ua+���!$ɂ �m)����A�,��'ɂ��-Xø~�v!�"p~�e�դ��v�s�Y����JMǶ����g��_��'�Vv\r���ؠd�i�� �E<U�nXn�pv���z����ݏ����[���G���!���É[�ѡ�qS���YC�tb��l���l���;Y/}=�����z�h�ѓ��(�� '�l��]nVMΎ�"5U=�<n�I�e�y}&�R��y�%�eKƞ��K�-��`M�͝Y!����Fs��yl)�Ƶ�>�Ifn86�P��j]���n<m ����5^�}'ھP�n��N��>�� G`��a�����9tՐ����Լ"vi�e�E��鯛�� ��E ���2e,���+L��:eP��Zcoj.ㇶJ��Vji�ڱ����A�A�]�C�]�-vN�8�=�*�J��PԮ���� �=�u��%��[VjF:%�O_�a�9NI���Q�X5�_���x)�����()7$�0�I�C�cp%4�4ױƔu�gdR�kU��N\�#^S�����ʶ��� ��(�6;�{� 8��(9YZ(�$ÙT&N+_;�vhw�1�$j������a�0!~>ؐ��0��B�&��co�C�� �~���O�6�E��Q�6>�3�L��U%���i#Z�y�J��ڏ�!���حذf^Ajv�a �P�f��9I��!#腇üܤ��"fQ��0�Yb�����m1s�NVpZ���H��I�=J�8�c�"9��|=M�+_|ZK��Gɍ8Y^��X�^U���A!��a�^��� AA�⁐��}Z��b-pa�|���Xx<M�vGD��p�����DW���mm<�YxE���!4�B3O2��� �'/�9���rJ����.Y��^�2�AOlm*9�T0,:�nm; �|'*�?Nmh䴅2;k�����n�8� �%v��_Z=Z�?��v귺x� =×��1�5�� �|J4�'�j� �|�d�:v1�hf�Y�Xv6�)�DuG��R�ҁ��m,�ba��o��h�TҺ2T1th�r$�FJ�2��b��Hu����C��M-̍�,WS_��ߟ\K�SI�nD�B�J�UY��p�u�s��P��~�NG20VMvE9K/��Pm�<� ��&�%e$�D��92Z*�)<�������$Z^��XWI�4��S-Nx���4m]�Pd�t�JF��ځ �U���k�%�3!4��=��o6̋c��y�"��]�Ņ~�0%Q&LI�)T��!p�^>���u�؉��L�̥/���Q@.��L+d �("��h��b�A<��U��~�97�S�}��cط����}f�鲎����Io`��(v"��/�/�юQ�Ds8�v���~�#EX�L ?��~R�,Z~`F�Ro���DSq��M�k5%M��i�� � ������TL'��-����#]e��8�^�8i�Lr�=Q~�g{��Ww]=6]���l$�9�}D�g�u@yZ$-���'�&Ȝ��-q(��1o��vǍ�04�aǃ���Mq�����#���Gm�v���,�4�k?#A1|��m��4M��J���y9U�.���xV��}Ԛ�8Dq>��<2�ְִZ" a���ђ�$ʂpmF�_�����]�1݂�-ȏ �OՖ�n�� ËK����|�eOO���������m���9~�~��OU�_Yj���M����`�G����o�h��!v��9�+�rM��_����Rg�.���ijj�Tx���{D�t6��Y�#d�Zl0��w����?U��=�.��W��,@���%�(����b\ww�+�;G=`�7����&'8w#���]���ݠE�Ro��,��R'��o�F���D��/ ߯8jػ9���o���t��1|C�݀ �%� �1���S�g�r�U�D���A�T�px����@�x|�R�Zᇢ�ZϠa�&ɭN�[m�[[�nm�5I�56���Y����.$���lԤg�5{�MM.��.s0�ᕡ��(]ù2�����a��tJ��L�D�%�� q&���u� P�t������A.BO�����]�A�O�5��v�D���?�]�� �aʙ&�QU�"���0�o�n����;0Ȅ��W�Q�?AA]G����t��+of�]N��c_��G����n����9F�i���]��x��UL3}5I�����D�Z.���aԨ��x`�Q���d��F��Ԛ&*zZ��C' �{�&��e���@~�U�Ve�(�thB�,AB/l*��;�_��M+��j�oe�.�D�ڬ�n�E�i��F���Y� �c�v��]��T�� \ �����VGR��ZS�H^�6d��^�\2-(��f�[��}5�T��%����u�3�0J �+�����˂�_Y���@*}û����.�yg���Ihd�w�Y�<.��j��K�Ϫ���X$��i�ɿu�Vj8�w�����Riwk�' ���%�|��y�iS��K�� Lո3�x ���ߘ�A���1�<,��W�ruo��+l�R#���⟻�)g�$N���%�M䱞���'�?G���5��=q~���r�g�����^nD���8�3���ˏ����N�7��3w�]�+���sކ�]R�Y��IM|U�/;��Kt~MO�N��[��~�/9{�<Xǃ#'n��s��p娼m�vI���<�$m&�3���y���O�B��I[�<b�f��>oY#��p�}s���EK�3=5����\��R-m��T���֩Q?�j�Մ��[�2u霙�g�rBg@p�rZ�يk��'=^ub��$0r��%1Q4p߂a2�����`���r�/��4�i��5���Zu��"�qo��h)o-��&��!ɞx�4�d�v]"c;F��,ngQ�� Ruz)�r�V� �6�^��#�Ko�W��#�`�p�4`����@9�uVl&�㇔��@j�o���df(��3�b�U�t(A���E�����:j���d{W�5��� � �yI[�F��@�XŮ�f�.�ǼU��}f�J�iA5�U�}͒o�課F^���ݝ��7�v�X��nx~�3�:�U�l��I���m<�~���E]��)�H��;�\���*U<37Na��s�0�93�"���c�zv�ȡ^+�\��X��,M��6$��[;��~������v v�������_-l8ϝ����V�B��ߨ�lz��Ղ��-��v����!N�cD?t �0��P�BPV�$Vȇؚ;�k��lT㍱L�g�l�-%�N;j^ \����Ѿ���xr��5'y��iR�K,'���x�u k�Bny�1���B5���M��+qaL��k5 ��*�x�o�p1[�xp� 3�N�:Z���Q�hR��C��㶊iQ�Jіt���f�U�p� �0��"��l�#�i��|&�!�bFI��$ly_�KQ��c���a�@8��I�)���#m� 4���X�.�b�~�T���5�$�?�=���9�����)���b�ap\\rM�f4$z�<14=�B���7nSв��s�C���OD�f��.�r67��q�I�$���u��;%��tU�<Μ���+�%"�u?r\7g���0�fVd���<M4�)�U�d�t���$���,��"���-4��> ���Mos��<��������>�i2�ޔ�=h>m6�)6W.�=�8�Nh&fs��%-�RV�&�]�D��_�j�:2�N+Zb�X�!�3�m�L�8��� ��k�����`� k�}��N�qZK�����8�nJ�{~�S�7��Y�y���uGɲ(pt��3�#ׂ��{l��?�.�D����9�[e� �D��S���/�u����TS�yT���1&�=Հ�� �0��H��}ݼ�$G��Y��-v��)g��E!����\X�{M� �tu���{��3�5��q���v����^�H�곴�M�Ͽ�:WԲ�"� ��tBo��u)5�|2����>d5T����:բ�r��ɀ�+f�4*�핮�- =�����=���cm��h(��^�1$��_���Dt�{�ZH;M3v[rGp%(�k�9Ε�E�6qlUx�̰�u m/jC��<a��e�$�a��$� Ι�7��Ѷy�cyZ� ��{ɀr�<!λ)��%�7�}�=�F}|�0Qњ�7z��d��4z�e��!P�$��������:#�ԣ��&�D�V4}�j4�W�:����j��Y�8[e��)T�\y��Gn��lfĸ Hv�©��I��n8�"F��ʇ�1�a��M��&��Md�:���y�iȡf��̆xᝄ����u���?<�����b�nM����|��b����f�{��L��z�c_�}t���n�y���{Eu{��~�5���w��4@AL4WP��|��m�����/�FԞSE���>�+�8���]F�rf��J�Eζ���Nu���ѥlWT)i=�DS��P?|�l���f�@�l��%j��{\F��w��9�U���8�x��?|\&Г�O����DZ� Q)��.��܍��53���[���R�91?���m/e�k�r!2ׁE�8Xg��h!�D��]����$�K�8�Boow��|\�ꝺ�������<ȃP&���\�-�+x��gG+���tVι]���i�+���Aֻp�~��Ry�p9��zR�4V�2pO�W���T&ώ^�=��M��,�C��դ����$N���ςl�53�z d�pUC\���뜂�ut��)<?X��T��5��,l�>cX�;k��{��^��c� �h��1�w7G�N�Q���Շi:O=��ރ��H��pw�� gu�r���N���_S|�KNj�m]����ݯm��?4W����J4D�N ��;���փ;(�Z��z�DR������9uG�_� �}_U -A�w� ���^����Q�i�?0n������9�/)�}�36:ŏg�Y?��ݶ$�2�0bHz�s�9/{W�"� T���wl�n�8��v5H�V �R�.��-�C��Ğ�~�%�n���xm79tHE�#���1����Hɸ���CǝZO�gOi��4��!���o`m��U�7��6efrms�OvÜ���8�D���Y�͖����k��Aę4z�:�8�OXiaߢ���:�+��* �L���-j%�5����;�^���w�{��{�Ɩ��pzF���Q����1�o ��Lh�g�%!VD`�:V.��,�D�� �x� r�ȑ%�ng �,�b�t'5��G�< ����і�w�~i�KK�ʴ�k�Ȱ��=�viic]�E{2�;)����jִ5�d�%'F�>�����q�v��Ɍ�g�V��l/ٺ �w��)����}�ެo��{iiao��K�v���V�[d ^7�o?`���7o�9��ulqѱ��ܾ�@\���_8Px�h�K�vc ������x�Eгj��!ʙk8�| �9���� b"�Z�52,��D!u��(�bQ��x!B���:�|eYL����N!wd��Z��H�Q³�B����! �Ӟ݆՝�h�U�� B�H���� q�W����s��r*u����Uѝw�^mn3�BT�s�r���#u�P�ט�է �ײ&���n��ӯe�w#���"#D�ʸ��V =?�2r[xy~K\����#����!�Z�`�4�BK���&R�h1�$H���6�iO']�LY��ȕ'_�b�u�E�p�g�GL^��ҺG���8l��T�������|�HLH�2�3���M��S3sK+k��]?���]� .]�v�֝{����l�h*�j��Zt������o`h��oʛ����������-���О��y������*�D*#=x��'��Wo�}��j��g��1X�@Hd �Fg0Yl���B�X"��J�Z��� ���h2[�6���r{�>���(Բ Ձ"#�[��Z,��@�h����K�0)�3C|;���u�_�Xqʼ�R�Y�IäƠ�Y��}�)�T��̟ԫ�f?��a�ڍ����\�V�6{��Ě�ᣫ*��� g�u�$%W�1�3�H8]T��<�{|VT=��kA7 �;5�����4(��?��}�0b������9[0Ǭa� �S!3*� � &�DΩO�1�����)b**ݱ�"�U��yו�o��ٹȠ�̤X �&���Ȱ���<�Mwi:��⨤�MW�V'��i\�T�q�ȰLJ��y�9��dQ����Ý9Y��e�2�d>9�e��|'^d�9?��D��'nE��p���n@�z�Z�c�ψ�)�8 < y$�I?��7?��?�o��S �\�3��1�9��G�xJ�A���y��/�0{���3XCe��.%� ��9<qO�xZd��uE���ИtJP~�I~PjP ��X��ugΓbЋ�}�BFͪ9%?� DX-�8�2S���eBYV�s�F�}��)�X�G�>�ffȩw�wĆ}���@w�D�;����H���K�%���Q>�����0s/>i�k�Wf�G��ew�r��Y�D�zy��N��-|�)|�/x^�G�5����H{�-���k�ޯ�y�n�'ܸ�8��ptp���V�<-l]Vm� ����vm�Y8��;B0����^3��0�Ś�팡m�A�[��Ūu-i��f��i Ƥ� A�0O�Ҩ赲.(i�V�m[Z^sFN�����k)uMR}BB��ҧ���dF��J�����m���I�"�lnR8`4�a`˯_v�����(hp�i�H�s��@)�@�^fҰ84�c1�O�H�S����<=/[\Y8{z��{Z[�&����b's=yz�8x���C��<9N���I9�}u��AY�����E�ieq�T�:�����j���7*�a�m�~����q+~�Й_���+|��'\k���rB�xR�8kl~��)���4hn[�b�J�r�Nι����M���T+�K�ytheme-joomla/assets/fonts/opensans-17fd311c.woff2000064400000017430151666572130015523 0ustar00wOF2<�Z�H�f`?STAT^�D�| � �<��.6$�X �x�N��55l[��n(Ӿ�=DQV_B��Ln��=Hw7TH�N��<���rz��AT�f�*�r�2�[H�}ͩ��c^�I�Z�ġ.4�xrXՄX��C�y6B�Á3�m6�h��c�X��X����AĦ3��r1B�Y��\��=I��8I9�ԕ @>�b���e�Ŧ����@�-������ *��A;��vT�A��b�5!]M�i��|��Һ&�hN�+�W��8pE����7�J�x��?�d�:J`��E��eQ ����z��r�d�)��#�̭�j�$8��F�"���?��J�i����Y��Y�$_��*�����pa��r�}�5�ö��`FG@��� -��<�j�R����'Qz}h!l����?ue;�A�v�iw]�ع�.T.;��՟A�ڌ�=�\���69���bȥ;��h\�� W����^�4�O=�i>M: x1�0������h��l�-Q��Ͽ�z��-�ї#�\��Xm�����!������A�8 ��/�sL2F2R�w� Q�S�#V�xJIR $@�,����J�}�/����z�}�o���i�@eX�J@,����3pfޯ�����Sha�����-�t� �iȯ��Ɠ��L�a#�����փ;�8�a�}ۿO¿��~ُ�+����y�&N�H �'wv3� ��lw[[�]ْ�5#[Sec�RIEu�^V�Zք�6K��Ŗ��L����|���Ϫ̃ܢ+$��D������ureF����i�Z��)���I���K�"��/^q ?���Á�n�A�NC����+{w��lΣx&�2��ݴ�{P*�����)�At� ��־�3J@�D���V��%�F���u�̮���rE7���fdV7�+� X0)@�m-�ű�`��赽,Ǧ���*~���0�Ef�oH�"[,�Ek����7@����`� ���ײT��Z�#�'���Un-��\� YR��D�����7ae�X�+?�\����ĀS������|�����<i7��HP��T¡�<d �%d�}�!Ș/ ���5���Λ��� �i,@�sz������ ����r��[�X��r!z�=8���@��j�Db���<�zt(�C#���>���0P��a��tH:(�H{�nD��~X�e����$zd�;|�����4P=�����KU4����S������m�1��Eh���|n���o,E�O����K�E![��`� @�MBz��$$֊J֊-�% �;f[�u���`�F�L�B�A�K��G�,I�B�"���& \�J>Ư�g�m) #[��F�����^���X\��aQ�8��ɻO���_���_� 艸�滓�\�}o~�gN�^"���a �l��=�� t��f��ͻsO�q�*��I�]�dЬ��lHkbj��V��CSo�6e��1Km�CJ@�+ֈ����s�Q&M'H�^#V�d�.�&�<�?k�m���h�K~m���{���Эc��F����z��p��s_�o�2O��wmSWe�giGa�{�c[��k�,�ϱM��PP��7��4���|��V1H�]�{s��6��_f�|*v0������(!]��3�s}���!���6B��4�'tY�2[ߪ�*�qaW_���bl����i8LN��&��U�e��3[���+d���~^vo��+�9��g��F`������ Fwo/*��D�O��^hi�MR��}#�����u�.�=n%��T���,?_l$�h��Kpקk�2+J���'�f��rr�ior9'+Sʭיp��z�s-��sJ���\�L�q�����;�]>�F�n�r��.��ǧ�髻ǿ � �dԣk�p�Oj���J��7�u8 2v��_�>ղ�[/7�-C�NS���]���3��t.U���h6x��L�,ʑ��c�-�m8��# � �t�%�b���@���<S� ��N�N�*WW�����3�nԫ��r���-��:2#L$o� X�Dҕ�����M��]��]��:�����k����<!B�D�f�#l��#dq�$������� 3�qk�4��ݓ��0�O�����4zݷ���_����¶�Pz�W��;�a�4��B:�5 ������qn�>M���7�>E{��q����T�+�v /��M�f���������Nw �P��T,��\φ����P,�t������� � �I����K� ^��O��'M;�HwI��'�;Y<m�w���ڜ���;�C�^k�b2Ѽ����$��!��1�m�Ko�x�ɻ&ВX�kK7�9 �B�|hM�F�8��k�t�d#G]�EX_>3�K2��`l�zLqTP��EN�P���jO��G�{�{^t�{�|(3EE5L��w�#��k��q�~�Z����r�z2�u��U�J?= �-UԦa�)�LB ��)Qn��Kۛ.S�%/����oJ��`��j�R��W��UZh>���(�+#k�^"�<�^��dT��-�*R��F��X�L����]dt[ �����g"x��@�' ��lx�Zf��b�q�ke����ڌ<���#�m��Vr�z�Z<���d��Njz��ϳ 1�*d�V�z�$w�PS��!sB��R/9�{�86V�h�>���\�e�y��y�HXtZw���be�G�#\���}.C�b�|�.lK\���z�+�Lqy��u�n�Q[����oK��C������Ǟ0���j^-��$��֧˸��i=�"l�(iŽ)@�䌷.�`41c��ĠV����I������OHp9G^k��}�8��J�g��+� -T������Z�Q�h,��!+��.U:�{Z�;�,��wI�6+N��x���� 2�&�ٴ# gӆ�"d��+��l#�MA�%�|��a"LD�7�����H<U�*��ߑ.C}`uO��xRC�����(�/���uMUL�y�[���#\�Ř��ZI����BQc�_����g��Χ�b7y��dE.���=�>�{G����G3���62��А��K_p_rͧ�5ʂ�Ė�DȪ,����>)!�\�a�c�=��?�h0�f��F����B���&��{Ń�r�Y�Љ\'����a+�'A���o��rv5"�8- �-���09��;L;<���Byc�!�^P��$��8td��;��`X�BfB��>�5ث)����U��m���\�/;{ZN��7hK��;H k2�go�ۘr~�O�t�h���b,_��E#��f;uK7��oѶ`��aF5�Y�0�T�� \�}�%� 4�N"����2 �P�n�͜�s��0 � ���tp�!i�vy����SI �\^��\�j-�G?�$��hHjb��7�-�CUr,�,���D,��{GOh>��+$���������P�6,� �EtM�R~ �|� dD��='F@�L)��|fF/ "@;���G��iG��)�`~�ʁ�W_#�qh�r #�g��k!��ǵDd,Q��YKw��U9Ĺ�A�d�� w&b���5���N7AϕOŐ�F���ųxH�^%_q���u~c�t�{�/�fޟ�[�#�J�4ul�y`�ց�.T5K�j�I�/�s���j��5�/�a[v�Mb�u�q^:�4��0k3� ��қn��=%�@H��[}6�*�߶�P�j��lN���g)Dk����O3����xy��>����2z)>6֗�f4��"�9���� �jְ�Uҭ?o˫O�ĩ�B�����܉���m>=ᨫ�ҹ��(����=ۉlݖFZ��5�e�ӆ�B$�]���_����� ��L9h�COޗ�W��D�0 ��4�o���b��8�����:�+�5Ԝ'Or��{�ˉ��g��<�d�:5�@Fڒn��ch�T5���M��)�/�����C.�ZǼ�4���m����i��Ȯ���*��85Ƴ�uVҐ��=<��<>��I)A��ܜ�E༥3nK9��c�sh�W�����E�c��&B��dԻ1�:v����0 �?�Fς�3ô��d��� �S��[���h��q��V_'����w�:�gBt�&�$��/Y[�J�N�� J/��0��l�ү�h���P�0Q�# D=��}��{�$p����]wHw��I�uw��l�����3߱�Ϋ����WZ���m�12c����}��,#j�X��52�+jJك�zOP (�=%�h�s�er�Ȣu�+g���FFњm�}�Q�'��kP<�����M����X� ���p3���`��Ey��*�]����؉����]���JkJٍqdQ�#bs�Ky���M�M��~�����_�a���Q@�q�u�����!��띪D�?������G�z�\e%�a����de���T��[��*Yr�ӫ��"�Z̘*zl�r�s�ղG�}��6��Ol�W6ITA���;ڜ_��Nw��p�&OZ+:l�s�6r�x�ݮ� {]A_�Kn?�l��;Z7��~��m�Ί�l�ҿ�+��Vm*D���g��%'�͏<#�y�y�s/1�M�f8 ���[ϔD�8y؈�_~c^v���(�ְ�6����O�L��Q<�C�/9%o��)ȱ-e�ˎ�Z�>R��X�[�y����է��c�Xua"��K���5��m���U���ĸ�/X�9�~,�.�1�m}��|���"+�F���&L�}Q��̓���,,�٬� ��E=�ب*��/(�����c�{���� 9�CV��B��U��a�7 [��h%����l5k�L��lF�خ3�2�v�EB+繤��LK��i�x~�1W��.�ײJ�L'��1��!^��r˃��ˮĭm�OSVf��Rfq�zR8�\j#���?_�n2m"�/���^��T6I#Tn��-�˱���%~ �A�����:�笈F��� Bx��=�/�LG���\=�����/���IMqۨ}�nam9c�cm3��~��o[��ת�$��/^��}3oݩ�ܠ���:#;|���_��f��Om����s��Io���4�ϧ��t�c��:�� �Zl���Mr#�Q��ɟ�F��fWѢ�;*֫����}���yy�#ڷ��f�c+��e~�!ǃ�S&�ǥ�uV ��Oz�rId贁��vV&?X}t�mwc�5+���q_3g^/�g���H+�F���n�͏�hT��D�%u��{)k,?vwY�����A��"�}T���]n���tX�46�z2%�"�2���,ì�����÷���8�������8�6`-������֩e��r���*��#��H����o��hY6^[l<�C�WBҨ��FSL�,,�X�0?�9�'��/f�G��K�O��w�Uo��¹g���1���>�d��"�A�*RPV=�b�l\b� B#�ٷ�������t�� );�l�xp��#&��(�::I�U>�(t�uJ����o�|~�Ԁ+��@��PR=��lu��+@����X�B��?Z�_?ݫ���������1�*E O�m��)�U�#?i�����;G�B�?�I�,�ڱ*|�*\����Z����R���R*R��3��K�(�:�Hh �Q����(hk�*t�5�ƕ|��橧�Pj�/�c��t��y��a����҂e���U�e:~f�N�U��UoB^60��(�8�H�6��H�tg�|el6��4��W�K'��K���/��ݖ�����|@TH^�����1�������5e(>���7���sd|�wU><]�l��"�,��CѥXC��l��K \�c1���8���2�:�:"�5�!"��QX�H ��"/e;��p\;�8���]����r�D��B�u�sT�=̈́�g0�J�w��q���^*�`CBl�I��&��m��\�q��ꓒ�|���mz�ď���}Pz��e2@f��q�k��[�Ow��=�GC�Z���S��NM�_U[XNH�]:C�<�T�1 d4�<�+Pf\��Yj����<�E�����N����b8��L��S{z�0����I�ՌJ���9���Nx���1� '��A{�j��KvpM@9�o��g>TJ��;�^o��9!���` q� ]%s��/�p|��Q��9�y��U����t-X�]@W�f؍���zA,�ʀn���Te��^�]�����T~V���>D���B{r:*���.��ӜPSյ�j��:�H� 3���4��+��@��9���j��j�!Y�&�ʽ{�A�AH�NC���"�О^��Rߕ�ijj�~P���K��ވ�;�u23E���r�Y���/�\��x�8v`������߷���I���qn��I'�_���nY6�L�_Z�Ų|{ֽ)�0\7��1x*���V����5��r��0����lh}�ʩ��K��Wm�q�Z��F��1,p(n1��cA��z'۲#BҙR��qN��vx7d��/�7��_��?M)������?�n��'���0�0�x�3�Ake>v�27������\$�| ����M�Ga|&<���5�0xԅ��h����S ��$���?�s8�5͇��!��yM��Nj��7�X���K|�> 6�,���{�+K�]�'�{t &��4�]��V�W�_��)�|������Z��3�3)�ՏGPn��G^>0��6�ʃ8 �#p@$:����p&a6v���Ľ�I���p2X�<�<����O�F 8��"�.#kt��]�G,�Q%_�X���R�BJ��PRZ�"�JTh��|�V�A���Jj|I/ T�Q�e�($P�,V-�TgOj�@M:�GJ-l�Ռ:y|y]K�B%��ޮ|q�h-���l�?1��8JMKmr��1��0�y4 +��2J��5�%[xJ"4!�h`Y�����,���-dP͕V`R���Ԙ��+���fb�}�p����rR�n���os�� ��$��T�Tk�F���t{��p4�Lg��r��lw����P�D�1X�@$�))��bB��Q��DԢ�@�c;YQn���$ L�S4 � � �p��6.���G Qh�X�8 �~�@��c`bvC$���`cS��H:&6Nr���T���Z��p�{]l�5Lã�i4~5h}w�Ku�kut���Zl��p�lU!Uγ2z'�� zGᐽ\�la�M�^W�ݮ�:��^9����`���l�Zk]�V���=����JS�|]+u=K��H� UYʪ+I eǗ�,�<S%�] ) ^^�en�'*�EB�����\��p��,��y$Ӡ��iK��6�^�/k�tr��nC�<e_|�z)Š�($=�p9 ��F6A ���<6< � #���H��hr$�uXh1Ȕ�hM<dzķ�%��[��= ��_&nd`/ވ���C�\�{ݵ��ÿ�~A��~A�@t�v����U���/�9p�#2:����ՠf�ѓ�C���]��q��o��Mf�q�V����'���)�'p�Awâ^�����p�~aԐ��GG3�������0��0�7s���gc theme-joomla/assets/fonts/opensans-83dc890a.woff2000064400000022270151666572130015533 0ustar00wOF2$�A�$SL�,�`?STATZ|�| � ��Q�P6$� ��r�m;7��0V��.�<r�d����~Pk��g NE=��� �\�aG���M�>yD�u�#� �_' ��,L��(5R��*q���T���&�3��3~�R(q�?x�x.2�+0�r9R����RT�Cd�igZ��T��0Y?��_6%YԢ�dq}z�y!ʯ��C�ł���q�Gh�\7�}ɏ (XMha���:�l;3�WN���hufgީ~�RBF`v�����v�ui`�,�`B�Q��6������.$���#�mǓ����p��K��O��{Oh�=�X9W*��8�N�rq�2���@��@�7hNe�>�r�G��'��6�Z����I(����J|�V�P ����d�~�QE�`��m�XA����{"��9�0�q�*�m�gjJn�\�4'���N��-U+R�E�2@�j�S����.��c��;WI�Z��.�c�[����ȣ;�]���3W�Vu�n1g9#��=�G "�XI����j���;���`����u�ʰ�g|�R������ /���D� B����b/U(�He3�lU�0ސ\�K+�������.l\b!�� c\��v�p6*×ĐZ� �2*�Քo14?�J�Ln�(t��254�>~o�+�y�qt%�A�I�<�����$�ᱪ� 3@�N'kz210��w?��ם�ї�m� �ݺ��ZW��9�4'8�!j�D, Xqh����>�o�����u/zڣ�w����FW���r��TBU�ޒ�,v3j.m:�p��s��1T��s`!�%�%�`;KD����p�T�.��BӲ���瑗i�� ��pzR�5K#$[͑��ѓ����R�$�����E���1��g���h��b�6���"�2'�:�Y���4�E!�(�H0�l�@7�[����> ���$f/_WX��g�Q �cZ�E�d��~K�p �0ٲ���I=��XK�/ �[e���X����k6ΐƏ"-H�T�s.�G���v��<�Ӟ��A����]� r���E/�-aʡlT=�t� n���\�[Ǟ�����8 J2G�{/1��SJR�H�J ���ؘ�9o"�~;�]Ξg�g�hӣ�y ����w��)�����Iv�D]�E|�!5���t;�d�16zZd\s�V�'0��R5ƌ��Yۜ�]�St�Х*C=ծ_�O�����X�6na�X�k���J����M\:�C�u�C��'��Jf�Ԛ�.;L���sH�cThb?��8 �����F�F���%�%��}��:�}[�y��k��*���읒��\�ȁ�\�gS�^�|�|RX�l�t4�<~��i�����$;�+���.vVV�F���|'d�Rp,%���݁�Jk�XÃ۬���%�#�%u'��_w��~a(�QcjDC_�أH��)������7t����L�V)'0kw� xǃ��>K-c<e�f�34�M#wKŻ��eT&0m��=�1R�ѥmuu�,v� K��_�g�`r"H�Ӟ�� GY���cJ�RM֖�$�'ĺV �!şڂ�_v�L�e����2W�a��w�a�#|�b�3o�Ň�^���+��\ i7/ޙ&w!Cqb�s"A)ÙHyFDžQv �^���z\`��zG�-��As��<�7_bl�M 6X��ŧJU��/��+����3F}M����Dvv�8�'���}�Z5t4��Ț;�*&Lu�Ƥ픶���OeO�/�0m�\�B��v%������؆s��*���)����sm3�mu�j����xI��)�e/:�o�x>ofr_F�I�U�.�Һ�eWѕ'�Z��7�qF�7���g^���09<{��f�m%�U)p4mԪ�~�O���8�FR����3�^C+�"sn�Ұ�QF��y�<�r^�fo{�'F��<K��tpT�'�sC3�k��W4�J�f��6jո%��)��������e{i`�x*�w��Ǘ}M�2=�$ܱ+��r��y���1,Ms[; �����Gb����eI��fQ�8�E����)�����IGN�8�pΦ�{y�$&�S��Yh�4��4��RFbP�sS2S�-�{�A��B�ҹ�`v �q��h%g�9��9�F*���U��7���&��K�'��Km�N��X�V1e-�X!��`@�̕2-+�st�4Bҵ_����_����` �$,�Sk E;%�x��璎�\ a�dJi�J�%Q���V֔PN%w^�Ȇig� ���H�$��iڴ�]L�活!� Ze�j��.;)�<! l/���ɹ���h�H�@�M������P� �r�.��"e�J��$ �]H�_WrF�U\c�>0%,� .�Y"O��`��Ej9��hz��U�h(qL|�V[���a���uN��^dڱL�m�X:T���Al��\����qw��G��S�ܸ�q��D��E������њ��2)m���T����;��PN�8�(��c0#�����8��W������pơ4���9�57����uAVLp��GԖN�>w�֎��7Kk]�!57����*eaȨ��H"���[�wB��m#�D�Jw�m�ī�ju������`o'Rq�0t�S�������J��{�Z}�zBޓ�����bw:�ؿk\̩"�*e<ZeM��(���Wrj���b�vO��`G $1���?�C4��*�/��u��Ffm�E�(�����.��d[��<AhY��st��G_2��D��V�R7��֤�gj��}նX3D���&��M �w�?�c�@t+`�� �g�ӹ�D֑�S���G�;����u�mT�Tb�~1��k�[e����-4�ƃgq����ԌQI��K�3� ~�DI��o�� �������0n�9~b��e���%���H�I�";�L��Y����)X�t�B�ZY�#��=* ��/�hG�?�n���r���%��/5$C%�W�b����:r�Ji:�����MR�|9�Y1nF����p��I��Ï�M��g��'Q{ �佪�Iw �HX*�a�~�2�UX'�D\z浇�b`�!���f7w2��#��N.���ڒO��3ss@F�T0+C�mV��W2I!;*0��/hUU.��1�GF?!`C�#�f���mj��j������,B�m��_%�Tՠ��K�~����[��y#�q��~`��:�A:YSM��L'(�Z0�8�����!G�c�Nw �x����V�p��/c�C%X<oϮ5��`�J�茔><T�"�>u�'�v����j�L�N9�� ��6;C�RO[8�*9�e� ���ax�Exx�S��YÈh[�ޢ�m��3 <� �r�%�si�!��S�Q�5����Z���1��%g�&@i�(��ye[#br4J�n�Xgy&͌�/�-���-�+#vɚQU{�ځ`�f%<���U�l�#*;7S0�,q�)�X���'���CZ'��n���k�B��K��N;V�cix���ܪ��_�m���UCb=�-&5b� ���6�ЪN�Ə��t�'k���vd�JC��'{Йl�Pfw�pV�[8�Uj�U �6�v��"JZ�Ih�F��6�yÍ�i�;�ܒ<��A��ee� ����\!� Uœk�uU�sg?��(�Ž�}������}t#����ZZ��%��*����Ŵ��(��7��f�gdU�U�8]�wB�XR��5���CtOV'�����H�^��;l�~E���vА:�_���Ik"a:����>3<�IY s���h,��^�#b�!�KЄ&��.�Jg���:�T���������|Sb캂��^$Ɩ5$R��)4�8��m��)���+ I���ǚIL�*��0�p}��� �y��/LjE/�ź�ԇ��ѐ���A�v͙�t3X gU!`Me"��$Hťb7�Pl�s�{�ߋz_������:!�D���2�Z�~ĭg����<%f���o�[�_��1�:')?Һqo�3��3z(� `��7��!��ybX�X�&B`k�N�6����� ���+]�r�9ZZ���\H����T}|� ��=����{�a�Pg����*��z�*� ؕ儆Jowj).��ڂ����}��-N�Vj��s�i�J�pqp06��mU����ԋ [ը�KY��|�t�i 3KI�L�%�;Ň��4��e/�' v� T��l�+��EP��&�v7��v*1�rW)�j=@���8�~n(h *��4y��(���$ƗD��ѠA�G����v���+�ˏ<j�Wݺ{E����S�-/E�5wo~�j��is'����x� ��Wb���.���44�2!��]oT_��k+�������a��{r3O�N-O%����})��U� ��Tb��I�7fjc���M�,a�b�ӄ(��t���X_JoZ�OK���h���;����Ǵu_�f�;����éy�#�����<odp���v���h����vAMN�j�h�W�ӿP���Q���3�(E��z�p!8FÁ��t�l^�����m�t�(&�,���w�0Қ�s+�l[�r�(�'�����*otW�s�*d�3,N�E�ҢlYR�%��;�/�{�'8������ �'r�5բ�ß(?߳�-Ա9�]���7C�г���mβ������ו�t%�`�d�'Ȇ��Z����f�^.�^!;AW^�,�o��\���f�|5���aa�����3���c ������"�xwW��(���9 �!�`x���"T����=�hx�� ~��I����Z��9Y�m�o���$�^lH:�Оz�5�/x~�0�˭��t4q��G�(/������؞�㵁��:#���y���ν�I�z�߽r�N�clGJ���S�]��/��#�a,��d��߀0~�H��^�[sb���caf@�x�?�Q$�;̊"�0.�-��R��Н��_|1�y�|� *"����� �]X�* ���&2�=t�7|o���7U8E�VX�na��#�Ʋ�6KaBW*,���� }�(�zV���5䄡����iӸ�sCb��_IrP�\_g�X����-l��Wwz7h�Yo����H`��9�H��!��z*֠�e���j�j ���d��B��&���U�Un#��͔���1��k�ig��4��ia6 ���Ʈ�T�n<g�4!dp���6J���:��b���;��\����Q�A�+:�|\5���dibnE<Jxs6"�B�Ξ�dŴ'�7�IյL*c�:�5��w�-2�ci����wU�t��Ry>�����Ͽ�qᙳ��4�N9��- ʟ���zR�M�o�U��ȁ�T72F�t�}����*u X�"3l$ų� H���s��Ş7��+��v��P�n]]��/���`����{!�w��n�n��<d%�v�R�����s�ʓ`��('��&������#a^4�$�H�`��#\L�W��pjQVc{�]f?JO6��a�b�>�>O�."Z�(c�D�C{�}�����<t��) �3���@6���BVO�ĸL���U�rqd�r�^#М��kO��l9P�b����٦Dہh�i�'i�+�B��C{T��1�7�/�*�����;ڻ��]�O�G��C�ЎT�r�?/����6��d�(�Y�� �gr�>�~�u|�p��ʗ����O����s�p��;���*Qt�|S���sY+�Ɛ� T���A��˶�2�'6���pyG���O��]-Wc?�o�/��R��k#��n)�9;�����<C}̯����_F�' �ى$qQ��å����Nu���VM(h�\�Ω�'�atҍɫ���J{��>�v���%G���c0io�;¯�q��'�*V����-�|I].r{��1��Ǧ�u� ���蓤��i���!���e�<'��o���M9}��غ߯f��u ԡ�g�q$k�s��~��!��(���5� ����>I$=~�й���ʔ�`���&�V�dI'}"��>�|sx�qw� k���[.�����U2�Go�4�_|zA<���/�d�z���7oCo�Ϊ�0m*�!=�˞亟t�+ ��zP���nA�і���$lO��p��-Ԍ�u�l � sy5� G�So쥕�蒃4��������` �K.��ށ�Dc�}��lnQb�L;��ʇ�m��ms�+��I1,N8+�Q� P|Ȩ3��yn:�:uv�-ʮW}U��F�WZ0_/����c���=�K��T��1e���şp���WY�Ώ:� 8�,d� bY5�5����5�V�x��_��٥�(�Z ��0o���&tU!h�����ͽp�T^1����m�P�ӯ-����ͫ�e��Eu���֕b���d��h} ')Hˉ0k���9�M#�Xo���� :�愆H �;�!�Ց ܕ��6�L���ù����5N�x7���qw,ʕn��:Hd���J�M�C�.�����K�\�Z��7�lv]��}w������ԍ���/* )&��<�0�iLg3��l�R�U5���/�Ҍ{^eѱ����w{f��F���$�+v�#I�16f�DУ"�/���d"��,�̒*.f�)�����w�E���ξ������f"��� '�y%r���O��T��*k�'zƵ�=</������L�|����u2���/�����}��9:Rk�u Cr�I����^��)7�n,�y�ۻ4��:��jF���5ʧmA��P>���{�H�X����n�=��'�p�R4>��!����M�y�2��2S�^�;�P�����٪����xJXz�=� �=C�*���P#�$ �$]|6�\��n�Q��y�z �=݈����p�!�jD_=��!��e,�%U��UU�ꡇ\�5ߔД�yO*� '�G�!J��3^�˜K4��2h�>�Xr?����m�bLE�Tr��k����D��!SH�o��I\I�2Y(�v��PL=���O?l ��J�v���BFI�!��oVz��F_�.��@��?�Q��=��<��9jq��z�> qEu�B��d����l��kL�q�3���)��PN?B� ��՚�7�0�sŸ�4���PU%��i�D%+1X�QlDY�K��YE�5[��h�IB����k� <�}G��̠�f/�q�눍�``���1:Z���+�GN�iii,ݱJQğZL����C/��m=L�0�n6�y��H�"v|�Wi���q=����( ���R�.+���/}ʮ|�d2��3XB��,�����F��~�W�{��$��^Z��<|'`@��nƃw�LB;%��&��d@`����|{�4]��"��V��c:�c����B�氉�^ܓC�˩T&�u�-���X�qŅC����������Ei$�,a6�\ɺ@<�I��D�_6��E:�3�Ѥ��8��� �L�>A��(���� !�,#�jVu�ݞ��76>�['�nJ�@ �vץ���%qaܗD�#1���X6��UK�����N�:j8(֗��n�dO���Ri���Q����J44�4���T��L�����6-��o�ޯ��O ��Z*8;PQc� @6�)����Qϕ�S��؊���J{�o W����g��|t�;�G���P�"^$�ė)~��,�y�C��h��K]y$���K���\|ɥ� D���'ċ�� |�/dznc�O �K��1�@wEn����E�vVr/�4U貕}*��y:��,�.湊w�L>M�\����M��:"��9�o�[�\q���w��/c���>�:���3���8��=>��NN#���jʕw�c���nd���%� ���Yt{�}��~��X���ڧ6z�a�.4>%�*�V�l�˫��;�C������G����S�Uv��I�������<C���;/!�k^ �y�͟wxƾ˥a�`����~�Lh*�i�j:��"|@���af���Up=�z��6Ѱj��rմ��üq6\Q�SP�o�0Xs���[{A���%�:,��/��O��[�KCt{3]"�a&i@�y�$m�T�<_�ôѓf��7fl���4g><�(=�7%�Z���L���+7��RXu� �T0�]{u`j�h$-h}p.�5 �K��=E��9+]���$J\5j5h�r�Ū��Í07O!I� Ӳ��ml����]0X�@$�)T��d�9\_ �%R�\�T��B�Q'Id �Fg0Yl��7ŻZ�W�*�vT��ut�7ܷ�����M,�������𗂁�ćx�Yo�� 9��<��X�K�DHu���7���+J$j�s�x2��F� �-z�>H{�> �m��V��]�m�l� �D��7W@� �.�!�&yJ�m���|�v���j�M;�3mԜ�wn�n�����Q�W&� ��< ��!\;��$��!��S������,���˼���]�@(_8J�ө�ݫ��KyVPJ-B�\�[l������Y��&Ah����EoN=��l�B�_�}���{��ҀH���_��X���� � ���}�w�x�A���a�� X�jn�~b�rga�]�m�,t+�*i ����D712|�1`�N,�i`�~&ƺ�j�G����@-�+����'�?��#��E����8S��]�#�s.�>Q0�=�lA�!w��b.�;F���)(8#JnrB0���ʮ��<�G��<�aw9��U&$�A�|�ԅ��p�w�� K��_�'�=��{(��}�s�wh�U�{ӱ��v�+;e�h���Q�e���+����Y VY+����R���AP� V��2-��P���$Z���?T�i�Tu{A���� �p��' ]���w}߿}��]|�0�2�+�ؠ�� �?��Gi�?�b����@M� �ijS<�P;���s5M���Ttheme-joomla/assets/fonts/robotomono-fab34ee1.woff2000064400000016440151666572130016233 0ustar00wOF2 6t�4`?STATH�, �x�|�6$� �X�yq+EF�����P�_'pCD��}�KQ����A��x��i�z�[��<bL��D3`�M�c����`������v��v�$��d�~�=,,T�b �GZ0�+Q��m�v�ʨY1un�R���y���e�P� w��<�I�Y��&�"�L�y����l�ݜ�� |]Izf�;K�V�=_D��筦({8\Y���<�3Yc��7��<�v�cc���%��ڛ�ݼ��S�,ܞ���s����yy�$�<Y�!�d�2ʭp��iT��e��R�B�n���]�O��%"���^t�̰��=�!���{���p;4}z�E��g�� ��~�r�� �Q�<`(D�NJ:p���8�lSUl�m��j�{�� ,} ��x8�6�;̑V�/���X|� �?-ǡ5��S��� ��rѝƞ���O�30q<�T���wbS��!���rq=�c$s"E��7�B�K�u������r�}w�7�}�>����:``�l�!ᇬSOټ�ȕ'�7�tv)�"ŨJ��(��P�\�JU��`��W'�/\=����Il%�h�&r�vk�h�$;�ԪM��ڽ��0�y�X�6c�ؽ�|f�T�l,4��1i>(-����c�,&����B���[����u~d0`L��.��Px�]���O*Ը6v��&��ɤ�U�Bt����i=`BX��tS�M[ݮ�н���j�Z�R��fB/�B<��Al�V�=��U�"���Cw�s�8��� K:u��ecle,qmSu�|ɫL�j�/��B��Z)�߱x��6Ρ�$GzZ%�Ȭ��MR���!ͪg]�h��[��~� |���%N���o}�=�cF#nhk��dkG���G⦊�P���;)�%|aO��;Wc�VUQ'�;�ݘG�� ��MR��R4�35���#I�)]�nÜ�h��#N[lSF)��-G[݄έ�իp�j\�Z"�.�þ�b���WƱԥX7���R!����W.��;,�Ȃ�!�ɬ�h�毜�V^іҴrI��4Sw=�����B���+�cVT .�k���3������ХW��9��kC&�oH�����c�����4s��>+��6�G奊����Q^:8Qھ������� �v��o�c¼�Y�,�����FH9��(Q�%=�8���P����x��zq���V.O./b�P�����f ت�g���4�L���W:HǞx��Đ�h���f2"��L�xΤcG[Xs幧��y�g��%�b�G�^��ݩ_�}���FEy�YK��}j8�.z����J�w�Qڱ�w"54rH0�x��5'���hnk��D �z���� �.rKb6�3��7x���c� J+H�kkQ�:ma���97��|�j��v`#�7��:�i�gElcpQ�/,a�;C�GnX�@�P|����qM�$�6��_�M(PơKݠ�a�������$�6dq�C�@x1y�S���g�"�]�rֻ�ڤ*@2��x"��k�Pm<�x�Q����X�����By�,�l_��9�!�Q��o�đ�H�4܊���kvxj:`�f�c+�,��`���,��X&��U �(P9��L�:a����«�[?�G)ET�D1��]�k�GeP��+./��X�h��\�HS��#L���B�`�J#��Yfl�Z��gN�T>��ă�@O���N��V� ��a�N*�Q�g���V��%��>U� %�ibd������sgj��Q4A��[�lGV��ê;]��_8QGw'_��8� �[�^ap�w-��`���Se}'P㱎'6&��2�M�nh�6q�k�2^9���k��K���߹��g��p���q�����?1z�,h�ϼ�)�u���q2�9첎��y$��zU�7�zؓ�+b��ZR����Z��,_�H�i{��~$PZ�����|�BDo8#I��ʒ��僧k�h���URT��F43&��+�T�ں\�+�����F%չ�-�PQ 07E��DT`p������':�f��I�z��O�h㟘{XR����Y]X�<���gK��~�OĈ�Gjh�g�ޮTwR�q���ǽ[ �*+�#h�Z�熹4�� �Dž��"������&`�0»���˻a��oTx�,�ރ�z����( ��W��,�"��X�r�q_A,����ߤ!.��G���;�M��ɓ*��O�.��Ņ���σ��U�,s��yS����]UP�l9o�Ǖ7m�0��а��c������0-f�Y�,�W`�|�:>o���a�6%��@&$f.��a� �����ZNvZ�ie����wvl.�*/+|��:� �=>����5Q�2�R��ɤ��_~a����X�"(_�.���eA*��T�����oY\���w,���pQ��!�.$�ǍàHj���QzX����E�yz<�ٹ��v�_�A����T�J1he:u��#�:u�f*�:{B���V�)����"�\F+8gZ��ټ}HPTxX��wQK��߀f�f?���������<x��q��9� 'eV��.#>%Z��Nگ��%r�]� �i�YIV&����p22�9�5 m��D 2ƝǕV�(V�q� ��܈S�-j7�d�p��(�� ,���Z�"֢�ˍ��j���吐/^��@���+a"�Y3UZ3}"z��1��7��(?V�����Euu�?BGf;���xۓٳ?��P�C����R,�6 �B�e��m�?2Eo��*��V�@j g<�66�.\~�+��+68�N�i��.��N����~V�f;�vH��z<�7r]����E�~��#/_'��l�c7��34�F":��n��5Ǚ�ky��alC�T.S$?��F_��$����;�"����>�LNPq�[u�`q����f�k*����ma8��߽�d�{� ��O�t*ַ�B�$���g������?�C)���&KDO�0�x���N/�|I �������:���Q�Pso� H�RH�!�]�x��"u�06V/\��vǓ�A�"}dLl]$��ÑI�4���B�sD�Dr��"�V�C�Nh��db ��i���Lӆ�M;�x�N�06(���c',�<�eG����q<��1�,�|U� ̵+nd��PYD�ũe�*o�q�!J�+T��st��VZ�է��w�_Os�eP���K�*w�dd�77�b �� u84�6ڪ����bѵ{��4�I=ݍDi)�����С!$����C������CWo�>��_�Za�]�d����ه�����5���f�p|ЍdgW��߸�Fr�ӴGW��L:RBՂ�o��r���؞�VeT���0v����� <��3����[o8�J���2��t"��O���¥�%9[]&�s�N�5�Z^}��p_*=SS-E��?�x�Nw���v'z�z���$�k��_��T�^ y�4l7� x����'�#s<^:@�W۞�`�3�Zj��%e��##�����o���jC������[��]�S�i�a~t��j�]AU(� f*ԬRq�巫��3ja�(V�NgX�lqa>��������<e`c�e����B��-g{Ґ;/�����*qN�5�.��w�Oi�,�O��dT|�ۤ)�Ù����b�X�D�� ���O���p�c$#�1ts�-Afp�z�ߍ뾳�`��.��f�X69�i+�x��3�M�"H#��%Gz�]6��0��u'��� �h��W��D�=���Z�Ɉ�M�d^�p���I~=ᢚWC�H=��0�"���Gy~��?��w~��Q�v����k�;id5���_.t��s0P�/MP�e��w��:��p��s��/76��ط�Ovt��7-6����gm��U�O)X ��ܺ�\G�0Q��I��ybڢkh=����b��u�U�;��HXq��('(����;2�ɯ��?��vW[�|��C��6��J������ �]}���H��#�a�u0x��} xډ����)�HL��i~8�C#A#���²]�N�죿��)��7�z�� E�#%���Ծ>$G�Q���k��;��r�;0 #3��m�P��Թ�l��5�7�-�����U8ؒ��e��&�z���:���Y옉�]�AM�4�+��;D[w���y��Cb �o�c�SY��4>��>:th9��[�[YL�ǹi�<�"cR1S� �}�1��Cnw��i�Dnn� �;<��K�y�����ō��w��� �6�2�Y@�c�{5�n�lp�:h�P��᪴��|�8F��3�3j���5T�FD"�1(@!�w{��"P�9<L���l賌����Sԩ� �6�|�h��q�!eH�Rd��4)]J��:�����V� ��J quFc�ݕ�z����\�}qqRf�&�z_�r��^&Π�,:�t*y|�7����P�XARH��g6�?��zPG�"�j;ڷy'��:�;���u�� ��߈���*S���Ml��־���6{��6$e��I}D�j��Ff;���]���z��Sc�kKÏ���C15��8�&�c��[bIUxLlM8K,�G���Y���s�r�}ԩa�����UsK��H��؈��Y��%4��Ku�v⮟�H�4G>���y6?�ҩ���ʝ�A<;}�93 ��E6�E��`�l�,j=`\G:k+�� q\c�o�<��^MDVC�뿍�QCL�7�_�_B/��]���|�n�����Y�Y��`��ןQ�ql�8��ޢ;���'�_;=�W�{�����T�ϫ���ΈH��`L������z���~����uޙ�#d�PhJ�BQ�[���p>C<�(�ud���� E���ؽo zh�q��;(��q��<��� �V�T��6��l_5�ۣ�$:Wą��g �W+��=���#�(�%�!�s�sA�ҁ���iP���\�;3M�����,y��/'�z�϶��a)B�ӥ~�K����f[�A�d�r�V�^�����<���㕽3�ͅi$)�ef&A��x����0E�l^�Ϟ��yV��9n�t@�g�t���fF�Q~�`��c:� ��FB�vs��͎�}4[�_��E�6��t�!t}���،vKT��Nλ5�p���D��#�bO/G��W�DM��Ȗ����3[ fӽ�okz' 7��<T�����V�S��u�ʹ�q�C,Ax�(%����W F#I�K���^�N���dW$���N��ʢ��,� }[r��^�OP$UbH���^PG�"��W+hW�*l�EM�z��X٩401Yѹ�V�E�E;�8�D��b�J��Vj���uKO�K<@�W�vjvjk��a�q�Z6)��#�C�"9�x �>����H���Gn� b{����h���b�[0�0�~]Ou�g�F��5� �萉5�:���/ٞ��KY�|�'±b�F��"c��w��1��Qzg*�a+�FF]A�S%�g���Cs{\7B�-~dx$�g[������qw�W�j��@��Tx^˚&\)P ���*W�p՚�E=�\���U���� �B���I�X˖�gQ�02���)�J#Ε�4���1�Q�m���ֈ�Sz�H��3P\+�E�(�LD��Y$�d�7+�mc�;����у�#ɴ '��6k ��KKj��!�2��3�s��*`�m�S���~�����o�P���]>���"�h�Ag� mp��� ���Mo�\�[�Sg���Xm�O\B�<�+�?�Hؤ��(䁟���Y|w����γ�˫�Q��9r������S����r���z硫�^]zvf��5e���^�R��[B�H��'OpKL%�ř3Jn��k�I�����Ȼ��\#��+i VU~�'P[!L͎��Pq�J �h��.qZ�;����^b�C�ԗ���% �L�b��z��?x�o��5�R?�[��&w{�ˑ�DG\�qۡ���dg�d�.S��G�n29����� ~�|��n�S�6C�9H�Ȓ�����0X_x0xL�,)�����I�de>!L)��ƌ���Șd�de8��`m�Ԕg�g�����- �X�k����8i)=�����Q!R'~"�v�^:jP.]2����k.��嚘㸴�¤�l!;�C1ng:��0���w����D�?l#��pͫ��0�4��w� ����jC�����K�4���s&V@�o㔉 a�{U��)����3iM�~�������_E� �!b`��M��1�q�f25߯�E� �̣m^D��ѱ����'�i�CkB+������J*�*A���q�JK0�hi��Fٍ�q�|����#ɼ�O��&W�7E���~� ����h�꿒6:N�������%��Y��ۃ7�;��Q�}Vh�ѡ_��bh�y�]x ͎ZUEZ&1#~���_�Sf�дs�Ib�9W�f�;d�;��H��H�9k8l�i���͛W��a���*L7h��V|~�_�`�i�5YP��zEm��k�)pj���)+hQ�bd[=?/ �mkV�5�8G��J ���%�}P��ƶ5�.F�����O� ܹX����5Ĺsq�k�\<�m?����c���X �����LI�U�WE�^�\���F�b%�H/X�"0������T�?s����+�����C,T)��jx��J��^�� �X_���6xs�6�>���S�O\�/>ض7"����&z<(�C�*�T) �J�B=TYP��K" ��j��ݝ?��b��� ��t��>U}�b���܃��M�fn��L�o3F�fi�߰4I?��S*J�X�fL��)��>/a?,�X�I��j�aZ��z>)9%5 -=#3+;'7/�������������������R������N�Ͱ/���P���No0�����p��/��l�5��+�x�_Y����F����* b(�X��و(h�V��h��X�8������Q��1��qp���P��10��qp�[g+�`ba[g'4ᓄ�=������92*z��T����m$dTL\����H(F��m�X "�#"����c�F0;7@XkwdXt����theme-joomla/assets/fonts/montserrat-a77dae9d.woff2000064400000044400151666572130016244 0ustar00wOF2I�4H��:��`�$`?STATD�L| � ��8�J�6$� �,�3�(�5��k��ȿt�G#b�C�Gߟ22l@bFN��O�CdA�`[��¤*��Eu.\1���]u�3�����Vm��H����@�H6��'�>��F���+'��h�^ɛ���?`����J{������tr����DO�A�3�m�Or���ߗun�����7����Ȱ�B��}<?]�sν7r��4֒���)b� �U���GD� �-ZĴ�k�O���ֳ�3Q`�Xc�l���Jr,XCoТR��W�U��^��W%D���ݳGN |4* �%;,�b�X����_��X���8�;��YH�2E�RPѧ���ߙ/%������k�������RU�n��� [�R�S�)p��@ҽdCd^b^���9���2���g����v��iC:1S� 5ƎC�RH r~ �2�b:+�%9�b�5�P����1ᜣ���Uj�1�,��ܚ3H��>��?K�>��O (0t�� i8��@�)*�ya��f6�*�o��u��ݿ�ޭ�4K��E�˔�rr��/���a�K`����Uj��k e-�"�����S�)��t)�@T��ڷ�5��л�"�6�����:@�1�TT�DP.*B�EE(��3լ��F )9i$9d�)ӡW��k��u��ٿ����@��%J y��,HЋ��2�B"b,﹊U,ݺ���vn�J�:�� ���H��c[uTJ `�p���^U��Xױ��"])vH���t�ލ��-�ѽ��uVV�����12������/�օ���r�C����L�4�j,���)��P���! ��b��[.�md�B�?�1�I�ȕ�Q<�n莻��"`�!Rj<'����+J`E�q���+G���� z��tʴx��ڟ&$���C��K��7���,Ƴ�/V"������` ���F�4'��&�g�I1!4���hx��2��Õׅa��H�G�X�Bل3U?Pl��[[@ Tcm�6����xi���?%b��B4 �J5j��Y���14A��42I�C�c��HD}�; 4�� B�01\�`@��-p�G��wj\��D#�����}�X���8�sfpH[�.n� M�"=�k�hF>]��G3�"�&H��K���}ԝL^+�:]kޚ�by���V��ߚWm�֏r�%g Vk�\Yҧ�^i��2�_J�I�c�(��}�3x�+���I[J��f���ͮu����_l��R���5a�f}:4���Si7]ZT�R16�E�7kޙ���5ڪ8g��\,�H��syC�� C'���%^ΰ֚����O"5v�p�&$��G���9�ۭ�+�X�;�_�{i��[�I%�0�0���/�)�j�R�n��ʫ�]��������P�7�ڲ¦v��d6��Ԇl� (�e��Ez�t�����Pj�J��d�zD��`6˵(!f�Y9��!��D��S�@���d��?�<�}�7�8lA�5�[,%-�.v;�x��Z�� �������G���<�s�^����Vҥ��;�Z�O�7���ر���]Zԫ��P�2fR��J�#��>��Ϡ�����a �"�g�OUo);8`Hm��k���xc+k@�2�p� /�S�(v��l�S>�O�-pV�,b1�PC!�mQ�� ����y_ZV~z &�L2Pd��`0m�H�+'6@���X���i6H0��K�����JJL3��v?�=�9�!1���� �p��J-�*@�S�c�eؙ���"9��h �.`ts]׀H����^����S�R"J#�=��\(�x#�%��19\u�-\=�UPmug�o6�� d��r��SBHJ�0��+"zo�D8����3�:�U�L$̠��K�;�� @�s~H��q�ioj ���\iQ�ymsBȞ���� Ƈ����x�L� $[��5WDf�1���0V.��+�37� �)��3|��y���y [�V���:j��04B$�EQ�0 <��c(4�����TRPM���DѸ�pT��qɖ�(�k-T��b�2� �uM).L�8H�A�#��V6�1�]�S6+�1i�"�* Ḑ�C�L0��B%��o�^���? �f�2�j�K�dN���im�̫"��p��G|�Y��c�B����d|v�_B��7��{�^p��|�l�V@2ec5zS�`W5��S��[��U�Rn'_��Z8���,9���%���u��+�yˍee��Ӓ+5fF6)]���the�_20�Ocʓ˦����wqz��v��а�$zT�J�2e��wf�d�N�<_�d���r��|�T�bη�� ���:�����v+�6�3rBA#� \�=T�X�_����~��`"Ok7�2���3�r--<�ԫ���K��E�A:j�N;,!K��G��;��(�cٴ3:H������'�<� ,�e�T�q4=�/����;�Z9[�!��0�^�$o$�"_��~4ғC�Gz��p�m�TWSC��I�2��Ј4в��z�����yRxd�4��>�xt)��F�HC�x��߳W��^�ڜ�q�sz�> ���%��D�|�4�FX��E�*�V�R%;��5�O����@������JM(��;$�Y��!����P�#�BZ�B�d;6��S�6ivFꝕ�%��tq(�%�Q�H��R�d�.enH��%��C����K�R����<�=�&O��<�C�$���ג�$��b�d���>�A��_ R��lXtE�3&��P� !2�h���ݹ�;AA0�I�s�< 4*hT*U�p��I � �aB �Fn�i' �_ �����"c��)DN�2B�l�_��a�6�r�P�q��A+�M�&}��H%L��/���\��Au�գ~)>��w�K{�^�r��0� �ٸ�B��"�<�ϲS��wP���7��ٰ��,���o��]�X��x�v���u���50�`�`�%HI8�W��ټ�K\ȅ��i���[�HdwY7�}ft+�h]�ƣv�wt֤�'��#�Be������v!������[(��}�-P#^�f�|�Z�|S�I�X{KCeS����>6����[�s#}�7��t���K~�.:v��;e_ܑ�K���ăq:p�U��s]��:�.�̙wg_($ߗ$�4@پ)�y^~�Bʦ� ��T�Q�N3�6g\t�CO<�.1`66H/�0T�@�TI�JAm"�ĪJ�_w�� nM!�ĩ ��Wē�BH��/H�\BT��r��.{��SK��uRG��"�S��Z1M4Y�6� �� �k���G�,�O���O�M��Lޏ\��0.>�jt[I�*?v՚�%za��g9�[���1�<�^鿨�"� 6 ��\��OS����w"�}ϓZ�ݲ�k���)��3<r�z�r4m,ǵ;�3'���NX��X�����ԗ_��4�DM�n�ck���,���J�AY����}� ��i̻�m�:wy�_ �h����~�������L[�:�OS�"a1�;6�KI�uN-���L�����XTp�G������w���&����*���A�$,jP�L�:�r����{m�zSTϬ�s�i=�C��&�Q��`���럤���� �� #�܁m��D� <�m��w��ц����ب��ԌzJ����2a5e��EG��X�&=~���ҁ�=�!{�S�����U�y���}�3������|�?�ů~�?��N�����C�:Cb���ӡ>mw��QQ�R�#]�+D��A�8&�����oh�s#6���lh٭�5s=�G/��4ݑH��S���v���Pi�lI�;=�,R4P�$��ɜ�ˡ�'�_��m�?�o~���kʝ�#P*b%�4L�exXoϖm�T��+�y�`�8���1�"��ʭ��>T�ap�aDQ��g-C.̴Hv6pܔ��Y��T <�ۡ '���$��z���C����B�5�{��0O�Fᢄ��=� �h Ϛ�p�L��J��R^2���|I�"d�0�����t�쿣�^���%�:W�!�*nZ4�v%ĩA��|��b�JJ�UDY�3�8ܢ��J���8m�����VUUGX�|��غ��j9����X�����8�.�7^����o�յ ��Zе��e��*��_�vm�UI�q=H�4;kߓ�,����ܱ�-Yv�Z�F���8�t��`���e��ԎTT��\rv���MY��PmR�� ����;@qq�O���D|#����6�Հ���q�f��0�܌��l'F7��s\���ӭoYr:LXf($O��h��5�oS��2�N�=��D(�o\F�z�=�tA]�Cm�91Q<��vx�r(�ڍE���g�y�6�Iғ{��n��xngk?�v�q�5�`�*49��7��N�,���B�_��r�(ѫ���P�\M���!WF��Ɯ�f&�߮�XMdM_u���������T�g��k�6��o�CY���:�/���\�d�/dVF�u!6*_`,��η�`?=���$�z��"o�ݾYcR!^/X5��Υ�m��"���w�j�lw�f{ �j?��5�o.��oλc� kW���TNJj�Z��%�lp����0�K���q�f�<en(��ڵc|h����8/33iGx啥����K�N�:��m-w�Y ������>-%ו�ʦ��(0��6�v}�u�X]�D�ȣ�u3V�<�N��k��꼽#D� �hjQ Rg�<�};$��w��蓖F#@�p�x�t�>M�m��Ws������U����g+.uW�ϩLb�5����6L��h���kIv�5nBHb^��uI/n��9jɅ}�_$��e�����X�Ap�3N��T4>O%��T6�Nc�T9�MUc�T=�M5�ꢎ7����u��B�Xh4����#����4�4���+�Ύ��89ɸ�p�芩�0|���D�$%�D�$lɒ���K��_�TX�t�(���(i��(C���1e��H㌃�7e� �&��4�$"�M�0�L�YfQ���R�BRE���(eQ��Q� �*UJP�J�jպ�Q��Z���ԉU��I�ah��Ct~�;?͚u�?��v�avG�բE�V��9&�q't W�6��8#�YgE9�@\ꢋ]r��+�л�*�k�ѻ�:�n��&�[n��6�;�Һ����sz�=��Ğx"�SOu��sZ�ک���k�u��*3�>���o���o� ��w���+�Ƣ��CXX�ؘh4.)>���������ĠB#g���**zd�`c�d����j�\!~\XK�%!O��փ\O��EJ$�>�-S.��R'��+�; i��b�S(6���AK�bb㊌�"#rH��d���%IfI�S��&�3"$$!��� mz��V�4�n�y/�\'e�FI��'e�`�iI�.K6�q�²he�anj�!�(�W�X��ɢ�� WB��tr e1˦��_�%E�H ��X+���w iS �_/��-?(vٸ��}�������C�C�#�#�Ӏ��hc��IZ�1[L���S�>��/X۽6�a�Z�&���Ǭ=��k���K}Ԟ�붃����tc��X�h��[��d��~�z|����A����(=��= f���l���f��_1L�O�9{ ��ΝJ�υ���� ��Z�G����o�D�@�1���-g�]�[e^���G��Q2�ȇO�]� y�k�<.$�$���Cq9_� )�z��3�'0���4��?tPLhDqfÐ�V ����r�M<��or_�O�u���yZxy��Xn�i<H����9����ѩ�S��SPL���aL�� y�DR�&��`�Wr�W�T2�{���� ͣJ�)nu,E�o<=8���"G?B)>VD�H� HrBt��#@\��^ !ÈB �L(Bu�����-�=-n^y`zyy���@� �����y��� n|�*���_�:�4`��4����%�D�5e�T�DΪ�<$����7L&�2�o>l��(k�m�ԒN�]���.�Vv#+�F(P�����ф&��ׂS��}O�S���j.qz)`8�g�z����X��`�/[s�%�����&[��"�q��Z�@��S��9>�K����*�L���v 1��Nv�{��`|��?���W�z�ޤ�'���_ �b���`*=�H�����ѹ9@4�5�^�לr�>�;��F`_=���/��t�����_>u��W�h�Ö���<�m@;�j�ȓG�:Cy����fw����댳Z|��Zt���/�{������?-=�VvN.!� .B���諶t#Z��z�-E�4���7��c�3��L6�L��V��l�?�{�w^z��<R�/'��>�ag��#�f�R7m��6�1`$ ��������>� �: f���Bu�E$���ň�(N�$=��G_��ʔ%[/��0�0������b�i����訍a��/�Q��Ј�r��(/L!e�k@�K��oc�M�f��IH~�R�U��*xB�Y��?9e�$��<[�i,G�>43�}�֩-��c�#�C���@_oOwW>�ͤS��D<�h��Cm�-�M�����u����j��&#�Tp�>㯭� �Ǜ3�]�� }Sg;+3 '�[ Nx����̤yb���j��i��ݦ`�f��<]��&s�L[�F�]�:)w#:�Q'��^�&�`����i~2�R�����?���2�>0<;��mZ�u,����T�8�R�ٗ��BhZ+�s�04V� �)��!S"8��/E; �c{)g��mX:�B(�?5��.�^73�rLo�����Rj�\�͐���I|� o5�&�@ ����HudFm�sLd$��T�B�; �b�������W al�b��e��U�K�N:��:�������)sڜ�*.e�6�������=�*��L�v��l�6l��3���0��d��Աa�n�UTz����[�u���=��%��0���0���΅n,Z� <���Y���rȍ�z�ɵ��'�L�v���y���^� ����-�K�V�c�V3z-���e���8�}�mn��?��K�$T���[$v�"�7�Ə"7�7�Ssw����n��^S^����݆��p����"�.�B���R�q�?�u'�l^��R0�H�w�1�Viq�'β�/w? �ن��XL�4Y�\�É���SE� �mK��N���g�@ �U�RV�W`�~��V+3���!.�{Q���S��B��Xf���6[C�<. ���07�.��4]�Jf�h�%D�˘e�M)K5R�G�v�E�lg_������B]Gjbz-����o ����[���� ��U���1�N��_���$K��~3���rv��,�e��Ӊ4$��r�>�a5���g��%�&Â.�^V�z�V��tp,ĸ����C� �n)@ �����R��yA��i[�ѣ'���9m �De% �}�S`�ӥ�a��0�����g�j<O�����\�ԱCL��@�گY#u��O�$��� �m�T�¼x���%��O���_�)�x��������^+��rcJ^���L��BXq�(�0:��J�!식;���̂� ǔ˨*B�@r�"b>���; s(K� ��g�wMz�C1>E�l?�JBmv�/��K&��-��4�add1M^!@�lIPZ�v����� i$��\u!Z���ֺ�\*-���ZCd�R?Z�cs�;�s�'�w�hu�>i:јv α;Y�p���^�jy?���AU/�^��4�@|�z�mdAS����A^|c����-��#:�>�)��㺗n|)��ҝ:h������& ��ұqs� �N}�~�XM�;��sAt��z�E�Hx�T��!� b�g�G�n�>��������f,���Cͻ�R��`��H�/!P7� (��d�C�K� � ���l�:[5���6k�'w�C% X�K�Ce�T���S9�e6ar���n9V䟵����k�̇s��<3�^�gn�"��k!�J��h�a�[Pf�ոy��v-uP�f<�y��cF�GŸ^�#����{U���"��4�_���8��x� L�.0,�~�O�[}������k�k��幁C��Kkv:}��\.�;���r*�h��߆��}��G��w k��V��ؒ�'���ù�<�vpE��+n�T_a��)��&�+�[ᚪ=fO,��q���ʡ7h�T^i\�|�oX���^��l�\��K�:�ķW�h ;ڿ��9 (~�9Ώ�!��ɜ�����R�CAq�Y���P0�_�ZC��rd��]��ō�I ���0b`Dr�l��-��+�Z�|�l��Nd�S~>r��歟si��X�I; �Rد��F�� v��.;(U�U�GP�Ԃ?|C�J*�18h�A�h� 8�b�W�۸�(�� 4�a� /}�"����$M�q��c�-Ή�P�v���0��W�+C��~���֏G�!���?f{jR]�9���J�?����v0��#�跞�7�gYՖ0�y�_k��#�������-�n�L;5���E�JS<�M�I�?].I3�r�t��c8���ԅ����6����ilH��WZ��^m�:�O�c�_���i��m~�u˵� [C�x��Y,Vox��aqp糵�>-��#[��,J�hs�N.Q�_�σ���A�#�-�,$��c�e�1�����gh�ǒ�Ci�B%U����P%�Ɠ�1ybt�z�g5T��`�R=�*R g�T =�b[�n��ܝ����թ��0+x��#�Eb[�VzM�KM= 5�6��@i��H�]r�g��"BFK�w�9Sk� ��(�@Y٣�ˋ���M���U���� �rTU��u 5K�]�����>�U� �W+\߭V B�I�I�X�o7N�3�/iƟSDh�J��S���sV��Ii������(A�S����&x?�.SIU���S mTůD�Sݬ�bȢv9������ǦP�Ac��*���/���ekd��ʧ������G�LeZ����D l���m`�#8���8�v�� F�i��4����=�t�|�A��2�h<���_�V��E�a�B���4Z�S���H^u���lMA(�A���A��^��m y��w�ʭ�� }�۶�Lz3���}g�5@��-��^��ߛ>M����&!�[ג�;8�vN�f]Cr�R���m��R��T��;4�Ʋ��A��������'��MA��Hb�.u�=�u N]�E�?��d,�5{�|��o!M��a!����ۥ}�,�@�� �$f������D1�*m��y��3aa���C4� V��v�5�z���}���ͮ:vf�X�+˛���+���ڗm�P"e��s�B",��퓌���.�dFX B�p�c_0�W,P�6���4۩!��Kx�mr���o�x?�n�l7p��6*���_s��]A<�� ��`�*v�l�M����ۗ� �v!-[�� X_��һ��.pL���{�f����DZ���m �s���-��e����Ns'�#gFAny.[��햜���O24<4�j ���~`@�1�)%��k�hPS͔�}�)%��gGA��l�<NZk�W��8V6nP0؟ B ���)��a/�~�J�6��+鳻�Ҏqm�3�G�lpc̷X�6c�ْ�Xs���1���P�ľp@u��n�F������#NC&U�*�OI����E�mod_������@Z+�ĭ,�6� V�m������V����S��HPԀ~�9�VT�lvďٰ� 7UĪ9�3V�Ld����G��LS��U�wk,<Y�%o9d@=�ǀ↉B���%7�7J9���Q�X�[�mk�z�Ɨ��7�LW)L=�0�c�n�x"_�h��7��ۋ�%����a���b��,{��ݧl'��S![v�hy;ʗ}fq!_�_��*_X�U��ݧ�4s2����-4'����^L/�ȧ9 �3q�n���t���U�ny]`T#t��'���C�kq]+? ��e ��ܐ.9�6ƬƘ�e��%�p�y))�p&(���,�e�w����Ŧ �A\.E�T�?��/ �r��O�4�������+�,��!Am���`Ҙ���_, <x��j�X�I�^�p�_W�,�>jGj��S����A�r@曋�� � ��d,�@2�+ ��n�J�%N X!k�Y�{7��ZR�K�検��~�ɓ���S�p���'���H�A5T����F#�ӛ�̴u���I&�����]i�� +���A�f�o�<�6��^���*��ە�<*�y7�x����!t�)��j���_������ ��o-��:J��tr�ȁ����`*��tMˮY�%�Y��+�lG� �k̀Тy|k�W*p�2EC�V5�Egߋ��9"��_қ9\���\�t� c�V�C!��r����F�H�I:-�I,&7i�f�D�Fo�:W/(�g��{[0|<� �8�{�����S�3fX�>�q� Be�2κشs��|[\��� 㢢$"sBO�.Y��9��$m$h�D@��T�?G2{��5�"F�eqj1/�5�]] D0"��uW��� ���=9�u*e�5k�j�Lm}xzv��~�A��P��7>���嶤�ʍ�6Z�_�8��DžL�_�S���j�~�u֑��"ex�K��g���w��[��b��w�5"�T 6 =s�xDr��!����=������G�D��ȍb1;"Q#IǢ�u���w"��vm�����f�K�O� ���X[ �m���e����{�䯕of0�8 � ��ù���������n��v�A,��vQ�:�I}v�t�Ma2x����D�e#z�����yj�ݔ�&o{�X����v�ߛ_V���Մ�9Ⱦ��3R��@���/�Q�e�5f�$�)C��H��"=�}��-�U��?k�h*o�6�1M�24&o��=�o`���k�ζ���-����G��3`��-��e�)�9���s3�Ѕb�����������6�`G���w�'.�&C�#�>(�����}�/���qV���S�O^�k�ߏ˟Ndz�G%Z%� ���6��k���2B�D��,����}ܻO����u�[��@ =-0���;�c�� �ג;y �� �*ulN5����i�[7�w�;���U�[Q���E=d ѨF� *�����e@_�l�|�^�%��c���:���O)�Ŷ����k�E�8����A�Wc6���k�,#��*�Y4�b�hJ(� Հߔq���)��1��!,Г�l8ٴ)6=oh���>�7y�y�C)��jSS Q�e�1�!��LPNT[��+��ѯ@�*k�T�i�$q�A���[�i,�$]$�$ý�P��~h�G��\�*X/W����˓w�l��mF��e5�C�aķz��G�#�4���bK�j��&�4!˄~Tg�e�`���k%�U�ޗ�ц땒��:���e'�iI3M�4�]�0���8Uxf���؆5�>���7�`�gD���&MoF�Mq`*]�b�b0�ñ��?d|5�ힴب��d 7�h��L�D6�7jb�'j6� -�1Hii��Š�Q�����얳�/��A��KaR��Lb� �xpp� ԲC?��u�E�W���)ѵ>�}Ta|]B����Mp�`rj:x��_Oe��}N4�7"�����F��LD� ��;i0���I�'�6��V��n�%,�� ��&ϐv9��!�{v"6�K�iҨwdZ[08�uix��s�z��hCD�d�s�)@h� u�-�,��zSo���#���O��>A�78��ý�Z��0<ِ�+�f�VSz��U����u�{ ��@Bb/�Vb�z<+��h�(��Q_�D��ǍHc� [ �$�fq�R� l�TY{M��q�a�_g��g��DiB|K��L��I�X5b�_r��d�m�ۀ�oPf�eD�9�d:��!-�$X��F��y@�h77}<�!5Eb�Olt_�=dQ}'_�t���f�Q�Ԑ�&ц�ֲ��:���SO_мt������������[/Hn��tE�ʩ3�o��c���N�>�)$~�[��#�5�i��C��/�Ľ�Xé�)��١4XК�/ӧ�zP��ts�3����[4-=��:L����\(�� ^\��{C+�FA�ʲ�r,��W�o� v�q`�c�0����6;ņ˂���1��z��k{���w��fm�B�V���"{]��"�ۼ�3}}B�x}[��DD��v�LBz��g5�㘅��� �1�|~��j��%�M��q�B��Cz��0=�غ��&5q���w�ə�yP���d�&��2��.�qM���A1w1�>�F�2�۬PD���p��qi�wISV��������c�,3�lm2a���|i�x.�jj!�Br\,��U��� @�g\��=� �qQ��i_�m�D�� e��F�� ����!�5@�>�#N��B�X4�K�B�k�3�=0�%>�1����h �jj�d�4�Ф 7{"��f�B(:d�Zm�8�@�4 8,�P�t�1��R���\P��� 0��(\A�/A�Jͽ��l�P�����KL��R�Q�`��H(�ʡH�H� `2�=`=��c=�2���;'���1#��#a1/�4�>�?G�;�V���<�2���ōM�vh�����U~�V`a����e�0#��_�� ���;����X�\�Q;d��hUt��K������neUnf������ �#��4� �N����C�-7���(w�ŪѪ��a6�}���C��f��"��U���k(��E�Q�7-�����{D��Fo���x���@&u&��T\� o���� �N+�y���nne��mg*W4��M ��V�ՐӜ�Ƒf�"CS�8n��5�῎���(�ؽ�R�)%U�zӦ{4b�=$��g���zf���<�9ITn ���xL�_y,��YXR��$�X ���n:�K6�`zr�/{L�)��z]i�.��A��4����x�s� <����'�Y+��kЯp��O�2�ҭ3�����{�@�"_Z}z� �隖���u��������y���F��-3���趯�f/^J&��Ie� �hJl&���Au/T��f�z&+�h��YF�Q*�Q+Q��?��>ͨ#c7����gƶ�M�];���$����5����P��o��_�qr-O����8�Z4�s��RU�ƇUU�JE°��h��6 X�����A����vX)v�9���mD^$����b)1��I��@�y<{�\���!�2�_"�_*��:$��&}G��@$]��/��M_W�y��M�רx��$�"�(��|.Z��&}�#,?nn\��Rh��[�f@��E�>�>2�i�s�KNߑ} >�U_"��ǿ̢�w�e�P:%�� �y�y��zo�����%n���zvF�I!�F$/,��R��ދ��Ep�͵�'�'еصO��O����g',4hF����'�ρݶ�=7i���(-��<v�����S�˷�[���O��;h�-��n��D�t�b����ݸcx�Qn����O�eI��W�g߄��~��W��7�/�ϫ/�ʜ�-[�t �xR"|�E���꒢�����Ճ���Pu���� ���]q}yi� �cd�"J�lŨs[�(]y�ʨ��?����U�rb�X>X}��Aۓ7��w���|��ts���|���|rZ��]�h!}@�|�$Vʾt!�k�; ����O��?9����M�Dz�� n,)Ϯ.�K���tc4 �0>t'��M3گ? �F}Z��e��[z�|�K��n�K�5����x����:v���x���B��CF��ZT���K�<QOTΉ�k�T�O�k�L�l����[�{��py-�gi��d2[�e�`b�����zMRj�����c�=�mpG���a��|���&��� aӫ���t�Ϣ�<b�<R����4,�?�����7��.r��v<���P]ۣ�mn�3ejVQ_ �`�� ��-UL���W�gU�߿�ޢ�YLV2k�ފ3��U���Fw9Su�rݤn�����%P���� Q8"��XD��Y���PX8��d$2�Gk2,��>��P�q8�L�&�t�������0�6UX jQ*��oP%�;��Z<� �&���J8B ����y"V�w������A��Q�Xoo2,`����)�q�� ܦW�\�������x��kc2�l���{pp,����b^<���zS��Y,��{'��]{!�^�ݼ�fB}�^�݄_��>ލp#@�\��Mu!�XH�G�)�}YL�7-=��4��� M��`��YlX�d`¬z���_R���'������t� ��ƑRzw`��/ϯ���q��K��jT��>��o��uQUU��VyJ9���q�ws��W؝��Z�����s�_/��i,5n���+�K�%��Wb@S�o:�7ͺ�~�G�m[_}�)��� W���q^�Q�w�|%�П��|u'_�'�_�����g�C?=^���+Q�c�� [�r-k����#8� ��v���+@��=�w��89*Z��]�u��t<+��/�i?O`IC| ��o�;�P�����~̟���!�E�8V�1�vI����o�;qa;������\�~k{����LU��hBu5a�'���4��[v��3�,tvv��,x'4��l!�>�K�Ι��VA}�ؗk=�%�i�'PV���"8��P����7�k�Zam �A��PU�w�n�8��0R����{�W�]!ef0>fm��e�]e�7Ub�n7���8�m`�������a�J7n������w� �HG�7}�`�'�5� Q��:�KX{`�BԶզ�rhD�D����)s��^3�ϑ^��_$����||R�Pu��R�W��מ� ��^�?��=U��OfS3��;��d���X��M�f�ҋ��Fw�_2�Ữ�ƻ������a���Hu�� �=�CEp�ѹ��5Ց� p|њ� x},f��[����>ԇ0lYxf�+Hp���M�-_q� &�%�:��!Pt�:��:��!z��O�q)���h�@y�R�\�~��HH�r\k�7"�F��S���a&��!j��tw��NPa|� B3�yŶ#��T�%�b!z(�x��v�<E�L 3���P��6&?E�P�|�:˩�E|����e�/�9n�|i\~z��� KU�bY"K��L�O������m�N���5`Yz�%�Tdv�)�q � ��P���uݚ���Ƈ��%T/��5��u�έ�-��-���n�� j��lz���^r��N�Մ��*���/����]�v;���8[r���H������:�����o�piG'����Ns� io:��p,�Iaj�s?-�θ�%��*Ϋ�Ep���uu@=K���~a^��F�V�� &lhV�>�%��mn�Xt�D=��0>~�^��+3��}�Q���o����WM{tɳak�uM�: ��y�:��G�C����!��=ܴU�{���~_2�i��ѷ,��9��X���E�3PO�<��D��m<��}��k��A��P�礏�j$Ār��7`[���=�7�a}�3�w��0^X�P�B�}�-?�bO�CV� ��DhP��=����p@8+��]?�����0C�2i���Rޒ5�H.��UR��'����P��<�?h_ �?���19�W(���C�x��ns�ʹ� >ք���bIy�U��ve/x�Q�>���h�c������I_���CF�-?�5�gf��U��ͬ�����/XT/�ԣ� �֩<���=��{Ag2����zg ���80,T�$�o����|J�Uy9�-��<�dQ���6�]�ʽ=��֍8��q�Muӆ�����m�s��2��N��-�Ϙ��+�3Ɯ��OzCY��^m������A.���ׇ����K��X����m|�ł�W#�y:J�`��]H5]��g[�~�g۬���~��G�����cӴH<M�V�?�X[��3KG�}U|t�#�o���n���9N2N��O�x�̄���5��ȣ�{����_�]����Y������Nj�N2ʀ �άCM���T8�D�d�@<�f1C� �pz�g�TO�C�u��M�fD�=M�1�!�J%��)�u� ��7����R����b`��p��j�}C�d)�lD#y�k��V���Pm�X���tl5M�Üey� 4����pķ&����D��r� ��UOw�����y2J��ۓ� �@�~efXbf^/�DN���Y7&���a�B��D��R�ra�h?:0G��V�F����,�ѕӀ�!^�R LӦ'�6+w/�@��Z �e��ʦ�q��d��~+��C�"��Y�]-m�J��9�5�B0���n:�$q6{Z+��#��y�{p=�5�'�b|��Zϲ�u\z[W��i}C/c���_�Μ!�|��H>m}���_a�ss��`na"b����Y$��Ǐ@�ō�&�TTA@�4;��BR�,��,��,B��$ݳ(j�g18����&m��V�L!�%�r�Rf��.G}���KN�<X��g�D�߱�)Y/��ot�d��u���'�W�v��|�R�ޖڭ���qy�� '�Zd��];��G2�v x�����x2l�w��]S��FK�{����ЮW����::�����q��<7q����]�%Eעր�$A�Gǣ�Z�rNЁ-��2�%�rJ<��Ob�j���S��Qg[�/d'Ί��T14ߢ�{ދ^R��3���:��������;�i�;�E�GB�����[ޖt�����T�R�I�rΙ�Ѽ���n0*=����P"+afVA� f�D�#C�"� �Qb�L�eɖ�A�<��U(�6�@��j6H�?��2L��]�s�5a!��Ո�Q�H���+Q�О�b��U��>M5 ���ڴ#"�Ok�:FkS��A,.��O".�!b�;���m��a(�^`�Wk�F�T�e���v3��X�����C�tj��a���3�#�2�c�3^�:!�4j�,�E�6�:t�ҭG�>��h�Ͷ�j�!�Fl�è1�&�4iʴ��I��n��;d�]Ʀ����K��@<lag��Y�M�L{}ki��/}X�@>��$z�@�����+� �Z=hPۻ%G�j85�Zח*�Q��#���SyBJ�����F�Z�Ȅd,����~��X�Ű i�d�,07�N��U�5Z.�v��g�Y롆T�G��'�Ki}�6��Rb���HMݕg��>O�Ҡ��R-t#GS�f]�+][�\�)��)A^,��?7��pn(D.K����uZ�F��T6�o;�e�|X����S�tzmsO6����ɮ��UA��.��l��,Jv�%j��"���<N�xi�Zֶ���ND\�pu�"�麆����{X�_��b3!���-r�s�C�ؔ��_8B * ��\p*����{I�mz� � �L5�>ag�_�Xr�P~~w��I~f֣�tB�4W' ~-��Ү�$T�b�FD�'��prR|8�ȹ�"�&��)&�;�U��qz-'Ts|��)Ǣ8���he����mQ���Z���=��q9���� "�pא:1U$D�8��A�)��Z�iS�����C��qK>�+L�g�u�-�a�e���[vf����㩜�2>ڻ�&��-��8���Ő�`��~��M�� f���p{ ���>`i���W�E!3'�.��GL��>�>���CS&�ơ(^�]ה�Q)�6�theme-joomla/assets/fonts/opensans-fee9860c.woff2000064400000044344151666572130015627 0ustar00wOF2H�� H{|�r�h`?STATZ�(�| � ��8���26$�` ����z�ۦSp;��\�E���Q�w���I�Jj�T��I��4��� su^(�w"3�D�ηr�~������(�T����Ф��# ;� /�j�f���£��f���x����Q-I���lV�:�X�u�7��2[�����T��i��� $���f� [�H�^���ؖ��èA���/ҝI�^>� �Y+8����E�=��5�������!���3����,b�`G����Z�N �6;�6�8mT�9�Q�� R{F����ss������͘Cbl��������9�P�~r_�I5��;cf�Ό�s˼s~)q��0��({h܌? i�V�T;�>E�f��C�6u)�E_����G���#���k��s��w��{XU)jdU��k1���Ԭ�F��ݶ7L�����'���栧:�b`��b��7슮.2q��,yc\���龽�V#7ѳ� ��������,bAK�����6�(shSj$�x�]6Ŏ 瀠���SJ�e��3�`�uV�!�H����׳c��l��o:�_$J�Zioj��ŒK��!���IE(�K�"Ǖې+���� ?�\� X��L ��� wR�C�չc8��Q <�)�JE�.��ݗ�\y܅ΔZ7I�?1�!k�J�Aq*+��9�f��Đ-g-���7�����#�#e3L��SDϦי�X�V�6��^��5�i}4n�vsB��5��H��F�}1M��H�V#kD�ȋTP9Hg�$K��l���br��F']]���+��]ȉ�o��K�"�#���2������|U����L�\�+0=w�`�`������<0m!��Y[�F�c2������2D���'��b�!������2�Y���I���(~�5�f[o�t}����9��QD,�$ƌ�"4���F@�̥İU�u�~���9°��@QB<XL�D o��m���%p�k&P�L�����I���J;ʨ��C1Fu`�%&C�]�NKw(z���|$jޡ�8�3hԩ��uT1���yd��r ɦ-hD�^�ʹ�f�W�����������{�,}�^�Գ� ���nw�ٵ.w�s,v�o��Fi�����ig��ʦ[�j���z����?�8>��|��v^�v^��F�z.�BN�h��|��ٞ�Y�Y����i)Ȅd$%��aU�� �Kݩ�r�iQ�i�z�m�n�������� �H_ӧ�����\�<=��1���m֤�Mmh/�O[i�r�*6RyʰsCS)��-:%S�r� Q@ޖ���J��m�U��п���!�&y���U�����e<�������/�.�y �4$��9n���MoZ�I3�iQ��f��PP)Ĺ�@1�Z"H1�hH��_i0)�l�0ܮ���4�z��[eҊ�J!�%����frC.�Ѭ���̅�ڍT�7����@=0ZОY���X�%h��ߓ��,�fF`�F�!R�7ٵu��ƛ���v~�w]��\�{(/,n��u#�2=P/qF�����T�� �$1&���8�$2����̎iʊ�W�N�U�j;<#�M]�*�M vgko�q�L �a*���:A�P�fe,��>fx�̗T�=h�� ��� ���$0�!����g|�Dы9ˁG�d�[�31`Xd�ಿs�3�RHRI�ˢ6����;A�;q��%��Z�-�� Y{!�g�0k�vjX�ؗWfF�o`�w���G2��2���e֜����zл���$��x�B��� �94n9r��/�mZB�Q5�Ѱk箪��Ŝ6w�p��ͱ��)�T T�Ja���:��������~Vs����J��K!��� EK����2S�.�,���1ݧŨ��!�QU�'���I�q���X�kL���6d���s$��-i|FȠ�D-��@�2�#������+� �57�G�ѣ�t�Ψo'��p>���7�T�C�dthT��6�����R�Cq#X��Z�ߞy�,���}|�O���T���� ,�R�JۊO���e2T� "��!�W�-*B�>ùާ�J]�(��{�#���[<�m��:��|#�hR�>��~�M-\Ӽn�0�������ټ:"�D5�t�?î8�S�p�)#����8B�ӗ� #�1��H�1�3`�J"+�$CK� �O�"��'�iU�uW�SFN^NE���tӅL�&?���E̦ۗ!-�����r�{" ���K���.Q�O���z<�����ej��G��鳯����7�"_�s|��n����� �y�kdP�����̣#%E�t���Ώ����Hh;��4�\���+2V�G���ڳ��헤�9�孴��h�Ge�Z�"GF���d��F]z��1�3�a�Qr9�#�͡��U�c��%ju�M�P���C�)W�ͬ=�,�*�V�B�zk�����p�9��وGv��h�(/+-).*,�ߗ��������8=M���,$�y����d��i�XJ�D$�q4*:*2bm2�?=9^��$.��>YQ51N����BP�x����մ��ܶNW��:�Ia&��/7��`� ��X��L_�=�1���`�s�TƬ=:^:�X� pP�������rQ�\��Iώe�+�Ά�yc�IK�*��`��,��Q� ̅M�&�,N&LJ�_���TD��Cѡ/�G��^�����c���ժ��s��P�ɗ#���|9*�R��C\�$F�!�� �L�ٓ��t_���S��'��Y�d�!�)� r�I)�;<"�a�b�C�6[ ��D���ى�G�؟Q�F<�Ђ�L��k�=ȑ����0�KKڲw�@�+�� fb���'8F���2�5�s�dA����Z�i�g��U d��<X>$L��'�֟[6/4�@��I�k�!Κ�w[1�-F������9p�Wu%Kq���lo������v�kj9'�'���m��(�+��و�&O̓�$�&��u$y�r�S�4$���p����U^k�"�����P�T�\��u9ԝ��V�V���Y�Fѿ��bl&��id���jR�Yvz�y��f@�[�5>E�A��`fh�Z9�G�G�-�e��L4�ȫ7��ϴC���2X-���k֪�FL`�3�!{O��f�XX�8˜�y�� �I(+� ����Z��.�4V���*�K��dzA[ 0��G�mG*2b�3�� ����[rp{a�֝�[��~�a��d��?�%퐎/?T�cr�ޱ�O%YX�]f�j�N̴F������xT�N�� �a���}R�ӦP,p���\�a&3Nz����PG%*�fg��<����> n@��y�`i��XD�p[r�s���0�mtc11��4d[��*�#0-_,>�_j�!��=����٢'�p65�r�mˎRj��������P�FZd�+���p�dz�����;�a�v�'�a��z� "�{V������x8�;�#@���K�O8�q�@G�?:�v�=�6��:�ŤUI��|SR��B�1�5�?�����=�aøTn~�s�~������[��щ���0�ԃ2�z����k6@��Jd���K2.����t*�M���v�kx��P�c��4l�\"Wc���"�#Zz��r�i]�s�-CibA8ⵚW������(i�iC��cy7��3(=�&%�A��{7$ U�sQAz~VW�u� =v(����\��ni����E�bO�)�'�Z�yb���������-��>��Q�ˡ�-�7'�.�;z�� '�����*� ���n͏g/�3��+W� �>�B �/�Kw+��$�2 7Yܞ�"M��5;SE��p�)�?4#"g�o��舚 ��i��|v��"��B+S�o�&��R�ɘ Ȼ�?�"�ZS�����`�/m� ez��۠\H��:�G��$��J=Iᕏy��=��<���!a���_0La$.���%'��������p˔����� ��sb�lvS��^�}�ʷ���Г�_ν���H���w|��|+Y����x���>m:��Ztpi�;�S�Ʈ��`��m� ��<2��R�Xc�[aJ��}�|>��>f�ƤW���f����5�%���C`�M]u����Q�g�Vc��'�Z\]�?���Z �K��_8>��1cޖ�ES��f�ڬN��J��k�Ր�\(L���J>!� v�v��n�ڷ� n;�^��P�����7m`3 '�]�q��=Ŏ=��Ϝ<&Z1��cr�9��1H��/ds�-��rm���X Zux��|�"���J&�)Rs��. "��Q,��Rvi�xAc�l� g��C����Z����|�D���J�F�/�Y^����&��J�m��f;gmw?T�&�5��%B�OؔD�o��gO�뤯R�ND�4���c�[뮼#w ,IM]I��)�Wӥ�Π��~��)Lf~ʹBj�Ż��9�qx���H[w�7��x�#�g��[u�����0��!l�1����V���eL�V�'�͇dN�f�7qΧdZ$�ѓ��2"j������%ni ��mĆJ��o�Js�)d?Z�taN�R*T�zRР Tހz��]�g�K�d�8 "d�p>+�f\D��k��{$�S��1;A�&Դ�Ub��Z��dw)m��3O���!c� y�;4O��e=-`*������!�D�M<��px":�4����|�� n��5K�jP� ���?�F��g���P���B"�TS�=�x�~��1By�5Ug>�;�ϫ��_P�)t�cLMM����[�1�����=Bmvir��ř2�(�`e��`]��_̲:[���3��ܶ��� 3��[}�~�nPf;�s$�9��J��L ����}���B��%��&,3�x�=����Ǒ��e��+�&�3�Q�b|�~ T2%�& d���G����@:3�LҗAӼ���e��ErҊ�@#������ cʷ��ZQ-�B���O���hy���5Ș���rFg�emu��X�A�f���(S��g�YZ��/�J���M�^�X]M�+����V���Z$l�lf��OΕ�� ���xls���n�@.��Mg>-E�'��8R^<�!D�MKd���?��?�,�&Y�g%`��z/��4Ur�F�h�|�� �z����~j�� W�����?+ɚ�/��B.�_sCr�̡ɱc��8rdC59��`���I�h4��c�+�[d�N���*��]�AZ �"�:Pua#��)�K��=���;�������6�J���qbLP����:���<-��0�� ���o�@��Z.�\b��I��k�B��x��>҉��+p����P%(I�u��(��yײ��ާI���_��i(h|�E���Вs%�6�EN��^9N��ځ�H��ʖ=�Ѫ���`� [>H|a����W�!��n��F�c��-q~H��S9�Uc��Nz��OЬ�ų}`�����O�h�yM���'�����q0 ,W: ��&`@��;�w�l��B6�籡AYC�d�+�ٲ �֕=�e���1��k�4ړ���"������=n�O���C����OR�C�ë�r�= I���rY�4f��>�c2�A�<p`�]4��M,'[�E�67�.�q�q�;����༝��w�$*c��a�Y� a�N����d�� �T�J�,�����x;5}d>��0������h�Ύ{̾)�@uҐ�-����ܒ�� ?Q�oK�ʻ� H���m��W ����N�4.�cY����S y�7H�^��:q������w�N��5M2��g2RO�"��(�~��(ڭvp��l@�eU��Q�7OҘ'���s��BCxiB��f�����q��쳙�����mYN_@B�B�9мLw������˒<'���Ev�%M� �{~7�;n��u_CZد��4�ʼn��b �ioҳ�I;B����'�oH@���%o+��K��gF�ޙϴ<�Y��m�uH�VJjƆ�&�>g�~JlB���rOL\�e�wv�;z�]���n�q�v\o~g{u�,0rH_x��o2$�[�=�C�Ize2nt/r�R>r�w&���[ zt2�!�#���f7��B���l���(]�3�^�3{3돝t�i�ꚸ�^a:|���퍈�:��Ж�������1f�zHC'xF��cڑ\���+����3H)�[:�ԡR/`� ���b��M���'�6��4J���(���f3 �TX�w�k�!�M���5& q]&�d��ƯX1�����S���.^Η.�(,"����|�{Z�5�Y�A���F�w7��gQA���:[dF�D�e`��%xO �s��&T�4Oc`ҊKb4o)��@k�:��8�֗��pM��v_�S�l��@b<���Rk��>;��lxߌ�O��IL��8u�����h�D���f.d���-�6��Z⤰��H̕�����.�9Tk�q��`C��䁌@��� zV��y5o��9����o�+3�x��h�6U�[��B�_���|k�|{�[��M��:b;dAK� ȗ�Q��K� ވ`~������xO�n}B�iB[`�q�R%p�\�2�rdNB�� �l2��V�f%��j�A�*T��be�-QsB��!�PY���1�����s�&U*���s���`�)�H/_�ƍD�q�����=x�����ãG�o�Q���j�:���X>w�1��yQ��h�M�}T ��^>F��|ǘ[��b��a+�Us���罂 G�\��P��J��?�w���cD�)��C�d���dgIx��;B�9˩��Oo8�{���חOI/����1�����dV�؎��0;p�sx�!#�߱�v�a�G�A|�!.�F���3���"'��8�gd$Ȼ̈��gHJu�~;�2v��-��� ���Egz�^���U�0H��4�@Z�!�,��l>T�#���C��)6�&�*HU�?��4��|�����j-�a�-5��r�ݤ;����afu^�~H�l�M�_<�v���I�U_Ӿ��&$��v�Сڪ�>4�B��Ȅ���&����&h˷��'�k'æu�����@����:��}R:gB����8���UɃt��&���R��^\8��~��`6�Ί����*��%ݟ*,?�W��'�I��UNV5F����u #>&Ԝyt�$#�O�D�7��q�@Ia2p9��h��iD�z�%>V�\t�O�j`�l���/\#&��lJ�b[u>wz<F��+��ԁ&:��.w4\/�`�P#�j��o�s�_+m&2�%��%lV6��ͪ˚gf��~�?$�>68rl<c�[ �A����&8�d�0�rS�i������vb�eulTh3 ��q�g�P+j�h��be��c�����V2��+Xu-F�Z���ldn3=�����\��2Z5[��ä7bi�Lh%)T�?R��rVg]%��������d �7��> ����C��Vk|�骦��ש6g��9���I�������d<yl �ߢ_+ʕ'q{Ͼ~�]� ��p�a�A�P�>�zҴR����쓵�)���v��WCgh._*h���J��$�Dw�V&\+h^��;��eA3�E2��l�s*������ �@��n��+�5�)Q^�p�A�P������O�.bk�Pj�@!V�����t mL� �6$%�&�xA^>"�H���]�g��ofv�~ҹ�I�Kwx@�����K�$�,���E�,�~>���w�ƣ��`x�>�9������.�H�.A'5f�<-�p^���B�(��� b�@���f�`퀮+f�/�M�-���T�R2����n,>�Թ��n��>�PYp*�|akpPWz̷��e1���c ����>�֒�M#�)a`�Y�=�6ܳh�\�0�5� ���Y���o~LF`G���ڷ~�I�T����R$�"B�&�x݄�d�Dk�,�q�)�hJ�E���S��D���o�gP��&D�x�u�.��:�nwʎs�p���&�^ӹ�i�}�y������8�s+��\��-Sթ�Sܣv���ڃ����2���X��}�ܚ4��J2�h|M��������j�fm! Z�h�cX<W|Д��h:��y�<T#��V4[D��+�RЖM��/"}���n�(�M��v?�ҍ�x0��8�]80�C��5�c�v��B+:������ꗡt��^��+?��� A� w�1\%��~B%s�����/���.��{c��s�z��ܓڤ��j�n}��t�u�d�5�]ǡ�;s�r��Ƹy!S��B��N��]+3�9e���>!7�4��_�QF��f9e |���6Ƹ�����s��Ky�V$+�d9!r{}i�4Q�%�(�[a$�F&℻4C�]M����D�ǟ�&t�2� ��?�U���nԬ��_H�6� �/�@_�[͈��ikӋ6"��b)�!ek����^o�������,�s�| W������4c����]��{PyY3B�+��"�ƽ�hU1�Θ��N��:�&�E�`���8�ȍ��x�*M�;�=x�'}%�+O?> ��$!yRM���-�eT�ߝ�IS���N���4�'�zό���\���`1ʪ�f��4Fr�Fx �! ��!�����;�k��,z�["�5]���9�ώ�*����"�~[�eqx/�zMi[�VA!�P�>�z��h�k-{�U*Z�O�4]i�5�}�~͌JRȥ���%G\�=x�$]��廩��\���L��~W�]f@����{�/��o6W�NeU��MF���� ?�G��v�@�ӫ����ʮr�.�@.�U=�8Ag�y�I�}�^�}?�x���O������,Q�4�k<�t��jJ��P��ġ����䮶w�o�6�2ዕl}��w���w�}��ge!�k��1 ���n���ߐ�~y���P}rU�D��w��g0#ؚf�ԟ�L�$gX�Dž=R[��A�_X�:�u�n���q|n��vBo�|�1�����`T�1IJ�p@r��TU������ꖪ���沼��=�Z���FX)M���^�y�x�T��������*n��āό�F+Ɓ�4Y�ZY�XY�XY������U�H�^C"�4& ��bY�on��\(������h���m�Aʞ�G>���3y� ��fJ��9mj�p�2HPŰ�O�e�쨪�^�(e����GrZ��ɲ�6�8S�A��'�$(�1���6��#'�o�<2�z� �6/��[� �f�~��m���9tNl�`F��������և07�3KF2Q��"n䔮m��a㯾��\�>_R���>�d-��q,���w�V�b �)��~~�E�E�'�j77C�#���b���7��=r���X'J���4�M����U;�%*��b��5�^A�6�~>�����^N}���c�"T�թ�pehT�.ɮ�NN��T.*�S�E>�n'���ʣ!��9�*i���1�"b��+��LXf��HɌ�+Ms�C�~S�F� �.s�5����Ɖ�w���w��C�R�~��~�^c�?E���%�,�-�vRq��l��7J$̔��h����/ג ��Z�$��A�9W�X���<�-`�/�����S���`��DM<,�TU7N#*^�|�u���W0U����c�sD��[3Xq�Q�<x^����IzEx%6f�$)��Y$�?85���& ;!4Bqz�ry��7��:2 #���*p듣T��`��:�j��7[@9�s�1$�Ή��d�z��ID�#2,_����yQ��t{�o#�#zI�r�|�IGF�H��&�Gy2��I�ޠ��L$�1�k����#� ��Ty�=`�{�xe����D �BL�řxzey�0�����d��2x��)�uP;��=�Z�i�pa%S��'u��y�����l��]��T�k��Rt�M�e��.6�<Y�44��YW�>�e�v�{`hA����P�7�pw@�b�!u�?'��J�p/f�]�]�.�,N�,g��8��td��RKB��*Զ�ʖ����!�e�zJE[kd�Cp��jo�2�JQ*ɱ:��Cn�ĒZ[�J�� 2ls�S��I-,�"�Y΄�8��{��$�K��'����a� ��8��Z��9N�9�s�XQC&y#��H�4�a��]n�4�哊�t��@W�:"�lM��Z!�Y�g�0m!�(�|�7ńfjB�`������V���Q1��� [���ANDES����ܝv�b����t��sꩇ�42�_JU�<��x���q�ŭ2�BT�!���h;�16?y� ��.Ckuy/�'J�r��V��-,��77~�H�p~6�0�^��3�Q8�&JJ:��z��@�q���y��W�pc�6�+IL����SB}¼�8�$� �^���m��)��_w��-���F8ARÚ�����.�O���-N�-XS��9�tj:�}`�?��r(l�A�T��,1�*<��U^������.'S�+*��Q��<&'+��K��0��@B�����E��qf�d��a�?~FF�R�2=��d"�o�_�.s�ί)�x�E���'ַvk�_)��� ��@�V��%������EfA���b*�Y$P�!qQ�P�mq~g���!�L� �!�P)a�q�Ĵ���a0�ڌ��̙�ތ�+�n�l@n�^?�~�@i3h��d���������!ʶ|����g�⊔wWBh�LH"�#�D���%����LG��r�6{�A�'�$o+`�N-fp��@��m�3:�5�Z>�ۿP�,!uʳsy�BQbKN�-5)���l\�3���6��`F�|p�l�(��q���V�2=R�X��S��� �[]Tݗ6?_�^���8w��錆^� *��&Ʌ�%�GF%`I���>��Q�U��f���/g�+2�g��،bdq�lN�i�-%�f����E����[<����/�~>Df����`>g-��y��&�'�1�����cT�#AxCEL�iJ\g�@���R�oH'h���\�@�a��_�v�����C�7��oW{�̿����\2E��Dk����R��Sk����|������/��-ڽ|o�}#h�(����YCaN��1,����坔���J��"�e2��=a��q{�vxL�%/e�B0δ����{啿 �q5ҋ���j<�@��w�c��RYU��-� ���[���s�6�uSFz1q!8?�p�=�\`����O6���>��,1g�Ƙ04\�2X�=tB��`�x��A�`�<��jv�.(����i*��.���H��S���B�K��Od�Ϟ�x?Mk0���А.S:(D�oB4%� �CR��:��'�^�u�pIm��}��\t�Vu��U�,5���)�V�VP���S���1`�m��#�NeOb��.b��K�BMs¡�+��sX�?Ì�&� W�4^�H��ҕq�rF%�Ȍ6����@S>�������/��=R�K���/�����\���x��u]�a��&K����������u@������lT���^z�Gqz3�)����l������&gzby�cJ����z��9�.��\�����`���j�^T�s�i�+4���X�k:kJIC#���H�_ wld����ym0�`.��˙���{E�����w�L��Ɔ+NAA�6j[H+���TqDE�{�ˍ�G��" G���]���h�̰�ַ�FRQ�� ��'�W#-\�LT~~�����=hʝ�=��ޡ��p�ڔ��g��S�9zqܮ�$6��?�&i�د�����Aq��:���5����S�ܸ�J�p�Q5.��L!D������ȴdBj�.tӓ`KPU���XPu��QL��A�N�g�J(��42�? �뇉��U����j oB���`C[�h�;�������I�NQ6�F�=�E(#�?4*M��$�}��4O̫G;��������(���s��Ԣ�F|�LC��-��t �,ڤ`�RX��]{�C���D��y�轾.$x�CG�z�h�,dN)��㣾tC�]7��w��p��#����i�Fغ��BY�M��;|���ݿ��~WU�݅���]N#� ���AnHۯ��Ζ[�6�`+�L���◞�����Ֆ�36�Q����Րzq%�$�r��UoF�x�Y�����T�466���.jO��=o��?�����!���q���*>� �Z��@�v��^����v��U�y\�����#��V��9��Z)qF��'"���CT��eV϶6 ���&�0�&�cR�D.X��GM��(�벌��a�- �-I��ML�6a�ť�*�c}�"�����`6g2���ݡ�Ρ�ظ�r�/��3�و�E!�h��O ©����Z�'ǽO�y�����P��tΊ �Z����������x���v ��F���}������X��H���/�WW��+$��Ր� U��b`..aN�VU���q{����݂�_����֧��lzڊJd/�<?�g��Μbϫf\�*�FW��I�� F%�3cr���(a�%aDJ-6z8��\Bف@�C^l;�3�E��SE鉌��V���j ��<�b�:Hy���'�� �P+�� ��K�� "("�/`_͏&����6��8����.�)�]���+=:���2���t�7x�1��:5ya��r��;��>���<T[����f�>�ɯuP��ZkM���XI�3pL�{s)�������%�>bN���r=��;�O?��?�svL�6����˦_EOLo��^S$Y�8���}R{�����A�o��i�J�8c��D2T��A��}��l�j�Mfڱ���k�D����%B �4/J�\��Y�:��/�7�/�~�Y���<tx�*�C�,���̜�~�o�H)]��P���բW�k��r����Ѭۢ�Ld(�=B�+ f�b�����1�Z6*��*Hc���7��<J���B� cRe=a�_I�*":�?R�R5��u�#��ٗ��Q�G��$Zd �k�mg���'�A>�����6+���DeM{�yһ�����ʘ�Df�[���J1(�I��z@'� G͉ ���s�B���5��Ƙ��*�8�8�H���������C�i56�g���R�Pퟏ=M�� ů�u8(��b�}��?�.Qa< e=�%� #(05���(�nd�J^,Q� ��D��x��>����M��K.��S��I �����<Z�O�i�!၆�}��ݛyʤ�����G��8r�s�A�Z� �tg�+*�LeU��Z̝�Q\bs��;�!��nbDxM�X�{���.� ���z��[F�^^PÞԳ�Ls�Ow�yf� r=�/��2uS��r�KM���4���WO��Z���Z�nU����j���\i�X��o�Vu��O��6��ʕ�FE@�\�bw�A�9���QX��~�4���*Hd!��?�u�ڪ�.�F�vC/Յ�x�Sv6R[]�X<.�H���Q7�Έ�i*�,�g��`���V�".< r�Am婉�0^P�53 5�9wS���Yg<�ѧf��QQ��:�8���P�x ��e���U8���t�����M��Zd��9�`-����ViZ$������ͥ���D�+H' ����5�g3i����4��n���;�f6��hc���[�uo�s���B�<{�����qt�0���WS�Х����U^��p��L�9#a��,�O�m���WffcIQ0����UX�2f�n���:��:��pw��Ȉ����pQ��OD~[�@e�I,) f>z@ϖt��T�1����Wx�U6�u~}�IvAa�U������&������ctc�*g�;�hA;qC� �Ӫ��x\���XW��f�508����, (g��]z�u��`�� �-�0�l�p���3��27�{x���]��.�8�(����q��Q�J8��[gi5:/�䕹�x�N%��V*8�a������������S���+3��%�&���p.��j�S��p ;�/*���z���V���Jߧ'�~|jK�G� J/ZZ �J�x�Xy�t��!�~�%�|� oW|M����T��&<$^o�:��E��yVr.�D��q�?E���p��P�ݔ~�` d�ѾO�2.1S�b�ɋc����d��lu��R�� �ZI��Pa�\�w��l�UjE� ,�j��;Ӹ]<q�ty�$#�z�§�|�p.$�Z����Tk�6M���p�p�3<#�\��^0+^i�[H�Z&9��� �Z�=��Q�Ң���ҫJ�e�e�B{�К�h�1���(��(Cs�y�uR��:y���2c�K�\���l�ye�5���� ��&�Z v���ڔq�W+�g`�.M):�&�ꎙzp_9�n��D<n�J�ɢ�e�����F:�G�@+=�t�� <ZZ���cP[�ȵ�*�5�ĝ0��ӊ�_18����#����E"��A}�0��=��RL����ߚ�Gѧ��m�}EWG����p� �����(����(����pD��#x-Z5j�P�{lE]�.��R�J)�Y�Ӑ� xU�$c�*i!V��F���A��{[��� X��k;f_!ud�e��y�=-P��*ʶUbO�N��]��6�v���ƃ��^ED�r!4�:�> (�8T֚U���l���v����m�j��SqT����N�'#��Q�ʨ�Ѽ� ��\���$��}E�� b�j[��<�B �x� igW|��<^�R��u*C�C������k� cPU`)���<�8��X���)�A�~c�r�5'�@���]P��˪��@�l�\.7 Em殽�ꬅ�a� ;P� n����u���9�Kv�ù��c���lLj�T �+��M����-SLr*g��w`Pk�������^5���<_{a�^'��ΔEb� �^_�JkW�|Si�c/��й��uȹEM��+5fP5�1���<�_U:�I��I����70�86�=g���VT���w���a��g��e@J�>Q�۔�b�≤5F�@+�"�<3��x c��q�g/d����d�U��8w��g@��.û/����4bV;��w�I��s��\�?���P�()��ık�]G*+�>#f�ANkݣ�&Uw;=��� �Z�H��P�\�U�^�9�~�i�o��,��Å�!���� �w��as�S�>��Й&��8Q��11�P`$~ L��.�v�t�$Cr$��]V�}pw��5~z��:r�Ex�wY���~�7�]IΙ9X��f�R^���,�P�m[��9f��u)�Pܷ����� ��1�FmJ1��Q� o=�6��*��l�̆�5��uJ���6Q�&��sms�Qlk�j���Q�>�b=��Lϥq @u 1���1$��ð���G��o4o��Zi�脵[{N֭۹���������q��IM^��S��/X� /_0�cW��i9+l:�.��~R�e���Ò���~�]���ׯ���~P�'����� ��z�� h'*T��5�� ����Q����*59�̡DATw��Q���P�<���O����2}gb�s͇��ç�t�F�>qx�+�/�����s�Toש�~xPz���Au��y�yޗ�9���eK5�,�����=[�v���0�-�Nө�T���T%x��# $�@�u����;Q ȥ�>한����H�x���(����-cD�3~� ޕ��� Å{a�%ds�g55���g��z�Z�Zߤ����c8:X^�J�k2��z�7�K͌��5C�d.H%w�l�>�j��w\ �B%�K&�P1�5g) �6�T�������d�N���S��̈��7�B14�!� ��I���S��&��k�k�Ayo-2&ޒ�f3��k��:�"N�������dL���ÛN���_�r�" _�Lݟ�1=>�04b���:��JP�>��{jZ������ȧt;|�U�QV�<�����Bת`�~C�SK��[�?3����o4�<��V+�A~�v|��#�QIs"���Iga���G#��u�� dd��L�V$9��y��������Y��P6<+���u�2�g�u��5ߩ���>ye����F�zS��̯�`-��_0 o�U�N�{�ti�ӷ;~dP�h,;B�DQ� �E���F�ajNr")�b�X���:�^F��3"�t�Hi�LG�e��N��2�x�t��m�2�(��"��(��\KNh���G��\�^�MoD��Y��4R�z~��� 0[�@G���8��c:]F���>�/&ۏ�>�|n�] gUq�Ge!.�[��|dR�3 W�s\����4��\��)�co8�z�>�(��''��9������oqBs7��\̫]&�ο.�Q��l�p4MTfPB(;طa`��)�,=��J�<F6Y(�23I��?R� �l`��ަ87s��NX��|�|�:` ,��Q�6��+�0{h�Ӽ��%�C�^y�3_�9��n���qiԁv:O͠�I��lJB�֡�P/�p?�2n�8�`6�Do�jl��DkI�hs�?lp���q�`q��]K`��j����r8T�@��1�knY��5P����8����c���p�>�����v(�X�?��������-�;�'�vD�/fN�a==ƭ�������&�U���%�����x� ������3����'�b%�A��y>ĭ�����Ц�x�E���;^:�����.�g��q ��H=AD��ItEu+���*��0��1O)�B�`,�;�"]E�"��l��j�њ�C���{y��%�d�=r�K��e�PM�0�`��K!6[�B��B�'E�,�msS�w�`Hke�;�v��?�Q�e��J �ir���|Z�#l�!]<�}����3xӚOy�8�|�D�H�9�O\�|:�mN٩����6�H\��_�$��L�qprq����`t A!aQ1q I)iY9yE%e��G�6���r{ �,D�0�"D� ����,E,*�8�l@�2kڽV�^�C�&U��hIw�eU:�a�۸z�9c�9gL��҈���λ�-��Hp�eW��쀛��!�;T��I"$��W �Ti�I�e��V��r�gI�� y��|9��u�w6O�S,�Ta��s�q�%��եPi�\�<�|����A�� ����KHJI����+(*)����khji�������~� ���z4�|,�t���K:�;X����VwTV�(�P�Q�c�evcݵf㏙�K�uGNHUՅ}A �x��B_��5�"~F*eq��Z���q5.i�Ƅ��ĤI'��r� �ڷ��>���᜕!2rL�G��.�?�mݗu���K.���9X{�������)�4̏p�`~����T�ӂ���+vfptcGu��;��-vp!;x����n8 <4����o�s�:�������f$�?č mm���&�E5�?R�Q�e:�eOP鵢��KQ�����4$��)�]�+�(��3�1r��ry���r�0���fb��)��pAN���n�I�!%>��Ym���$ �e�$�E�T��z�6j @xD{�!j"������ ly��X{�z�π�#ʇ}�ͦx�=<�6Ṗ��BɄ}X�>3n�E,:��Gf\D��|3�a�L��mz��b��|�y=��!Oʥ��q+rҮ��@��! �k�f�k�fg�^y���uͦ���=��=�%�ͱ��<(�W�F�7o�_�rf�h��lw����)/��NW,3���>N�����=E :x ���#��e����Xv-�g�ݏ�_����� D�b�E㬠��Yf�]|l� A��c 'ٷ��!������|c�t*theme-joomla/assets/fonts/opensans-30129999.woff2000064400000044274151666572130015331 0ustar00wOF2H���HQ|�N�h`?STATZ�(�| � ��t��"�26$�` �&���z5c[F��<���6��]����@�qP����-�1��V=���dVcV�����bA�S� �G�Ծ��%ۅ�P �k�%�w��O�D�ÂCM�iHÛ�9J^���o�x��啩@/��¢�k���82�;(xe�pƱ�PS�������Q�H�@G"Ff(V���b��;���_���H8�"{�-Q*BE�bg�5Θ�ܲ�+n���97�7�w�����ݽ���d�R&5�a*� ���.�S�e�4f����o�e�|>B%VHIں�Þe/�8��`�:ٷL]�.�X ��"M���}8N��v��8�uNDI:8l�����&�=@��2�իD>��V}=�=�W�$7E�]6oJHW�$R�A���PZ_�9�wo�5�T�t�:��a��pw�ק�Ru"-�@�4r����!����՞�[HLo��Oo*�B&�X�]�Щ��[+mW���cu�$,�\P*r�'0[�!� ���*2/J�ˋ�e�ue����3��m��l�q���8��qѹ�����{O����+� 1��A"� �+!I�rr'`� 6�PM��2��\4M�E�G_}S�H������` V3<O��������%B�)� ����=�]#��Q�(���:�V= W��6C��7 `j����T�� �.M�+V��5�6ݮDz;f%}��$�-�>�h�O�Ku�Fz �*��/��F�\��{߷G�� @<3kq�J����[� `�F�y��秾�姉c@��r!0��2�@�gL#��R���=0j@��< @�����q㻿���/S�b���A����}V��-�z!��G!�ۧ@�O�@�2�M'�4s! :^\ر�������6�,{o�J�[ �rj� F����W���m�U.9S���㤄��Si���6G<�T�M�D}(��x��؍���h��(�������e?�|�o�վ��D�z�LJ��C��m�����;�3:�yݬ�5��w,ڣ�ڦ��z k5�͊r`��Z�����W�ݛ��z�Zg�X-�T�V��j���,��RAeU��炊��bVH[�r+��*T��|H��U�����u>����n^ϵ>��l�S���\��Ρ�O�t@v�x6em���@ŔG��S2��]�������U�ĤW��KȎ,V5N��.�ߩqK9Я�.�/Ҳ���؊��4�'�福@aԌ�l�xm���ͤ�l�%�Vy�9� � �6���s�C�~M�L�f���0�G+�U�e_��ӷ��W�� �y�t1{e�c�B�2���b�=`M�t���J��A��}1�O���L��m*g�<����K^S���]�ȟG���+@��� E�i��/�?��g�Of;!�p�G`D�`*�W�^���0Q"�y 3�J�߾l�";�V��z�Qh�5�5V�^X�H)�~�@=��^��[R�3��"�Hˁ/�p��m�L���g�)��'���:S��Y��i��{��+J�%BP͟��0V�F2�q��{����! ������@.p�� i�3��;)f�3݉nC7���=��� �(�`P=� ƍ�#0����>�82p'0�{�a�=>���j� �r�!���B���I�����S�W�(۩.���$�k�����>�5��U�����(]�� ���� Y�؛����.��1���/8��(�˘�3�j�P�v=�H�*cG_:�W��2q$�lс���z.�{`W cr��� ��3cd7(�F����j'�IP��� �N\a��Bi H�H'�t)F}�ڞ�q2���@i�#��7P��[C�mDս��.��B��Q�_�&���{��SF�#��ޤ�!T J9�ܫ��~V���~��!��ʊL����a$_�!Ƒ�{�;%����s���!�$�S�i��x&�b�o�b��������"��Q�E�l���Gpr@䁒�X���|���+��r@*�V�+��6�M8���jk8BE�����$GW �����\��$���<��y?"Q��\GD\qq���*�a5�Xu[�A��!����Z(A��&�cHA�|�T�K�+�S�/�O��:�����/�w�O��NT�g�ɥV�-4�T�3�'��=�����ps��� f��h_��`0�z+�`��^�<���o|���'8�\L@n�Ú���E��H�d�B��K���S� �B��!���>�b��ޘ��İ#h�B�E�+z��0aZ�=��K�R5��݇��֠S^~�;$j��X)��u�1����Q`�#�Ȍ��]5�U��e�RIIqQ�� ?/7';+S$�HOKMINJ$��yܸ�NtT$;"��d�Ҩ!�� 2�H�[��~qt�%Oa�����V��p��[�� Rȳ�S�`�b�);�Zo���=.u���"�t!��7��p\�:ƨZ=S0���z[����C���F 3� �� pZ�eO{��$|�8O�p�yƄc˲��%Q�,����r�Rj*�9���dy� k��ҸL�6����OU@� ��<�v�ب�a=nK�%��پŅĶ�J])�ߝI6s���2C��JHix��:�J$�[��_ܞˏM|j�����b�( �ѯ��Dh�p�d>C]�X��0X�jp� ��U��!kvrg��G��C{BeԒ�[��u�!���=�2���O��[�GM���j����bgNv��+>�b���A��/O_��*�t,Q�-���A0��k��2�S�����~P�U��ʰO�7�j�*�WCMǵ���4�g�S�i�q�0��W�.�`�-����Й蠟#TTګ2��y:!���iBQ$�����>˞��I`=�Wr�%�y��<'�ɕY��x�,yi�.k���ݢ2�I�i���d?s�עl#�;4�c�">M�X�V�d��AN�t�<*B�,=�l�p���?�8ǟn]˞բ�?z*%�\��E4<�f�:�V���b�A�X��{z��2���y�U0��k^b,)\L��~֣\.CP9��y�D,-�ܸp�u��-�� �����n�"]އW��[YU�L�C��~��%�����q����.� �w�h��P?Z4SI��z0� ݪtR��^Xqt�����bAzKYp# �-�C�hk��㴎�7<�S|T�ν��]��( y^�c+� �VZL��pN-��y���!�� ���ׂ��� q�Ӊ��ڰ#���7�p�2 �Dm哚D�pp�B�5~��70\d�zqi�gKU�o���}��#`�M_��7�`٥�}}���+��ev&�Y��vJ�;�T��W2x�H����^b]kF$�"�>e���ľ��J�Z�?�'V���(��j�f(aK�q�Ά/|mP�tj��H�gz��|"l����,ӔΜ$s#+���!}�O�ix���j��P��QrO���f��*�|`�)���S�~k���i2^��>��yG�#�X�v�M��sN'�~lx� h�j�W�U�8�Ǔ^N�H���(�_ P%�_�?6��-RVqz�O�/,�u�H�c"��+oۧq�e�e�ˍ����U�h�ԥ��-�� 5)�!Rb$8�b�����D��O��;a>��\J����ŀ��v5�o�4|f�^d.��k�H��"<�C߅��+u_ܙl&�W�����囖I�2�5є~�0F@�����#��B!<ɪ���)rl�Ց��S0���[�0E���� �r3�i���CH� �i=T�"��:R��xt`��}B�Wcx�j?��k4�Sb:rz���:1���`�=p��n�m0�����d�C����f.�3���GJ�cl% �`FT�+.ڕ?X<�N8Y��MK���^��.h�<ͣ!�9�e�;�' ��Mk����c���G�,!0-F�kJo�.=��V93�����6�k�q�L��W��D �Ҍ�}��B'����we��#�o���/n�$�B`�g��o�FL_J��9'���#�wT�K8� �/L���mH[5w��Ah��7��>۹��w@�֭5>�Yx�\�F�5<H��e{�\��\!�v<2J�"�W�v��rN2�OK�v���T��1�N��@� 8)]{�k+V�!��0�_��9��^E4�7����>֧�*P��(��O�RE� (��-(ݿq��T0y�hЁJ\k3��8rȊ1N���̩l�������hO7>0�mbj;��?�縚|y��Z�*sbG����S�y�/��j���9ε o~���'�(�\������v�-�t?w����&��-�ne���X�o*�z�s��a�&�=��>v2;G%�;zL���w)��疿id�ML��i&��D�SJ��s�ͨQ gn[��<1��c���R��f �hW�)����)������vyC�4��Ԋ����5��ԣ�q.��L�F��Q�P�E@�I0!&Ɠ� �ͧ�7�<X���hO�L☤�O�z��ʌ >M��S�o1.ڟ:X3�!�;�~.�W�yx;�܋� G�q!F<�� G�[��Q�臽�hP� �Ƀ��k%m|^�@�|�d�#�&�6x���)?V�?y��E������Ut���� \� T���c���1Tъ�v&�L�s���5)��"g)i�W����M��p�i\��Zw�������}�2��,rq!�O2�c���[q1���MC��I��5b[�u�\�4����$��S..KU�$cS��w!Ky����dj���ģ@�|��P��n�������vq$��EWAk�R��+ �X(��D$:Y�ۻ�HI�g5#QG�(n��9�2��˙����i~�22g���%.�c��fM�[ĵ�a��g8�����-�fNj��=��⃬V�N9O�yQ���Up���>j��L�(e�C��5��YWԋ0f���J�И��T�,�� ��^�4)p�L.��o�@̤�-�P3�i.�3��qv���*(�M�X��D�s���9�)�du�s�Eb��1Q;��@3 vI�,�,U���VW��^�[d��ZzwW6�'ZJ}- u�:� �,%%,�9�\��7Y�B�e�C�y��P�7�znp�#C�ϻ�0��<�es�εbS�ޫ�{-���Lp]��9G.�09�@k�a�B�-�Q�f���s�Q9�61������ _ʸ�P �9��y��\fkh4� 0u1�JN|!��D? �f�W�@ņwA�n�6O�"���8͞��~Q�Ղg��*���Yh�T���-iaiW�"dW�]�� !�O>�o�h�H�Ʌ0r��Ч�⭓\��鐓���+�T�b�3-���٢�P��H�nrsom�0dР��\���͖ih[�K�.1��Xq�ci�NJ���C�X���ѭ`,���4k�I�ja��w�h�|��a��1�/X�4�'q���- �̩RiͲՀ�5|Ѫ_a?�f#&���'�P|>���iN��zܷ 3C9����@�U��8�K#.T0����~G�п��TJ��N�v� >Vx^*�ϫ�Ġ�&T�y=^a���o@�@a|�s� P���L�w4=�/[|9���!�X��s�?c� ܲ�)�W�x$�.��2D��WV�R;���Q���O�,�Ñ�0��.�%�3�W�sG��d�����H�o�`Uf�QN%��ϴ�i̗��rHO�%�i��,�.�,A�ò>�I� ��䛎���:�E-�4���E�h*亣 ,�0D!{�z�#��B�'w^0�Ϩ���a�Ņpԭ�j��3�s *\F�r[�NdtL4���߰eV(����fV�9տ�OhJ=~��/�R�0��K��H��M,�48ͯ�l��"�u��XJЏ%/�Q�Nr;%(�%}��}r��XB�I�ΝרEw�W���7Շ�`��1)EE�̵d�t�Y'���Aѳ��-�����g�]>*|i���ls�mU-�(f��X�!�L0�S��2�YN��_v�A��箞^��y$�N����v��^߅>?�\6CU��buD��{%ƶ��x[1D7�T��r7&�[��6K :"���k�#z���<��7���U��>�;s�S�d��wG�q( �o䜔q�#M�sl� dw�o�3>Ve��ș�mg�H+d�>��@�n9[��J�}X�m_�����2�+����9���a�>�FS��ID�c�@�l�È�]=�X:����w.$'%hȪ�8J�|W8��}}����y"i��qv��x��8M�{LՇ���˳S����]�3=�QО2�<Q� �<�i������3ꉋ`郃�h��3>b��/9:���-@���?���W���;aP�Aa�"�/ ���O�Fj�k�|���O~����ͧ7�>�_$��:9�|�и�Egb}}°tZ�Ǘ���^����k�Kdv�ݨ��Hr7T���υ���?Ey���0T1���韴�I�e����?O���E��A�;�g�ɐ���d��@ж&�1Pޛ>afJ<J6�3 R����J���y� �vg�N��*�n��*�yvRM�6>!�������ݿw���O���G�v��;�����v�6OD�Ӣ�,9� ��_�ئ���:�#��a���= 5#G���֯W;�QQ�6�o��mo���4d��7O&I�wUdE9�&��ea���߱�A�a�[��эP�)��q:�S $�9A�`^pʡ��*dBᕦS-�>�s�"8�� �U�oe7�a?�J��5]K��>ܿ�٤��zba%��W��%̼D�fx[�v6i4�+�R�K�x�VA�y����u�\K�\G�\s��Z�?w5�C��H��lqD �B8{A�bU����aa�4�LJ�Wv�"3֒=�v'��ᬛv�ٓ 5c�i[[q�{���Rh���:|�,���;};���ʼn���®�kk���-�+#U���?���JӅ����qZ|l/9,���|}SF�%^�tn���̟_w.�`PI|jk}t��)���V�x����5�H�Ѷ7c��Ch�QǪ����}�Tb�8��\�Lp~$�l��{��������9��6d�S���hH��C�ܖޕ�G�jk���������٫���d�.q�VXIo��vY�v[�~����W3�d��~���3n����|J�N��+��� =*7�ev�ғ)�K-�s����H?Fm8���QV}GOIak������������_����dCKչ&���?�M�(�QL�,[�"ZyE�s��:?�dO&P۫Si��L���%�Y�*1C�j�j���<7�B@�F��D�O,nq��N�l��0^����=\��#�ޡ�� k����1*�G�ֱ>��S�RfǑK�5��}�gA[Ʊ������q�����bV1> ����� �p5J�2�8�@��Z��^j<����I�lyD o�ѱ�7,���ũ?�ј��3���C�C'��fe�<�2�{�����s�ꪚ���##өq8�@7:EsˊH��s1�OG:�F��?^�g�K�R(^ϰ��$�-�ր6п��~|k-c�U�G3�luUs̞H���t���=�c�f���"�c�A��/���]58 N�9�V8t�NM��xۅ��6۰��3��ϩ̋w؊K��3�1��B���۷�b�vW��E|A�[�%��Ӿ��c���/'.��ņ1���n�x��Ćf}yټ>|�ӫZ� USf�UQ3�%��r�TwA�^�$�:������?ZS&@���r�N��e6y�I�c?�/��L�p��#��O͎����Ҝ�Nɸ�i�X 2rVg9���D�����R����W�E�W�ƕ�U��yz��h~�2Ew�]�xݤ.�]2�qx�g�8���'.3�i�6fi����-+$�%{���5⯣�/�k���bW]�:c�mV?���+SQ�r��ܿ��ʝm��W��$��S �jW�6���";ue��]H����M_Ws�c�(Y�h��#�7�Cu�� z.ʹ��m���+4�*�3�D`�t�?���*�@��=n��65;��r{�à:�GcL�����#��������ñ7������z��k��J��1к�Ӯ3Q���:e��W7b�ƫ���@-x���1HE�A���Xiw��U����� 0P�2Bi�U�.�N~�*8ޚF�[�'��G�$�������#]Ebio�!�lS���֪QjL|a��7�S������CN�"���^����8��k�\�3lԨu%�֍��eU��G����?�=�N\��d���~��Y�E�}��419��A�fu�SWd�/�_\�&��OD�Avq��"<�/MF�f��LgC���֬�R��`�A�H���]�Ty�;����nX4vWd@�hh�=��"��.g� ,J3v�U�_vWՄ��MC��d�6��qZ�aj Z]�3}��1�K<��e���D��U�X�������Ŀ�'A���ݑ��k�T�:��Nީ�zG�O[�?V`4�����E�E5�>Em�d����E�`�A�à��I7�]y3bs@q�\n��OdwfO��)�V��N�r��I�AC4�����&�i���:�L+쭯1�u��++�zy������ʫ%=�'5��g���Cu>��:�s~Q���'M4n���;�V�{;9��5+ <~Q��斆��I ��K��Q���_4��k��C�~4��,����3D%ǩi�e�.�'��b[詽E��I����������3�f���[��'$/ ����)�l��t� ��������+����;#�m�Y�8�"M!��j���n�.f.7F s(%��ѳz��̏R����}_�@�'O�<���h�B% g$���h0�+\�,�8n<��<���u� W&R�F��vZvz_�I�u�����7v�mʟo��N�U�I�Ea_�)J�lu�`5> �~�� d�)Q:ˌ�m��9\�\*L-�p=Rl� �������q�$�C��<(^x�S�cӅ����K&!�������p�^�����h���w�ȷ9��T�c�̃q7*D�s�����-����c'N߾�9.�J�}.ȴ�{�Y��Ŗ���t�Uu��E(\��2��>faבt���;��+^9a��˦S�3�\i�O8gSO�S�v�R�u�R�t�~I�k�j`ߛ���N2��DQ$�W�9!{�E�۪Ϋ��%�������+�E��{j�8��[��=���.�*��:�͡��e#����",�}2o^�bꖹy�B��R�!敝�G���ZQ)=ij'(�v����� �P���J�l��mG���|�փ���~��t�":n��?�S�˕x�z���ɝk���a y9��kDN�U��N�J�lf��8��,Xf�2��*$*�����5ޜg�B��ÍٱՃ��tp1���j{��蔭��>�>4&#���8 �P�H%W�H%3L�l㭭��$�0�$�e��\H���c���3o������dh��A �N�T�,mn�"Y�����>���x�l��^�fn���*]#R�V0F��t�`Y�������m�o5+�\3 T~V�_�3۠�UU�ЮC; ������+��J�1��7\شH���Ir")w��f���I2K�k$�RU]��5��E����Ǩ�x� M�'�B�'�V��۾�! nO��r�P��0�o�gO�2�64����"'{i�@��g�e����\���=1��й�ǨHt�Q�5�� �*���м�O�m�Yh|J�ؕ⓻;ڌ�ױ�.���+rF��6<Y1�|�jlx��p��0���Y�������>� p��͓2��K%�A -:��7�x�>��b)tY�ۜ;!x�,-��Y�� �ۑ��E�A�)&C���gr�R�U"�7��U��,?�T���'��K�;nz�qڕʪ����GB��w2�weEANEպI�����"7��l= �¯����W<F�{a|�����$�79�����LFU 1�[����=��W��ӯz{��u=k���`�`��U�Mc�Eg̓E4����i�VT$�ΰц���n�=�5�G�FR��P�Ό��f�p�k<��gY��Yͧz��\�D����Y��+)mbP� �qp�����z������C��+�S~^�ZO4���z��b`P�ڥh�H��e�̾���+k����Y~�r���o��];�W�)����)эӷ-���wH<V똭�����˟EO�ǽ�����~�����36���&����F��n��5���2�x�y�A� �n"9��e�I� ��n��)p�k֑��|�\���ΎmI��\xӣ=�^�(�7y^/��d?��~���ͩ��W��_[�� _o5L_�T�<J��BqAT��$E9��3�99#&LePEQ���Mk��1;� {���rl/��C�X#��1�Z���q�7gu5)�_���ڍg���H#���KW�렘��]���i��czBf����-�U�S,f �:J��،��&YP��X�j���0��7��]��Bvs�yxzę�2��z��ECi�Z�A=yZr�pJ�g0���T�҃���t'���P�-q~����RQjQ��D�9������4 �u��$E˒c� ���d<�ȩ�A�w�4��H��%(����c��+3�-�Pl��H����"@dH����j�Y06w��Y�<1>����F�|'���Y!"aFpz8����5�O�����rF8 �+���<�����ٙt���E�H�@�m���V����4(y���{�E�G2?��581�� qSl���h�u���=0�n���y�o.�16A� �b�S��,o���"{�I�0z����E�1�1XANUrr0������̫�)P� �Hh\zp�T��G�U0��<�z���U���!q8�@WEsgf�9�.!f��H�[>嗟�Dxd�m�� :���tƛ��SYo���|�5�t�����ί�_d�k�F�K����}����]����T���?ﻙ���M¶Km����%�K���;Tw.d�z �+���DuIx����,*���%%�x��~ڂ%�2��>���²C��K��"�GV�E���p��E2s,j>�8)�rƄ�n8�Ї�pB��<�:?�]1�s��쯠CC�����ݿ��zTVp�%87N�#��~E�LfR��=H�0/�c�M<�5����<J��E+����N����cɶ'n�e�;�=������](�Ԕ�<��XZ�fcS��3zs�=|Q�V�JL�[�_��r�=���c���<j�s�Q³&���=NB�a"�3;+}�}j�� ��Tvth�-ј<@���& v�{O�+X�rC�թ1�hrpp�O�8z�R�S���Gp�-�@�(Ш�X�Q&=&�럒4NI���t�ɯxz�P��?s���:aو��1 �[{X���0�r��b�WsJ�WS1��^ut���Q����[0ws�M�3��jg'�A�\;�(v�����l�$���B�azpF9;4K&ި��Z~&�#%�� vp��ɡ��nUc{��i�:� ��%�Va�GP�LJ���~���6'Ҁ��Jf�%;୪q�sa����-�l�߳�%v̕w�m�%'*��G@&G�V��D�G�*_�]E�k�5b��%����^K"e�gfǛ�_4SQG_^N;H4:]*cY�l��Ԉq��������OH^� ��td�vƽR\w���p��˻�TWdE�^W �%��Ng�7�.�n.;}��cB����<F��c� 5a]�r�w��$ok*@NF y)a���1xV{X��Mf'ul�j&��*����{�^�Ǐ����{I��e���i� ��kN�����9:��ɣ���'a�L'�bCD�'�/�YW�oE3�&!M,/�^8}RQ�r�r,8����q'�84�|v�2^M;P�Ѱ��4~߰\�R�8G��4;e��w^��囦�{eV���C�!��<�e'�R��;�0v߰\�R�8^�z3�_,r'�3ݱ��(�Oy�*j�˞QU{��F�T�f����YC��מּ�b�?��������z�eE�ӱs5aҚj�XzWcI�gYE��%j̕�[*`Tܽ�V��i�$�m�k�ېq}����{k@PmM���]����?�[w�}��9��v�7��0�8e��ɫ��`�Ƹ��z*<���Z_&+���Ο��Q��7{����Oͻζ�4���P5�{*�M����Ԙ��D�K�2'�.1,���J��컧� C?��n��3�&�:�X��̚miMj�%gR<��D�E>68}2��S��j�J����� ���X9��f��9[���y��:?�50�;��A��T0Ì��;�w��@Oh}?t��غ�ݳ�r��\��X�[J���=�D 큦�ut��GS4#4�t���7�X]]CQ�)�N��1��{p��?GG7�;�}��������B�cZ:�1�j�F��{# 2JȮR�P��$oZAKse�����uG��T�-��[f�.8LS6HF���Π�u�Y��ݬ��j��r|��Nܑ�1a**���Ʌ( �QKZ�*���u5c�!��$G�i �At�o�dl��Sj�* �xh��@�"y�c �3^�s���_�x� �����s4wOrz�A�m��a�\�E�������/Yv�_�\=�*��95Wm��?ψ�[��� ���`��s�E�x�M&�^^:� ���u�o��U���ChP�l���6�;5��t�r��/k>��؏kV��RH݄M�DFǩ�68��� �����-�8�Ï99S� ����PT�W�\�K/����f�P8�w�|��݇��r�(D���C���x� <bV��1^Q�B�/>�$����`tpwE:BE�-,_��ؖ�Q?����ۿ�Ds-�a%&������o�D@�;��G� �E�P�w�ʼn�U��N�0:�B f�´d�T�dT�E8��.��ݸU؝'�{u ������é{���oj5X�eb�\�81�T�{K$Y��K���Uem��Ku#���j��WC�İL B*�r����Ao�{k=�N������B�5S�>7�d:���d��/�^.D��� G����!:Jh!�ڟ{c��):�ɨ8U�fٹ���ވ�q��4�6��F�r�¼�CJr$冱&eu��8,� ʬUd�;;�������!j���Lv�ο�E�ù���[~�O��kV�'���G����~��G(P���ݤO�I$,���q�O�7��sI�:��G�`�WW2���S X_����<s/pe����Q�7<��q>G�kY|'B@f��u�m;[�ښ��L�Q�j��gBC%E;@�D~ Q@�E�kdSJ<`��I����der�@��e�,������<��~�|͈�hy1eqFzy�hWh"²�e�����3/l0����7��Y�^�A��F������~��n����~wë[�瓧d���{�{�OB�+2��g�_j�Ǐq!fj��#�M��]��RL@^�ҹ���C���F��*i�ω�g��3A o�kÎ�].G��'�fc���u�0��Z��U�}��s�F��9���9A�]ze�y�Î��Qaً 8V�j��+)�\N���Ӫ����ԉ[9Pg�g�� ��g�4 q��J�s/�����N��PN���v��/�UC�M(� ���"Ibn�t;/�C[�Vga�[`�Ϫ)n酔��ߨ�o$��\kR��ȔƐ���|6�1'1ߢO�Vt��|���j�M����0+����u4�`g�`,�ҶC�I�SWX�z\Q=.�4'�O��(������FF�{����)F�$� B�(-=�3��{a�d+f�����ܺ~F�[8O�·�m��R�s$�6HS��Y�FQ�w�T�*�P���"6�\m���`�rl0Z��h5�<-��W[V�z1����3��f�ǰ:I�Q�JF�SL�*��F!��d}�rŀ�B ���F� l�&���FS���ॠ�����O��$᯿����L�]~�hX8�猝�h�8� �~j�}_p fj:7,�4=9l$ M�[--�e�f�2�h� ��P/ .4_�!��Q�9<{D�l�q6���+7w�t����Ծ@U�K_V�M�GE��Č�:T�P�4�>iQ� �앖 �ЬB*<�H���>:��n�"�m�Цn�]gqi���/gK5��<U� �5���!R���~�*k\��4P�);��R}8�]��ZP�I�TLTW����������#2S�^1XH���L[�F�n�S���h�8*�Y;"Pm�#�2����o��Uևmgԧ�Son�c�CJBQfpV��%���"�ѐ����vC��`5�<�Փ3$=��i@R|U'}�$��4��BC�ej_ �eY��l{�-%��|�ih�����w�l�]$ߠ�@&b��$B��� u�L���E��#Z������i����=��oR�$oc�m�h�"Nb�������Eo<��~���U����������9�Ԧ`����%��e��rBll#���Cɗ�j�1HS�8D�VEz��L�u�!���T�|ҥ��d:ߨ�(�c�Yy��u��C�c;Sv=gkR�i �Er����1�ɔ�R��pp�ԣ����`c�'�f( �^Ǽ��� ����:ⷛ�����!��r�ZR0$m�a�x=�`S��z_��I���=��$3�ι��e'֗�kYgKmt�%��ZA���}?*�t(&K���sݫAY��$���h?;U?w���ڷ7��L&��/��d��V�[8�,#�g8����k[K�$<��+���l��߬������ƺr�|<�G)����7P���`*k)��^_�>&����'�w&� �ی��*�Z�#b�*�$,��}g��0 _]H��4O�,j�QTm��G�͋>��P�Ũ8k���щ>�8�c�?���[ݬl��e��~�y�}_�gK9���D�,2����NPB��0������֬%:uB��H��������`�[��K��a�Eݳ��2I�a�GD%s DU�J�Ӹ%��()g�;+X����qh�5��k��RDž��oo/.����z+�+Թ���t�]��0NM�2�W��*�CU�,�O��Fէ��~�8��� �Y���C�1㣍������8�4�G5�#�J���n0hh1T�b��ި%�e�5�Ao��Q���l"�Ԭ�EӼi�a�G]=:��^ }��G�%J,�C-L8�[��f�r�X���K#�0V=�d��/=�G� �[4�`���j�d����'� _�%���8��+�h�l�M�N(]jGI?�R������M���7Ϫ\����KLY�?�k�&�J���t���G]>�;�ж5��.̈́q��Mds��x�ק ^�$��tc>q`F��Q�6�����kg�G�&�z�� ���xۛN�����rWFt��Q���˞*���_�ۉ��`y�lAUU�J��L�pw''�ڱ��f��e2z��1/�ܦ)�@�!��N�`2�V��%�Q�~�֛&�^��8)P��TV��YXF����EsN��6b?�m�u�pӞҍQ[ն�.�V�g�����Ɏij��q�9�jb�`�Nq�a��C�צ�[�8�X�Q�zՁ}t�����@��l�QF�#���@4n'v:?����ܻ%Y�V���Iw*�'C�S�DZTW �� ��H��m�c ��e�lS ����Zq��L9�4���];T{@J�w�C����ʫ�#�����^܈s}za_K9�n���Њ"�m�ނ�N��_�S�w�gX��$�q<N���CC,�d+q8Dma�����<Ԁ�#N�M��W� ��3���l^?�.�D��p $� �Z&�PV�C��f�0E���Ya�5E��z��-��ot����G!hӼ�t6���oo����)�T~���s߀y.�6����ۧ�7�c���w R0K�W�+���+��;����5�n��������Au֡þ�C���)�GLǜ�b�F�aa�1YFx��,00�@������2`���@�#g:��E����̜,��{���X�n<BQ؛�f �K ��������O��0�o�i`q�n�)�����=(2:4Z?$�r`�܀j!��2��z�̪�Nm������͵U��j��3w����;�n�궀���ĸ/UP;�S-�"R3������0�F��G^�%4�{�~�[��k�E:��`������cq��N>�T��Bۈ<�6���o pk}����~�{� л�Y���1�yĕf,�nWAЏ@�2�2��l�F�5 ����Zq�l�S�����Џ@�@·�N�^`�V�/�z�3�,��� �2��m�p�eKO̠>��jU���ZDkN =aZ(�z���� �dh�c�C��2<z��/Dc������ ���|+·e��π�%9�=~��V�b5z��EK�[�_Q�%�+�:��0����=�g���O��onM�����9�h���Sg��߿t�e���V�}%\:@P����k�r�yzf:k�P�"�CQh\���K���̸R�^@[ �,�+<�P:�$9��$�qD� ,~�HR"A�Dx9�'� ���G%:�f@`TT�A��{�go��eI9:h'[�I�K$F��£T��ڶ,X��*(����8�T:�aoT^˪�K���W�Zj#R�[IJ2��ġxL�$��&h9O(�S�k�_ns��h\$�$'y�x��G_D"%������>Z{~e�'Y\ �r�X��\�*5���� F�6��ңπ!#pH�L��2c%+�lزcρ#'�\�r�'/��|���'@ <"� �BPф�c` �.[�(�8bĊ� 9`@�*'uy�Z��y�>� ��4�P�ǡ2�Ͼ�7����wY���\�����%�����H��uR$K�.M�^B�D�d˕#O�� +R�ز>R��ly�X��3f�徇�g�<�%X�hE��P���v�'|k��������������!4j�"g�T��d�9\_ �&��� �������X8�r X6ҳ����H�_W�F���XB�ҼR�g��M�t�x�bZ��9x�]�.p �7x�88<}؇���Z���N�5��re�l�mlK�5m��"2�� Y��%:: /��gw�������[7��o�/Ma0���"G=T���/�?���l[Օ�雾�wL쾋'�o�k�����o���M���f�W�W���K��#|L' �&���@�:p���Mt�eÖq� �@�@�^T�e?cN������e�P�[��SL�ή�ʴ��iQ.�0E��t���LM��%")��eA"!t|����T�� u\�:6ș1A'p�G���<ߌ��^""\� w۱\K�9d2mͰ3&��j��Y�*�SŤ�:H�:�uH�IT5Aa��@%�)@n��;aq�?4����E$��m�N�Y�2��i@�;�uR�8�,Gk���\�BK_7�Է���b`��TG�s�����ƺ�l$<8�vkGw� u~�Kh����j{h�Gu��V�����u�� �8��U�"����wF�*���u��ᮈr�E���,�D��eK�_)L{�+A�N�]UFYIi-K�Z��g����=��O��!�l�@!+����˫�M���0����E|��6�J�;��yY�` O�"[R���0Qz��3�+���gf�?�^�G�theme-joomla/assets/fonts/opensans-ad61962b.woff2000064400000020554151666572130015531 0ustar00wOF2!lGl!j�f�&`?STATZ�@�| � �(�/�(6$�L ��^�B5l�:�n�q��/�D ��FQA���� T�p-�T��K�t�e��"�nIJa�j�{2�;��x̩[bD�W��`,�QFΤU�M$ z*�)a�+x�H������o��3��f�$�-D�F�b��̊@�#G$|�A���� Kp���L��� HB�`����"!�4�<�A+H�~?��֡£*Th���\�����3�� �.*�A���P;���^ߓe�ob�T���D�.���Î���m�2�j[% M���>�%�f�/m�w&<����R���|�H�I'Eǵg6]���а9S^{��0sY�v܄5섶���M�D�tNt �^|�M�[�a��ؿ���tlT�Z餰R�iPQ>�E���*P�$�q�$���W�����]J'�r�Q�aO-*`�ݫ'���d=9���v<�,�CJ��eg� ``�rܑ=P*jY�p!*�a�j�ғz��s@ �0M�Xf�~�Fy�ҽ����sq3`h��\����)B�6�Д,&�QZ�lJJc�Ǜ��c���X�^ǐ NpDıĸ��ֹ8�,:��D�l@v�A��@.R@22�\�G�>K�-�����z���"�A�`T9®C�r��Ԭ��kZU`_Wk�vQ]5`C�S@�F� ,�T��pNcr�lՂ��Bk��Ӈ"P�`��` ��1��G���|W�t��Y�E��"�@lN|-_�g�@�e"s�`br�/����]�UN����� ��=P)c�Gy����]�l�u��"d��i��=����ݳv���I;����m���y��� [������&��JW�B����$�"�O�7x��a`��j<s0k37*8��g���_�?�O��w.B�;C/�Y=���Ow�VԵ�\"y>��ϤrW.�o�4Se�<��Y�5��꧞�l���+S-����OEq�-_�y�_��ߓ�/�d\.�i9*#�P���f>��-m^,�OCLwbX��19Ƹ��CV 1b��h��C�b�Hc�q8��j��F�*g�q� NkmJA��ڔe,=��W��i/��H��'7�;i�\>e_�~�oW0F@���+� ����X�b�@!�?BD:z��WK̊$_���`� T:�*�H]� :��yNX:���` �` �`15B,r�Ӱ� �6y��C�0��"�X��e�;�m�p���1���� ��\PD1���Ӑ�������\0G��t� A&���a R�{i{ɷ� bU r8���wQ�EH�M���D�kG}��`���A4��X��Hۏ�ā�9x��%q����*qD��8�<#��Us�DH�E2>��.W��B8'C6�KY�#dh�����ݛ(1����O��L���96,_�D ��Cb�_���<ZX-�:zp4������Xx��M��jG{��/Fn�Ad�y�t6�=�RW !W���A��d���.�k�&R'��%�Eyb��`��@�2k�h����G)� 2d��)x�w���_�)��A�8K�H�^�O��%���F��g�� ���>���8� ���������;��= |�-= X��y�������,��>Y0؇���ae�ت�vJ�,�-��ss.��c� ��������Q�5���Z�;`��"��[c�+�n�m�K��E�(���@��d[l��^���N!��f�E�����k5��5�c�e)�fm槶�Z��ik 0J0��k�Z9onwWgG{�~��V]KsScC}���wmSWe�giGa�{�c[��k�"K���M����X��j��V�}/�g��������[�K��#�c��'R?7�z� T��鱯i�p�����S�=n�j]��sF*^~���"H�Bt���I�dJ����L�Qէ�_V&����F�g$�-��Hr h?��a��l$�BR��^rF,����o��@�N3��勉 `),��#�W�Љa�n-��}.�1�n�v+�Hߎ%U��h$������ ��S�6X<aL(�@ 6�(N�ӛ���̡��ӌ��v�H6�ё�IJ �uN6�m�=�!�LYA�:��9SͨY�@J�)�5��/��,a�e��7feO�d������'�|���%5kMe�w��o��ɑF��z�v�Nd���"�h2���efi7ԩ�tc���o�&;E���Z��)��jt�l9��;�S28]{��\��E`��w�h��+m��� ~�w=Tu�{s�h,Ԟ�m��T�'�e$V�{|�>�x�dqұ���U����շ�r��HFf�#X ��?5�B��~��ޢ:��{�n�'u�^H��R�I=2�b=�sk�j��y�s��jse�`tk��7��H}�cPA� ��&�r�����T�z�1����7:�S��y�U^Y���!�F���P�sgI����>�w����w�EW�,��o���bFt"��~�0z|�d�d,��T ��1�A��lYNw�#�X�2���2.y��"����|�ϰ��6ɼ)ei|Hik��Y��k��_i֍��3����0'ł�q-�l����l�ZSs�Dø���F(�:�Fs{���<(�R��/,a������:ǹu�L Kn�˹��8[��3�D[�T%�ej�~4 BS���L 9�]��L������kX�����Epl�����d�mX�\W���H\viiZxRh��n�;r~�F��0ӿ� I�LBǛ��`����T`�H�@&M����.r��h�����t��W��s�c�8x�U;m�+-�ԔQʌ��H�>s�p�\�X�b�I}Y���(��� ���!A`x �0N��}�a��AgJ����l���u�m'5�u�Ȩ�bMA��30� q�;�c�ٹl?87u��D�9���w:y!ֲ�njr2w$L8Ms�^���9$$Y��n.�a�5P9���`9F��e %�_b�쉠�c�C��Zt�����]}$�CM�G`R�U\b}�5ǤL6M̭�6��sk�-ӥ4ȯ4ۊj� /c��f�3��A;�2��v���.ș��LE;��ٱ�S����~ĕ���N �ү�Ol�.!Y��d `t���Sp&#���"����k\�s�Y�� �Q.��1HM����j�Dp��!u�I�����߭����=@�<w _�,�H�P�:����9x�*⮮�\��V��mK�dd�j�������&s�0�W�<v�j��X��,Vj��%����Nj�Gߍ�h��J�g �������ہ ����Iv&vn�"q&�A���5�RH�$�?Ĩ�է\u���ϋLϿ΄��FШ�j�B�K��U�M/��?��`��;�s�WT+�}�(�?ܨҬ���\�g[Pb�Yu��U+#^=G%0ƫiV�>�j�%ْȣUk>dQ�@�)����?i.f����ﷶ�$S���;�IU�e~o�U�^ʸ�nzլ�U�q�C��9�*K�X˺|��@s�s��m��g�.���?k/�킱!�C9�ɖJ�Zu�-Q��B���@�c�4V5�)S���Zd-�q'`K���o; (S�A �`P� �b��H� ���+,�vh��=$E}�`Ǔ$4� ���Hv�y_Je�PE$({�c��4rի�B{��TDF��MsQ�\��Vw��u.=<��a#E][k[�g���x���ɦ��v���vNj��m�̾�'aZ��]Hj�aMJh��iH?v�v8p��q�P�K@�t�d�^(fFƇ/V�<�[&o�e<�b+��APw⛝�uGGF)9�'hT���2��*�]��)��� �<��ѡ� ��O�l�A{l�3*���z�r�ffd���R��vCu)�T�P�Rg O�-���I��Q*������`�������ؗ�`!�@x�-�齆J�J�y�y���L�.Ƕtl��z��M�9Z��:�pيT\�!f���ۀs�m�(��U�.��V�$61�7��|V��q�� vb[�&_n��e��x��b�l�y�u�M�l�g싁*�rUiC2;�?�bÔ����W�K��4��;27$�R�7ƕ3�i��:M���7J��z?g����7�v<��f'�X�܍�D� J�f�j��n~�yD} )�~:��%I+��YJ�㇖ZE[��Lp�^�a��7�$oI���8%M�?5��_��i�.|�ڴ�S�Ƌ���+S�&��,OI�=;[�p��-�.�iY��[��h)�#�vv��<{���Q���û�甚ӽGi�U��f9Զ�k<�/�Z�M`��T2u%gW���z=�&-9U����s���&��Lj�%���K˖G�tnĶ}G�(Ɇ�v�Z�d'V��>�"�c�q�]}����v���� ���{G۳�K���9�Z��v�K�g�n�{��o�M��+W��;9N;��Qzp�҆�\$R�|���P/T �I7r意7�8�ڤNiY!��y�~��ܺ(���ƶNCc�� �7�t;��&f�D2�3�#��e�ų��+�v]Tߴt�¦�9��}�v�q��4��S��;��|�2���,��St�F��G3V�s�e��"fB�I[ƹ.��� �ؔV.��v��?Bl�)3�C�G��*Ғk����ڣ�-#�"6m�x�iW���#c�!�0\�MI_��dƫ�ب�V�}, ���S+*����%�O��7� L�&/�.�������'��/���8���_���?���oos��+����ھ'mf~u&m�~����Y:}<-3�Z1����\��UAu:x��UU��_�F��O��Q8FDȹޱJs�Y���)�����*����z��i�>��'ۣh־�)�6_�P�i�G)\L٢w(����� �U^11���q��j�w��0�l��{Ñ��h]��e�G?mir��n�l��ug��;}3o'���� %q��j7���'+sL���ji�mC][���;��nol�>~�]���� �N�|�$�����5[���ٻIvw�e�����3J��c�)��ǑX�FQna��:k�ܧ,Z��}�ձ`߱�72Ts�b9M�.6��L�ΐё�X�lj���7�'Z� :V�ý�2�EM�~`�T*�R8aFפD^����V�%tqZfJ�h��7'*�?=$UO�O�((O��M�$��1Gi3|�KY���@�y�2��qZŤT���u<�Jf��n�����&��ೃ�6)Y���M ���� =���T="RV�tה(�}��W���M��r��Nmf���)b Z�W��*�o8���/�3�c����Z��q�̲�y��,��3cYh�DF�j��/��:�c~+���yl�s�~z�jî�0c�<M�q/,)�$��.\I��|H@�1��u�Nd�j<�Y��I��r��p��Ũ$���]#��y��,�HEU��J���u�'��6J�u� ��,d�� ���`�^s`�1�B�5�( ̘���.�c �Q"�u��D�6����SvrW���{Y�k�uޑ��j9�l����ܸ�d��i���<���p����<Mմ�A� Jcț��� 88\x���qR�n�#�QG��pF�q��&\�fWU�~�m�B��L� v��p��|���iP�ӽ�A�!�Ƙ]����s��1�>���rkG��N�)�d���n�I)k�Ԛٴ������U�C>������G�D4oT0�Aw?D�?�j��c�'�D�-I\ ' (2�;傣$�Br�����0''�Br�VO!�%z�m��8S�n�O�(R3`�8Y�&E�ۣ��Y8�~|s,��58��ΪtZ{�����Q��`o�駬�ǭ���^b(,/mE\���1� �^(�^���Dyx����Cn�dkY �L۞���G(�\�.�7��\d0ѹ����̊�*����b��B��/ˇ>��V��s��,")<^16���z�Ni����,�-�Xb�r��cl���ċ�g����8�7V�s���k�E��-��ݴG���S@���"�#tEq�4��հ�������I�YQ�� �*�w�����$i m���d��?r<9i��Řl��d FןpbI� #l���h[�qN�'a��i�����8Kb�#O�y#���Eۖ�~QaĿ�1:�|[2mE����'g�^g{������E��g�@�EP�����\�ͩ�����q�����١���AȺ��c�%{[���-���ئ��I>6�j�lR0EY�b���J�.���� )�.ʓ�~!�ͼ~Ϸij`��&������R B[[DX�@\L-�N�yPa_�=�a]���4�g�wj���[��" ��@q�U�&I���:x~.��ט �8�F6���n2��L�v�M��an-���R��_����7_D���&A��X��\��i<�h��H(AuQ��Q�`� �����4�v�i��Q�J9A[� `௮��?�jh�a�OWuIP:K���sPx�,��T�:'����|����� A�n�(�����>���s�\{�͑�S78O���q$2x0���k0�8~�<:�u 6�{l���P�W�7���)o�#�qs=���3����vW����|�9t̑�4?c��b'B�]���PY��@��\cb�VW�"f�i|���ϱ=C�i��I�}xoq\����|���h�z��Iy�W<�%���Yy�����&ȣ��6� �j�a�=:���<n'�yۉ�.v@+%�X��Ө���q�l<���5���D�Q]מ���ϣ���fӝd� �̒-�r�2�?��WG߫��<�c�X�b��i��,��1�:D���9-*��NSם�J-�A-ҏ9-�d�o'e�t����|<2��!�E�c�����{��ۘI9o����>;��/�b�c��C-�p ���n�{��V�ݸ�)��x�����x���1�-��Dl����"��Pѐ�1�4�!�ֻ��%I��V<�)����B��Z�e!�Vϥ�/�U�X ��b�����LLre�X��RyCn+k6r�9�@߂F��ȅ �~<ɡ���f���������g�,y}�]�]�O���|Z�3�ߜ�-��������Z@�Ou�?���'Z��|��M���M8��6� _�6���D�4�ɔy���1t��y ��A�s\o�m̒�C��N�Q�H�xuuu�2%����@SF&��J �i�p��0��~o5�49S��u�Bx��#Kh�QKx���"-��%Y�D�t�����d��&��B��ھĬP��A�XiI&��UZ6��amvH(Uc�f��HDB�͐M.L�b)J�5���=��Wr^�Y�\�40�z�jJ�TS�F"� �e���عں��z�����T�x�� &�T�8�d2�&,��Y"@"$AɐQ��{���$�u���EK�2�B�Rk�:��h2[�6�'H�fX��r{�>�����?Bap��`qx�D�Pit���py|�P$�Her�R��huz�1vi�XmvG���Dܗ'Mu����#�}��AE�Η��@[STG�ƲJ%�B��h���16\&��V�2Ki�H�5��Ots����_�@A�ID��1�y�!�ˏ�����$%:bi�$I�$II�$I�$���ffy��[��x��_$ǬS��T��@$��}0P{�Ecz�)���Lg�JF��.��?��Sn�SD�M����~no5l�~�>ʫ�${��/@<��5��Y Aɧ�N�w�~�w�vn��y1^��Z��p����x�i(�LL�ڢQͩp^ f2��� �����VX�ʽ���f� �k��Ȑe�p+]�ͦ5�˷���Vbj�.�:K�̖�|<<��O.zX����E�e�0އ�o���dW<��`o�����\��L&P�������vc�8'�lag�[�<X��)̷<���6,�����f�a1S���u�f�쭦X͖S�&� +�:�20��U��&�����1W�}h �,Z��p\BW�gy���7�7�2U� GE� )@1�5��Y��o�����@��=ª0�*j�fM��F�4���,~+wK-S��C#)��d�[~�3S��=�z�@q2'sX��������[i�����a�I���_4��q��V[�����ڰ�6Ӝ�ƫ(HU��Y��Շ�theme-joomla/assets/fonts/opensans-d1d07cbf.woff2000064400000043130151666572130015660 0ustar00wOF2FX��E�N� :`?STATZ|�| � ��h��2�:6$�h �&�+�kx5c[��<���r#���f�E�q�O���9Rd���ZV"�H�RU��MTC�Vj/���ٵ���U� �ǰ�u�B�HZGzz�<9:�� �U��~�<�g�ޭ�˾�{4�q�7Z��^جE0�~�����#t��'\��pj���8�����Hb���z�� ,{<���4ePA����,q���8يN�-r�O��C9�T0F����m *�R��h��@�j�0s6FΙ���ۜ�ԥKW��nw>V<|�{_v����t���% ٛOWmT:Q�n���Sh�X������q&��M�ٲ��̫���N�P�<��_;��~��48푳�+� D#Ϊ��� ؽ����e��� �w��b̒ �[�M�&j!��|�s٢��I�eJ�M)�G�O|�� 4i���7Dk��Ū���4K�.�\y�x�~e�Ű�� �S�����)rƧg?2sZ��T5Y�h uA����i��/$���Ch�m��e[ffŹIs!jLj ���G�-��<X�"�����{S�/@�P��3�H]E�Tt���Y�{�����?���2`Q ���G�$,p��@]���N��x �Cuvu9�N�iݷ��K]㢌��ko��ݤ0)��J�:;P��RT�5�c���s`�WU�=������ͽ�wB���۲�"'�aq�ğ~fy�;N��#�E��,k4r��ϵ�X�C��V�"��s� 2��}jH����鶩 �[1WkFM�3 wċ�ˋ���7�;�`�h(�j(�r� ^@\4y#�eݷ���o�:pu�� �Ƀ)��9��]AW��'�q,,�,gQS��-EA�������GĿK��'Y�LI��4P[�����)���.�N��kf��_{�[Ӷ�n��i���Bm0�_�ַک�����fݬ��\�%������j��UZ &y &�X1QA�s��h�R�r,�2+��*d� R� ��+�Ac� ��s}E���|�ws=/�R.䙜t]���������,ɼ��nlJ�gt�e@2�#ɉ-Xڧe��^j�� N*���)��0�b?���xO�A�:��1�b<�'�C5QE�]��q�����p� 0��X��ˀ�#�xt�}.X�u�6:�*�4�����N$�糄� P��>� Ƕ�*_�W�*&Y���pJNTw�*��mMFY��ս�J1�Y�c.kN^��0�Z�C�c�mp.�9U�3qU��$ݒd"c?53o�6R>Oc�Yl�|�� >��G��|�Ql�>g)�C�|�C�ALz �t���]P���}G1�A��I�ǐ�ZZL�l�f�8�FEe��y63ha�� 3��fO��&����jz,�^�U�l��fЕ4_�ʃ$+bdj������g���]=C;��+�lo����0�A�;?������ʤG|)?��쬧�!���\�E��H��xE�3>�e���\���W/N�%u���-���g��d>��>���_N%��M�3 8뙇r���?�p"�(G`8_�T��ف}t���aĬ�B�KL�8jh��D�tQ�vmO �љ��a]���ЧZ������� �ϛ?���\v�.��7�<�xB�ť�����,w����a��V� �j��J9N�5b\ѫTj�V�C�~�a��F�ڥ_�eY�,*tu:&�9J���g�'f��)��\�,}�L)v\k��(P�����T�&���/2�)�d<�Hh74�+k��c���:���2 ��1�!0��C����]N��f��M�3���|6�����7����{�ƣA����z�N�ռv1ۉ��emY�O�;W-)q��veiЉ������b{C��Zo��A��_�3�}�!��]���_oĽA!��`c�X���-��T�s,X渶�����"���)@ӂYBt��Ù��h�?<�;���ز�#�)����+�f�m���,�U��5W��B`�·C; 2�SF,�|ԮQ��AÓ��(��F����FG�%��!�;�^#X2�c迱tt�mSw3C��ۻ�c��;�r�G7���S�j��I�V��V5{~h�� ������&�#�Z�ˌ��O ��\rDFZcs7��<e���p�wn�j�匋]�uZR�x���@x?�:�(�暔����&C��S�a(��w��"����Cfvl�~?E���O�(��}�z-/�v��z#"�o�5�bn$$��X�;�� � ��-}���,{��Ń"䈧M-wn��x�0gwb�)7�v�!�EG���].�*P��e�!c�@!]�q\IӸt~2���Ӑ� j�cÂdAH�(ڝ������'Dp}Y����S8���Ĕ��g�?�N�Q^��5�ޠt/]_�zH<�x�ְ����}L�� y����`���,�/�H3C���r���x\��.����<ҝ4���ި�:>ר��%�ֳ�e��4�����&�Oz J���l��h\��%�a��U�ό��#A�P,ͼ︠口�ܗ8� .#���F|��쌑��M�����,�u��<��f|�*Z��j�ydLRR� ���$c=�K�5�t�}&�8�hCj�LM,����(�\�!zkjM���^����1>��.�ciQ� g�ni��w/��pQ]�.�rQ�k~�9UAPB��k� �q�r��-u079[��.�+.7���7�H���G�m��,Q;�=��-eԤ)w��5d8�.����&��r�&x�ݨU�_I��`�����A��[*�B�>�L���МN�#�ZÄ�V��-�� � ١I����T;Lw���)��q�9�� 4�e��.���"a��N��&��R�%P�sZA�E~,2U�飻�z9������3h����dG�`�J�8T�9j�3U���^c��{t���h��iOM���}����PQ㩑��t���w�Z�,�;�P���eP� ��"��Kl r��3��\�uA�䒇(О���Ci��s/� vi_�4`�`��UƐ�s��>��O�� ��c�?r�48 m������� ����O�B�+2�v/c@�� p��Z��L�"@tKh �]-R�_n=����q�Q$�FT���E���Me���Fvm��P�̣~�8nk�j(6\3UU�O��5���S4� )4l>��de�ֹi�g|P�u�L �͌i�SRl7��s�#�2{����l��y|H!�B�<�.Ye�*�kϏW]���䆱ǭAu�5fۮ?�^cY�D-�1P�d� �nB���ه�B!�����0�O&��d�����8,�?d��?������P8�V���,��k��#�>D�L����6�$٥�e|E�3�4���&y�Q!�Q:7��+���Q$��շ=譪��yN.�ǒ�Z�v5z]v�q����!��-6������:X��#Hf|������~IM�jPT���%%B���K�ވ���s^d!���=y$D�V'ߐG�!�\�A2�@�W՛C��;Q����?6|ϥ����%�P�h@�B�n�MlY%UnT-ҍ�,�l�P8�P�jWq��;1j��r�����j�~�ߙ È}"��(ŪR���b�C(�=�F�Hۨ�)�U���]����RQ�����/̠ �>�F==�e�RÁ�x���]r�C s��l��P�)u��D6�!N���Zʲ`���ŋ���y�f6��-��_e�@� c�����w��!0���c��<�Ug!�j#Z���./Ϸ_�<����Rw5;G�������]{5�����q6��|���ONw��v#u۞Saɹ5.)ҷG��֍���(��V.�($��j*�/bK�F�X�g5�.�M���o���8���b��k�J�N�"�r%p®j�2�5�)�$sD�=l�XHOט���),���N>�L�r��q4 [�yq��U�0ūZ.���� cV��[/G�#�ވ�<���42��i�����]Ǩ���=�:*_!�m��-\��$�}ص6)ӊ�ޅ��z��J�-�ӠW�3g�$'LҊ��E�� ^Ј/S,��HT״"yO� ��#���.w+�3��ν���]����*�? Q�>�#=�+˴�k�B�KfY��h8�?G���Ih�0��I-�#�RWd[��bxh.�v��;�#���;Ը�����l�X�U��yDd���".�I����W]�r� #�C����荚�q�HO� Z���F��j}t���\Ά,�t�,%y����A���l!}��Fؙ�L�_���)���|��e��CHr�:u`����%�O^냼�VЕ����H�ω ���������#&� ��^A�to�hdҶ��g.ā��>�#1$�����n��Q����Ճv�m���߆��ϓ� ��`�H{B���`wH2��Ro����j�FO쑍�9װp�&��3!Q� 7<�S����+����'�VB+f:��I��]oca �Q ���@��U �Y6��y�|�+���o��C�=�p!�/a�u�Q���v��e��7{UG���?�O�Ю�����^�j2r�D���)��xMi9��bm�9����dٕ�щ���}�^V���&$~��+ϜƊ�٫��'�qc@�;Ï�UvCMa��b��1|�3 �\=ǖ��$?a�~�o(�"#���`(Zt/j_^q�v���+���Tg���'�52�a���3]I;ҕ�H}�)Pl,��@Dlx��>oB�jy�R����/�F�I^���g�@Y `��&uQ���?b�ڋN@P���}I��AiGK�ʼne�^X�ڹ������:���;q�/���O�\���aϙJ�1����6��99����iN��j8م��=�i@Wd�Φ3[��uT8Y I�Ex��vfi]P�v��I�<��>٘�Ö2a6@����h7�H_H5I�"5��c���L[�O��ǖl�c$��t�5^h�Eh ӉK�6�Ѝ����wX�� ��D娕�L��U�|�d#�����3BI͔f˯�$��8F�5��G�G��Tp�X�j��D��v��i 8�Sa��ʀ�@q�", �_Ħ�x��$AV^N�p �(�Ox�N��R��"a�c�_�'�J���&��m��0 �Y^�9�P1>��ȝ;7\����'�s>&�1�'�ԜT����di�������p��M.���.�}�T���ىW����SYo��`�F� 803�*���Y� &յc�'�t���m�!{;/�-��I�`��� 6�)��ي�\���H`{�([�u�A���!���� �ٔ"� ���Sj�J�2�n5�T���1�F���ѦB��o^�p��i"%�r��_l^�[�q�+��L B��ŝ�Ś�������p+��l�#v�S���t`h��U��:�LY�.��:ш*������1�<P$A��B�!!��e�D�HDa���S�H&�8@zK�9�c6���8�a���]�H�'�)�iu���ǟ_��o���X_����&Lر)���G"�Ŗ}�+�/��p��c�;Bdd;�ϒ���A<��:�ɘc-I��y�C�x%�Ő�;x��.OL'�\?�r���J�KLb[K2����E���)����9�{�v��ܭ���픧x��մ�Ѳ�&9F�x 4#�lX���r4�0�l�:(��ʂ9ME)z�#��W�a�d�*�i��i��0e7�,�涎�Q]�k�Z�3��<5�� ��c�"�ۨ@ S��j�fAڠG�,3_��s��G8��T�2�o�\-t�Nü�>�H����4�S|�5�P�XLs��6��$��}�c�P(߰������yl����'^P� y�!f����l�B����R�d�?������7"+ky�DD}+� �eU�*��1f������+E�S�*�~jgU3^j��y����*?��i`@_sU0?������ݪ��i�p�.u��o�2�j�F������=|�.?�Z@3Y���p��FXz7xp����|���p]�e�Rq�Q�7��*�yֻ�*�2��f���k��:%�#�B";�Mܱ�c@ɋ�ܸ�pz�1E�u��w��اFl T�� w�e�T��G�u��e�X�^�g�uF�he�]�Gمx;��e9 �2�k�����U;�,w����~��k�[�C&լf�!s���n9��Z�'���O䗬�Ζ,ijAb�x��yoD{�'��u��/zi��g��U�8��+���e:��V��_@+:?��ZB�ĹN�t�\�4�3�����ۃ��I�?���m��(�� *I�+.�e��w�lp�_9��{����_���Dȳ�������l���"�+G������d��� ���g�u��'=b�(�E�?jN��N-L6-�����oio��11q�)�������@���|Ӂ�w��ul5���m�����O폩��Kzx9]��}��9��c��V��!'L�"�)hRJd�YR� rp7%�� ��(���l5$�����nY���M�l�'��}J�@��� w�</`�Tz\��%�4/�dn(_6�?!c5��H�~��4�B�B,61��C��'A��)|��t��z�����}�����7�_�y7��V��[�N9�r_���j��-��P��B�Z`�2��J@���ͮ�%*�#a���u�ԫzt �i"�� "3�����Tm}d*������U�R�R�G��V(�Or��V�n��uݷ�en= �1�2�[��o���U���%�}I��wo�ɿ�T#����]����i(�H%��nk���Y�S��z�����`r���E+o9�9��w�m߃5�&\��<J�S��nI�3�8�~rF%u�%|�����E���[�0/�Q��*�t��n�t�'�1�hJ�!6�J5�m&�F�KEc�����.Yz�L2n�Z>K�S�$�����$k��"�-�];H�\ʹ �FN\9y�/%��-�U�Sm+ەA��N�Q��+�oL��eߣ#ڼ���UC�֙�s�)v�q��~ӕ��f e��3��EVMͶ�VME���7�݂)!�b1Y�Na83%=*�?�䈍� �oy�?A婬]�#W���R���T��.�Hm�x��pY�> Oe<@㖞�R?�BY���S��Bel �gK���E���z�@o��sO����M/��μ�0}g�E�5bx5;6�� ������"7z&>��j��CW.��lQ� /��:~��X�*q��яR�u%�2�t�z!-���]-~˃: 5������nT�D���P7vP�'8V�����6��|R����B� /�IC&Xo2�L�#M�TKW����-i�αK.إ+6�f�� ������M�=��V��ϐ\�'t23h�i�P�77�9��~G#��DZw�]�Q &L�^ ���|�Q�`��ȿć쭃4��%��L%Gx^�LmA��څ���%�\ʹ)��3u�gx8%��3�v&_C��1!*����'6�}�1�Ǐ��*+@��R7z�y�=�f"�k�(�/�X%����N�Ct�>�2Uc�2(�˒Kl����!c;N%��c�g�#T��T�]� -��-�a�g;��dž��oU���b�Y�H�_�#&G2��8BE.�߿I��A6�hY�5��~�ɯ}P[�fW�{�l�uAz�z��6R::�.�Y�X��@�?N����ZcN�~D@�u��'4�k�i�1ӌQU�S�W~^�{~�k}N��������9 ��8�K_ʦ)JD���-�&�m�$��D2q���A�$`��V�ܓW��ާ�_�Z�X_/Y��@x�t�Ω�#�F�|aI���#u��'5R�]����4u���Lm�`>�uW`>�|��L;/�ʷ%�ȍt�|-�&�e�}��F�Bxeyo&Z�w�-����$��,o�9+��q�*��m���Z<����]�Ẑ���W��s`��Zv[~z��F����x]g�2�n�@�Qͻ%C�4��h�j�;yp��(����S]F���iP��^ާ�_�bO��ۇl����z[t沂)�W7�|n�T�4Ӣ(qV��Lc�S�y�����Tu}�e-����x�b�aD�L��b�Ž�.E���E��b�bg��s�IܜX�����Ҍ� =T�i���Rt�S�^j�E�_x����v�~�a!��/�g&��@��G��Y^A�M��恡�p(\Ռ�HI3%y@D��A�Fibb�Z�#��ףpε(A��V�q�x2U0����p<�pV�e1��N�\��:G`'^��I�a �u��z����7��B�u�w�\�� �,+z�P�?���(i�`6�]���8+��ߴ��.�q�2�p}�p�4������CUz�A�y\��Ӡѐ��#�r+Np�bH��179%��Q9� ���psY�E_��33X��Ȝv�1���G�V`�04�`{H�����E)`��Y��hE_�g#���˻�]v�����l��c�2�n�`���f���`d�e���X��>��?oy�)y��Jk�)`�~ �:���s x`��P�)�@�biY.X��W�e�d�/����(�]Y�=%X��?�À��6�-�_�K���!)���8��^�&*�!?�{�/7�%i�4����j���:�g-���'�>_�=�P�lna�1/�+\=���g���}dݾ���F}�����_���"����l�oŪF\hlf�ī|�[���ǫ0W� 2ܵ)�!$t���]�רH��H�\D=2A?�o��jB��A�NI� 1F6X���4!<s���u�+!����U�ט��>�E���,c{�T�g��Z���ω�"�H�S_.���&�|~N�y�q�.,��>�뽖Ԣ�̪E���(I����֤��A�8�����+���x��O�� ����?�ԹF���G�e#�Q ��(s��Vm�`:"e�6Kʫ�n�,s���h<]�Ϩ�ӉO\��q�e��2|�����.^N�'��a�w!i9A��,�3��Ҫo�s����~>��L��Pm�N��`��禡���4����)W^���ȿo��NX�}ԶM+J�C�����_=� ���3��U��[�rdѝF �|Z(%R�֥�'�b��e�۵�*~�s�m��YG�~W�=>��"�����BGx�3Wu�F�����wZ̏Ɋ�`ǁ�=�\�hg����`�oy쎎���a��\Q�0*Y�`�gB��!͏����q��S���1r���b�+2::2.v�{��,(��8g�a_�bH��x�3,�Op�Z�%ǔ�u��O�1 ���'�rg�j�S���3j!��E)��c�E���R��NR�n��q� �G��>W;�*���M�*E�q�ch_���M����F*y���A�5h)��%�nI:�ւJ�$�J��K�Gj/��r�6J�ݗLse&���$�^7F��/.ygb(��A���C�_��&J�I��ҮoU���!k�i��X\��=�bK=J�A�1�k6[=w� �Kyw u�� �Ɣ���&R���Hh)d��K�"�s�U͎ m�`�_��۱���tM�ӳqH�߿�C7�N�U�aS?��N=��h ��U#\-�?�0�ۙ�J�o�z,���%>>L���[�h�%T��j�c�*����J���Ok�D��YOuC���l��t��cbo��ʘ��g*%��y�6������u%�%�_��CX���?�!cy{Y l!�tc��&A�'�F��R���L/��~�AcߪW �L���>W��ȷ�N��g5']��j��/�Q�p����)������BR&�j�j��C����{��@�� ��Փ�B��&�Q�e;��{-�sx�Vqe�l��3muh����CQ-~��oA�W�WP�(>����l����$zMλ�����^�T����c���_Rw��oڷ�9�4�E���ͯ�=���V$*P"d�q�Q��k絮�]����B[*�op�|rٰ]u_Q�mүAvD������u�.+)3���}�-}�|��ۉR%;��?���?���Nu��^� �O��^bg�u6�s��"�Q��"�u��x_��}^���+^)�|E���<(�����5�c�'��t#�Hλ�|?���W���Y���2�_O�#���7�&��rJ�ϟn>צ�ﴯ���5�d��Iw��a-����U�n3�1����{��%�C�{�~�-\������A��b�\C�o�����V$���=�]g��ey��Ze�3s�0U����G���|�Z�CV�5ۨ�@Sc��50;[J9�S��q!ͱ?�;P��yj��Is��`�US蝹�q�d3��-�.�J��V��[ϛ��?���Y��9-���z �$�J����Q��ib��1����x�>�~�� �SGܜb�_۰}Ɵ[h%��P��)�A(����C�xG (K���}_�(E��^�����/���tK[p�2?K~�Hs�R�������� ˍx�w_��;|�J�ʜ���N�N��-����N����i��Lz�c���w�����7B��~%㕊��`�\������Z�7U\N ��늓(��*N�����_Q&�g �/����n��*fH�G�9�0���R����l��$��SJIN)��$kM�"�-6>*/�^{�K6�ݾ�����k�{�s�qߐ��u��֒3����c8��F�X��P�{z�z`�;ީ[<��������y_D�[8�ځ:�Z�꼌5L]!cE� PbDwבu�<�2�W�����_�dOs������y�$M�g{��xh��4���?>��D�⡳jjG�2�ṛz��H,C~&?��x�2Q��Ӻ���P��@Ѵ'��v�>�:`���0x,']�4������wٓ�WpV�|����g�d2�P�5v�9�jwd�4���v���Y;�Y�F^-�u?��;�� wr�p#�����qM�۱M�g��p��2��:m��d��x���h�G�O�;G�P��BU8G�$s�rf�*��M�F6|TuYl�/&�Ve����kZ�-3�eQL��3�}�.���.1x�fq�ge���]-Q���Q��x�A��g���c��(��t�\��W���ƿ�H�^Px��@���w��՝�-�z�� %���d�s��#���[��I�ї�~�t���C�fc�IY��D�Db����ʨ��i���I�3O6~��IM�BH*3V4c��6y�<�te������!o�d1��N�[����9u���22`��0aY�˚��Xg~�;�;s9P~l�Gnt�GL�G��"��DcɆ�[W�)Y���fen'"�2w�����͵?���+`�z��`ݻ�FoM��z]�4������S�����˷�=��ܬ�-~�+!kC��q�K�Y\j���/ԧTH�M��qNf ̎��]��ݎz/�PBy+}��G�[�Oty�)}ґ�im[r-B�rgCa��^��ް��)�b՜���<�r!���.��r3��D��v��ɧjXϜ�c����(��2�y�W5�.�hT E����\��;v=b_�*��o���+��)[�h�����Us�@��Fnڕ��ק<vJX}�����n#Z4#$A������HN=�׳�o�mp��$C���u��Z��p��=�6�R���vjB0�*&��5)�顎��T�$%1�s���6M ��FQ��Z^�&l�r�W��0Ķ��L_כ2p�n͏���ˋ������"ȅ�5}�F�}nwB�ٙ �D��.?�� 9��*61!��������Sb�z�C"0-H���,���5�^���c�3N�j��Z�*�����pfBz T�$eo*��ա0t�i9J�p�VM��N�(f�v��}*�M���� j��c<�I8�� wy�WcIOSM�F�3����j�Ĵ��d��ݨ��}��l�^d���Zͤ#5�VW�1M��e�h`�h!U,�%LJa315 ��sp����n������+4�]�� /�������@����҃ �� �b��d��f}^�\��4Q�ɒ��6�u@����%^��m���A�����F���h����Ëp~�� ��H�Q����nb�w3#O&��7Ū�3w�|�elPhddज���K ��7�,M(�~~��Ø�pfH@z��'l�US\x�qdD�QR�� &z�]�Ɏ�&[��|�4=B�}3As�ߩٱ�^��]�)8�Y���/���C D!��=o�e���|dzuN������ZQ��� #�&��S�!��0�Ɍ��ۧ��6��J�nL�ņ�2�a��qW�� ֮\M���O��F�G�Rra�\��wr~>c4�g����(�#�0y��>��,o� #ӣ-;.�?�75'{.}ڻ_�Y�������q��M���B$�GZ}u����n��z^)c#�����)���d��ӝ���a.��.�e1k&c� �w,���[n}X��蓕�ibMcr|�ҹq:8�+��pM��E�d����/�a$�� �⿋�������W�oE{&�b���u��4�4��l4�g��I�Pdz+���Q��QFQ�Q�n���`�Dl�V��y��Ґ�`�D��˰C�o5 ��ήT�힡�T�V�D�Ig;��d��gaYNTij�"�-�l�1���Pe��j�~��|mq� `d���|U����Y ��� v�iæ� PǺ�x��%u�� oי��Ђ�����Z G�,=�N�]䕺�De�^GnP���$H����V���>� mJ�[��6��iż���`�t6�5�_Ȟ'-{h�nCKF�w?�8����ͰS�Q�����3A]����^$�b��Q��F�~�uw_/k�x$Y��-��p@�BH��(7j��!��>=�q��h��JVCO�ku���Bl8���\��_�O;@�>T������Sp@�7��6�8e������ )b��?��Ң ���6ݮ7P6ݺ�1�tsӰd.�9w �ч'��*�C"r��*p��Zեc�N��(��� ��1�UyJ̰��#�6���#��0�vP1A����d�E�%���o��Q����{[־3�v�9X36`|��t@�d�"D\Y=B�!�g��&�2�]��v�b�T��S o�q=}n_R�]n�-n�!D}B0�z�1;��(�Ak�xCSz�G7��^�ڗЅ'y�}A�9��V�o��<�$ P��h���0V{Ru�'r������dn�(�e�еD \�']�'"X4�X:Ƈ|��B�k�i�y���21���ڀ$�Y�k-�� {��3�!��2.$�����b��A�&ߪ��p6�j)J90��qtN#Տ�=_�N}O�^9}?B�R%r���dnOZ����G�j���-T)i} ��T�ꬾr1<��@�U���M̷��W�����%���8���LIs� ��27:�t����S�v�&DUJ�I��;��Y}5ٚ�V���ŗ��K OC�CZ�0h,Ba�r�-��')p���})�9h�N�J`�4��j�e���FAP��u��݅���w�[ľF4� 1�z:�W+0�D���\Y��8�k:6ͫ�6�ʡi���E���4sJЫ@<� ���pM�Uv����uqr`L'����;pV��Qԫ���l���.v(.2���٪}��W�m��F�B�d\8�,,��������aR_�*�v����/�œ�ʣg��v5bYx�0���d��*�P�/�z��0DQ�F�p%�>�Ə�� Ʃ%ZԔJ�4K���^h�X�,R�R��Ca�p-�v��n�uo�'T�ȁ:�a���kY��%KO���l����㩢�j�ɞ����Nqj�����3�yCcw�9X�m�8���������B�|x��&(%4�G}#N� �ƇRو�Ӛ�_g��'�p�zxpX�Ŷ"��~��ͧ��Za?��%�ׂ~�Z.8���Kdb��$y{�]k���V�x��_ ��e�F@�:,����5ۭ[���>V���=G��N��-���%�2��m��^v���ݱ��_J~$*)��b���Q�D������E�菉�%�%�VO����H�z���f��q ��X�^d��yx�� �lx���oy��d�`�r�be�բ�E�"1����/�?,��x��O��W��}�V�?�h��\���7*�C�ZF�z9{�V�� !Vo��7"�g��5KK̠�kݠT��4-���|[��ZP���ںX.ܪB>�,��~3MXH��8b;k��!kId.~ �o�8�3 $�p��{9����J����}x��G(\Ec�t���A$�[���$9ϫWt8�ٵ���cE���KU&�h�:��( �����9�f�TY��S��:ņ�oܴ�����f'�;_���1�$��M����a,&h��`�d�j,��ꇂ&mtt �"��������* @�#�3��X�$���#s�(ЀAj�+*����`-r�ݑ��k��k�:p�<�LJ@ne4� Zu�n���r9���"z��6��I�]Yj�;7P�s,-yF��jW?��wƗ�_�H~%f�+\��\cZ�T��J��9�H��D�)5�LN���;�ж�3韩�#�3d�=���US��UW�Uj0���9P¥�M�\n�K��MnI"H�f��y�8�k7�q�%�3���|c�QS +�6�R�FJ�9c�٬TSj[�(j��#Gl�w�����[���u0�[µk�7 �l�^��n���� ϰ���y���l��;��c�QqZ�}_�#e��mᵷ��)�v��{yj�C�j��w�k�Å�:�χ�ܳ���΄&d��E��Vƨ��2���mP@Բ��΄���R}E��k����S�<i$�I���Ԙ�e_�$y*k��5�築�R�O)\���H��8�̻Z}%����V0�HC��������2�F-�?�HDVj5 �#lL�+6}�6�k�j��Ѓ\l��}<�B�����A䑬�>�o0��ѾE�.*��j�ޜh����^��_�����r�j����ד��Z�p� �J����T�]���s��<(��6N��]v �������t�m~����i����K0�P�[�����v%�v�0mj@ש�(� ��Ї�� n��><��6�']�Q��yY���-y�숰p�m�BZ[w�;<O9ך�v厕Z2���a���C�{��8�7�f+�J�չѸ��d|��A�����>�a�\3�<�Dl�@�-M�E�@��JZ�io�E*=�IZ�zY���w|�A�#y��`!���U�,J������7)AM=��$GqCo�����鲁��ljr{���Hl��1B���e|�r�$bJD*��'Sg���蘖�9�6�h����X�E1����^7Ѳ��}��3�����J��(b��+Q��)6Me�_����W��:`j"!0�SN�a�Ty��3���G�T���v���l2��c�pS>��c��Ǎg�z �a���mTJ.�|�G���#�^�ھ��4�ܮ����h��3��k�������SO���kK�z��p ��N�T� ����k��n�i�b���.����O��o���X4�a�0�)Nr�+�#xQ��7\��ǜW��>�(Y�a)9��5_�� ����@�%C�p��O�7���"���?��y�:�yJb�a�mK�H�0�]H�cZ���a?����H0<A��nq��n'���=��CxZ�ƆG���ؚ��H� ���r�� z]�[,Z��#?�e��k�ȇM�$'�����Dtx�v@��/��������/��'zk��\�4n�ߦ�}����|��ըl�&2��'c�q=Lu�U��hui�:�fpt���{�s�%R5�d }��![Q·hy(�@=@Ts�k��R�0E�n��2,)/m� �����8���hRC����H�$Q�D��� �c�2��2�4�ffet����fKs]��4�v�?0LZn[������#�����5������5N�܍&ڻ���M��w��"�Ӆ����I�����zh�$��-�T��F�@c�g��A9��H m1 � �����)�.�o���V���d�l�`,���q��\& 5��V�+�D�`L�+����)�J|�+T��T�h���E^`=�ָ�R \A@G�=%��Z�����EZ%I.E�R/V$S�ЅoL��QDT,�S�!��D�/M���!���n�jN�2f�o��"V�jq#\/��`��"rKc˞ Y��JIQIM'�1�f�+vH�$�d�+͒v<�p)��L�$a;Oʪ�dƤN#1�81M��!�l�8K[aX �%tV���:�3�&�U䦁)�*��L����� mms��D\|�����(��D Zt0c���̕���&uz<�"@�͢$+���e���(Ɋ��L�v\��(N�,/ʪnڮ�i^�m?NG Qh�'Id �F&�����H,��� �J������l������������#(�$E3,��$+���e;��a'i�eU7m��4/��u?����dيUk.��k������?�&��D_�1*�F���)���{������hq!N�|�+�]����Ã���p� �!LKڎ���´�� q��i�� q��´�� q��k�!LKڎ��ڠ-l86"""""""n�13333333+��RJ)��R�TX�1�0-i;�H<���w=~>l���v�`�%����֚�ěٺߎ�]�����̼�GYR�f��g+�/���~�Ο�3�� I-8Y%�?I�J��OBd���=#nT����i߰Z�'�D"�ҒYe4����"�E�唡y4B�&8�ĕQ��H����ߤ�'��;�`DI�b�U�a-\Pex����楫�W.7�N�l��;��[�8��b��Nf�h~�` �uTv�l�/6�V���(�i� �?�ë�(g����/V��[�Q����$\��]��\�H���Q��9݅���>�OG�YYG��z#Ր�z�[�u�Ӣ�"�5�h;:z��k�����.zt�D��x�-|�{Rd�)j�S�}��fT��!ް9�0����6n z�ctl��]=��<�8�cux���=��_2/�xUH�-:�)���%�6L*fI���#�\P��߱%p4Ortheme-joomla/assets/fonts/opensans-684814b4.woff2000064400000044320151666572130015374 0ustar00wOF2H��Hg|� �h`?STAT^�(�| � ����+�26$�` �x���zpgOn�or�x�6|��6�~����2ƶ��jU���0'��R������|�W��RHE�\G�"�D7d�p)���h�R�O8�N|p�`�2�N���7W��7�g�O���6k��s���A��0�ɻ�W�O0~��0Q_�fѿA�Z��$� ��v��1 �!8ZD��B�-@��G�1{�=�+���k!�7<x�%I�lj#��XG�����3�9g��8�uFVF���P)�f�ee��Yw�-d�3o/7�1&��N��]A�$ �breg�H�� Ů ��p�uCl��݆�_k�Nh�����n�ixb�N�\��p���֧�οh�tЪ�{1���˖�����Lb;K����)�����o��pѧL�s%Z#�@�4V���]��fD�G��B�)e����Q_�)ɒ-�(�^�(}��=e�<vX^�ZE� X���x/~�As�m���WB��L���9��hMR�!f��A>�и@�� ܩvF�3]93�6����� ��'�;)~�9@�r�LѣӽR}�2��Q�<^<�"�F�dڌ���+S�t �K���}gɷ8Y~}�xd*e �t�bwv��b��<G�͂G�<G2uq �z��!�O����>�H.rAb+W�8�W�Rfl�� 2���T��˔�|�,�PKI���`a}ko�ټ}W%�W������M��Y�x�9!�HQ=����L-ED�x�o#�`�u� ���#�q�{YƦ����F�� �<�����$k��)A��L-P��4Ro�:j�=�>'�˽�(>�����qP����/���{R ~|���E�h�C�PUV�JYf>��9ienJ�E�`���3�gd� w�/(d�P�%�Xg$x�iR�P�� ���Ç�@N��bn3��˂�L�c��9�A����Xi���TCՓv��HJ�*(�t�ҲbC�~$G4�K�%M�M~J����2Ch �E3Ժ�V=��@��2�0Ɇ(�v��~#�+NYVH.��m�=Ԭb�@Cic��n�d1 �H�K|���J5��7kz��� bzMu_����j[[CK��6���6��մ���w���em�"�e���k��}�������՜OS��@ֲ���@�қ�4�!�ѧ(9IːHb����+U������Viٲ�����y�-�}��e��)�>�xޓ���lp�u�s��\�,� �w_�v(�"h �.hx�l{�.YP O�3��8�~a,�;��>~Ի���9F��Ķ�W��kV�T/�2ZO����M�62��!�ZB��P*M���i�P���KTM����S1VPW�0ږ)K����@ɪ�O�4����V*��!��e2g�d@���p��,_YÑ��w���{َ��<�j9�=;��l`���P��i~XE�(�O�2|�Ɣ?3cUv���Tt�{���{4@��(7�4��>a��U}a\d�_��� �v{�;�'�ii��M�~��Z�h?�>�4�I���6P&t���R���<���+'���HV!d7r;&�qd��m(=:�}��Ѣ�"��*���sZ=���9�7*�VO��Ι��r�e�oX�Q���o}�FU�?@Q�����J�1� ��O�mr] ��z}kb���)����*��VN���*(�@� ��To4-���{��]m�ᙸ"W��� N�����Rp����A�j�m&�P�zK���'�'N9o��Y��u 4���ñ��\��e୪%���px�S������ ��pG��"p�Ul���LAQ��l��� ��a�y\�~���z��Q�L�~�p%m0�����9��:���ɡ��'���V����;�c~.�T�e�@�ID~��� N���������V��`i��M�2�M�� C�*I�܃�B�o��@�%��P�o�t��p�Ѳ�c���^n!%�$����[�j�Z�|�dtޛV-#2o�{���h ^L�J��!���]Y�T�|=q�I� 6DFIŭ� �_rk��$�����}L���1UB��F�?��/Eـ4*u� ���� ��s�Z����@%#�C��{�A��=�R�sC��O,��p�[��]��{�r.C�XȦ����CsRC�K�; ��t K�ƶ@���MR��Z��!����'���Q��_�3wQ�<=�FI3Kj��@�AF.��<�$����%g?�6�B`�OtE�uׄa�V��v*����"�J�W��>����%�f�r�"� ��'�a��� 8 �U ��z�����{G^�vZ�|����O@��o=��p�U+��7�����x@�3^"X�ަ���$՚kD�9V�"�k���-� ���Aݮ�1^l��RK�X�~���^����ʬ�7Q��{g�ʈe�j���`�@�$���4�^ok4��&�l����X6ϵ�J5�`�#^������^m��fX�o{�w*�6ռ Re��F����邫+�t��9�"�hi�뚴� �u�ښ�J���\YVZ�(.����rs��2��H(�g��i6�ɠ�R�2��L����,~���J~�9��;G�N�� �-A���]���� 4�lmVĕ�;M*��>�t� F���̂�������u��L�,���FC{�@{5�#R�N��էu-[��)��g4-vkAr�}bQX+�(�2�E�d�����A�n|7�$�6)a?��T�ȉ`K^���8�:��;�64>��/����UA=��h�ٻZ�� ���/����Ol �"���S��BEQ�Y���c�u��a*���S^"����!�S�2��#�n6ܔ\��m�ps ���@8[{vb�#}�Ϩ�V'��Pտ�@�5�6��̡��O��=~��_ �#3��/�������5�s\]`.���Zj�V�!˲��Hv��\E� �AO\�ޠ�8��6Or���Ӓ%r����1�dT�7|����H[��X&{Kn��^��k��s"�`����kgX1{�`Y"&r�=QO��~��#��{?UO6q:��8� nq�*�%��н�!rh��q]'uc|%�U��`�6k�(�7��ک[H��Sq�#�F���{�M?�l�Sj�.����ΪN��2G�5~u�b�Z8 O��L\k�$�eԴ�Z�%�{��j� �l�B��"�O���ix)`xQ :�ۤ�2�qe.�Ib1���ǭ��̘�a��Zy�qa�v<���}& tIt�&���zR����Wk�w���odpQ㲷ݦ�0M��C�C:�z�L �e�?֤����xp���4b�1�-qբE�:��|0#�C��:Fsjy���7:\�7,���QjqR=�Swé5��-�o��9�j)��T�K�V�g���n9�!f�4�x6�U���wY~�r%��n�K�3�T���,*�a9���\ :�you6�S��ۉZFX=��;+�D������e-�kv@���$���H7�d�2o�iZ~o�±b�|�\�.N/D�v���G�zf��7�ֵ8�^˼Gh:aiC�jA; �p�%E�Bf����89�Z�*<.�/�%�"@������e5s� 4�9H��B�Rΰhxڴ�h5>��-��I��t�v�� ���e5�=<� Z�L�����3�|t52z��zDK�X�"��kg�Cݡ4<jV�E�l�o!��6�6,��e�zq7�{��8�e���/�oh"tJ\f�|��Y��#V�:���>0Dx����n���M���V� �)��ޠ���z�G�&6l�h�MP��+�O�h�n�:z��nR�~�.�2�kW �楩-M���ʿ_އS�R��va��tk��N�b�`���+r��K�Y�:Ė�'�2eUю#8# �7�F�p�C!>[�/nV��d�jjeh� ă� :�!8{���'!nk�V�{��r0����ڄ�9rd��Q�P��8��*��MH��'�V��mk��E�纠��"o�Ub�O$1�'˓�wa�o��;�%s�u��X��;fa�5;>�����O��}�J�q�^����� q�w\������ŋ��B[A�#x���l(�EF���KK�u���e�Jv�ys��qN�#�Hi�T��\���8[V��f��:_yS"��k|�E��Y��K��X����&��/�`��p���'Y�d�u��m�b�������G^ ����1�xۍ���M/�ح8�J�];$� 0��i�!k+���?�����w�����=(�˓VN�ȝ�������ٰ�>}�L�8�qy�4a�0��<��rJk�`+��o\�� i�H^(�g�;0b��:�K�?�80 �v)�#�S��%�3��L�b2��ӳX��ph�%l�eY(mAcQ�� ���ĉ8��?������Z`�/A8��04�w��d�%�s]!0���Ei�IJ�/��s�酑B����K�.��(��ץ��Y���{����*��}��9�+ܶ� ��a�k��^^^��ad=Ջ8w�P�����V�&:��p/ag�)'�?��2�!ʢC�2_��E��s��xH�ܨ�ʖ�tU,UW.�+E>s��=�%rI�-� ��0h��hb�$�.f�X�8��*7�^�w$�(�5�z��)$�>k�"���m&�\*�]��Bq �G���Y�<��o�夣�f�i��9�F:��z�E�����w�>}<l��`8�h���N��i8: :Iԝ��Z2\�֕�e�ߛGw�kR�/�<��0#�a����&R���"J�Š^�缼����o��@�kM�?��Z#7��%�^�1�p�"2v/3�f8p�R��H���Q�b���8�h��Mj$y#a�i�gWg���{��n�-nS�^����n/��bW�da@�9;��L3��n��� K��O�cxyhy�X*"��R�)����F2���x�#D��Z�`a�N�^�m�X�x ��+e��8�:��0�g������� �F���\��0��ڳ'���Q��(�y%-�Z��4�4�g}� g��(#���?��mj8MjxM�2���z8t�b�'��#�Q�-*^�QɒR�Y�ܼE_�zijN/�ηZMj�x�ld.��ރTѭf�'�DUTsd���t��� :��X��/�6C6W�ql����u!��^b9?�}.h5c�C �'���~�*�?U�j�\�wh��B�A��'/=/�Yf��'0�� ��V��q��ɱ�OduOH=��1p�!�^�6cr���y�����R�����o�v>��-gz)G��u��X��vp�Pg�LY����u.���kXײ3��~et虠��s)�4����Q W2DxF�qZ���Bc�W�2`���܃�TP�:�9����5,�?-D�2|�Zd)xC!�*~��N*h�c[�v�&�1�`��$�#�7^;ġZC��=�9D�'Q���L5R�R3Yo�}\���+�2[�8pPؕ3�#��"$�u Ik\��F��Yg�.z�H$t��6�j<A h���Py �C���9��$�Ľ�dǎ �)ɢ����V94��Og =���|pY2��\���/�n8�-f��ȓ笇���K�0�=��̞Y�9l�OgWe��A��p�ج>���4��ms�\�YlՑ-7I�i�R@�ڏ:%4�!ϴTW&��3��7�C�}M�%�Act��K;MY���,�h��Y2f�vk���O����Dq��͜�n�Ŏ7{��>��솧+�K,c9���K�R�c�4p��d@v�?���&ڋ��ͧ����V�w�+�ʗ�q��}̟��x�0E{��y�!_%g�.����o^�\��:�e8�����m�U��=B�+�$e�T��y��k��c�"�%�)�n� ��������RF<�!�Ќq����2襷�߲�ѝe�x�JnhPOE�F��X�m�'�3 @��Q�?�r~�z7�A4�Oמb�iX�g�r�G��mU�Н��]l�D<!��rႇQ)=/z���Y! �͂ ɬM=M)�A7.j���wu��Iܤr��}��;DAc|��cxBd�.Y�8"��e*��}dƳ��2*�#�p�7zF�T4���GΞ�77���Q-]�&4��4Ⱥ�Kx�CS=O�<>��YB$�N�)=ȝѐ�_;;U�ȍ�(�?�x�Dqm��6��wu���g-�8�[%�R^�ɧ'�쒩_}BK;?�l:j4�𐌋k�y�7�5mZ7��A�)�}F-�BT�c�鋑[,a\�����1 �J��I V�O�~��'��# �<Ȥ���ԡ���r���rT0,Q�߱�@�-�\ǰH�|,+�ɓ0�[;O�$�p�4� �oK��K�T.�dv�eG�5ˣU��S�m�P<��3�� ���M�'�5�� ^>Q2�K���� RxCWO���6O"�l���>�M���5:��di���K���j��k���z6@�=3)䙕���Q�Nu�K���`"@H9�c�w�ӏB]�ÊKe1#�w�ԑaE<ۙ���"�c�9��\�I���d7%�����4R|�7"Q�S'�_D���LE�?�\�~�F��GF�� x2"�tuZ]����� .TuH�6�X��(�B�2;����-l�aX����ն�D�ף�v� C�`q���e��w�����6kϊ8m�����r�z�`�Bَ��з��+\~c^s�ϋ��U�h���QnUwZ�[rB"H� {h�1�����禟��~�0~7�bR&��(3L6sfj�1eȌX]�=Q��~���q�g� � ���V&g�{&wCݐ��Y���F��M��t˜5e������V���-�+;7�%GR{*��X����.3eS߶�=��"Z�H���L:&�uK0�Dġ2�))���.]& f�7�-3| ���ͩ:h8m���!TLHT?���{�lm"&P0W5"�k�E�E'4�I��V�|PHۀ5gHg{��|�g�a�J�x���H58�+�v.��O�M��n�n��{e'1fe�!�:�}fm��/��6���H|<�GF°H���n˵��.k�0K���ݔ�׳G�1��J�x�2?�h)���ͭ��ͥ��z䎍�m�Je[+��������J�����v�3͝�svm��2�p2�SZ)��-�s��+�����ݐ������N�9����z��_�ϖ_� g�y�}��vqf��mow�z�V�U�U���A x9����)��훛 �y������7s�^h^�7�,����y�u ��:Ӌ�ʳm�O.�.���?@���0��ޥ�}N�b�sO�H�c\����D���tp��`H��GU�-����B筳�މ�a��3y��]���U=��L�a�ox��s��D_v_*S��@[��*<h7D��5t���q�o�_��+M��3iPa�@!ט]�Zz$6�*(�����w��D��B+_Q����^2b844nP�(�\��i`+�.6�L%T�LCNQ@Tl>��_�a%�� �~.� 4P���O>:$t���{#a���O��.w�����/3uG���Տ�-�&�s�� fO������)b�D>qމ�o�L��Qf�Ι濸{�&��� �X�=�c��;-��^���+�Z)�V�-�-�>�\}���+���x���2E1���Yx *#ß��鋫������̠�Ѫ��L�Er2 dz=xH��:> f�L�E��n�e��A+\���.,*�%�@h���Ó�g�n_P��'�v:�nq�&����Yآ����]��E'���&n��oT���j��g�M?rVVYߝWa�~��^B^<E@����kD��9��m[��څ��I� ���]>��Oj w�ӓ ��2\p�[@;��G���Ts 7�Vl�Gg�(Zj� �n;�u?۫�������/���!-�Xq� �4EW�KmN~�q��c�l�ӽ���Mб~�gf����-S����ldu�8~��2�m���5�>2�\�������[�����3q��K�Q6]��w��n����?�O������_|Xb������a����L��__�����.gu�<��`�l8 ؆+ZPl�&��Cdg�A�>c��d+���[f��e3����w$���Y,J���~x_�c�.mC��U{�X� �v��^�?�~9g�}�/�K��h�ey�5��n�L⇷���-�$b�/ҋ��kVˆ-�(�!7��WS��+�O�Sh���2������gLJ�s�N��x�75��/o� �7ȿ�_��9k�-/o斺��CKIs�J���`�asI��n�?�V�~��pe?�I�o�d��赕�x�ծr־1��`��# Ϝ�ᥡ� ��Ic�i���S�mX�\<���Q�i��$JU<O+�Q��C�M��.�8+��S�2��U\ NGi>��"QC6����U5�.˄��f�pk=pÉ9�������rf�'�����_j����+W��5�Gk3��[rɺH�����xd��]����{�ס����l'�P�)�+����'3���˦��<�v:�����uM���X���ڍ�fOK�8zV�g��:��dhZ���K'O� ń���<Ou/����0練n���¢�1t����������V?��K?�m��ݐ���.kvǫ�WF� {�^*�%^�M_����cF�մY�l��Jh��6���2�8;��3.�^8�e��,�6@����*�X��:e��*U���}#4$����D��[Vk+��tQ���G�\Ҝ�حG�=����_vyW�{��Ck��o��l�~ª;�=6wڞ��zs��#H�S��*͟����ʔ:�c kw҂�����z�ICf���_����t�'�;�w����!�1Ҫp���K��[�ѵ�ȶE�����߬���捁[�y�&��)�Wz�)�Aܛ >�8�UC㟫GU��vZ�#s��q��_��������R;sv?�$I� �z���3��;�o�~��!c�֨tEУ�\ gw�Y����su^c��������c��]��6�Cr�:�|�dX�?��غ��M�$`���3䢐�tl�I�-K�V��5U����u�K��z������Y���cg�j[� �6�}��H4�{�b��zx��!��H���/� ��(���5;����]����Bp�,Z�9g �.{�TyM�UW�5�>i^:a�aV�Oݻ=vE_�+=س��3~%=�";>��)=~�g&6�ﳱ�J��'h&�M�� 8[p��T��m\B���шM`!M$l���4OPU�kT����e��Ǻ������>�:�yc���7^ׄ?c�+�9��!,��xR��"L��Ni]xa���\[��OՅ'v��s��75�t �vf�s[�0�.|�ľ�걿En[e*����@���jۚ�sCI���:��L\ޑ�Zؤ�{��|y����M�!A��䭫�{�h+/Ly7�ΡN�w^�R���<��=����-� ��{1>ǣ��|zHN�ʇ��h�������Y�P�\�ݵן���`"cњ�\h.��`�y:(9ۧo��q�lcc�0s��6��0-Z�'�����V��6�)�P�v��[h�=y������OZҢ��<��~p�F�����\1?�-y:]0��/h������b^;�\OoV�t�H���(w��[���4ڑ�����ߕ�&�[�\�v��]*�r��\�v=�3?U��~&�LԙS���ҏ5�~�@a�ս�#^���^��dg�z�aɶz�绑��tM�^O��Nj�~Sq��<NckKQWaD2<�ȟ��)��¬�%����I����5ENv �<M~$.�-�'��+.k���m'm��a���4rG�b'�F������5��xQ�<�O+�g�3���BLAV�Q�W�������a�L���$d�'B�{�$h�N}?WŒ^&�?�nnF'��#��C0�)���8us'֞��U��gz�I�z3�y-�ό*}�Ն[�;Wk�_��g}��P�s�9��u�B(�7A�?�U����?��_��p܇�6��(5�������ud�~R�ʡ���ަ߬�bPJ�c����ܱ#H�FA+Q��t^��� ( S��֜�kiwP�'�kk�T��D�-�I 9%��L�Փ?V�]��ZX�$�',�;��@� �l�8���6?u�v�Y_���`�)PN1��v�(�+��J4�Xd`be\68lJc(�2��>̐3:>�w�t��?�%%�� �_�G�.G�e�AS�]Go��"�"BL<��Ty#{:�E$B�S"`(hx}x��3($�>�<q���Ȩkr3GFJ6n(w9R� n�ܸ��]��ֱr�� WzH=��;���i�(���!^����Y����Wٝ�_�g�E�¯f��7調�m*R_�Ʀ�D��X���[(,��l8���I�(���LjQc��}7Z&�d�h��!�[�-Q�X]���r���KR�� �1X��-�V{$Pc9�_��f��aj��՞�\�1 )\�����s8g!��~�\g�z;k`_ғ��i�=�L���� ���Ai�T�d��9R��'�;�\l�L�R�G�Ѳo>gҹ9>�0L ��J��v$�i�Jp1�J*qjt��K̃�&��˿�5q�H�RO�-Q�UXP�R��F��pru�Z&ab��$�8(�{� �V�:#p�MG(��$�hqQDb�Ǡ���Z�L���X�[6��f�6_�6�v K�h_��-ŀ�����%�/R�!�uI�ӕ�E/.�A��^R��RY�zS�Q�X�5oA��`���]��Ā�����]�S�B�c��c��}�KS橥~i'#e/���_��+����W���A%�K�%Vby�O�`y�S�3yZ�|Z3���'P/�)\o���ћُ�j(k�Bn��gS��$B(��=Մ�F!�ej`��]�A���B'��9����L�� /�Ϩ�و~&>�]�#7ynTa}�w#�*U� ?ߢ�2,�Ug���X����߷����3���lDڒ�ʵ��I��(��2�U�����=#����V?v�����q����QHW�������՝Š_��>��J��+���ׇ.�e�5��<��ߗ��/um�M����/���ߏ���_n�?�-V���D*� D�,�@�)ih잙�,�i������%�hFV���f����i{-�O �4�_m�?��9���{�iζ '���#���9m���G��:=Ai/J07&�.�S�oI�%e��_�0�@�}k�7/��c�$��S��8T� A O˗ƪX%B�$�Tڳ[<�@��b�s3���6��-��b�p�����LeJ}%�?a�hS�]'56���\��]�=%J�?S�� 0'��E����� �͑��,�O�C,.�/�Ƨw�N5o9n�ܡ)�3���#5$蕨�ƱthvT�\NZ���sVK+�"y:?�#��#����8i{h' �g��)�/[����H�Ukr�M��� 8~Fm��`�[���ފ�UFJ��(�-��u�ǰ�K�L7'����@��"�����f߹����ja��SnW���w�Ч���{���nP���L�]���q����V�ɒ&sKko�5�Ϳ��R%M D�(��T����d�W�́w��t} 0.�ѫ����R�osc�)DH�O��g��~}`e��YHwY� `4�gl��5����l�MG�w�^/�5gc��87�$67�Ϣ����֥6Q�N����K����x�Y���D�������:U�t{��q�Z�ʔ�ޢy��X�0$5��C;�+�}T��J��_�i|���oײ���}�5qJ���{��<��^'�\gf��C�9�ލ=�)��0h�;��+g���|:�K� s]U��9ii�٬2W����v2I���v�rާ��9��\ZS��]]�)n���I���K���4��D��%�%�WGSw�����P�7��&Ӯ\�.��l�&��`/���,Uq�vc���N"܌6�$W;Q����� k�Zf�!V��Իj*�]֜]yK�s6��˚���/�jeqU�G�݂\ނ�Ș_�L <��<�ȁ��3�_x7z�]59n�_s�2IXbb-�秱��$�9Y���M���@�)[�i��]�6���_���2gh�\�b~]랿����;���o��1h�����c�#--�]]�[ޮ=�Z)��HW�G �����_h���5>Q;dmt��w��㫖`��{˗#oF�߫>�f!����{-��q3�y�9���K� ?XOִf�6lt�qio�����gz�����宆��1l�YCI.Vp2�r^Ne��> �H��O��'r����v����B�R}% v�Dk��5�PD�䐒��q�4�X9��/�T �CMKgS�TO�GM��e'��B���%�%}�q:��T��r�ﰈL�| *Ŷ����T?g�օ�����G�Q�����Hd ��H"5�` ��=O����2�Y�]Z8F�Kؕ���j�pq�Í����W�#>����Z���� 2�c�S�1{����Vey[����kɷ�Y���2u7�ȭm$���͙kʃ���X�K ��p�t����ddJ$.��%푠/5m�9zJ�7��%[����`%��X���z>��0��"j�P�dIx� �?1P̆9f���h_�^* 2�c����ו&klٟ"ۭY�V��s[�ZD���`~xy����)chԳi��&U^2�:��;\��r���H2+��2����k��ʯ��ϼ��y�ӛ�St �O`�L5�K���/7�~a]��{3���֡/^�J���&ei�^�� ,A5�餔ʹ���ٛy:D�['T:��=Cs�p����8gGK���J��t`���N|<� t���>� &��W���m�H/����k1A�)U|ѧ��B�*�$Jq;W�w�142��]�䭢� (}�� SI�$�%�a"e��tp�#�l�z�xxH�d9'yCe/r��p��f �㽀��7��c{���쁦I��r���?�7��G-(�џ�P��Ax'����W`y���#�� ͟ZFZ��"z�1��q�2e{*ƴ\&�zp6��D�酠�_�A�����c�}s�7�~{J�'�[�&�k[������co�6=bz�:t���~�/D�\�uE�I�v�ۀ$3����b�?�xd��W�[#E�LAS�阺+�P0��[�&8Ք�o�Qg"���r^����R�H���'�jV�O��N^4�����gu���\��k]��{������);������Ahy^q��{���|��x�I.�?P���|�|�7&���X%=0��S��%�њ��?UH�� W uI���O��������66��VҜ��������%N�Yd�C����+4�5��Y˨���&�1*��D>B5�1�V%���|渙:�����=����s# �^�Nn� ���,h����: ly�B��� �=�9&�uB�J ~�:�A+5� E0 J��SMIˎT����m�7v�nyڕ�"G'��גݳ�i.�>�E�Tg��ɞ*��r�n9���N�s��s�ݵ�;���څ�/�q��%�C�Q-�����5 ,�e%��;���e�5h�\����w-�������%��6��Qw��x����Y\8h��z�����,�U4 �+�������Yԛv�V�d�JY�� l���^��j�.��=E�)�Oj���0 �]�\����98�����vx�z}8�v���aշh��o@���c�8bԭ��a��*�����W�z�V{���3 ڣ�nM��ZR���DG씸�щƬ$�i;_���:D� Sdw i��c��a8� ;���(0�M�K�t�|L��E9�nc�m62���Z<�8i�\ KM/h��q�fmI�)3��n�هgE�$��(fl��y��(��Ղl�F�8vv�$a8��ֲTN"R�U�6�o�f�Hf3P�E.�NY��i���R� (R�ѴrT1��c�*+�����%��%��� E�:��z�@�P�hc�&$�::#����tmI��qJzs�����u�gI�/�8�.��̥-2�`���>ejɠXr *ƻ��u]��-�f׀����qa)����kFi�����2�i ��#;�1��3��g���%�L�Js��J��a4��ٲ#�Ǖ��ȏé/�M�Aj[�iPڕ��j���3q�仈��A��+��4��WyKJ��|�}���z�X�!�����Si*� �Ogh��k��V��[I�f��+X"=n�r:��=Zi�B�x��� U;�>Y�(�� #u| O���4ڌ1��Y��1\� �z:{Y�Ic��N�I�n�����hP��a6� �d���²b8����~��x�v�bdk�@�"���d�vá;�j�4�h7�Q�� "`�4�� 1<�����cGq�����^��3�&��&%��Q6{����^�/�X��*��V��7�0��E�Ǒ��� �ZѦ댙ì�ԁX04no#C��X,:��W�;l�h��� �����z�($���nӟ��`e��b)fd%)��ՙU�1���1zQ��v�Ѱ��U�)?̴�kQ�>I�a�H���=��6%x�ʅӞN����]ڻP��KM�����m�4�t;��>ÔYH���`8��h�:h�ʁ��a�RyغV���-�(�\ˌEa�tL�ۍ�a�\I�\�"A>Ax�<m�f�zO�#1�� ,�1�fM�A'T�~ʾ�0],s=9`m�La�9�j4�� ����/mg�ML�H�k(ֶ'�Vܖ�-�@x�z1� �W�,<��h��)��ۛQr��u��(�ɶ�Q �[�z���- ��V���D�+�#�=5j��4����=���FGW� ��yگ�Ir�;����Uܦ���P�2�ےm�1%��L,��뢈Q唪�9���L���'�$.�D��jTp�ǻ��[HG1�蜽 Am���'N��.8�濣�J]M��n��w�7�#��ooK�d(�);jZ,d��#��C�:����0����ڤ����*!�d5���>[�AD���Їl�5�`�r�b�n��`��$�B,Q�$�����9��x�2¨��m>���\R�N�zζ}p:��wD�P�����Z��,2�P B��t��$u0��4Ψ�V��Zt�,�79�5x����i�0JQʸ�A�!�<��d�HJ�:�yȡ�)����2/������ި���:K��"{W�T_����c��SY��E4.0�X���$g���<��~����ڊ��7W��e>�=V>�.-�;ˇm-����W����\f��^��� ������:�-*��&=�����5����OڞN|�u8�5�?T?d�"����3�f��t0n�Ͼ�\T >Cv�'������:S.s�7dnG�h���G�ҋ�|Hڀp莉�(�/�>\Y>~�[��:��P�`�~���b��Q�CM�6��}|4�����}v�cW%�>S��9��9�)��(դ�]F����#{�Pve��`ƻ�'d� �bqr�L .@�S�|�N��cM��Q��p��/>`��B텫����γP� 똔`e9hi����I#Ma��riV�j�i7��8�ERɋ�Ү���%��cSCU_~�}AhjQ)5f����N�%{E��V��aB�F3eD[�Ɩ�l��j%�r$�w�7���"�vU�f�D�U1\2tߙuIU��- ��E ��mW�����m��1z���se��#�6t�ɓDb��w=��Ck��� �!�x���W3���h�|���I�s3a$���o˔����ٹ ��[&�I�kI����oγJ:��0��14λ��C(]��uA[��.)�j��M<aV|�+�^/ir�#�Ó��� ?eZ�h �Һp�S����(2�x\�22z ��9DҌ���y��/>P>��k���j��y^2 '�?[��ݺ�5������i=�������3��<(�%�\2 �E�%�c��*�,�Y�7���kc��d�U��(SR@��\9��S�_��Y�.�ǁ%��f�!ԇN�z:4� vh�B���ه��\gM-¨>OS��p��%�<��Ы\�D*�řU�0�U]��R��V�����q���l`��7��F7�sK���I�2R� �e�U2:���[O��^Ґ�X���ڊ��2�%�.G4�T�J�.�y������r��:e��8���������KH#i��J�W�k��L���+D����B�8�/2<݄�J�|�~BC'�.yo\Aa�6[1��O����LnCO�җ��O�U=��ė/(vrz�R�;��L���<&�G�@�r� �/i��9�IF�79��5b\�"g)�ń�Ҁ�(���0���4̹���(Q$�o$G�4eLW ���`��c��+��H{!��6(6Nq�� ���lt�>��_.QO �u�"8QMJ]X�#��Y�S䠥 ������K5>b�Ӳ�l���l���W�I�w�c��ah���9�ʇ��CWS�����S��J¾vR-��,IxC�8O"����M=�C�M0�l�ŋ���>��(I����G1��(���An�Q<G�B�o��Q"���)�D�B2�H!�p.s�Z�4��φ����!��gI��Ѳ7���| +�6M�R�` ���=KNu�Ly�e�|˻��8��"M���|(��cIv�����nDLٕ+&-�J�n�z�/3�4�H�IC+���Y,Mɖd�:�pP�Ğ�h[��@J;�lm "�.����`�ŧ�im��{�Q,��e�qB �<U�(��h;�$ڒr ӎ#'r�)8s�J�ƝO^�:��Q'��被n��AŗZO���ǟF�@A��&\�HQ�ň'^�>��I�$Y?��e���h���*��O�Xi�I���d�Ͱ�z���c+&�V���Sw?DXb����f�͚��E�t�2�����g�s�+Y����>�㺫����[��ɕ�P�"�+U�L���*�V�Z�Fi���m�qL��ۈ[ms�mw�s�v;4�턝v9i���������tL-oemckg����D��9o'��J�3�,6����"�D*�+�*�F���&m���~��F��"���:r�Vh�W��.v4%C邼w�Q۫.Q��Q�j-�@{.O�lʄҡl]� %B�@�N���H��86�hz%J��-^����g#7���{��ૉ+q��a�%�!���C�ul� ���I�rsQ����� �� pѵeA��[I�;(�3�bo�.ث{䋺�E~�����7{�D��4�*�;���d�]��-�pv�-l�-����.�-���!��;=��xUq>-yW�~Z�o����_y5�*6��TJ��{�?EV��P�:�LW�L)H��<Ȣ*yQr#<r��Ɏ�>6�#3�(�Б舃�r |� ���g+�/���E��q5��$�m;,;�,�0��`f :W&��bT��;]�(�4��:� *�+�0�ܧ)�a��[�J>��E�B���!�F����_��T�`��*_��q6�>}�I���C=�q�/|0D��,���b�nL��bw��>���o�k����zd>��s��l��gov���^+lAu�>�s2;�s0�fT�"=I��u��� -�T��9���ٙ�;�%=�i�EjW?��9�Z��t�1��5�])k�*=*`�9C��v �s�ݧO��>�ך�����'�d4�p���*{s�Ѓ�#�)�V`�l0�e��(\b�������N��*theme-joomla/assets/less/bootstrap/bootstrap.less000064400000551201151666572130016337 0ustar00// @charset "UTF-8"; /*! * Bootstrap v5.1.3 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors * Copyright 2011-2021 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ :root { --bs-blue: @global-primary-background; --bs-indigo: #6610f2; --bs-purple: #6f42c1; --bs-pink: #d63384; --bs-red: @global-danger-background; --bs-orange: #fd7e14; --bs-yellow: @global-warning-background; --bs-green: @global-success-background; --bs-teal: #20c997; --bs-cyan: @global-primary-background; // Info Color --bs-white: @global-background; --bs-gray: @global-muted-color; --bs-gray-dark: #343a40; --bs-gray-100: #f8f9fa; --bs-gray-200: #e9ecef; --bs-gray-300: #dee2e6; --bs-gray-400: #ced4da; --bs-gray-500: #adb5bd; --bs-gray-600: @global-muted-color; --bs-gray-700: @global-color; --bs-gray-800: #343a40; --bs-gray-900: @global-emphasis-color; --bs-primary: @global-primary-background; --bs-secondary: @global-muted-color; // Gray 600 --bs-success: @global-success-background; --bs-info: @global-primary-background; // Info Color --bs-warning: @global-warning-background; --bs-danger: @global-danger-background; --bs-light: #f8f9fa; // Gray 100 --bs-dark: #212529; // Gray 900 --bs-primary-rgb: 13, 110, 253; --bs-secondary-rgb: 108, 117, 125; --bs-success-rgb: 25, 135, 84; --bs-info-rgb: 13, 202, 240; --bs-warning-rgb: 255, 193, 7; --bs-danger-rgb: 220, 53, 69; --bs-light-rgb: 248, 249, 250; --bs-dark-rgb: 33, 37, 41; --bs-white-rgb: 255, 255, 255; --bs-black-rgb: 0, 0, 0; --bs-body-rgb: 33, 37, 41; --bs-body-bg-rgb: 255, 255, 255; --bs-font-sans-serif: @global-font-family; --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0)); --bs-body-font-family: var(--bs-font-sans-serif); --bs-body-font-size: 1rem; --bs-body-font-weight: 400; --bs-body-line-height: 1.5; --bs-body-color: #212529; // Gray 900 --bs-body-bg: @global-background; } *:where(:not([class*='uk-'], [class*='tm-'])), *:where(:not([class*='uk-'], [class*='tm-']))::before, *:where(:not([class*='uk-'], [class*='tm-']))::after { box-sizing: border-box; } // [class*='container'], // [class*='img-'], // [class*='row'], // [class*='col'], // [class*='table'], // [class*='form'], // [class*='input'], // [class*='valid'], // [class*='invalid'], // [class*='table'] { box-sizing: border-box; } .h1:extend(.uk-h1 all) {} .h2:extend(.uk-h2 all) {} .h3:extend(.uk-h3 all) {} .h4:extend(.uk-h4 all) {} .h5:extend(.uk-h5 all) {} .h6:extend(.uk-h6 all) {} .small:extend(.uk-text-small all) {} .lead:extend(.uk-text-lead all) {} .display-1:extend(.uk-heading-large all) {} .display-2:extend(.uk-heading-large all) {} .display-3:extend(.uk-heading-medium all) {} .display-4:extend(.uk-heading-medium all) {} .display-5:extend(.uk-heading-small all) {} .display-6:extend(.uk-heading-small all) {} .list-unstyled { padding-left: 0; list-style: none; } .list-inline { padding-left: 0; list-style: none; } .list-inline-item { display: inline-block; } .list-inline-item:not(:last-child) { margin-right: 0.5rem; } .initialism { font-size: 0.875em; text-transform: uppercase; } .blockquote { margin-bottom: 1rem; font-size: 1.25rem; } .blockquote > :last-child { margin-bottom: 0; } .blockquote-footer { margin-top: -1rem; margin-bottom: 1rem; font-size: @base-blockquote-footer-font-size; line-height: @base-blockquote-footer-line-height; .hook-base-blockquote-footer(); } .blockquote-footer::before { content: "— "; } .img-thumbnail { padding: 0.25rem; background-color: @global-background; border: @global-border-width solid @global-border; // Gray 300 border-radius: 0.25rem; max-width: 100%; height: auto; } .figure { display: inline-block; } .figure-img { margin-bottom: 0.5rem; line-height: 1; } .figure-caption { font-size: 0.875em; color: @global-muted-color; // Gray 600 } .container, .container-fluid, .container-xxl, .container-xl, .container-lg, .container-md, .container-sm { width: 100%; padding-right: var(--bs-gutter-x, 0.75rem); padding-left: var(--bs-gutter-x, 0.75rem); margin-right: auto; margin-left: auto; } @media (min-width: 576px) { .container-sm, .container { max-width: 540px; } } @media (min-width: 768px) { .container-md, .container-sm, .container { max-width: 720px; } } @media (min-width: 992px) { .container-lg, .container-md, .container-sm, .container { max-width: 960px; } } @media (min-width: 1200px) { .container-xl, .container-lg, .container-md, .container-sm, .container { max-width: 1140px; } } @media (min-width: 1400px) { .container-xxl, .container-xl, .container-lg, .container-md, .container-sm, .container { max-width: 1320px; } } .row { --bs-gutter-x: 1.5rem; --bs-gutter-y: 0; display: flex; flex-wrap: wrap; margin-top: ~'calc(var(--bs-gutter-y) * -1)'; margin-right: ~'calc(var(--bs-gutter-x) * -.5)'; margin-left: ~'calc(var(--bs-gutter-x) * -.5)'; } .row > * { flex-shrink: 0; width: 100%; max-width: 100%; padding-right: ~'calc(var(--bs-gutter-x) * .5)'; padding-left: ~'calc(var(--bs-gutter-x) * .5)'; margin-top: var(--bs-gutter-y); } .col { flex: 1 0 0%; } .row-cols-auto > * { flex: 0 0 auto; width: auto; } .row-cols-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-auto { flex: 0 0 auto; width: auto; } .col-1 { flex: 0 0 auto; width: 8.33333333%; } .col-2 { flex: 0 0 auto; width: 16.66666667%; } .col-3 { flex: 0 0 auto; width: 25%; } .col-4 { flex: 0 0 auto; width: 33.33333333%; } .col-5 { flex: 0 0 auto; width: 41.66666667%; } .col-6 { flex: 0 0 auto; width: 50%; } .col-7 { flex: 0 0 auto; width: 58.33333333%; } .col-8 { flex: 0 0 auto; width: 66.66666667%; } .col-9 { flex: 0 0 auto; width: 75%; } .col-10 { flex: 0 0 auto; width: 83.33333333%; } .col-11 { flex: 0 0 auto; width: 91.66666667%; } .col-12 { flex: 0 0 auto; width: 100%; } .offset-1 { margin-left: 8.33333333%; } .offset-2 { margin-left: 16.66666667%; } .offset-3 { margin-left: 25%; } .offset-4 { margin-left: 33.33333333%; } .offset-5 { margin-left: 41.66666667%; } .offset-6 { margin-left: 50%; } .offset-7 { margin-left: 58.33333333%; } .offset-8 { margin-left: 66.66666667%; } .offset-9 { margin-left: 75%; } .offset-10 { margin-left: 83.33333333%; } .offset-11 { margin-left: 91.66666667%; } .g-0, .gx-0 { --bs-gutter-x: 0; } .g-0, .gy-0 { --bs-gutter-y: 0; } .g-1, .gx-1 { --bs-gutter-x: 0.25rem; } .g-1, .gy-1 { --bs-gutter-y: 0.25rem; } .g-2, .gx-2 { --bs-gutter-x: 0.5rem; } .g-2, .gy-2 { --bs-gutter-y: 0.5rem; } .g-3, .gx-3 { --bs-gutter-x: 1rem; } .g-3, .gy-3 { --bs-gutter-y: 1rem; } .g-4, .gx-4 { --bs-gutter-x: 1.5rem; } .g-4, .gy-4 { --bs-gutter-y: 1.5rem; } .g-5, .gx-5 { --bs-gutter-x: 3rem; } .g-5, .gy-5 { --bs-gutter-y: 3rem; } @media (min-width: 576px) { .col-sm { flex: 1 0 0%; } .row-cols-sm-auto > * { flex: 0 0 auto; width: auto; } .row-cols-sm-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-sm-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-sm-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-sm-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-sm-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-sm-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-sm-auto { flex: 0 0 auto; width: auto; } .col-sm-1 { flex: 0 0 auto; width: 8.33333333%; } .col-sm-2 { flex: 0 0 auto; width: 16.66666667%; } .col-sm-3 { flex: 0 0 auto; width: 25%; } .col-sm-4 { flex: 0 0 auto; width: 33.33333333%; } .col-sm-5 { flex: 0 0 auto; width: 41.66666667%; } .col-sm-6 { flex: 0 0 auto; width: 50%; } .col-sm-7 { flex: 0 0 auto; width: 58.33333333%; } .col-sm-8 { flex: 0 0 auto; width: 66.66666667%; } .col-sm-9 { flex: 0 0 auto; width: 75%; } .col-sm-10 { flex: 0 0 auto; width: 83.33333333%; } .col-sm-11 { flex: 0 0 auto; width: 91.66666667%; } .col-sm-12 { flex: 0 0 auto; width: 100%; } .offset-sm-0 { margin-left: 0; } .offset-sm-1 { margin-left: 8.33333333%; } .offset-sm-2 { margin-left: 16.66666667%; } .offset-sm-3 { margin-left: 25%; } .offset-sm-4 { margin-left: 33.33333333%; } .offset-sm-5 { margin-left: 41.66666667%; } .offset-sm-6 { margin-left: 50%; } .offset-sm-7 { margin-left: 58.33333333%; } .offset-sm-8 { margin-left: 66.66666667%; } .offset-sm-9 { margin-left: 75%; } .offset-sm-10 { margin-left: 83.33333333%; } .offset-sm-11 { margin-left: 91.66666667%; } .g-sm-0, .gx-sm-0 { --bs-gutter-x: 0; } .g-sm-0, .gy-sm-0 { --bs-gutter-y: 0; } .g-sm-1, .gx-sm-1 { --bs-gutter-x: 0.25rem; } .g-sm-1, .gy-sm-1 { --bs-gutter-y: 0.25rem; } .g-sm-2, .gx-sm-2 { --bs-gutter-x: 0.5rem; } .g-sm-2, .gy-sm-2 { --bs-gutter-y: 0.5rem; } .g-sm-3, .gx-sm-3 { --bs-gutter-x: 1rem; } .g-sm-3, .gy-sm-3 { --bs-gutter-y: 1rem; } .g-sm-4, .gx-sm-4 { --bs-gutter-x: 1.5rem; } .g-sm-4, .gy-sm-4 { --bs-gutter-y: 1.5rem; } .g-sm-5, .gx-sm-5 { --bs-gutter-x: 3rem; } .g-sm-5, .gy-sm-5 { --bs-gutter-y: 3rem; } } @media (min-width: 768px) { .col-md { flex: 1 0 0%; } .row-cols-md-auto > * { flex: 0 0 auto; width: auto; } .row-cols-md-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-md-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-md-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-md-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-md-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-md-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-md-auto { flex: 0 0 auto; width: auto; } .col-md-1 { flex: 0 0 auto; width: 8.33333333%; } .col-md-2 { flex: 0 0 auto; width: 16.66666667%; } .col-md-3 { flex: 0 0 auto; width: 25%; } .col-md-4 { flex: 0 0 auto; width: 33.33333333%; } .col-md-5 { flex: 0 0 auto; width: 41.66666667%; } .col-md-6 { flex: 0 0 auto; width: 50%; } .col-md-7 { flex: 0 0 auto; width: 58.33333333%; } .col-md-8 { flex: 0 0 auto; width: 66.66666667%; } .col-md-9 { flex: 0 0 auto; width: 75%; } .col-md-10 { flex: 0 0 auto; width: 83.33333333%; } .col-md-11 { flex: 0 0 auto; width: 91.66666667%; } .col-md-12 { flex: 0 0 auto; width: 100%; } .offset-md-0 { margin-left: 0; } .offset-md-1 { margin-left: 8.33333333%; } .offset-md-2 { margin-left: 16.66666667%; } .offset-md-3 { margin-left: 25%; } .offset-md-4 { margin-left: 33.33333333%; } .offset-md-5 { margin-left: 41.66666667%; } .offset-md-6 { margin-left: 50%; } .offset-md-7 { margin-left: 58.33333333%; } .offset-md-8 { margin-left: 66.66666667%; } .offset-md-9 { margin-left: 75%; } .offset-md-10 { margin-left: 83.33333333%; } .offset-md-11 { margin-left: 91.66666667%; } .g-md-0, .gx-md-0 { --bs-gutter-x: 0; } .g-md-0, .gy-md-0 { --bs-gutter-y: 0; } .g-md-1, .gx-md-1 { --bs-gutter-x: 0.25rem; } .g-md-1, .gy-md-1 { --bs-gutter-y: 0.25rem; } .g-md-2, .gx-md-2 { --bs-gutter-x: 0.5rem; } .g-md-2, .gy-md-2 { --bs-gutter-y: 0.5rem; } .g-md-3, .gx-md-3 { --bs-gutter-x: 1rem; } .g-md-3, .gy-md-3 { --bs-gutter-y: 1rem; } .g-md-4, .gx-md-4 { --bs-gutter-x: 1.5rem; } .g-md-4, .gy-md-4 { --bs-gutter-y: 1.5rem; } .g-md-5, .gx-md-5 { --bs-gutter-x: 3rem; } .g-md-5, .gy-md-5 { --bs-gutter-y: 3rem; } } @media (min-width: 992px) { .col-lg { flex: 1 0 0%; } .row-cols-lg-auto > * { flex: 0 0 auto; width: auto; } .row-cols-lg-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-lg-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-lg-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-lg-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-lg-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-lg-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-lg-auto { flex: 0 0 auto; width: auto; } .col-lg-1 { flex: 0 0 auto; width: 8.33333333%; } .col-lg-2 { flex: 0 0 auto; width: 16.66666667%; } .col-lg-3 { flex: 0 0 auto; width: 25%; } .col-lg-4 { flex: 0 0 auto; width: 33.33333333%; } .col-lg-5 { flex: 0 0 auto; width: 41.66666667%; } .col-lg-6 { flex: 0 0 auto; width: 50%; } .col-lg-7 { flex: 0 0 auto; width: 58.33333333%; } .col-lg-8 { flex: 0 0 auto; width: 66.66666667%; } .col-lg-9 { flex: 0 0 auto; width: 75%; } .col-lg-10 { flex: 0 0 auto; width: 83.33333333%; } .col-lg-11 { flex: 0 0 auto; width: 91.66666667%; } .col-lg-12 { flex: 0 0 auto; width: 100%; } .offset-lg-0 { margin-left: 0; } .offset-lg-1 { margin-left: 8.33333333%; } .offset-lg-2 { margin-left: 16.66666667%; } .offset-lg-3 { margin-left: 25%; } .offset-lg-4 { margin-left: 33.33333333%; } .offset-lg-5 { margin-left: 41.66666667%; } .offset-lg-6 { margin-left: 50%; } .offset-lg-7 { margin-left: 58.33333333%; } .offset-lg-8 { margin-left: 66.66666667%; } .offset-lg-9 { margin-left: 75%; } .offset-lg-10 { margin-left: 83.33333333%; } .offset-lg-11 { margin-left: 91.66666667%; } .g-lg-0, .gx-lg-0 { --bs-gutter-x: 0; } .g-lg-0, .gy-lg-0 { --bs-gutter-y: 0; } .g-lg-1, .gx-lg-1 { --bs-gutter-x: 0.25rem; } .g-lg-1, .gy-lg-1 { --bs-gutter-y: 0.25rem; } .g-lg-2, .gx-lg-2 { --bs-gutter-x: 0.5rem; } .g-lg-2, .gy-lg-2 { --bs-gutter-y: 0.5rem; } .g-lg-3, .gx-lg-3 { --bs-gutter-x: 1rem; } .g-lg-3, .gy-lg-3 { --bs-gutter-y: 1rem; } .g-lg-4, .gx-lg-4 { --bs-gutter-x: 1.5rem; } .g-lg-4, .gy-lg-4 { --bs-gutter-y: 1.5rem; } .g-lg-5, .gx-lg-5 { --bs-gutter-x: 3rem; } .g-lg-5, .gy-lg-5 { --bs-gutter-y: 3rem; } } @media (min-width: 1200px) { .col-xl { flex: 1 0 0%; } .row-cols-xl-auto > * { flex: 0 0 auto; width: auto; } .row-cols-xl-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-xl-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-xl-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-xl-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-xl-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-xl-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-xl-auto { flex: 0 0 auto; width: auto; } .col-xl-1 { flex: 0 0 auto; width: 8.33333333%; } .col-xl-2 { flex: 0 0 auto; width: 16.66666667%; } .col-xl-3 { flex: 0 0 auto; width: 25%; } .col-xl-4 { flex: 0 0 auto; width: 33.33333333%; } .col-xl-5 { flex: 0 0 auto; width: 41.66666667%; } .col-xl-6 { flex: 0 0 auto; width: 50%; } .col-xl-7 { flex: 0 0 auto; width: 58.33333333%; } .col-xl-8 { flex: 0 0 auto; width: 66.66666667%; } .col-xl-9 { flex: 0 0 auto; width: 75%; } .col-xl-10 { flex: 0 0 auto; width: 83.33333333%; } .col-xl-11 { flex: 0 0 auto; width: 91.66666667%; } .col-xl-12 { flex: 0 0 auto; width: 100%; } .offset-xl-0 { margin-left: 0; } .offset-xl-1 { margin-left: 8.33333333%; } .offset-xl-2 { margin-left: 16.66666667%; } .offset-xl-3 { margin-left: 25%; } .offset-xl-4 { margin-left: 33.33333333%; } .offset-xl-5 { margin-left: 41.66666667%; } .offset-xl-6 { margin-left: 50%; } .offset-xl-7 { margin-left: 58.33333333%; } .offset-xl-8 { margin-left: 66.66666667%; } .offset-xl-9 { margin-left: 75%; } .offset-xl-10 { margin-left: 83.33333333%; } .offset-xl-11 { margin-left: 91.66666667%; } .g-xl-0, .gx-xl-0 { --bs-gutter-x: 0; } .g-xl-0, .gy-xl-0 { --bs-gutter-y: 0; } .g-xl-1, .gx-xl-1 { --bs-gutter-x: 0.25rem; } .g-xl-1, .gy-xl-1 { --bs-gutter-y: 0.25rem; } .g-xl-2, .gx-xl-2 { --bs-gutter-x: 0.5rem; } .g-xl-2, .gy-xl-2 { --bs-gutter-y: 0.5rem; } .g-xl-3, .gx-xl-3 { --bs-gutter-x: 1rem; } .g-xl-3, .gy-xl-3 { --bs-gutter-y: 1rem; } .g-xl-4, .gx-xl-4 { --bs-gutter-x: 1.5rem; } .g-xl-4, .gy-xl-4 { --bs-gutter-y: 1.5rem; } .g-xl-5, .gx-xl-5 { --bs-gutter-x: 3rem; } .g-xl-5, .gy-xl-5 { --bs-gutter-y: 3rem; } } @media (min-width: 1400px) { .col-xxl { flex: 1 0 0%; } .row-cols-xxl-auto > * { flex: 0 0 auto; width: auto; } .row-cols-xxl-1 > * { flex: 0 0 auto; width: 100%; } .row-cols-xxl-2 > * { flex: 0 0 auto; width: 50%; } .row-cols-xxl-3 > * { flex: 0 0 auto; width: 33.3333333333%; } .row-cols-xxl-4 > * { flex: 0 0 auto; width: 25%; } .row-cols-xxl-5 > * { flex: 0 0 auto; width: 20%; } .row-cols-xxl-6 > * { flex: 0 0 auto; width: 16.6666666667%; } .col-xxl-auto { flex: 0 0 auto; width: auto; } .col-xxl-1 { flex: 0 0 auto; width: 8.33333333%; } .col-xxl-2 { flex: 0 0 auto; width: 16.66666667%; } .col-xxl-3 { flex: 0 0 auto; width: 25%; } .col-xxl-4 { flex: 0 0 auto; width: 33.33333333%; } .col-xxl-5 { flex: 0 0 auto; width: 41.66666667%; } .col-xxl-6 { flex: 0 0 auto; width: 50%; } .col-xxl-7 { flex: 0 0 auto; width: 58.33333333%; } .col-xxl-8 { flex: 0 0 auto; width: 66.66666667%; } .col-xxl-9 { flex: 0 0 auto; width: 75%; } .col-xxl-10 { flex: 0 0 auto; width: 83.33333333%; } .col-xxl-11 { flex: 0 0 auto; width: 91.66666667%; } .col-xxl-12 { flex: 0 0 auto; width: 100%; } .offset-xxl-0 { margin-left: 0; } .offset-xxl-1 { margin-left: 8.33333333%; } .offset-xxl-2 { margin-left: 16.66666667%; } .offset-xxl-3 { margin-left: 25%; } .offset-xxl-4 { margin-left: 33.33333333%; } .offset-xxl-5 { margin-left: 41.66666667%; } .offset-xxl-6 { margin-left: 50%; } .offset-xxl-7 { margin-left: 58.33333333%; } .offset-xxl-8 { margin-left: 66.66666667%; } .offset-xxl-9 { margin-left: 75%; } .offset-xxl-10 { margin-left: 83.33333333%; } .offset-xxl-11 { margin-left: 91.66666667%; } .g-xxl-0, .gx-xxl-0 { --bs-gutter-x: 0; } .g-xxl-0, .gy-xxl-0 { --bs-gutter-y: 0; } .g-xxl-1, .gx-xxl-1 { --bs-gutter-x: 0.25rem; } .g-xxl-1, .gy-xxl-1 { --bs-gutter-y: 0.25rem; } .g-xxl-2, .gx-xxl-2 { --bs-gutter-x: 0.5rem; } .g-xxl-2, .gy-xxl-2 { --bs-gutter-y: 0.5rem; } .g-xxl-3, .gx-xxl-3 { --bs-gutter-x: 1rem; } .g-xxl-3, .gy-xxl-3 { --bs-gutter-y: 1rem; } .g-xxl-4, .gx-xxl-4 { --bs-gutter-x: 1.5rem; } .g-xxl-4, .gy-xxl-4 { --bs-gutter-y: 1.5rem; } .g-xxl-5, .gx-xxl-5 { --bs-gutter-x: 3rem; } .g-xxl-5, .gy-xxl-5 { --bs-gutter-y: 3rem; } } .table { border-collapse: collapse; border-spacing: 0; } .table :where(tbody), .table :where(td), .table :where(tfoot), .table :where(th), .table :where(thead), .table :where(tr) { border-color: inherit; border-style: solid; border-width: 0; } .table { --bs-table-bg: transparent; --bs-table-accent-bg: transparent; --bs-table-striped-color: @global-color; // Gray 900 --bs-table-striped-bg: rgba(0, 0, 0, 0.05); --bs-table-active-color: @global-color; // Gray 900 --bs-table-active-bg: rgba(0, 0, 0, 0.1); --bs-table-hover-color: @global-color; // Gray 900 --bs-table-hover-bg: rgba(0, 0, 0, 0.075); width: 100%; margin-bottom: 1rem; color: @global-color; // Gray 900 vertical-align: top; border-color: @global-border // Gray 300 } .table > :not(caption) > * > * { padding: 0.5rem 0.5rem; background-color: var(--bs-table-bg); border-bottom-width: @global-border-width; box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); } .table > tbody { vertical-align: inherit; } .table > thead { vertical-align: bottom; } .table > :not(:first-child) { border-bottom-color: currentColor; } .caption-top { caption-side: top; } .table-sm > :not(caption) > * > * { padding: 0.25rem 0.25rem; } .table-bordered > :not(caption) > * { border-width: @global-border-width 0; } .table-bordered > :not(caption) > * > * { border-width: 0 @global-border-width; } .table-borderless > :not(caption) > * > * { border-bottom-width: 0; } .table-borderless > :not(:first-child) { border-top-width: 0; } .table-striped > tbody > tr:nth-of-type(odd) > * { --bs-table-accent-bg: var(--bs-table-striped-bg); color: var(--bs-table-striped-color); } .table-active { --bs-table-accent-bg: var(--bs-table-active-bg); color: var(--bs-table-active-color); } .table-hover > tbody > tr:hover > * { --bs-table-accent-bg: var(--bs-table-hover-bg); color: var(--bs-table-hover-color); } .table-primary { --bs-table-bg: #cfe2ff; --bs-table-striped-bg: #c5d7f2; --bs-table-striped-color: #000; --bs-table-active-bg: #bacbe6; --bs-table-active-color: #000; --bs-table-hover-bg: #bfd1ec; --bs-table-hover-color: #000; color: #000; border-color: #bacbe6; } .table-secondary { --bs-table-bg: #e2e3e5; --bs-table-striped-bg: #d7d8da; --bs-table-striped-color: #000; --bs-table-active-bg: #cbccce; --bs-table-active-color: #000; --bs-table-hover-bg: #d1d2d4; --bs-table-hover-color: #000; color: #000; border-color: #cbccce; } .table-success { --bs-table-bg: #d1e7dd; --bs-table-striped-bg: #c7dbd2; --bs-table-striped-color: #000; --bs-table-active-bg: #bcd0c7; --bs-table-active-color: #000; --bs-table-hover-bg: #c1d6cc; --bs-table-hover-color: #000; color: #000; border-color: #bcd0c7; } .table-info { --bs-table-bg: #cff4fc; --bs-table-striped-bg: #c5e8ef; --bs-table-striped-color: #000; --bs-table-active-bg: #badce3; --bs-table-active-color: #000; --bs-table-hover-bg: #bfe2e9; --bs-table-hover-color: #000; color: #000; border-color: #badce3; } .table-warning { --bs-table-bg: #fff3cd; --bs-table-striped-bg: #f2e7c3; --bs-table-striped-color: #000; --bs-table-active-bg: #e6dbb9; --bs-table-active-color: #000; --bs-table-hover-bg: #ece1be; --bs-table-hover-color: #000; color: #000; border-color: #e6dbb9; } .table-danger { --bs-table-bg: #f8d7da; --bs-table-striped-bg: #eccccf; --bs-table-striped-color: #000; --bs-table-active-bg: #dfc2c4; --bs-table-active-color: #000; --bs-table-hover-bg: #e5c7ca; --bs-table-hover-color: #000; color: #000; border-color: #dfc2c4; } .table-light { --bs-table-bg: #f8f9fa; // Gray 100 --bs-table-striped-bg: #ecedee; --bs-table-striped-color: #000; --bs-table-active-bg: #dfe0e1; --bs-table-active-color: #000; --bs-table-hover-bg: #e5e6e7; --bs-table-hover-color: #000; color: #000; border-color: #dfe0e1; } .table-dark { --bs-table-bg: #212529; // Gray 900 --bs-table-striped-bg: #2c3034; --bs-table-striped-color: @global-inverse-color; --bs-table-active-bg: #373b3e; --bs-table-active-color: @global-inverse-color; --bs-table-hover-bg: #323539; --bs-table-hover-color: @global-inverse-color; color: @global-inverse-color; border-color: #373b3e; } .table-responsive { overflow-x: auto; -webkit-overflow-scrolling: touch; } @media (max-width: 575.98px) { .table-responsive-sm { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 767.98px) { .table-responsive-md { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 991.98px) { .table-responsive-lg { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 1199.98px) { .table-responsive-xl { overflow-x: auto; -webkit-overflow-scrolling: touch; } } @media (max-width: 1399.98px) { .table-responsive-xxl { overflow-x: auto; -webkit-overflow-scrolling: touch; } } .form-label { display: inline-block; margin-bottom: 0.5rem; .hook-form-label(); } .col-form-label { padding-top: ~'calc(0.375rem + @{global-border-width})'; padding-bottom: ~'calc(0.375rem + @{global-border-width})'; margin-bottom: 0; font-size: inherit; line-height: 1.5; } .col-form-label-lg { padding-top: ~'calc(0.5rem + @{global-border-width})'; padding-bottom: ~'calc(0.5rem + @{global-border-width})'; font-size: 1.25rem; } .col-form-label-sm { padding-top: ~'calc(0.25rem + @{global-border-width})'; padding-bottom: ~'calc(0.25rem + @{global-border-width})'; font-size: 0.875rem; } .form-text { margin-top: 0.25rem; font-size: 0.875em; color: @global-muted-color; // Gray 600 // Needed because Joomla uses `small` as element display: block; } fieldset:extend(.uk-fieldset all) {} legend:extend(.uk-legend all) {} .form-control:where(input):extend(.uk-input all) {} .form-control:where(textarea):extend(.uk-textarea all) {} .form-select:where(select):extend(.uk-select all) {} .form-select:not([multiple])[size='1']:extend(.uk-select:not([multiple]):not([size]) all) {} .form-check-input[type=radio]:extend(.uk-radio all) {} .form-check-input[type=checkbox]:extend(.uk-checkbox all) {} .form-control-sm:extend(.uk-form-small all) {} .form-control-lg:extend(.uk-form-large all) {} .form-control::file-selector-button { margin: 0; border: none; font: inherit; color: inherit; border-radius: 0; background-color: rgba(0,0,0,0.1); // Gray 200 height: 100%; margin-left: -@form-padding-horizontal; margin-right: @form-padding-horizontal; padding-left: @form-padding-horizontal; padding-right: @form-padding-horizontal; } .form-control-sm::file-selector-button { margin-left: -@form-small-padding-horizontal; margin-right: @form-small-padding-horizontal; padding-left: @form-small-padding-horizontal; padding-right: @form-small-padding-horizontal; } .form-control-lg::file-selector-button { margin-left: -@form-large-padding-horizontal; margin-right: @form-large-padding-horizontal; padding-left: @form-large-padding-horizontal; padding-right: @form-large-padding-horizontal; } .form-control-plaintext { display: block; width: 100%; padding: 0.375rem 0; margin-bottom: 0; line-height: 1.5; color: @global-color; // Gray 900 background-color: transparent; border: solid transparent; border-width: @global-border-width 0; } .form-switch { padding-left: 2.5em; } .form-switch .form-check-input { width: 2em; margin-left: -2.5em; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e"); background-position: left center; border-radius: 2em; transition: background-position 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-switch .form-check-input { transition: none; } } .form-switch .form-check-input:focus { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e"); } .form-switch .form-check-input:checked { background-position: right center; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); } .form-check-inline { display: inline-block; margin-right: 1rem; } .btn-check { position: absolute; clip: rect(0, 0, 0, 0); pointer-events: none; } .btn-check[disabled] + .btn, .btn-check:disabled + .btn { pointer-events: none; filter: none; opacity: 0.65; } .form-range:extend(.uk-range all) {} .form-floating { position: relative; } .form-floating > .form-control, .form-floating > .form-select { height: calc(3.5rem + 2px); line-height: 1.25; } .form-floating > label { position: absolute; top: 0; left: 0; height: 100%; padding: 1rem 0.75rem; pointer-events: none; border: @global-border-width solid transparent; transform-origin: 0 0; transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; } @media (prefers-reduced-motion: reduce) { .form-floating > label { transition: none; } } .form-floating > .form-control { padding: 1rem 0.75rem; } .form-floating > .form-control::-moz-placeholder { color: transparent; } .form-floating > .form-control::placeholder { color: transparent; } .form-floating > .form-control:not(:-moz-placeholder-shown) { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:focus, .form-floating > .form-control:not(:placeholder-shown) { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:-webkit-autofill { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-select { padding-top: 1.625rem; padding-bottom: 0.625rem; } .form-floating > .form-control:not(:-moz-placeholder-shown) ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .form-floating > .form-control:focus ~ label, .form-floating > .form-control:not(:placeholder-shown) ~ label, .form-floating > .form-select ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .form-floating > .form-control:-webkit-autofill ~ label { opacity: 0.65; transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); } .input-group { position: relative; display: flex; flex-wrap: wrap; align-items: stretch; width: 100%; } .input-group > .form-control, .input-group > .form-select { position: relative; flex: 1 1 auto; width: 1%; min-width: 0; } .input-group > .form-control:focus, .input-group > .form-select:focus { z-index: 3; } .input-group .btn { position: relative; z-index: 2; } .input-group .btn:focus { z-index: 3; } .input-group-text { display: flex; align-items: center; padding: 0.375rem 0.75rem; font-size: 1rem; font-weight: 400; line-height: 1.5; color: @global-color; // Gray 900 text-align: center; white-space: nowrap; background-color: #e9ecef; // Gray 200 border: @global-border-width solid #ced4da; // Gray 400 border-radius: 0.25rem; } .input-group-lg > .form-control, .input-group-lg > .form-select, .input-group-lg > .input-group-text, .input-group-lg > .btn { padding: 0.5rem 1rem; font-size: 1.25rem; border-radius: 0.3rem; } .input-group-sm > .form-control, .input-group-sm > .form-select, .input-group-sm > .input-group-text, .input-group-sm > .btn { padding: 0.25rem 0.5rem; font-size: 0.875rem; border-radius: 0.2rem; } .input-group-lg > .form-select, .input-group-sm > .form-select { padding-right: 3rem; } .input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), .input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n+3) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group.has-validation > :nth-last-child(n+3):not(.dropdown-toggle):not(.dropdown-menu), .input-group.has-validation > .dropdown-toggle:nth-last-child(n+4) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) { margin-left: -@global-border-width; border-top-left-radius: 0; border-bottom-left-radius: 0; } .valid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: @global-success-background; } .valid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.875rem; color: @global-inverse-color; background-color: rgba(25, 135, 84, 0.9); border-radius: 0.25rem; } .was-validated :valid ~ .valid-feedback, .was-validated :valid ~ .valid-tooltip, .is-valid ~ .valid-feedback, .is-valid ~ .valid-tooltip { display: block; } .was-validated .form-control:valid, .form-control.is-valid { border-color: @global-success-background; padding-right: ~'calc(1.5em + 0.75rem)'; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right ~'calc(0.375em + 0.1875rem)' center; background-size: ~'calc(0.75em + 0.375rem)' ~'calc(0.75em + 0.375rem)'; } .was-validated .form-control:valid:focus, .form-control.is-valid:focus { border-color: @global-success-background; box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated textarea.form-control:valid, textarea.form-control.is-valid { padding-right: ~'calc(1.5em + 0.75rem)'; background-position: top ~'calc(0.375em + 0.1875rem)' right ~'calc(0.375em + 0.1875rem)'; } .was-validated .form-select:valid, .form-select.is-valid { border-color: @global-success-background; } .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size="1"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size="1"] { padding-right: 4.125rem; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); // Gray Dark 800 background-position: right 0.75rem center, center right 2.25rem; background-size: 16px 12px, ~'calc(0.75em + 0.375rem)' ~'calc(0.75em + 0.375rem)'; } .was-validated .form-select:valid:focus, .form-select.is-valid:focus { border-color: @global-success-background; box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated .form-check-input:valid, .form-check-input.is-valid { border-color: @global-success-background; } .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked { background-color: @global-success-background; } .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus { box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); } .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { color: @global-success-background; } .form-check-inline .form-check-input ~ .valid-feedback { margin-left: 0.5em; } .was-validated .input-group .form-control:valid, .input-group .form-control.is-valid, .was-validated .input-group .form-select:valid, .input-group .form-select.is-valid { z-index: 1; } .was-validated .input-group .form-control:valid:focus, .input-group .form-control.is-valid:focus, .was-validated .input-group .form-select:valid:focus, .input-group .form-select.is-valid:focus { z-index: 3; } .invalid-feedback { display: none; width: 100%; margin-top: 0.25rem; font-size: 0.875em; color: @global-danger-background; } .invalid-tooltip { position: absolute; top: 100%; z-index: 5; display: none; max-width: 100%; padding: 0.25rem 0.5rem; margin-top: 0.1rem; font-size: 0.875rem; color: @global-inverse-color; background-color: rgba(220, 53, 69, 0.9); border-radius: 0.25rem; } .was-validated :invalid ~ .invalid-feedback, .was-validated :invalid ~ .invalid-tooltip, .is-invalid ~ .invalid-feedback, .is-invalid ~ .invalid-tooltip { display: block; } .was-validated .form-control:invalid, .form-control.is-invalid { border-color: @global-danger-background; padding-right: ~'calc(1.5em + 0.75rem)'; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); background-repeat: no-repeat; background-position: right ~'calc(0.375em + 0.1875rem)' center; background-size: ~'calc(0.75em + 0.375rem)' ~'calc(0.75em + 0.375rem)'; } .was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { border-color: @global-danger-background; box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { padding-right: ~'calc(1.5em + 0.75rem)'; background-position: top ~'calc(0.375em + 0.1875rem)' right ~'calc(0.375em + 0.1875rem)'; } .was-validated .form-select:invalid, .form-select.is-invalid { border-color: @global-danger-background; } .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size="1"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size="1"] { padding-right: 4.125rem; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e"), url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e"); // Gray Dark 800 background-position: right 0.75rem center, center right 2.25rem; background-size: 16px 12px, ~'calc(0.75em + 0.375rem)' ~'calc(0.75em + 0.375rem)'; } .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus { border-color: @global-danger-background; box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated .form-check-input:invalid, .form-check-input.is-invalid { border-color: @global-danger-background; } .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked { background-color: @global-danger-background; } .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus { box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); } .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { color: @global-danger-background; } .form-check-inline .form-check-input ~ .invalid-feedback { margin-left: 0.5em; } .was-validated .input-group .form-control:invalid, .input-group .form-control.is-invalid, .was-validated .input-group .form-select:invalid, .input-group .form-select.is-invalid { z-index: 2; } .was-validated .input-group .form-control:invalid:focus, .input-group .form-control.is-invalid:focus, .was-validated .input-group .form-select:invalid:focus, .input-group .form-select.is-invalid:focus { z-index: 3; } .btn:extend(.uk-button all) {} .btn-primary:extend(.uk-button-primary all) {} .btn-secondary:extend(.uk-button-secondary all) {} .btn-danger:extend(.uk-button-danger all) {} .btn-link:extend(.uk-button-link all) {} .btn-info:extend(.uk-button-primary all) {} .btn-success:extend(.uk-button-primary all) {} .btn-warning:extend(.uk-button-danger all) {} .btn-light:extend(.uk-button-default all) {} .btn-dark:extend(.uk-button-secondary all) {} .btn-check:checked + .btn:extend(.uk-button.uk-active all) {} .btn-check:checked + .btn-primary:extend(.uk-button-primary.uk-active all) {} .btn-check:checked + .btn-secondary:extend(.uk-button-secondary.uk-active all) {} .btn-check:checked + .btn-danger:extend(.uk-button-danger.uk-active all) {} .btn[class*="btn-outline-"] { background: none; border: @global-border-width solid transparent; } .btn.btn-outline-primary { color: @global-primary-background; border-color: @global-primary-background; } .btn.btn-outline-primary:hover, .btn.btn-outline-primary:focus, .btn-outline-primary:active, .btn-outline-primary.active, .btn-check:checked + .btn-outline-primary { color: @global-inverse-color; background-color: @global-primary-background; border-color: @global-primary-background; } .btn.btn-outline-primary:disabled, .btn.btn-outline-primary.disabled { color: @global-primary-background; background-color: transparent; } .btn.btn-outline-secondary { color: @global-muted-color; // Gray 600 border-color: @global-muted-color; // Gray 600 } .btn.btn-outline-secondary:hover, .btn.btn-outline-secondary:focus, .btn-outline-secondary:active, .btn-outline-secondary.active, .btn-check:checked + .btn-outline-secondary { color: @global-inverse-color; background-color: @global-muted-color; // Gray 600 border-color: @global-muted-color; // Gray 600 } .btn.btn-outline-secondary:disabled, .btn.btn-outline-secondary.disabled { color: @global-muted-color; // Gray 600 background-color: transparent; } .btn.btn-outline-success { color: @global-success-background; border-color: @global-success-background; } .btn.btn-outline-success:hover, .btn.btn-outline-success:focus, .btn-outline-success:active, .btn-outline-success.active, .btn-check:checked + .btn-outline-success { color: @global-inverse-color; background-color: @global-success-background; border-color: @global-success-background; } .btn.btn-outline-success:disabled, .btn.btn-outline-success.disabled { color: @global-success-background; background-color: transparent; } .btn.btn-outline-info { color: @global-primary-background; // Info Color border-color: @global-primary-background; // Info Color } .btn.btn-outline-info:hover, .btn.btn-outline-info:focus, .btn-outline-info:active, .btn-outline-info.active, .btn-check:checked + .btn-outline-info { color: #000; background-color: @global-primary-background; // Info Color border-color: @global-primary-background; // Info Color } .btn.btn-outline-info:disabled, .btn.btn-outline-info.disabled { color: @global-primary-background; // Info Color background-color: transparent; } .btn.btn-outline-warning { color: @global-warning-background; border-color: @global-warning-background; } .btn.btn-outline-warning:hover, .btn.btn-outline-warning:focus, .btn-outline-warning:active, .btn-outline-warning.active, .btn-check:checked + .btn-outline-warning { color: #000; background-color: @global-warning-background; border-color: @global-warning-background; } .btn.btn-outline-warning:disabled, .btn.btn-outline-warning.disabled { color: @global-warning-background; background-color: transparent; } .btn.btn-outline-danger { color: @global-danger-background; border-color: @global-danger-background; } .btn.btn-outline-danger:hover, .btn.btn-outline-danger:focus, .btn-outline-danger:active, .btn-outline-danger.active, .btn-check:checked + .btn-outline-danger { color: @global-inverse-color; background-color: @global-danger-background; border-color: @global-danger-background; } .btn.btn-outline-danger:disabled, .btn.btn-outline-danger.disabled { color: @global-danger-background; background-color: transparent; } .btn.btn-outline-light { color: #f8f9fa; // Gray 100 border-color: #f8f9fa; // Gray 100 } .btn.btn-outline-light:hover, .btn.btn-outline-light:focus, .btn-outline-light:active, .btn-outline-light.active, .btn-check:checked + .btn-outline-light { color: #000; background-color: #f8f9fa; // Gray 100 border-color: #f8f9fa; // Gray 100 } .btn.btn-outline-light:disabled, .btn.btn-outline-light.disabled { color: #f8f9fa; // Gray 100 background-color: transparent; } .btn.btn-outline-dark { color: #212529; // Gray 900 border-color: #212529; // Gray 900 } .btn.btn-outline-dark:hover, .btn.btn-outline-dark:focus, .btn-outline-light:active, .btn-outline-light.active, .btn-check:checked + .btn-outline-light { color: @global-inverse-color; background-color: #212529; // Gray 900 border-color: #212529; // Gray 900 } .btn.btn-outline-dark:disabled, .btn.btn-outline-dark.disabled { color: #212529; // Gray 900 background-color: transparent; } .btn-sm:extend(.uk-button-small all) {} .btn-lg:extend(.uk-button-large all) {} .fade { transition: opacity 0.15s linear; } @media (prefers-reduced-motion: reduce) { .fade { transition: none; } } .fade:not(.show) { opacity: 0; } .collapse:not(.show) { display: none; } .collapsing { height: 0; overflow: hidden; transition: height 0.35s ease; } @media (prefers-reduced-motion: reduce) { .collapsing { transition: none; } } .collapsing.collapse-horizontal { width: 0; height: auto; transition: width 0.35s ease; } @media (prefers-reduced-motion: reduce) { .collapsing.collapse-horizontal { transition: none; } } .dropup, .dropend, .dropdown, .dropstart { position: relative; } .dropdown-toggle { white-space: nowrap; } .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid; border-right: 0.3em solid transparent; border-bottom: 0; border-left: 0.3em solid transparent; } .dropdown-toggle:empty::after { margin-left: 0; } .dropdown-menu { position: absolute; z-index: 1000; display: none; min-width: 10rem; padding: 0.5rem 0; margin: 0; font-size: 1rem; color: @global-color; // Gray 900 text-align: left; list-style: none; background-color: @global-background; background-clip: padding-box; border: @global-border-width solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .dropdown-menu[data-bs-popper] { top: 100%; left: 0; margin-top: 0.125rem; } .dropdown-menu-start { --bs-position: start; } .dropdown-menu-start[data-bs-popper] { right: auto; left: 0; } .dropdown-menu-end { --bs-position: end; } .dropdown-menu-end[data-bs-popper] { right: 0; left: auto; } @media (min-width: 576px) { .dropdown-menu-sm-start { --bs-position: start; } .dropdown-menu-sm-start[data-bs-popper] { right: auto; left: 0; } .dropdown-menu-sm-end { --bs-position: end; } .dropdown-menu-sm-end[data-bs-popper] { right: 0; left: auto; } } @media (min-width: 768px) { .dropdown-menu-md-start { --bs-position: start; } .dropdown-menu-md-start[data-bs-popper] { right: auto; left: 0; } .dropdown-menu-md-end { --bs-position: end; } .dropdown-menu-md-end[data-bs-popper] { right: 0; left: auto; } } @media (min-width: 992px) { .dropdown-menu-lg-start { --bs-position: start; } .dropdown-menu-lg-start[data-bs-popper] { right: auto; left: 0; } .dropdown-menu-lg-end { --bs-position: end; } .dropdown-menu-lg-end[data-bs-popper] { right: 0; left: auto; } } @media (min-width: 1200px) { .dropdown-menu-xl-start { --bs-position: start; } .dropdown-menu-xl-start[data-bs-popper] { right: auto; left: 0; } .dropdown-menu-xl-end { --bs-position: end; } .dropdown-menu-xl-end[data-bs-popper] { right: 0; left: auto; } } @media (min-width: 1400px) { .dropdown-menu-xxl-start { --bs-position: start; } .dropdown-menu-xxl-start[data-bs-popper] { right: auto; left: 0; } .dropdown-menu-xxl-end { --bs-position: end; } .dropdown-menu-xxl-end[data-bs-popper] { right: 0; left: auto; } } .dropup .dropdown-menu[data-bs-popper] { top: auto; bottom: 100%; margin-top: 0; margin-bottom: 0.125rem; } .dropup .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0; border-right: 0.3em solid transparent; border-bottom: 0.3em solid; border-left: 0.3em solid transparent; } .dropup .dropdown-toggle:empty::after { margin-left: 0; } .dropend .dropdown-menu[data-bs-popper] { top: 0; right: auto; left: 100%; margin-top: 0; margin-left: 0.125rem; } .dropend .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0; border-bottom: 0.3em solid transparent; border-left: 0.3em solid; } .dropend .dropdown-toggle:empty::after { margin-left: 0; } .dropend .dropdown-toggle::after { vertical-align: 0; } .dropstart .dropdown-menu[data-bs-popper] { top: 0; right: 100%; left: auto; margin-top: 0; margin-right: 0.125rem; } .dropstart .dropdown-toggle::after { display: inline-block; margin-left: 0.255em; vertical-align: 0.255em; content: ""; } .dropstart .dropdown-toggle::after { display: none; } .dropstart .dropdown-toggle::before { display: inline-block; margin-right: 0.255em; vertical-align: 0.255em; content: ""; border-top: 0.3em solid transparent; border-right: 0.3em solid; border-bottom: 0.3em solid transparent; } .dropstart .dropdown-toggle:empty::after { margin-left: 0; } .dropstart .dropdown-toggle::before { vertical-align: 0; } .dropdown-divider { height: 0; margin: 0.5rem 0; overflow: hidden; border-top: @global-border-width solid rgba(0, 0, 0, 0.15); } .dropdown-item { display: block; width: 100%; padding: 0.25rem 1rem; clear: both; font-weight: 400; color: @global-color; // Gray 900 text-align: inherit; text-decoration: none; white-space: nowrap; background-color: transparent; border: 0; } .dropdown-item:hover, .dropdown-item:focus { color: #1e2125; background-color: #e9ecef; // Gray 200 } .dropdown-item.active, .dropdown-item:active { color: @global-inverse-color; text-decoration: none; background-color: @global-primary-background; } .dropdown-item.disabled, .dropdown-item:disabled { color: #adb5bd; // Gray 500 pointer-events: none; background-color: transparent; } .dropdown-menu.show { display: block; } .dropdown-header { display: block; padding: 0.5rem 1rem; margin-bottom: 0; font-size: 0.875rem; color: @global-muted-color; // Gray 600 white-space: nowrap; } .dropdown-item-text { display: block; padding: 0.25rem 1rem; color: @global-color; // Gray 900 } .dropdown-menu-dark { color: #dee2e6; // Gray 300 background-color: #343a40; // Gray Dark 800 border-color: rgba(0, 0, 0, 0.15); } .dropdown-menu-dark .dropdown-item { color: #dee2e6; // Gray 300 } .dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus { color: @global-inverse-color; background-color: rgba(255, 255, 255, 0.15); } .dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active { color: @global-inverse-color; background-color: @global-primary-background; } .dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled { color: #adb5bd; // Gray 500 } .dropdown-menu-dark .dropdown-divider { border-color: rgba(0, 0, 0, 0.15); } .dropdown-menu-dark .dropdown-item-text { color: #dee2e6; // Gray 300 } .dropdown-menu-dark .dropdown-header { color: #adb5bd; // Gray 500 } .btn-group:extend(.uk-button-group) {} .hook-button-misc() when not (@button-border-width = 0) { .btn-group > .btn:nth-child(n+2), .btn-group > div:nth-child(n+2) .btn { margin-left: -@button-border-width; } .btn-group .btn:hover, .btn-group .btn:focus, .btn-group .btn:active, .btn-group .btn.active { position: relative; z-index: 1; } } .hook-button-misc() when not (@button-border-radius = 0) { .btn-group > .btn:not(:first-child):not(:last-child), .btn-group > div:not(:first-child):not(:last-child) .btn { border-radius: 0; } .btn-group > .btn:first-child, .btn-group > div:first-child .btn { border-top-right-radius: 0; border-bottom-right-radius: 0; } .btn-group > .btn:last-child, .btn-group > div:last-child .btn { border-top-left-radius: 0; border-bottom-left-radius: 0; } } .btn-group-vertical { position: relative; display: inline-flex; vertical-align: middle; } .btn-group-vertical > .btn { position: relative; flex: 1 1 auto; } .btn-group-vertical > .btn-check:checked + .btn, .btn-group-vertical > .btn-check:focus + .btn, .btn-group-vertical > .btn:hover, .btn-group-vertical > .btn:focus, .btn-group-vertical > .btn:active, .btn-group-vertical > .btn.active { z-index: 1; } .btn-toolbar { display: flex; flex-wrap: wrap; justify-content: flex-start; } .btn-toolbar .input-group { width: auto; } .dropdown-toggle-split { padding-right: 0.5625rem; padding-left: 0.5625rem; } .dropdown-toggle-split::after, .dropup .dropdown-toggle-split::after, .dropend .dropdown-toggle-split::after { margin-left: 0; } .dropstart .dropdown-toggle-split::before { margin-right: 0; } .btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { padding-right: 0.375rem; padding-left: 0.375rem; } .btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { padding-right: 0.75rem; padding-left: 0.75rem; } .btn-group-vertical { flex-direction: column; align-items: flex-start; justify-content: center; } .btn-group-vertical > .btn, .btn-group-vertical > .btn-group { width: 100%; } .btn-group-vertical > .btn:not(:first-child), .btn-group-vertical > .btn-group:not(:first-child) { margin-top: -@global-border-width; } .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .btn-group-vertical > .btn-group:not(:last-child) > .btn { border-bottom-right-radius: 0; border-bottom-left-radius: 0; } .btn-group-vertical > .btn ~ .btn, .btn-group-vertical > .btn-group:not(:first-child) > .btn { border-top-left-radius: 0; border-top-right-radius: 0; } .nav { display: flex; flex-wrap: wrap; padding-left: 0; margin-bottom: 0; list-style: none; } .nav-link { display: block; padding: 0.5rem 1rem; color: @global-primary-background; text-decoration: none; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .nav-link { transition: none; } } .nav-link:hover, .nav-link:focus { color: #0a58ca; } .nav-link.disabled { color: @global-muted-color; // Gray 600 pointer-events: none; cursor: default; } .nav-tabs { border-bottom: @global-border-width solid @global-border; // Gray 300 } .nav-tabs .nav-link { margin-bottom: -@global-border-width; background: none; border: @global-border-width solid transparent; border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { border-color: @global-border @global-border @global-border; // Gray 200 Gray 200 Gray 300 isolation: isolate; } .nav-tabs .nav-link.disabled { color: @global-muted-color; // Gray 600 background-color: transparent; border-color: transparent; } .nav-tabs .nav-link.active, .nav-tabs .nav-item.show .nav-link { color: @global-color; // Gray 700 background-color: @global-background; border-color: @global-border @global-border @global-inverse-color; // Gray 300 Gray 300 White } .nav-tabs .dropdown-menu { margin-top: -@global-border-width; border-top-left-radius: 0; border-top-right-radius: 0; } .nav-pills .nav-link { background: none; border: 0; border-radius: 0.25rem; } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: @global-inverse-color; background-color: @global-primary-background; } .nav-fill > .nav-link, .nav-fill .nav-item { flex: 1 1 auto; text-align: center; } .nav-justified > .nav-link, .nav-justified .nav-item { flex-basis: 0; flex-grow: 1; text-align: center; } .nav-fill .nav-item .nav-link, .nav-justified .nav-item .nav-link { width: 100%; } .tab-content > .tab-pane { display: none; } .tab-content > .active { display: block; } .navbar { position: relative; display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar > .container, .navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl { display: flex; flex-wrap: inherit; align-items: center; justify-content: space-between; } .navbar-brand { padding-top: 0.3125rem; padding-bottom: 0.3125rem; margin-right: 1rem; font-size: 1.25rem; text-decoration: none; white-space: nowrap; } .navbar-nav { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; list-style: none; } .navbar-nav .nav-link { padding-right: 0; padding-left: 0; } .navbar-nav .dropdown-menu { position: static; } .navbar-text { padding-top: 0.5rem; padding-bottom: 0.5rem; } .navbar-collapse { flex-basis: 100%; flex-grow: 1; align-items: center; } .navbar-toggler { padding: 0.25rem 0.75rem; font-size: 1.25rem; line-height: 1; background-color: transparent; border: @global-border-width solid transparent; border-radius: 0.25rem; transition: box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .navbar-toggler { transition: none; } } .navbar-toggler:hover { text-decoration: none; } .navbar-toggler:focus { text-decoration: none; outline: 0; box-shadow: 0 0 0 0.25rem; } .navbar-toggler-icon { display: inline-block; width: 1.5em; height: 1.5em; vertical-align: middle; background-repeat: no-repeat; background-position: center; background-size: 100%; } .navbar-nav-scroll { max-height: var(--bs-scroll-height, 75vh); overflow-y: auto; } @media (min-width: 576px) { .navbar-expand-sm { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-sm .navbar-nav { flex-direction: row; } .navbar-expand-sm .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-sm .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-sm .navbar-nav-scroll { overflow: visible; } .navbar-expand-sm .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-sm .navbar-toggler { display: none; } .navbar-expand-sm .offcanvas-header { display: none; } .navbar-expand-sm .offcanvas { position: inherit; bottom: 0; z-index: 1000; flex-grow: 1; visibility: visible !important; background-color: transparent; border-right: 0; border-left: 0; transition: none; transform: none; } .navbar-expand-sm .offcanvas-top, .navbar-expand-sm .offcanvas-bottom { height: auto; border-top: 0; border-bottom: 0; } .navbar-expand-sm .offcanvas-body { display: flex; flex-grow: 0; padding: 0; overflow-y: visible; } } @media (min-width: 768px) { .navbar-expand-md { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-md .navbar-nav { flex-direction: row; } .navbar-expand-md .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-md .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-md .navbar-nav-scroll { overflow: visible; } .navbar-expand-md .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-md .navbar-toggler { display: none; } .navbar-expand-md .offcanvas-header { display: none; } .navbar-expand-md .offcanvas { position: inherit; bottom: 0; z-index: 1000; flex-grow: 1; visibility: visible !important; background-color: transparent; border-right: 0; border-left: 0; transition: none; transform: none; } .navbar-expand-md .offcanvas-top, .navbar-expand-md .offcanvas-bottom { height: auto; border-top: 0; border-bottom: 0; } .navbar-expand-md .offcanvas-body { display: flex; flex-grow: 0; padding: 0; overflow-y: visible; } } @media (min-width: 992px) { .navbar-expand-lg { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-lg .navbar-nav { flex-direction: row; } .navbar-expand-lg .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-lg .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-lg .navbar-nav-scroll { overflow: visible; } .navbar-expand-lg .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-lg .navbar-toggler { display: none; } .navbar-expand-lg .offcanvas-header { display: none; } .navbar-expand-lg .offcanvas { position: inherit; bottom: 0; z-index: 1000; flex-grow: 1; visibility: visible !important; background-color: transparent; border-right: 0; border-left: 0; transition: none; transform: none; } .navbar-expand-lg .offcanvas-top, .navbar-expand-lg .offcanvas-bottom { height: auto; border-top: 0; border-bottom: 0; } .navbar-expand-lg .offcanvas-body { display: flex; flex-grow: 0; padding: 0; overflow-y: visible; } } @media (min-width: 1200px) { .navbar-expand-xl { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-xl .navbar-nav { flex-direction: row; } .navbar-expand-xl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xl .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-xl .navbar-nav-scroll { overflow: visible; } .navbar-expand-xl .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-xl .navbar-toggler { display: none; } .navbar-expand-xl .offcanvas-header { display: none; } .navbar-expand-xl .offcanvas { position: inherit; bottom: 0; z-index: 1000; flex-grow: 1; visibility: visible !important; background-color: transparent; border-right: 0; border-left: 0; transition: none; transform: none; } .navbar-expand-xl .offcanvas-top, .navbar-expand-xl .offcanvas-bottom { height: auto; border-top: 0; border-bottom: 0; } .navbar-expand-xl .offcanvas-body { display: flex; flex-grow: 0; padding: 0; overflow-y: visible; } } @media (min-width: 1400px) { .navbar-expand-xxl { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand-xxl .navbar-nav { flex-direction: row; } .navbar-expand-xxl .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand-xxl .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand-xxl .navbar-nav-scroll { overflow: visible; } .navbar-expand-xxl .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand-xxl .navbar-toggler { display: none; } .navbar-expand-xxl .offcanvas-header { display: none; } .navbar-expand-xxl .offcanvas { position: inherit; bottom: 0; z-index: 1000; flex-grow: 1; visibility: visible !important; background-color: transparent; border-right: 0; border-left: 0; transition: none; transform: none; } .navbar-expand-xxl .offcanvas-top, .navbar-expand-xxl .offcanvas-bottom { height: auto; border-top: 0; border-bottom: 0; } .navbar-expand-xxl .offcanvas-body { display: flex; flex-grow: 0; padding: 0; overflow-y: visible; } } .navbar-expand { flex-wrap: nowrap; justify-content: flex-start; } .navbar-expand .navbar-nav { flex-direction: row; } .navbar-expand .navbar-nav .dropdown-menu { position: absolute; } .navbar-expand .navbar-nav .nav-link { padding-right: 0.5rem; padding-left: 0.5rem; } .navbar-expand .navbar-nav-scroll { overflow: visible; } .navbar-expand .navbar-collapse { display: flex !important; flex-basis: auto; } .navbar-expand .navbar-toggler { display: none; } .navbar-expand .offcanvas-header { display: none; } .navbar-expand .offcanvas { position: inherit; bottom: 0; z-index: 1000; flex-grow: 1; visibility: visible !important; background-color: transparent; border-right: 0; border-left: 0; transition: none; transform: none; } .navbar-expand .offcanvas-top, .navbar-expand .offcanvas-bottom { height: auto; border-top: 0; border-bottom: 0; } .navbar-expand .offcanvas-body { display: flex; flex-grow: 0; padding: 0; overflow-y: visible; } .navbar-light .navbar-brand { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-nav .nav-link { color: rgba(0, 0, 0, 0.55); } .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { color: rgba(0, 0, 0, 0.7); } .navbar-light .navbar-nav .nav-link.disabled { color: rgba(0, 0, 0, 0.3); } .navbar-light .navbar-nav .show > .nav-link, .navbar-light .navbar-nav .nav-link.active { color: rgba(0, 0, 0, 0.9); } .navbar-light .navbar-toggler { color: rgba(0, 0, 0, 0.55); border-color: rgba(0, 0, 0, 0.1); } .navbar-light .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-light .navbar-text { color: rgba(0, 0, 0, 0.55); } .navbar-light .navbar-text a, .navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { color: rgba(0, 0, 0, 0.9); } .navbar-dark .navbar-brand { color: @global-inverse-color; } .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { color: @global-inverse-color; } .navbar-dark .navbar-nav .nav-link { color: rgba(255, 255, 255, 0.55); } .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { color: rgba(255, 255, 255, 0.75); } .navbar-dark .navbar-nav .nav-link.disabled { color: rgba(255, 255, 255, 0.25); } .navbar-dark .navbar-nav .show > .nav-link, .navbar-dark .navbar-nav .nav-link.active { color: @global-inverse-color; } .navbar-dark .navbar-toggler { color: rgba(255, 255, 255, 0.55); border-color: rgba(255, 255, 255, 0.1); } .navbar-dark .navbar-toggler-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); } .navbar-dark .navbar-text { color: rgba(255, 255, 255, 0.55); } .navbar-dark .navbar-text a, .navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { color: @global-inverse-color; } .card { position: relative; display: flex; flex-direction: column; min-width: 0; word-wrap: break-word; background-color: @global-background; background-clip: border-box; border: @global-border-width solid rgba(0, 0, 0, 0.125); border-radius: 0.25rem; } .card > hr { margin-right: 0; margin-left: 0; } .card > .list-group { border-top: inherit; border-bottom: inherit; } .card > .list-group:first-child { border-top-width: 0; border-top-left-radius: ~'calc(0.25rem - @{global-border-width})'; border-top-right-radius: ~'calc(0.25rem - @{global-border-width})'; } .card > .list-group:last-child { border-bottom-width: 0; border-bottom-right-radius: ~'calc(0.25rem - @{global-border-width})'; border-bottom-left-radius: ~'calc(0.25rem - @{global-border-width})'; } .card > .card-header + .list-group, .card > .list-group + .card-footer { border-top: 0; } .card-body { flex: 1 1 auto; padding: 1rem 1rem; } .card-title { margin-bottom: 0.5rem; } .card-subtitle { margin-top: -0.25rem; margin-bottom: 0; } .card-text:last-child { margin-bottom: 0; } .card-link + .card-link { margin-left: 1rem; } .card-header { padding: 0.5rem 1rem; margin-bottom: 0; background-color: rgba(0, 0, 0, 0.03); border-bottom: @global-border-width solid rgba(0, 0, 0, 0.125); } .card-header:first-child { border-radius: ~'calc(0.25rem - @{global-border-width})' ~'calc(0.25rem - @{global-border-width})' 0 0; } .card-footer { padding: 0.5rem 1rem; background-color: rgba(0, 0, 0, 0.03); border-top: @global-border-width solid rgba(0, 0, 0, 0.125); } .card-footer:last-child { border-radius: 0 0 ~'calc(0.25rem - @{global-border-width})' ~'calc(0.25rem - @{global-border-width})'; } .card-header-tabs { margin-right: -0.5rem; margin-bottom: -0.5rem; margin-left: -0.5rem; border-bottom: 0; } .card-header-pills { margin-right: -0.5rem; margin-left: -0.5rem; } .card-img-overlay { position: absolute; top: 0; right: 0; bottom: 0; left: 0; padding: 1rem; border-radius: ~'calc(0.25rem - @{global-border-width})'; } .card-img, .card-img-top, .card-img-bottom { width: 100%; } .card-img, .card-img-top { border-top-left-radius: ~'calc(0.25rem - @{global-border-width})'; border-top-right-radius: ~'calc(0.25rem - @{global-border-width})'; } .card-img, .card-img-bottom { border-bottom-right-radius: ~'calc(0.25rem - @{global-border-width})'; border-bottom-left-radius: ~'calc(0.25rem - @{global-border-width})'; } .card-group > .card { margin-bottom: 0.75rem; } @media (min-width: 576px) { .card-group { display: flex; flex-flow: row wrap; } .card-group > .card { flex: 1 0 0%; margin-bottom: 0; } .card-group > .card + .card { margin-left: 0; border-left: 0; } .card-group > .card:not(:last-child) { border-top-right-radius: 0; border-bottom-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-top, .card-group > .card:not(:last-child) .card-header { border-top-right-radius: 0; } .card-group > .card:not(:last-child) .card-img-bottom, .card-group > .card:not(:last-child) .card-footer { border-bottom-right-radius: 0; } .card-group > .card:not(:first-child) { border-top-left-radius: 0; border-bottom-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-top, .card-group > .card:not(:first-child) .card-header { border-top-left-radius: 0; } .card-group > .card:not(:first-child) .card-img-bottom, .card-group > .card:not(:first-child) .card-footer { border-bottom-left-radius: 0; } } .accordion-button { position: relative; display: flex; align-items: center; width: 100%; padding: 1rem 1.25rem; font-size: 1rem; color: @global-color; // Gray 900 text-align: left; background-color: @global-background; border: 0; border-radius: 0; overflow-anchor: none; transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; } @media (prefers-reduced-motion: reduce) { .accordion-button { transition: none; } } .accordion-button:not(.collapsed) { color: #0c63e4; background-color: #e7f1ff; box-shadow: inset 0 -@global-border-width 0 rgba(0, 0, 0, 0.125); } .accordion-button:not(.collapsed)::after { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); transform: rotate(-180deg); } .accordion-button::after { flex-shrink: 0; width: 1.25rem; height: 1.25rem; margin-left: auto; content: ""; background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); // Gray 900 background-repeat: no-repeat; background-size: 1.25rem; transition: transform 0.2s ease-in-out; } @media (prefers-reduced-motion: reduce) { .accordion-button::after { transition: none; } } .accordion-button:hover { z-index: 2; } .accordion-button:focus { z-index: 3; border-color: #86b7fe; outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .accordion-header { margin-bottom: 0; } .accordion-item { background-color: @global-background; border: @global-border-width solid rgba(0, 0, 0, 0.125); } .accordion-item:first-of-type { border-top-left-radius: 0.25rem; border-top-right-radius: 0.25rem; } .accordion-item:first-of-type .accordion-button { border-top-left-radius: ~'calc(0.25rem - @{global-border-width})'; border-top-right-radius: ~'calc(0.25rem - @{global-border-width})'; } .accordion-item:not(:first-of-type) { border-top: 0; } .accordion-item:last-of-type { border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .accordion-item:last-of-type .accordion-button.collapsed { border-bottom-right-radius: ~'calc(0.25rem - @{global-border-width})'; border-bottom-left-radius: ~'calc(0.25rem - @{global-border-width})'; } .accordion-item:last-of-type .accordion-collapse { border-bottom-right-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .accordion-body { padding: 1rem 1.25rem; } .accordion-flush .accordion-collapse { border-width: 0; } .accordion-flush .accordion-item { border-right: 0; border-left: 0; border-radius: 0; } .accordion-flush .accordion-item:first-child { border-top: 0; } .accordion-flush .accordion-item:last-child { border-bottom: 0; } .accordion-flush .accordion-item .accordion-button { border-radius: 0; } .breadcrumb { display: flex; flex-wrap: wrap; padding: 0 0; margin-bottom: 1rem; list-style: none; } .breadcrumb-item + .breadcrumb-item { padding-left: 0.5rem; } .breadcrumb-item + .breadcrumb-item::before { float: left; padding-right: 0.5rem; color: @global-muted-color; // Gray 600 content: var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */; } .breadcrumb-item.active { color: @global-muted-color; // Gray 600 } .pagination { display: flex; padding-left: 0; list-style: none; } .page-link { position: relative; display: block; color: @global-primary-background; text-decoration: none; background-color: @global-background; border: @global-border-width solid @global-border; // Gray 300 transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; } @media (prefers-reduced-motion: reduce) { .page-link { transition: none; } } .page-link:hover { z-index: 2; color: #0a58ca; background-color: #e9ecef; // Gray 200 border-color: @global-border; // Gray 300 } .page-link:focus { z-index: 3; color: #0a58ca; background-color: #e9ecef; // Gray 200 outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); } .page-item:not(:first-child) .page-link { margin-left: -@global-border-width; } .page-item.active .page-link { z-index: 3; color: @global-inverse-color; background-color: @global-primary-background; border-color: @global-primary-background; } .page-item.disabled .page-link { color: @global-muted-color; // Gray 600 pointer-events: none; background-color: @global-background; border-color: @global-border; // Gray 300 } .page-link { padding: 0.375rem 0.75rem; } .page-item:first-child .page-link { border-top-left-radius: 0.25rem; border-bottom-left-radius: 0.25rem; } .page-item:last-child .page-link { border-top-right-radius: 0.25rem; border-bottom-right-radius: 0.25rem; } .pagination-lg .page-link { padding: 0.75rem 1.5rem; font-size: 1.25rem; } .pagination-lg .page-item:first-child .page-link { border-top-left-radius: 0.3rem; border-bottom-left-radius: 0.3rem; } .pagination-lg .page-item:last-child .page-link { border-top-right-radius: 0.3rem; border-bottom-right-radius: 0.3rem; } .pagination-sm .page-link { padding: 0.25rem 0.5rem; font-size: 0.875rem; } .pagination-sm .page-item:first-child .page-link { border-top-left-radius: 0.2rem; border-bottom-left-radius: 0.2rem; } .pagination-sm .page-item:last-child .page-link { border-top-right-radius: 0.2rem; border-bottom-right-radius: 0.2rem; } .badge { display: inline-block; padding: 0.35em 0.65em; font-size: 0.75em; font-weight: 700; line-height: 1; color: @global-inverse-color; text-align: center; white-space: nowrap; vertical-align: baseline; border-radius: 0.25rem; } .badge:empty { display: none; } .btn .badge { position: relative; top: -@global-border-width; } .alert { position: relative; padding: 1rem 1rem; margin-bottom: 1rem; border: @global-border-width solid transparent; border-radius: 0.25rem; } .alert-heading { color: inherit; } .alert-link { font-weight: 700; } .alert-dismissible { padding-right: 3rem; } .alert-dismissible .btn-close { position: absolute; top: 0; right: 0; z-index: 2; padding: 1.25rem 1rem; } .alert-primary { color: #084298; background-color: #cfe2ff; border-color: #b6d4fe; } .alert-primary .alert-link { color: #06357a; } .alert-secondary { color: #41464b; background-color: #e2e3e5; border-color: #d3d6d8; } .alert-secondary .alert-link { color: #34383c; } .alert-success { color: #0f5132; background-color: #d1e7dd; border-color: #badbcc; } .alert-success .alert-link { color: #0c4128; } .alert-info { color: #055160; background-color: #cff4fc; border-color: #b6effb; } .alert-info .alert-link { color: #04414d; } .alert-warning { color: #664d03; background-color: #fff3cd; border-color: #ffecb5; } .alert-warning .alert-link { color: #523e02; } .alert-danger { color: #842029; background-color: #f8d7da; border-color: #f5c2c7; } .alert-danger .alert-link { color: #6a1a21; } .alert-light { color: #636464; background-color: #fefefe; border-color: #fdfdfe; } .alert-light .alert-link { color: #4f5050; } .alert-dark { color: #141619; background-color: #d3d3d4; border-color: #bcbebf; } .alert-dark .alert-link { color: #101214; } @-webkit-keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } @keyframes progress-bar-stripes { 0% { background-position-x: 1rem; } } .progress { display: flex; height: 1rem; overflow: hidden; font-size: 0.75rem; background-color: #e9ecef; // Gray 200 border-radius: 0.25rem; } .progress-bar { display: flex; flex-direction: column; justify-content: center; overflow: hidden; color: @global-inverse-color; text-align: center; white-space: nowrap; background-color: @global-primary-background; transition: width 0.6s ease; } @media (prefers-reduced-motion: reduce) { .progress-bar { transition: none; } } .progress-bar-striped { background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 1rem 1rem; } .progress-bar-animated { -webkit-animation: 1s linear infinite progress-bar-stripes; animation: 1s linear infinite progress-bar-stripes; } @media (prefers-reduced-motion: reduce) { .progress-bar-animated { -webkit-animation: none; animation: none; } } .list-group { display: flex; flex-direction: column; padding-left: 0; margin-bottom: 0; border-radius: 0.25rem; } .list-group-numbered { list-style-type: none; counter-reset: section; } .list-group-numbered > li::before { content: counters(section, ".") ". "; counter-increment: section; } .list-group-item-action { width: 100%; color: @global-color; // Gray 700 text-align: inherit; } .list-group-item-action:hover, .list-group-item-action:focus { z-index: 1; color: @global-color; // Gray 700 text-decoration: none; background-color: #f8f9fa; // Gray 100 } .list-group-item-action:active { color: @global-color; // Gray 900 background-color: #e9ecef; // Gray 200 } .list-group-item { position: relative; display: block; padding: 0.5rem 1rem; color: @global-color; // Gray 900 text-decoration: none; background-color: @global-background; border: @global-border-width solid rgba(0, 0, 0, 0.125); } .list-group-item:first-child { border-top-left-radius: inherit; border-top-right-radius: inherit; } .list-group-item:last-child { border-bottom-right-radius: inherit; border-bottom-left-radius: inherit; } .list-group-item.disabled, .list-group-item:disabled { color: @global-muted-color; // Gray 600 pointer-events: none; background-color: @global-background; } .list-group-item.active { z-index: 2; color: @global-inverse-color; background-color: @global-primary-background; border-color: @global-primary-background; } .list-group-item + .list-group-item { border-top-width: 0; } .list-group-item + .list-group-item.active { margin-top: -@global-border-width; border-top-width: @global-border-width; } .list-group-horizontal { flex-direction: row; } .list-group-horizontal > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal > .list-group-item.active { margin-top: 0; } .list-group-horizontal > .list-group-item + .list-group-item { border-top-width: @global-border-width; border-left-width: 0; } .list-group-horizontal > .list-group-item + .list-group-item.active { margin-left: -@global-border-width; border-left-width: @global-border-width; } @media (min-width: 576px) { .list-group-horizontal-sm { flex-direction: row; } .list-group-horizontal-sm > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-sm > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-sm > .list-group-item.active { margin-top: 0; } .list-group-horizontal-sm > .list-group-item + .list-group-item { border-top-width: @global-border-width; border-left-width: 0; } .list-group-horizontal-sm > .list-group-item + .list-group-item.active { margin-left: -@global-border-width; border-left-width: @global-border-width; } } @media (min-width: 768px) { .list-group-horizontal-md { flex-direction: row; } .list-group-horizontal-md > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-md > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-md > .list-group-item.active { margin-top: 0; } .list-group-horizontal-md > .list-group-item + .list-group-item { border-top-width: @global-border-width; border-left-width: 0; } .list-group-horizontal-md > .list-group-item + .list-group-item.active { margin-left: -@global-border-width; border-left-width: @global-border-width; } } @media (min-width: 992px) { .list-group-horizontal-lg { flex-direction: row; } .list-group-horizontal-lg > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-lg > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-lg > .list-group-item.active { margin-top: 0; } .list-group-horizontal-lg > .list-group-item + .list-group-item { border-top-width: @global-border-width; border-left-width: 0; } .list-group-horizontal-lg > .list-group-item + .list-group-item.active { margin-left: -@global-border-width; border-left-width: @global-border-width; } } @media (min-width: 1200px) { .list-group-horizontal-xl { flex-direction: row; } .list-group-horizontal-xl > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-xl > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-xl > .list-group-item.active { margin-top: 0; } .list-group-horizontal-xl > .list-group-item + .list-group-item { border-top-width: @global-border-width; border-left-width: 0; } .list-group-horizontal-xl > .list-group-item + .list-group-item.active { margin-left: -@global-border-width; border-left-width: @global-border-width; } } @media (min-width: 1400px) { .list-group-horizontal-xxl { flex-direction: row; } .list-group-horizontal-xxl > .list-group-item:first-child { border-bottom-left-radius: 0.25rem; border-top-right-radius: 0; } .list-group-horizontal-xxl > .list-group-item:last-child { border-top-right-radius: 0.25rem; border-bottom-left-radius: 0; } .list-group-horizontal-xxl > .list-group-item.active { margin-top: 0; } .list-group-horizontal-xxl > .list-group-item + .list-group-item { border-top-width: @global-border-width; border-left-width: 0; } .list-group-horizontal-xxl > .list-group-item + .list-group-item.active { margin-left: -@global-border-width; border-left-width: @global-border-width; } } .list-group-flush { border-radius: 0; } .list-group-flush > .list-group-item { border-width: 0 0 @global-border-width; } .list-group-flush > .list-group-item:last-child { border-bottom-width: 0; } .list-group-item-primary { color: #084298; background-color: #cfe2ff; } .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { color: #084298; background-color: #bacbe6; } .list-group-item-primary.list-group-item-action.active { color: @global-inverse-color; background-color: #084298; border-color: #084298; } .list-group-item-secondary { color: #41464b; background-color: #e2e3e5; } .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { color: #41464b; background-color: #cbccce; } .list-group-item-secondary.list-group-item-action.active { color: @global-inverse-color; background-color: #41464b; border-color: #41464b; } .list-group-item-success { color: #0f5132; background-color: #d1e7dd; } .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { color: #0f5132; background-color: #bcd0c7; } .list-group-item-success.list-group-item-action.active { color: @global-inverse-color; background-color: #0f5132; border-color: #0f5132; } .list-group-item-info { color: #055160; background-color: #cff4fc; } .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { color: #055160; background-color: #badce3; } .list-group-item-info.list-group-item-action.active { color: @global-inverse-color; background-color: #055160; border-color: #055160; } .list-group-item-warning { color: #664d03; background-color: #fff3cd; } .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { color: #664d03; background-color: #e6dbb9; } .list-group-item-warning.list-group-item-action.active { color: @global-inverse-color; background-color: #664d03; border-color: #664d03; } .list-group-item-danger { color: #842029; background-color: #f8d7da; } .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { color: #842029; background-color: #dfc2c4; } .list-group-item-danger.list-group-item-action.active { color: @global-inverse-color; background-color: #842029; border-color: #842029; } .list-group-item-light { color: #636464; background-color: #fefefe; } .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { color: #636464; background-color: #e5e5e5; } .list-group-item-light.list-group-item-action.active { color: @global-inverse-color; background-color: #636464; border-color: #636464; } .list-group-item-dark { color: #141619; background-color: #d3d3d4; } .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { color: #141619; background-color: #bebebf; } .list-group-item-dark.list-group-item-action.active { color: @global-inverse-color; background-color: #141619; border-color: #141619; } .btn-close { box-sizing: content-box; width: 1em; height: 1em; padding: 0.25em 0.25em; color: #000; background: transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat; border: 0; border-radius: 0.25rem; opacity: 0.5; } .btn-close:hover { color: #000; text-decoration: none; opacity: 0.75; } .btn-close:focus { outline: 0; box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); opacity: 1; } .btn-close:disabled, .btn-close.disabled { pointer-events: none; -webkit-user-select: none; -moz-user-select: none; user-select: none; opacity: 0.25; } .btn-close-white { filter: invert(1) grayscale(100%) brightness(200%); } .toast { width: 350px; max-width: 100%; font-size: 0.875rem; pointer-events: auto; background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border: @global-border-width solid rgba(0, 0, 0, 0.1); box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15); border-radius: 0.25rem; } .toast.showing { opacity: 0; } .toast:not(.show) { display: none; } .toast-container { width: -webkit-max-content; width: -moz-max-content; width: max-content; max-width: 100%; pointer-events: none; } .toast-container > :not(:last-child) { margin-bottom: 0.75rem; } .toast-header { display: flex; align-items: center; padding: 0.5rem 0.75rem; color: @global-muted-color; // Gray 600 background-color: rgba(255, 255, 255, 0.85); background-clip: padding-box; border-bottom: @global-border-width solid rgba(0, 0, 0, 0.05); border-top-left-radius: ~'calc(0.25rem - @{global-border-width})'; border-top-right-radius: ~'calc(0.25rem - @{global-border-width})'; } .toast-header .btn-close { margin-right: -0.375rem; margin-left: 0.75rem; } .toast-body { padding: 0.75rem; word-wrap: break-word; } .modal { position: fixed; top: 0; left: 0; z-index: 1055; display: none; width: 100%; height: 100%; overflow-x: hidden; overflow-y: auto; outline: 0; } .modal-dialog { position: relative; width: auto; margin: 0.5rem; pointer-events: none; } .modal.fade .modal-dialog { transition: transform 0.3s ease-out; transform: translate(0, -50px); } @media (prefers-reduced-motion: reduce) { .modal.fade .modal-dialog { transition: none; } } .modal.show .modal-dialog { transform: none; } .modal.modal-static .modal-dialog { transform: scale(1.02); } .modal-dialog-scrollable { height: ~'calc(100% - 1rem)'; } .modal-dialog-scrollable .modal-content { max-height: 100%; overflow: hidden; } .modal-dialog-scrollable .modal-body { overflow-y: auto; } .modal-dialog-centered { display: flex; align-items: center; min-height: ~'calc(100% - 1rem)'; } .modal-content { position: relative; display: flex; flex-direction: column; width: 100%; pointer-events: auto; background-color: @global-background; background-clip: padding-box; border: @global-border-width solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; outline: 0; } .modal-backdrop { position: fixed; top: 0; left: 0; z-index: 1050; width: 100vw; height: 100vh; background-color: #000; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop.show { opacity: 0.5; } .modal-header { display: flex; flex-shrink: 0; align-items: center; justify-content: space-between; padding: 1rem 1rem; border-bottom: @global-border-width solid @global-border; // Gray 300 border-top-left-radius: ~'calc(0.3rem - @{global-border-width})'; border-top-right-radius: ~'calc(0.3rem - @{global-border-width})'; } .modal-header .btn-close { padding: 0.5rem 0.5rem; margin: -0.5rem -0.5rem -0.5rem auto; } .modal-title { margin-bottom: 0; line-height: 1.5; } .modal-body { position: relative; flex: 1 1 auto; padding: 1rem; } .modal-footer { display: flex; flex-wrap: wrap; flex-shrink: 0; align-items: center; justify-content: flex-end; padding: 0.75rem; border-top: @global-border-width solid @global-border; // Gray 300 border-bottom-right-radius: ~'calc(0.3rem - @{global-border-width})'; border-bottom-left-radius: ~'calc(0.3rem - @{global-border-width})'; } .modal-footer > * { margin: 0.25rem !important; // `important` needed to override UIkit } @media (min-width: 576px) { .modal-dialog { max-width: 500px; margin: 1.75rem auto; } .modal-dialog-scrollable { height: ~'calc(100% - 3.5rem)'; } .modal-dialog-centered { min-height: ~'calc(100% - 3.5rem)'; } .modal-sm { max-width: 300px; } } @media (min-width: 992px) { .modal-lg, .modal-xl { max-width: 800px; } } @media (min-width: 1200px) { .modal-xl { max-width: 1140px; } } .modal-fullscreen { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen .modal-header { border-radius: 0; } .modal-fullscreen .modal-body { overflow-y: auto; } .modal-fullscreen .modal-footer { border-radius: 0; } @media (max-width: 575.98px) { .modal-fullscreen-sm-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-sm-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-sm-down .modal-header { border-radius: 0; } .modal-fullscreen-sm-down .modal-body { overflow-y: auto; } .modal-fullscreen-sm-down .modal-footer { border-radius: 0; } } @media (max-width: 767.98px) { .modal-fullscreen-md-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-md-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-md-down .modal-header { border-radius: 0; } .modal-fullscreen-md-down .modal-body { overflow-y: auto; } .modal-fullscreen-md-down .modal-footer { border-radius: 0; } } @media (max-width: 991.98px) { .modal-fullscreen-lg-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-lg-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-lg-down .modal-header { border-radius: 0; } .modal-fullscreen-lg-down .modal-body { overflow-y: auto; } .modal-fullscreen-lg-down .modal-footer { border-radius: 0; } } @media (max-width: 1199.98px) { .modal-fullscreen-xl-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-xl-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-xl-down .modal-header { border-radius: 0; } .modal-fullscreen-xl-down .modal-body { overflow-y: auto; } .modal-fullscreen-xl-down .modal-footer { border-radius: 0; } } @media (max-width: 1399.98px) { .modal-fullscreen-xxl-down { width: 100vw; max-width: none; height: 100%; margin: 0; } .modal-fullscreen-xxl-down .modal-content { height: 100%; border: 0; border-radius: 0; } .modal-fullscreen-xxl-down .modal-header { border-radius: 0; } .modal-fullscreen-xxl-down .modal-body { overflow-y: auto; } .modal-fullscreen-xxl-down .modal-footer { border-radius: 0; } } .tooltip { position: absolute; z-index: 1080; display: block; margin: 0; font-family: var(--bs-font-sans-serif); font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; opacity: 0; } .tooltip.show { opacity: 0.9; } .tooltip .tooltip-arrow { position: absolute; display: block; width: 0.8rem; height: 0.4rem; } .tooltip .tooltip-arrow::before { position: absolute; content: ""; border-color: transparent; border-style: solid; } .bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=top] { padding: 0.4rem 0; } .bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow { bottom: 0; } .bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before { top: -@global-border-width; border-width: 0.4rem 0.4rem 0; border-top-color: #000; } .bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=right] { padding: 0 0.4rem; } .bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow { left: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before { right: -@global-border-width; border-width: 0.4rem 0.4rem 0.4rem 0; border-right-color: #000; } .bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=bottom] { padding: 0.4rem 0; } .bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow { top: 0; } .bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before { bottom: -@global-border-width; border-width: 0 0.4rem 0.4rem; border-bottom-color: #000; } .bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=left] { padding: 0 0.4rem; } .bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow { right: 0; width: 0.4rem; height: 0.8rem; } .bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before { left: -@global-border-width; border-width: 0.4rem 0 0.4rem 0.4rem; border-left-color: #000; } .tooltip-inner { max-width: 200px; padding: 0.25rem 0.5rem; color: @global-inverse-color; text-align: center; background-color: #000; border-radius: 0.25rem; } .popover { position: absolute; top: 0; left: 0 /* rtl:ignore */; z-index: 1070; display: block; max-width: 276px; font-family: var(--bs-font-sans-serif); font-style: normal; font-weight: 400; line-height: 1.5; text-align: left; text-align: start; text-decoration: none; text-shadow: none; text-transform: none; letter-spacing: normal; word-break: normal; word-spacing: normal; white-space: normal; line-break: auto; font-size: 0.875rem; word-wrap: break-word; background-color: @global-background; background-clip: padding-box; border: @global-border-width solid rgba(0, 0, 0, 0.2); border-radius: 0.3rem; } .popover .popover-arrow { position: absolute; display: block; width: 1rem; height: 0.5rem; } .popover .popover-arrow::before, .popover .popover-arrow::after { position: absolute; display: block; content: ""; border-color: transparent; border-style: solid; } .bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow { bottom: ~'calc(-0.5rem - @{global-border-width})'; } .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::before { bottom: 0; border-width: 0.5rem 0.5rem 0; border-top-color: rgba(0, 0, 0, 0.25); } .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=top] > .popover-arrow::after { bottom: @global-border-width; border-width: 0.5rem 0.5rem 0; border-top-color: @global-inverse-color; } .bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow { left: ~'calc(-0.5rem - @{global-border-width})'; width: 0.5rem; height: 1rem; } .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::before { left: 0; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: rgba(0, 0, 0, 0.25); } .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=right] > .popover-arrow::after { left: @global-border-width; border-width: 0.5rem 0.5rem 0.5rem 0; border-right-color: @global-inverse-color; } .bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow { top: ~'calc(-0.5rem - @{global-border-width})'; } .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::before { top: 0; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: rgba(0, 0, 0, 0.25); } .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=bottom] > .popover-arrow::after { top: @global-border-width; border-width: 0 0.5rem 0.5rem 0.5rem; border-bottom-color: @global-inverse-color; } .bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=bottom] .popover-header::before { position: absolute; top: 0; left: 50%; display: block; width: 1rem; margin-left: -0.5rem; content: ""; border-bottom: @global-border-width solid #f0f0f0; } .bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow { right: ~'calc(-0.5rem - @{global-border-width})'; width: 0.5rem; height: 1rem; } .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::before { right: 0; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: rgba(0, 0, 0, 0.25); } .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=left] > .popover-arrow::after { right: @global-border-width; border-width: 0.5rem 0 0.5rem 0.5rem; border-left-color: @global-inverse-color; } .popover-header { padding: 0.5rem 1rem; margin-bottom: 0; font-size: 1rem; background-color: #f0f0f0; border-bottom: @global-border-width solid rgba(0, 0, 0, 0.2); border-top-left-radius: ~'calc(0.3rem - @{global-border-width})'; border-top-right-radius: ~'calc(0.3rem - @{global-border-width})'; } .popover-header:empty { display: none; } .popover-body { padding: 1rem 1rem; color: @global-color; // Gray 900 } .carousel { position: relative; } .carousel.pointer-event { touch-action: pan-y; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner::after { display: block; clear: both; content: ""; } .carousel-item { position: relative; display: none; float: left; width: 100%; margin-right: -100%; -webkit-backface-visibility: hidden; backface-visibility: hidden; transition: transform 0.6s ease-in-out; } @media (prefers-reduced-motion: reduce) { .carousel-item { transition: none; } } .carousel-item.active, .carousel-item-next, .carousel-item-prev { display: block; } /* rtl:begin:ignore */ .carousel-item-next:not(.carousel-item-start), .active.carousel-item-end { transform: translateX(100%); } .carousel-item-prev:not(.carousel-item-end), .active.carousel-item-start { transform: translateX(-100%); } /* rtl:end:ignore */ .carousel-fade .carousel-item { opacity: 0; transition-property: opacity; transform: none; } .carousel-fade .carousel-item.active, .carousel-fade .carousel-item-next.carousel-item-start, .carousel-fade .carousel-item-prev.carousel-item-end { z-index: 1; opacity: 1; } .carousel-fade .active.carousel-item-start, .carousel-fade .active.carousel-item-end { z-index: 0; opacity: 0; transition: opacity 0s 0.6s; } @media (prefers-reduced-motion: reduce) { .carousel-fade .active.carousel-item-start, .carousel-fade .active.carousel-item-end { transition: none; } } .carousel-control-prev, .carousel-control-next { position: absolute; top: 0; bottom: 0; z-index: 1; display: flex; align-items: center; justify-content: center; width: 15%; padding: 0; color: @global-inverse-color; text-align: center; background: none; border: 0; opacity: 0.5; transition: opacity 0.15s ease; } @media (prefers-reduced-motion: reduce) { .carousel-control-prev, .carousel-control-next { transition: none; } } .carousel-control-prev:hover, .carousel-control-prev:focus, .carousel-control-next:hover, .carousel-control-next:focus { color: @global-inverse-color; text-decoration: none; outline: 0; opacity: 0.9; } .carousel-control-prev { left: 0; } .carousel-control-next { right: 0; } .carousel-control-prev-icon, .carousel-control-next-icon { display: inline-block; width: 2rem; height: 2rem; background-repeat: no-repeat; background-position: 50%; background-size: 100% 100%; } /* rtl:options: { "autoRename": true, "stringMap":[ { "name" : "prev-next", "search" : "prev", "replace" : "next" } ] } */ .carousel-control-prev-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e"); } .carousel-control-next-icon { background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e"); } .carousel-indicators { position: absolute; right: 0; bottom: 0; left: 0; z-index: 2; display: flex; justify-content: center; padding: 0; margin-right: 15%; margin-bottom: 1rem; margin-left: 15%; list-style: none; } .carousel-indicators [data-bs-target] { box-sizing: content-box; flex: 0 1 auto; width: 30px; height: 3px; padding: 0; margin-right: 3px; margin-left: 3px; text-indent: -999px; cursor: pointer; background-color: @global-background; background-clip: padding-box; border: 0; border-top: 10px solid transparent; border-bottom: 10px solid transparent; opacity: 0.5; transition: opacity 0.6s ease; } @media (prefers-reduced-motion: reduce) { .carousel-indicators [data-bs-target] { transition: none; } } .carousel-indicators .active { opacity: 1; } .carousel-caption { position: absolute; right: 15%; bottom: 1.25rem; left: 15%; padding-top: 1.25rem; padding-bottom: 1.25rem; color: @global-inverse-color; text-align: center; } .carousel-dark .carousel-control-prev-icon, .carousel-dark .carousel-control-next-icon { filter: invert(1) grayscale(100); } .carousel-dark .carousel-indicators [data-bs-target] { background-color: #000; } .carousel-dark .carousel-caption { color: #000; } @-webkit-keyframes spinner-border { to { transform: rotate(360deg) /* rtl:ignore */; } } @keyframes spinner-border { to { transform: rotate(360deg) /* rtl:ignore */; } } .spinner-border { display: inline-block; width: 2rem; height: 2rem; vertical-align: -0.125em; border: 0.25em solid currentColor; border-right-color: transparent; border-radius: 50%; -webkit-animation: 0.75s linear infinite spinner-border; animation: 0.75s linear infinite spinner-border; } .spinner-border-sm { width: 1rem; height: 1rem; border-width: 0.2em; } @-webkit-keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } @keyframes spinner-grow { 0% { transform: scale(0); } 50% { opacity: 1; transform: none; } } .spinner-grow { display: inline-block; width: 2rem; height: 2rem; vertical-align: -0.125em; background-color: currentColor; border-radius: 50%; opacity: 0; -webkit-animation: 0.75s linear infinite spinner-grow; animation: 0.75s linear infinite spinner-grow; } .spinner-grow-sm { width: 1rem; height: 1rem; } @media (prefers-reduced-motion: reduce) { .spinner-border, .spinner-grow { -webkit-animation-duration: 1.5s; animation-duration: 1.5s; } } .offcanvas { position: fixed; bottom: 0; z-index: 1045; display: flex; flex-direction: column; max-width: 100%; visibility: hidden; background-color: @global-background; background-clip: padding-box; outline: 0; transition: transform 0.3s ease-in-out; } @media (prefers-reduced-motion: reduce) { .offcanvas { transition: none; } } .offcanvas-backdrop { position: fixed; top: 0; left: 0; z-index: 1040; width: 100vw; height: 100vh; background-color: #000; } .offcanvas-backdrop.fade { opacity: 0; } .offcanvas-backdrop.show { opacity: 0.5; } .offcanvas-header { display: flex; align-items: center; justify-content: space-between; padding: 1rem 1rem; } .offcanvas-header .btn-close { padding: 0.5rem 0.5rem; margin-top: -0.5rem; margin-right: -0.5rem; margin-bottom: -0.5rem; } .offcanvas-title { margin-bottom: 0; line-height: 1.5; } .offcanvas-body { flex-grow: 1; padding: 1rem 1rem; overflow-y: auto; } .offcanvas-start { top: 0; left: 0; width: 400px; border-right: @global-border-width solid rgba(0, 0, 0, 0.2); transform: translateX(-100%); } .offcanvas-end { top: 0; right: 0; width: 400px; border-left: @global-border-width solid rgba(0, 0, 0, 0.2); transform: translateX(100%); } .offcanvas-top { top: 0; right: 0; left: 0; height: 30vh; max-height: 100%; border-bottom: @global-border-width solid rgba(0, 0, 0, 0.2); transform: translateY(-100%); } .offcanvas-bottom { right: 0; left: 0; height: 30vh; max-height: 100%; border-top: @global-border-width solid rgba(0, 0, 0, 0.2); transform: translateY(100%); } .offcanvas.show { transform: none; } .placeholder { display: inline-block; min-height: 1em; vertical-align: middle; cursor: wait; background-color: currentColor; opacity: 0.5; } .placeholder.btn::before { display: inline-block; content: ""; } .placeholder-xs { min-height: 0.6em; } .placeholder-sm { min-height: 0.8em; } .placeholder-lg { min-height: 1.2em; } .placeholder-glow .placeholder { -webkit-animation: placeholder-glow 2s ease-in-out infinite; animation: placeholder-glow 2s ease-in-out infinite; } @-webkit-keyframes placeholder-glow { 50% { opacity: 0.2; } } @keyframes placeholder-glow { 50% { opacity: 0.2; } } .placeholder-wave { -webkit-mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); mask-image: linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%); -webkit-mask-size: 200% 100%; mask-size: 200% 100%; -webkit-animation: placeholder-wave 2s linear infinite; animation: placeholder-wave 2s linear infinite; } @-webkit-keyframes placeholder-wave { 100% { -webkit-mask-position: -200% 0%; mask-position: -200% 0%; } } @keyframes placeholder-wave { 100% { -webkit-mask-position: -200% 0%; mask-position: -200% 0%; } } .clearfix::after { display: block; clear: both; content: ""; } .link-primary { color: @global-primary-background; } .link-primary:hover, .link-primary:focus { color: #0a58ca; } .link-secondary { color: @global-secondary-background; // Gray 600 } .link-secondary:hover, .link-secondary:focus { color: #565e64; } .link-success { color: @global-success-background; } .link-success:hover, .link-success:focus { color: #146c43; } .link-info { color: @global-primary-background; // Info Color } .link-info:hover, .link-info:focus { color: #3dd5f3; } .link-warning { color: @global-warning-background; } .link-warning:hover, .link-warning:focus { color: #ffcd39; } .link-danger { color: @global-danger-background; } .link-danger:hover, .link-danger:focus { color: #b02a37; } .link-light { color: #f8f9fa; // Gray 100 } .link-light:hover, .link-light:focus { color: #f9fafb; } .link-dark { color: #212529; // Gray 900 } .link-dark:hover, .link-dark:focus { color: #1a1e21; } .ratio { position: relative; width: 100%; } .ratio::before { display: block; padding-top: var(--bs-aspect-ratio); content: ""; } .ratio > * { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } .ratio-1x1 { --bs-aspect-ratio: 100%; } .ratio-4x3 { --bs-aspect-ratio: ~'calc(3 / 4 * 100%)'; } .ratio-16x9 { --bs-aspect-ratio: ~'calc(9 / 16 * 100%)'; } .ratio-21x9 { --bs-aspect-ratio: ~'calc(9 / 21 * 100%)'; } .fixed-top { position: fixed; top: 0; right: 0; left: 0; z-index: 1030; } .fixed-bottom { position: fixed; right: 0; bottom: 0; left: 0; z-index: 1030; } .sticky-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } @media (min-width: 576px) { .sticky-sm-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 768px) { .sticky-md-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 992px) { .sticky-lg-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 1200px) { .sticky-xl-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } @media (min-width: 1400px) { .sticky-xxl-top { position: -webkit-sticky; position: sticky; top: 0; z-index: 1020; } } .hstack { display: flex; flex-direction: row; align-items: center; align-self: stretch; } .vstack { display: flex; flex: 1 1 auto; flex-direction: column; align-self: stretch; } .visually-hidden, .visually-hidden-focusable:not(:focus):not(:focus-within) { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; } .stretched-link::after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: 1; content: ""; } .text-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .vr { display: inline-block; align-self: stretch; width: 1px; min-height: 1em; background-color: currentColor; opacity: 0.25; } .align-baseline { vertical-align: baseline !important; } .align-top { vertical-align: top !important; } .align-middle { vertical-align: middle !important; } .align-bottom { vertical-align: bottom !important; } .align-text-bottom { vertical-align: text-bottom !important; } .align-text-top { vertical-align: text-top !important; } .float-start { float: left !important; } .float-end { float: right !important; } .float-none { float: none !important; } .opacity-0 { opacity: 0 !important; } .opacity-25 { opacity: 0.25 !important; } .opacity-50 { opacity: 0.5 !important; } .opacity-75 { opacity: 0.75 !important; } .opacity-100 { opacity: 1 !important; } .overflow-auto { overflow: auto !important; } .overflow-hidden { overflow: hidden !important; } .overflow-visible { overflow: visible !important; } .overflow-scroll { overflow: scroll !important; } .d-inline { display: inline !important; } .d-inline-block { display: inline-block !important; } .d-block { display: block !important; } .d-grid { display: grid !important; } .d-table { display: table !important; } .d-table-row { display: table-row !important; } .d-table-cell { display: table-cell !important; } .d-flex { display: flex !important; } .d-inline-flex { display: inline-flex !important; } .d-none { display: none !important; } .shadow { box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; } .shadow-sm { box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; } .shadow-lg { box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; } .shadow-none { box-shadow: none !important; } .position-static { position: static !important; } .position-relative { position: relative !important; } .position-absolute { position: absolute !important; } .position-fixed { position: fixed !important; } .position-sticky { position: -webkit-sticky !important; position: sticky !important; } .top-0 { top: 0 !important; } .top-50 { top: 50% !important; } .top-100 { top: 100% !important; } .bottom-0 { bottom: 0 !important; } .bottom-50 { bottom: 50% !important; } .bottom-100 { bottom: 100% !important; } .start-0 { left: 0 !important; } .start-50 { left: 50% !important; } .start-100 { left: 100% !important; } .end-0 { right: 0 !important; } .end-50 { right: 50% !important; } .end-100 { right: 100% !important; } .translate-middle { transform: translate(-50%, -50%) !important; } .translate-middle-x { transform: translateX(-50%) !important; } .translate-middle-y { transform: translateY(-50%) !important; } .border { border: @global-border-width solid @global-border !important; // Gray 300 } .border-0 { border: 0 !important; } .border-top { border-top: @global-border-width solid @global-border !important; // Gray 300 } .border-top-0 { border-top: 0 !important; } .border-end { border-right: @global-border-width solid @global-border !important; // Gray 300 } .border-end-0 { border-right: 0 !important; } .border-bottom { border-bottom: @global-border-width solid @global-border !important; // Gray 300 } .border-bottom-0 { border-bottom: 0 !important; } .border-start { border-left: @global-border-width solid @global-border !important; // Gray 300 } .border-start-0 { border-left: 0 !important; } .border-primary { border-color: @global-primary-background !important; } .border-secondary { border-color: @global-secondary-background !important; // Gray 600 } .border-success { border-color: @global-success-background !important; } .border-info { border-color: @global-primary-background !important; // Info Color } .border-warning { border-color: @global-warning-background !important; } .border-danger { border-color: @global-danger-background !important; } .border-light { border-color: #f8f9fa // Gray 100!important; } .border-dark { border-color: #212529 !important; // Gray 900 } .border-white { border-color: #fff !important; } .border-1 { border-width: @global-border-width !important; } .border-2 { border-width: ~'calc(2 * @{global-border-width})' !important; } .border-3 { border-width: ~'calc(3 * @{global-border-width})' !important; } .border-4 { border-width: ~'calc(4 * @{global-border-width})' !important; } .border-5 { border-width: ~'calc(5 * @{global-border-width})' !important; } .w-25 { width: 25% !important; } .w-50 { width: 50% !important; } .w-75 { width: 75% !important; } .w-100 { width: 100% !important; } .w-auto { width: auto !important; } .mw-100 { max-width: 100% !important; } .vw-100 { width: 100vw !important; } .min-vw-100 { min-width: 100vw !important; } .h-25 { height: 25% !important; } .h-50 { height: 50% !important; } .h-75 { height: 75% !important; } .h-100 { height: 100% !important; } .h-auto { height: auto !important; } .mh-100 { max-height: 100% !important; } .vh-100 { height: 100vh !important; } .min-vh-100 { min-height: 100vh !important; } .flex-fill { flex: 1 1 auto !important; } .flex-row { flex-direction: row !important; } .flex-column { flex-direction: column !important; } .flex-row-reverse { flex-direction: row-reverse !important; } .flex-column-reverse { flex-direction: column-reverse !important; } .flex-grow-0 { flex-grow: 0 !important; } .flex-grow-1 { flex-grow: 1 !important; } .flex-shrink-0 { flex-shrink: 0 !important; } .flex-shrink-1 { flex-shrink: 1 !important; } .flex-wrap { flex-wrap: wrap !important; } .flex-nowrap { flex-wrap: nowrap !important; } .flex-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-0 { gap: 0 !important; } .gap-1 { gap: 0.25rem !important; } .gap-2 { gap: 0.5rem !important; } .gap-3 { gap: 1rem !important; } .gap-4 { gap: 1.5rem !important; } .gap-5 { gap: 3rem !important; } .justify-content-start { justify-content: flex-start !important; } .justify-content-end { justify-content: flex-end !important; } .justify-content-center { justify-content: center !important; } .justify-content-between { justify-content: space-between !important; } .justify-content-around { justify-content: space-around !important; } .justify-content-evenly { justify-content: space-evenly !important; } .align-items-start { align-items: flex-start !important; } .align-items-end { align-items: flex-end !important; } .align-items-center { align-items: center !important; } .align-items-baseline { align-items: baseline !important; } .align-items-stretch { align-items: stretch !important; } .align-content-start { align-content: flex-start !important; } .align-content-end { align-content: flex-end !important; } .align-content-center { align-content: center !important; } .align-content-between { align-content: space-between !important; } .align-content-around { align-content: space-around !important; } .align-content-stretch { align-content: stretch !important; } .align-self-auto { align-self: auto !important; } .align-self-start { align-self: flex-start !important; } .align-self-end { align-self: flex-end !important; } .align-self-center { align-self: center !important; } .align-self-baseline { align-self: baseline !important; } .align-self-stretch { align-self: stretch !important; } .order-first { order: -1 !important; } .order-0 { order: 0 !important; } .order-1 { order: 1 !important; } .order-2 { order: 2 !important; } .order-3 { order: 3 !important; } .order-4 { order: 4 !important; } .order-5 { order: 5 !important; } .order-last { order: 6 !important; } .m-0 { margin: 0 !important; } .m-1 { margin: 0.25rem !important; } .m-2 { margin: 0.5rem !important; } .m-3 { margin: 1rem !important; } .m-4 { margin: 1.5rem !important; } .m-5 { margin: 3rem !important; } .m-auto { margin: auto !important; } .mx-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-auto { margin-right: auto !important; margin-left: auto !important; } .my-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-0 { margin-top: 0 !important; } .mt-1 { margin-top: 0.25rem !important; } .mt-2 { margin-top: 0.5rem !important; } .mt-3 { margin-top: 1rem !important; } .mt-4 { margin-top: 1.5rem !important; } .mt-5 { margin-top: 3rem !important; } .mt-auto { margin-top: auto !important; } .me-0 { margin-right: 0 !important; } .me-1 { margin-right: 0.25rem !important; } .me-2 { margin-right: 0.5rem !important; } .me-3 { margin-right: 1rem !important; } .me-4 { margin-right: 1.5rem !important; } .me-5 { margin-right: 3rem !important; } .me-auto { margin-right: auto !important; } .mb-0 { margin-bottom: 0 !important; } .mb-1 { margin-bottom: 0.25rem !important; } .mb-2 { margin-bottom: 0.5rem !important; } .mb-3 { margin-bottom: 1rem !important; } .mb-4 { margin-bottom: 1.5rem !important; } .mb-5 { margin-bottom: 3rem !important; } .mb-auto { margin-bottom: auto !important; } .ms-0 { margin-left: 0 !important; } .ms-1 { margin-left: 0.25rem !important; } .ms-2 { margin-left: 0.5rem !important; } .ms-3 { margin-left: 1rem !important; } .ms-4 { margin-left: 1.5rem !important; } .ms-5 { margin-left: 3rem !important; } .ms-auto { margin-left: auto !important; } .p-0 { padding: 0 !important; } .p-1 { padding: 0.25rem !important; } .p-2 { padding: 0.5rem !important; } .p-3 { padding: 1rem !important; } .p-4 { padding: 1.5rem !important; } .p-5 { padding: 3rem !important; } .px-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-0 { padding-top: 0 !important; } .pt-1 { padding-top: 0.25rem !important; } .pt-2 { padding-top: 0.5rem !important; } .pt-3 { padding-top: 1rem !important; } .pt-4 { padding-top: 1.5rem !important; } .pt-5 { padding-top: 3rem !important; } .pe-0 { padding-right: 0 !important; } .pe-1 { padding-right: 0.25rem !important; } .pe-2 { padding-right: 0.5rem !important; } .pe-3 { padding-right: 1rem !important; } .pe-4 { padding-right: 1.5rem !important; } .pe-5 { padding-right: 3rem !important; } .pb-0 { padding-bottom: 0 !important; } .pb-1 { padding-bottom: 0.25rem !important; } .pb-2 { padding-bottom: 0.5rem !important; } .pb-3 { padding-bottom: 1rem !important; } .pb-4 { padding-bottom: 1.5rem !important; } .pb-5 { padding-bottom: 3rem !important; } .ps-0 { padding-left: 0 !important; } .ps-1 { padding-left: 0.25rem !important; } .ps-2 { padding-left: 0.5rem !important; } .ps-3 { padding-left: 1rem !important; } .ps-4 { padding-left: 1.5rem !important; } .ps-5 { padding-left: 3rem !important; } .font-monospace { font-family: var(--bs-font-monospace) !important; } .fs-1 { font-size: ~'calc(1.375rem + 1.5vw)' !important; } .fs-2 { font-size: ~'calc(1.325rem + 0.9vw)' !important; } .fs-3 { font-size: ~'calc(1.3rem + 0.6vw)' !important; } .fs-4 { font-size: ~'calc(1.275rem + 0.3vw)' !important; } .fs-5 { font-size: 1.25rem !important; } .fs-6 { font-size: 1rem !important; } .fst-italic { font-style: italic !important; } .fst-normal { font-style: normal !important; } .fw-light { font-weight: 300 !important; } .fw-lighter { font-weight: lighter !important; } .fw-normal { font-weight: 400 !important; } .fw-bold { font-weight: 700 !important; } .fw-bolder { font-weight: bolder !important; } .lh-1 { line-height: 1 !important; } .lh-sm { line-height: 1.25 !important; } .lh-base { line-height: 1.5 !important; } .lh-lg { line-height: 2 !important; } .text-start { text-align: left !important; } .text-end { text-align: right !important; } .text-center { text-align: center !important; } .text-decoration-none { text-decoration: none !important; } .text-decoration-underline { text-decoration: underline !important; } .text-decoration-line-through { text-decoration: line-through !important; } .text-lowercase { text-transform: lowercase !important; } .text-uppercase { text-transform: uppercase !important; } .text-capitalize { text-transform: capitalize !important; } .text-wrap { white-space: normal !important; } .text-nowrap { white-space: nowrap !important; } /* rtl:begin:remove */ .text-break { word-wrap: break-word !important; word-break: break-word !important; } /* rtl:end:remove */ .text-primary { --bs-text-opacity: 1; color: ~'rgba(var(--bs-primary-rgb), var(--bs-text-opacity))' !important; } .text-secondary { --bs-text-opacity: 1; color: ~'rgba(var(--bs-secondary-rgb), var(--bs-text-opacity))' !important; } .text-success { --bs-text-opacity: 1; color: ~'rgba(var(--bs-success-rgb), var(--bs-text-opacity))' !important; } .text-info { --bs-text-opacity: 1; color: ~'rgba(var(--bs-info-rgb), var(--bs-text-opacity))' !important; } .text-warning { --bs-text-opacity: 1; color: ~'rgba(var(--bs-warning-rgb), var(--bs-text-opacity))' !important; } .text-danger { --bs-text-opacity: 1; color: ~'rgba(var(--bs-danger-rgb), var(--bs-text-opacity))' !important; } .text-light { --bs-text-opacity: 1; color: ~'rgba(var(--bs-light-rgb), var(--bs-text-opacity))' !important; } .text-dark { --bs-text-opacity: 1; color: ~'rgba(var(--bs-dark-rgb), var(--bs-text-opacity))' !important; } .text-black { --bs-text-opacity: 1; color: ~'rgba(var(--bs-black-rgb), var(--bs-text-opacity))' !important; } .text-white { --bs-text-opacity: 1; color: ~'rgba(var(--bs-white-rgb), var(--bs-text-opacity))' !important; } .text-body { --bs-text-opacity: 1; color: ~'rgba(var(--bs-body-color-rgb), var(--bs-text-opacity))' !important; } .text-muted { --bs-text-opacity: 1; color: @global-muted-color !important; // Gray 600 } .text-black-50 { --bs-text-opacity: 1; color: rgba(0, 0, 0, 0.5) !important; } .text-white-50 { --bs-text-opacity: 1; color: rgba(255, 255, 255, 0.5) !important; } .text-reset { --bs-text-opacity: 1; color: inherit !important; } .text-opacity-25 { --bs-text-opacity: 0.25; } .text-opacity-50 { --bs-text-opacity: 0.5; } .text-opacity-75 { --bs-text-opacity: 0.75; } .text-opacity-100 { --bs-text-opacity: 1; } .bg-primary { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-primary-rgb), var(--bs-bg-opacity))' !important; } .bg-secondary { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity))' !important; } .bg-success { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-success-rgb), var(--bs-bg-opacity))' !important; } .bg-info { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-info-rgb), var(--bs-bg-opacity))' !important; } .bg-warning { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-warning-rgb), var(--bs-bg-opacity))' !important; } .bg-danger { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-danger-rgb), var(--bs-bg-opacity))' !important; } .bg-light { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-light-rgb), var(--bs-bg-opacity))' !important; } .bg-dark { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-dark-rgb), var(--bs-bg-opacity))' !important; } .bg-black { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-black-rgb), var(--bs-bg-opacity))' !important; } .bg-white { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-white-rgb), var(--bs-bg-opacity))' !important; } .bg-body { --bs-bg-opacity: 1; background-color: ~'rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity))' !important; } .bg-transparent { --bs-bg-opacity: 1; background-color: transparent !important; } .bg-opacity-10 { --bs-bg-opacity: 0.1; } .bg-opacity-25 { --bs-bg-opacity: 0.25; } .bg-opacity-50 { --bs-bg-opacity: 0.5; } .bg-opacity-75 { --bs-bg-opacity: 0.75; } .bg-opacity-100 { --bs-bg-opacity: 1; } .bg-gradient { background-image: var(--bs-gradient) !important; } .user-select-all { -webkit-user-select: all !important; -moz-user-select: all !important; user-select: all !important; } .user-select-auto { -webkit-user-select: auto !important; -moz-user-select: auto !important; user-select: auto !important; } .user-select-none { -webkit-user-select: none !important; -moz-user-select: none !important; user-select: none !important; } .pe-none { pointer-events: none !important; } .pe-auto { pointer-events: auto !important; } .rounded { border-radius: 0.25rem !important; } .rounded-0 { border-radius: 0 !important; } .rounded-1 { border-radius: 0.2rem !important; } .rounded-2 { border-radius: 0.25rem !important; } .rounded-3 { border-radius: 0.3rem !important; } .rounded-circle { border-radius: 50% !important; } .rounded-pill { border-radius: 50rem !important; } .rounded-top { border-top-left-radius: 0.25rem !important; border-top-right-radius: 0.25rem !important; } .rounded-end { border-top-right-radius: 0.25rem !important; border-bottom-right-radius: 0.25rem !important; } .rounded-bottom { border-bottom-right-radius: 0.25rem !important; border-bottom-left-radius: 0.25rem !important; } .rounded-start { border-bottom-left-radius: 0.25rem !important; border-top-left-radius: 0.25rem !important; } .visible { visibility: visible !important; } .invisible { visibility: hidden !important; } @media (min-width: 576px) { .float-sm-start { float: left !important; } .float-sm-end { float: right !important; } .float-sm-none { float: none !important; } .d-sm-inline { display: inline !important; } .d-sm-inline-block { display: inline-block !important; } .d-sm-block { display: block !important; } .d-sm-grid { display: grid !important; } .d-sm-table { display: table !important; } .d-sm-table-row { display: table-row !important; } .d-sm-table-cell { display: table-cell !important; } .d-sm-flex { display: flex !important; } .d-sm-inline-flex { display: inline-flex !important; } .d-sm-none { display: none !important; } .flex-sm-fill { flex: 1 1 auto !important; } .flex-sm-row { flex-direction: row !important; } .flex-sm-column { flex-direction: column !important; } .flex-sm-row-reverse { flex-direction: row-reverse !important; } .flex-sm-column-reverse { flex-direction: column-reverse !important; } .flex-sm-grow-0 { flex-grow: 0 !important; } .flex-sm-grow-1 { flex-grow: 1 !important; } .flex-sm-shrink-0 { flex-shrink: 0 !important; } .flex-sm-shrink-1 { flex-shrink: 1 !important; } .flex-sm-wrap { flex-wrap: wrap !important; } .flex-sm-nowrap { flex-wrap: nowrap !important; } .flex-sm-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-sm-0 { gap: 0 !important; } .gap-sm-1 { gap: 0.25rem !important; } .gap-sm-2 { gap: 0.5rem !important; } .gap-sm-3 { gap: 1rem !important; } .gap-sm-4 { gap: 1.5rem !important; } .gap-sm-5 { gap: 3rem !important; } .justify-content-sm-start { justify-content: flex-start !important; } .justify-content-sm-end { justify-content: flex-end !important; } .justify-content-sm-center { justify-content: center !important; } .justify-content-sm-between { justify-content: space-between !important; } .justify-content-sm-around { justify-content: space-around !important; } .justify-content-sm-evenly { justify-content: space-evenly !important; } .align-items-sm-start { align-items: flex-start !important; } .align-items-sm-end { align-items: flex-end !important; } .align-items-sm-center { align-items: center !important; } .align-items-sm-baseline { align-items: baseline !important; } .align-items-sm-stretch { align-items: stretch !important; } .align-content-sm-start { align-content: flex-start !important; } .align-content-sm-end { align-content: flex-end !important; } .align-content-sm-center { align-content: center !important; } .align-content-sm-between { align-content: space-between !important; } .align-content-sm-around { align-content: space-around !important; } .align-content-sm-stretch { align-content: stretch !important; } .align-self-sm-auto { align-self: auto !important; } .align-self-sm-start { align-self: flex-start !important; } .align-self-sm-end { align-self: flex-end !important; } .align-self-sm-center { align-self: center !important; } .align-self-sm-baseline { align-self: baseline !important; } .align-self-sm-stretch { align-self: stretch !important; } .order-sm-first { order: -1 !important; } .order-sm-0 { order: 0 !important; } .order-sm-1 { order: 1 !important; } .order-sm-2 { order: 2 !important; } .order-sm-3 { order: 3 !important; } .order-sm-4 { order: 4 !important; } .order-sm-5 { order: 5 !important; } .order-sm-last { order: 6 !important; } .m-sm-0 { margin: 0 !important; } .m-sm-1 { margin: 0.25rem !important; } .m-sm-2 { margin: 0.5rem !important; } .m-sm-3 { margin: 1rem !important; } .m-sm-4 { margin: 1.5rem !important; } .m-sm-5 { margin: 3rem !important; } .m-sm-auto { margin: auto !important; } .mx-sm-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-sm-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-sm-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-sm-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-sm-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-sm-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-sm-auto { margin-right: auto !important; margin-left: auto !important; } .my-sm-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-sm-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-sm-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-sm-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-sm-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-sm-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-sm-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-sm-0 { margin-top: 0 !important; } .mt-sm-1 { margin-top: 0.25rem !important; } .mt-sm-2 { margin-top: 0.5rem !important; } .mt-sm-3 { margin-top: 1rem !important; } .mt-sm-4 { margin-top: 1.5rem !important; } .mt-sm-5 { margin-top: 3rem !important; } .mt-sm-auto { margin-top: auto !important; } .me-sm-0 { margin-right: 0 !important; } .me-sm-1 { margin-right: 0.25rem !important; } .me-sm-2 { margin-right: 0.5rem !important; } .me-sm-3 { margin-right: 1rem !important; } .me-sm-4 { margin-right: 1.5rem !important; } .me-sm-5 { margin-right: 3rem !important; } .me-sm-auto { margin-right: auto !important; } .mb-sm-0 { margin-bottom: 0 !important; } .mb-sm-1 { margin-bottom: 0.25rem !important; } .mb-sm-2 { margin-bottom: 0.5rem !important; } .mb-sm-3 { margin-bottom: 1rem !important; } .mb-sm-4 { margin-bottom: 1.5rem !important; } .mb-sm-5 { margin-bottom: 3rem !important; } .mb-sm-auto { margin-bottom: auto !important; } .ms-sm-0 { margin-left: 0 !important; } .ms-sm-1 { margin-left: 0.25rem !important; } .ms-sm-2 { margin-left: 0.5rem !important; } .ms-sm-3 { margin-left: 1rem !important; } .ms-sm-4 { margin-left: 1.5rem !important; } .ms-sm-5 { margin-left: 3rem !important; } .ms-sm-auto { margin-left: auto !important; } .p-sm-0 { padding: 0 !important; } .p-sm-1 { padding: 0.25rem !important; } .p-sm-2 { padding: 0.5rem !important; } .p-sm-3 { padding: 1rem !important; } .p-sm-4 { padding: 1.5rem !important; } .p-sm-5 { padding: 3rem !important; } .px-sm-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-sm-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-sm-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-sm-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-sm-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-sm-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-sm-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-sm-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-sm-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-sm-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-sm-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-sm-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-sm-0 { padding-top: 0 !important; } .pt-sm-1 { padding-top: 0.25rem !important; } .pt-sm-2 { padding-top: 0.5rem !important; } .pt-sm-3 { padding-top: 1rem !important; } .pt-sm-4 { padding-top: 1.5rem !important; } .pt-sm-5 { padding-top: 3rem !important; } .pe-sm-0 { padding-right: 0 !important; } .pe-sm-1 { padding-right: 0.25rem !important; } .pe-sm-2 { padding-right: 0.5rem !important; } .pe-sm-3 { padding-right: 1rem !important; } .pe-sm-4 { padding-right: 1.5rem !important; } .pe-sm-5 { padding-right: 3rem !important; } .pb-sm-0 { padding-bottom: 0 !important; } .pb-sm-1 { padding-bottom: 0.25rem !important; } .pb-sm-2 { padding-bottom: 0.5rem !important; } .pb-sm-3 { padding-bottom: 1rem !important; } .pb-sm-4 { padding-bottom: 1.5rem !important; } .pb-sm-5 { padding-bottom: 3rem !important; } .ps-sm-0 { padding-left: 0 !important; } .ps-sm-1 { padding-left: 0.25rem !important; } .ps-sm-2 { padding-left: 0.5rem !important; } .ps-sm-3 { padding-left: 1rem !important; } .ps-sm-4 { padding-left: 1.5rem !important; } .ps-sm-5 { padding-left: 3rem !important; } .text-sm-start { text-align: left !important; } .text-sm-end { text-align: right !important; } .text-sm-center { text-align: center !important; } } @media (min-width: 768px) { .float-md-start { float: left !important; } .float-md-end { float: right !important; } .float-md-none { float: none !important; } .d-md-inline { display: inline !important; } .d-md-inline-block { display: inline-block !important; } .d-md-block { display: block !important; } .d-md-grid { display: grid !important; } .d-md-table { display: table !important; } .d-md-table-row { display: table-row !important; } .d-md-table-cell { display: table-cell !important; } .d-md-flex { display: flex !important; } .d-md-inline-flex { display: inline-flex !important; } .d-md-none { display: none !important; } .flex-md-fill { flex: 1 1 auto !important; } .flex-md-row { flex-direction: row !important; } .flex-md-column { flex-direction: column !important; } .flex-md-row-reverse { flex-direction: row-reverse !important; } .flex-md-column-reverse { flex-direction: column-reverse !important; } .flex-md-grow-0 { flex-grow: 0 !important; } .flex-md-grow-1 { flex-grow: 1 !important; } .flex-md-shrink-0 { flex-shrink: 0 !important; } .flex-md-shrink-1 { flex-shrink: 1 !important; } .flex-md-wrap { flex-wrap: wrap !important; } .flex-md-nowrap { flex-wrap: nowrap !important; } .flex-md-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-md-0 { gap: 0 !important; } .gap-md-1 { gap: 0.25rem !important; } .gap-md-2 { gap: 0.5rem !important; } .gap-md-3 { gap: 1rem !important; } .gap-md-4 { gap: 1.5rem !important; } .gap-md-5 { gap: 3rem !important; } .justify-content-md-start { justify-content: flex-start !important; } .justify-content-md-end { justify-content: flex-end !important; } .justify-content-md-center { justify-content: center !important; } .justify-content-md-between { justify-content: space-between !important; } .justify-content-md-around { justify-content: space-around !important; } .justify-content-md-evenly { justify-content: space-evenly !important; } .align-items-md-start { align-items: flex-start !important; } .align-items-md-end { align-items: flex-end !important; } .align-items-md-center { align-items: center !important; } .align-items-md-baseline { align-items: baseline !important; } .align-items-md-stretch { align-items: stretch !important; } .align-content-md-start { align-content: flex-start !important; } .align-content-md-end { align-content: flex-end !important; } .align-content-md-center { align-content: center !important; } .align-content-md-between { align-content: space-between !important; } .align-content-md-around { align-content: space-around !important; } .align-content-md-stretch { align-content: stretch !important; } .align-self-md-auto { align-self: auto !important; } .align-self-md-start { align-self: flex-start !important; } .align-self-md-end { align-self: flex-end !important; } .align-self-md-center { align-self: center !important; } .align-self-md-baseline { align-self: baseline !important; } .align-self-md-stretch { align-self: stretch !important; } .order-md-first { order: -1 !important; } .order-md-0 { order: 0 !important; } .order-md-1 { order: 1 !important; } .order-md-2 { order: 2 !important; } .order-md-3 { order: 3 !important; } .order-md-4 { order: 4 !important; } .order-md-5 { order: 5 !important; } .order-md-last { order: 6 !important; } .m-md-0 { margin: 0 !important; } .m-md-1 { margin: 0.25rem !important; } .m-md-2 { margin: 0.5rem !important; } .m-md-3 { margin: 1rem !important; } .m-md-4 { margin: 1.5rem !important; } .m-md-5 { margin: 3rem !important; } .m-md-auto { margin: auto !important; } .mx-md-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-md-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-md-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-md-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-md-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-md-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-md-auto { margin-right: auto !important; margin-left: auto !important; } .my-md-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-md-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-md-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-md-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-md-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-md-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-md-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-md-0 { margin-top: 0 !important; } .mt-md-1 { margin-top: 0.25rem !important; } .mt-md-2 { margin-top: 0.5rem !important; } .mt-md-3 { margin-top: 1rem !important; } .mt-md-4 { margin-top: 1.5rem !important; } .mt-md-5 { margin-top: 3rem !important; } .mt-md-auto { margin-top: auto !important; } .me-md-0 { margin-right: 0 !important; } .me-md-1 { margin-right: 0.25rem !important; } .me-md-2 { margin-right: 0.5rem !important; } .me-md-3 { margin-right: 1rem !important; } .me-md-4 { margin-right: 1.5rem !important; } .me-md-5 { margin-right: 3rem !important; } .me-md-auto { margin-right: auto !important; } .mb-md-0 { margin-bottom: 0 !important; } .mb-md-1 { margin-bottom: 0.25rem !important; } .mb-md-2 { margin-bottom: 0.5rem !important; } .mb-md-3 { margin-bottom: 1rem !important; } .mb-md-4 { margin-bottom: 1.5rem !important; } .mb-md-5 { margin-bottom: 3rem !important; } .mb-md-auto { margin-bottom: auto !important; } .ms-md-0 { margin-left: 0 !important; } .ms-md-1 { margin-left: 0.25rem !important; } .ms-md-2 { margin-left: 0.5rem !important; } .ms-md-3 { margin-left: 1rem !important; } .ms-md-4 { margin-left: 1.5rem !important; } .ms-md-5 { margin-left: 3rem !important; } .ms-md-auto { margin-left: auto !important; } .p-md-0 { padding: 0 !important; } .p-md-1 { padding: 0.25rem !important; } .p-md-2 { padding: 0.5rem !important; } .p-md-3 { padding: 1rem !important; } .p-md-4 { padding: 1.5rem !important; } .p-md-5 { padding: 3rem !important; } .px-md-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-md-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-md-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-md-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-md-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-md-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-md-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-md-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-md-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-md-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-md-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-md-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-md-0 { padding-top: 0 !important; } .pt-md-1 { padding-top: 0.25rem !important; } .pt-md-2 { padding-top: 0.5rem !important; } .pt-md-3 { padding-top: 1rem !important; } .pt-md-4 { padding-top: 1.5rem !important; } .pt-md-5 { padding-top: 3rem !important; } .pe-md-0 { padding-right: 0 !important; } .pe-md-1 { padding-right: 0.25rem !important; } .pe-md-2 { padding-right: 0.5rem !important; } .pe-md-3 { padding-right: 1rem !important; } .pe-md-4 { padding-right: 1.5rem !important; } .pe-md-5 { padding-right: 3rem !important; } .pb-md-0 { padding-bottom: 0 !important; } .pb-md-1 { padding-bottom: 0.25rem !important; } .pb-md-2 { padding-bottom: 0.5rem !important; } .pb-md-3 { padding-bottom: 1rem !important; } .pb-md-4 { padding-bottom: 1.5rem !important; } .pb-md-5 { padding-bottom: 3rem !important; } .ps-md-0 { padding-left: 0 !important; } .ps-md-1 { padding-left: 0.25rem !important; } .ps-md-2 { padding-left: 0.5rem !important; } .ps-md-3 { padding-left: 1rem !important; } .ps-md-4 { padding-left: 1.5rem !important; } .ps-md-5 { padding-left: 3rem !important; } .text-md-start { text-align: left !important; } .text-md-end { text-align: right !important; } .text-md-center { text-align: center !important; } } @media (min-width: 992px) { .float-lg-start { float: left !important; } .float-lg-end { float: right !important; } .float-lg-none { float: none !important; } .d-lg-inline { display: inline !important; } .d-lg-inline-block { display: inline-block !important; } .d-lg-block { display: block !important; } .d-lg-grid { display: grid !important; } .d-lg-table { display: table !important; } .d-lg-table-row { display: table-row !important; } .d-lg-table-cell { display: table-cell !important; } .d-lg-flex { display: flex !important; } .d-lg-inline-flex { display: inline-flex !important; } .d-lg-none { display: none !important; } .flex-lg-fill { flex: 1 1 auto !important; } .flex-lg-row { flex-direction: row !important; } .flex-lg-column { flex-direction: column !important; } .flex-lg-row-reverse { flex-direction: row-reverse !important; } .flex-lg-column-reverse { flex-direction: column-reverse !important; } .flex-lg-grow-0 { flex-grow: 0 !important; } .flex-lg-grow-1 { flex-grow: 1 !important; } .flex-lg-shrink-0 { flex-shrink: 0 !important; } .flex-lg-shrink-1 { flex-shrink: 1 !important; } .flex-lg-wrap { flex-wrap: wrap !important; } .flex-lg-nowrap { flex-wrap: nowrap !important; } .flex-lg-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-lg-0 { gap: 0 !important; } .gap-lg-1 { gap: 0.25rem !important; } .gap-lg-2 { gap: 0.5rem !important; } .gap-lg-3 { gap: 1rem !important; } .gap-lg-4 { gap: 1.5rem !important; } .gap-lg-5 { gap: 3rem !important; } .justify-content-lg-start { justify-content: flex-start !important; } .justify-content-lg-end { justify-content: flex-end !important; } .justify-content-lg-center { justify-content: center !important; } .justify-content-lg-between { justify-content: space-between !important; } .justify-content-lg-around { justify-content: space-around !important; } .justify-content-lg-evenly { justify-content: space-evenly !important; } .align-items-lg-start { align-items: flex-start !important; } .align-items-lg-end { align-items: flex-end !important; } .align-items-lg-center { align-items: center !important; } .align-items-lg-baseline { align-items: baseline !important; } .align-items-lg-stretch { align-items: stretch !important; } .align-content-lg-start { align-content: flex-start !important; } .align-content-lg-end { align-content: flex-end !important; } .align-content-lg-center { align-content: center !important; } .align-content-lg-between { align-content: space-between !important; } .align-content-lg-around { align-content: space-around !important; } .align-content-lg-stretch { align-content: stretch !important; } .align-self-lg-auto { align-self: auto !important; } .align-self-lg-start { align-self: flex-start !important; } .align-self-lg-end { align-self: flex-end !important; } .align-self-lg-center { align-self: center !important; } .align-self-lg-baseline { align-self: baseline !important; } .align-self-lg-stretch { align-self: stretch !important; } .order-lg-first { order: -1 !important; } .order-lg-0 { order: 0 !important; } .order-lg-1 { order: 1 !important; } .order-lg-2 { order: 2 !important; } .order-lg-3 { order: 3 !important; } .order-lg-4 { order: 4 !important; } .order-lg-5 { order: 5 !important; } .order-lg-last { order: 6 !important; } .m-lg-0 { margin: 0 !important; } .m-lg-1 { margin: 0.25rem !important; } .m-lg-2 { margin: 0.5rem !important; } .m-lg-3 { margin: 1rem !important; } .m-lg-4 { margin: 1.5rem !important; } .m-lg-5 { margin: 3rem !important; } .m-lg-auto { margin: auto !important; } .mx-lg-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-lg-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-lg-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-lg-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-lg-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-lg-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-lg-auto { margin-right: auto !important; margin-left: auto !important; } .my-lg-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-lg-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-lg-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-lg-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-lg-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-lg-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-lg-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-lg-0 { margin-top: 0 !important; } .mt-lg-1 { margin-top: 0.25rem !important; } .mt-lg-2 { margin-top: 0.5rem !important; } .mt-lg-3 { margin-top: 1rem !important; } .mt-lg-4 { margin-top: 1.5rem !important; } .mt-lg-5 { margin-top: 3rem !important; } .mt-lg-auto { margin-top: auto !important; } .me-lg-0 { margin-right: 0 !important; } .me-lg-1 { margin-right: 0.25rem !important; } .me-lg-2 { margin-right: 0.5rem !important; } .me-lg-3 { margin-right: 1rem !important; } .me-lg-4 { margin-right: 1.5rem !important; } .me-lg-5 { margin-right: 3rem !important; } .me-lg-auto { margin-right: auto !important; } .mb-lg-0 { margin-bottom: 0 !important; } .mb-lg-1 { margin-bottom: 0.25rem !important; } .mb-lg-2 { margin-bottom: 0.5rem !important; } .mb-lg-3 { margin-bottom: 1rem !important; } .mb-lg-4 { margin-bottom: 1.5rem !important; } .mb-lg-5 { margin-bottom: 3rem !important; } .mb-lg-auto { margin-bottom: auto !important; } .ms-lg-0 { margin-left: 0 !important; } .ms-lg-1 { margin-left: 0.25rem !important; } .ms-lg-2 { margin-left: 0.5rem !important; } .ms-lg-3 { margin-left: 1rem !important; } .ms-lg-4 { margin-left: 1.5rem !important; } .ms-lg-5 { margin-left: 3rem !important; } .ms-lg-auto { margin-left: auto !important; } .p-lg-0 { padding: 0 !important; } .p-lg-1 { padding: 0.25rem !important; } .p-lg-2 { padding: 0.5rem !important; } .p-lg-3 { padding: 1rem !important; } .p-lg-4 { padding: 1.5rem !important; } .p-lg-5 { padding: 3rem !important; } .px-lg-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-lg-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-lg-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-lg-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-lg-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-lg-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-lg-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-lg-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-lg-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-lg-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-lg-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-lg-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-lg-0 { padding-top: 0 !important; } .pt-lg-1 { padding-top: 0.25rem !important; } .pt-lg-2 { padding-top: 0.5rem !important; } .pt-lg-3 { padding-top: 1rem !important; } .pt-lg-4 { padding-top: 1.5rem !important; } .pt-lg-5 { padding-top: 3rem !important; } .pe-lg-0 { padding-right: 0 !important; } .pe-lg-1 { padding-right: 0.25rem !important; } .pe-lg-2 { padding-right: 0.5rem !important; } .pe-lg-3 { padding-right: 1rem !important; } .pe-lg-4 { padding-right: 1.5rem !important; } .pe-lg-5 { padding-right: 3rem !important; } .pb-lg-0 { padding-bottom: 0 !important; } .pb-lg-1 { padding-bottom: 0.25rem !important; } .pb-lg-2 { padding-bottom: 0.5rem !important; } .pb-lg-3 { padding-bottom: 1rem !important; } .pb-lg-4 { padding-bottom: 1.5rem !important; } .pb-lg-5 { padding-bottom: 3rem !important; } .ps-lg-0 { padding-left: 0 !important; } .ps-lg-1 { padding-left: 0.25rem !important; } .ps-lg-2 { padding-left: 0.5rem !important; } .ps-lg-3 { padding-left: 1rem !important; } .ps-lg-4 { padding-left: 1.5rem !important; } .ps-lg-5 { padding-left: 3rem !important; } .text-lg-start { text-align: left !important; } .text-lg-end { text-align: right !important; } .text-lg-center { text-align: center !important; } } @media (min-width: 1200px) { .float-xl-start { float: left !important; } .float-xl-end { float: right !important; } .float-xl-none { float: none !important; } .d-xl-inline { display: inline !important; } .d-xl-inline-block { display: inline-block !important; } .d-xl-block { display: block !important; } .d-xl-grid { display: grid !important; } .d-xl-table { display: table !important; } .d-xl-table-row { display: table-row !important; } .d-xl-table-cell { display: table-cell !important; } .d-xl-flex { display: flex !important; } .d-xl-inline-flex { display: inline-flex !important; } .d-xl-none { display: none !important; } .flex-xl-fill { flex: 1 1 auto !important; } .flex-xl-row { flex-direction: row !important; } .flex-xl-column { flex-direction: column !important; } .flex-xl-row-reverse { flex-direction: row-reverse !important; } .flex-xl-column-reverse { flex-direction: column-reverse !important; } .flex-xl-grow-0 { flex-grow: 0 !important; } .flex-xl-grow-1 { flex-grow: 1 !important; } .flex-xl-shrink-0 { flex-shrink: 0 !important; } .flex-xl-shrink-1 { flex-shrink: 1 !important; } .flex-xl-wrap { flex-wrap: wrap !important; } .flex-xl-nowrap { flex-wrap: nowrap !important; } .flex-xl-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-xl-0 { gap: 0 !important; } .gap-xl-1 { gap: 0.25rem !important; } .gap-xl-2 { gap: 0.5rem !important; } .gap-xl-3 { gap: 1rem !important; } .gap-xl-4 { gap: 1.5rem !important; } .gap-xl-5 { gap: 3rem !important; } .justify-content-xl-start { justify-content: flex-start !important; } .justify-content-xl-end { justify-content: flex-end !important; } .justify-content-xl-center { justify-content: center !important; } .justify-content-xl-between { justify-content: space-between !important; } .justify-content-xl-around { justify-content: space-around !important; } .justify-content-xl-evenly { justify-content: space-evenly !important; } .align-items-xl-start { align-items: flex-start !important; } .align-items-xl-end { align-items: flex-end !important; } .align-items-xl-center { align-items: center !important; } .align-items-xl-baseline { align-items: baseline !important; } .align-items-xl-stretch { align-items: stretch !important; } .align-content-xl-start { align-content: flex-start !important; } .align-content-xl-end { align-content: flex-end !important; } .align-content-xl-center { align-content: center !important; } .align-content-xl-between { align-content: space-between !important; } .align-content-xl-around { align-content: space-around !important; } .align-content-xl-stretch { align-content: stretch !important; } .align-self-xl-auto { align-self: auto !important; } .align-self-xl-start { align-self: flex-start !important; } .align-self-xl-end { align-self: flex-end !important; } .align-self-xl-center { align-self: center !important; } .align-self-xl-baseline { align-self: baseline !important; } .align-self-xl-stretch { align-self: stretch !important; } .order-xl-first { order: -1 !important; } .order-xl-0 { order: 0 !important; } .order-xl-1 { order: 1 !important; } .order-xl-2 { order: 2 !important; } .order-xl-3 { order: 3 !important; } .order-xl-4 { order: 4 !important; } .order-xl-5 { order: 5 !important; } .order-xl-last { order: 6 !important; } .m-xl-0 { margin: 0 !important; } .m-xl-1 { margin: 0.25rem !important; } .m-xl-2 { margin: 0.5rem !important; } .m-xl-3 { margin: 1rem !important; } .m-xl-4 { margin: 1.5rem !important; } .m-xl-5 { margin: 3rem !important; } .m-xl-auto { margin: auto !important; } .mx-xl-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-xl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-xl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-xl-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-xl-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-xl-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-xl-auto { margin-right: auto !important; margin-left: auto !important; } .my-xl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-xl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-xl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-xl-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-xl-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-xl-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-xl-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-xl-0 { margin-top: 0 !important; } .mt-xl-1 { margin-top: 0.25rem !important; } .mt-xl-2 { margin-top: 0.5rem !important; } .mt-xl-3 { margin-top: 1rem !important; } .mt-xl-4 { margin-top: 1.5rem !important; } .mt-xl-5 { margin-top: 3rem !important; } .mt-xl-auto { margin-top: auto !important; } .me-xl-0 { margin-right: 0 !important; } .me-xl-1 { margin-right: 0.25rem !important; } .me-xl-2 { margin-right: 0.5rem !important; } .me-xl-3 { margin-right: 1rem !important; } .me-xl-4 { margin-right: 1.5rem !important; } .me-xl-5 { margin-right: 3rem !important; } .me-xl-auto { margin-right: auto !important; } .mb-xl-0 { margin-bottom: 0 !important; } .mb-xl-1 { margin-bottom: 0.25rem !important; } .mb-xl-2 { margin-bottom: 0.5rem !important; } .mb-xl-3 { margin-bottom: 1rem !important; } .mb-xl-4 { margin-bottom: 1.5rem !important; } .mb-xl-5 { margin-bottom: 3rem !important; } .mb-xl-auto { margin-bottom: auto !important; } .ms-xl-0 { margin-left: 0 !important; } .ms-xl-1 { margin-left: 0.25rem !important; } .ms-xl-2 { margin-left: 0.5rem !important; } .ms-xl-3 { margin-left: 1rem !important; } .ms-xl-4 { margin-left: 1.5rem !important; } .ms-xl-5 { margin-left: 3rem !important; } .ms-xl-auto { margin-left: auto !important; } .p-xl-0 { padding: 0 !important; } .p-xl-1 { padding: 0.25rem !important; } .p-xl-2 { padding: 0.5rem !important; } .p-xl-3 { padding: 1rem !important; } .p-xl-4 { padding: 1.5rem !important; } .p-xl-5 { padding: 3rem !important; } .px-xl-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-xl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-xl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-xl-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-xl-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-xl-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-xl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-xl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-xl-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-xl-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-xl-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-xl-0 { padding-top: 0 !important; } .pt-xl-1 { padding-top: 0.25rem !important; } .pt-xl-2 { padding-top: 0.5rem !important; } .pt-xl-3 { padding-top: 1rem !important; } .pt-xl-4 { padding-top: 1.5rem !important; } .pt-xl-5 { padding-top: 3rem !important; } .pe-xl-0 { padding-right: 0 !important; } .pe-xl-1 { padding-right: 0.25rem !important; } .pe-xl-2 { padding-right: 0.5rem !important; } .pe-xl-3 { padding-right: 1rem !important; } .pe-xl-4 { padding-right: 1.5rem !important; } .pe-xl-5 { padding-right: 3rem !important; } .pb-xl-0 { padding-bottom: 0 !important; } .pb-xl-1 { padding-bottom: 0.25rem !important; } .pb-xl-2 { padding-bottom: 0.5rem !important; } .pb-xl-3 { padding-bottom: 1rem !important; } .pb-xl-4 { padding-bottom: 1.5rem !important; } .pb-xl-5 { padding-bottom: 3rem !important; } .ps-xl-0 { padding-left: 0 !important; } .ps-xl-1 { padding-left: 0.25rem !important; } .ps-xl-2 { padding-left: 0.5rem !important; } .ps-xl-3 { padding-left: 1rem !important; } .ps-xl-4 { padding-left: 1.5rem !important; } .ps-xl-5 { padding-left: 3rem !important; } .text-xl-start { text-align: left !important; } .text-xl-end { text-align: right !important; } .text-xl-center { text-align: center !important; } } @media (min-width: 1400px) { .float-xxl-start { float: left !important; } .float-xxl-end { float: right !important; } .float-xxl-none { float: none !important; } .d-xxl-inline { display: inline !important; } .d-xxl-inline-block { display: inline-block !important; } .d-xxl-block { display: block !important; } .d-xxl-grid { display: grid !important; } .d-xxl-table { display: table !important; } .d-xxl-table-row { display: table-row !important; } .d-xxl-table-cell { display: table-cell !important; } .d-xxl-flex { display: flex !important; } .d-xxl-inline-flex { display: inline-flex !important; } .d-xxl-none { display: none !important; } .flex-xxl-fill { flex: 1 1 auto !important; } .flex-xxl-row { flex-direction: row !important; } .flex-xxl-column { flex-direction: column !important; } .flex-xxl-row-reverse { flex-direction: row-reverse !important; } .flex-xxl-column-reverse { flex-direction: column-reverse !important; } .flex-xxl-grow-0 { flex-grow: 0 !important; } .flex-xxl-grow-1 { flex-grow: 1 !important; } .flex-xxl-shrink-0 { flex-shrink: 0 !important; } .flex-xxl-shrink-1 { flex-shrink: 1 !important; } .flex-xxl-wrap { flex-wrap: wrap !important; } .flex-xxl-nowrap { flex-wrap: nowrap !important; } .flex-xxl-wrap-reverse { flex-wrap: wrap-reverse !important; } .gap-xxl-0 { gap: 0 !important; } .gap-xxl-1 { gap: 0.25rem !important; } .gap-xxl-2 { gap: 0.5rem !important; } .gap-xxl-3 { gap: 1rem !important; } .gap-xxl-4 { gap: 1.5rem !important; } .gap-xxl-5 { gap: 3rem !important; } .justify-content-xxl-start { justify-content: flex-start !important; } .justify-content-xxl-end { justify-content: flex-end !important; } .justify-content-xxl-center { justify-content: center !important; } .justify-content-xxl-between { justify-content: space-between !important; } .justify-content-xxl-around { justify-content: space-around !important; } .justify-content-xxl-evenly { justify-content: space-evenly !important; } .align-items-xxl-start { align-items: flex-start !important; } .align-items-xxl-end { align-items: flex-end !important; } .align-items-xxl-center { align-items: center !important; } .align-items-xxl-baseline { align-items: baseline !important; } .align-items-xxl-stretch { align-items: stretch !important; } .align-content-xxl-start { align-content: flex-start !important; } .align-content-xxl-end { align-content: flex-end !important; } .align-content-xxl-center { align-content: center !important; } .align-content-xxl-between { align-content: space-between !important; } .align-content-xxl-around { align-content: space-around !important; } .align-content-xxl-stretch { align-content: stretch !important; } .align-self-xxl-auto { align-self: auto !important; } .align-self-xxl-start { align-self: flex-start !important; } .align-self-xxl-end { align-self: flex-end !important; } .align-self-xxl-center { align-self: center !important; } .align-self-xxl-baseline { align-self: baseline !important; } .align-self-xxl-stretch { align-self: stretch !important; } .order-xxl-first { order: -1 !important; } .order-xxl-0 { order: 0 !important; } .order-xxl-1 { order: 1 !important; } .order-xxl-2 { order: 2 !important; } .order-xxl-3 { order: 3 !important; } .order-xxl-4 { order: 4 !important; } .order-xxl-5 { order: 5 !important; } .order-xxl-last { order: 6 !important; } .m-xxl-0 { margin: 0 !important; } .m-xxl-1 { margin: 0.25rem !important; } .m-xxl-2 { margin: 0.5rem !important; } .m-xxl-3 { margin: 1rem !important; } .m-xxl-4 { margin: 1.5rem !important; } .m-xxl-5 { margin: 3rem !important; } .m-xxl-auto { margin: auto !important; } .mx-xxl-0 { margin-right: 0 !important; margin-left: 0 !important; } .mx-xxl-1 { margin-right: 0.25rem !important; margin-left: 0.25rem !important; } .mx-xxl-2 { margin-right: 0.5rem !important; margin-left: 0.5rem !important; } .mx-xxl-3 { margin-right: 1rem !important; margin-left: 1rem !important; } .mx-xxl-4 { margin-right: 1.5rem !important; margin-left: 1.5rem !important; } .mx-xxl-5 { margin-right: 3rem !important; margin-left: 3rem !important; } .mx-xxl-auto { margin-right: auto !important; margin-left: auto !important; } .my-xxl-0 { margin-top: 0 !important; margin-bottom: 0 !important; } .my-xxl-1 { margin-top: 0.25rem !important; margin-bottom: 0.25rem !important; } .my-xxl-2 { margin-top: 0.5rem !important; margin-bottom: 0.5rem !important; } .my-xxl-3 { margin-top: 1rem !important; margin-bottom: 1rem !important; } .my-xxl-4 { margin-top: 1.5rem !important; margin-bottom: 1.5rem !important; } .my-xxl-5 { margin-top: 3rem !important; margin-bottom: 3rem !important; } .my-xxl-auto { margin-top: auto !important; margin-bottom: auto !important; } .mt-xxl-0 { margin-top: 0 !important; } .mt-xxl-1 { margin-top: 0.25rem !important; } .mt-xxl-2 { margin-top: 0.5rem !important; } .mt-xxl-3 { margin-top: 1rem !important; } .mt-xxl-4 { margin-top: 1.5rem !important; } .mt-xxl-5 { margin-top: 3rem !important; } .mt-xxl-auto { margin-top: auto !important; } .me-xxl-0 { margin-right: 0 !important; } .me-xxl-1 { margin-right: 0.25rem !important; } .me-xxl-2 { margin-right: 0.5rem !important; } .me-xxl-3 { margin-right: 1rem !important; } .me-xxl-4 { margin-right: 1.5rem !important; } .me-xxl-5 { margin-right: 3rem !important; } .me-xxl-auto { margin-right: auto !important; } .mb-xxl-0 { margin-bottom: 0 !important; } .mb-xxl-1 { margin-bottom: 0.25rem !important; } .mb-xxl-2 { margin-bottom: 0.5rem !important; } .mb-xxl-3 { margin-bottom: 1rem !important; } .mb-xxl-4 { margin-bottom: 1.5rem !important; } .mb-xxl-5 { margin-bottom: 3rem !important; } .mb-xxl-auto { margin-bottom: auto !important; } .ms-xxl-0 { margin-left: 0 !important; } .ms-xxl-1 { margin-left: 0.25rem !important; } .ms-xxl-2 { margin-left: 0.5rem !important; } .ms-xxl-3 { margin-left: 1rem !important; } .ms-xxl-4 { margin-left: 1.5rem !important; } .ms-xxl-5 { margin-left: 3rem !important; } .ms-xxl-auto { margin-left: auto !important; } .p-xxl-0 { padding: 0 !important; } .p-xxl-1 { padding: 0.25rem !important; } .p-xxl-2 { padding: 0.5rem !important; } .p-xxl-3 { padding: 1rem !important; } .p-xxl-4 { padding: 1.5rem !important; } .p-xxl-5 { padding: 3rem !important; } .px-xxl-0 { padding-right: 0 !important; padding-left: 0 !important; } .px-xxl-1 { padding-right: 0.25rem !important; padding-left: 0.25rem !important; } .px-xxl-2 { padding-right: 0.5rem !important; padding-left: 0.5rem !important; } .px-xxl-3 { padding-right: 1rem !important; padding-left: 1rem !important; } .px-xxl-4 { padding-right: 1.5rem !important; padding-left: 1.5rem !important; } .px-xxl-5 { padding-right: 3rem !important; padding-left: 3rem !important; } .py-xxl-0 { padding-top: 0 !important; padding-bottom: 0 !important; } .py-xxl-1 { padding-top: 0.25rem !important; padding-bottom: 0.25rem !important; } .py-xxl-2 { padding-top: 0.5rem !important; padding-bottom: 0.5rem !important; } .py-xxl-3 { padding-top: 1rem !important; padding-bottom: 1rem !important; } .py-xxl-4 { padding-top: 1.5rem !important; padding-bottom: 1.5rem !important; } .py-xxl-5 { padding-top: 3rem !important; padding-bottom: 3rem !important; } .pt-xxl-0 { padding-top: 0 !important; } .pt-xxl-1 { padding-top: 0.25rem !important; } .pt-xxl-2 { padding-top: 0.5rem !important; } .pt-xxl-3 { padding-top: 1rem !important; } .pt-xxl-4 { padding-top: 1.5rem !important; } .pt-xxl-5 { padding-top: 3rem !important; } .pe-xxl-0 { padding-right: 0 !important; } .pe-xxl-1 { padding-right: 0.25rem !important; } .pe-xxl-2 { padding-right: 0.5rem !important; } .pe-xxl-3 { padding-right: 1rem !important; } .pe-xxl-4 { padding-right: 1.5rem !important; } .pe-xxl-5 { padding-right: 3rem !important; } .pb-xxl-0 { padding-bottom: 0 !important; } .pb-xxl-1 { padding-bottom: 0.25rem !important; } .pb-xxl-2 { padding-bottom: 0.5rem !important; } .pb-xxl-3 { padding-bottom: 1rem !important; } .pb-xxl-4 { padding-bottom: 1.5rem !important; } .pb-xxl-5 { padding-bottom: 3rem !important; } .ps-xxl-0 { padding-left: 0 !important; } .ps-xxl-1 { padding-left: 0.25rem !important; } .ps-xxl-2 { padding-left: 0.5rem !important; } .ps-xxl-3 { padding-left: 1rem !important; } .ps-xxl-4 { padding-left: 1.5rem !important; } .ps-xxl-5 { padding-left: 3rem !important; } .text-xxl-start { text-align: left !important; } .text-xxl-end { text-align: right !important; } .text-xxl-center { text-align: center !important; } } @media (min-width: 1200px) { .fs-1 { font-size: 2.5rem !important; } .fs-2 { font-size: 2rem !important; } .fs-3 { font-size: 1.75rem !important; } .fs-4 { font-size: 1.5rem !important; } } @media print { .d-print-inline { display: inline !important; } .d-print-inline-block { display: inline-block !important; } .d-print-block { display: block !important; } .d-print-grid { display: grid !important; } .d-print-table { display: table !important; } .d-print-table-row { display: table-row !important; } .d-print-table-cell { display: table-cell !important; } .d-print-flex { display: flex !important; } .d-print-inline-flex { display: inline-flex !important; } .d-print-none { display: none !important; } } theme-joomla/assets/less/bootstrap-joomla3/responsive.less000064400000033776151666572130020075 0ustar00/*! * Bootstrap Responsive v2.3.2 * * Copyright 2012 Twitter, Inc * Licensed under the Apache License v2.0 * http://www.apache.org/licenses/LICENSE-2.0 * * Designed and built with all the love in the world @twitter by @mdo and @fat. */ .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 30px; box-sizing: border-box; } .hidden { display: none; visibility: hidden; } .visible-phone { display: none !important; } .visible-tablet { display: none !important; } .hidden-desktop { display: none !important; } .visible-desktop { display: inherit !important; } @media (min-width: 768px) and (max-width: 979px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-tablet { display: inherit !important; } .hidden-tablet { display: none !important; } } @media (max-width: 767px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-phone { display: inherit !important; } .hidden-phone { display: none !important; } } .visible-print { display: none !important; } @media print { .visible-print { display: inherit !important; } .hidden-print { display: none !important; } } @media (min-width: 1200px) { .row { margin-left: -30px; } .row:before, .row:after { display: table; line-height: 0; content: ""; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 30px; } .container, .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 1170px; } .span12 { width: 1170px; } .span11 { width: 1070px; } .span10 { width: 970px; } .span9 { width: 870px; } .span8 { width: 770px; } .span7 { width: 670px; } .span6 { width: 570px; } .span5 { width: 470px; } .span4 { width: 370px; } .span3 { width: 270px; } .span2 { width: 170px; } .span1 { width: 70px; } .offset12 { margin-left: 1230px; } .offset11 { margin-left: 1130px; } .offset10 { margin-left: 1030px; } .offset9 { margin-left: 930px; } .offset8 { margin-left: 830px; } .offset7 { margin-left: 730px; } .offset6 { margin-left: 630px; } .offset5 { margin-left: 530px; } .offset4 { margin-left: 430px; } .offset3 { margin-left: 330px; } .offset2 { margin-left: 230px; } .offset1 { margin-left: 130px; } .row-fluid { width: 100%; } .row-fluid:before, .row-fluid:after { display: table; line-height: 0; content: ""; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; float: left; width: 100%; min-height: 30px; margin-left: 2.564102564102564%; box-sizing: border-box; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.564102564102564%; } .row-fluid .span12 { width: 100%; } .row-fluid .span11 { width: 91.45299145299145%; } .row-fluid .span10 { width: 82.90598290598291%; } .row-fluid .span9 { width: 74.35897435897436%; } .row-fluid .span8 { width: 65.81196581196582%; } .row-fluid .span7 { width: 57.26495726495726%; } .row-fluid .span6 { width: 48.717948717948715%; } .row-fluid .span5 { width: 40.17094017094017%; } .row-fluid .span4 { width: 31.623931623931625%; } .row-fluid .span3 { width: 23.076923076923077%; } .row-fluid .span2 { width: 14.52991452991453%; } .row-fluid .span1 { width: 5.982905982905983%; } .row-fluid .offset12 { margin-left: 105.12820512820512%; } .row-fluid .offset12:first-child { margin-left: 102.56410256410257%; } .row-fluid .offset11 { margin-left: 96.58119658119658%; } .row-fluid .offset11:first-child { margin-left: 94.01709401709402%; } .row-fluid .offset10 { margin-left: 88.03418803418803%; } .row-fluid .offset10:first-child { margin-left: 85.47008547008548%; } .row-fluid .offset9 { margin-left: 79.48717948717949%; } .row-fluid .offset9:first-child { margin-left: 76.92307692307693%; } .row-fluid .offset8 { margin-left: 70.94017094017094%; } .row-fluid .offset8:first-child { margin-left: 68.37606837606839%; } .row-fluid .offset7 { margin-left: 62.393162393162385%; } .row-fluid .offset7:first-child { margin-left: 59.82905982905982%; } .row-fluid .offset6 { margin-left: 53.84615384615384%; } .row-fluid .offset6:first-child { margin-left: 51.28205128205128%; } .row-fluid .offset5 { margin-left: 45.299145299145295%; } .row-fluid .offset5:first-child { margin-left: 42.73504273504273%; } .row-fluid .offset4 { margin-left: 36.75213675213675%; } .row-fluid .offset4:first-child { margin-left: 34.18803418803419%; } .row-fluid .offset3 { margin-left: 28.205128205128204%; } .row-fluid .offset3:first-child { margin-left: 25.641025641025642%; } .row-fluid .offset2 { margin-left: 19.65811965811966%; } .row-fluid .offset2:first-child { margin-left: 17.094017094017094%; } .row-fluid .offset1 { margin-left: 11.11111111111111%; } .row-fluid .offset1:first-child { margin-left: 8.547008547008547%; } .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 30px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 1156px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 1056px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 956px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 856px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 756px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 656px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 556px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 456px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 356px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 256px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 156px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 56px; } .thumbnails { margin-left: -30px; } .thumbnails > li { margin-left: 30px; } .row-fluid .thumbnails { margin-left: 0; } } @media (min-width: 768px) and (max-width: 979px) { .row { margin-left: -20px; } .row:before, .row:after { display: table; line-height: 0; content: ""; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 20px; } .span12 {width: 724px; } .span11 {width: 662px; } .span10 {width: 600px; } .span9 {width: 538px; } .span8 {width: 476px; } .span7 {width: 414px; } .span6 {width: 352px; } .span5 {width: 290px; } .span4 {width: 228px; } .span3 {width: 166px; } .span2 {width: 104px; } .span1 {width: 42px; } .offset12 {margin-left: 764px; } .offset11 {margin-left: 702px; } .offset10 {margin-left: 640px; } .offset9 {margin-left: 578px; } .offset8 {margin-left: 516px; } .offset7 {margin-left: 454px; } .offset6 {margin-left: 392px; } .offset5 {margin-left: 330px; } .offset4 {margin-left: 268px; } .offset3 {margin-left: 206px; } .offset2 {margin-left: 144px; } .offset1 {margin-left: 82px; } .row-fluid {width: 100%; } .row-fluid:before, .row-fluid:after { display: table; line-height: 0; content: ""; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; float: left; width: 100%; min-height: 30px; margin-left: 2.7624309392265194%; box-sizing: border-box; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.7624309392265194%; } .row-fluid .span12 { width: 100%; } .row-fluid .span11 { width: 91.43646408839778%; } .row-fluid .span10 { width: 82.87292817679558%; } .row-fluid .span9 { width: 74.30939226519337%; } .row-fluid .span8 { width: 65.74585635359117%; } .row-fluid .span7 { width: 57.18232044198895%; } .row-fluid .span6 { width: 48.61878453038674%; } .row-fluid .span5 { width: 40.05524861878453%; } .row-fluid .span4 { width: 31.491712707182323%; } .row-fluid .span3 { width: 22.92817679558011%; } .row-fluid .span2 { width: 14.3646408839779%; } .row-fluid .span1 { width: 5.801104972375691%; } .row-fluid .offset12 { margin-left: 105.52486187845304%; } .row-fluid .offset12:first-child { margin-left: 102.76243093922652%; } .row-fluid .offset11 { margin-left: 96.96132596685082%; } .row-fluid .offset11:first-child { margin-left: 94.1988950276243%; } .row-fluid .offset10 { margin-left: 88.39779005524862%; } .row-fluid .offset10:first-child { margin-left: 85.6353591160221%; } .row-fluid .offset9 { margin-left: 79.8342541436464%; } .row-fluid .offset9:first-child { margin-left: 77.07182320441989%; } .row-fluid .offset8 { margin-left: 71.2707182320442%; } .row-fluid .offset8:first-child { margin-left: 68.50828729281768%; } .row-fluid .offset7 { margin-left: 62.70718232044199%; } .row-fluid .offset7:first-child { margin-left: 59.94475138121547%; } .row-fluid .offset6 { margin-left: 54.14364640883978%; } .row-fluid .offset6:first-child { margin-left: 51.38121546961326%; } .row-fluid .offset5 { margin-left: 45.58011049723757%; } .row-fluid .offset5:first-child { margin-left: 42.81767955801105%; } .row-fluid .offset4 { margin-left: 37.01657458563536%; } .row-fluid .offset4:first-child { margin-left: 34.25414364640884%; } .row-fluid .offset3 { margin-left: 28.45303867403315%; } .row-fluid .offset3:first-child { margin-left: 25.69060773480663%; } .row-fluid .offset2 { margin-left: 19.88950276243094%; } .row-fluid .offset2:first-child { margin-left: 17.12707182320442%; } .row-fluid .offset1 { margin-left: 11.32596685082873%; } .row-fluid .offset1:first-child { margin-left: 8.56353591160221%; } .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 710px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 648px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 586px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 524px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 462px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 400px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 338px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 276px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 214px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 152px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 90px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 28px; } } @media (max-width: 767px) { .container-fluid { padding: 0; } .dl-horizontal dt { float: none; width: auto; clear: none; text-align: left; } .dl-horizontal dd { margin-left: 0; } .container { width: auto; } .row-fluid { width: 100%; } .row, .thumbnails { margin-left: 0; } .thumbnails > li { float: none; margin-left: 0; } [class*="span"], .uneditable-input[class*="span"], .row-fluid [class*="span"] { display: block; float: none; width: 100%; margin-left: 0; box-sizing: border-box; } .span12, .row-fluid .span12 { width: 100%; box-sizing: border-box; } .row-fluid [class*="offset"]:first-child { margin-left: 0; } .input-large, .input-xlarge, .input-xxlarge, input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input { display: block; width: 100%; min-height: 30px; box-sizing: border-box; } .input-prepend input, .input-append input, .input-prepend input[class*="span"], .input-append input[class*="span"] { display: inline-block; width: auto; } .controls-row [class*="span"] + [class*="span"] { margin-left: 0; } div.modal { position: fixed; top: 20px; right: 20px; left: 20px; width: auto; margin: 0; } div.modal.fade { top: -100px; } div.modal.fade.in { top: 20px; } } @media (max-width: 480px) { .page-header h1 small { display: block; line-height: 20px; } .form-horizontal .control-label { float: none; width: auto; padding-top: 0; text-align: left; } .form-horizontal .controls { margin-left: 0; } .form-horizontal .control-list { padding-top: 0; } .form-horizontal .form-actions { padding-right: 10px; padding-left: 10px; } .media .pull-left, .media .pull-right { display: block; float: none; margin-bottom: 10px; } .media-object { margin-right: 0; margin-left: 0; } div.modal { top: 10px; right: 10px; left: 10px; } .modal-header .close { padding: 10px; margin: -10px; } .carousel-caption { position: static; } }theme-joomla/assets/less/bootstrap-joomla3/bootstrap.less000064400000204706151666572130017706 0ustar00@import "icomoon.less"; .container { &:extend(.uk-container all); } .clearfix { &:extend(.uk-clearfix all); } .hide-text { font: 0/0 a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } .input-block-level { display: block; width: 100%; min-height: 30px; } .hidden { display: none; visibility: hidden; } .visible-phone { display: none !important; } .visible-tablet { display: none !important; } .hidden-desktop { display: none !important; } .visible-desktop { display: inherit !important; } @media (min-width: 768px) and (max-width: 979px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-tablet { display: inherit !important; } .hidden-tablet { display: none !important; } } @media (max-width: 767px) { .hidden-desktop { display: inherit !important; } .visible-desktop { display: none !important; } .visible-phone { display: inherit !important; } .hidden-phone { display: none !important; } } .visible-print { display: none !important; } @media print { .visible-print { display: inherit !important; } .hidden-print { display: none !important; } } #map_canvas img, .google-maps img { max-width: none; } button, input, select, textarea { margin: 0; font-size: 100%; vertical-align: middle; } button, input { line-height: normal; } button::-moz-focus-inner, input::-moz-focus-inner { padding: 0; border: 0; } button, html input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; } label, select, button, input[type="button"], input[type="reset"], input[type="submit"], input[type="radio"], input[type="checkbox"] { cursor: pointer; } input[type="search"]:not([class*="uk-"]) { box-sizing: content-box; -webkit-appearance: textfield; } input[type="search"]:not([class*="uk-"])::-webkit-search-decoration, input[type="search"]:not([class*="uk-"])::-webkit-search-cancel-button { -webkit-appearance: none; } textarea:not([class*="uk-"]) { overflow: auto; vertical-align: top; } .img-rounded { border-radius: @global-border-radius; } .img-circle { border-radius: 500px; } .row { margin-left: 0px; } .row:before, .row:after { display: table; line-height: 0; content: ""; } .row:after { clear: both; } [class*="span"] { float: left; min-height: 1px; margin-left: 20px; } .span12 { width: 940px; } .span11 { width: 860px; } .span10 { width: 780px; } .span9 { width: 700px; } .span8 { width: 620px; } .span7 { width: 540px; } .span6 { width: 460px; } .span5 { width: 380px; } .span4 { width: 300px; } .span3 { width: 220px; } .span2 { width: 140px; } .span1 { width: 60px; } .offset12 { margin-left: 980px; } .offset11 { margin-left: 900px; } .offset10 { margin-left: 820px; } .offset9 { margin-left: 740px; } .offset8 { margin-left: 660px; } .offset7 { margin-left: 580px; } .offset6 { margin-left: 500px; } .offset5 { margin-left: 420px; } .offset4 { margin-left: 340px; } .offset3 { margin-left: 260px; } .offset2 { margin-left: 180px; } .offset1 { margin-left: 100px; } .row-fluid { width: 100%; } .row-fluid:before, .row-fluid:after { display: table; line-height: 0; content: ""; } .row-fluid:after { clear: both; } .row-fluid [class*="span"] { display: block; float: left; width: 100%; min-height: 30px; margin-left: 2.127659574468085%; box-sizing: border-box; } .row-fluid [class*="span"]:first-child { margin-left: 0; } .row-fluid .controls-row [class*="span"] + [class*="span"] { margin-left: 2.127659574468085%; } .row-fluid .span12 { width: 100%; } .row-fluid .span11 { width: 91.48936170212765%; } .row-fluid .span10 { width: 82.97872340425532%; } .row-fluid .span9 { width: 74.46808510638297%; } .row-fluid .span8 { width: 65.95744680851064%; } .row-fluid .span7 { width: 57.44680851063829%; } .row-fluid .span6 { width: 48.93617021276595%; } .row-fluid .span5 { width: 40.42553191489362%; } .row-fluid .span4 { width: 31.914893617021278%; } .row-fluid .span3 { width: 23.404255319148934%; } .row-fluid .span2 { width: 14.893617021276595%; } .row-fluid .span1 { width: 6.382978723404255%; } .row-fluid .offset12 { margin-left: 104.25531914893617%; } .row-fluid .offset12:first-child { margin-left: 102.12765957446808%; } .row-fluid .offset11 { margin-left: 95.74468085106382%; } .row-fluid .offset11:first-child { margin-left: 93.61702127659574%; } .row-fluid .offset10 { margin-left: 87.23404255319149%; } .row-fluid .offset10:first-child { margin-left: 85.1063829787234%; } .row-fluid .offset9 { margin-left: 78.72340425531914%; } .row-fluid .offset9:first-child { margin-left: 76.59574468085106%; } .row-fluid .offset8 { margin-left: 70.2127659574468%; } .row-fluid .offset8:first-child { margin-left: 68.08510638297872%; } .row-fluid .offset7 { margin-left: 61.70212765957446%; } .row-fluid .offset7:first-child { margin-left: 59.574468085106375%; } .row-fluid .offset6 { margin-left: 53.191489361702125%; } .row-fluid .offset6:first-child { margin-left: 51.063829787234035%; } .row-fluid .offset5 { margin-left: 44.68085106382979%; } .row-fluid .offset5:first-child { margin-left: 42.5531914893617%; } .row-fluid .offset4 { margin-left: 36.170212765957444%; } .row-fluid .offset4:first-child { margin-left: 34.04255319148936%; } .row-fluid .offset3 { margin-left: 27.659574468085104%; } .row-fluid .offset3:first-child { margin-left: 25.53191489361702%; } .row-fluid .offset2 { margin-left: 19.148936170212764%; } .row-fluid .offset2:first-child { margin-left: 17.02127659574468%; } .row-fluid .offset1 { margin-left: 10.638297872340425%; } .row-fluid .offset1:first-child { margin-left: 8.51063829787234%; } [class*="span"].hide, .row-fluid [class*="span"].hide { display: none; } [class*="span"].pull-right, .row-fluid [class*="span"].pull-right { float: right; } .lead { margin-bottom: @global-margin; font-size: 21px; font-weight: 200; line-height: 30px; } .muted { color: @global-muted-color; } a.muted:hover, a.muted:focus { color: darken(@global-muted-color, 10%); } .text-warning { color: @text-warning-color; } a.text-warning:hover, a.text-warning:focus { color: darken(@text-warning-color, 10%); } .text-error { color: @text-danger-color; } a.text-error:hover, a.text-error:focus { color: darken(@text-danger-color, 10%); } .text-info { color: @text-primary-color; } a.text-info:hover, a.text-info:focus { color: darken(@text-primary-color, 10%); } .text-success { color: @text-success-color; } a.text-success:hover, a.text-success:focus { color: darken(@text-success-color, 10%); } .text-left { text-align: left; } .text-right { text-align: right; } .text-center { text-align: center; } ul.unstyled, ol.unstyled { margin-left: 0; list-style: none; } ul.inline, ol.inline { margin-left: 0; list-style: none; } ul.inline > li, ol.inline > li { display: inline-block; padding-right: 5px; padding-left: 5px; } .dl-horizontal { &:extend(.uk-clearfix all); } .dl-horizontal dt { float: left; width: 160px; overflow: hidden; clear: left; text-align: right; text-overflow: ellipsis; white-space: nowrap; } .dl-horizontal dd { margin-left: 180px; } abbr[title], abbr[data-original-title] { cursor: help; border-bottom: 1px dotted @global-border; } abbr.initialism { font-size: 90%; text-transform: uppercase; } blockquote small { display: block; } blockquote small:before { content: '\2014 \00A0'; } blockquote.pull-right { float: right; padding-left: 0; border-left: 0; } blockquote.pull-right p, blockquote.pull-right small { text-align: right; } blockquote.pull-right small:before { content: ''; } blockquote.pull-right small:after { content: '\00A0 \2014'; } q, blockquote { &:extend(.uk-clearfix); } .pre-scrollable { max-height: 340px; overflow-y: scroll; } fieldset { &:extend(.uk-fieldset); } input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"], .uneditable-input { &:not([class*="uk-"]){ &:extend(.uk-input all); } } select:not([class*="uk-"]) { &:extend(.uk-select all); } textarea:not([class*="uk-"]) { &:extend(.uk-textarea all); } .uneditable-input { width: 206px; } input[type="checkbox"]:not([class*="uk-"]) { &:extend(.uk-checkbox all); } input[type="radio"]:not([class*="uk-"]) { &:extend(.uk-radio all); } input[type="file"], input[type="image"], input[type="submit"], input[type="reset"], input[type="button"]{ &:not([class*="uk-"]){ width: auto; } } input[type="file"] { line-height: 30px; } select[multiple]:not([class*="uk-"]), select[size]:not([class*="uk-"]) { height: auto; } .uneditable-input:not([class*="uk-"]), .uneditable-textarea:not([class*="uk-"]) { color: @global-muted-color; cursor: not-allowed; background-color: @global-muted-background; border-color: @global-border; } .uneditable-input:not([class*="uk-"]) { overflow: hidden; white-space: nowrap; } .uneditable-textarea:not([class*="uk-"]) { width: auto; height: auto; } input:not([class*="uk-"]):-moz-placeholder, textarea:not([class*="uk-"]):-moz-placeholder, input:not([class*="uk-"]):-ms-input-placeholder, textarea:not([class*="uk-"]):-ms-input-placeholder, input:not([class*="uk-"])::-webkit-input-placeholder, textarea:not([class*="uk-"])::-webkit-input-placeholder { color: @global-muted-color; } .radio, .checkbox { min-height: 20px; padding-left: 20px; } .radio input[type="radio"], .checkbox input[type="checkbox"] { margin-left: -20px; } .controls > .radio:first-child, .controls > .checkbox:first-child { padding-top: 5px; } .radio.inline, .checkbox.inline { display: inline-block; padding-top: 5px; margin-bottom: 0; vertical-align: middle; } .radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { margin-left: 10px; } .input-mini { width: 60px !important; } .input-small { width: 90px !important; } .input-medium { width: 150px !important; } .input-large { width: 210px !important; } .input-xlarge { width: 270px !important; } .input-xxlarge { width: 530px !important; } input[class*="span"], select[class*="span"], textarea[class*="span"], .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"] { float: none; margin-left: 0; } .input-append input[class*="span"], .input-append .uneditable-input[class*="span"], .input-prepend input[class*="span"], .input-prepend .uneditable-input[class*="span"], .row-fluid input[class*="span"], .row-fluid select[class*="span"], .row-fluid textarea[class*="span"], .row-fluid .uneditable-input[class*="span"], .row-fluid .input-prepend [class*="span"], .row-fluid .input-append [class*="span"] { display: inline-block; } input:not([class*="uk-"]), textarea:not([class*="uk-"]), .uneditable-input { margin-left: 0; } .controls-row [class*="span"] + [class*="span"] { margin-left: 20px; } input.span12, textarea.span12, .uneditable-input.span12 { width: 926px; } input.span11, textarea.span11, .uneditable-input.span11 { width: 846px; } input.span10, textarea.span10, .uneditable-input.span10 { width: 766px; } input.span9, textarea.span9, .uneditable-input.span9 { width: 686px; } input.span8, textarea.span8, .uneditable-input.span8 { width: 606px; } input.span7, textarea.span7, .uneditable-input.span7 { width: 526px; } input.span6, textarea.span6, .uneditable-input.span6 { width: 446px; } input.span5, textarea.span5, .uneditable-input.span5 { width: 366px; } input.span4, textarea.span4, .uneditable-input.span4 { width: 286px; } input.span3, textarea.span3, .uneditable-input.span3 { width: 206px; } input.span2, textarea.span2, .uneditable-input.span2 { width: 126px; } input.span1, textarea.span1, .uneditable-input.span1 { width: 46px; } .controls-row { } .controls-row:before, .controls-row:after { display: table; line-height: 0; content: ""; } .controls-row:after { clear: both; } .controls-row [class*="span"], .row-fluid .controls-row [class*="span"] { float: left; } .controls-row .checkbox[class*="span"], .controls-row .radio[class*="span"] { padding-top: 5px; } input[disabled]:not([class*="uk-"]), select[disabled]:not([class*="uk-"]), textarea[disabled]:not([class*="uk-"]), input[readonly]:not([class*="uk-"]), select[readonly]:not([class*="uk-"]), textarea[readonly]:not([class*="uk-"]) { cursor: not-allowed; background-color: @global-muted-background; } input[type="radio"][disabled]:not([class*="uk-"]), input[type="checkbox"][disabled]:not([class*="uk-"]), input[type="radio"][readonly]:not([class*="uk-"]), input[type="checkbox"][readonly]:not([class*="uk-"]) { background-color: transparent; } .control-group.warning .control-label, .control-group.warning .help-block, .control-group.warning .help-inline { color: @text-warning-color; } .control-group.warning .checkbox, .control-group.warning .radio, .control-group.warning input, .control-group.warning select, .control-group.warning textarea { color: @text-warning-color; } .control-group.warning input, .control-group.warning select, .control-group.warning textarea { border-color: @text-warning-color; } .control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus { border-color: @text-warning-color; } .control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { color: @text-warning-color; background-color: lighten(@text-warning-color, 10%); border-color: @text-warning-color; } .control-group.error .control-label, .control-group.error .help-block, .control-group.error .help-inline { color: @text-warning-color; } .control-group.error .checkbox, .control-group.error .radio, .control-group.error input, .control-group.error select, .control-group.error textarea { color: @text-warning-color; } .control-group.error input, .control-group.error select, .control-group.error textarea { border-color: @text-warning-color; } .control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus { border-color: @text-danger-color; } .control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { color: @text-warning-color; background-color: @global-inverse-color; border-color: @text-warning-color; } .control-group.success .control-label, .control-group.success .help-block, .control-group.success .help-inline { color: @text-success-color; } .control-group.success .checkbox, .control-group.success .radio, .control-group.success input, .control-group.success select, .control-group.success textarea { color: @text-success-color; } .control-group.success input, .control-group.success select, .control-group.success textarea { border-color: @text-success-color; } .control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus { border-color: @text-success-color; } .control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { color: @text-success-color; background-color: lighten(@text-success-color, 30%); border-color: @text-success-color; } .control-group.info .control-label, .control-group.info .help-block, .control-group.info .help-inline { color: @text-primary-color; } .control-group.info .checkbox, .control-group.info .radio, .control-group.info input, .control-group.info select, .control-group.info textarea { color: @text-primary-color; } .control-group.info input, .control-group.info select, .control-group.info textarea { border-color: @text-primary-color; } .control-group.info input:focus, .control-group.info select:focus, .control-group.info textarea:focus { border-color: @global-primary-background; } .control-group.info .input-prepend .add-on, .control-group.info .input-append .add-on { color: @text-primary-color; background-color: lighten(@global-primary-background, 30%); border-color: @text-primary-color; } .form-group { &:extend(.uk-clearfix all, .uk-margin); } .form-actions { padding: 19px 20px 20px; margin-top: 20px; margin-bottom: @global-margin; border-top: 1px solid @global-border; } .form-actions:before, .form-actions:after { display: table; line-height: 0; content: ""; } .form-actions:after { clear: both; } .help-block, .help-inline { color: @global-muted-color; } .help-block { display: block; margin-bottom: 10px; } .help-inline { display: inline-block; padding-left: 5px; vertical-align: middle; } .input-append, .input-prepend { display: inline-block; display: inline-flex; margin-bottom: 10px; white-space: nowrap; vertical-align: middle; } .input-append input, .input-prepend input, .input-append select, .input-prepend select, .input-append .uneditable-input, .input-prepend .uneditable-input { position: relative; margin-bottom: 0; vertical-align: top; border-radius: 0 @global-border-radius @global-border-radius 0; } .input-append input:focus, .input-prepend input:focus, .input-append select:focus, .input-prepend select:focus, .input-append .uneditable-input:focus, .input-prepend .uneditable-input:focus { z-index: 2; } .input-append .add-on, .input-prepend .add-on { display: inline-block; height: @form-height; width: auto; min-width: 16px; padding: @form-padding-vertical @form-padding-horizontal; font-weight: normal; font-size: 12px; line-height: (@form-height - 16px + @form-padding-vertical + @form-padding-horizontal); text-align: center; background-color: @global-muted-background; box-sizing: border-box; } .input-append .add-on, .input-prepend .add-on, .input-append .btn, .input-prepend .btn, .input-append .btn-group > .dropdown-toggle, .input-prepend .btn-group > .dropdown-toggle { vertical-align: top; border-radius: 0; } .input-append .active, .input-prepend .active { background-color: lighten(@form-success-color, 30%); border-color: @form-success-color; } .input-prepend .add-on, .input-prepend .btn { margin-right: -1px; } .input-prepend .add-on:first-child, .input-prepend .btn:first-child { border-radius: @global-border-radius 0 0 @global-border-radius; } .input-append input, .input-append select, .input-append .uneditable-input { border-radius: @global-border-radius 0 0 @global-border-radius; } .input-append input + .btn-group .btn:last-child, .input-append select + .btn-group .btn:last-child, .input-append .uneditable-input + .btn-group .btn:last-child { border-radius: 0 @global-border-radius @global-border-radius 0; } .input-append .add-on, .input-append .btn, .input-append .btn-group { margin-left: (-1 * @button-border-width); } .input-append .add-on:last-child, .input-append .btn:last-child, .input-append .btn-group:last-child > .dropdown-toggle { border-radius: 0 @global-border-radius @global-border-radius 0; } .input-prepend.input-append input, .input-prepend.input-append select, .input-prepend.input-append .uneditable-input { border-radius: 0; } .input-prepend.input-append input + .btn-group .btn, .input-prepend.input-append select + .btn-group .btn, .input-prepend.input-append .uneditable-input + .btn-group .btn { border-radius: 0 @global-border-radius @global-border-radius 0; } .input-prepend.input-append .add-on:first-child, .input-prepend.input-append .btn:first-child { margin-right: -1px; border-radius: @global-border-radius 0 0 @global-border-radius; } .input-prepend.input-append .add-on:last-child, .input-prepend.input-append .btn:last-child { border-radius: 0 @global-border-radius @global-border-radius 0; } .input-prepend.input-append .btn-group:first-child { margin-left: 0; } input.search-query { margin-bottom: 0; } /* Allow for input prepend/append in search forms */ .form-search .input-append .search-query, .form-search .input-prepend .search-query { border-radius: 0; } .form-search .input-append .search-query { border-radius: @global-border-radius 0 0 @global-border-radius; } .form-search .input-append .btn { border-radius: 0 @global-border-radius @global-border-radius 0; } .form-search .input-prepend .search-query { border-radius: 0 @global-border-radius @global-border-radius 0; } .form-search .input-prepend .btn { border-radius: @global-border-radius 0 0 @global-border-radius; } .form-search input, .form-inline input, .form-horizontal input, .form-search textarea, .form-inline textarea, .form-horizontal textarea, .form-search select, .form-inline select, .form-horizontal select, .form-search .help-inline, .form-inline .help-inline, .form-horizontal .help-inline, .form-search .uneditable-input, .form-inline .uneditable-input, .form-horizontal .uneditable-input, .form-search .input-prepend, .form-inline .input-prepend, .form-horizontal .input-prepend, .form-search .input-append, .form-inline .input-append, .form-horizontal .input-append { display: inline-block; margin-bottom: 0; vertical-align: middle; } .form-search .hide, .form-inline .hide, .form-horizontal .hide { display: none; } .form-search label, .form-inline label, .form-search .btn-group, .form-inline .btn-group { display: inline-block; } .form-search .input-append, .form-inline .input-append, .form-search .input-prepend, .form-inline .input-prepend { margin-bottom: 0; } .form-search .radio, .form-search .checkbox, .form-inline .radio, .form-inline .checkbox { padding-left: 0; margin-bottom: 0; vertical-align: middle; } .form-search .radio input[type="radio"], .form-search .checkbox input[type="checkbox"], .form-inline .radio input[type="radio"], .form-inline .checkbox input[type="checkbox"] { float: left; margin-right: 3px; margin-left: 0; } .control-group { margin-bottom: 10px; } legend + .control-group { margin-top: 20px; -webkit-margin-top-collapse: separate; } .form-horizontal .control-group { margin-bottom: @global-margin; } .form-horizontal .control-group:before, .form-horizontal .control-group:after { display: table; line-height: 0; content: ""; } .form-horizontal .control-group:after { clear: both; } .form-horizontal .control-label { float: left; width: 160px; padding-top: 5px; text-align: right; } .form-horizontal .controls { margin-left: 180px; } .form-horizontal .help-block { margin-bottom: 0; } .form-horizontal input + .help-block, .form-horizontal select + .help-block, .form-horizontal textarea + .help-block, .form-horizontal .uneditable-input + .help-block, .form-horizontal .input-prepend + .help-block, .form-horizontal .input-append + .help-block { margin-top: 10px; } .form-horizontal .form-actions { padding-left: 180px; } table { max-width: 100%; background-color: transparent; border-collapse: collapse; border-spacing: 0; } .table { &:extend(.uk-table); } .table th, .table td { padding: 8px; line-height: 20px; text-align: left; vertical-align: top; border-top: 1px solid @table-divider-border; } .table th { font-weight: bold; } .table thead th { vertical-align: bottom; } .table caption + thead tr:first-child th, .table caption + thead tr:first-child td, .table colgroup + thead tr:first-child th, .table colgroup + thead tr:first-child td, .table thead:first-child tr:first-child th, .table thead:first-child tr:first-child td { border-top: 0; } .table tbody + tbody { border-top: 2px solid @table-divider-border; } .table-condensed th, .table-condensed td { padding: 4px 5px; } .table-bordered { border: @table-divider-border-width solid @table-divider-border; border-collapse: separate; border-left: 0; border-radius: @global-border-radius; } .table-bordered th, .table-bordered td { border-left: @table-divider-border-width solid @table-divider-border; } .table-bordered caption + thead tr:first-child th, .table-bordered caption + tbody tr:first-child th, .table-bordered caption + tbody tr:first-child td, .table-bordered colgroup + thead tr:first-child th, .table-bordered colgroup + tbody tr:first-child th, .table-bordered colgroup + tbody tr:first-child td, .table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td { border-top: 0; } .table-bordered thead:first-child tr:first-child > th:first-child, .table-bordered tbody:first-child tr:first-child > td:first-child, .table-bordered tbody:first-child tr:first-child > th:first-child { -webkit-border-top-left-radius: @global-border-radius; border-top-left-radius: @global-border-radius; -moz-border-radius-topleft: @global-border-radius; } .table-bordered thead:first-child tr:first-child > th:last-child, .table-bordered tbody:first-child tr:first-child > td:last-child, .table-bordered tbody:first-child tr:first-child > th:last-child { -webkit-border-top-right-radius: @global-border-radius; border-top-right-radius: @global-border-radius; -moz-border-radius-topright: @global-border-radius; } .table-bordered thead:last-child tr:last-child > th:first-child, .table-bordered tbody:last-child tr:last-child > td:first-child, .table-bordered tbody:last-child tr:last-child > th:first-child, .table-bordered tfoot:last-child tr:last-child > td:first-child, .table-bordered tfoot:last-child tr:last-child > th:first-child { -webkit-border-bottom-left-radius: @global-border-radius; border-bottom-left-radius: @global-border-radius; -moz-border-radius-bottomleft: @global-border-radius; } .table-bordered thead:last-child tr:last-child > th:last-child, .table-bordered tbody:last-child tr:last-child > td:last-child, .table-bordered tbody:last-child tr:last-child > th:last-child, .table-bordered tfoot:last-child tr:last-child > td:last-child, .table-bordered tfoot:last-child tr:last-child > th:last-child { -webkit-border-bottom-right-radius: @global-border-radius; border-bottom-right-radius: @global-border-radius; -moz-border-radius-bottomright: @global-border-radius; } .table-bordered tfoot + tbody:last-child tr:last-child td:first-child { -webkit-border-bottom-left-radius: 0; border-bottom-left-radius: 0; -moz-border-radius-bottomleft: 0; } .table-bordered tfoot + tbody:last-child tr:last-child td:last-child { -webkit-border-bottom-right-radius: 0; border-bottom-right-radius: 0; -moz-border-radius-bottomright: 0; } .table-bordered caption + thead tr:first-child th:first-child, .table-bordered caption + tbody tr:first-child td:first-child, .table-bordered colgroup + thead tr:first-child th:first-child, .table-bordered colgroup + tbody tr:first-child td:first-child { -webkit-border-top-left-radius: @global-border-radius; border-top-left-radius: @global-border-radius; -moz-border-radius-topleft: @global-border-radius; } .table-bordered caption + thead tr:first-child th:last-child, .table-bordered caption + tbody tr:first-child td:last-child, .table-bordered colgroup + thead tr:first-child th:last-child, .table-bordered colgroup + tbody tr:first-child td:last-child { -webkit-border-top-right-radius: @global-border-radius; border-top-right-radius: @global-border-radius; -moz-border-radius-topright: @global-border-radius; } .table-striped tbody > tr:nth-child(odd) > td, .table-striped tbody > tr:nth-child(odd) > th { background-color: @table-striped-row-background; } .table-hover tbody tr:hover > td, .table-hover tbody tr:hover > th { background-color: @table-hover-row-background; } table td[class*="span"], table th[class*="span"], .row-fluid table td[class*="span"], .row-fluid table th[class*="span"] { display: table-cell; float: none; margin-left: 0; } .table td.span1, .table th.span1 { float: none; width: 44px; margin-left: 0; } .table td.span2, .table th.span2 { float: none; width: 124px; margin-left: 0; } .table td.span3, .table th.span3 { float: none; width: 204px; margin-left: 0; } .table td.span4, .table th.span4 { float: none; width: 284px; margin-left: 0; } .table td.span5, .table th.span5 { float: none; width: 364px; margin-left: 0; } .table td.span6, .table th.span6 { float: none; width: 444px; margin-left: 0; } .table td.span7, .table th.span7 { float: none; width: 524px; margin-left: 0; } .table td.span8, .table th.span8 { float: none; width: 604px; margin-left: 0; } .table td.span9, .table th.span9 { float: none; width: 684px; margin-left: 0; } .table td.span10, .table th.span10 { float: none; width: 764px; margin-left: 0; } .table td.span11, .table th.span11 { float: none; width: 844px; margin-left: 0; } .table td.span12, .table th.span12 { float: none; width: 924px; margin-left: 0; } .table tbody tr.success > td { background-color: @global-success-background; } .table tbody tr.error > td { background-color: @global-danger-background; } .table tbody tr.warning > td { background-color: @global-warning-background; } .table tbody tr.info > td { background-color: @global-primary-background; } .dropup, .dropdown { position: relative; } .dropdown-toggle:active, .open .dropdown-toggle { outline: 0; } .caret { display: inline-block; width: 0; height: 0; vertical-align: top; border-top: 4px solid @global-color; border-right: 4px solid transparent; border-left: 4px solid transparent; content: ""; } .dropdown .caret { margin-top: .6em; margin-left: .5ch; } .dropdown-menu:extend(.uk-dropdown, .uk-nav, .uk-dropdown-nav) { top: 100%; left: 0; float: left; box-sizing: border-box; } .dropdown-menu.pull-right { right: 0; left: auto; } .dropdown-menu .divider { height: 1px; margin: 9px 1px; overflow: hidden; border-bottom: 1px solid @dropdown-nav-divider-border; } .dropdown-menu > li > a { &:extend(.uk-dropdown-nav > li > a); display: block; clear: both; font-weight: normal; line-height: 20px; color: @dropdown-nav-item-color; white-space: nowrap; } .dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-submenu:hover > a, .dropdown-submenu:focus > a { color: @nav-default-item-active-color; text-decoration: none; .hook-nav-default-item-active(); } .dropdown-menu > .active > a, .dropdown-menu > .active > a:hover, .dropdown-menu > .active > a:focus { color: @nav-default-item-active-color; text-decoration: none; .hook-nav-default-item-active(); } .dropdown-menu > .disabled > a, .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { color: @global-muted-color; } .dropdown-menu > .disabled > a:hover, .dropdown-menu > .disabled > a:focus { text-decoration: none; cursor: default; background: transparent; } .open > .dropdown-menu { display: block; } .dropdown-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 990; } .pull-right > .dropdown-menu { right: 0; left: auto; } .dropup .caret, .navbar-fixed-bottom .dropdown .caret { border-top: 0; border-bottom: 4px solid @global-color; content: ""; } .dropup .dropdown-menu, .navbar-fixed-bottom .dropdown .dropdown-menu { top: auto; bottom: 100%; margin-bottom: 1px; } .dropdown-submenu { position: relative; } .dropdown-submenu > .dropdown-menu { top: 0; left: 100%; margin-top: -6px; margin-left: -1px; border-radius: 0 6px 6px 6px; } .dropdown-submenu:hover > .dropdown-menu { display: block; } .dropup .dropdown-submenu > .dropdown-menu { top: auto; bottom: 0; margin-top: 0; margin-bottom: -2px; border-radius: 5px 5px 5px 0; } .dropdown-submenu > a:after { display: block; float: right; width: 0; height: 0; margin-top: 5px; margin-right: -10px; content: " "; } .dropdown-submenu.pull-left { float: none; } .dropdown-submenu.pull-left > .dropdown-menu { left: -100%; margin-left: 10px; border-radius: 6px 0 6px 6px; } .dropdown .dropdown-menu .nav-header { padding-right: 20px; padding-left: 20px; } .typeahead { z-index: 1051; margin-top: 2px; border-radius: @global-border-radius; } .well { min-height: 20px; padding: @card-body-padding-horizontal; margin-bottom: @global-margin; background-color: @global-muted-background; border-radius: @global-border-radius; } .well-large { padding: @card-body-padding-horizontal-l; border-radius: 6px; } .well-small { padding: 9px; border-radius: 3px; } .fade { opacity: 0; -webkit-transition: opacity 0.15s linear; transition: opacity 0.15s linear; } .fade.in { opacity: 1; } .collapse { position: relative; height: 0; overflow: hidden; -webkit-transition: height 0.35s ease; transition: height 0.35s ease; } .collapse.in { height: auto; } #finder-search .collapse.in { overflow: visible; } .close { float: right; font-size: 20px; font-weight: bold; line-height: 20px; color: currentColor; opacity: 0.2; } .close:hover, .close:focus { color: @global-color; text-decoration: none; cursor: pointer; opacity: 0.4; } button.close { padding: 0; cursor: pointer; background: transparent; border: 0; -webkit-appearance: none; } .btn:extend(.uk-button all, .uk-button-default all) { display: inline-block; margin-bottom: 0; vertical-align: middle; cursor: pointer; } .btn-large:extend(.uk-button-large) {} .btn-large [class^="icon-"], .btn-large [class*=" icon-"] { margin-top: 4px; } .btn-small:extend(.uk-button-small) { padding: 2px 10px; font-size: 11.9px; } .btn-small [class^="icon-"], .btn-small [class*=" icon-"] { margin-top: 0; } .btn-mini [class^="icon-"], .btn-mini [class*=" icon-"] { margin-top: -1px; } .btn-mini { padding: 0 6px; font-size: 10.5px; } .btn-block { display: block; width: 100%; padding-right: 0; padding-left: 0; } .btn-block + .btn-block { margin-top: 5px; } input[type="submit"].btn-block, input[type="reset"].btn-block, input[type="button"].btn-block { width: 100%; } .btn-primary:extend(.uk-button-primary all) {} .btn-warning:extend(.uk-button-danger all) {} .btn-danger:extend(.uk-button-danger all) {} .btn-success:extend(.uk-button-secondary all) {} .btn-info:extend(.uk-button-primary all) {} .btn-inverse { color: @global-inverse-color; background-color: @global-secondary-background; } button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { padding: 0; border: 0; } .btn-link:extend(.uk-button-link all) { border: none !important; box-shadow: none !important; } .btn-group { position: relative; display: inline-block; display: inline-flex; white-space: nowrap; vertical-align: middle; } .btn-group + .btn-group { margin-left: 5px; } .btn-group.radio input[type="radio"]:not(:first-child) { margin-left: 0; } .btn-toolbar { margin-top: @global-margin; margin-bottom: @global-margin; } .btn-toolbar > .btn + .btn, .btn-toolbar > .btn-group + .btn, .btn-toolbar > .btn + .btn-group { margin-left: 5px; } .btn-group > .btn { position: relative; border-radius: 0; } .btn-group:not(.btn-group-vertical) > .btn + .btn { margin-left:-@button-border-width; border-left-width: 0; } .btn-group > .btn-mini { font-size: 10.5px; } .btn-group > .btn-small { font-size: 11.9px; } .btn-group > .btn-large { font-size: 17.5px; } .btn-group > .btn:first-child { margin-left: 0; -webkit-border-bottom-left-radius: @global-border-radius; border-bottom-left-radius: @global-border-radius; -webkit-border-top-left-radius: @global-border-radius; border-top-left-radius: @global-border-radius; -moz-border-radius-bottomleft: @global-border-radius; -moz-border-radius-topleft: @global-border-radius; } .btn-group > .btn:last-child, .btn-group > .dropdown-toggle { -webkit-border-top-right-radius: @global-border-radius; border-top-right-radius: @global-border-radius; -webkit-border-bottom-right-radius: @global-border-radius; border-bottom-right-radius: @global-border-radius; -moz-border-radius-topright: @global-border-radius; -moz-border-radius-bottomright: @global-border-radius; } .btn-group > .btn:hover, .btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active { z-index: 2; } .btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { outline: 0; } .btn-group > .btn + .dropdown-toggle { padding-right: 8px; padding-left: 8px; } .btn-group > .btn-mini + .dropdown-toggle { padding-right: 5px; padding-left: 5px; } .btn-group > .btn-large + .dropdown-toggle { padding-right: 12px; padding-left: 12px; } .btn-group.open .dropdown-toggle { background-image: none; } .btn-group.open .btn.dropdown-toggle { background-color: @button-default-background; } .btn-group.open .btn-primary.dropdown-toggle { background-color: @button-primary-background; } .btn-group.open .btn-warning.dropdown-toggle { background-color: @button-danger-background; } .btn-group.open .btn-danger.dropdown-toggle { background-color: @button-danger-background; } .btn-group.open .btn-success.dropdown-toggle { background-color: @button-secondary-background; } .btn-group.open .btn-info.dropdown-toggle { background-color: @button-default-background; } .btn-group.open .btn-inverse.dropdown-toggle { background-color: @global-secondary-background; } .btn .caret { margin-top: (@button-line-height/2); margin-left: 0; } .btn-large .caret { margin-top: 6px; } .btn-large .caret { border-top-width: 5px; border-right-width: 5px; border-left-width: 5px; } .btn-mini .caret, .btn-small .caret { margin-top: 8px; } .dropup .btn-large .caret { border-bottom-width: 5px; } .btn-primary .caret, .btn-warning .caret, .btn-danger .caret, .btn-info .caret, .btn-success .caret, .btn-inverse .caret { border-top-color: @global-inverse-color; border-bottom-color: @global-inverse-color; } .btn-group-vertical { display: inline-block; /* IE7 inline-block hack */ } .btn-group-vertical > .btn { display: block; float: none; max-width: 100%; border-radius: 0; } .btn-group-vertical > .btn + .btn { margin-top: -@button-border-width; margin-left: 0; border-top-width: 0; } .btn-group-vertical > .btn:first-child { border-radius: @global-border-radius @global-border-radius 0 0; } .btn-group-vertical > .btn:last-child { border-radius: 0 0 @global-border-radius @global-border-radius; } .alert:extend(.uk-alert) { padding: 8px 35px 8px 14px; margin-bottom: @global-margin; } .alert h4 { margin: 0; } .alert .close { top: -2px; right: -21px; line-height: 20px; } .alert-success { &:extend(.uk-alert-success); } .alert-danger, .alert-error { &:extend(.uk-alert-danger); } .alert-info { &:extend(.uk-alert-primary); } .alert-block { padding-top: 14px; padding-bottom: 14px; } .alert-block > p, .alert-block > ul { margin-bottom: 0; } .alert-block p + p { margin-top: 5px; } .list-striped, .list-condensed, .row-striped { list-style: none; text-align: left; vertical-align: middle; margin-left: 0; padding: 0; } .list-striped >*:nth-child(odd), .row-striped .row:nth-child(odd), .row-striped .row-fluid:nth-child(odd) { background-color: rgba(0,0,0,.05); } .list-condensed li { padding: @list-striped-padding-vertical @list-striped-padding-horizontal; } .nav { padding: 0; margin-bottom: @global-margin; margin-left: 0; list-style: none; } .nav > li > a { display: block; } .nav > li > a:hover, .nav > li > a:focus { text-decoration: none; } .nav > li > a > img { max-width: none; } .nav > .pull-right { float: right; } .nav-header { display: block; padding: 3px 15px; font-size: 11px; font-weight: bold; line-height: 20px; color: @global-color; text-transform: uppercase; } .nav li + .nav-header { margin-top: 9px; } .nav-list { padding-right: 15px; padding-left: 15px; margin-bottom: 0; } .nav-list > li > a, .nav-list .nav-header { margin-right: -15px; margin-left: -15px; } .nav-list > li > a { padding: 3px 15px; } .nav-list > .active > a, .nav-list > .active > a:hover, .nav-list > .active > a:focus { color: @nav-default-item-active-color; .hook-nav-default-item-active(); } .nav-list [class^="icon-"], .nav-list [class*=" icon-"] { margin-right: 2px; } .nav-list .divider { height: 1px; margin: 9px 1px; overflow: hidden; border-bottom: 1px solid @nav-default-divider-border; } .nav-tabs, .nav-pills { padding: 0; &:extend(.uk-clearfix all); } .nav-tabs::before { border-bottom: none !important; } .nav-tabs > li, .nav-pills > li { float: left; } .nav-tabs { .hook-tab(); } .nav-tabs { &:extend(.uk-tab); } .nav-tabs > li { &:extend(.uk-tab > *); } .nav-tabs > li > a { &:extend(.uk-tab > * > a); .hook-tab-item(); } .nav-tabs > * > a:hover, .nav-tabs > * > a:focus { .hook-tab-item-hover(); } .nav-tabs > .active > a { &:extend(.uk-tab > .uk-active > a all); } .nav-pills > li > a { padding: @subnav-pill-item-padding-vertical @subnav-pill-item-padding-horizontal; &:extend(.uk-subnav-pill > * > a all); } .nav-pills > .active > a { &:extend(.uk-subnav-pill > .uk-active > a all); } .nav-stacked { display: block !important; } .nav-stacked > li { float: none; } .nav-stacked > li > a { margin-right: 0; } .nav-tabs.nav-stacked { border-bottom: 0; } .nav-tabs.nav-stacked > li > a { border-radius: 0; } .nav-tabs.nav-stacked > li > a:hover, .nav-tabs.nav-stacked > li > a:focus { z-index: 2; } .nav-pills.nav-stacked > li > a { margin-bottom: 3px; } .nav-pills.nav-stacked > li:last-child > a { margin-bottom: 1px; } .nav-tabs .dropdown-menu { border-radius: 0 0 @global-border-radius @global-border-radius; } .nav-pills .dropdown-menu { border-radius: @global-border-radius; } .nav .dropdown-toggle .caret { border-top-color: currentColor; border-bottom-color: currentColor; } .nav .dropdown-toggle:hover .caret, .nav .dropdown-toggle:focus .caret { border-top-color: currentColor; border-bottom-color: currentColor; } /* move down carets for tabs */ .nav-tabs .dropdown-toggle .caret { margin-top: .5em; } .nav .active .dropdown-toggle .caret { border-top-color: currentColor; border-bottom-color: currentColor; } .nav-tabs .active .dropdown-toggle .caret { border-top-color: currentColor; border-bottom-color: currentColor; } .nav > .dropdown.active > a:hover, .nav > .dropdown.active > a:focus { cursor: pointer; } .nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > li.dropdown.open.active > a:hover, .nav > li.dropdown.open.active > a:focus { } .nav li.dropdown.open .caret, .nav li.dropdown.open.active .caret, .nav li.dropdown.open a:hover .caret, .nav li.dropdown.open a:focus .caret { } .tabbable {} .tabbable:before, .tabbable:after { display: table; line-height: 0; content: ""; } .tabbable:after { clear: both; } .tabs-below > .nav-tabs, .tabs-right > .nav-tabs, .tabs-left > .nav-tabs { border-bottom: 0; } .tab-content > .tab-pane, .pill-content > .pill-pane { display: none; } .tab-content > .active, .pill-content > .active { display: block; } .tabs-below > .nav-tabs { } .tabs-below > .nav-tabs > li { margin-bottom: 0; } .tabs-below > .nav-tabs > li > a { } .tabs-below > .nav-tabs > li > a:hover, .tabs-below > .nav-tabs > li > a:focus { } .tabs-below > .nav-tabs > .active > a, .tabs-below > .nav-tabs > .active > a:hover, .tabs-below > .nav-tabs > .active > a:focus { } .tabs-left > .nav-tabs > li, .tabs-right > .nav-tabs > li { float: none; } .tabs-left > .nav-tabs > li > a, .tabs-right > .nav-tabs > li > a { min-width: 74px; margin-right: 0; margin-bottom: 3px; } .tabs-left > .nav-tabs { float: left; margin-right: 19px; } .tabs-left > .nav-tabs > li > a { } .tabs-left > .nav-tabs > li > a:hover, .tabs-left > .nav-tabs > li > a:focus { } .tabs-left > .nav-tabs .active > a, .tabs-left > .nav-tabs .active > a:hover, .tabs-left > .nav-tabs .active > a:focus { } .tabs-right > .nav-tabs { float: right; margin-left: 19px; } .nav > .disabled > a { color: @global-muted-color; } .nav > .disabled > a:hover, .nav > .disabled > a:focus { text-decoration: none; cursor: default; background-color: transparent; } .navbar { margin-bottom: @global-margin; overflow: visible; } .navbar-inner { padding-right: @navbar-nav-item-padding-horizontal; padding-left: @navbar-nav-item-padding-horizontal; background-color: @navbar-background; } .navbar-inner:before, .navbar-inner:after { display: table; line-height: 0; content: ""; } .navbar-inner:after { clear: both; } .navbar .container { width: auto; } .nav-collapse.collapse { height: auto; overflow: visible; } .navbar .brand:extend(.uk-logo, .uk-navbar-item) { float: left; height: @navbar-nav-item-height; padding: 0 @navbar-nav-item-padding-horizontal; box-sizing: border-box; } .navbar .brand:hover, .navbar .brand:focus { text-decoration: none; } .navbar-text { margin-bottom: 0; line-height: @navbar-nav-item-height; color: @navbar-nav-item-color; } .navbar-link { color: @navbar-nav-item-color; } .navbar-link:hover, .navbar-link:focus { color: @navbar-nav-item-hover-color; } .navbar .divider-vertical { height: @navbar-nav-item-height; margin: 0 9px; border-right: 1px solid currentColor; opacity: .25; } .navbar .btn, .navbar .btn-group { margin-top: 5px; } .navbar .btn-group .btn, .navbar .input-prepend .btn, .navbar .input-append .btn, .navbar .input-prepend .btn-group, .navbar .input-append .btn-group { margin-top: 0; } .navbar-form { margin-bottom: 0; } .navbar-form:before, .navbar-form:after { display: table; line-height: 0; content: ""; } .navbar-form:after { clear: both; } .navbar-form input, .navbar-form select, .navbar-form .radio, .navbar-form .checkbox { margin-top: 5px; } .navbar-form input, .navbar-form select, .navbar-form .btn { display: inline-block; margin-bottom: 0; } .navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] { margin-top: 3px; } .navbar-form .input-append, .navbar-form .input-prepend { margin-top: 5px; white-space: nowrap; } .navbar-form .input-append input, .navbar-form .input-prepend input { margin-top: 0; } .navbar-search:extend(.uk-navbar-item) { position: relative; float: left; margin: 0; } .navbar-search .search-query { } .navbar-static-top { position: static; margin-bottom: 0; } .navbar-static-top .navbar-inner { border-radius: 0; } .navbar-fixed-top, .navbar-fixed-bottom { position: fixed; right: 0; left: 0; z-index: 1030; margin-bottom: 0; } .navbar-fixed-top .navbar-inner, .navbar-static-top .navbar-inner { border-width: 0 0 1px; } .navbar-fixed-bottom .navbar-inner { border-width: 1px 0 0; } .navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner { padding-right: 0; padding-left: 0; border-radius: 0; } .navbar-static-top .container, .navbar-fixed-top .container, .navbar-fixed-bottom .container { width: 940px; } .navbar-fixed-top { top: 0; } .navbar-fixed-bottom { bottom: 0; } .navbar .nav { position: relative; left: 0; display: block; float: left; margin: 0 10px 0 0; } .navbar .nav.pull-right { float: right; margin-right: 0; } .navbar .nav > li { float: left; } .navbar .nav > li > a:extend(.uk-navbar-item) { float: none; } .navbar .nav .dropdown-toggle .caret { margin-top: 0; } .navbar .nav > li > a:focus, .navbar .nav > li > a:hover { color: @navbar-nav-item-hover-color; outline: none; .hook-navbar-nav-item-hover(); } .navbar .nav > .active > a, .navbar .nav > .active > a:hover, .navbar .nav > .active > a:focus { color: @navbar-nav-item-active-color; .hook-navbar-nav-item-active(); } .navbar .btn-navbar { display: none; float: right; padding: 7px 10px; margin-right: 5px; margin-left: 5px; color: @global-background; background-color: #ededed; background-repeat: repeat-x; } .navbar .btn-navbar:hover, .navbar .btn-navbar:focus, .navbar .btn-navbar:active, .navbar .btn-navbar.active, .navbar .btn-navbar.disabled, .navbar .btn-navbar[disabled] { color: @global-background; background-color: @global-muted-color; } .navbar .btn-navbar .icon-bar { display: block; width: 18px; height: 2px; background-color: #f5f5f5; border-radius: 1px; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); } .btn-navbar .icon-bar + .icon-bar { margin-top: 3px; } .navbar .nav > li > .dropdown-menu { border: none; padding: 0; } .navbar .nav > li > .dropdown-menu { &:extend(.uk-navbar-dropdown all); } .navbar .nav > li.open > .dropdown-menu { display: block; .divider { border-bottom: @navbar-dropdown-nav-divider-border-width solid @navbar-dropdown-nav-divider-border; } } .navbar .nav li.dropdown > a:hover .caret, .navbar .nav li.dropdown > a:focus .caret { border-top-color: currentColor; border-bottom-color: currentColor; } .navbar .nav li.dropdown.open > .dropdown-toggle, .navbar .nav li.dropdown.active > .dropdown-toggle, .navbar .nav li.dropdown.open.active > .dropdown-toggle { color: @navbar-nav-item-active-color; .hook-navbar-nav-item-active(); } .navbar .nav li.dropdown > .dropdown-toggle .caret { border-top-color: currentColor; border-bottom-color: currentColor; } .navbar .pull-right > li > .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right { right: 0; left: auto; } .navbar .pull-right > li > .dropdown-menu:before, .navbar .nav > li > .dropdown-menu.pull-right:before { right: 12px; left: auto; } .navbar .pull-right > li > .dropdown-menu:after, .navbar .nav > li > .dropdown-menu.pull-right:after { right: 13px; left: auto; } .navbar .pull-right > li > .dropdown-menu .dropdown-menu, .navbar .nav > li > .dropdown-menu.pull-right .dropdown-menu { right: 100%; left: auto; margin-right: -1px; margin-left: 0; border-radius: 6px 0 6px 6px; } .navbar-inverse .navbar-inner { background-color: @global-secondary-background; } .navbar-inverse .brand, .navbar-inverse .nav > li > a { color: @global-inverse-color; } .navbar-inverse .brand:hover, .navbar-inverse .nav > li > a:hover, .navbar-inverse .brand:focus, .navbar-inverse .nav > li > a:focus { color: @global-inverse-color; } .navbar-inverse .brand { color: @global-inverse-color; } .navbar-inverse .navbar-text { color: @global-inverse-color; } .navbar-inverse .nav > li > a:focus, .navbar-inverse .nav > li > a:hover { color: @global-inverse-color; background-color: transparent; } .navbar-inverse .nav .active > a, .navbar-inverse .nav .active > a:hover, .navbar-inverse .nav .active > a:focus { color: @global-inverse-color; background-color: @global-secondary-background; } .navbar-inverse .navbar-link { color: @global-inverse-color; } .navbar-inverse .navbar-link:hover, .navbar-inverse .navbar-link:focus { color: @global-inverse-color; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle { color: @global-inverse-color; background-color: @global-secondary-background; } .navbar-inverse .nav li.dropdown > a:hover .caret, .navbar-inverse .nav li.dropdown > a:focus .caret { border-top-color: @global-inverse-color; border-bottom-color: @global-inverse-color; } .navbar-inverse .nav li.dropdown > .dropdown-toggle .caret { border-top-color: currentColor; border-bottom-color: currentColor; } .navbar-inverse .nav li.dropdown.open > .dropdown-toggle .caret, .navbar-inverse .nav li.dropdown.active > .dropdown-toggle .caret, .navbar-inverse .nav li.dropdown.open.active > .dropdown-toggle .caret { border-top-color: @global-inverse-color; border-bottom-color: @global-inverse-color; } .navbar-inverse .navbar-search .search-query { color: @global-inverse-color; background-color: lighten(@global-secondary-background, 10%); border-color: @global-secondary-background; -webkit-transition: none; transition: none; } .navbar-inverse .navbar-search .search-query:-moz-placeholder { color: @global-inverse-color; } .navbar-inverse .navbar-search .search-query:-ms-input-placeholder { color: @global-inverse-color; } .navbar-inverse .navbar-search .search-query::-webkit-input-placeholder { color: @global-inverse-color; } .navbar-inverse .navbar-search .search-query:focus, .navbar-inverse .navbar-search .search-query.focused { color: @global-color; background-color: @global-background; border: 0; outline: 0; } .navbar-inverse .btn-navbar { color: @global-inverse-color; background-color: @global-secondary-background; } .navbar-inverse .btn-navbar:hover, .navbar-inverse .btn-navbar:focus, .navbar-inverse .btn-navbar:active, .navbar-inverse .btn-navbar.active, .navbar-inverse .btn-navbar.disabled, .navbar-inverse .btn-navbar[disabled] { color: @global-inverse-color; background-color: @global-secondary-background; } .breadcrumb:extend(.uk-breadcrumb) { list-style: none; } .breadcrumb > li { display: inline-block; } .breadcrumb > li > .divider { padding: 0 5px; color: @breadcrumb-divider-color; } .breadcrumb > .active { color: @breadcrumb-item-active-color; } .pagination { margin: 20px 0; } .pagination ul { display: inline-block; padding: 0; margin-bottom: 0; margin-left: 0; } .pagination ul > li { display: inline; } .pagination ul > li > a, .pagination ul > li > span { float: left; color: @pagination-item-color; padding: 4px 12px; line-height: 20px; text-decoration: none; } .pagination ul > li > a:hover, .pagination ul > li > a:focus, .pagination ul > .active > a, .pagination ul > .active > span { } .pagination ul > .active > a, .pagination ul > .active > span { color: @pagination-item-active-color; cursor: default; } .pagination ul > .disabled > span, .pagination ul > .disabled > a, .pagination ul > .disabled > a:hover, .pagination ul > .disabled > a:focus { color: @pagination-item-disabled-color; cursor: default; background-color: transparent; } .pagination-centered { text-align: center; } .pagination-right { text-align: right; } .pagination-large ul > li > a, .pagination-large ul > li > span { padding: 11px 19px; font-size: 17.5px; } .pagination-small ul > li > a, .pagination-small ul > li > span { padding: 2px 10px; font-size: 11.9px; } .pagination-mini ul > li > a, .pagination-mini ul > li > span { padding: 0 6px; font-size: 10.5px; } .pager { margin: @global-margin 0; // text-align: center; list-style: none; } .pager:before, .pager:after { display: table; line-height: 0; content: ""; } .pager:after { clear: both; } .pager li { display: inline; } .pager :not([class*='uk-']) > li > a, .pager :not([class*='uk-']) > li > span { &:extend(.uk-button-link all); } .pager .next > a, .pager .next > span { float: right; } .pager .previous > a, .pager .previous > span { float: left; } .pager .disabled > a, .pager .disabled > a:hover, .pager .disabled > a:focus, .pager .disabled > span { color: @button-link-disabled-color; cursor: default; } .modal-backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; z-index: 1040; background-color: @modal-background; } .modal-backdrop.fade { opacity: 0; } .modal-backdrop, .modal-backdrop.fade.in { opacity: 0.8; } .modal-header { padding: 9px 15px; .hook-modal-header(); } .modal-header .close { margin-top: 2px; } .modal-header h3 { margin: 0; line-height: 30px; } .modal-body { position: relative; max-height: 400px; padding: 15px; overflow-y: auto; } .modal-form { margin-bottom: 0; } .modal-footer { padding: 14px 15px 15px; margin-bottom: 0; text-align: right; .hook-modal-footer(); } .modal-footer:before, .modal-footer:after { display: table; line-height: 0; content: ""; } .modal-footer:after { clear: both; } .modal-footer .btn + .btn { margin-bottom: 0; margin-left: 5px; } .modal-footer .btn-group .btn + .btn { margin-left: -1px; } .modal-footer .btn-block + .btn-block { margin-left: 0; } .tooltip { position: absolute; z-index: 1030; display: block; font-size: 11px; line-height: 1.4; opacity: 0; visibility: visible; } .tooltip.in { opacity: 0.8; } .tooltip.top { padding: 5px 0; margin-top: -3px; } .tooltip.right { padding: 0 5px; margin-left: 3px; } .tooltip.bottom { padding: 5px 0; margin-top: 3px; } .tooltip.left { padding: 0 5px; margin-left: -3px; } .tooltip-inner { max-width: 200px; padding: 8px; color: @tooltip-color; text-align: center; text-decoration: none; background-color: @tooltip-background; border-radius: @global-border-radius; } .tooltip-arrow { position: absolute; width: 0; height: 0; border-color: transparent; border-style: solid; } .tooltip.top .tooltip-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-color: @tooltip-background; border-width: 5px 5px 0; } .tooltip.right .tooltip-arrow { top: 50%; left: 0; margin-top: -5px; border-right-color: @tooltip-background; border-width: 5px 5px 5px 0; } .tooltip.left .tooltip-arrow { top: 50%; right: 0; margin-top: -5px; border-left-color: @tooltip-background; border-width: 5px 0 5px 5px; } .tooltip.bottom .tooltip-arrow { top: 0; left: 50%; margin-left: -5px; border-bottom-color: @tooltip-background; border-width: 0 5px 5px; } .popover { position: absolute; top: 0; left: 0; z-index: 1010; display: none; max-width: 276px; padding: 1px; text-align: left; white-space: normal; background-color: @global-background; border: 1px solid @global-border; border-radius: 6px; box-shadow: 0 5px 10px @global-border; -webkit-background-clip: padding-box; background-clip: padding-box; } .popover.top { margin-top: -10px; } .popover.right { margin-left: 10px; } .popover.bottom { margin-top: 10px; } .popover.left { margin-left: -10px; } .popover-title { padding: 8px 14px; margin: 0; font-size: 12px; font-weight: normal; line-height: 14px; background-color: @global-muted-background; border-radius: @global-border-radius @global-border-radius 0 0; box-sizing: border-box; } .popover-title:empty { display: none; } .popover-content { padding: 9px 14px; } .popover .arrow, .popover .arrow:after { position: absolute; display: block; width: 0; height: 0; border-color: transparent; border-style: solid; } .popover .arrow { border-width: 11px; } .popover .arrow:after { border-width: 10px; content: ""; } .popover.top .arrow { bottom: -11px; left: 50%; margin-left: -11px; border-top-color: @global-border; border-bottom-width: 0; } .popover.top .arrow:after { bottom: 1px; margin-left: -10px; border-top-color: @global-background; border-bottom-width: 0; } .popover.right .arrow { top: 50%; left: -11px; margin-top: -11px; border-right-color: @global-border; border-left-width: 0; } .popover.right .arrow:after { bottom: -10px; left: 1px; border-right-color: @global-background; border-left-width: 0; } .popover.bottom .arrow { top: -11px; left: 50%; margin-left: -11px; border-bottom-color: rgba(0, 0, 0, 0.25); border-top-width: 0; } .popover.bottom .arrow:after { top: 1px; margin-left: -10px; border-bottom-color: @global-background; border-top-width: 0; } .popover.left .arrow { top: 50%; right: -11px; margin-top: -11px; border-left-color: rgba(0, 0, 0, 0.25); border-right-width: 0; } .popover.left .arrow:after { right: 1px; bottom: -10px; border-left-color: @global-background; border-right-width: 0; } .thumbnails { margin-left: -20px; list-style: none; } .thumbnails:before, .thumbnails:after { display: table; line-height: 0; content: ""; } .thumbnails:after { clear: both; } .row-fluid .thumbnails { margin-left: 0; } .thumbnails > li { float: left; margin-bottom: @global-margin; margin-left: 20px; } .thumbnail { display: block; padding: 4px; line-height: 20px; border: 1px solid @global-border; border-radius: @global-border-radius; -webkit-transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out; } a.thumbnail:hover, a.thumbnail:focus { border-color: @text-primary-color; } .thumbnail > img { display: block; max-width: 100%; margin-right: auto; margin-left: auto; } .thumbnail .caption { padding: 9px; color: @global-muted-color; } .media, .media-body { overflow: hidden; } .media, .media .media { margin-top: 15px; } .media:first-child { margin-top: 0; } .media-object { display: block; } .media-heading { margin: 0 0 5px; } .media > .pull-left { margin-right: 10px; } .media > .pull-right { margin-left: 10px; } .media-list { margin-left: 0; list-style: none; } .label, a.label { &:extend(.uk-label); } .badge, a.badge { &:extend(.uk-badge); } .label:empty, .badge:empty { display: none; } a.label:hover, a.label:focus, a.badge:hover, a.badge:focus { text-decoration: none; cursor: pointer; } .label-important, .badge-important { &:extend(.uk-label-danger); } .label-important[href], .badge-important[href] { &:extend(.uk-label-danger); } .label-warning, .badge-warning { &:extend(.uk-label-warning); } .label-warning[href], .badge-warning[href] { &:extend(.uk-label-warning); } .label-success, .badge-success { &:extend(.uk-label-success); } .label-success[href], .badge-success[href] { &:extend(.uk-label-success); } .badge-info { background-color: @text-primary-color; } .badge-info[href] { background-color: @global-primary-background; } .badge-inverse { background-color: @global-secondary-background; } .label-inverse[href], .badge-inverse[href] { background-color: @global-secondary-background; } .btn .label, .btn .badge { position: relative; top: -1px; } .btn-mini .label, .btn-mini .badge { top: 0; } @-webkit-keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } @keyframes progress-bar-stripes { from { background-position: 40px 0; } to { background-position: 0 0; } } .progress { height: 20px; margin-bottom: @global-margin; overflow: hidden; background-color: @global-muted-background; background-repeat: repeat-x; border-radius: @global-border-radius; } .progress .bar { float: left; width: 0; height: 100%; font-size: 12px; color: @global-inverse-color; text-align: center; text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); background-color: @global-primary-background; background-repeat: repeat-x; box-sizing: border-box; -webkit-transition: width 0.6s ease; transition: width 0.6s ease; } .progress-striped .bar { background-color: @global-primary-background; background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); background-size: 40px 40px; } .progress.active .bar { -webkit-animation: progress-bar-stripes 2s linear infinite; animation: progress-bar-stripes 2s linear infinite; } .progress-danger .bar, .progress .bar-danger, .progress-danger.progress-striped .bar, .progress-striped .bar-danger { background-color: @global-danger-background; } .progress-success .bar, .progress .bar-success, .progress-success.progress-striped .bar, .progress-striped .bar-success { background-color: @global-success-background; } .progress-info .bar, .progress .bar-info { background-color: @global-primary-background; } .progress-info.progress-striped .bar, .progress-striped .bar-info { background-color: @global-primary-background; background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .progress-warning .bar, .progress .bar-warning { background-color: @global-warning-background; } .progress-warning.progress-striped .bar, .progress-striped .bar-warning { background-color: @global-warning-background; background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); } .accordion { margin-bottom: @global-margin; } .accordion-group { margin-bottom: 2px; border: 1px solid @global-border; border-radius: @global-border-radius; } .accordion-heading { border-bottom: 0; } .accordion-heading .accordion-toggle { display: block; padding: 8px 15px; } .accordion-toggle { cursor: pointer; } .accordion-toggle:hover { text-decoration: none; } .accordion-inner { padding: 9px 15px; border-top: 1px solid @global-border; } .carousel { position: relative; margin-bottom: @global-margin; line-height: 1; } .carousel-inner { position: relative; width: 100%; overflow: hidden; } .carousel-inner > .item { position: relative; display: none; -webkit-transition: 0.6s ease-in-out left; transition: 0.6s ease-in-out left; } .carousel-inner > .item > img, .carousel-inner > .item > a > img { display: block; line-height: 1; } .carousel-inner > .active, .carousel-inner > .next, .carousel-inner > .prev { display: block; } .carousel-inner > .active { left: 0; } .carousel-inner > .next, .carousel-inner > .prev { position: absolute; top: 0; width: 100%; } .carousel-inner > .next { left: 100%; } .carousel-inner > .prev { left: -100%; } .carousel-inner > .next.left, .carousel-inner > .prev.right { left: 0; } .carousel-inner > .active.left { left: -100%; } .carousel-inner > .active.right { left: 100%; } .carousel-control { position: absolute; top: 40%; left: 15px; width: 40px; height: 40px; margin-top: -20px; font-size: 60px; font-weight: 100; line-height: 30px; color: @global-inverse-color; text-align: center; background: @global-secondary-background; border: 3px solid @global-background; border-radius: 23px; opacity: 0.5; } .carousel-control.right { right: 15px; left: auto; } .carousel-control:hover, .carousel-control:focus { color: @global-inverse-color; text-decoration: none; opacity: 0.9; } .carousel-indicators { position: absolute; top: 15px; right: 15px; z-index: 5; margin: 0; list-style: none; } .carousel-indicators li { display: block; float: left; width: 10px; height: 10px; margin-left: 5px; text-indent: -999px; background-color: rgba(255, 255, 255, 0.25); border-radius: 5px; } .carousel-indicators .active { background-color: @global-background; } .carousel-caption { position: absolute; right: 0; bottom: 0; left: 0; padding: 15px; background: @overlay-default-background; } .carousel-caption h4, .carousel-caption p { line-height: 20px; color: @global-inverse-color; } .carousel-caption h4 { margin: 0 0 5px; } .carousel-caption p { margin-bottom: 0; } .hero-unit { padding: 60px; margin-bottom: 30px; font-size: 18px; font-weight: 200; line-height: 30px; color: inherit; background-color: @global-muted-background; border-radius: 6px; } .hero-unit h1 { margin-bottom: 0; font-size: 60px; line-height: 1; letter-spacing: -1px; color: inherit; } .hero-unit li { line-height: 30px; } .pull-right { float: right; } .pull-left { float: left; } .hide { display: none; } .show { display: block; } .invisible { visibility: hidden; } .affix { position: fixed; } div.modal { position: fixed; top: 10%; left: 50%; z-index: 1050; width: 560px; margin-left: -280px; background: @modal-dialog-background; outline: none; -webkit-background-clip: padding-box; background-clip: padding-box; .hook-modal-dialog(); } div.modal.fade { top: -25%; -webkit-transition: opacity 0.3s linear, top 0.3s ease-out; transition: opacity 0.3s linear, top 0.3s ease-out; } div.modal.fade.in { top: 10%; } /** * Joomla special */ .page-header { margin-bottom: @global-margin; padding-bottom: @padding-small-padding; border-bottom: 1px solid @global-border; } .inputbox[type="text"]:not([class*="input-"]) { width: auto !important; } select.inputbox:not([class*="input-"]) { width: @form-width-medium !important; } .btn-group.radio { display: block; } ul.row-striped > .row-fluid { padding: .3em .5em; } .element-invisible { position: absolute; padding: 0; margin: 0; border: 0; height: 1px; width: 1px; overflow: hidden; } // Finder module .finder label[for^="mod-finder-searchword"] { display: none; } .finder input[name="q"] { margin-bottom: @global-margin !important; } // Highlight Search Result .highlight:extend(mark){} /** * Misc. */ /* * 1. Fix Chrome initial value "min-content" */ fieldset { /* 1 */ min-width: 0; } /** * Import bootstrap responsive */ @import "responsive.less"; theme-joomla/assets/less/bootstrap-joomla3/icomoon.less000064400000027335151666572130017335 0ustar00@font-face { font-family: 'IcoMoon'; src: url('../../../../../../../media/jui/fonts/IcoMoon.eot'); src: url('../../../../../../../media/jui/fonts/IcoMoon.eot?#iefix') format('embedded-opentype'), url('../../../../../../../media/jui/fonts/IcoMoon.woff') format('woff'), url('../../../../../../../media/jui/fonts/IcoMoon.ttf') format('truetype'), url('../../../../../../../media/jui/fonts/IcoMoon.svg#IcoMoon') format('svg'); font-weight: normal; font-style: normal; } /* Use the following CSS code if you want to use data attributes for inserting your icons */ [data-icon]:before { font-family: 'IcoMoon'; content: attr(data-icon); speak: none; } /* From Bootstrap */ [class^="icon-"], [class*=" icon-"] { display: inline-block; width: 14px; height: 14px; margin-right: .25em; line-height: 14px; } /* Use the following CSS code if you want to have a class per icon */ [class^="icon-"]:before, [class*=" icon-"]:before { font-family: 'IcoMoon'; font-style: normal; speak: none; } [class^="icon-"].disabled, [class*=" icon-"].disabled { font-weight: normal; } .icon-joomla:before { content: "\e200"; } .icon-chevron-up:before, .icon-uparrow:before, .icon-arrow-up:before { content: "\e005"; } .icon-chevron-right:before, .icon-rightarrow:before, .icon-arrow-right:before{ content: "\e006"; } .icon-chevron-down:before, .icon-downarrow:before, .icon-arrow-down:before { content: "\e007"; } .icon-chevron-left:before, .icon-leftarrow:before, .icon-arrow-left:before { content: "\e008"; } .icon-arrow-first:before { content: "\e003"; } .icon-arrow-last:before { content: "\e004"; } .icon-arrow-up-2:before { content: "\e009"; } .icon-arrow-right-2:before { content: "\e00a"; } .icon-arrow-down-2:before { content: "\e00b"; } .icon-arrow-left-2:before { content: "\e00c"; } .icon-arrow-up-3:before { content: "\e00f"; } .icon-arrow-right-3:before { content: "\e010"; } .icon-arrow-down-3:before { content: "\e011"; } .icon-arrow-left-3:before { content: "\e012"; } .icon-menu-2:before { content: "\e00e"; } .icon-arrow-up-4:before { content: "\e201"; } .icon-arrow-right-4:before { content: "\e202"; } .icon-arrow-down-4:before { content: "\e203"; } .icon-arrow-left-4:before { content: "\e204"; } .icon-share:before, .icon-redo:before { content: "\27"; } .icon-undo:before { content: "\28"; } .icon-forward-2:before { content: "\e205"; } .icon-backward-2:before, .icon-reply:before { content: "\e206"; } .icon-unblock:before, .icon-refresh:before, .icon-redo-2:before { content: "\6c"; } .icon-undo-2:before { content: "\e207"; } .icon-move:before { content: "\7a"; } .icon-expand:before { content: "\66"; } .icon-contract:before { content: "\67"; } .icon-expand-2:before { content: "\68"; } .icon-contract-2:before { content: "\69"; } .icon-play:before { content: "\e208"; } .icon-pause:before { content: "\e209"; } .icon-stop:before { content: "\e210"; } .icon-previous:before, .icon-backward:before { content: "\7c"; } .icon-next:before, .icon-forward:before { content: "\7b"; } .icon-first:before { content: "\7d"; } .icon-last:before { content: "\e000"; } .icon-play-circle:before { content: "\e00d"; } .icon-pause-circle:before { content: "\e211"; } .icon-stop-circle:before { content: "\e212"; } .icon-backward-circle:before { content: "\e213"; } .icon-forward-circle:before { content: "\e214"; } .icon-loop:before { content: "\e001"; } .icon-shuffle:before { content: "\e002"; } .icon-search:before { content: "\53"; } .icon-zoom-in:before { content: "\64"; } .icon-zoom-out:before { content: "\65"; } .icon-apply:before, .icon-edit:before, .icon-pencil:before { content: "\2b"; } .icon-pencil-2:before { content: "\2c"; } .icon-brush:before { content: "\3b"; } .icon-save-new:before, .icon-plus-2:before { content: "\5d"; } .icon-minus-sign:before, .icon-minus-2:before { content: "\5e"; } .icon-delete:before, .icon-remove:before, .icon-cancel-2:before { content: "\49"; } .icon-publish:before, .icon-save:before, .icon-ok:before, .icon-checkmark:before { content: "\47"; } .icon-new:before, .icon-plus:before { content: "\2a"; } .icon-plus-circle:before { content: "\e215"; } .icon-minus:before, .icon-not-ok:before { content: "\4b"; } .icon-ban-circle:before, .icon-minus-circle:before { content: "\e216"; } .icon-unpublish:before, .icon-cancel:before { content: "\4a"; } .icon-cancel-circle:before { content: "\e217"; } .icon-checkmark-2:before { content: "\e218"; } .icon-checkmark-circle:before { content: "\e219"; } .icon-info:before { content: "\e220"; } .icon-info-2:before, .icon-info-circle:before { content: "\e221"; } .icon-question:before, .icon-question-sign:before, .icon-help:before { content: "\45"; } .icon-question-2:before, .icon-question-circle:before { content: "\e222"; } .icon-notification:before { content: "\e223"; } .icon-notification-2:before, .icon-notification-circle:before { content: "\e224"; } .icon-pending:before, .icon-warning:before { content: "\48"; } .icon-warning-2:before, .icon-warning-circle:before { content: "\e225"; } .icon-checkbox-unchecked:before { content: "\3d"; } .icon-checkin:before, .icon-checkbox:before, .icon-checkbox-checked:before { content: "\3e"; } .icon-checkbox-partial:before { content: "\3f"; } .icon-square:before { content: "\e226"; } .icon-radio-unchecked:before { content: "\e227"; } .icon-radio-checked:before, .icon-generic:before { content: "\e228"; } .icon-circle:before { content: "\e229"; } .icon-signup:before { content: "\e230"; } .icon-grid:before, .icon-grid-view:before { content: "\58"; } .icon-grid-2:before, .icon-grid-view-2:before { content: "\59"; } .icon-menu:before { content: "\5a"; } .icon-list:before, .icon-list-view:before { content: "\31"; } .icon-list-2:before { content: "\e231"; } .icon-menu-3:before { content: "\e232"; } .icon-folder-open:before, .icon-folder:before { content: "\2d"; } .icon-folder-close:before, .icon-folder-2:before { content: "\2e"; } .icon-folder-plus:before { content: "\e234"; } .icon-folder-minus:before { content: "\e235"; } .icon-folder-3:before { content: "\e236"; } .icon-folder-plus-2:before { content: "\e237"; } .icon-folder-remove:before { content: "\e238"; } .icon-file:before { content: "\e016"; } .icon-file-2:before { content: "\e239"; } .icon-file-add:before, .icon-file-plus:before { content: "\29"; } .icon-file-minus:before { content: "\e017"; } .icon-file-check:before { content: "\e240"; } .icon-file-remove:before { content: "\e241"; } .icon-save-copy:before, .icon-copy:before { content: "\e018"; } .icon-stack:before { content: "\e242"; } .icon-tree:before { content: "\e243"; } .icon-tree-2:before { content: "\e244"; } .icon-paragraph-left:before { content: "\e246"; } .icon-paragraph-center:before { content: "\e247"; } .icon-paragraph-right:before { content: "\e248"; } .icon-paragraph-justify:before { content: "\e249"; } .icon-screen:before { content: "\e01c"; } .icon-tablet:before { content: "\e01d"; } .icon-mobile:before { content: "\e01e"; } .icon-box-add:before { content: "\51"; } .icon-box-remove:before { content: "\52"; } .icon-download:before { content: "\e021"; } .icon-upload:before { content: "\e022"; } .icon-home:before { content: "\21"; } .icon-home-2:before { content: "\e250"; } .icon-out-2:before, .icon-new-tab:before { content: "\e024"; } .icon-out-3:before, .icon-new-tab-2:before { content: "\e251"; } .icon-link:before { content: "\e252"; } .icon-picture:before, .icon-image:before { content: "\2f"; } .icon-pictures:before, .icon-images:before { content: "\30"; } .icon-palette:before, .icon-color-palette:before { content: "\e014"; } .icon-camera:before { content: "\55"; } .icon-camera-2:before, .icon-video:before { content: "\e015"; } .icon-play-2:before, .icon-video-2:before, .icon-youtube:before { content: "\56"; } .icon-music:before { content: "\57"; } .icon-user:before { content: "\22"; } .icon-users:before { content: "\e01f"; } .icon-vcard:before { content: "\6d"; } .icon-address:before { content: "\70"; } .icon-share-alt:before, .icon-out:before { content: "\26"; } .icon-enter:before { content: "\e257"; } .icon-exit:before { content: "\e258"; } .icon-comment:before, .icon-comments:before { content: "\24"; } .icon-comments-2:before { content: "\25"; } .icon-quote:before, .icon-quotes-left:before { content: "\60"; } .icon-quote-2:before, .icon-quotes-right:before { content: "\61"; } .icon-quote-3:before, .icon-bubble-quote:before { content: "\e259"; } .icon-phone:before { content: "\e260"; } .icon-phone-2:before { content: "\e261"; } .icon-envelope:before, .icon-mail:before { content: "\4d"; } .icon-envelope-opened:before, .icon-mail-2:before { content: "\4e"; } .icon-unarchive:before, .icon-drawer:before { content: "\4f"; } .icon-archive:before, .icon-drawer-2:before { content: "\50"; } .icon-briefcase:before { content: "\e020"; } .icon-tag:before { content: "\e262"; } .icon-tag-2:before { content: "\e263"; } .icon-tags:before { content: "\e264"; } .icon-tags-2:before { content: "\e265"; } .icon-options:before, .icon-cog:before { content: "\38"; } .icon-cogs:before { content: "\37"; } .icon-screwdriver:before, .icon-tools:before { content: "\36"; } .icon-wrench:before { content: "\3a"; } .icon-equalizer:before { content: "\39"; } .icon-dashboard:before { content: "\78"; } .icon-switch:before { content: "\e266"; } .icon-filter:before { content: "\54"; } .icon-purge:before, .icon-trash:before { content: "\4c"; } .icon-checkedout:before, .icon-lock:before, .icon-locked:before { content: "\23"; } .icon-unlock:before { content: "\e267"; } .icon-key:before { content: "\5f"; } .icon-support:before { content: "\46"; } .icon-database:before { content: "\62"; } .icon-scissors:before { content: "\e268"; } .icon-health:before { content: "\6a"; } .icon-wand:before { content: "\6b"; } .icon-eye-open:before, .icon-eye:before { content: "\3c"; } .icon-eye-close:before, .icon-eye-blocked:before, .icon-eye-2:before { content: "\e269"; } .icon-clock:before { content: "\6e"; } .icon-compass:before { content: "\6f"; } .icon-broadcast:before, .icon-connection:before, .icon-wifi:before { content: "\e01b"; } .icon-book:before { content: "\e271"; } .icon-lightning:before, .icon-flash:before { content: "\79"; } .icon-print:before, .icon-printer:before { content: "\e013"; } .icon-feed:before { content: "\71"; } .icon-calendar:before { content: "\43"; } .icon-calendar-2:before { content: "\44"; } .icon-calendar-3:before { content: "\e273"; } .icon-pie:before { content: "\77"; } .icon-bars:before { content: "\76"; } .icon-chart:before { content: "\75"; } .icon-power-cord:before { content: "\32"; } .icon-cube:before { content: "\33"; } .icon-puzzle:before { content: "\34"; } .icon-attachment:before, .icon-paperclip:before, .icon-flag-2:before { content: "\72"; } .icon-lamp:before { content: "\74"; } .icon-pin:before, .icon-pushpin:before { content: "\73"; } .icon-location:before { content: "\63"; } .icon-shield:before { content: "\e274"; } .icon-flag:before { content: "\35"; } .icon-flag-3:before { content: "\e275"; } .icon-bookmark:before { content: "\e023"; } .icon-bookmark-2:before { content: "\e276"; } .icon-heart:before { content: "\e277"; } .icon-heart-2:before { content: "\e278"; } .icon-thumbs-up:before { content: "\5b"; } .icon-thumbs-down:before{ content: "\5c"; } .icon-unfeatured:before, .icon-asterisk:before, .icon-star-empty:before { content: "\40"; } .icon-star-2:before { content: "\41"; } .icon-featured:before, .icon-default:before, .icon-star:before{ content: "\42"; } .icon-smiley:before, .icon-smiley-happy:before { content: "\e279"; } .icon-smiley-2:before, .icon-smiley-happy-2:before { content: "\e280"; } .icon-smiley-sad:before { content: "\e281"; } .icon-smiley-sad-2:before { content: "\e282"; } .icon-smiley-neutral:before { content: "\e283"; } .icon-smiley-neutral-2:before { content: "\e284"; } .icon-cart:before { content: "\e019"; } .icon-basket:before { content: "\e01a"; } .icon-credit:before { content: "\e286"; } .icon-credit-2:before { content: "\e287"; } .icon-expired:before { content: "\4b"; } theme-joomla/assets/css/admin.css000064400001225267151666572130013054 0ustar00@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;src:url(../fonts/opensans-cd3d2360.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;src:url(../fonts/opensans-5e4a508f.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+1F00-1FFF;src:url(../fonts/opensans-b04e2538.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;src:url(../fonts/opensans-83dc890a.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;src:url(../fonts/opensans-3e16e5c4.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;src:url(../fonts/opensans-99466294.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;src:url(../fonts/opensans-b082909a.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;src:url(../fonts/opensans-ad61962b.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;src:url(../fonts/opensans-10abfae5.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:300;font-stretch:normal;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;src:url(../fonts/opensans-fee9860c.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;src:url(../fonts/opensans-e4d6f7b8.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;src:url(../fonts/opensans-77a18457.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+1F00-1FFF;src:url(../fonts/opensans-99a5f1e0.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;src:url(../fonts/opensans-aa375dd2.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;src:url(../fonts/opensans-17fd311c.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;src:url(../fonts/opensans-b0adb64c.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;src:url(../fonts/opensans-99694442.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;src:url(../fonts/opensans-848a42f3.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;src:url(../fonts/opensans-39402e3d.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;font-stretch:normal;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;src:url(../fonts/opensans-684814b4.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;src:url(../fonts/opensans-d1d07cbf.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;src:url(../fonts/opensans-42a70f50.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+1F00-1FFF;src:url(../fonts/opensans-aca37ae7.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;src:url(../fonts/opensans-9f31d6d5.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0307-0308,U+0590-05FF,U+200C-2010,U+20AA,U+25CC,U+FB1D-FB4F;src:url(../fonts/opensans-22fbba1b.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0302-0303,U+0305,U+0307-0308,U+0310,U+0312,U+0315,U+031A,U+0326-0327,U+032C,U+032F-0330,U+0332-0333,U+0338,U+033A,U+0346,U+034D,U+0391-03A1,U+03A3-03A9,U+03B1-03C9,U+03D1,U+03D5-03D6,U+03F0-03F1,U+03F4-03F5,U+2016-2017,U+2034-2038,U+203C,U+2040,U+2043,U+2047,U+2050,U+2057,U+205F,U+2070-2071,U+2074-208E,U+2090-209C,U+20D0-20DC,U+20E1,U+20E5-20EF,U+2100-2112,U+2114-2115,U+2117-2121,U+2123-214F,U+2190,U+2192,U+2194-21AE,U+21B0-21E5,U+21F1-21F2,U+21F4-2211,U+2213-2214,U+2216-22FF,U+2308-230B,U+2310,U+2319,U+231C-2321,U+2336-237A,U+237C,U+2395,U+239B-23B7,U+23D0,U+23DC-23E1,U+2474-2475,U+25AF,U+25B3,U+25B7,U+25BD,U+25C1,U+25CA,U+25CC,U+25FB,U+266D-266F,U+27C0-27FF,U+2900-2AFF,U+2B0E-2B11,U+2B30-2B4C,U+2BFE,U+3030,U+FF5B,U+FF5D,U+1D400-1D7FF,U+1EE00-1EEFF;src:url(../fonts/opensans-85ab3d4b.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0001-000C,U+000E-001F,U+007F-009F,U+20DD-20E0,U+20E2-20E4,U+2150-218F,U+2190,U+2192,U+2194-2199,U+21AF,U+21E6-21F0,U+21F3,U+2218-2219,U+2299,U+22C4-22C6,U+2300-243F,U+2440-244A,U+2460-24FF,U+25A0-27BF,U+2800-28FF,U+2921-2922,U+2981,U+29BF,U+29EB,U+2B00-2BFF,U+4DC0-4DFF,U+FFF9-FFFB,U+10140-1018E,U+10190-1019C,U+101A0,U+101D0-101FD,U+102E0-102FB,U+10E60-10E7E,U+1D2C0-1D2D3,U+1D2E0-1D37F,U+1F000-1F0FF,U+1F100-1F1AD,U+1F1E6-1F1FF,U+1F30D-1F30F,U+1F315,U+1F31C,U+1F31E,U+1F320-1F32C,U+1F336,U+1F378,U+1F37D,U+1F382,U+1F393-1F39F,U+1F3A7-1F3A8,U+1F3AC-1F3AF,U+1F3C2,U+1F3C4-1F3C6,U+1F3CA-1F3CE,U+1F3D4-1F3E0,U+1F3ED,U+1F3F1-1F3F3,U+1F3F5-1F3F7,U+1F408,U+1F415,U+1F41F,U+1F426,U+1F43F,U+1F441-1F442,U+1F444,U+1F446-1F449,U+1F44C-1F44E,U+1F453,U+1F46A,U+1F47D,U+1F4A3,U+1F4B0,U+1F4B3,U+1F4B9,U+1F4BB,U+1F4BF,U+1F4C8-1F4CB,U+1F4D6,U+1F4DA,U+1F4DF,U+1F4E3-1F4E6,U+1F4EA-1F4ED,U+1F4F7,U+1F4F9-1F4FB,U+1F4FD-1F4FE,U+1F503,U+1F507-1F50B,U+1F50D,U+1F512-1F513,U+1F53E-1F54A,U+1F54F-1F5FA,U+1F610,U+1F650-1F67F,U+1F687,U+1F68D,U+1F691,U+1F694,U+1F698,U+1F6AD,U+1F6B2,U+1F6B9-1F6BA,U+1F6BC,U+1F6C6-1F6CF,U+1F6D3-1F6D7,U+1F6E0-1F6EA,U+1F6F0-1F6F3,U+1F6F7-1F6FC,U+1F700-1F7FF,U+1F800-1F80B,U+1F810-1F847,U+1F850-1F859,U+1F860-1F887,U+1F890-1F8AD,U+1F8B0-1F8BB,U+1F8C0-1F8C1,U+1F900-1F90B,U+1F93B,U+1F946,U+1F984,U+1F996,U+1F9E9,U+1FA00-1FA6F,U+1FA70-1FA7C,U+1FA80-1FA89,U+1FA8F-1FAC6,U+1FACE-1FADC,U+1FADF-1FAE9,U+1FAF0-1FAF8,U+1FB00-1FBFF;src:url(../fonts/opensans-ac6fcf45.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;src:url(../fonts/opensans-b18cc9f4.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;src:url(../fonts/opensans-0c46a53a.woff2) format('woff2')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;font-stretch:normal;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;src:url(../fonts/opensans-30129999.woff2) format('woff2')}@font-face{font-family:Montserrat;font-style:normal;font-weight:600;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;src:url(../fonts/montserrat-f05a0e21.woff2) format('woff2')}@font-face{font-family:Montserrat;font-style:normal;font-weight:600;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;src:url(../fonts/montserrat-77cf04c9.woff2) format('woff2')}@font-face{font-family:Montserrat;font-style:normal;font-weight:600;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;src:url(../fonts/montserrat-9006bb6a.woff2) format('woff2')}@font-face{font-family:Montserrat;font-style:normal;font-weight:600;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;src:url(../fonts/montserrat-4d9062ef.woff2) format('woff2')}@font-face{font-family:Montserrat;font-style:normal;font-weight:600;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;src:url(../fonts/montserrat-a77dae9d.woff2) format('woff2')}@font-face{font-family:'Roboto Mono';font-style:normal;font-weight:400;unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F;src:url(../fonts/robotomono-68e9c833.woff2) format('woff2')}@font-face{font-family:'Roboto Mono';font-style:normal;font-weight:400;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116;src:url(../fonts/robotomono-fab34ee1.woff2) format('woff2')}@font-face{font-family:'Roboto Mono';font-style:normal;font-weight:400;unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF;src:url(../fonts/robotomono-8310d0b8.woff2) format('woff2')}@font-face{font-family:'Roboto Mono';font-style:normal;font-weight:400;unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB;src:url(../fonts/robotomono-5e86093d.woff2) format('woff2')}@font-face{font-family:'Roboto Mono';font-style:normal;font-weight:400;unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF;src:url(../fonts/robotomono-64f125cf.woff2) format('woff2')}@font-face{font-family:'Roboto Mono';font-style:normal;font-weight:400;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;src:url(../fonts/robotomono-170a121a.woff2) format('woff2')}html{font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.5;-webkit-text-size-adjust:100%;background:#f5f5f5;color:#777;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{margin:0}.uk-link,a{color:#444;text-decoration:none;cursor:pointer}.uk-link-toggle:hover .uk-link,.uk-link:hover,a:hover{color:#444;text-decoration:none}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration-style:dotted}b,strong{font-weight:bolder}:not(pre)>code,:not(pre)>kbd,:not(pre)>samp{font-family:"Roboto Mono",Consolas,monospace,serif;font-size:11px;color:#777;white-space:nowrap;padding:0 5px 1px 5px;background:#fff}em{color:#e44e56}ins{background:#ffd;color:#777;text-decoration:none}mark{background:#ffd;color:#777}q{font-style:italic}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}audio,canvas,iframe,img,svg,video{vertical-align:middle}canvas,img,svg,video{max-width:100%;height:auto;box-sizing:border-box}img:not([src]){visibility:hidden;min-width:1px}iframe{border:0}address,dl,fieldset,figure,ol,p,pre,ul{margin:0 0 20px 0}*+address,*+dl,*+fieldset,*+figure,*+ol,*+p,*+pre,*+ul{margin-top:20px}.uk-h1,.uk-h2,.uk-h3,.uk-h4,.uk-h5,.uk-h6,.uk-heading-2xlarge,.uk-heading-3xlarge,.uk-heading-large,.uk-heading-medium,.uk-heading-small,.uk-heading-xlarge,h1,h2,h3,h4,h5,h6{margin:0 0 20px 0;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;color:#444;text-transform:uppercase}*+.uk-h1,*+.uk-h2,*+.uk-h3,*+.uk-h4,*+.uk-h5,*+.uk-h6,*+.uk-heading-2xlarge,*+.uk-heading-3xlarge,*+.uk-heading-large,*+.uk-heading-medium,*+.uk-heading-small,*+.uk-heading-xlarge,*+h1,*+h2,*+h3,*+h4,*+h5,*+h6{margin-top:35px}.uk-h1,h1{font-size:20.4px;line-height:1.3;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-weight:400;text-transform:none}.uk-h2,h2{font-size:15.3px;line-height:1.3}.uk-h3,h3{font-size:13px;line-height:1.4}.uk-h4,h4{font-size:12px;line-height:1.4}.uk-h5,h5{font-size:11px;line-height:1.4}.uk-h6,h6{font-size:11px;line-height:1.4;color:#bbb}@media (min-width:960px){.uk-h1,h1{font-size:24px}.uk-h2,h2{font-size:18px}}ol,ul{padding-left:30px}ol>li>ol,ol>li>ul,ul>li>ol,ul>li>ul{margin:0}dt{font-weight:700}dd{margin-left:0}.uk-hr,hr{overflow:visible;text-align:inherit;margin:0 0 35px 0;border:0;border-top:1px solid #e5e5e5}*+.uk-hr,*+hr{margin-top:35px}address{font-style:normal}blockquote{margin:0 0 35px 0;font-size:12px;line-height:1.5;font-style:italic;text-align:center}*+blockquote{margin-top:35px}blockquote p:last-of-type{margin-bottom:0}blockquote footer{margin-top:8px;font-size:11px;line-height:1.5}blockquote footer::before{content:"— "}pre{font:11px/1.5 "Roboto Mono",Consolas,monospace,serif;color:#777;-moz-tab-size:4;tab-size:4;overflow:auto;padding:10px;background:#f5f5f5;border:1px solid #e5e5e5;border-radius:3px}pre code{font-family:"Roboto Mono",Consolas,monospace,serif}:focus{outline:0}:focus-visible{outline:2px dotted #444}::selection{background:#39f;color:#fff;text-shadow:none}details,main{display:block}summary{display:list-item}template{display:none}:root{--uk-breakpoint-s:640px;--uk-breakpoint-m:960px;--uk-breakpoint-l:1200px;--uk-breakpoint-xl:1400px}.uk-link-muted a,.uk-link-toggle .uk-link-muted,a.uk-link-muted{color:#a0a0a0}.uk-link-muted a:hover,.uk-link-toggle:hover .uk-link-muted,a.uk-link-muted:hover{color:#777}.uk-link-text a,.uk-link-toggle .uk-link-text,a.uk-link-text{color:inherit}.uk-link-text a:hover,.uk-link-toggle:hover .uk-link-text,a.uk-link-text:hover{color:#a0a0a0}.uk-link-heading a,.uk-link-toggle .uk-link-heading,a.uk-link-heading{color:inherit}.uk-link-heading a:hover,.uk-link-toggle:hover .uk-link-heading,a.uk-link-heading:hover{color:#3696f3;text-decoration:none}.uk-link-reset a,a.uk-link-reset{color:inherit!important;text-decoration:none!important}.uk-link-toggle{color:inherit!important;text-decoration:none!important}.uk-heading-small{font-size:2.6rem;line-height:1.2;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-weight:400;text-transform:none}.uk-heading-medium{font-size:3em;line-height:1.1;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-weight:400;text-transform:none}.uk-heading-large{font-size:3.4rem;line-height:1.1;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-weight:400;text-transform:none}.uk-heading-xlarge{font-size:4rem;line-height:1;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-weight:400;text-transform:none}.uk-heading-2xlarge{font-size:6rem;line-height:1;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-weight:400;text-transform:none}.uk-heading-3xlarge{font-size:8rem;line-height:1}@media (min-width:960px){.uk-heading-small{font-size:3.25rem}.uk-heading-medium{font-size:3.75rem}.uk-heading-large{font-size:4rem}.uk-heading-xlarge{font-size:6rem}.uk-heading-2xlarge{font-size:8rem}.uk-heading-3xlarge{font-size:11rem}}@media (min-width:1200px){.uk-heading-medium{font-size:4rem}.uk-heading-large{font-size:6rem}.uk-heading-xlarge{font-size:8rem}.uk-heading-2xlarge{font-size:11rem}.uk-heading-3xlarge{font-size:15rem}}.uk-heading-divider{padding-bottom:calc(5px + .1em);border-bottom:calc(.2px + .05em) solid #e5e5e5}.uk-heading-bullet{position:relative}.uk-heading-bullet::before{content:"";display:inline-block;position:relative;top:calc(-.1 * 1em);vertical-align:middle;height:calc(4px + .7em);margin-right:calc(5px + .2em);border-left:calc(5px + .1em) solid #e5e5e5}.uk-heading-line{overflow:hidden}.uk-heading-line>*{display:inline-block;position:relative}.uk-heading-line>::after,.uk-heading-line>::before{content:"";position:absolute;top:calc(50% - (calc(.2px + .05em)/ 2));width:2000px;border-bottom:calc(.2px + .05em) solid #e5e5e5}.uk-heading-line>::before{right:100%;margin-right:calc(5px + .3em)}.uk-heading-line>::after{left:100%;margin-left:calc(5px + .3em)}[class*=uk-divider]{border:none;margin-bottom:20px}*+[class*=uk-divider]{margin-top:20px}.uk-divider-icon{position:relative;height:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e5e5e5%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:50% 50%}.uk-divider-icon::after,.uk-divider-icon::before{content:"";position:absolute;top:50%;max-width:calc(50% - (50px / 2));border-bottom:1px solid #e5e5e5}.uk-divider-icon::before{right:calc(50% + (50px / 2));width:100%}.uk-divider-icon::after{left:calc(50% + (50px / 2));width:100%}.uk-divider-small{line-height:0}.uk-divider-small::after{content:"";display:inline-block;width:100px;max-width:100%;border-top:1px solid #e5e5e5;vertical-align:top}.uk-divider-vertical{width:max-content;height:100px;margin-left:auto;margin-right:auto;border-left:1px solid #e5e5e5}.uk-list{padding:0;list-style:none}.uk-list>*{break-inside:avoid-column}.uk-list>*>:last-child{margin-bottom:0}.uk-list>*>ul,.uk-list>:nth-child(n+2){margin-top:8px}.uk-list-circle,.uk-list-decimal,.uk-list-disc,.uk-list-hyphen,.uk-list-square{padding-left:30px}.uk-list-disc{list-style-type:disc}.uk-list-circle{list-style-type:circle}.uk-list-square{list-style-type:square}.uk-list-decimal{list-style-type:decimal}.uk-list-hyphen{list-style-type:'– '}.uk-list-muted>::marker{color:#a0a0a0!important}.uk-list-emphasis>::marker{color:#444!important}.uk-list-primary>::marker{color:#3696f3!important}.uk-list-secondary>::marker{color:#666!important}.uk-list-bullet>*{position:relative;padding-left:30px}.uk-list-bullet>::before{content:"";position:absolute;top:0;left:0;width:30px;height:1.5em;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23777%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-list-divider>:nth-child(n+2){margin-top:8px;padding-top:8px;border-top:1px solid #e5e5e5}.uk-list-striped>*{padding:8px 8px}.uk-list-striped>:nth-of-type(odd){border-top:1px solid #e5e5e5;border-bottom:1px solid #e5e5e5}.uk-list-striped>:nth-of-type(odd){background:#e5e5e5}.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-list-large>*>ul,.uk-list-large>:nth-child(n+2){margin-top:20px}.uk-list-collapse>*>ul,.uk-list-collapse>:nth-child(n+2){margin-top:0}.uk-list-large.uk-list-divider>:nth-child(n+2){margin-top:20px;padding-top:20px}.uk-list-collapse.uk-list-divider>:nth-child(n+2){margin-top:0;padding-top:0}.uk-list-large.uk-list-striped>*{padding:20px 8px}.uk-list-collapse.uk-list-striped>*{padding-top:0;padding-bottom:0}.uk-list-collapse.uk-list-striped>:nth-child(n+2),.uk-list-large.uk-list-striped>:nth-child(n+2){margin-top:0}.uk-description-list>dt{color:#444}.uk-description-list>dt:nth-child(n+2){margin-top:20px}.uk-description-list-divider>dt:nth-child(n+2){margin-top:20px;padding-top:20px;border-top:1px solid #e5e5e5}.uk-table{border-collapse:collapse;border-spacing:0;width:100%;margin-bottom:20px}*+.uk-table{margin-top:20px}.uk-table th{padding:16px 12px;text-align:left;vertical-align:bottom;font-size:11px;font-weight:400;color:#a0a0a0;text-transform:uppercase}.uk-table td{padding:16px 12px;vertical-align:top}.uk-table td>:last-child{margin-bottom:0}.uk-table tfoot{font-size:11px}.uk-table caption{font-size:11px;text-align:left;color:#a0a0a0}.uk-table-middle,.uk-table-middle td{vertical-align:middle!important}.uk-table-divider>:first-child>tr:not(:first-child),.uk-table-divider>:not(:first-child)>tr,.uk-table-divider>tr:not(:first-child){border-top:1px solid #e5e5e5}.uk-table-striped tbody tr:nth-of-type(odd),.uk-table-striped>tr:nth-of-type(odd){background:#e5e5e5}.uk-table-hover tbody tr:hover,.uk-table-hover>tr:hover{background:#f0f0f0}.uk-table tbody tr.uk-active,.uk-table>tr.uk-active{background:#f0f0f0}.uk-table-small td,.uk-table-small th{padding:10px 12px}.uk-table-large td,.uk-table-large th{padding:22px 12px}.uk-table-justify td:first-child,.uk-table-justify th:first-child{padding-left:0}.uk-table-justify td:last-child,.uk-table-justify th:last-child{padding-right:0}.uk-table-shrink{width:1px}.uk-table-expand{min-width:150px}.uk-table-link{padding:0!important}.uk-table-link>a{display:block;padding:16px 12px}.uk-table-small .uk-table-link>a{padding:10px 12px}@media (max-width:959px){.uk-table-responsive,.uk-table-responsive tbody,.uk-table-responsive td,.uk-table-responsive th,.uk-table-responsive tr{display:block}.uk-table-responsive thead{display:none}.uk-table-responsive td,.uk-table-responsive th{width:auto!important;max-width:none!important;min-width:0!important;overflow:visible!important;white-space:normal!important}.uk-table-responsive .uk-table-link:not(:first-child)>a,.uk-table-responsive td:not(:first-child):not(.uk-table-link),.uk-table-responsive th:not(:first-child):not(.uk-table-link){padding-top:5px!important}.uk-table-responsive .uk-table-link:not(:last-child)>a,.uk-table-responsive td:not(:last-child):not(.uk-table-link),.uk-table-responsive th:not(:last-child):not(.uk-table-link){padding-bottom:5px!important}.uk-table-justify.uk-table-responsive td,.uk-table-justify.uk-table-responsive th{padding-left:0;padding-right:0}}.uk-table tbody tr{transition:background-color .1s linear}.uk-icon{margin:0;border:none;border-radius:0;overflow:visible;font:inherit;color:inherit;text-transform:none;padding:0;background-color:transparent;display:inline-block;fill:currentcolor;line-height:0}button.uk-icon:not(:disabled){cursor:pointer}.uk-icon::-moz-focus-inner{border:0;padding:0}.uk-icon:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-icon:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-icon>*{transform:translate(0,0)}.uk-icon-image{width:20px;height:20px;background-position:50% 50%;background-repeat:no-repeat;background-size:contain;vertical-align:middle;object-fit:scale-down;max-width:none}.uk-icon-link{color:#a0a0a0;text-decoration:none!important}.uk-icon-link:hover{color:#777}.uk-active>.uk-icon-link,.uk-icon-link:active{color:#6a6a6a}.uk-icon-button{box-sizing:border-box;width:36px;height:36px;border-radius:500px;background:#e0e0e0;color:#a0a0a0;vertical-align:middle;display:inline-flex;justify-content:center;align-items:center}.uk-icon-button:hover{background-color:#d3d3d3;color:#777}.uk-active>.uk-icon-button,.uk-icon-button:active{background-color:#c6c6c6;color:#777}.uk-range{-webkit-appearance:none;box-sizing:border-box;margin:0;vertical-align:middle;max-width:100%;width:100%;background:0 0}.uk-range:focus{outline:0}.uk-range::-moz-focus-outer{border:none}.uk-range:not(:disabled)::-webkit-slider-thumb{cursor:pointer}.uk-range:not(:disabled)::-moz-range-thumb{cursor:pointer}.uk-range::-webkit-slider-runnable-track{height:3px;background:#d8d8d8;border-radius:500px}.uk-range:active::-webkit-slider-runnable-track,.uk-range:focus::-webkit-slider-runnable-track{background:#cbcbcb}.uk-range::-moz-range-track{height:3px;background:#d8d8d8;border-radius:500px}.uk-range:focus::-moz-range-track{background:#cbcbcb}.uk-range::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-7px;height:15px;width:15px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-range::-moz-range-thumb{border:none;height:15px;width:15px;margin-top:-7px;border-radius:500px;background:#fff;border:1px solid #ccc}.uk-checkbox,.uk-input,.uk-radio,.uk-select,.uk-textarea{box-sizing:border-box;margin:0;border-radius:0;font:inherit}.uk-input{overflow:visible}.uk-select{text-transform:none}.uk-select optgroup{font:inherit;font-weight:700}.uk-textarea{overflow:auto}.uk-input[type=search]::-webkit-search-cancel-button,.uk-input[type=search]::-webkit-search-decoration{-webkit-appearance:none}.uk-input[type=number]::-webkit-inner-spin-button,.uk-input[type=number]::-webkit-outer-spin-button{height:auto}.uk-input[type=date]::-webkit-datetime-edit,.uk-input[type=datetime-local]::-webkit-datetime-edit,.uk-input[type=time]::-webkit-datetime-edit{display:inline-flex;align-items:center;height:100%;padding:0}.uk-input::-moz-placeholder,.uk-textarea::-moz-placeholder{opacity:1}.uk-checkbox:not(:disabled),.uk-radio:not(:disabled){cursor:pointer}.uk-fieldset{border:none;margin:0;padding:0;min-width:0}.uk-input,.uk-textarea{-webkit-appearance:none}.uk-input,.uk-select,.uk-textarea{max-width:100%;width:100%;border:0 none;padding:0 10px;background:#fff;color:#777;border:1px solid #e5e5e5;transition:.2s ease-in-out;transition-property:color,background-color,border;box-shadow:none!important}.uk-input:hover,.uk-select:hover,.uk-textarea:hover{color:#777}.uk-input,.uk-select:not([multiple]):not([size]){height:40px;vertical-align:middle;display:inline-block}.uk-input:not(input),.uk-select:not(select){line-height:38px}.uk-select[multiple],.uk-select[size],.uk-textarea{padding-top:6px;padding-bottom:6px;vertical-align:top}.uk-select[multiple],.uk-select[size]{resize:vertical}.uk-input:focus,.uk-select.uk-focus,.uk-select:focus,.uk-textarea:focus{outline:0;background-color:#fff;color:#777;border-color:#3696f3}.uk-input:disabled,.uk-select:disabled,.uk-textarea:disabled{background-color:#f5f5f5;color:#bbb;border-color:#e5e5e5}.uk-input::placeholder{color:#bbb}.uk-textarea::placeholder{color:#bbb}.uk-form-small{font-size:11px}.uk-form-small:not(textarea):not([multiple]):not([size]){height:24px;padding-left:6px;padding-right:6px}[multiple].uk-form-small,[size].uk-form-small,textarea.uk-form-small{padding:4px 6px}.uk-form-small:not(select):not(input):not(textarea){line-height:22px}.uk-form-large{font-size:13px}.uk-form-large:not(textarea):not([multiple]):not([size]){height:55px;padding-left:12px;padding-right:12px}[multiple].uk-form-large,[size].uk-form-large,textarea.uk-form-large{padding:7px 12px}.uk-form-large:not(select):not(input):not(textarea){line-height:53px}.uk-form-danger,.uk-form-danger:focus{color:#777;border-color:#e44e56}.uk-form-success,.uk-form-success:focus{color:#777;border-color:#3dc372}.uk-form-blank{background:0 0;border-color:transparent}.uk-form-blank:focus{border-color:#e5e5e5;border-style:dashed}input.uk-form-width-xsmall{width:60px}select.uk-form-width-xsmall{width:85px}.uk-form-width-small{width:130px}.uk-form-width-medium{width:200px}.uk-form-width-large{width:500px}.uk-select:not([multiple]):not([size]){-webkit-appearance:none;-moz-appearance:none;padding-right:35px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2235%22%20height%3D%229%22%20viewBox%3D%220%200%2035%209%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20stroke-width%3D%222%22%20points%3D%2212%201%2017.5%206.5%2023%201%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-repeat:no-repeat;background-position:100% 50%}.uk-select:not([multiple]):not([size]) option{color:#777}.uk-select:not([multiple]):not([size]):disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2235%22%20height%3D%229%22%20viewBox%3D%220%200%2035%209%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23bbb%22%20stroke-width%3D%222%22%20points%3D%2212%201%2017.5%206.5%2023%201%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]{padding-right:20px;background-repeat:no-repeat;background-position:100% 50%}.uk-input[list]:focus,.uk-input[list]:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23777%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-input[list]::-webkit-calendar-picker-indicator{display:none!important}.uk-checkbox,.uk-radio{display:inline-block;height:18px;width:18px;overflow:hidden;margin-top:-2px;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;background-color:#fff;background-repeat:no-repeat;background-position:50% 50%;margin-right:4px;border:1px solid #ccc;border-radius:50%;transition:.2s ease-in-out;transition-property:background-color,border}.uk-radio{border-radius:50%}.uk-checkbox:focus,.uk-radio:focus{background-color:#f2f2f2;outline:0;border-color:#3696f3}.uk-checkbox:checked,.uk-checkbox:indeterminate,.uk-radio:checked{background-color:#3696f3;border-color:transparent}.uk-checkbox:checked:focus,.uk-checkbox:indeterminate:focus,.uk-radio:checked:focus{background-color:#0e7de8}.uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23fff%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23fff%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled,.uk-radio:disabled{background-color:#f2f2f2;border-color:#ccc}.uk-radio:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23a0a0a0%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-checkbox:disabled:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-checkbox:disabled:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23a0a0a0%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-legend{width:100%;color:inherit;padding:0;font-size:13px;line-height:1.4}.uk-form-custom{display:inline-block;position:relative;max-width:100%;vertical-align:middle}.uk-form-custom input[type=file],.uk-form-custom select{position:absolute;top:0;z-index:1;width:100%;height:100%;left:0;-webkit-appearance:none;opacity:0;cursor:pointer}.uk-form-custom input[type=file]{font-size:500px;overflow:hidden}.uk-form-stacked .uk-form-label{display:block;margin-bottom:10px;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;font-size:12px;line-height:18px;text-transform:uppercase;color:#444}@media (max-width:959px){.uk-form-horizontal .uk-form-label{display:block;margin-bottom:10px;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;font-size:12px;line-height:18px;text-transform:uppercase;color:#444}}@media (min-width:960px){.uk-form-horizontal .uk-form-label{width:200px;margin-top:7px;float:left}.uk-form-horizontal .uk-form-controls{margin-left:215px}.uk-form-horizontal .uk-form-controls-text{padding-top:7px}}.uk-form-icon{position:absolute;top:0;bottom:0;left:0;width:40px;display:inline-flex;justify-content:center;align-items:center;color:#a0a0a0}.uk-form-icon:hover{color:#777}.uk-form-icon:not(a):not(button):not(input){pointer-events:none}.uk-form-icon:not(.uk-form-icon-flip)~.uk-input{padding-left:40px!important}.uk-form-icon-flip{right:0;left:auto}.uk-form-icon-flip~.uk-input{padding-right:40px!important}.uk-form-small.uk-select:not([multiple]):not([size]){padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%229%22%20viewBox%3D%220%200%2020%209%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20stroke-width%3D%222%22%20points%3D%225.5%202%2010%206.5%2014.5%202%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-button{margin:0;border:none;overflow:visible;font:inherit;color:inherit;text-transform:none;-webkit-appearance:none;border-radius:0;display:inline-block;box-sizing:border-box;padding:0 30px;vertical-align:middle;font-size:13px;line-height:40px;text-align:center;text-decoration:none;border-radius:500px;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;text-transform:uppercase;transition:.1s ease-in-out;transition-property:color,background-color}.uk-button:not(:disabled){cursor:pointer}.uk-button::-moz-focus-inner{border:0;padding:0}.uk-button:hover{text-decoration:none}.uk-button-default{background-color:#fff;color:#777}.uk-button-default:hover{background-color:#fff;color:#444}.uk-button-default.uk-active,.uk-button-default:active{background-color:#fff;color:#444}.uk-button-primary{background-color:#3696f3;color:#fff}.uk-button-primary:hover{background-color:#1e89f2;color:#fff}.uk-button-primary.uk-active,.uk-button-primary:active{background-color:#0e7de8;color:#fff}.uk-button-secondary{background-color:#e5e5e5;color:#777}.uk-button-secondary:hover{background-color:#d8d8d8;color:#777}.uk-button-secondary.uk-active,.uk-button-secondary:active{background-color:#ccc;color:#777}.uk-button-danger{background-color:#e44e56;color:#fff}.uk-button-danger:hover{background-color:#e13841;color:#fff}.uk-button-danger.uk-active,.uk-button-danger:active{background-color:#dd222c;color:#fff}.uk-button-danger:disabled,.uk-button-default:disabled,.uk-button-primary:disabled,.uk-button-secondary:disabled{background-color:#fff;color:#bbb}.uk-button-small{padding:0 10px;line-height:24px;font-size:11px}.uk-button-large{padding:0 40px;line-height:55px;font-size:12px}.uk-button-text{padding:0;line-height:1.5;background:0 0;color:#444;position:relative}.uk-button-text::before{content:"";position:absolute;bottom:0;left:0;right:100%;border-bottom:1px solid #777;transition:right .3s ease-out}.uk-button-text:hover{color:#a0a0a0}.uk-button-text:hover::before{right:0}.uk-button-text:disabled{color:#a0a0a0}.uk-button-text:disabled::before{display:none}.uk-button-link{padding:0;line-height:1.5;background:0 0;color:#444;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-weight:400;text-transform:none}.uk-button-link:hover{color:#a0a0a0;text-decoration:none}.uk-button-link:disabled{color:#a0a0a0;text-decoration:none}.uk-button-group{display:inline-flex;vertical-align:middle;position:relative}.uk-button:disabled{cursor:auto}.uk-progress{vertical-align:baseline;display:block;width:100%;border:0;background-color:#e5e5e5;margin-bottom:20px;height:6px;border-radius:500px;overflow:hidden}*+.uk-progress{margin-top:20px}.uk-progress::-webkit-progress-bar{background-color:transparent}.uk-progress::-webkit-progress-value{background-color:#3696f3;transition:width .6s ease}.uk-progress::-moz-progress-bar{background-color:#3696f3;transition:width .6s ease}.uk-section{display:flow-root;box-sizing:border-box;padding-top:35px;padding-bottom:35px}@media (min-width:960px){.uk-section{padding-top:70px;padding-bottom:70px}}.uk-section>:last-child{margin-bottom:0}.uk-section-xsmall{padding-top:20px;padding-bottom:20px}.uk-section-small{padding-top:35px;padding-bottom:35px}.uk-section-large{padding-top:70px;padding-bottom:70px}@media (min-width:960px){.uk-section-large{padding-top:140px;padding-bottom:140px}}.uk-section-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width:960px){.uk-section-xlarge{padding-top:210px;padding-bottom:210px}}.uk-section-default{--uk-inverse:dark;background:#f5f5f5}.uk-section-muted{--uk-inverse:dark;background:#e5e5e5}.uk-section-primary{--uk-inverse:light;background:#3696f3}.uk-section-secondary{--uk-inverse:light;background:#666}.uk-container{display:flow-root;box-sizing:content-box;max-width:1200px;margin-left:auto;margin-right:auto;padding-left:15px;padding-right:15px}@media (min-width:640px){.uk-container{padding-left:30px;padding-right:30px}}@media (min-width:960px){.uk-container{padding-left:40px;padding-right:40px}}.uk-container>:last-child{margin-bottom:0}.uk-container .uk-container{padding-left:0;padding-right:0}.uk-container-xsmall{max-width:750px}.uk-container-small{max-width:900px}.uk-container-large{max-width:1400px}.uk-container-xlarge{max-width:1600px}.uk-container-expand{max-width:none}.uk-container-expand-left{margin-left:0}.uk-container-expand-right{margin-right:0}@media (min-width:640px){.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 30px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 30px)}}@media (min-width:960px){.uk-container-expand-left,.uk-container-expand-right{max-width:calc(50% + (1200px / 2) - 40px)}.uk-container-expand-left.uk-container-xsmall,.uk-container-expand-right.uk-container-xsmall{max-width:calc(50% + (750px / 2) - 40px)}.uk-container-expand-left.uk-container-small,.uk-container-expand-right.uk-container-small{max-width:calc(50% + (900px / 2) - 40px)}.uk-container-expand-left.uk-container-large,.uk-container-expand-right.uk-container-large{max-width:calc(50% + (1400px / 2) - 40px)}.uk-container-expand-left.uk-container-xlarge,.uk-container-expand-right.uk-container-xlarge{max-width:calc(50% + (1600px / 2) - 40px)}}.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 15px)}.uk-container-item-padding-remove-left{margin-left:-15px}.uk-container-item-padding-remove-right{margin-right:-15px}@media (min-width:640px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 30px)}.uk-container-item-padding-remove-left{margin-left:-30px}.uk-container-item-padding-remove-right{margin-right:-30px}}@media (min-width:960px){.uk-container-item-padding-remove-left,.uk-container-item-padding-remove-right{width:calc(100% + 40px)}.uk-container-item-padding-remove-left{margin-left:-40px}.uk-container-item-padding-remove-right{margin-right:-40px}}.uk-tile{display:flow-root;position:relative;box-sizing:border-box;padding-left:15px;padding-right:15px;padding-top:35px;padding-bottom:35px}@media (min-width:640px){.uk-tile{padding-left:30px;padding-right:30px}}@media (min-width:960px){.uk-tile{padding-left:40px;padding-right:40px;padding-top:70px;padding-bottom:70px}}.uk-tile>:last-child{margin-bottom:0}.uk-tile-xsmall{padding-top:20px;padding-bottom:20px}.uk-tile-small{padding-top:35px;padding-bottom:35px}.uk-tile-large{padding-top:70px;padding-bottom:70px}@media (min-width:960px){.uk-tile-large{padding-top:140px;padding-bottom:140px}}.uk-tile-xlarge{padding-top:140px;padding-bottom:140px}@media (min-width:960px){.uk-tile-xlarge{padding-top:210px;padding-bottom:210px}}.uk-tile-default{--uk-inverse:dark;background-color:#f5f5f5}.uk-tile-muted{--uk-inverse:dark;background-color:#e5e5e5}.uk-tile-primary{--uk-inverse:light;background-color:#3696f3}.uk-tile-secondary{--uk-inverse:light;background-color:#666}.uk-card{position:relative;box-sizing:border-box}.uk-card-body{display:flow-root;padding:30px 30px}.uk-card-header{display:flow-root;padding:15px 30px}.uk-card-footer{display:flow-root;padding:15px 30px}@media (min-width:1200px){.uk-card-body{padding:30px 30px}.uk-card-header{padding:15px 30px}.uk-card-footer{padding:15px 30px}}.uk-card-body>:last-child,.uk-card-footer>:last-child,.uk-card-header>:last-child{margin-bottom:0}.uk-card-title{font-size:13px;line-height:1.4}.uk-card-badge{position:absolute;top:15px;right:15px;z-index:1;height:22px;padding:0 10px;background:#3696f3;color:#fff;font-size:11px;display:flex;justify-content:center;align-items:center;line-height:0}.uk-card-badge:first-child+*{margin-top:0}.uk-card-hover:not(.uk-card-default):not(.uk-card-primary):not(.uk-card-secondary):hover{background-color:#ededed}.uk-card-default{--uk-inverse:dark;background-color:#ededed;color:#777}.uk-card-default .uk-card-title{color:#444}.uk-card-default.uk-card-hover:hover{background-color:#e1e1e1}.uk-card-default .uk-card-header{border-bottom:1px solid #e5e5e5}.uk-card-default .uk-card-footer{border-top:1px solid #e5e5e5}.uk-card-primary{--uk-inverse:light;background-color:#3696f3;color:#fff}.uk-card-primary .uk-card-title{color:#fff}.uk-card-primary.uk-card-hover:hover{background-color:#1e89f2}.uk-card-secondary{--uk-inverse:light;background-color:#666;color:#fff}.uk-card-secondary .uk-card-title{color:#fff}.uk-card-secondary.uk-card-hover:hover{background-color:#595959}.uk-card-small .uk-card-body,.uk-card-small.uk-card-body{padding:20px 20px}.uk-card-small .uk-card-header{padding:13px 20px}.uk-card-small .uk-card-footer{padding:13px 20px}@media (min-width:1200px){.uk-card-large .uk-card-body,.uk-card-large.uk-card-body{padding:70px 70px}.uk-card-large .uk-card-header{padding:35px 70px}.uk-card-large .uk-card-footer{padding:35px 70px}}.uk-card-body .uk-nav-default{margin:-15px -30px}.uk-card-title+.uk-nav-default{margin-top:0}.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default>li>a{padding-left:30px;padding-right:30px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:46px}@media (min-width:1200px){.uk-card-body .uk-nav-default{margin:-15px -30px}.uk-card-title+.uk-nav-default{margin-top:0}.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-body .uk-nav-default>li>a{padding-left:30px;padding-right:30px}.uk-card-body .uk-nav-default .uk-nav-sub{padding-left:46px}}.uk-card-small .uk-nav-default{margin:-5px -20px}.uk-card-small .uk-card-title+.uk-nav-default{margin-top:0}.uk-card-small .uk-nav-default .uk-nav-divider,.uk-card-small .uk-nav-default .uk-nav-header,.uk-card-small .uk-nav-default>li>a{padding-left:20px;padding-right:20px}.uk-card-small .uk-nav-default .uk-nav-sub{padding-left:36px}@media (min-width:1200px){.uk-card-large .uk-nav-default{margin:-55px -70px}.uk-card-large .uk-card-title+.uk-nav-default{margin-top:0}}.uk-close{color:#a0a0a0}.uk-close:hover{color:#777}.uk-spinner>*{animation:uk-spinner-rotate 1.4s linear infinite}@keyframes uk-spinner-rotate{0%{transform:rotate(0)}100%{transform:rotate(270deg)}}.uk-spinner>*>*{stroke-dasharray:88px;stroke-dashoffset:0;transform-origin:center;animation:uk-spinner-dash 1.4s ease-in-out infinite;stroke-width:1;stroke-linecap:round}@keyframes uk-spinner-dash{0%{stroke-dashoffset:88px}50%{stroke-dashoffset:22px;transform:rotate(135deg)}100%{stroke-dashoffset:88px;transform:rotate(450deg)}}.uk-totop{padding:5px;color:#a0a0a0}.uk-totop:hover{color:#777}.uk-totop:active{color:#444}.uk-marker{padding:5px;background:#666;color:#fff}.uk-marker:hover{color:#fff}.uk-alert{position:relative;margin-bottom:20px;padding:15px 29px 15px 15px;background:#e5e5e5;color:#777}*+.uk-alert{margin-top:20px}.uk-alert>:last-child{margin-bottom:0}.uk-alert-close{position:absolute;top:20px;right:15px;color:inherit;opacity:.4}.uk-alert-close:first-child+*{margin-top:0}.uk-alert-close:hover{color:inherit;opacity:.8}.uk-alert-primary{background:#e7f2fe;color:#3696f3}.uk-alert-success{background:#ecf9f1;color:#3dc372}.uk-alert-warning{background:#fff6ea;color:#ffb24e}.uk-alert-danger{background:#fcedee;color:#e44e56}.uk-alert h1,.uk-alert h2,.uk-alert h3,.uk-alert h4,.uk-alert h5,.uk-alert h6{color:inherit}.uk-alert a:not([class]){color:inherit;text-decoration:underline}.uk-alert a:not([class]):hover{color:inherit;text-decoration:underline}.uk-placeholder{margin-bottom:20px;padding:30px 30px;background:#fff;border:1px solid #e5e5e5}*+.uk-placeholder{margin-top:20px}.uk-placeholder>:last-child{margin-bottom:0}.uk-placeholder.uk-disabled{background-color:transparent}.uk-badge{box-sizing:border-box;min-width:18px;height:18px;padding:0 5px;border-radius:500px;vertical-align:middle;background:#3696f3;color:#fff!important;font-size:11px;display:inline-flex;justify-content:center;align-items:center;line-height:0}.uk-badge:hover{text-decoration:none}.uk-label{display:inline-block;padding:2px 8px;background:#3696f3;line-height:1.5;font-size:11px;color:#fff;vertical-align:middle;white-space:nowrap;text-transform:uppercase;border-radius:2px}.uk-label-success{background-color:#3dc372;color:#fff}.uk-label-warning{background-color:#ffb24e;color:#fff}.uk-label-danger{background-color:#e44e56;color:#fff}.uk-overlay{padding:30px 30px}.uk-overlay>:last-child{margin-bottom:0}.uk-overlay-default{--uk-inverse:dark;background:rgba(245,245,245,.8)}.uk-overlay-primary{--uk-inverse:dark;background:rgba(255,255,255,.8)}.uk-article{display:flow-root}.uk-article>:last-child{margin-bottom:0}.uk-article+.uk-article{margin-top:70px}.uk-article-title{font-size:20.4px;line-height:1.2}@media (min-width:960px){.uk-article-title{font-size:24px}}.uk-article-meta{font-size:11px;line-height:1.4;color:#a0a0a0}.uk-article-meta a{color:#a0a0a0}.uk-article-meta a:hover{color:#777;text-decoration:none}.uk-comment-body{display:flow-root;overflow-wrap:break-word;word-wrap:break-word}.uk-comment-header{display:flow-root;margin-bottom:20px}.uk-comment-body>:last-child,.uk-comment-header>:last-child{margin-bottom:0}.uk-comment-title{font-size:12px;line-height:1.4}.uk-comment-meta{font-size:11px;line-height:1.4;color:#a0a0a0}.uk-comment-list{padding:0;list-style:none}.uk-comment-list>:nth-child(n+2){margin-top:70px}.uk-comment-list .uk-comment~ul{margin:70px 0 0 0;padding-left:30px;list-style:none}@media (min-width:960px){.uk-comment-list .uk-comment~ul{padding-left:100px}}.uk-comment-list .uk-comment~ul>:nth-child(n+2){margin-top:70px}.uk-comment-primary{padding:30px;background-color:#e5e5e5}.uk-search{display:inline-block;position:relative;max-width:100%;margin:0}.uk-search-input::-webkit-search-cancel-button,.uk-search-input::-webkit-search-decoration{-webkit-appearance:none}.uk-search-input::-moz-placeholder{opacity:1}.uk-search-input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;overflow:visible;-webkit-appearance:none;vertical-align:middle;width:100%;border:none;color:#777}.uk-search-input:focus{outline:0}.uk-search-input::placeholder{color:#a0a0a0}.uk-search .uk-search-icon{position:absolute;top:0;bottom:0;left:0;display:inline-flex;justify-content:center;align-items:center;color:#a0a0a0}.uk-search .uk-search-icon:hover{color:#a0a0a0}.uk-search .uk-search-icon:not(a):not(button):not(input){pointer-events:none}.uk-search .uk-search-icon-flip{right:0;left:auto}.uk-search-default{width:240px}.uk-search-default .uk-search-input{height:40px;padding-left:10px;padding-right:10px;background:#f5f5f5;box-shadow:none!important}.uk-search-default .uk-search-input:focus{background-color:#f5f5f5}.uk-search-default .uk-search-icon{padding-left:10px;padding-right:10px}.uk-search-default:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-left:40px}.uk-search-default:has(.uk-search-icon-flip) .uk-search-input{padding-right:40px}.uk-search-navbar{width:240px}.uk-search-navbar .uk-search-input{height:40px;padding-left:10px;padding-right:10px;background:#f5f5f5;box-shadow:none!important}.uk-search-navbar .uk-search-input:focus{background-color:#f2f2f2}.uk-search-navbar .uk-search-icon{padding-left:10px;padding-right:10px}.uk-search-navbar:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-left:40px}.uk-search-navbar:has(.uk-search-icon-flip) .uk-search-input{padding-right:40px}.uk-search-medium{width:400px}.uk-search-medium .uk-search-input{height:55px;padding-left:12px;padding-right:12px;background:#f5f5f5;font-size:13px;box-shadow:none!important;border:none!important}.uk-search-medium .uk-search-input:focus{background-color:#f5f5f5}.uk-search-medium .uk-search-icon{padding-left:12px;padding-right:12px}.uk-search-medium:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-left:48px}.uk-search-medium:has(.uk-search-icon-flip) .uk-search-input{padding-right:48px}.uk-search-large{width:500px}.uk-search-large .uk-search-input{height:90px;padding-left:20px;padding-right:20px;background:#f5f5f5;font-size:24px;box-shadow:none!important}.uk-search-large .uk-search-input:focus{background-color:#f5f5f5}.uk-search-large .uk-search-icon{padding-left:20px;padding-right:20px}.uk-search-large:has(.uk-search-icon:not(.uk-search-icon-flip)) .uk-search-input{padding-left:80px}.uk-search-large:has(.uk-search-icon-flip) .uk-search-input{padding-right:80px}.uk-search-toggle{color:#a0a0a0}.uk-search-toggle:hover{color:#777}.uk-accordion{padding:0;list-style:none}.uk-accordion>*{padding-top:20px;border-top:1px solid #e5e5e5}.uk-accordion>:nth-child(n+2){margin-top:20px}.uk-accordion-title{display:block;font-size:12px;line-height:1.4;color:#444;overflow:hidden}.uk-accordion-title::after{content:"";width:1.4em;height:1.4em;float:right;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23777%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23777%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:50% 50%}.uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23777%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-accordion-title:hover{color:#777;text-decoration:none}.uk-accordion-content{display:flow-root;margin-top:20px}.uk-accordion-content>:last-child{margin-bottom:0}.uk-drop{display:none;position:absolute;z-index:600020;--uk-position-offset:20px;--uk-position-viewport-offset:15px;box-sizing:border-box;width:300px}.uk-drop.uk-open{display:block}.uk-drop-stack .uk-drop-grid>*{width:100%!important}.uk-drop-parent-icon{margin-left:.25em;transition:transform .3s ease-out}[aria-expanded=true]>.uk-drop-parent-icon{transform:rotateX(180deg)}.uk-dropbar{--uk-position-offset:0;--uk-position-shift-offset:0;--uk-position-viewport-offset:0;--uk-inverse:dark;width:auto;padding:15px 15px 15px 15px;background:#e5e5e5;color:#777}.uk-dropbar>:last-child{margin-bottom:0}@media (min-width:640px){.uk-dropbar{padding-left:30px;padding-right:30px}}@media (min-width:960px){.uk-dropbar{padding-left:40px;padding-right:40px}}.uk-dropbar :focus-visible{outline-color:#444!important}.uk-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropnav-dropbar{position:absolute;z-index:599980;padding:0;left:0;right:0}.uk-modal{display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:600010;overflow-y:auto;padding:15px 15px;background:rgba(0,0,0,.15);opacity:0;transition:opacity .15s linear}@media (min-width:640px){.uk-modal{padding:50px 30px}}@media (min-width:960px){.uk-modal{padding-left:40px;padding-right:40px}}.uk-modal.uk-open{opacity:1}.uk-modal-page{overflow:hidden}.uk-modal-dialog{position:relative;box-sizing:border-box;margin:0 auto;width:600px;max-width:100%!important;background:#f5f5f5;opacity:0;transform:translateY(-100px);transition:.3s linear;transition-property:opacity,transform;box-shadow:0 10px 30px rgba(0,0,0,.15)}.uk-open>.uk-modal-dialog{opacity:1;transform:translateY(0)}.uk-modal-container .uk-modal-dialog{width:1400px}.uk-modal-full{padding:0;background:0 0}.uk-modal-full .uk-modal-dialog{margin:0;width:100%;max-width:100%;transform:translateY(0)}.uk-modal-body{display:flow-root;padding:20px 20px}.uk-modal-header{display:flow-root;padding:10px 20px;background:#ededed}.uk-modal-footer{display:flow-root;padding:10px 20px;background:#ededed}@media (min-width:640px){.uk-modal-body{padding:40px 40px}.uk-modal-header{padding:20px 40px}.uk-modal-footer{padding:20px 40px}}.uk-modal-body>:last-child,.uk-modal-footer>:last-child,.uk-modal-header>:last-child{margin-bottom:0}.uk-modal-title{font-size:15px;line-height:1.3}[class*=uk-modal-close-]{position:absolute;z-index:600010;top:8px;right:8px;padding:5px}[class*=uk-modal-close-]:first-child+*{margin-top:0}.uk-modal-close-outside{top:0;right:-5px;transform:translate(0,-100%);color:#fff}.uk-modal-close-outside:hover{color:#fff}@media (min-width:960px){.uk-modal-close-outside{right:0;transform:translate(100%,-100%)}}.uk-modal-close-full{top:0;right:0;padding:20px;background:#f5f5f5}.uk-slideshow{-webkit-tap-highlight-color:transparent}.uk-slideshow-items{position:relative;z-index:0;margin:0;padding:0;list-style:none;overflow:hidden;-webkit-touch-callout:none;touch-action:pan-y}.uk-slideshow-items>*{position:absolute;top:0;left:0;right:0;bottom:0;overflow:hidden;will-change:transform,opacity}.uk-slideshow-items>:not(.uk-active){display:none}.uk-slider{-webkit-tap-highlight-color:transparent}.uk-slider-container{overflow:hidden;overflow:clip}.uk-slider-container-offset{margin:-11px -25px -39px -25px;padding:11px 25px 39px 25px}.uk-slider-items{will-change:transform;position:relative;touch-action:pan-y}.uk-slider-items:not(.uk-grid){display:flex;margin:0;padding:0;list-style:none;-webkit-touch-callout:none}.uk-slider-items.uk-grid{flex-wrap:nowrap}.uk-slider-items>*{flex:none!important;box-sizing:border-box;max-width:100%;position:relative}.uk-sticky{position:relative;z-index:599980;box-sizing:border-box}.uk-sticky-fixed{margin:0!important}.uk-sticky[class*=uk-animation-]{animation-duration:.2s}.uk-sticky.uk-animation-reverse{animation-duration:.2s}.uk-sticky-placeholder{pointer-events:none}.uk-offcanvas{display:none;position:fixed;top:0;bottom:0;left:0;z-index:600000}.uk-offcanvas-flip .uk-offcanvas{right:0;left:auto}.uk-offcanvas-bar{--uk-inverse:light;position:absolute;top:0;bottom:0;left:-270px;box-sizing:border-box;width:270px;padding:20px 20px;background:#666;overflow-y:auto}@media (min-width:640px){.uk-offcanvas-bar{left:-350px;width:350px;padding:30px 30px}}.uk-offcanvas-flip .uk-offcanvas-bar{left:auto;right:-270px}@media (min-width:640px){.uk-offcanvas-flip .uk-offcanvas-bar{right:-350px}}.uk-open>.uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-open>.uk-offcanvas-bar{left:auto;right:0}.uk-offcanvas-bar-animation{transition:left .3s ease-out}.uk-offcanvas-flip .uk-offcanvas-bar-animation{transition-property:right}.uk-offcanvas-reveal{position:absolute;top:0;bottom:0;left:0;width:0;overflow:hidden;transition:width .3s ease-out}.uk-offcanvas-reveal .uk-offcanvas-bar{left:0}.uk-offcanvas-flip .uk-offcanvas-reveal .uk-offcanvas-bar{left:auto;right:0}.uk-open>.uk-offcanvas-reveal{width:270px}@media (min-width:640px){.uk-open>.uk-offcanvas-reveal{width:350px}}.uk-offcanvas-flip .uk-offcanvas-reveal{right:0;left:auto}.uk-offcanvas-close{position:absolute;z-index:600000;top:5px;right:5px;padding:5px}@media (min-width:640px){.uk-offcanvas-close{top:10px;right:10px}}.uk-offcanvas-close:first-child+*{margin-top:0}.uk-offcanvas-overlay{width:100vw;touch-action:none}.uk-offcanvas-overlay::before{content:"";position:absolute;top:0;bottom:0;left:0;right:0;background:rgba(0,0,0,.1);opacity:0;transition:opacity .15s linear}.uk-offcanvas-overlay.uk-open::before{opacity:1}.uk-offcanvas-container,.uk-offcanvas-page{overflow-x:hidden;overflow-x:clip}.uk-offcanvas-container{position:relative;left:0;transition:left .3s ease-out;box-sizing:border-box;width:100%}:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:270px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-270px}@media (min-width:640px){:not(.uk-offcanvas-flip).uk-offcanvas-container-animation{left:350px}.uk-offcanvas-flip.uk-offcanvas-container-animation{left:-350px}}.uk-switcher{margin:0;padding:0;list-style:none}.uk-switcher>:not(.uk-active){display:none}.uk-switcher>*>:last-child{margin-bottom:0}.uk-leader{overflow:hidden}.uk-leader-fill::after{display:inline-block;margin-left:10px;width:0;content:attr(data-fill);white-space:nowrap}.uk-leader-fill.uk-leader-hide::after{display:none}:root{--uk-leader-fill-content:.}.uk-notification{position:fixed;top:10px;left:10px;z-index:600040;box-sizing:border-box;width:350px}.uk-notification-bottom-right,.uk-notification-top-right{left:auto;right:10px}.uk-notification-bottom-center,.uk-notification-top-center{left:50%;margin-left:-175px}.uk-notification-bottom-center,.uk-notification-bottom-left,.uk-notification-bottom-right{top:auto;bottom:10px}@media (max-width:639px){.uk-notification{left:10px;right:10px;width:auto;margin:0}}.uk-notification-message{position:relative;padding:15px;background:#f5f5f5;color:#777;font-size:16px;line-height:1.4;cursor:pointer;padding-right:30px;border-radius:4px}*+.uk-notification-message{margin-top:10px}.uk-notification-close{display:none;position:absolute;top:15px;right:15px}.uk-notification-message:hover .uk-notification-close{display:block}.uk-notification-message-primary{color:#3696f3}.uk-notification-message-success{color:#3dc372}.uk-notification-message-warning{color:#ffb24e}.uk-notification-message-danger{color:#e44e56}.uk-tooltip{display:none;position:absolute;z-index:600030;--uk-position-offset:10px;--uk-position-viewport-offset:10;top:0;box-sizing:border-box;max-width:250px;padding:3px 6px;background:#fff;border-radius:2px;color:#777;font-size:11px}.uk-tooltip.uk-active{display:block}.uk-sortable{position:relative}.uk-sortable>:last-child{margin-bottom:0}.uk-sortable-drag{position:fixed!important;z-index:600050!important;pointer-events:none}.uk-sortable-placeholder{opacity:0;pointer-events:none}.uk-sortable-empty{min-height:50px}.uk-sortable-handle:hover{cursor:move}.uk-countdown-number{font-variant-numeric:tabular-nums;font-size:2rem;line-height:.8}@media (min-width:640px){.uk-countdown-number{font-size:4rem}}@media (min-width:960px){.uk-countdown-number{font-size:6rem}}.uk-countdown-separator{font-size:1rem;line-height:1.6}@media (min-width:640px){.uk-countdown-separator{font-size:2rem}}@media (min-width:960px){.uk-countdown-separator{font-size:3rem}}.uk-thumbnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-15px}.uk-thumbnav>*{padding-left:15px}.uk-thumbnav>*>*{display:inline-block}.uk-thumbnav-vertical{flex-direction:column;margin-left:0;margin-top:-15px}.uk-thumbnav-vertical>*{padding-left:0;padding-top:15px}.uk-iconnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-8px}.uk-iconnav>*{padding-left:8px}.uk-iconnav>*>a{display:flex;align-items:center;column-gap:.25em;line-height:0;color:#a0a0a0;text-decoration:none}.uk-iconnav>*>a:hover{color:#777}.uk-iconnav>.uk-active>a{color:#777}.uk-iconnav-vertical{flex-direction:column;margin-left:0;margin-top:-8px}.uk-iconnav-vertical>*{padding-left:0;padding-top:8px}.uk-grid{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none}.uk-grid>*{margin:0}.uk-grid>*>:last-child{margin-bottom:0}.uk-grid{margin-left:-30px}.uk-grid>*{padding-left:30px}*+.uk-grid-margin,.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin{margin-top:30px}@media (min-width:1200px){.uk-grid{margin-left:-40px}.uk-grid>*{padding-left:40px}*+.uk-grid-margin,.uk-grid+.uk-grid,.uk-grid>.uk-grid-margin{margin-top:40px}}.uk-grid-column-small,.uk-grid-small{margin-left:-10px}.uk-grid-column-small>*,.uk-grid-small>*{padding-left:10px}*+.uk-grid-margin-small,.uk-grid+.uk-grid-row-small,.uk-grid+.uk-grid-small,.uk-grid-row-small>.uk-grid-margin,.uk-grid-small>.uk-grid-margin{margin-top:10px}.uk-grid-column-medium,.uk-grid-medium{margin-left:-30px}.uk-grid-column-medium>*,.uk-grid-medium>*{padding-left:30px}*+.uk-grid-margin-medium,.uk-grid+.uk-grid-medium,.uk-grid+.uk-grid-row-medium,.uk-grid-medium>.uk-grid-margin,.uk-grid-row-medium>.uk-grid-margin{margin-top:30px}.uk-grid-column-large,.uk-grid-large{margin-left:-40px}.uk-grid-column-large>*,.uk-grid-large>*{padding-left:40px}*+.uk-grid-margin-large,.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin{margin-top:40px}@media (min-width:1200px){.uk-grid-column-large,.uk-grid-large{margin-left:-70px}.uk-grid-column-large>*,.uk-grid-large>*{padding-left:70px}*+.uk-grid-margin-large,.uk-grid+.uk-grid-large,.uk-grid+.uk-grid-row-large,.uk-grid-large>.uk-grid-margin,.uk-grid-row-large>.uk-grid-margin{margin-top:70px}}.uk-grid-collapse,.uk-grid-column-collapse{margin-left:0}.uk-grid-collapse>*,.uk-grid-column-collapse>*{padding-left:0}.uk-grid+.uk-grid-collapse,.uk-grid+.uk-grid-row-collapse,.uk-grid-collapse>.uk-grid-margin,.uk-grid-row-collapse>.uk-grid-margin{margin-top:0}.uk-grid-divider>*{position:relative}.uk-grid-divider>:not(.uk-first-column)::before{content:"";position:absolute;top:0;bottom:0;border-left:1px solid #e5e5e5}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{content:"";position:absolute;left:0;right:0;border-top:1px solid #e5e5e5}.uk-grid-divider{margin-left:-60px}.uk-grid-divider>*{padding-left:60px}.uk-grid-divider>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}@media (min-width:1200px){.uk-grid-divider{margin-left:-80px}.uk-grid-divider>*{padding-left:80px}.uk-grid-divider>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}}.uk-grid-divider.uk-grid-column-small,.uk-grid-divider.uk-grid-small{margin-left:-20px}.uk-grid-divider.uk-grid-column-small>*,.uk-grid-divider.uk-grid-small>*{padding-left:20px}.uk-grid-divider.uk-grid-column-small>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-small>:not(.uk-first-column)::before{left:10px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin{margin-top:20px}.uk-grid-divider.uk-grid-small.uk-grid-stack>.uk-grid-margin::before{top:-10px;left:20px}.uk-grid-divider.uk-grid-row-small.uk-grid-stack>.uk-grid-margin::before{top:-10px}.uk-grid-divider.uk-grid-column-small.uk-grid-stack>.uk-grid-margin::before{left:20px}.uk-grid-divider.uk-grid-column-medium,.uk-grid-divider.uk-grid-medium{margin-left:-60px}.uk-grid-divider.uk-grid-column-medium>*,.uk-grid-divider.uk-grid-medium>*{padding-left:60px}.uk-grid-divider.uk-grid-column-medium>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-medium>:not(.uk-first-column)::before{left:30px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin{margin-top:60px}.uk-grid-divider.uk-grid-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px;left:60px}.uk-grid-divider.uk-grid-row-medium.uk-grid-stack>.uk-grid-margin::before{top:-30px}.uk-grid-divider.uk-grid-column-medium.uk-grid-stack>.uk-grid-margin::before{left:60px}.uk-grid-divider.uk-grid-column-large,.uk-grid-divider.uk-grid-large{margin-left:-80px}.uk-grid-divider.uk-grid-column-large>*,.uk-grid-divider.uk-grid-large>*{padding-left:80px}.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:40px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:80px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-40px;left:80px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-40px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:80px}@media (min-width:1200px){.uk-grid-divider.uk-grid-column-large,.uk-grid-divider.uk-grid-large{margin-left:-140px}.uk-grid-divider.uk-grid-column-large>*,.uk-grid-divider.uk-grid-large>*{padding-left:140px}.uk-grid-divider.uk-grid-column-large>:not(.uk-first-column)::before,.uk-grid-divider.uk-grid-large>:not(.uk-first-column)::before{left:70px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin,.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin{margin-top:140px}.uk-grid-divider.uk-grid-large.uk-grid-stack>.uk-grid-margin::before{top:-70px;left:140px}.uk-grid-divider.uk-grid-row-large.uk-grid-stack>.uk-grid-margin::before{top:-70px}.uk-grid-divider.uk-grid-column-large.uk-grid-stack>.uk-grid-margin::before{left:140px}}.uk-grid-item-match,.uk-grid-match>*{display:flex;flex-wrap:wrap}.uk-grid-item-match>:not([class*=uk-width]),.uk-grid-match>*>:not([class*=uk-width]){box-sizing:border-box;width:100%;flex:auto}.uk-nav,.uk-nav ul{margin:0;padding:0;list-style:none}.uk-nav li>a{display:flex;align-items:center;column-gap:.25em;text-decoration:none}.uk-nav>li>a{padding:8px 16px}ul.uk-nav-sub{padding:5px 0 5px 32px}.uk-nav-sub ul{padding-left:16px}.uk-nav-sub a{padding:2px 0}.uk-nav-parent-icon{margin-left:auto;transition:transform .3s ease-out}.uk-nav>li.uk-open>a .uk-nav-parent-icon{transform:rotateX(180deg)}.uk-nav-header{padding:8px 16px;text-transform:uppercase;font-size:11px}.uk-nav-header:not(:first-child){margin-top:15px}.uk-nav .uk-nav-divider{margin:15px 0}.uk-nav-default{font-size:13px;line-height:1.5}.uk-nav-default>li>a{color:#777;padding:12px 35px;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;font-size:13px;transition:.2s ease-out;transition-property:color,background-color}.uk-nav-default>li>a:hover{color:#444;background:#e5e5e5}.uk-nav-default>li.uk-active>a{color:#444;background:#e5e5e5}.uk-nav-default .uk-nav-subtitle{font-size:11px}.uk-nav-default .uk-nav-header{color:#444;padding:12px 35px}.uk-nav-default .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub{font-size:13px;line-height:1.5}.uk-nav-default .uk-nav-sub a{color:#777}.uk-nav-default .uk-nav-sub a:hover{color:#444}.uk-nav-default .uk-nav-sub li.uk-active>a{color:#444}.uk-nav-primary{font-size:13px;line-height:1.5}.uk-nav-primary>li>a{color:#444;padding:12px 35px;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;text-transform:uppercase;transition:.2s ease-out;transition-property:color,background-color}.uk-nav-primary>li>a:hover{color:#444;background:#e5e5e5}.uk-nav-primary>li.uk-active>a{color:#444;background:#e5e5e5}.uk-nav-primary .uk-nav-subtitle{font-size:12px}.uk-nav-primary .uk-nav-header{color:#444;padding:12px 35px}.uk-nav-primary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-primary .uk-nav-sub{font-size:12px;line-height:1.5}.uk-nav-primary .uk-nav-sub a{color:#a0a0a0}.uk-nav-primary .uk-nav-sub a:hover{color:#777}.uk-nav-primary .uk-nav-sub li.uk-active>a{color:#444}.uk-nav-secondary{font-size:13px;line-height:1.5}.uk-nav-secondary>li>a{color:#444}.uk-nav-secondary>li>a:hover{color:#444}.uk-nav-secondary>li.uk-active>a{color:#444}.uk-nav-secondary .uk-nav-subtitle{font-size:11px;color:#a0a0a0}.uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:#777}.uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#444}.uk-nav-secondary .uk-nav-header{color:#444}.uk-nav-secondary .uk-nav-divider{border-top:1px solid #e5e5e5}.uk-nav-secondary .uk-nav-sub{font-size:11px;line-height:1.5}.uk-nav-secondary .uk-nav-sub a{color:#a0a0a0}.uk-nav-secondary .uk-nav-sub a:hover{color:#777}.uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#444}.uk-nav-medium{font-size:2.8875rem;line-height:1}.uk-nav-large{font-size:3.4rem;line-height:1}.uk-nav-xlarge{font-size:4rem;line-height:1}@media (min-width:960px){.uk-nav-medium{font-size:3.5rem}.uk-nav-large{font-size:4rem}.uk-nav-xlarge{font-size:6rem}}@media (min-width:1200px){.uk-nav-medium{font-size:4rem}.uk-nav-large{font-size:6rem}.uk-nav-xlarge{font-size:8rem}}.uk-nav-center{text-align:center}.uk-nav-center li>a{justify-content:center}.uk-nav-center .uk-nav-sub,.uk-nav-center .uk-nav-sub ul{padding-left:0}.uk-nav-center .uk-nav-parent-icon{margin-left:.25em}.uk-nav.uk-nav-divider>:not(.uk-nav-header,.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){margin-top:5px;padding-top:5px;border-top:1px solid #e5e5e5}.uk-nav-default .uk-nav-sub ul,.uk-nav-default ul.uk-nav-sub{padding:0}.uk-nav-default .uk-nav-sub a{padding:12px 35px 12px 50px;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;font-size:13px;transition:.2s ease-out;transition-property:color,background-color}.uk-nav-default .uk-nav-sub a:hover{background:#e5e5e5}.uk-nav-default .uk-nav-sub ul a{padding-left:65px}.uk-nav-default .uk-nav-sub ul ul a{padding-left:80px}.uk-nav-default .uk-nav-sub ul ul ul a{padding-left:95px}.uk-navbar{display:flex;position:relative}.uk-navbar-container:not(.uk-navbar-transparent){background:#e5e5e5}.uk-navbar-left,.uk-navbar-right,[class*=uk-navbar-center]{display:flex;gap:0;align-items:center}.uk-navbar-right{margin-left:auto}.uk-navbar-center:only-child{margin-left:auto;margin-right:auto;position:relative}.uk-navbar-center:not(:only-child){position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:max-content;box-sizing:border-box;z-index:599990}.uk-navbar-center-left,.uk-navbar-center-right{position:absolute;top:0}.uk-navbar-center-left{right:calc(100% + 0px)}.uk-navbar-center-right{left:calc(100% + 0px)}[class*=uk-navbar-center-]{width:max-content;box-sizing:border-box}.uk-navbar-nav{display:flex;gap:0;margin:0;padding:0;list-style:none}.uk-navbar-center:only-child,.uk-navbar-left,.uk-navbar-right{flex-wrap:wrap}.uk-navbar-item,.uk-navbar-nav>li>a,.uk-navbar-toggle{display:flex;justify-content:center;align-items:center;column-gap:.25em;box-sizing:border-box;min-height:80px;font-size:13px;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;text-decoration:none}.uk-navbar-nav>li>a{padding:0 15px;color:#a0a0a0}.uk-navbar-nav>li:hover>a,.uk-navbar-nav>li>a[aria-expanded=true]{color:#777}.uk-navbar-nav>li>a:active{color:#444}.uk-navbar-nav>li.uk-active>a{color:#444}.uk-navbar-parent-icon{margin-left:4px;transition:transform .3s ease-out}.uk-navbar-nav>li>a[aria-expanded=true] .uk-navbar-parent-icon{transform:rotateX(180deg)}.uk-navbar-item{padding:0 15px;color:#777}.uk-navbar-item>:last-child{margin-bottom:0}.uk-navbar-toggle{padding:0 15px;color:#a0a0a0}.uk-navbar-toggle:hover,.uk-navbar-toggle[aria-expanded=true]{color:#777;text-decoration:none}.uk-navbar-subtitle{font-size:11px}.uk-navbar-justify .uk-navbar-item,.uk-navbar-justify .uk-navbar-left,.uk-navbar-justify .uk-navbar-nav,.uk-navbar-justify .uk-navbar-nav>li,.uk-navbar-justify .uk-navbar-right,.uk-navbar-justify .uk-navbar-toggle{flex-grow:1}.uk-navbar-dropdown{--uk-position-offset:15px;--uk-position-shift-offset:0;--uk-position-viewport-offset:15px;--uk-inverse:dark;width:200px;padding:15px;background:#f5f5f5;color:#777;box-shadow:0 2px 15px rgba(0,0,0,.06)}.uk-navbar-dropdown>:last-child{margin-bottom:0}.uk-navbar-dropdown :focus-visible{outline-color:#444!important}.uk-navbar-dropdown .uk-drop-grid{margin-left:-30px}.uk-navbar-dropdown .uk-drop-grid>*{padding-left:30px}.uk-navbar-dropdown .uk-drop-grid>.uk-grid-margin{margin-top:30px}.uk-navbar-dropdown-width-2:not(.uk-drop-stack){width:400px}.uk-navbar-dropdown-width-3:not(.uk-drop-stack){width:600px}.uk-navbar-dropdown-width-4:not(.uk-drop-stack){width:800px}.uk-navbar-dropdown-width-5:not(.uk-drop-stack){width:1000px}.uk-navbar-dropdown-large{--uk-position-shift-offset:0;padding:40px}.uk-navbar-dropdown-dropbar{width:auto;background:0 0;padding:15px 0 15px 0;--uk-position-offset:0;--uk-position-shift-offset:0;--uk-position-viewport-offset:15px;box-shadow:none}@media (min-width:640px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset:30px}}@media (min-width:960px){.uk-navbar-dropdown-dropbar{--uk-position-viewport-offset:40px}}.uk-navbar-dropdown-dropbar-large{--uk-position-shift-offset:0;padding-top:40px;padding-bottom:40px}.uk-navbar-dropdown-nav{margin:0 -15px}.uk-navbar-dropdown-nav>li>a{color:#a0a0a0;padding:6px 25px}.uk-navbar-dropdown-nav>li>a:hover{color:#777;background:#e5e5e5}.uk-navbar-dropdown-nav>li.uk-active>a{color:#444}.uk-navbar-dropdown-nav .uk-nav-subtitle{font-size:11px}.uk-navbar-dropdown-nav .uk-nav-header{color:#444;padding:6px 25px}.uk-navbar-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5;margin-top:8px;margin-bottom:8px}.uk-navbar-dropdown-nav .uk-nav-sub a{color:#a0a0a0}.uk-navbar-dropdown-nav .uk-nav-sub a:hover{color:#777}.uk-navbar-dropdown-nav .uk-nav-sub li.uk-active>a{color:#444}.uk-navbar-container>.uk-container .uk-navbar-left{margin-left:-15px;margin-right:-15px}.uk-navbar-container>.uk-container .uk-navbar-right{margin-right:-15px}.uk-navbar-dropdown-nav .uk-nav-sub{padding-left:41px}.uk-subnav{display:flex;flex-wrap:wrap;align-items:center;margin-left:-20px;padding:0;list-style:none}.uk-subnav>*{flex:none;padding-left:20px;position:relative}.uk-subnav>*>:first-child{display:flex;align-items:center;column-gap:.25em;color:#777}.uk-subnav>*>a:hover{color:#444;text-decoration:none}.uk-subnav>.uk-active>a{color:#444}.uk-subnav-divider{margin-left:-41px}.uk-subnav-divider>*{display:flex;align-items:center}.uk-subnav-divider>::before{content:"";height:1.5em;margin-left:0;margin-right:20px;border-left:1px solid transparent}.uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:#e5e5e5}.uk-subnav-pill{margin-left:-20px}.uk-subnav-pill>*{padding-left:20px}.uk-subnav-pill>*>:first-child{padding:5px 10px;background:0 0;color:#777}.uk-subnav-pill>*>a:hover{background-color:#e5e5e5;color:#777}.uk-subnav-pill>*>a:active{background-color:#e5e5e5;color:#777}.uk-subnav-pill>.uk-active>a{background-color:#3696f3;color:#fff}.uk-subnav>.uk-disabled>a{color:#a0a0a0}.uk-breadcrumb{padding:0;list-style:none;font-size:0}.uk-breadcrumb>*{display:contents}.uk-breadcrumb>*>*{font-size:13px;color:#a0a0a0}.uk-breadcrumb>*>:hover{color:#777;text-decoration:none}.uk-breadcrumb>:last-child>a:not([href]),.uk-breadcrumb>:last-child>span{color:#777}.uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{content:"/";display:inline-block;margin:0 20px;font-size:13px;color:#a0a0a0}.uk-pagination{display:flex;flex-wrap:wrap;align-items:center;margin-left:0;padding:0;list-style:none}.uk-pagination>*{flex:none;padding-left:0;position:relative}.uk-pagination>*>*{display:flex;align-items:center;column-gap:.25em;padding:5px 10px;color:#a0a0a0}.uk-pagination>*>:hover{color:#777;text-decoration:none}.uk-pagination>.uk-active>*{color:#777}.uk-pagination>.uk-disabled>*{color:#a0a0a0}.uk-tab{display:flex;flex-wrap:wrap;margin-left:-30px;padding:0;list-style:none}.uk-tab>*{flex:none;padding-left:30px;position:relative}.uk-tab>*>a{display:flex;align-items:center;column-gap:.25em;justify-content:center;padding:5px 0;color:#777;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;text-transform:uppercase;border-bottom:2px solid transparent}.uk-tab>*>a:hover{color:#444;text-decoration:none}.uk-tab>.uk-active>a{color:#444;border-color:#3696f3}.uk-tab>.uk-disabled>a{color:#a0a0a0}.uk-tab-bottom>*>a{border-top:2px solid transparent;border-bottom:none}.uk-tab-left,.uk-tab-right{flex-direction:column;margin-left:0}.uk-tab-left>*,.uk-tab-right>*{padding-left:0}.uk-tab-left>*>a{justify-content:left;border-right:2px solid transparent;border-bottom:none}.uk-tab-right>*>a{justify-content:left;border-left:2px solid transparent;border-bottom:none}.uk-tab .uk-dropdown{margin-left:30px}.uk-slidenav{padding:5px 10px;color:rgba(119,119,119,.5)}.uk-slidenav:hover{color:rgba(119,119,119,.9)}.uk-slidenav:active{color:rgba(119,119,119,.5)}.uk-slidenav-large{padding:10px 10px}.uk-slidenav-container{display:flex}.uk-dotnav{display:flex;flex-wrap:wrap;margin:0;padding:0;list-style:none;margin-left:-12px}.uk-dotnav>*{flex:none;padding-left:12px}.uk-dotnav>*>*{display:block;box-sizing:border-box;width:10px;height:10px;border-radius:50%;background:rgba(119,119,119,.2);text-indent:100%;overflow:hidden;white-space:nowrap;transition:background-color .2s ease-in-out}.uk-dotnav>*>:hover{background-color:rgba(119,119,119,.6)}.uk-dotnav>*>:active{background-color:rgba(119,119,119,.2)}.uk-dotnav>.uk-active>*{background-color:rgba(119,119,119,.6);transform:scale(1.3)}.uk-dotnav-vertical{flex-direction:column;margin-left:0;margin-top:-12px}.uk-dotnav-vertical>*{padding-left:0;padding-top:12px}.uk-dropdown{--uk-position-offset:8px;--uk-position-viewport-offset:15px;--uk-inverse:dark;width:auto;min-width:200px;padding:15px;background:#f5f5f5;color:#777;box-shadow:0 20px 30px rgba(0,0,0,.2),0 0 5px rgba(0,0,0,.02)}.uk-dropdown>:last-child{margin-bottom:0}.uk-dropdown :focus-visible{outline-color:#444!important}.uk-dropdown-large{padding:40px}.uk-dropdown-dropbar{--uk-position-offset:8px;width:auto;background:0 0;padding:15px 0 15px 0;--uk-position-viewport-offset:15px}@media (min-width:640px){.uk-dropdown-dropbar{--uk-position-viewport-offset:30px}}@media (min-width:960px){.uk-dropdown-dropbar{--uk-position-viewport-offset:40px}}.uk-dropdown-dropbar-large{padding-top:40px;padding-bottom:40px}.uk-dropdown-nav{margin:0 -15px}.uk-dropdown-nav>li>a{color:#777;padding:6px 15px;transition:.2s ease-out;transition-property:color,background-color}.uk-dropdown-nav>li.uk-active>a,.uk-dropdown-nav>li>a:hover{color:#444;background:#e5e5e5}.uk-dropdown-nav .uk-nav-subtitle{font-size:11px}.uk-dropdown-nav .uk-nav-header{color:#444;padding:6px 15px;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;font-size:11px;letter-spacing:1px;text-transform:uppercase}.uk-dropdown-nav .uk-nav-divider{border-top:1px solid #e5e5e5;margin-left:15px;margin-right:15px}.uk-dropdown-nav .uk-nav-sub a{color:#a0a0a0}.uk-dropdown-nav .uk-nav-sub a:hover,.uk-dropdown-nav .uk-nav-sub li.uk-active>a{color:#777}.uk-dropdown-nav .uk-nav-sub{padding-left:31px}.uk-dropdown .uk-input{border:1px solid #e5e5e5}.uk-lightbox{--uk-inverse:light;display:none;position:fixed;top:0;right:0;bottom:0;left:0;z-index:600010;background:#000;opacity:0;transition:opacity .15s linear;touch-action:pinch-zoom}.uk-lightbox.uk-open{display:block;opacity:1}.uk-lightbox :focus-visible{outline-color:rgba(255,255,255,.7)}.uk-lightbox-page{overflow:hidden}.uk-lightbox-items{margin:0;padding:0;list-style:none}.uk-lightbox-items>*{position:absolute;top:0;right:0;bottom:0;left:0;display:none;justify-content:center;align-items:flex-start;will-change:transform,opacity;overflow:auto}.uk-lightbox-items>.uk-active{display:flex}.uk-lightbox-items-fit>*{align-items:center}.uk-lightbox-items-fit>*>*{max-width:90vw;max-height:90vh}.uk-lightbox-items-fit>*>:not(iframe){width:auto;height:auto}.uk-lightbox-items.uk-lightbox-items-fit .uk-lightbox-zoom:hover{cursor:zoom-in}.uk-lightbox-items:not(.uk-lightbox-items-fit) .uk-lightbox-zoom:hover{cursor:zoom-out}.uk-lightbox-thumbnav-vertical :where(img,video){max-width:100px}.uk-lightbox-thumbnav:not(.uk-lightbox-thumbnav-vertical) :where(img,video){max-height:100px}.uk-lightbox-dotnav:empty,.uk-lightbox-thumbnav:empty{display:none}.uk-lightbox-caption:empty{display:none}.uk-lightbox-caption{padding:10px 10px;background:rgba(0,0,0,.3);color:rgba(255,255,255,.7)}.uk-lightbox-caption>*{color:rgba(255,255,255,.7)}.uk-lightbox-counter:empty{display:none}.uk-lightbox-iframe{width:80%;height:80%}[class*=uk-animation-]{animation:.3s ease-out both}.uk-animation-fade{animation-name:uk-fade;animation-duration:.5s;animation-timing-function:linear}.uk-animation-scale-up{animation-name:uk-fade,uk-scale-up}.uk-animation-scale-down{animation-name:uk-fade,uk-scale-down}.uk-animation-slide-top{animation-name:uk-fade,uk-slide-top}.uk-animation-slide-bottom{animation-name:uk-fade,uk-slide-bottom}.uk-animation-slide-left{animation-name:uk-fade,uk-slide-left}.uk-animation-slide-right{animation-name:uk-fade,uk-slide-right}.uk-animation-slide-top-small{animation-name:uk-fade,uk-slide-top-small}.uk-animation-slide-bottom-small{animation-name:uk-fade,uk-slide-bottom-small}.uk-animation-slide-left-small{animation-name:uk-fade,uk-slide-left-small}.uk-animation-slide-right-small{animation-name:uk-fade,uk-slide-right-small}.uk-animation-slide-top-medium{animation-name:uk-fade,uk-slide-top-medium}.uk-animation-slide-bottom-medium{animation-name:uk-fade,uk-slide-bottom-medium}.uk-animation-slide-left-medium{animation-name:uk-fade,uk-slide-left-medium}.uk-animation-slide-right-medium{animation-name:uk-fade,uk-slide-right-medium}.uk-animation-kenburns{animation-name:uk-kenburns;animation-duration:15s}.uk-animation-shake{animation-name:uk-shake}.uk-animation-stroke{animation-name:uk-stroke;animation-duration:2s;stroke-dasharray:var(--uk-animation-stroke)}.uk-animation-reverse{animation-direction:reverse;animation-timing-function:ease-in}.uk-animation-fast{animation-duration:.1s}.uk-animation-toggle:not(:hover):not(:focus) [class*=uk-animation-]{animation-name:none}@keyframes uk-fade{0%{opacity:0}100%{opacity:1}}@keyframes uk-scale-up{0%{transform:scale(.9)}100%{transform:scale(1)}}@keyframes uk-scale-down{0%{transform:scale(1.1)}100%{transform:scale(1)}}@keyframes uk-slide-top{0%{transform:translateY(-100%)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom{0%{transform:translateY(100%)}100%{transform:translateY(0)}}@keyframes uk-slide-left{0%{transform:translateX(-100%)}100%{transform:translateX(0)}}@keyframes uk-slide-right{0%{transform:translateX(100%)}100%{transform:translateX(0)}}@keyframes uk-slide-top-small{0%{transform:translateY(-10px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-small{0%{transform:translateY(10px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-small{0%{transform:translateX(-10px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-small{0%{transform:translateX(10px)}100%{transform:translateX(0)}}@keyframes uk-slide-top-medium{0%{transform:translateY(-50px)}100%{transform:translateY(0)}}@keyframes uk-slide-bottom-medium{0%{transform:translateY(50px)}100%{transform:translateY(0)}}@keyframes uk-slide-left-medium{0%{transform:translateX(-50px)}100%{transform:translateX(0)}}@keyframes uk-slide-right-medium{0%{transform:translateX(50px)}100%{transform:translateX(0)}}@keyframes uk-kenburns{0%{transform:scale(1)}100%{transform:scale(1.2)}}@keyframes uk-shake{0%,100%{transform:translateX(0)}10%{transform:translateX(-9px)}20%{transform:translateX(8px)}30%{transform:translateX(-7px)}40%{transform:translateX(6px)}50%{transform:translateX(-5px)}60%{transform:translateX(4px)}70%{transform:translateX(-3px)}80%{transform:translateX(2px)}90%{transform:translateX(-1px)}}@keyframes uk-stroke{0%{stroke-dashoffset:var(--uk-animation-stroke)}100%{stroke-dashoffset:0}}[class*=uk-child-width]>*{box-sizing:border-box;width:100%}.uk-child-width-1-2>*{width:50%}.uk-child-width-1-3>*{width:calc(100% / 3)}.uk-child-width-1-4>*{width:25%}.uk-child-width-1-5>*{width:20%}.uk-child-width-1-6>*{width:calc(100% / 6)}.uk-child-width-auto>*{width:auto}.uk-child-width-expand>:not([class*=uk-width]){flex:1;min-width:1px}@media (min-width:640px){.uk-child-width-1-1\@s>*{width:100%}.uk-child-width-1-2\@s>*{width:50%}.uk-child-width-1-3\@s>*{width:calc(100% / 3)}.uk-child-width-1-4\@s>*{width:25%}.uk-child-width-1-5\@s>*{width:20%}.uk-child-width-1-6\@s>*{width:calc(100% / 6)}.uk-child-width-auto\@s>*{width:auto}.uk-child-width-expand\@s>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@s>:not([class*=uk-width]),.uk-child-width-1-2\@s>:not([class*=uk-width]),.uk-child-width-1-3\@s>:not([class*=uk-width]),.uk-child-width-1-4\@s>:not([class*=uk-width]),.uk-child-width-1-5\@s>:not([class*=uk-width]),.uk-child-width-1-6\@s>:not([class*=uk-width]),.uk-child-width-auto\@s>:not([class*=uk-width]){flex:initial}}@media (min-width:960px){.uk-child-width-1-1\@m>*{width:100%}.uk-child-width-1-2\@m>*{width:50%}.uk-child-width-1-3\@m>*{width:calc(100% / 3)}.uk-child-width-1-4\@m>*{width:25%}.uk-child-width-1-5\@m>*{width:20%}.uk-child-width-1-6\@m>*{width:calc(100% / 6)}.uk-child-width-auto\@m>*{width:auto}.uk-child-width-expand\@m>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@m>:not([class*=uk-width]),.uk-child-width-1-2\@m>:not([class*=uk-width]),.uk-child-width-1-3\@m>:not([class*=uk-width]),.uk-child-width-1-4\@m>:not([class*=uk-width]),.uk-child-width-1-5\@m>:not([class*=uk-width]),.uk-child-width-1-6\@m>:not([class*=uk-width]),.uk-child-width-auto\@m>:not([class*=uk-width]){flex:initial}}@media (min-width:1200px){.uk-child-width-1-1\@l>*{width:100%}.uk-child-width-1-2\@l>*{width:50%}.uk-child-width-1-3\@l>*{width:calc(100% / 3)}.uk-child-width-1-4\@l>*{width:25%}.uk-child-width-1-5\@l>*{width:20%}.uk-child-width-1-6\@l>*{width:calc(100% / 6)}.uk-child-width-auto\@l>*{width:auto}.uk-child-width-expand\@l>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@l>:not([class*=uk-width]),.uk-child-width-1-2\@l>:not([class*=uk-width]),.uk-child-width-1-3\@l>:not([class*=uk-width]),.uk-child-width-1-4\@l>:not([class*=uk-width]),.uk-child-width-1-5\@l>:not([class*=uk-width]),.uk-child-width-1-6\@l>:not([class*=uk-width]),.uk-child-width-auto\@l>:not([class*=uk-width]){flex:initial}}@media (min-width:1400px){.uk-child-width-1-1\@xl>*{width:100%}.uk-child-width-1-2\@xl>*{width:50%}.uk-child-width-1-3\@xl>*{width:calc(100% / 3)}.uk-child-width-1-4\@xl>*{width:25%}.uk-child-width-1-5\@xl>*{width:20%}.uk-child-width-1-6\@xl>*{width:calc(100% / 6)}.uk-child-width-auto\@xl>*{width:auto}.uk-child-width-expand\@xl>:not([class*=uk-width]){flex:1;min-width:1px}.uk-child-width-1-1\@xl>:not([class*=uk-width]),.uk-child-width-1-2\@xl>:not([class*=uk-width]),.uk-child-width-1-3\@xl>:not([class*=uk-width]),.uk-child-width-1-4\@xl>:not([class*=uk-width]),.uk-child-width-1-5\@xl>:not([class*=uk-width]),.uk-child-width-1-6\@xl>:not([class*=uk-width]),.uk-child-width-auto\@xl>:not([class*=uk-width]){flex:initial}}[class*=uk-width]{box-sizing:border-box;width:100%;max-width:100%}.uk-width-1-2{width:50%}.uk-width-1-3{width:calc(100% / 3)}.uk-width-2-3{width:calc(200% / 3)}.uk-width-1-4{width:25%}.uk-width-3-4{width:75%}.uk-width-1-5{width:20%}.uk-width-2-5{width:40%}.uk-width-3-5{width:60%}.uk-width-4-5{width:80%}.uk-width-1-6{width:calc(100% / 6)}.uk-width-5-6{width:calc(500% / 6)}.uk-width-small{width:150px}.uk-width-medium{width:220px}.uk-width-large{width:450px}.uk-width-xlarge{width:700px}.uk-width-2xlarge{width:900px}.uk-width-auto{width:auto}.uk-width-expand{flex:1;min-width:1px}@media (min-width:640px){.uk-width-1-1\@s{width:100%}.uk-width-1-2\@s{width:50%}.uk-width-1-3\@s{width:calc(100% / 3)}.uk-width-2-3\@s{width:calc(200% / 3)}.uk-width-1-4\@s{width:25%}.uk-width-3-4\@s{width:75%}.uk-width-1-5\@s{width:20%}.uk-width-2-5\@s{width:40%}.uk-width-3-5\@s{width:60%}.uk-width-4-5\@s{width:80%}.uk-width-1-6\@s{width:calc(100% / 6)}.uk-width-5-6\@s{width:calc(500% / 6)}.uk-width-small\@s{width:150px}.uk-width-medium\@s{width:220px}.uk-width-large\@s{width:450px}.uk-width-xlarge\@s{width:700px}.uk-width-2xlarge\@s{width:900px}.uk-width-auto\@s{width:auto}.uk-width-expand\@s{flex:1;min-width:1px}.uk-width-1-1\@s,.uk-width-1-2\@s,.uk-width-1-3\@s,.uk-width-1-4\@s,.uk-width-1-5\@s,.uk-width-1-6\@s,.uk-width-2-3\@s,.uk-width-2-5\@s,.uk-width-2xlarge\@s,.uk-width-3-4\@s,.uk-width-3-5\@s,.uk-width-4-5\@s,.uk-width-5-6\@s,.uk-width-auto\@s,.uk-width-large\@s,.uk-width-medium\@s,.uk-width-small\@s,.uk-width-xlarge\@s{flex:initial}}@media (min-width:960px){.uk-width-1-1\@m{width:100%}.uk-width-1-2\@m{width:50%}.uk-width-1-3\@m{width:calc(100% / 3)}.uk-width-2-3\@m{width:calc(200% / 3)}.uk-width-1-4\@m{width:25%}.uk-width-3-4\@m{width:75%}.uk-width-1-5\@m{width:20%}.uk-width-2-5\@m{width:40%}.uk-width-3-5\@m{width:60%}.uk-width-4-5\@m{width:80%}.uk-width-1-6\@m{width:calc(100% / 6)}.uk-width-5-6\@m{width:calc(500% / 6)}.uk-width-small\@m{width:150px}.uk-width-medium\@m{width:220px}.uk-width-large\@m{width:450px}.uk-width-xlarge\@m{width:700px}.uk-width-2xlarge\@m{width:900px}.uk-width-auto\@m{width:auto}.uk-width-expand\@m{flex:1;min-width:1px}.uk-width-1-1\@m,.uk-width-1-2\@m,.uk-width-1-3\@m,.uk-width-1-4\@m,.uk-width-1-5\@m,.uk-width-1-6\@m,.uk-width-2-3\@m,.uk-width-2-5\@m,.uk-width-2xlarge\@m,.uk-width-3-4\@m,.uk-width-3-5\@m,.uk-width-4-5\@m,.uk-width-5-6\@m,.uk-width-auto\@m,.uk-width-large\@m,.uk-width-medium\@m,.uk-width-small\@m,.uk-width-xlarge\@m{flex:initial}}@media (min-width:1200px){.uk-width-1-1\@l{width:100%}.uk-width-1-2\@l{width:50%}.uk-width-1-3\@l{width:calc(100% / 3)}.uk-width-2-3\@l{width:calc(200% / 3)}.uk-width-1-4\@l{width:25%}.uk-width-3-4\@l{width:75%}.uk-width-1-5\@l{width:20%}.uk-width-2-5\@l{width:40%}.uk-width-3-5\@l{width:60%}.uk-width-4-5\@l{width:80%}.uk-width-1-6\@l{width:calc(100% / 6)}.uk-width-5-6\@l{width:calc(500% / 6)}.uk-width-small\@l{width:150px}.uk-width-medium\@l{width:220px}.uk-width-large\@l{width:450px}.uk-width-xlarge\@l{width:700px}.uk-width-2xlarge\@l{width:900px}.uk-width-auto\@l{width:auto}.uk-width-expand\@l{flex:1;min-width:1px}.uk-width-1-1\@l,.uk-width-1-2\@l,.uk-width-1-3\@l,.uk-width-1-4\@l,.uk-width-1-5\@l,.uk-width-1-6\@l,.uk-width-2-3\@l,.uk-width-2-5\@l,.uk-width-2xlarge\@l,.uk-width-3-4\@l,.uk-width-3-5\@l,.uk-width-4-5\@l,.uk-width-5-6\@l,.uk-width-auto\@l,.uk-width-large\@l,.uk-width-medium\@l,.uk-width-small\@l,.uk-width-xlarge\@l{flex:initial}}@media (min-width:1400px){.uk-width-1-1\@xl{width:100%}.uk-width-1-2\@xl{width:50%}.uk-width-1-3\@xl{width:calc(100% / 3)}.uk-width-2-3\@xl{width:calc(200% / 3)}.uk-width-1-4\@xl{width:25%}.uk-width-3-4\@xl{width:75%}.uk-width-1-5\@xl{width:20%}.uk-width-2-5\@xl{width:40%}.uk-width-3-5\@xl{width:60%}.uk-width-4-5\@xl{width:80%}.uk-width-1-6\@xl{width:calc(100% / 6)}.uk-width-5-6\@xl{width:calc(500% / 6)}.uk-width-small\@xl{width:150px}.uk-width-medium\@xl{width:220px}.uk-width-large\@xl{width:450px}.uk-width-xlarge\@xl{width:700px}.uk-width-2xlarge\@xl{width:900px}.uk-width-auto\@xl{width:auto}.uk-width-expand\@xl{flex:1;min-width:1px}.uk-width-1-1\@xl,.uk-width-1-2\@xl,.uk-width-1-3\@xl,.uk-width-1-4\@xl,.uk-width-1-5\@xl,.uk-width-1-6\@xl,.uk-width-2-3\@xl,.uk-width-2-5\@xl,.uk-width-2xlarge\@xl,.uk-width-3-4\@xl,.uk-width-3-5\@xl,.uk-width-4-5\@xl,.uk-width-5-6\@xl,.uk-width-auto\@xl,.uk-width-large\@xl,.uk-width-medium\@xl,.uk-width-small\@xl,.uk-width-xlarge\@xl{flex:initial}}.uk-width-max-content{width:max-content}.uk-width-min-content{width:min-content}[class*=uk-height]{box-sizing:border-box}.uk-height-1-1{height:100%}.uk-height-viewport{min-height:100vh}.uk-height-viewport-2{min-height:200vh}.uk-height-viewport-3{min-height:300vh}.uk-height-viewport-4{min-height:400vh}.uk-height-small{height:150px}.uk-height-medium{height:300px}.uk-height-large{height:450px}.uk-height-max-small{max-height:150px}.uk-height-max-medium{max-height:300px}.uk-height-max-large{max-height:450px}.uk-text-lead{font-size:14px;line-height:1.5;color:#444}.uk-text-meta{font-size:11px;line-height:1.4;color:#a0a0a0}.uk-text-meta a{color:#a0a0a0}.uk-text-meta a:hover{color:#777;text-decoration:none}.uk-text-small{font-size:11px;line-height:1.5}.uk-text-large{font-size:14px;line-height:1.5}.uk-text-default{font-size:13px;line-height:1.5}.uk-text-light{font-weight:300}.uk-text-normal{font-weight:400}.uk-text-bold{font-weight:700}.uk-text-lighter{font-weight:lighter}.uk-text-bolder{font-weight:bolder}.uk-text-italic{font-style:italic}.uk-text-capitalize{text-transform:capitalize!important}.uk-text-uppercase{text-transform:uppercase!important}.uk-text-lowercase{text-transform:lowercase!important}.uk-text-decoration-none{text-decoration:none!important}.uk-text-muted{color:#a0a0a0!important}.uk-text-emphasis{color:#444!important}.uk-text-primary{color:#444!important}.uk-text-secondary{color:#666!important}.uk-text-success{color:#3dc372!important}.uk-text-warning{color:#ffb24e!important}.uk-text-danger{color:#e44e56!important}.uk-text-background{-webkit-background-clip:text;color:transparent!important;display:inline-block;background-color:#3696f3}.uk-text-left{text-align:left!important}.uk-text-right{text-align:right!important}.uk-text-center{text-align:center!important}.uk-text-justify{text-align:justify!important}@media (min-width:640px){.uk-text-left\@s{text-align:left!important}.uk-text-right\@s{text-align:right!important}.uk-text-center\@s{text-align:center!important}}@media (min-width:960px){.uk-text-left\@m{text-align:left!important}.uk-text-right\@m{text-align:right!important}.uk-text-center\@m{text-align:center!important}}@media (min-width:1200px){.uk-text-left\@l{text-align:left!important}.uk-text-right\@l{text-align:right!important}.uk-text-center\@l{text-align:center!important}}@media (min-width:1400px){.uk-text-left\@xl{text-align:left!important}.uk-text-right\@xl{text-align:right!important}.uk-text-center\@xl{text-align:center!important}}.uk-text-top{vertical-align:top!important}.uk-text-middle{vertical-align:middle!important}.uk-text-bottom{vertical-align:bottom!important}.uk-text-baseline{vertical-align:baseline!important}.uk-text-nowrap{white-space:nowrap}.uk-text-truncate{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}td.uk-text-truncate,th.uk-text-truncate{max-width:0}.uk-text-break{overflow-wrap:break-word}td.uk-text-break,th.uk-text-break{word-break:break-word}.uk-text-stroke{-webkit-text-stroke:calc(1.4px + 0.002em);-webkit-text-fill-color:transparent}[class*=uk-column-]{column-gap:30px}@media (min-width:1200px){[class*=uk-column-]{column-gap:40px}}[class*=uk-column-] img{transform:translate3d(0,0,0)}.uk-column-divider{column-rule:1px solid #e5e5e5;column-gap:60px}@media (min-width:1200px){.uk-column-divider{column-gap:80px}}.uk-column-1-2{column-count:2}.uk-column-1-3{column-count:3}.uk-column-1-4{column-count:4}.uk-column-1-5{column-count:5}.uk-column-1-6{column-count:6}@media (min-width:640px){.uk-column-1-2\@s{column-count:2}.uk-column-1-3\@s{column-count:3}.uk-column-1-4\@s{column-count:4}.uk-column-1-5\@s{column-count:5}.uk-column-1-6\@s{column-count:6}}@media (min-width:960px){.uk-column-1-2\@m{column-count:2}.uk-column-1-3\@m{column-count:3}.uk-column-1-4\@m{column-count:4}.uk-column-1-5\@m{column-count:5}.uk-column-1-6\@m{column-count:6}}@media (min-width:1200px){.uk-column-1-2\@l{column-count:2}.uk-column-1-3\@l{column-count:3}.uk-column-1-4\@l{column-count:4}.uk-column-1-5\@l{column-count:5}.uk-column-1-6\@l{column-count:6}}@media (min-width:1400px){.uk-column-1-2\@xl{column-count:2}.uk-column-1-3\@xl{column-count:3}.uk-column-1-4\@xl{column-count:4}.uk-column-1-5\@xl{column-count:5}.uk-column-1-6\@xl{column-count:6}}.uk-column-span{column-span:all}[data-uk-cover]:where(canvas,iframe,svg),[uk-cover]:where(canvas,iframe,svg){max-width:none;position:absolute;left:50%;top:50%;--uk-position-translate-x:-50%;--uk-position-translate-y:-50%;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y))}iframe[data-uk-cover],iframe[uk-cover]{pointer-events:none}[data-uk-cover]:where(img,video),[uk-cover]:where(img,video){position:absolute;top:0;left:0;width:100%;height:100%;box-sizing:border-box;object-fit:cover;object-position:center}.uk-cover-container{overflow:hidden;position:relative}.uk-background-default{background-color:#f5f5f5}.uk-background-muted{background-color:#e5e5e5}.uk-background-primary{background-color:#3696f3}.uk-background-secondary{background-color:#666}.uk-background-contain,.uk-background-cover,.uk-background-height-1-1,.uk-background-width-1-1{background-position:50% 50%;background-repeat:no-repeat}.uk-background-cover{background-size:cover}.uk-background-contain{background-size:contain}.uk-background-width-1-1{background-size:100%}.uk-background-height-1-1{background-size:auto 100%}.uk-background-top-left{background-position:0 0}.uk-background-top-center{background-position:50% 0}.uk-background-top-right{background-position:100% 0}.uk-background-center-left{background-position:0 50%}.uk-background-center-center{background-position:50% 50%}.uk-background-center-right{background-position:100% 50%}.uk-background-bottom-left{background-position:0 100%}.uk-background-bottom-center{background-position:50% 100%}.uk-background-bottom-right{background-position:100% 100%}.uk-background-norepeat{background-repeat:no-repeat}.uk-background-fixed{background-attachment:fixed}@media (pointer:coarse){.uk-background-fixed{background-attachment:scroll}}@media (max-width:639px){.uk-background-image\@s{background-image:none!important}}@media (max-width:959px){.uk-background-image\@m{background-image:none!important}}@media (max-width:1199px){.uk-background-image\@l{background-image:none!important}}@media (max-width:1399px){.uk-background-image\@xl{background-image:none!important}}.uk-background-blend-multiply{background-blend-mode:multiply}.uk-background-blend-screen{background-blend-mode:screen}.uk-background-blend-overlay{background-blend-mode:overlay}.uk-background-blend-darken{background-blend-mode:darken}.uk-background-blend-lighten{background-blend-mode:lighten}.uk-background-blend-color-dodge{background-blend-mode:color-dodge}.uk-background-blend-color-burn{background-blend-mode:color-burn}.uk-background-blend-hard-light{background-blend-mode:hard-light}.uk-background-blend-soft-light{background-blend-mode:soft-light}.uk-background-blend-difference{background-blend-mode:difference}.uk-background-blend-exclusion{background-blend-mode:exclusion}.uk-background-blend-hue{background-blend-mode:hue}.uk-background-blend-saturation{background-blend-mode:saturation}.uk-background-blend-color{background-blend-mode:color}.uk-background-blend-luminosity{background-blend-mode:luminosity}[class*=uk-align]{display:block;margin-bottom:30px}*+[class*=uk-align]{margin-top:30px}.uk-align-center{margin-left:auto;margin-right:auto}.uk-align-left{margin-top:0;margin-right:30px;float:left}.uk-align-right{margin-top:0;margin-left:30px;float:right}@media (min-width:640px){.uk-align-left\@s{margin-top:0;margin-right:30px;float:left}.uk-align-right\@s{margin-top:0;margin-left:30px;float:right}}@media (min-width:960px){.uk-align-left\@m{margin-top:0;margin-right:30px;float:left}.uk-align-right\@m{margin-top:0;margin-left:30px;float:right}}@media (min-width:1200px){.uk-align-left\@l{margin-top:0;float:left}.uk-align-right\@l{margin-top:0;float:right}.uk-align-left,.uk-align-left\@l,.uk-align-left\@m,.uk-align-left\@s{margin-right:40px}.uk-align-right,.uk-align-right\@l,.uk-align-right\@m,.uk-align-right\@s{margin-left:40px}}@media (min-width:1400px){.uk-align-left\@xl{margin-top:0;margin-right:40px;float:left}.uk-align-right\@xl{margin-top:0;margin-left:40px;float:right}}.uk-svg,.uk-svg:not(.uk-preserve) [fill*="#"]:not(.uk-preserve){fill:currentcolor}.uk-svg:not(.uk-preserve) [stroke*="#"]:not(.uk-preserve){stroke:currentcolor}.uk-svg{transform:translate(0,0)}.uk-panel{display:flow-root;position:relative;box-sizing:border-box}.uk-panel>:last-child{margin-bottom:0}.uk-panel-scrollable{height:170px;padding:10px;border:1px solid #e5e5e5;overflow:auto;resize:both}.uk-clearfix::before{content:"";display:table-cell}.uk-clearfix::after{content:"";display:table;clear:both}.uk-float-left{float:left}.uk-float-right{float:right}[class*=uk-float-]{max-width:100%}.uk-overflow-hidden{overflow:hidden}.uk-overflow-auto{overflow:auto}.uk-overflow-auto>:last-child{margin-bottom:0}.uk-box-sizing-content{box-sizing:content-box}.uk-box-sizing-border{box-sizing:border-box}.uk-resize{resize:both}.uk-resize-horizontal{resize:horizontal}.uk-resize-vertical{resize:vertical}.uk-display-block{display:block!important}.uk-display-inline{display:inline!important}.uk-display-inline-block{display:inline-block!important}[class*=uk-inline]{display:inline-block;position:relative;max-width:100%;vertical-align:middle;-webkit-backface-visibility:hidden}.uk-inline-clip{overflow:hidden}.uk-preserve-width,.uk-preserve-width canvas,.uk-preserve-width img,.uk-preserve-width svg,.uk-preserve-width video{max-width:none}.uk-responsive-height,.uk-responsive-width{box-sizing:border-box}.uk-responsive-width{max-width:100%!important;height:auto}.uk-responsive-height{max-height:100%;width:auto;max-width:none}[data-uk-responsive],[uk-responsive]{max-width:100%}.uk-object-cover{object-fit:cover}.uk-object-contain{object-fit:contain}.uk-object-fill{object-fit:fill}.uk-object-none{object-fit:none}.uk-object-scale-down{object-fit:scale-down}.uk-object-top-left{object-position:0 0}.uk-object-top-center{object-position:50% 0}.uk-object-top-right{object-position:100% 0}.uk-object-center-left{object-position:0 50%}.uk-object-center-center{object-position:50% 50%}.uk-object-center-right{object-position:100% 50%}.uk-object-bottom-left{object-position:0 100%}.uk-object-bottom-center{object-position:50% 100%}.uk-object-bottom-right{object-position:100% 100%}.uk-border-circle{border-radius:50%}.uk-border-pill{border-radius:500px}.uk-border-rounded{border-radius:5px}.uk-inline-clip[class*=uk-border-]{-webkit-transform:translateZ(0)}.uk-box-shadow-small{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-medium{box-shadow:0 5px 15px rgba(0,0,0,.04)}.uk-box-shadow-large{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-xlarge{box-shadow:0 28px 50px rgba(0,0,0,.16)}[class*=uk-box-shadow-hover]{transition:box-shadow .1s ease-in-out}.uk-box-shadow-hover-small:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}.uk-box-shadow-hover-medium:hover{box-shadow:0 5px 15px rgba(0,0,0,.04)}.uk-box-shadow-hover-large:hover{box-shadow:0 14px 25px rgba(0,0,0,.16)}.uk-box-shadow-hover-xlarge:hover{box-shadow:0 28px 50px rgba(0,0,0,.16)}@supports (filter:blur(0)){.uk-box-shadow-bottom{display:inline-block;position:relative;z-index:0;max-width:100%;vertical-align:middle}.uk-box-shadow-bottom::after{content:"";position:absolute;bottom:-30px;left:0;right:0;z-index:-1;height:30px;border-radius:100%;background:#444;filter:blur(20px);will-change:filter}}.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{display:block;margin-right:10px;float:left;font-size:4.5em;line-height:1;margin-bottom:-2px}@-moz-document url-prefix(){.uk-dropcap::first-letter,.uk-dropcap>p:first-of-type::first-letter{margin-top:1.1%}}.uk-logo{font-size:24px;font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;color:#444;text-decoration:none;font-weight:400}:where(.uk-logo){display:inline-block;vertical-align:middle}.uk-logo:hover{color:#444;text-decoration:none}.uk-logo :where(img,svg,video){display:block}.uk-logo-inverse{display:none}.uk-disabled{pointer-events:none}.uk-drag,.uk-drag *{cursor:move}.uk-drag iframe{pointer-events:none}.uk-dragover{box-shadow:0 0 20px rgba(100,100,100,.3)}.uk-blend-multiply{mix-blend-mode:multiply}.uk-blend-screen{mix-blend-mode:screen}.uk-blend-overlay{mix-blend-mode:overlay}.uk-blend-darken{mix-blend-mode:darken}.uk-blend-lighten{mix-blend-mode:lighten}.uk-blend-color-dodge{mix-blend-mode:color-dodge}.uk-blend-color-burn{mix-blend-mode:color-burn}.uk-blend-hard-light{mix-blend-mode:hard-light}.uk-blend-soft-light{mix-blend-mode:soft-light}.uk-blend-difference{mix-blend-mode:difference}.uk-blend-exclusion{mix-blend-mode:exclusion}.uk-blend-hue{mix-blend-mode:hue}.uk-blend-saturation{mix-blend-mode:saturation}.uk-blend-color{mix-blend-mode:color}.uk-blend-luminosity{mix-blend-mode:luminosity}.uk-transform-center{transform:translate(-50%,-50%)}.uk-transform-origin-top-left{transform-origin:0 0}.uk-transform-origin-top-center{transform-origin:50% 0}.uk-transform-origin-top-right{transform-origin:100% 0}.uk-transform-origin-center-left{transform-origin:0 50%}.uk-transform-origin-center-right{transform-origin:100% 50%}.uk-transform-origin-bottom-left{transform-origin:0 100%}.uk-transform-origin-bottom-center{transform-origin:50% 100%}.uk-transform-origin-bottom-right{transform-origin:100% 100%}.uk-flex{display:flex}.uk-flex-inline{display:inline-flex}.uk-flex-left{justify-content:flex-start}.uk-flex-center{justify-content:center}.uk-flex-right{justify-content:flex-end}.uk-flex-between{justify-content:space-between}.uk-flex-around{justify-content:space-around}@media (min-width:640px){.uk-flex-left\@s{justify-content:flex-start}.uk-flex-center\@s{justify-content:center}.uk-flex-right\@s{justify-content:flex-end}.uk-flex-between\@s{justify-content:space-between}.uk-flex-around\@s{justify-content:space-around}}@media (min-width:960px){.uk-flex-left\@m{justify-content:flex-start}.uk-flex-center\@m{justify-content:center}.uk-flex-right\@m{justify-content:flex-end}.uk-flex-between\@m{justify-content:space-between}.uk-flex-around\@m{justify-content:space-around}}@media (min-width:1200px){.uk-flex-left\@l{justify-content:flex-start}.uk-flex-center\@l{justify-content:center}.uk-flex-right\@l{justify-content:flex-end}.uk-flex-between\@l{justify-content:space-between}.uk-flex-around\@l{justify-content:space-around}}@media (min-width:1400px){.uk-flex-left\@xl{justify-content:flex-start}.uk-flex-center\@xl{justify-content:center}.uk-flex-right\@xl{justify-content:flex-end}.uk-flex-between\@xl{justify-content:space-between}.uk-flex-around\@xl{justify-content:space-around}}.uk-flex-stretch{align-items:stretch}.uk-flex-top{align-items:flex-start}.uk-flex-middle{align-items:center}.uk-flex-bottom{align-items:flex-end}@media (min-width:640px){.uk-flex-stretch\@s{align-items:stretch}.uk-flex-top\@s{align-items:flex-start}.uk-flex-middle\@s{align-items:center}.uk-flex-bottom\@s{align-items:flex-end}}@media (min-width:960px){.uk-flex-stretch\@m{align-items:stretch}.uk-flex-top\@m{align-items:flex-start}.uk-flex-middle\@m{align-items:center}.uk-flex-bottom\@m{align-items:flex-end}}@media (min-width:1200px){.uk-flex-stretch\@l{align-items:stretch}.uk-flex-top\@l{align-items:flex-start}.uk-flex-middle\@l{align-items:center}.uk-flex-bottom\@l{align-items:flex-end}}@media (min-width:1400px){.uk-flex-stretch\@xl{align-items:stretch}.uk-flex-top\@xl{align-items:flex-start}.uk-flex-middle\@xl{align-items:center}.uk-flex-bottom\@xl{align-items:flex-end}}.uk-flex-row{flex-direction:row}.uk-flex-row-reverse{flex-direction:row-reverse}.uk-flex-column{flex-direction:column}.uk-flex-column-reverse{flex-direction:column-reverse}@media (min-width:640px){.uk-flex-row\@s{flex-direction:row}.uk-flex-column\@s{flex-direction:column}}@media (min-width:960px){.uk-flex-row\@m{flex-direction:row}.uk-flex-column\@m{flex-direction:column}}@media (min-width:1200px){.uk-flex-row\@l{flex-direction:row}.uk-flex-column\@l{flex-direction:column}}@media (min-width:1400px){.uk-flex-row\@xl{flex-direction:row}.uk-flex-column\@xl{flex-direction:column}}.uk-flex-nowrap{flex-wrap:nowrap}.uk-flex-wrap{flex-wrap:wrap}.uk-flex-wrap-reverse{flex-wrap:wrap-reverse}.uk-flex-wrap-stretch{align-content:stretch}.uk-flex-wrap-top{align-content:flex-start}.uk-flex-wrap-middle{align-content:center}.uk-flex-wrap-bottom{align-content:flex-end}.uk-flex-wrap-between{align-content:space-between}.uk-flex-wrap-around{align-content:space-around}.uk-flex-first{order:-1}.uk-flex-last{order:99}@media (min-width:640px){.uk-flex-first\@s{order:-1}.uk-flex-last\@s{order:99}}@media (min-width:960px){.uk-flex-first\@m{order:-1}.uk-flex-last\@m{order:99}}@media (min-width:1200px){.uk-flex-first\@l{order:-1}.uk-flex-last\@l{order:99}}@media (min-width:1400px){.uk-flex-first\@xl{order:-1}.uk-flex-last\@xl{order:99}}.uk-flex-initial{flex:initial}.uk-flex-none{flex:none}.uk-flex-auto{flex:auto}.uk-flex-1{flex:1}@media (min-width:640px){.uk-flex-initial\@s{flex:initial}.uk-flex-none\@s{flex:none}.uk-flex-1\@s{flex:1}}@media (min-width:960px){.uk-flex-initial\@m{flex:initial}.uk-flex-none\@m{flex:none}.uk-flex-1\@m{flex:1}}@media (min-width:1200px){.uk-flex-initial\@l{flex:initial}.uk-flex-none\@l{flex:none}.uk-flex-1\@l{flex:1}}@media (min-width:1400px){.uk-flex-initial\@xl{flex:initial}.uk-flex-none\@xl{flex:none}.uk-flex-1\@xl{flex:1}}.uk-margin{margin-bottom:20px}*+.uk-margin{margin-top:20px!important}.uk-margin-top{margin-top:20px!important}.uk-margin-bottom{margin-bottom:20px!important}.uk-margin-left{margin-left:20px!important}.uk-margin-right{margin-right:20px!important}.uk-margin-xsmall{margin-bottom:5px}*+.uk-margin-xsmall{margin-top:5px!important}.uk-margin-xsmall-top{margin-top:5px!important}.uk-margin-xsmall-bottom{margin-bottom:5px!important}.uk-margin-xsmall-left{margin-left:5px!important}.uk-margin-xsmall-right{margin-right:5px!important}.uk-margin-small{margin-bottom:8px}*+.uk-margin-small{margin-top:8px!important}.uk-margin-small-top{margin-top:8px!important}.uk-margin-small-bottom{margin-bottom:8px!important}.uk-margin-small-left{margin-left:8px!important}.uk-margin-small-right{margin-right:8px!important}.uk-margin-medium{margin-bottom:35px}*+.uk-margin-medium{margin-top:35px!important}.uk-margin-medium-top{margin-top:35px!important}.uk-margin-medium-bottom{margin-bottom:35px!important}.uk-margin-medium-left{margin-left:35px!important}.uk-margin-medium-right{margin-right:35px!important}.uk-margin-large{margin-bottom:35px}*+.uk-margin-large{margin-top:35px!important}.uk-margin-large-top{margin-top:35px!important}.uk-margin-large-bottom{margin-bottom:35px!important}.uk-margin-large-left{margin-left:35px!important}.uk-margin-large-right{margin-right:35px!important}@media (min-width:1200px){.uk-margin-large{margin-bottom:70px}*+.uk-margin-large{margin-top:70px!important}.uk-margin-large-top{margin-top:70px!important}.uk-margin-large-bottom{margin-bottom:70px!important}.uk-margin-large-left{margin-left:70px!important}.uk-margin-large-right{margin-right:70px!important}}.uk-margin-xlarge{margin-bottom:70px}*+.uk-margin-xlarge{margin-top:70px!important}.uk-margin-xlarge-top{margin-top:70px!important}.uk-margin-xlarge-bottom{margin-bottom:70px!important}.uk-margin-xlarge-left{margin-left:70px!important}.uk-margin-xlarge-right{margin-right:70px!important}@media (min-width:1200px){.uk-margin-xlarge{margin-bottom:140px}*+.uk-margin-xlarge{margin-top:140px!important}.uk-margin-xlarge-top{margin-top:140px!important}.uk-margin-xlarge-bottom{margin-bottom:140px!important}.uk-margin-xlarge-left{margin-left:140px!important}.uk-margin-xlarge-right{margin-right:140px!important}}.uk-margin-auto{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-top{margin-top:auto!important}.uk-margin-auto-bottom{margin-bottom:auto!important}.uk-margin-auto-left{margin-left:auto!important}.uk-margin-auto-right{margin-right:auto!important}.uk-margin-auto-vertical{margin-top:auto!important;margin-bottom:auto!important}@media (min-width:640px){.uk-margin-auto\@s{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@s{margin-left:auto!important}.uk-margin-auto-right\@s{margin-right:auto!important}}@media (min-width:960px){.uk-margin-auto\@m{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@m{margin-left:auto!important}.uk-margin-auto-right\@m{margin-right:auto!important}}@media (min-width:1200px){.uk-margin-auto\@l{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@l{margin-left:auto!important}.uk-margin-auto-right\@l{margin-right:auto!important}}@media (min-width:1400px){.uk-margin-auto\@xl{margin-left:auto!important;margin-right:auto!important}.uk-margin-auto-left\@xl{margin-left:auto!important}.uk-margin-auto-right\@xl{margin-right:auto!important}}.uk-margin-remove{margin:0!important}.uk-margin-remove-top{margin-top:0!important}.uk-margin-remove-bottom{margin-bottom:0!important}.uk-margin-remove-left{margin-left:0!important}.uk-margin-remove-right{margin-right:0!important}.uk-margin-remove-vertical{margin-top:0!important;margin-bottom:0!important}.uk-margin-remove-adjacent+*,.uk-margin-remove-first-child>:first-child{margin-top:0!important}.uk-margin-remove-last-child>:last-child{margin-bottom:0!important}@media (min-width:640px){.uk-margin-remove-left\@s{margin-left:0!important}.uk-margin-remove-right\@s{margin-right:0!important}}@media (min-width:960px){.uk-margin-remove-left\@m{margin-left:0!important}.uk-margin-remove-right\@m{margin-right:0!important}}@media (min-width:1200px){.uk-margin-remove-left\@l{margin-left:0!important}.uk-margin-remove-right\@l{margin-right:0!important}}@media (min-width:1400px){.uk-margin-remove-left\@xl{margin-left:0!important}.uk-margin-remove-right\@xl{margin-right:0!important}}.uk-padding{padding:30px}@media (min-width:1200px){.uk-padding{padding:40px}}.uk-padding-small{padding:10px}.uk-padding-large{padding:40px}@media (min-width:1200px){.uk-padding-large{padding:70px}}.uk-padding-remove{padding:0!important}.uk-padding-remove-top{padding-top:0!important}.uk-padding-remove-bottom{padding-bottom:0!important}.uk-padding-remove-left{padding-left:0!important}.uk-padding-remove-right{padding-right:0!important}.uk-padding-remove-vertical{padding-top:0!important;padding-bottom:0!important}.uk-padding-remove-horizontal{padding-left:0!important;padding-right:0!important}:root{--uk-position-margin-offset:0px}[class*=uk-position-bottom],[class*=uk-position-center],[class*=uk-position-left],[class*=uk-position-right],[class*=uk-position-top]{position:absolute!important;max-width:calc(100% - (var(--uk-position-margin-offset) * 2));box-sizing:border-box}.uk-position-top{top:0;left:0;right:0}.uk-position-bottom{bottom:0;left:0;right:0}.uk-position-left{top:0;bottom:0;left:0}.uk-position-right{top:0;bottom:0;right:0}.uk-position-top-left{top:0;left:0}.uk-position-top-right{top:0;right:0}.uk-position-bottom-left{bottom:0;left:0}.uk-position-bottom-right{bottom:0;right:0}.uk-position-center{top:calc(50% - var(--uk-position-margin-offset));left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x:-50%;--uk-position-translate-y:-50%;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y));width:max-content}.uk-position-center-vertical,[class*=uk-position-center-left],[class*=uk-position-center-right]{top:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-y:-50%;transform:translate(0,var(--uk-position-translate-y))}.uk-position-center-left{left:0}.uk-position-center-right{right:0}.uk-position-center-vertical{left:0;right:0}.uk-position-center-left-out{right:100%;width:max-content}.uk-position-center-right-out{left:100%;width:max-content}.uk-position-bottom-center,.uk-position-center-horizontal,.uk-position-top-center{left:calc(50% - var(--uk-position-margin-offset));--uk-position-translate-x:-50%;transform:translate(var(--uk-position-translate-x),0);width:max-content}.uk-position-top-center{top:0}.uk-position-bottom-center{bottom:0}.uk-position-center-horizontal{top:0;bottom:0}.uk-position-cover{position:absolute;top:0;bottom:0;left:0;right:0}.uk-position-small{margin:10px;--uk-position-margin-offset:10px}.uk-position-medium{margin:30px;--uk-position-margin-offset:30px}.uk-position-large{margin:30px;--uk-position-margin-offset:30px}@media (min-width:1200px){.uk-position-large{margin:50px;--uk-position-margin-offset:50px}}.uk-position-relative{position:relative!important}.uk-position-absolute{position:absolute!important}.uk-position-fixed{position:fixed!important}.uk-position-sticky{position:sticky!important}.uk-position-z-index{z-index:1}.uk-position-z-index-zero{z-index:0}.uk-position-z-index-negative{z-index:-1}.uk-position-z-index-high{z-index:599990}:where(.uk-transition-fade),:where([class*=uk-transition-scale]),:where([class*=uk-transition-slide]){--uk-position-translate-x:0;--uk-position-translate-y:0}.uk-transition-fade,[class*=uk-transition-scale],[class*=uk-transition-slide]{--uk-translate-x:0;--uk-translate-y:0;--uk-scale-x:1;--uk-scale-y:1;transform:translate(var(--uk-position-translate-x),var(--uk-position-translate-y)) translate(var(--uk-translate-x),var(--uk-translate-y)) scale(var(--uk-scale-x),var(--uk-scale-y));transition:.3s ease-out;transition-property:opacity,transform,filter;opacity:0}.uk-transition-active.uk-active .uk-transition-fade,.uk-transition-toggle:focus .uk-transition-fade,.uk-transition-toggle:focus-within .uk-transition-fade,.uk-transition-toggle:hover .uk-transition-fade{opacity:1}[class*=uk-transition-scale]{-webkit-backface-visibility:hidden}.uk-transition-scale-up{--uk-scale-x:1;--uk-scale-y:1}.uk-transition-scale-down{--uk-scale-x:1.03;--uk-scale-y:1.03}.uk-transition-active.uk-active .uk-transition-scale-up,.uk-transition-toggle:focus .uk-transition-scale-up,.uk-transition-toggle:focus-within .uk-transition-scale-up,.uk-transition-toggle:hover .uk-transition-scale-up{--uk-scale-x:1.03;--uk-scale-y:1.03;opacity:1}.uk-transition-active.uk-active .uk-transition-scale-down,.uk-transition-toggle:focus .uk-transition-scale-down,.uk-transition-toggle:focus-within .uk-transition-scale-down,.uk-transition-toggle:hover .uk-transition-scale-down{--uk-scale-x:1;--uk-scale-y:1;opacity:1}.uk-transition-slide-top{--uk-translate-y:-100%}.uk-transition-slide-bottom{--uk-translate-y:100%}.uk-transition-slide-left{--uk-translate-x:-100%}.uk-transition-slide-right{--uk-translate-x:100%}.uk-transition-slide-top-small{--uk-translate-y:calc(-1 * 10px)}.uk-transition-slide-bottom-small{--uk-translate-y:10px}.uk-transition-slide-left-small{--uk-translate-x:calc(-1 * 10px)}.uk-transition-slide-right-small{--uk-translate-x:10px}.uk-transition-slide-top-medium{--uk-translate-y:calc(-1 * 50px)}.uk-transition-slide-bottom-medium{--uk-translate-y:50px}.uk-transition-slide-left-medium{--uk-translate-x:calc(-1 * 50px)}.uk-transition-slide-right-medium{--uk-translate-x:50px}.uk-transition-active.uk-active [class*=uk-transition-slide],.uk-transition-toggle:focus [class*=uk-transition-slide],.uk-transition-toggle:focus-within [class*=uk-transition-slide],.uk-transition-toggle:hover [class*=uk-transition-slide]{--uk-translate-x:0;--uk-translate-y:0;opacity:1}.uk-transition-opaque{opacity:1}.uk-transition-slow{transition-duration:.7s}.uk-transition-disable,.uk-transition-disable *{transition:none!important}.uk-hidden,.uk-hidden-empty:empty,[hidden]{display:none!important}@media (min-width:640px){.uk-hidden\@s{display:none!important}}@media (min-width:960px){.uk-hidden\@m{display:none!important}}@media (min-width:1200px){.uk-hidden\@l{display:none!important}}@media (min-width:1400px){.uk-hidden\@xl{display:none!important}}@media (max-width:639px){.uk-visible\@s{display:none!important}}@media (max-width:959px){.uk-visible\@m{display:none!important}}@media (max-width:1199px){.uk-visible\@l{display:none!important}}@media (max-width:1399px){.uk-visible\@xl{display:none!important}}.uk-invisible{visibility:hidden!important}.uk-hidden-visually:not(:focus):not(:active):not(:focus-within),.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-visible):not(:has(:focus-visible)),.uk-visible-toggle:not(:hover):not(:focus) .uk-hidden-hover:not(:focus-within){position:absolute!important;width:0!important;height:0!important;padding:0!important;border:0!important;margin:0!important;overflow:hidden!important}.uk-visible-toggle:not(:hover):not(:focus) .uk-invisible-hover:not(:focus-within){opacity:0!important}@media (hover:none){.uk-hidden-touch{display:none!important}}@media (hover){.uk-hidden-notouch{display:none!important}}.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-light,.uk-offcanvas-bar,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color){color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-link,.uk-card-primary.uk-card-body a,.uk-card-primary>:not([class*=uk-card-media]) .uk-link,.uk-card-primary>:not([class*=uk-card-media]) a,.uk-card-secondary.uk-card-body .uk-link,.uk-card-secondary.uk-card-body a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) a,.uk-light .uk-link,.uk-light a,.uk-offcanvas-bar .uk-link,.uk-offcanvas-bar a,.uk-section-primary:not(.uk-preserve-color) .uk-link,.uk-section-primary:not(.uk-preserve-color) a,.uk-section-secondary:not(.uk-preserve-color) .uk-link,.uk-section-secondary:not(.uk-preserve-color) a,.uk-tile-primary:not(.uk-preserve-color) .uk-link,.uk-tile-primary:not(.uk-preserve-color) a,.uk-tile-secondary:not(.uk-preserve-color) .uk-link,.uk-tile-secondary:not(.uk-preserve-color) a{color:#fff}.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-primary.uk-card-body .uk-link:hover,.uk-card-primary.uk-card-body a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-primary>:not([class*=uk-card-media]) a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link,.uk-card-secondary.uk-card-body .uk-link:hover,.uk-card-secondary.uk-card-body a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) a:hover,.uk-light .uk-link-toggle:hover .uk-link,.uk-light .uk-link:hover,.uk-light a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link,.uk-offcanvas-bar .uk-link:hover,.uk-offcanvas-bar a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-primary:not(.uk-preserve-color) .uk-link:hover,.uk-section-primary:not(.uk-preserve-color) a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-section-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-section-secondary:not(.uk-preserve-color) a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-primary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-primary:not(.uk-preserve-color) a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-link:hover,.uk-tile-secondary:not(.uk-preserve-color) a:hover{color:#fff}.uk-card-primary.uk-card-body :not(pre)>code,.uk-card-primary.uk-card-body :not(pre)>kbd,.uk-card-primary.uk-card-body :not(pre)>samp,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-primary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-card-secondary.uk-card-body :not(pre)>code,.uk-card-secondary.uk-card-body :not(pre)>kbd,.uk-card-secondary.uk-card-body :not(pre)>samp,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>code,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>kbd,.uk-card-secondary>:not([class*=uk-card-media]) :not(pre)>samp,.uk-light :not(pre)>code,.uk-light :not(pre)>kbd,.uk-light :not(pre)>samp,.uk-offcanvas-bar :not(pre)>code,.uk-offcanvas-bar :not(pre)>kbd,.uk-offcanvas-bar :not(pre)>samp,.uk-section-primary:not(.uk-preserve-color) :not(pre)>code,.uk-section-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-section-secondary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-primary:not(.uk-preserve-color) :not(pre)>samp,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>code,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>kbd,.uk-tile-secondary:not(.uk-preserve-color) :not(pre)>samp{color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.2);background:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body em,.uk-card-primary>:not([class*=uk-card-media]) em,.uk-card-secondary.uk-card-body em,.uk-card-secondary>:not([class*=uk-card-media]) em,.uk-light em,.uk-offcanvas-bar em,.uk-section-primary:not(.uk-preserve-color) em,.uk-section-secondary:not(.uk-preserve-color) em,.uk-tile-primary:not(.uk-preserve-color) em,.uk-tile-secondary:not(.uk-preserve-color) em{color:#fff}.uk-card-primary.uk-card-body .uk-h1,.uk-card-primary.uk-card-body .uk-h2,.uk-card-primary.uk-card-body .uk-h3,.uk-card-primary.uk-card-body .uk-h4,.uk-card-primary.uk-card-body .uk-h5,.uk-card-primary.uk-card-body .uk-h6,.uk-card-primary.uk-card-body .uk-heading-2xlarge,.uk-card-primary.uk-card-body .uk-heading-3xlarge,.uk-card-primary.uk-card-body .uk-heading-large,.uk-card-primary.uk-card-body .uk-heading-medium,.uk-card-primary.uk-card-body .uk-heading-small,.uk-card-primary.uk-card-body .uk-heading-xlarge,.uk-card-primary.uk-card-body h1,.uk-card-primary.uk-card-body h2,.uk-card-primary.uk-card-body h3,.uk-card-primary.uk-card-body h4,.uk-card-primary.uk-card-body h5,.uk-card-primary.uk-card-body h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-h1,.uk-card-primary>:not([class*=uk-card-media]) .uk-h2,.uk-card-primary>:not([class*=uk-card-media]) .uk-h3,.uk-card-primary>:not([class*=uk-card-media]) .uk-h4,.uk-card-primary>:not([class*=uk-card-media]) .uk-h5,.uk-card-primary>:not([class*=uk-card-media]) .uk-h6,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-primary>:not([class*=uk-card-media]) h1,.uk-card-primary>:not([class*=uk-card-media]) h2,.uk-card-primary>:not([class*=uk-card-media]) h3,.uk-card-primary>:not([class*=uk-card-media]) h4,.uk-card-primary>:not([class*=uk-card-media]) h5,.uk-card-primary>:not([class*=uk-card-media]) h6,.uk-card-secondary.uk-card-body .uk-h1,.uk-card-secondary.uk-card-body .uk-h2,.uk-card-secondary.uk-card-body .uk-h3,.uk-card-secondary.uk-card-body .uk-h4,.uk-card-secondary.uk-card-body .uk-h5,.uk-card-secondary.uk-card-body .uk-h6,.uk-card-secondary.uk-card-body .uk-heading-2xlarge,.uk-card-secondary.uk-card-body .uk-heading-3xlarge,.uk-card-secondary.uk-card-body .uk-heading-large,.uk-card-secondary.uk-card-body .uk-heading-medium,.uk-card-secondary.uk-card-body .uk-heading-small,.uk-card-secondary.uk-card-body .uk-heading-xlarge,.uk-card-secondary.uk-card-body h1,.uk-card-secondary.uk-card-body h2,.uk-card-secondary.uk-card-body h3,.uk-card-secondary.uk-card-body h4,.uk-card-secondary.uk-card-body h5,.uk-card-secondary.uk-card-body h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h1,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h2,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h3,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h4,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h5,.uk-card-secondary>:not([class*=uk-card-media]) .uk-h6,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-2xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-3xlarge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-large,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-medium,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-small,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-xlarge,.uk-card-secondary>:not([class*=uk-card-media]) h1,.uk-card-secondary>:not([class*=uk-card-media]) h2,.uk-card-secondary>:not([class*=uk-card-media]) h3,.uk-card-secondary>:not([class*=uk-card-media]) h4,.uk-card-secondary>:not([class*=uk-card-media]) h5,.uk-card-secondary>:not([class*=uk-card-media]) h6,.uk-light .uk-h1,.uk-light .uk-h2,.uk-light .uk-h3,.uk-light .uk-h4,.uk-light .uk-h5,.uk-light .uk-h6,.uk-light .uk-heading-2xlarge,.uk-light .uk-heading-3xlarge,.uk-light .uk-heading-large,.uk-light .uk-heading-medium,.uk-light .uk-heading-small,.uk-light .uk-heading-xlarge,.uk-light h1,.uk-light h2,.uk-light h3,.uk-light h4,.uk-light h5,.uk-light h6,.uk-offcanvas-bar .uk-h1,.uk-offcanvas-bar .uk-h2,.uk-offcanvas-bar .uk-h3,.uk-offcanvas-bar .uk-h4,.uk-offcanvas-bar .uk-h5,.uk-offcanvas-bar .uk-h6,.uk-offcanvas-bar .uk-heading-2xlarge,.uk-offcanvas-bar .uk-heading-3xlarge,.uk-offcanvas-bar .uk-heading-large,.uk-offcanvas-bar .uk-heading-medium,.uk-offcanvas-bar .uk-heading-small,.uk-offcanvas-bar .uk-heading-xlarge,.uk-offcanvas-bar h1,.uk-offcanvas-bar h2,.uk-offcanvas-bar h3,.uk-offcanvas-bar h4,.uk-offcanvas-bar h5,.uk-offcanvas-bar h6,.uk-section-primary:not(.uk-preserve-color) .uk-h1,.uk-section-primary:not(.uk-preserve-color) .uk-h2,.uk-section-primary:not(.uk-preserve-color) .uk-h3,.uk-section-primary:not(.uk-preserve-color) .uk-h4,.uk-section-primary:not(.uk-preserve-color) .uk-h5,.uk-section-primary:not(.uk-preserve-color) .uk-h6,.uk-section-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-primary:not(.uk-preserve-color) .uk-heading-large,.uk-section-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-primary:not(.uk-preserve-color) .uk-heading-small,.uk-section-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-primary:not(.uk-preserve-color) h1,.uk-section-primary:not(.uk-preserve-color) h2,.uk-section-primary:not(.uk-preserve-color) h3,.uk-section-primary:not(.uk-preserve-color) h4,.uk-section-primary:not(.uk-preserve-color) h5,.uk-section-primary:not(.uk-preserve-color) h6,.uk-section-secondary:not(.uk-preserve-color) .uk-h1,.uk-section-secondary:not(.uk-preserve-color) .uk-h2,.uk-section-secondary:not(.uk-preserve-color) .uk-h3,.uk-section-secondary:not(.uk-preserve-color) .uk-h4,.uk-section-secondary:not(.uk-preserve-color) .uk-h5,.uk-section-secondary:not(.uk-preserve-color) .uk-h6,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-section-secondary:not(.uk-preserve-color) h1,.uk-section-secondary:not(.uk-preserve-color) h2,.uk-section-secondary:not(.uk-preserve-color) h3,.uk-section-secondary:not(.uk-preserve-color) h4,.uk-section-secondary:not(.uk-preserve-color) h5,.uk-section-secondary:not(.uk-preserve-color) h6,.uk-tile-primary:not(.uk-preserve-color) .uk-h1,.uk-tile-primary:not(.uk-preserve-color) .uk-h2,.uk-tile-primary:not(.uk-preserve-color) .uk-h3,.uk-tile-primary:not(.uk-preserve-color) .uk-h4,.uk-tile-primary:not(.uk-preserve-color) .uk-h5,.uk-tile-primary:not(.uk-preserve-color) .uk-h6,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-primary:not(.uk-preserve-color) h1,.uk-tile-primary:not(.uk-preserve-color) h2,.uk-tile-primary:not(.uk-preserve-color) h3,.uk-tile-primary:not(.uk-preserve-color) h4,.uk-tile-primary:not(.uk-preserve-color) h5,.uk-tile-primary:not(.uk-preserve-color) h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-h1,.uk-tile-secondary:not(.uk-preserve-color) .uk-h2,.uk-tile-secondary:not(.uk-preserve-color) .uk-h3,.uk-tile-secondary:not(.uk-preserve-color) .uk-h4,.uk-tile-secondary:not(.uk-preserve-color) .uk-h5,.uk-tile-secondary:not(.uk-preserve-color) .uk-h6,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-2xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-3xlarge,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-large,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-medium,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-small,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-xlarge,.uk-tile-secondary:not(.uk-preserve-color) h1,.uk-tile-secondary:not(.uk-preserve-color) h2,.uk-tile-secondary:not(.uk-preserve-color) h3,.uk-tile-secondary:not(.uk-preserve-color) h4,.uk-tile-secondary:not(.uk-preserve-color) h5,.uk-tile-secondary:not(.uk-preserve-color) h6{color:#fff}.uk-card-primary.uk-card-body .uk-hr,.uk-card-primary.uk-card-body hr,.uk-card-primary>:not([class*=uk-card-media]) .uk-hr,.uk-card-primary>:not([class*=uk-card-media]) hr,.uk-card-secondary.uk-card-body .uk-hr,.uk-card-secondary.uk-card-body hr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-hr,.uk-card-secondary>:not([class*=uk-card-media]) hr,.uk-light .uk-hr,.uk-light hr,.uk-offcanvas-bar .uk-hr,.uk-offcanvas-bar hr,.uk-section-primary:not(.uk-preserve-color) .uk-hr,.uk-section-primary:not(.uk-preserve-color) hr,.uk-section-secondary:not(.uk-preserve-color) .uk-hr,.uk-section-secondary:not(.uk-preserve-color) hr,.uk-tile-primary:not(.uk-preserve-color) .uk-hr,.uk-tile-primary:not(.uk-preserve-color) hr,.uk-tile-secondary:not(.uk-preserve-color) .uk-hr,.uk-tile-secondary:not(.uk-preserve-color) hr{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body :focus-visible,.uk-card-primary>:not([class*=uk-card-media]) :focus-visible,.uk-card-secondary.uk-card-body :focus-visible,.uk-card-secondary>:not([class*=uk-card-media]) :focus-visible,.uk-light :focus-visible,.uk-offcanvas-bar :focus-visible,.uk-section-primary:not(.uk-preserve-color) :focus-visible,.uk-section-secondary:not(.uk-preserve-color) :focus-visible,.uk-tile-primary:not(.uk-preserve-color) :focus-visible,.uk-tile-secondary:not(.uk-preserve-color) :focus-visible{outline-color:#fff}.uk-card-primary.uk-card-body .uk-link-muted a,.uk-card-primary.uk-card-body a.uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-card-secondary.uk-card-body .uk-link-muted a,.uk-card-secondary.uk-card-body a.uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted,.uk-light .uk-link-muted a,.uk-light a.uk-link-muted,.uk-offcanvas-bar .uk-link-muted a,.uk-offcanvas-bar a.uk-link-muted,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-link-muted a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-primary.uk-card-body a.uk-link-muted:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-card-secondary.uk-card-body .uk-link-muted a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary.uk-card-body a.uk-link-muted:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-muted a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-muted,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-muted:hover,.uk-light .uk-link-muted a:hover,.uk-light .uk-link-toggle:hover .uk-link-muted,.uk-light a.uk-link-muted:hover,.uk-offcanvas-bar .uk-link-muted a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-muted,.uk-offcanvas-bar a.uk-link-muted:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-muted:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-muted a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-muted,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-muted:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-link-text a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-primary.uk-card-body a.uk-link-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-card-secondary.uk-card-body .uk-link-text a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-text,.uk-card-secondary.uk-card-body a.uk-link-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-text a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-text,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-text:hover,.uk-light .uk-link-text a:hover,.uk-light .uk-link-toggle:hover .uk-link-text,.uk-light a.uk-link-text:hover,.uk-offcanvas-bar .uk-link-text a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-text,.uk-offcanvas-bar a.uk-link-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-text a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-text,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-text:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-link-heading a:hover,.uk-card-primary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-primary.uk-card-body a.uk-link-heading:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-card-primary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-card-secondary.uk-card-body .uk-link-heading a:hover,.uk-card-secondary.uk-card-body .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary.uk-card-body a.uk-link-heading:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-heading a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-link-toggle:hover .uk-link-heading,.uk-card-secondary>:not([class*=uk-card-media]) a.uk-link-heading:hover,.uk-light .uk-link-heading a:hover,.uk-light .uk-link-toggle:hover .uk-link-heading,.uk-light a.uk-link-heading:hover,.uk-offcanvas-bar .uk-link-heading a:hover,.uk-offcanvas-bar .uk-link-toggle:hover .uk-link-heading,.uk-offcanvas-bar a.uk-link-heading:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-section-secondary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-primary:not(.uk-preserve-color) a.uk-link-heading:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-heading a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-link-toggle:hover .uk-link-heading,.uk-tile-secondary:not(.uk-preserve-color) a.uk-link-heading:hover{color:#fff}.uk-card-primary.uk-card-body .uk-heading-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-card-secondary.uk-card-body .uk-heading-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-divider,.uk-light .uk-heading-divider,.uk-offcanvas-bar .uk-heading-divider,.uk-section-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-divider{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-heading-bullet::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-card-secondary.uk-card-body .uk-heading-bullet::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-bullet::before,.uk-light .uk-heading-bullet::before,.uk-offcanvas-bar .uk-heading-bullet::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-bullet::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-bullet::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-heading-line>::after,.uk-card-primary.uk-card-body .uk-heading-line>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-card-secondary.uk-card-body .uk-heading-line>::after,.uk-card-secondary.uk-card-body .uk-heading-line>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-heading-line>::before,.uk-light .uk-heading-line>::after,.uk-light .uk-heading-line>::before,.uk-offcanvas-bar .uk-heading-line>::after,.uk-offcanvas-bar .uk-heading-line>::before,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-section-secondary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-primary:not(.uk-preserve-color) .uk-heading-line>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-heading-line>::before{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-card-secondary.uk-card-body .uk-divider-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon,.uk-light .uk-divider-icon,.uk-offcanvas-bar .uk-divider-icon,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.2%29%22%20stroke-width%3D%222%22%20cx%3D%2210%22%20cy%3D%2210%22%20r%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-divider-icon::after,.uk-card-primary.uk-card-body .uk-divider-icon::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-card-secondary.uk-card-body .uk-divider-icon::after,.uk-card-secondary.uk-card-body .uk-divider-icon::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-icon::before,.uk-light .uk-divider-icon::after,.uk-light .uk-divider-icon::before,.uk-offcanvas-bar .uk-divider-icon::after,.uk-offcanvas-bar .uk-divider-icon::before,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-icon::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-icon::before{border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-small::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-card-secondary.uk-card-body .uk-divider-small::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-small::after,.uk-light .uk-divider-small::after,.uk-offcanvas-bar .uk-divider-small::after,.uk-section-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-small::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-small::after{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-divider-vertical,.uk-card-primary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-card-secondary.uk-card-body .uk-divider-vertical,.uk-card-secondary>:not([class*=uk-card-media]) .uk-divider-vertical,.uk-light .uk-divider-vertical,.uk-offcanvas-bar .uk-divider-vertical,.uk-section-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-section-secondary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-primary:not(.uk-preserve-color) .uk-divider-vertical,.uk-tile-secondary:not(.uk-preserve-color) .uk-divider-vertical{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-muted>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-muted>::marker,.uk-card-secondary.uk-card-body .uk-list-muted>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-muted>::marker,.uk-light .uk-list-muted>::marker,.uk-offcanvas-bar .uk-list-muted>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-muted>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-muted>::marker{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-list-emphasis>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-emphasis>::marker,.uk-card-secondary.uk-card-body .uk-list-emphasis>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-emphasis>::marker,.uk-light .uk-list-emphasis>::marker,.uk-offcanvas-bar .uk-list-emphasis>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-emphasis>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-emphasis>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-primary>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-primary>::marker,.uk-card-secondary.uk-card-body .uk-list-primary>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-primary>::marker,.uk-light .uk-list-primary>::marker,.uk-offcanvas-bar .uk-list-primary>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-primary>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-primary>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-secondary>::marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-secondary>::marker,.uk-card-secondary.uk-card-body .uk-list-secondary>::marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-secondary>::marker,.uk-light .uk-list-secondary>::marker,.uk-offcanvas-bar .uk-list-secondary>::marker,.uk-section-primary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-section-secondary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-tile-primary:not(.uk-preserve-color) .uk-list-secondary>::marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-secondary>::marker{color:#fff!important}.uk-card-primary.uk-card-body .uk-list-bullet>::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-card-secondary.uk-card-body .uk-list-bullet>::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-bullet>::before,.uk-light .uk-list-bullet>::before,.uk-offcanvas-bar .uk-list-bullet>::before,.uk-section-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-section-secondary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-primary:not(.uk-preserve-color) .uk-list-bullet>::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-list-bullet>::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%226%22%20height%3D%226%22%20viewBox%3D%220%200%206%206%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20cx%3D%223%22%20cy%3D%223%22%20r%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-card-secondary.uk-card-body .uk-list-divider>:nth-child(n+2),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-divider>:nth-child(n+2),.uk-light .uk-list-divider>:nth-child(n+2),.uk-offcanvas-bar .uk-list-divider>:nth-child(n+2),.uk-section-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-section-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-primary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-divider>:nth-child(n+2){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-light .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd){border-top-color:rgba(255,255,255,.2);border-bottom-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-list-striped>:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-list-striped>:nth-of-type(odd),.uk-light .uk-list-striped>:nth-of-type(odd),.uk-offcanvas-bar .uk-list-striped>:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-list-striped>:nth-of-type(odd){background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-table th,.uk-card-primary>:not([class*=uk-card-media]) .uk-table th,.uk-card-secondary.uk-card-body .uk-table th,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table th,.uk-light .uk-table th,.uk-offcanvas-bar .uk-table th,.uk-section-primary:not(.uk-preserve-color) .uk-table th,.uk-section-secondary:not(.uk-preserve-color) .uk-table th,.uk-tile-primary:not(.uk-preserve-color) .uk-table th,.uk-tile-secondary:not(.uk-preserve-color) .uk-table th{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-table caption,.uk-card-primary>:not([class*=uk-card-media]) .uk-table caption,.uk-card-secondary.uk-card-body .uk-table caption,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table caption,.uk-light .uk-table caption,.uk-offcanvas-bar .uk-table caption,.uk-section-primary:not(.uk-preserve-color) .uk-table caption,.uk-section-secondary:not(.uk-preserve-color) .uk-table caption,.uk-tile-primary:not(.uk-preserve-color) .uk-table caption,.uk-tile-secondary:not(.uk-preserve-color) .uk-table caption{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-primary.uk-card-body .uk-table>tr.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-table tbody tr.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-table>tr.uk-active,.uk-card-secondary.uk-card-body .uk-table tbody tr.uk-active,.uk-card-secondary.uk-card-body .uk-table>tr.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table tbody tr.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table>tr.uk-active,.uk-light .uk-table tbody tr.uk-active,.uk-light .uk-table>tr.uk-active,.uk-offcanvas-bar .uk-table tbody tr.uk-active,.uk-offcanvas-bar .uk-table>tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-table>tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table tbody tr.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-table>tr.uk-active{background:rgba(255,255,255,.08)}.uk-card-primary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-primary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>:not(:first-child)>tr,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-divider>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary.uk-card-body .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary.uk-card-body .uk-table-divider>tr:not(:first-child),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>:first-child>tr:not(:first-child),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>:not(:first-child)>tr,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-divider>tr:not(:first-child),.uk-light .uk-table-divider>:first-child>tr:not(:first-child),.uk-light .uk-table-divider>:not(:first-child)>tr,.uk-light .uk-table-divider>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:first-child>tr:not(:first-child),.uk-offcanvas-bar .uk-table-divider>:not(:first-child)>tr,.uk-offcanvas-bar .uk-table-divider>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-section-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-primary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:first-child>tr:not(:first-child),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>:not(:first-child)>tr,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-divider>tr:not(:first-child){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-primary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary.uk-card-body .uk-table-striped>tr:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped tbody tr:nth-of-type(odd),.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-striped>tr:nth-of-type(odd),.uk-light .uk-table-striped tbody tr:nth-of-type(odd),.uk-light .uk-table-striped>tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped tbody tr:nth-of-type(odd),.uk-offcanvas-bar .uk-table-striped>tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-section-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-primary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped tbody tr:nth-of-type(odd),.uk-tile-secondary:not(.uk-preserve-color) .uk-table-striped>tr:nth-of-type(odd){background:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-primary.uk-card-body .uk-table-hover>tr:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-hover tbody tr:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-table-hover>tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover tbody tr:hover,.uk-card-secondary.uk-card-body .uk-table-hover>tr:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-hover tbody tr:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-table-hover>tr:hover,.uk-light .uk-table-hover tbody tr:hover,.uk-light .uk-table-hover>tr:hover,.uk-offcanvas-bar .uk-table-hover tbody tr:hover,.uk-offcanvas-bar .uk-table-hover>tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-table-hover>tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover tbody tr:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-table-hover>tr:hover{background:rgba(255,255,255,.08)}.uk-card-primary.uk-card-body .uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link,.uk-light .uk-icon-link,.uk-offcanvas-bar .uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-icon-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-card-secondary.uk-card-body .uk-icon-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:hover,.uk-light .uk-icon-link:hover,.uk-offcanvas-bar .uk-icon-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-active>.uk-icon-link,.uk-card-primary.uk-card-body .uk-icon-link:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-card-secondary.uk-card-body .uk-active>.uk-icon-link,.uk-card-secondary.uk-card-body .uk-icon-link:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-active>.uk-icon-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-link:active,.uk-light .uk-active>.uk-icon-link,.uk-light .uk-icon-link:active,.uk-offcanvas-bar .uk-active>.uk-icon-link,.uk-offcanvas-bar .uk-icon-link:active,.uk-section-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-section-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-primary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-link:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-active>.uk-icon-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-link:active{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-icon-button,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button,.uk-card-secondary.uk-card-body .uk-icon-button,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button,.uk-light .uk-icon-button,.uk-offcanvas-bar .uk-icon-button,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-icon-button:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-card-secondary.uk-card-body .uk-icon-button:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:hover,.uk-light .uk-icon-button:hover,.uk-offcanvas-bar .uk-icon-button:hover,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:hover{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-icon-button:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-card-secondary.uk-card-body .uk-icon-button:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-icon-button:active,.uk-light .uk-icon-button:active,.uk-offcanvas-bar .uk-icon-button:active,.uk-section-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-section-secondary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-primary:not(.uk-preserve-color) .uk-icon-button:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-icon-button:active{background-color:rgba(255,255,255,.2);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-range::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-runnable-track,.uk-light .uk-range::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-runnable-track{background:rgba(242,242,242,.1)}.uk-card-primary.uk-card-body .uk-range:active::-webkit-slider-runnable-track,.uk-card-primary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:active::-webkit-slider-runnable-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:focus::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range:active::-webkit-slider-runnable-track,.uk-card-secondary.uk-card-body .uk-range:focus::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:active::-webkit-slider-runnable-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:focus::-webkit-slider-runnable-track,.uk-light .uk-range:active::-webkit-slider-runnable-track,.uk-light .uk-range:focus::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range:active::-webkit-slider-runnable-track,.uk-offcanvas-bar .uk-range:focus::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:active::-webkit-slider-runnable-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-webkit-slider-runnable-track{background:rgba(242,242,242,.15)}.uk-card-primary.uk-card-body .uk-range::-moz-range-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-moz-range-track,.uk-card-secondary.uk-card-body .uk-range::-moz-range-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-moz-range-track,.uk-light .uk-range::-moz-range-track,.uk-offcanvas-bar .uk-range::-moz-range-track,.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-track{background:rgba(242,242,242,.1)}.uk-card-primary.uk-card-body .uk-range:focus::-moz-range-track,.uk-card-primary>:not([class*=uk-card-media]) .uk-range:focus::-moz-range-track,.uk-card-secondary.uk-card-body .uk-range:focus::-moz-range-track,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range:focus::-moz-range-track,.uk-light .uk-range:focus::-moz-range-track,.uk-offcanvas-bar .uk-range:focus::-moz-range-track,.uk-section-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-section-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-tile-primary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track,.uk-tile-secondary:not(.uk-preserve-color) .uk-range:focus::-moz-range-track{background:rgba(242,242,242,.15)}.uk-card-primary.uk-card-body .uk-range::-webkit-slider-thumb,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-thumb,.uk-card-secondary.uk-card-body .uk-range::-webkit-slider-thumb,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-webkit-slider-thumb,.uk-light .uk-range::-webkit-slider-thumb,.uk-offcanvas-bar .uk-range::-webkit-slider-thumb,.uk-section-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-webkit-slider-thumb{background:#fff}.uk-card-primary.uk-card-body .uk-range::-moz-range-thumb,.uk-card-primary>:not([class*=uk-card-media]) .uk-range::-moz-range-thumb,.uk-card-secondary.uk-card-body .uk-range::-moz-range-thumb,.uk-card-secondary>:not([class*=uk-card-media]) .uk-range::-moz-range-thumb,.uk-light .uk-range::-moz-range-thumb,.uk-offcanvas-bar .uk-range::-moz-range-thumb,.uk-section-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-section-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-tile-primary:not(.uk-preserve-color) .uk-range::-moz-range-thumb,.uk-tile-secondary:not(.uk-preserve-color) .uk-range::-moz-range-thumb{background:#fff}.uk-card-primary.uk-card-body .uk-input,.uk-card-primary.uk-card-body .uk-select,.uk-card-primary.uk-card-body .uk-textarea,.uk-card-primary>:not([class*=uk-card-media]) .uk-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-select,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea,.uk-card-secondary.uk-card-body .uk-input,.uk-card-secondary.uk-card-body .uk-select,.uk-card-secondary.uk-card-body .uk-textarea,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea,.uk-light .uk-input,.uk-light .uk-select,.uk-light .uk-textarea,.uk-offcanvas-bar .uk-input,.uk-offcanvas-bar .uk-select,.uk-offcanvas-bar .uk-textarea,.uk-section-primary:not(.uk-preserve-color) .uk-input,.uk-section-primary:not(.uk-preserve-color) .uk-select,.uk-section-primary:not(.uk-preserve-color) .uk-textarea,.uk-section-secondary:not(.uk-preserve-color) .uk-input,.uk-section-secondary:not(.uk-preserve-color) .uk-select,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea,.uk-tile-primary:not(.uk-preserve-color) .uk-input,.uk-tile-primary:not(.uk-preserve-color) .uk-select,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea,.uk-tile-secondary:not(.uk-preserve-color) .uk-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-select,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7);background-clip:padding-box;border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-input:focus,.uk-card-primary.uk-card-body .uk-select:focus,.uk-card-primary.uk-card-body .uk-textarea:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-card-secondary.uk-card-body .uk-input:focus,.uk-card-secondary.uk-card-body .uk-select:focus,.uk-card-secondary.uk-card-body .uk-textarea:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea:focus,.uk-light .uk-input:focus,.uk-light .uk-select.uk-focus,.uk-light .uk-select:focus,.uk-light .uk-textarea:focus,.uk-offcanvas-bar .uk-input:focus,.uk-offcanvas-bar .uk-select:focus,.uk-offcanvas-bar .uk-textarea:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-select:focus,.uk-section-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-select:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea:focus{background-color:rgba(255,255,255,.15);color:rgba(255,255,255,.7);border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-card-secondary.uk-card-body .uk-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input::placeholder,.uk-light .uk-input::placeholder,.uk-offcanvas-bar .uk-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-input::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-textarea::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-card-secondary.uk-card-body .uk-textarea::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-textarea::placeholder,.uk-light .uk-textarea::placeholder,.uk-offcanvas-bar .uk-textarea::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-textarea::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-textarea::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-primary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-card-secondary.uk-card-body .uk-select:not([multiple]):not([size]),.uk-card-secondary>:not([class*=uk-card-media]) .uk-select:not([multiple]):not([size]),.uk-light .uk-select:not([multiple]):not([size]),.uk-offcanvas-bar .uk-select:not([multiple]):not([size]),.uk-section-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-section-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-primary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]),.uk-tile-secondary:not(.uk-preserve-color) .uk-select:not([multiple]):not([size]){background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2235%22%20height%3D%229%22%20viewBox%3D%220%200%2035%209%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20stroke-width%3D%222%22%20points%3D%2212%201%2017.5%206.5%2023%201%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-input[list]:focus,.uk-card-primary.uk-card-body .uk-input[list]:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-card-secondary.uk-card-body .uk-input[list]:focus,.uk-card-secondary.uk-card-body .uk-input[list]:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-input[list]:hover,.uk-light .uk-input[list]:focus,.uk-light .uk-input[list]:hover,.uk-offcanvas-bar .uk-input[list]:focus,.uk-offcanvas-bar .uk-input[list]:hover,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-input[list]:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-input[list]:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2224%22%20height%3D%2216%22%20viewBox%3D%220%200%2024%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20points%3D%2212%2012%208%206%2016%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-checkbox,.uk-card-primary.uk-card-body .uk-radio,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio,.uk-card-secondary.uk-card-body .uk-checkbox,.uk-card-secondary.uk-card-body .uk-radio,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio,.uk-light .uk-checkbox,.uk-light .uk-radio,.uk-offcanvas-bar .uk-checkbox,.uk-offcanvas-bar .uk-radio,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox,.uk-section-primary:not(.uk-preserve-color) .uk-radio,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-section-secondary:not(.uk-preserve-color) .uk-radio,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-primary:not(.uk-preserve-color) .uk-radio,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio{background-color:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-checkbox:focus,.uk-card-primary.uk-card-body .uk-radio:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-card-secondary.uk-card-body .uk-checkbox:focus,.uk-card-secondary.uk-card-body .uk-radio:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:focus,.uk-light .uk-checkbox:focus,.uk-light .uk-radio:focus,.uk-offcanvas-bar .uk-checkbox:focus,.uk-offcanvas-bar .uk-radio:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:focus{background-color:rgba(255,255,255,.15)}.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-light .uk-checkbox:checked,.uk-light .uk-checkbox:indeterminate,.uk-light .uk-radio:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked{background-color:#fff;border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-checkbox:checked:focus,.uk-card-primary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-primary.uk-card-body .uk-radio:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:checked:focus,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate:focus,.uk-card-secondary.uk-card-body .uk-radio:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked:focus,.uk-light .uk-checkbox:checked:focus,.uk-light .uk-checkbox:indeterminate:focus,.uk-light .uk-radio:checked:focus,.uk-offcanvas-bar .uk-checkbox:checked:focus,.uk-offcanvas-bar .uk-checkbox:indeterminate:focus,.uk-offcanvas-bar .uk-radio:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked:focus{background-color:#fff;border-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-radio:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-card-secondary.uk-card-body .uk-radio:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-radio:checked,.uk-light .uk-radio:checked,.uk-offcanvas-bar .uk-radio:checked,.uk-section-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-radio:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-radio:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23777%22%20cx%3D%228%22%20cy%3D%228%22%20r%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-checkbox:checked,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-card-secondary.uk-card-body .uk-checkbox:checked,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:checked,.uk-light .uk-checkbox:checked,.uk-offcanvas-bar .uk-checkbox:checked,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:checked,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:checked{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23777%22%20points%3D%2212%201%205%207.5%202%205%201%205.5%205%2010%2013%201.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-card-primary.uk-card-body .uk-checkbox:indeterminate,.uk-card-primary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-card-secondary.uk-card-body .uk-checkbox:indeterminate,.uk-card-secondary>:not([class*=uk-card-media]) .uk-checkbox:indeterminate,.uk-light .uk-checkbox:indeterminate,.uk-offcanvas-bar .uk-checkbox:indeterminate,.uk-section-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-section-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-primary:not(.uk-preserve-color) .uk-checkbox:indeterminate,.uk-tile-secondary:not(.uk-preserve-color) .uk-checkbox:indeterminate{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2216%22%20height%3D%2216%22%20viewBox%3D%220%200%2016%2016%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22%23777%22%20x%3D%223%22%20y%3D%228%22%20width%3D%2210%22%20height%3D%221%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-form-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon,.uk-card-secondary.uk-card-body .uk-form-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon,.uk-light .uk-form-icon,.uk-offcanvas-bar .uk-form-icon,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-form-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-card-secondary.uk-card-body .uk-form-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-form-icon:hover,.uk-light .uk-form-icon:hover,.uk-offcanvas-bar .uk-form-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-form-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-form-icon:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-button-default,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default,.uk-card-secondary.uk-card-body .uk-button-default,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default,.uk-light .uk-button-default,.uk-offcanvas-bar .uk-button-default,.uk-section-primary:not(.uk-preserve-color) .uk-button-default,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default{background-color:transparent;color:#777}.uk-card-primary.uk-card-body .uk-button-default:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-card-secondary.uk-card-body .uk-button-default:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:hover,.uk-light .uk-button-default:hover,.uk-offcanvas-bar .uk-button-default:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:hover{background-color:transparent;color:#777}.uk-card-primary.uk-card-body .uk-button-default.uk-active,.uk-card-primary.uk-card-body .uk-button-default:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-card-secondary.uk-card-body .uk-button-default.uk-active,.uk-card-secondary.uk-card-body .uk-button-default:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-default:active,.uk-light .uk-button-default.uk-active,.uk-light .uk-button-default:active,.uk-offcanvas-bar .uk-button-default.uk-active,.uk-offcanvas-bar .uk-button-default:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-default:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-default:active{background-color:transparent;color:#777}.uk-card-primary.uk-card-body .uk-button-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary,.uk-card-secondary.uk-card-body .uk-button-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary,.uk-light .uk-button-primary,.uk-offcanvas-bar .uk-button-primary,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary{background-color:#fff;color:#777}.uk-card-primary.uk-card-body .uk-button-primary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-card-secondary.uk-card-body .uk-button-primary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:hover,.uk-light .uk-button-primary:hover,.uk-offcanvas-bar .uk-button-primary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:hover{background-color:#f2f2f2;color:#777}.uk-card-primary.uk-card-body .uk-button-primary.uk-active,.uk-card-primary.uk-card-body .uk-button-primary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-card-secondary.uk-card-body .uk-button-primary.uk-active,.uk-card-secondary.uk-card-body .uk-button-primary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-primary:active,.uk-light .uk-button-primary.uk-active,.uk-light .uk-button-primary:active,.uk-offcanvas-bar .uk-button-primary.uk-active,.uk-offcanvas-bar .uk-button-primary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-primary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-primary:active{background-color:#e6e6e6;color:#777}.uk-card-primary.uk-card-body .uk-button-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-card-secondary.uk-card-body .uk-button-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary,.uk-light .uk-button-secondary,.uk-offcanvas-bar .uk-button-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary{background-color:#fff;color:#777}.uk-card-primary.uk-card-body .uk-button-secondary:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-card-secondary.uk-card-body .uk-button-secondary:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:hover,.uk-light .uk-button-secondary:hover,.uk-offcanvas-bar .uk-button-secondary:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:hover{background-color:#f2f2f2;color:#777}.uk-card-primary.uk-card-body .uk-button-secondary.uk-active,.uk-card-primary.uk-card-body .uk-button-secondary:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-card-secondary.uk-card-body .uk-button-secondary.uk-active,.uk-card-secondary.uk-card-body .uk-button-secondary:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary.uk-active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-secondary:active,.uk-light .uk-button-secondary.uk-active,.uk-light .uk-button-secondary:active,.uk-offcanvas-bar .uk-button-secondary.uk-active,.uk-offcanvas-bar .uk-button-secondary:active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-section-secondary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-primary:not(.uk-preserve-color) .uk-button-secondary:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary.uk-active,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-secondary:active{background-color:#e6e6e6;color:#777}.uk-card-primary.uk-card-body .uk-button-text,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text,.uk-card-secondary.uk-card-body .uk-button-text,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text,.uk-light .uk-button-text,.uk-offcanvas-bar .uk-button-text,.uk-section-primary:not(.uk-preserve-color) .uk-button-text,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text{color:#fff}.uk-card-primary.uk-card-body .uk-button-text::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-card-secondary.uk-card-body .uk-button-text::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text::before,.uk-light .uk-button-text::before,.uk-offcanvas-bar .uk-button-text::before,.uk-section-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text::before{border-bottom-color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-button-text:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-card-secondary.uk-card-body .uk-button-text:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:hover,.uk-light .uk-button-text:hover,.uk-offcanvas-bar .uk-button-text:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:hover{color:#fff}.uk-card-primary.uk-card-body .uk-button-text:disabled,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-card-secondary.uk-card-body .uk-button-text:disabled,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-text:disabled,.uk-light .uk-button-text:disabled,.uk-offcanvas-bar .uk-button-text:disabled,.uk-section-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-section-secondary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-primary:not(.uk-preserve-color) .uk-button-text:disabled,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-text:disabled{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-button-link,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link,.uk-card-secondary.uk-card-body .uk-button-link,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link,.uk-light .uk-button-link,.uk-offcanvas-bar .uk-button-link,.uk-section-primary:not(.uk-preserve-color) .uk-button-link,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link{color:#fff}.uk-card-primary.uk-card-body .uk-button-link:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-card-secondary.uk-card-body .uk-button-link:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-button-link:hover,.uk-light .uk-button-link:hover,.uk-offcanvas-bar .uk-button-link:hover,.uk-section-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-button-link:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-button-link:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body.uk-card-badge,.uk-card-primary>:not([class*=uk-card-media]).uk-card-badge,.uk-card-secondary.uk-card-body.uk-card-badge,.uk-card-secondary>:not([class*=uk-card-media]).uk-card-badge,.uk-light.uk-card-badge,.uk-offcanvas-bar.uk-card-badge,.uk-section-primary:not(.uk-preserve-color).uk-card-badge,.uk-section-secondary:not(.uk-preserve-color).uk-card-badge,.uk-tile-primary:not(.uk-preserve-color).uk-card-badge,.uk-tile-secondary:not(.uk-preserve-color).uk-card-badge{background-color:#fff;color:#777}.uk-card-primary.uk-card-body .uk-close,.uk-card-primary>:not([class*=uk-card-media]) .uk-close,.uk-card-secondary.uk-card-body .uk-close,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close,.uk-light .uk-close,.uk-offcanvas-bar .uk-close,.uk-section-primary:not(.uk-preserve-color) .uk-close,.uk-section-secondary:not(.uk-preserve-color) .uk-close,.uk-tile-primary:not(.uk-preserve-color) .uk-close,.uk-tile-secondary:not(.uk-preserve-color) .uk-close{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-close:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-close:hover,.uk-card-secondary.uk-card-body .uk-close:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-close:hover,.uk-light .uk-close:hover,.uk-offcanvas-bar .uk-close:hover,.uk-section-primary:not(.uk-preserve-color) .uk-close:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-close:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-close:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-totop,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop,.uk-card-secondary.uk-card-body .uk-totop,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop,.uk-light .uk-totop,.uk-offcanvas-bar .uk-totop,.uk-section-primary:not(.uk-preserve-color) .uk-totop,.uk-section-secondary:not(.uk-preserve-color) .uk-totop,.uk-tile-primary:not(.uk-preserve-color) .uk-totop,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-totop:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-card-secondary.uk-card-body .uk-totop:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:hover,.uk-light .uk-totop:hover,.uk-offcanvas-bar .uk-totop:hover,.uk-section-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-totop:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-totop:active,.uk-card-secondary.uk-card-body .uk-totop:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-totop:active,.uk-light .uk-totop:active,.uk-offcanvas-bar .uk-totop:active,.uk-section-primary:not(.uk-preserve-color) .uk-totop:active,.uk-section-secondary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-primary:not(.uk-preserve-color) .uk-totop:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-totop:active{color:#fff}.uk-card-primary.uk-card-body .uk-marker,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker,.uk-card-secondary.uk-card-body .uk-marker,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker,.uk-light .uk-marker,.uk-offcanvas-bar .uk-marker,.uk-section-primary:not(.uk-preserve-color) .uk-marker,.uk-section-secondary:not(.uk-preserve-color) .uk-marker,.uk-tile-primary:not(.uk-preserve-color) .uk-marker,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker{background:#e5e5e5;color:#777}.uk-card-primary.uk-card-body .uk-marker:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-card-secondary.uk-card-body .uk-marker:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-marker:hover,.uk-light .uk-marker:hover,.uk-offcanvas-bar .uk-marker:hover,.uk-section-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-marker:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-marker:hover{color:#777}.uk-card-primary.uk-card-body .uk-badge,.uk-card-primary>:not([class*=uk-card-media]) .uk-badge,.uk-card-secondary.uk-card-body .uk-badge,.uk-card-secondary>:not([class*=uk-card-media]) .uk-badge,.uk-light .uk-badge,.uk-offcanvas-bar .uk-badge,.uk-section-primary:not(.uk-preserve-color) .uk-badge,.uk-section-secondary:not(.uk-preserve-color) .uk-badge,.uk-tile-primary:not(.uk-preserve-color) .uk-badge,.uk-tile-secondary:not(.uk-preserve-color) .uk-badge{background-color:#fff;color:#777!important}.uk-card-primary.uk-card-body .uk-label,.uk-card-primary>:not([class*=uk-card-media]) .uk-label,.uk-card-secondary.uk-card-body .uk-label,.uk-card-secondary>:not([class*=uk-card-media]) .uk-label,.uk-light .uk-label,.uk-offcanvas-bar .uk-label,.uk-section-primary:not(.uk-preserve-color) .uk-label,.uk-section-secondary:not(.uk-preserve-color) .uk-label,.uk-tile-primary:not(.uk-preserve-color) .uk-label,.uk-tile-secondary:not(.uk-preserve-color) .uk-label{background-color:#fff;color:#777}.uk-card-primary.uk-card-body .uk-article-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-article-meta,.uk-card-secondary.uk-card-body .uk-article-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-article-meta,.uk-light .uk-article-meta,.uk-offcanvas-bar .uk-article-meta,.uk-section-primary:not(.uk-preserve-color) .uk-article-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-article-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-article-meta{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input,.uk-light .uk-search-input,.uk-offcanvas-bar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-search-input::placeholder,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-card-secondary.uk-card-body .uk-search-input::placeholder,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-input::placeholder,.uk-light .uk-search-input::placeholder,.uk-offcanvas-bar .uk-search-input::placeholder,.uk-section-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-section-secondary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-primary:not(.uk-preserve-color) .uk-search-input::placeholder,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-input::placeholder{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search .uk-search-icon,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon,.uk-light .uk-search .uk-search-icon,.uk-offcanvas-bar .uk-search .uk-search-icon,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-card-secondary.uk-card-body .uk-search .uk-search-icon:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search .uk-search-icon:hover,.uk-light .uk-search .uk-search-icon:hover,.uk-offcanvas-bar .uk-search .uk-search-icon:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search .uk-search-icon:hover{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-default .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input,.uk-light .uk-search-default .uk-search-input,.uk-offcanvas-bar .uk-search-default .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input{background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-default .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-default .uk-search-input:focus,.uk-light .uk-search-default .uk-search-input:focus,.uk-offcanvas-bar .uk-search-default .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-default .uk-search-input:focus{background-color:rgba(255,255,255,.15)}.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input,.uk-light .uk-search-navbar .uk-search-input,.uk-offcanvas-bar .uk-search-navbar .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input{background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-search-navbar .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-navbar .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-navbar .uk-search-input:focus,.uk-light .uk-search-navbar .uk-search-input:focus,.uk-offcanvas-bar .uk-search-navbar .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-navbar .uk-search-input:focus{background-color:rgba(255,255,255,.15)}.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input,.uk-light .uk-search-medium .uk-search-input,.uk-offcanvas-bar .uk-search-medium .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input{background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-search-medium .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-medium .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-medium .uk-search-input:focus,.uk-light .uk-search-medium .uk-search-input:focus,.uk-offcanvas-bar .uk-search-medium .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-medium .uk-search-input:focus{background-color:rgba(255,255,255,.15)}.uk-card-primary.uk-card-body .uk-search-large .uk-search-input,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input,.uk-light .uk-search-large .uk-search-input,.uk-offcanvas-bar .uk-search-large .uk-search-input,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input{background-color:rgba(255,255,255,.1)}.uk-card-primary.uk-card-body .uk-search-large .uk-search-input:focus,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input:focus,.uk-card-secondary.uk-card-body .uk-search-large .uk-search-input:focus,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-large .uk-search-input:focus,.uk-light .uk-search-large .uk-search-input:focus,.uk-offcanvas-bar .uk-search-large .uk-search-input:focus,.uk-section-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-section-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-tile-primary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-large .uk-search-input:focus{background-color:rgba(255,255,255,.15)}.uk-card-primary.uk-card-body .uk-search-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-card-secondary.uk-card-body .uk-search-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle,.uk-light .uk-search-toggle,.uk-offcanvas-bar .uk-search-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-search-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-card-secondary.uk-card-body .uk-search-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-search-toggle:hover,.uk-light .uk-search-toggle:hover,.uk-offcanvas-bar .uk-search-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-search-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-search-toggle:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-accordion>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion>*,.uk-card-secondary.uk-card-body .uk-accordion>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion>*,.uk-light .uk-accordion>*,.uk-offcanvas-bar .uk-accordion>*,.uk-section-primary:not(.uk-preserve-color) .uk-accordion>*,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion>*,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion>*{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-accordion-title,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title,.uk-card-secondary.uk-card-body .uk-accordion-title,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title,.uk-light .uk-accordion-title,.uk-offcanvas-bar .uk-accordion-title,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title{color:#fff}.uk-card-primary.uk-card-body .uk-accordion-title:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title:hover,.uk-card-secondary.uk-card-body .uk-accordion-title:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title:hover,.uk-light .uk-accordion-title:hover,.uk-offcanvas-bar .uk-accordion-title:hover,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-iconnav>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-card-secondary.uk-card-body .uk-iconnav>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a,.uk-light .uk-iconnav>*>a,.uk-offcanvas-bar .uk-iconnav>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-iconnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>*>a:hover,.uk-light .uk-iconnav>*>a:hover,.uk-offcanvas-bar .uk-iconnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-iconnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-iconnav>.uk-active>a,.uk-light .uk-iconnav>.uk-active>a,.uk-offcanvas-bar .uk-iconnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-iconnav>.uk-active>a{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-grid-divider>:not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider>:not(.uk-first-column)::before,.uk-light .uk-grid-divider>:not(.uk-first-column)::before,.uk-offcanvas-bar .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider>:not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary.uk-card-body .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-light .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-offcanvas-bar .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-section-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-primary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-grid-divider.uk-grid-stack>.uk-grid-margin::before{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-default>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-card-secondary.uk-card-body .uk-nav-default>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a,.uk-light .uk-nav-default>li>a,.uk-offcanvas-bar .uk-nav-default>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-default>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li>a:hover,.uk-light .uk-nav-default>li>a:hover,.uk-offcanvas-bar .uk-nav-default>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li>a:hover{color:rgba(255,255,255,.7);background:0 0}.uk-card-primary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default>li.uk-active>a,.uk-light .uk-nav-default>li.uk-active>a,.uk-offcanvas-bar .uk-nav-default>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default>li.uk-active>a{color:#777;background:#fff}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-header,.uk-light .uk-nav-default .uk-nav-header,.uk-offcanvas-bar .uk-nav-default .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-divider,.uk-light .uk-nav-default .uk-nav-divider,.uk-offcanvas-bar .uk-nav-default .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a,.uk-light .uk-nav-default .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub a:hover,.uk-light .uk-nav-default .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-default .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a,.uk-light .uk-nav-primary>li>a,.uk-offcanvas-bar .uk-nav-primary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li>a:hover,.uk-light .uk-nav-primary>li>a:hover,.uk-offcanvas-bar .uk-nav-primary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary>li.uk-active>a,.uk-light .uk-nav-primary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-header,.uk-light .uk-nav-primary .uk-nav-header,.uk-offcanvas-bar .uk-nav-primary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-divider,.uk-light .uk-nav-primary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-primary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a,.uk-light .uk-nav-primary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub a:hover,.uk-light .uk-nav-primary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-primary .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a,.uk-light .uk-nav-secondary>li>a,.uk-offcanvas-bar .uk-nav-secondary>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover,.uk-light .uk-nav-secondary>li>a:hover,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a,.uk-light .uk-nav-secondary>li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-subtitle,.uk-light .uk-nav-secondary .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-subtitle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-light .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li>a:hover .uk-nav-subtitle{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary.uk-card-body .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-light .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-offcanvas-bar .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary>li.uk-active>a .uk-nav-subtitle{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-header,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-header,.uk-light .uk-nav-secondary .uk-nav-header,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-header,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-header{color:#fff}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-divider,.uk-light .uk-nav-secondary .uk-nav-divider,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-divider,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-divider{border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a,.uk-light .uk-nav-secondary .uk-nav-sub a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub a:hover,.uk-light .uk-nav-secondary .uk-nav-sub a:hover,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary.uk-card-body .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-light .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-offcanvas-bar .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-nav-secondary .uk-nav-sub li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-primary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary.uk-card-body .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-card-secondary>:not([class*=uk-card-media]) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-light .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-offcanvas-bar .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-section-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-primary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider),.uk-tile-secondary:not(.uk-preserve-color) .uk-nav.uk-nav-divider>:not(.uk-nav-divider)+:not(.uk-nav-header,.uk-nav-divider){border-top-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-navbar-nav>li>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a,.uk-light .uk-navbar-nav>li>a,.uk-offcanvas-bar .uk-navbar-nav>li>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-primary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-nav>li:hover>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li:hover>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a[aria-expanded=true],.uk-light .uk-navbar-nav>li:hover>a,.uk-light .uk-navbar-nav>li>a[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-nav>li:hover>a,.uk-offcanvas-bar .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li:hover>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-card-secondary.uk-card-body .uk-navbar-nav>li>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li>a:active,.uk-light .uk-navbar-nav>li>a:active,.uk-offcanvas-bar .uk-navbar-nav>li>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li>a:active{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-card-secondary.uk-card-body .uk-navbar-nav>li.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-nav>li.uk-active>a,.uk-light .uk-navbar-nav>li.uk-active>a,.uk-offcanvas-bar .uk-navbar-nav>li.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-nav>li.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-navbar-item,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-card-secondary.uk-card-body .uk-navbar-item,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-item,.uk-light .uk-navbar-item,.uk-offcanvas-bar .uk-navbar-item,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-item,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-item{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-navbar-toggle,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-card-secondary.uk-card-body .uk-navbar-toggle,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle,.uk-light .uk-navbar-toggle,.uk-offcanvas-bar .uk-navbar-toggle,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-navbar-toggle:hover,.uk-card-primary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary.uk-card-body .uk-navbar-toggle:hover,.uk-card-secondary.uk-card-body .uk-navbar-toggle[aria-expanded=true],.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-navbar-toggle[aria-expanded=true],.uk-light .uk-navbar-toggle:hover,.uk-light .uk-navbar-toggle[aria-expanded=true],.uk-offcanvas-bar .uk-navbar-toggle:hover,.uk-offcanvas-bar .uk-navbar-toggle[aria-expanded=true],.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true],.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-navbar-toggle[aria-expanded=true]{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>:first-child,.uk-light .uk-subnav>*>:first-child,.uk-offcanvas-bar .uk-subnav>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>:first-child{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-subnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>*>a:hover,.uk-light .uk-subnav>*>a:hover,.uk-offcanvas-bar .uk-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-active>a,.uk-light .uk-subnav>.uk-active>a,.uk-offcanvas-bar .uk-subnav>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-active>a{color:#fff}.uk-card-primary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-divider>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.2)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>:first-child,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>:first-child,.uk-light .uk-subnav-pill>*>:first-child,.uk-offcanvas-bar .uk-subnav-pill>*>:first-child,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>:first-child{background-color:transparent;color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:hover,.uk-light .uk-subnav-pill>*>a:hover,.uk-offcanvas-bar .uk-subnav-pill>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:hover{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-card-secondary.uk-card-body .uk-subnav-pill>*>a:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>*>a:active,.uk-light .uk-subnav-pill>*>a:active,.uk-offcanvas-bar .uk-subnav-pill>*>a:active,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>*>a:active{background-color:rgba(255,255,255,.1);color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-card-secondary.uk-card-body .uk-subnav-pill>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav-pill>.uk-active>a,.uk-light .uk-subnav-pill>.uk-active>a,.uk-offcanvas-bar .uk-subnav-pill>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav-pill>.uk-active>a{background-color:#fff;color:#777}.uk-card-primary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-subnav>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-subnav>.uk-disabled>a,.uk-light .uk-subnav>.uk-disabled>a,.uk-offcanvas-bar .uk-subnav>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-subnav>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-breadcrumb>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>*,.uk-light .uk-breadcrumb>*>*,.uk-offcanvas-bar .uk-breadcrumb>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-card-secondary.uk-card-body .uk-breadcrumb>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>*>:hover,.uk-light .uk-breadcrumb>*>:hover,.uk-offcanvas-bar .uk-breadcrumb>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>*>:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-card-secondary.uk-card-body .uk-breadcrumb>:last-child>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:last-child>*,.uk-light .uk-breadcrumb>:last-child>*,.uk-offcanvas-bar .uk-breadcrumb>:last-child>*,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:last-child>*{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .uk-breadcrumb>:nth-child(n+2):not(.uk-first-column)::before{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-pagination>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-card-secondary.uk-card-body .uk-pagination>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>*,.uk-light .uk-pagination>*>*,.uk-offcanvas-bar .uk-pagination>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-pagination>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-card-secondary.uk-card-body .uk-pagination>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>*>:hover,.uk-light .uk-pagination>*>:hover,.uk-offcanvas-bar .uk-pagination>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>*>:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-active>*,.uk-light .uk-pagination>.uk-active>*,.uk-offcanvas-bar .uk-pagination>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-active>*{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-card-secondary.uk-card-body .uk-pagination>.uk-disabled>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-pagination>.uk-disabled>*,.uk-light .uk-pagination>.uk-disabled>*,.uk-offcanvas-bar .uk-pagination>.uk-disabled>*,.uk-section-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-section-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-primary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-pagination>.uk-disabled>*{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-tab>*>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-card-secondary.uk-card-body .uk-tab>*>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a,.uk-light .uk-tab>*>a,.uk-offcanvas-bar .uk-tab>*>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-tab>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-card-secondary.uk-card-body .uk-tab>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>*>a:hover,.uk-light .uk-tab>*>a:hover,.uk-offcanvas-bar .uk-tab>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>*>a:hover{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-tab>.uk-active>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-active>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-active>a,.uk-light .uk-tab>.uk-active>a,.uk-offcanvas-bar .uk-tab>.uk-active>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-active>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-active>a{color:#fff;border-color:#fff}.uk-card-primary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-primary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-card-secondary.uk-card-body .uk-tab>.uk-disabled>a,.uk-card-secondary>:not([class*=uk-card-media]) .uk-tab>.uk-disabled>a,.uk-light .uk-tab>.uk-disabled>a,.uk-offcanvas-bar .uk-tab>.uk-disabled>a,.uk-section-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-section-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-primary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a,.uk-tile-secondary:not(.uk-preserve-color) .uk-tab>.uk-disabled>a{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-slidenav,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav,.uk-card-secondary.uk-card-body .uk-slidenav,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav,.uk-light .uk-slidenav,.uk-offcanvas-bar .uk-slidenav,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-slidenav:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-card-secondary.uk-card-body .uk-slidenav:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:hover,.uk-light .uk-slidenav:hover,.uk-offcanvas-bar .uk-slidenav:hover,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:hover{color:rgba(255,255,255,.95)}.uk-card-primary.uk-card-body .uk-slidenav:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-card-secondary.uk-card-body .uk-slidenav:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-slidenav:active,.uk-light .uk-slidenav:active,.uk-offcanvas-bar .uk-slidenav:active,.uk-section-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-section-secondary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-primary:not(.uk-preserve-color) .uk-slidenav:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-slidenav:active{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-dotnav>*>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-card-secondary.uk-card-body .uk-dotnav>*>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>*,.uk-light .uk-dotnav>*>*,.uk-offcanvas-bar .uk-dotnav>*>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>*{background-color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-dotnav>*>:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-card-secondary.uk-card-body .uk-dotnav>*>:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:hover,.uk-light .uk-dotnav>*>:hover,.uk-offcanvas-bar .uk-dotnav>*>:hover,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:hover{background-color:rgba(255,255,255,.9)}.uk-card-primary.uk-card-body .uk-dotnav>*>:active,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-card-secondary.uk-card-body .uk-dotnav>*>:active,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>*>:active,.uk-light .uk-dotnav>*>:active,.uk-offcanvas-bar .uk-dotnav>*>:active,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>*>:active,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>*>:active{background-color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-primary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-card-secondary.uk-card-body .uk-dotnav>.uk-active>*,.uk-card-secondary>:not([class*=uk-card-media]) .uk-dotnav>.uk-active>*,.uk-light .uk-dotnav>.uk-active>*,.uk-offcanvas-bar .uk-dotnav>.uk-active>*,.uk-section-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-section-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-primary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*,.uk-tile-secondary:not(.uk-preserve-color) .uk-dotnav>.uk-active>*{background-color:rgba(255,255,255,.9)}.uk-card-primary.uk-card-body .uk-text-lead,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-lead,.uk-card-secondary.uk-card-body .uk-text-lead,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-lead,.uk-light .uk-text-lead,.uk-offcanvas-bar .uk-text-lead,.uk-section-primary:not(.uk-preserve-color) .uk-text-lead,.uk-section-secondary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-primary:not(.uk-preserve-color) .uk-text-lead,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-lead{color:rgba(255,255,255,.7)}.uk-card-primary.uk-card-body .uk-text-meta,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-meta,.uk-card-secondary.uk-card-body .uk-text-meta,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-meta,.uk-light .uk-text-meta,.uk-offcanvas-bar .uk-text-meta,.uk-section-primary:not(.uk-preserve-color) .uk-text-meta,.uk-section-secondary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-primary:not(.uk-preserve-color) .uk-text-meta,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-meta{color:rgba(255,255,255,.5)}.uk-card-primary.uk-card-body .uk-text-muted,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-muted,.uk-card-secondary.uk-card-body .uk-text-muted,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-muted,.uk-light .uk-text-muted,.uk-offcanvas-bar .uk-text-muted,.uk-section-primary:not(.uk-preserve-color) .uk-text-muted,.uk-section-secondary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-primary:not(.uk-preserve-color) .uk-text-muted,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-muted{color:rgba(255,255,255,.5)!important}.uk-card-primary.uk-card-body .uk-text-emphasis,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-card-secondary.uk-card-body .uk-text-emphasis,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-emphasis,.uk-light .uk-text-emphasis,.uk-offcanvas-bar .uk-text-emphasis,.uk-section-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-section-secondary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-primary:not(.uk-preserve-color) .uk-text-emphasis,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-emphasis{color:#fff!important}.uk-card-primary.uk-card-body .uk-text-primary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-primary,.uk-card-secondary.uk-card-body .uk-text-primary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-primary,.uk-light .uk-text-primary,.uk-offcanvas-bar .uk-text-primary,.uk-section-primary:not(.uk-preserve-color) .uk-text-primary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-primary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-primary{color:#fff!important}.uk-card-primary.uk-card-body .uk-text-secondary,.uk-card-primary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-card-secondary.uk-card-body .uk-text-secondary,.uk-card-secondary>:not([class*=uk-card-media]) .uk-text-secondary,.uk-light .uk-text-secondary,.uk-offcanvas-bar .uk-text-secondary,.uk-section-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-section-secondary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-primary:not(.uk-preserve-color) .uk-text-secondary,.uk-tile-secondary:not(.uk-preserve-color) .uk-text-secondary{color:#fff!important}.uk-card-primary.uk-card-body .uk-column-divider,.uk-card-primary>:not([class*=uk-card-media]) .uk-column-divider,.uk-card-secondary.uk-card-body .uk-column-divider,.uk-card-secondary>:not([class*=uk-card-media]) .uk-column-divider,.uk-light .uk-column-divider,.uk-offcanvas-bar .uk-column-divider,.uk-section-primary:not(.uk-preserve-color) .uk-column-divider,.uk-section-secondary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-primary:not(.uk-preserve-color) .uk-column-divider,.uk-tile-secondary:not(.uk-preserve-color) .uk-column-divider{column-rule-color:rgba(255,255,255,0.2)}.uk-card-primary.uk-card-body .uk-logo,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo,.uk-card-secondary.uk-card-body .uk-logo,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo,.uk-light .uk-logo,.uk-offcanvas-bar .uk-logo,.uk-section-primary:not(.uk-preserve-color) .uk-logo,.uk-section-secondary:not(.uk-preserve-color) .uk-logo,.uk-tile-primary:not(.uk-preserve-color) .uk-logo,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo{color:#fff}.uk-card-primary.uk-card-body .uk-logo:hover,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-card-secondary.uk-card-body .uk-logo:hover,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:hover,.uk-light .uk-logo:hover,.uk-offcanvas-bar .uk-logo:hover,.uk-section-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-section-secondary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-primary:not(.uk-preserve-color) .uk-logo:hover,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:hover{color:#fff}.uk-card-primary.uk-card-body .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-primary>:not([class*=uk-card-media]) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-secondary.uk-card-body .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-light .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-offcanvas-bar .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-section-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-section-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-tile-primary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse),.uk-tile-secondary:not(.uk-preserve-color) .uk-logo:has(.uk-logo-inverse)>:not(picture:has(.uk-logo-inverse)):not(.uk-logo-inverse){display:none}.uk-card-primary.uk-card-body .uk-logo-inverse,.uk-card-primary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-card-secondary.uk-card-body .uk-logo-inverse,.uk-card-secondary>:not([class*=uk-card-media]) .uk-logo-inverse,.uk-light .uk-logo-inverse,.uk-offcanvas-bar .uk-logo-inverse,.uk-section-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-section-secondary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-primary:not(.uk-preserve-color) .uk-logo-inverse,.uk-tile-secondary:not(.uk-preserve-color) .uk-logo-inverse{display:block}.uk-card-primary.uk-card-body .uk-accordion-title::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-accordion-title::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-accordion-title::after,.uk-light .uk-accordion-title::after,.uk-offcanvas-bar .uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%221%22%20height%3D%2213%22%20x%3D%226%22%20y%3D%220%22%20%2F%3E%0A%3C%2Fsvg%3E")}.uk-card-primary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-primary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::after,.uk-card-secondary.uk-card-body .uk-open>.uk-accordion-title::after,.uk-card-secondary>:not([class*=uk-card-media]) .uk-open>.uk-accordion-title::after,.uk-light .uk-open>.uk-accordion-title::after,.uk-offcanvas-bar .uk-open>.uk-accordion-title::after,.uk-section-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-section-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-primary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after,.uk-tile-secondary:not(.uk-preserve-color) .uk-open>.uk-accordion-title::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20fill%3D%22rgba%28255,%20255,%20255,%200.7%29%22%20width%3D%2213%22%20height%3D%221%22%20x%3D%220%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E")}*{--uk-inverse:initial}.uk-card-primary.uk-card-body,.uk-card-primary>:not([class*=uk-card-media]),.uk-card-secondary.uk-card-body,.uk-card-secondary>:not([class*=uk-card-media]),.uk-light,.uk-offcanvas-bar,.uk-section-primary:not(.uk-preserve-color),.uk-section-secondary:not(.uk-preserve-color),.uk-tile-primary:not(.uk-preserve-color),.uk-tile-secondary:not(.uk-preserve-color){--uk-inverse:light}.uk-card-default.uk-card-body,.uk-card-default>:not([class*=uk-card-media]),.uk-dark,.uk-dropbar,.uk-dropdown,.uk-navbar-container:not(.uk-navbar-transparent),.uk-navbar-dropdown,.uk-overlay-default,.uk-overlay-primary,.uk-section-default:not(.uk-preserve-color),.uk-section-muted:not(.uk-preserve-color),.uk-tile-default:not(.uk-preserve-color),.uk-tile-muted:not(.uk-preserve-color){--uk-inverse:dark}.uk-inverse-light{--uk-inverse:light!important}.uk-inverse-dark{--uk-inverse:dark!important}@media print{*,::after,::before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}}.yo-customizer{display:flex;height:100vh}.yo-sidebar{position:relative;width:300px;transition:.3s ease-in-out;transition-property:width,margin;border-right:1px solid #eaeaea;box-sizing:border-box}.yo-sidebar-hide{position:fixed;left:6px;bottom:8px;z-index:1;width:24px;height:24px;background-color:#3696f3;color:#fff!important}.yo-sidebar-hide:hover{background-color:#1e89f2!important}.yo-preview{background:#fafafa}.yo-preview-iframe{position:relative;width:100%;height:100vh;box-shadow:0 0 25px rgba(0,0,0,.1),0 0 0 1px rgba(0,0,0,.03);transition:.3s ease-out;transition-property:width,height}.yo-preview-iframe>iframe{position:absolute;width:100%;height:100%;border:0}.yo-sidebar-header{position:absolute;top:0;left:0;right:0;box-sizing:border-box;height:110px;padding:15px 35px 0 35px}.yo-sidebar-breadcrumb,.yo-sidebar-close{height:24px}.yo-sidebar-breadcrumb{margin-top:21px}.yo-sidebar-footer{position:absolute;bottom:0;left:0;right:0;box-sizing:border-box;height:60px;padding:15px 0 0 0}.yo-sidebar-footer .uk-icon{transition:transform .15s ease-in-out}.yo-landscape{transform:rotate(90deg)}.yo-sidebar-drag{cursor:col-resize}.yo-sidebar-content{position:absolute;top:110px;bottom:60px;left:0;right:0;overflow:hidden}.yo-sidebar-section{box-sizing:border-box;height:100%;width:100%;padding:15px 35px;overflow-y:auto;overflow-x:hidden;transition:left .3s ease-in-out;position:absolute}.yo-sidebar-section:not(:first-child){left:100%}.yo-sidebar-tabs-content{position:absolute;top:79px;bottom:0;left:0;right:0;overflow-y:auto;overflow-x:hidden}.yo-sidebar-tabs-section{position:absolute;box-sizing:border-box;height:100%;padding:0 35px 20px 35px;transition:left .3s ease-in-out;overflow-y:auto;overflow-x:hidden}.yo-sidebar-logo{display:block;margin:-5px 0 25px 0}.yo-sidebar-marginless{margin-left:-35px;margin-right:-35px}.yo-sidebar-heading{margin-bottom:35px}.yo-sidebar-heading-builder{font-family:"Open Sans","Helvetica Neue",Arial,sans-serif;font-weight:400;text-transform:none;font-size:22px;max-width:100%}.yo-sidebar-subheading{margin-bottom:10px;font-size:12px;line-height:18px;text-transform:uppercase}.yo-sidebar-grid{margin-bottom:10px}*+.yo-sidebar-grid:has(.yo-sidebar-subheading){margin-top:35px}.yo-sidebar-fields>:not(:first-child) .yo-sidebar-fields,.yo-sidebar-fields>:not(:first-child)>.uk-flex:first-child:not(.yo-style),.yo-sidebar-fields>:not(:first-child)>.uk-grid:first-child,.yo-sidebar-fields>:not(:first-child)>.yo-parallax-stops:first-child,.yo-sidebar-fields>:not(:first-child)>.yo-sidebar-subheading:first-child{margin-top:35px!important}.yo-sidebar-fields>[style*=none]:first-child+*>.uk-flex:first-child:not(.yo-style),.yo-sidebar-fields>[style*=none]:first-child+*>.uk-grid:first-child,.yo-sidebar-fields>[style*=none]:first-child+*>.yo-parallax-stops:first-child,.yo-sidebar-fields>[style*=none]:first-child+*>.yo-sidebar-subheading:first-child{margin-top:0!important}.yo-sidebar-fields>:not(:first-child)>.uk-margin-small:first-child{margin-top:8px!important}[class*=yo-preview-size]{max-height:100vh}.yo-preview-size-phone-portrait{width:360px;height:640px}.yo-preview-size-phone-landscape{width:640px;height:360px}.yo-preview-size-tablet-portrait{width:768px;height:1024px}.yo-preview-size-tablet-landscape{width:1024px;height:768px}.yo-preview-size-desktop{width:1200px}.yo-input-locked{font-style:italic;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:default}.yo-input-iconnav-right{padding-right:70px}.yo-thumbnail{min-height:40px}.yo-thumbnail-badge{padding:5px;background:#444;border-radius:1px}.yo-thumbnail-overlay{background:rgba(255,255,255,.3)}.yo-dropdown{padding:0}.yo-dropdown-header{padding:2px 15px;border-bottom:1px solid #e5e5e5}.yo-dropdown-body{padding:15px}.yo-nav-subheader{padding:6px 15px;color:#444;font-style:italic;font-weight:700}.yo-nav-subheader~:not([class])>a{padding-left:30px}.yo-panel{color:#777}.yo-panel:hover{color:#444}.yo-label{background-color:#666}.yo-label-dark{background-color:#333}a.yo-label-dark:hover{background-color:#000;color:#fff}.yo-modal-subheader{margin-top:-10px}.yo-finder-body{margin-left:-20px;margin-right:-20px;padding-left:20px;padding-right:20px}@media (min-width:640px){.yo-modal-subheader{margin-top:-20px}.yo-finder-body{margin-left:-40px;margin-right:-40px;padding-left:40px;padding-right:40px}}.yo-finder-body-white .uk-card-default{background:#fff}.yo-finder-body-dark{background:#222}.yo-finder-body-dark .uk-card-default{background:#111}.yo-finder-search{margin-left:15px;padding-left:15px;border-left:1px solid #ddd}.yo-finder-thumbnail-folder{background-color:#3696f3}.yo-finder-thumbnail-file{background-color:#cfd2d8}.yo-finder-progress{margin-top:calc((((35px + 6px)) * -1)/ 2);margin-bottom:calc(((35px - 6px))/ 2)}.yo-editor-tab{padding:3px 10px;border:1px solid #e5e5e5;border-bottom:none;background:#fafafa}.yo-editor.uk-disabled .CodeMirror,.yo-editor.uk-disabled .mce-edit-area,.yo-editor.uk-disabled .mce-statusbar{background:#f5f5f5}.yo-editor.uk-disabled .CodeMirror>*,.yo-editor.uk-disabled .mce-edit-area>iframe{opacity:.5}.CodeMirror{border:1px solid #e5e5e5!important;color:#777!important}.CodeMirror-placeholder{color:#bbb!important}.yo-button-panel{padding-left:15px;padding-right:35px;background:#e5e5e5 url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2235%22%20height%3D%2214%22%20viewBox%3D%220%200%2035%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23777%22%20stroke-width%3D%222%22%20points%3D%2215%201.5%2020.5%207%2015%2012.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A") 100% 50% no-repeat;border-radius:0;color:#777;text-align:left}.yo-button-panel:focus,.yo-button-panel:hover{color:#444}.yo-button-panel:disabled{color:#a0a0a0}.yo-button-medium{line-height:34px}.yo-select-img.uk-disabled{opacity:.5}.yo-colorpicker{position:relative;display:block;background:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2232%22%20height%3D%2232%22%20viewBox%3D%220%200%2032%2032%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23CCCCCC%22%20x%3D%220%22%20y%3D%220%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23CCCCCC%22%20x%3D%2216%22%20y%3D%220%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23CCCCCC%22%20x%3D%220%22%20y%3D%2216%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23CCCCCC%22%20x%3D%2216%22%20y%3D%2216%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23CCCCCC%22%20x%3D%228%22%20y%3D%228%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23CCCCCC%22%20x%3D%2224%22%20y%3D%228%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23CCCCCC%22%20x%3D%228%22%20y%3D%2224%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23CCCCCC%22%20x%3D%2224%22%20y%3D%2224%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23FFFFFF%22%20x%3D%228%22%20y%3D%220%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23FFFFFF%22%20x%3D%220%22%20y%3D%228%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23FFFFFF%22%20x%3D%2216%22%20y%3D%228%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23FFFFFF%22%20x%3D%228%22%20y%3D%2216%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23FFFFFF%22%20x%3D%2224%22%20y%3D%220%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23FFFFFF%22%20x%3D%2224%22%20y%3D%2216%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23FFFFFF%22%20x%3D%220%22%20y%3D%2224%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%228%22%20height%3D%228%22%20fill%3D%22%23FFFFFF%22%20x%3D%2216%22%20y%3D%2224%22%20%2F%3E%0A%3C%2Fsvg%3E%0A") 0 0 repeat;cursor:pointer}.yo-colorpicker-color:after{content:"";position:absolute;top:0;bottom:0;left:0;right:0;box-shadow:inset 0 0 1px rgba(0,0,0,.3)}.yo-colorpicker-color{height:40px}.uk-disabled>.yo-colorpicker-color,.yo-colorpicker-color-none{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%220%200%2030%2030%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23D51C1C%22%20stroke-width%3D%222%22%20x1%3D%22-1%22%20y1%3D%2231%22%20x2%3D%2231%22%20y2%3D%22-1%22%20vector-effect%3D%22non-scaling-stroke%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-size:100% 100%}.yo-colorpicker.uk-disabled{opacity:.5}.yo-colorpicker-boxshadow .uk-form-label{margin-bottom:2px;font-size:10px}.yo-parallax-stop{position:relative}.yo-parallax-stop-delete{position:absolute;top:0;right:0;padding-left:6px;transform:translateX(100%)}.yo-parallax-stop-add{position:absolute;right:-5px;bottom:-9px;width:18px!important;height:15px!important;transform:translate(100%)}.yo-margin-xsmall{margin-bottom:5px}*+.yo-margin-xsmall{margin-top:5px!important}.yo-form-medium:not(textarea):not([multiple]):not([size]){height:34px;line-height:32px}.yo-form-medium.uk-select:not([multiple]):not([size]){padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%229%22%20viewBox%3D%220%200%2020%209%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20stroke-width%3D%222%22%20points%3D%225.5%202%2010%206.5%2014.5%202%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-style-label{display:inline-block;margin-left:2px;margin-top:2px;color:#a0a0a0;font-size:8px;line-height:8px;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;vertical-align:top;cursor:default}.yo-style{position:relative}.yo-style-reset{position:absolute;top:calc(50% - 8px);right:calc(100% + 5px);width:16px;height:16px;background:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%225%22%20height%3D%225%22%20viewBox%3D%220%200%205%205%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23bbb%22%20cx%3D%222.5%22%20cy%3D%222.5%22%20r%3D%222.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A") 50% 50% no-repeat;cursor:pointer}.yo-style-reset:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%229%22%20height%3D%229%22%20viewBox%3D%220%200%209%209%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20stroke%3D%22%23444%22%20stroke-width%3D%221.1%22%20d%3D%22M8%2C8%20L1%2C1%22%20%2F%3E%0A%20%20%20%20%3Cpath%20stroke%3D%22%23444%22%20stroke-width%3D%221.1%22%20d%3D%22M8%2C1%20L1%2C8%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.uk-nav-default .yo-style-reset{top:calc(50% - 9px);left:calc(35px - 16px - 5px)}.yo-style-form{width:100px;padding:0 6px;background:0 0;border-color:transparent;color:#a0a0a0;text-align:right}.yo-style-form.uk-hover,.yo-style-form:focus,.yo-style-form:hover{background:#fff;border-color:#e5e5e5}.yo-style-form:not(textarea):not([multiple]):not([size]){height:26px;line-height:24px}.yo-style-form.uk-select:not([multiple]):not([size]){padding-right:20px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%229%22%20viewBox%3D%220%200%2020%209%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20stroke-width%3D%222%22%20points%3D%225.5%202%2010%206.5%2014.5%202%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-style .yo-colorpicker{width:20px;margin-right:2px;border-radius:500px;background-position:-2px -2px;overflow:hidden}.yo-style .yo-colorpicker-color:after{border-radius:500px}.yo-style .yo-colorpicker-color{height:20px}[class*=yo-builder-icon]{display:block;width:20px;height:22px;background-repeat:no-repeat;background-position:50% 50%}@container (max-width:calc((4 * 20px) - 1px)){.yo-builder-nav-element [class*=yo-builder-icon]{width:17px}}.yo-builder-icon-edit{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2212%22%20height%3D%2214%22%20viewBox%3D%220%200%2012%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M10.01%2C4.49%20L10.66%2C5.14%20L11.62%2C4.19%20C12.13%2C3.68%2012.13%2C2.89%2011.62%2C2.38%20C11.36%2C2.13%2011.03%2C2%2010.69%2C2%20C10.36%2C2%2010.04%2C2.13%209.78%2C2.38%20L8.84%2C3.33%20L9.49%2C3.98%20L10.01%2C4.49%20L10.01%2C4.49%20Z%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%229.28%205.21%201.42%2013%201%2013%201%2012.55%208.78%204.71%208.12%204.05%200%2012.19%200%2014%201.78%2014%209.94%205.87%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-copy{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2212%22%20height%3D%2214%22%20viewBox%3D%220%200%2012%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%223%202%2011%202%2011%2011%2012%2011%2012%201%203%201%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M9%2C4%20L9%2C13%20L1%2C13%20L1%2C4%20L9%2C4%20L9%2C4%20Z%20M10%2C3%20L0%2C3%20L0%2C14%20L10%2C14%20L10%2C3%20L10%2C3%20L10%2C3%20Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-save{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2212%22%20height%3D%2214%22%20viewBox%3D%220%200%2012%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%229%22%20fill%3D%22%23a0a0a0%22%20x%3D%225%22%20y%3D%221%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%228.3%204.24%204.8%200.71%205.5%200%209%203.54%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%222%203.54%204.8%200.71%205.5%201.41%202.7%204.24%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%221%2013%2010%2013%2010%205%2011%205%2011%2014%200%2014%200%205%201%205%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-delete{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2212%22%20height%3D%2214%22%20viewBox%3D%220%200%2012%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%225%22%20height%3D%221%22%20fill%3D%22%23a0a0a0%22%20x%3D%223%22%20y%3D%220%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%2211%22%20height%3D%221%22%20fill%3D%22%23a0a0a0%22%20x%3D%220%22%20y%3D%222%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M9%2C3%20L9%2C13%20L2%2C13%20L2%2C3%20L9%2C3%20L9%2C3%20Z%20M10%2C2%20L9%2C2%20L2%2C2%20L1%2C2%20L1%2C3%20L1%2C13%20L1%2C14%20L2%2C14%20L9%2C14%20L10%2C14%20L10%2C13%20L10%2C3%20L10%2C2%20L10%2C2%20L10%2C2%20Z%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%225%22%20fill%3D%22%23a0a0a0%22%20x%3D%224%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%225%22%20fill%3D%22%23a0a0a0%22%20x%3D%226%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-scroll-to{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20cx%3D%227%22%20cy%3D%227%22%20r%3D%225.38%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20x1%3D%227%22%20x2%3D%227%22%20y2%3D%225%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20x1%3D%227%22%20y1%3D%229%22%20x2%3D%227%22%20y2%3D%2214%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20y1%3D%227%22%20x2%3D%225%22%20y2%3D%227%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20x1%3D%229%22%20y1%3D%227%22%20x2%3D%2214%22%20y2%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-add{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%229%22%20height%3D%221%22%20fill%3D%22%23a0a0a0%22%20x%3D%222%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%229%22%20fill%3D%22%23a0a0a0%22%20x%3D%226%22%20y%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-add-left{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2218%22%20height%3D%2215%22%20viewBox%3D%220%200%2018%2015%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M2.167%2C2.197c2.89-2.929%2C7.575-2.929%2C10.464%2C0l4.813%2C4.878c0.23%2C0.234%2C0.232%2C0.614%2C0%2C0.85l-4.813%2C4.878%20c-2.89%2C2.93-7.575%2C2.93-10.464%2C0C-0.723%2C9.875-0.723%2C5.125%2C2.167%2C2.197z%22%20%2F%3E%0A%20%20%20%20%3Crect%20class%3D%22uk-preserve%22%20width%3D%229%22%20height%3D%221%22%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%227%22%20%2F%3E%0A%20%20%20%20%3Crect%20class%3D%22uk-preserve%22%20width%3D%221%22%20height%3D%229%22%20fill%3D%22%23fff%22%20x%3D%227%22%20y%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-add-right{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2218%22%20height%3D%2215%22%20viewBox%3D%220%200%2018%2015%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M15.832%2C12.803c-2.891%2C2.93-7.575%2C2.93-10.465%2C0L0.554%2C7.925c-0.231-0.234-0.233-0.614%2C0-0.85l4.813-4.878%20c2.89-2.929%2C7.574-2.929%2C10.465%2C0C18.722%2C5.125%2C18.722%2C9.875%2C15.832%2C12.803z%22%20%2F%3E%0A%20%20%20%20%3Crect%20class%3D%22uk-preserve%22%20width%3D%229%22%20height%3D%221%22%20fill%3D%22%23fff%22%20x%3D%226%22%20y%3D%227%22%20%2F%3E%0A%20%20%20%20%3Crect%20class%3D%22uk-preserve%22%20width%3D%221%22%20height%3D%229%22%20fill%3D%22%23fff%22%20x%3D%2210%22%20y%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-edit:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2212%22%20height%3D%2214%22%20viewBox%3D%220%200%2012%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23444%22%20d%3D%22M10.01%2C4.49%20L10.66%2C5.14%20L11.62%2C4.19%20C12.13%2C3.68%2012.13%2C2.89%2011.62%2C2.38%20C11.36%2C2.13%2011.03%2C2%2010.69%2C2%20C10.36%2C2%2010.04%2C2.13%209.78%2C2.38%20L8.84%2C3.33%20L9.49%2C3.98%20L10.01%2C4.49%20L10.01%2C4.49%20Z%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23444%22%20points%3D%229.28%205.21%201.42%2013%201%2013%201%2012.55%208.78%204.71%208.12%204.05%200%2012.19%200%2014%201.78%2014%209.94%205.87%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-copy:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2212%22%20height%3D%2214%22%20viewBox%3D%220%200%2012%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23444%22%20points%3D%223%202%2011%202%2011%2011%2012%2011%2012%201%203%201%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23444%22%20d%3D%22M9%2C4%20L9%2C13%20L1%2C13%20L1%2C4%20L9%2C4%20L9%2C4%20Z%20M10%2C3%20L0%2C3%20L0%2C14%20L10%2C14%20L10%2C3%20L10%2C3%20L10%2C3%20Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-save:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2212%22%20height%3D%2214%22%20viewBox%3D%220%200%2012%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%229%22%20fill%3D%22%23444%22%20x%3D%225%22%20y%3D%221%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23444%22%20points%3D%228.3%204.24%204.8%200.71%205.5%200%209%203.54%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23444%22%20points%3D%222%203.54%204.8%200.71%205.5%201.41%202.7%204.24%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23444%22%20points%3D%221%2013%2010%2013%2010%205%2011%205%2011%2014%200%2014%200%205%201%205%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-delete:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2212%22%20height%3D%2214%22%20viewBox%3D%220%200%2012%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%225%22%20height%3D%221%22%20fill%3D%22%23444%22%20x%3D%223%22%20y%3D%220%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%2211%22%20height%3D%221%22%20fill%3D%22%23444%22%20x%3D%220%22%20y%3D%222%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23444%22%20d%3D%22M9%2C3%20L9%2C13%20L2%2C13%20L2%2C3%20L9%2C3%20L9%2C3%20Z%20M10%2C2%20L9%2C2%20L2%2C2%20L1%2C2%20L1%2C3%20L1%2C13%20L1%2C14%20L2%2C14%20L9%2C14%20L10%2C14%20L10%2C13%20L10%2C3%20L10%2C2%20L10%2C2%20L10%2C2%20Z%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%225%22%20fill%3D%22%23444%22%20x%3D%224%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%225%22%20fill%3D%22%23444%22%20x%3D%226%22%20y%3D%226%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-scroll-to:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2214%22%20viewBox%3D%220%200%2014%2014%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23444%22%20cx%3D%227%22%20cy%3D%227%22%20r%3D%225.38%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23444%22%20x1%3D%227%22%20x2%3D%227%22%20y2%3D%225%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23444%22%20x1%3D%227%22%20y1%3D%229%22%20x2%3D%227%22%20y2%3D%2214%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23444%22%20y1%3D%227%22%20x2%3D%225%22%20y2%3D%227%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23444%22%20x1%3D%229%22%20y1%3D%227%22%20x2%3D%2214%22%20y2%3D%227%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-add:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2213%22%20height%3D%2213%22%20viewBox%3D%220%200%2013%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%229%22%20height%3D%221%22%20fill%3D%22%23fff%22%20x%3D%222%22%20y%3D%226%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%229%22%20fill%3D%22%23fff%22%20x%3D%226%22%20y%3D%222%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-add-left:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2218%22%20height%3D%2215%22%20viewBox%3D%220%200%2018%2015%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%233696F3%22%20d%3D%22M2.167%2C2.197c2.89-2.929%2C7.575-2.929%2C10.464%2C0l4.813%2C4.878c0.23%2C0.234%2C0.232%2C0.614%2C0%2C0.85l-4.813%2C4.878%20c-2.89%2C2.93-7.575%2C2.93-10.464%2C0C-0.723%2C9.875-0.723%2C5.125%2C2.167%2C2.197z%22%20%2F%3E%0A%20%20%20%20%3Crect%20class%3D%22uk-preserve%22%20width%3D%229%22%20height%3D%221%22%20fill%3D%22%23fff%22%20x%3D%223%22%20y%3D%227%22%20%2F%3E%0A%20%20%20%20%3Crect%20class%3D%22uk-preserve%22%20width%3D%221%22%20height%3D%229%22%20fill%3D%22%23fff%22%20x%3D%227%22%20y%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-add-right:hover{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2218%22%20height%3D%2215%22%20viewBox%3D%220%200%2018%2015%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%233696F3%22%20d%3D%22M15.832%2C12.803c-2.891%2C2.93-7.575%2C2.93-10.465%2C0L0.554%2C7.925c-0.231-0.234-0.233-0.614%2C0-0.85l4.813-4.878%20c2.89-2.929%2C7.574-2.929%2C10.465%2C0C18.722%2C5.125%2C18.722%2C9.875%2C15.832%2C12.803z%22%20%2F%3E%0A%20%20%20%20%3Crect%20class%3D%22uk-preserve%22%20width%3D%229%22%20height%3D%221%22%20fill%3D%22%23fff%22%20x%3D%226%22%20y%3D%227%22%20%2F%3E%0A%20%20%20%20%3Crect%20class%3D%22uk-preserve%22%20width%3D%221%22%20height%3D%229%22%20fill%3D%22%23fff%22%20x%3D%2210%22%20y%3D%223%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-positioned{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2213%22%20viewBox%3D%220%200%2011%2013%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%2210%22%20height%3D%221%22%20fill%3D%22%23a0a0a0%22%20x%3D%220.5%22%20y%3D%228%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M8%2C8%20L3%2C8%20L3%2C2%20L8%2C2%20L8%2C8%20Z%20M8.22222222%2C1%20L2.77777778%2C1%20L2%2C1%20L2%2C1.58333333%20L2%2C7.41666667%20L2%2C8%20L2.77777778%2C8%20L8.22222222%2C8%20L9%2C8%20L9%2C7.41666667%20L9%2C1.58333333%20L9%2C1%20L8.22222222%2C1%20Z%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%224%22%20fill%3D%22%23a0a0a0%22%20x%3D%225%22%20y%3D%229%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-disabled{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20x1%3D%228.58%22%20y1%3D%221.61%22%20x2%3D%222.44%22%20y2%3D%229.57%22%20%2F%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20cx%3D%225.5%22%20cy%3D%225.6%22%20r%3D%225%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-dynamic{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2210%22%20height%3D%2211%22%20viewBox%3D%220%200%2010%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22M5%2C4.5c3%2C0%2C4.5-.84%2C4.5-2S8%2C.5%2C5%2C.5.5%2C1.34.5%2C2.5%2C2%2C4.5%2C5%2C4.5Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22M9.5%2C5C9.5%2C6.16%2C8%2C7.5%2C5%2C7.5S.5%2C6.65.5%2C5.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22M9.5%2C2.5v5c0%2C1.74-.36%2C3-4.5%2C3S.5%2C9.23.5%2C7.5v-5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-dynamic-n{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m5%2C4.5c3%2C0%2C4.5-.8%2C4.5-2S8%2C.5%2C5%2C.5.5%2C1.3.5%2C2.5s1.5%2C2%2C4.5%2C2Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m.5%2C5.5c0%2C1.2%2C1.5%2C2%2C4.5%2C2h.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m.5%2C2.5v5c0%2C1.7.4%2C3%2C4.5%2C3h.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m9.5%2C2.5v2%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2211%206%2011%2011%2010%2011%208%207.67%208%2011%207%2011%207%206%208%206%2010%209.33%2010%206%2011%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-dynamic-p{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m5%2C4.5c3%2C0%2C4.5-.8%2C4.5-2S8%2C.5%2C5%2C.5.5%2C1.3.5%2C2.5s1.5%2C2%2C4.5%2C2Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m.5%2C5.5c0%2C1.2%2C1.5%2C2%2C4.5%2C2h.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m.5%2C2.5v5c0%2C1.7.4%2C3%2C4.5%2C3h.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m9.5%2C2.5v2%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m7.5%2C11v-4.5h3v2.57h-3%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-dynamic-p-n{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m5%2C4.5c3%2C0%2C4.5-.8%2C4.5-2S8%2C.5%2C5%2C.5.5%2C1.3.5%2C2.5s1.5%2C2%2C4.5%2C2Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22m0%2C2.5h1v7.6c-.78-.6-1-1.49-1-2.6V2.5Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20d%3D%22m9.5%2C2.5v2%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2211%206%2011%2011%2010%2011%208%207.67%208%2011%207%2011%207%206%208%206%2010%209.33%2010%206%2011%206%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22m3%2C11h-1v-5h4v3.57h-3v1.43Zm0-2.43h2v-1.57h-2v1.57Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-dynamic-error{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2210%22%20height%3D%2211%22%20viewBox%3D%220%200%2010%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22M5%2C4.5c3%2C0%2C4.5-.84%2C4.5-2S8%2C.5%2C5%2C.5.5%2C1.34.5%2C2.5%2C2%2C4.5%2C5%2C4.5Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22M9.5%2C5C9.5%2C6.16%2C8%2C7.5%2C5%2C7.5S.5%2C6.65.5%2C5.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22M9.5%2C2.5v5c0%2C1.74-.36%2C3-4.5%2C3S.5%2C9.23.5%2C7.5v-5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-dynamic-n-error{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m5%2C4.5c3%2C0%2C4.5-.8%2C4.5-2S8%2C.5%2C5%2C.5.5%2C1.3.5%2C2.5s1.5%2C2%2C4.5%2C2Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m.5%2C5.5c0%2C1.2%2C1.5%2C2%2C4.5%2C2h.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m.5%2C2.5v5c0%2C1.7.4%2C3%2C4.5%2C3h.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m9.5%2C2.5v2%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23e44e56%22%20points%3D%2211%206%2011%2011%2010%2011%208%207.67%208%2011%207%2011%207%206%208%206%2010%209.33%2010%206%2011%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-dynamic-p-error{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m5%2C4.5c3%2C0%2C4.5-.8%2C4.5-2S8%2C.5%2C5%2C.5.5%2C1.3.5%2C2.5s1.5%2C2%2C4.5%2C2Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m.5%2C5.5c0%2C1.2%2C1.5%2C2%2C4.5%2C2h.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m.5%2C2.5v5c0%2C1.7.4%2C3%2C4.5%2C3h.5%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m9.5%2C2.5v2%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m7.5%2C11v-4.5h3v2.57h-3%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-dynamic-p-n-error{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m5%2C4.5c3%2C0%2C4.5-.8%2C4.5-2S8%2C.5%2C5%2C.5.5%2C1.3.5%2C2.5s1.5%2C2%2C4.5%2C2Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23e44e56%22%20d%3D%22m0%2C2.5h1v7.6c-.78-.6-1-1.49-1-2.6V2.5Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22none%22%20stroke%3D%22%23e44e56%22%20d%3D%22m9.5%2C2.5v2%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23e44e56%22%20points%3D%2211%206%2011%2011%2010%2011%208%207.67%208%2011%207%2011%207%206%208%206%2010%209.33%2010%206%2011%206%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23e44e56%22%20d%3D%22m3%2C11h-1v-5h4v3.57h-3v1.43Zm0-2.43h2v-1.57h-2v1.57Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-visible-s{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2215%22%20height%3D%2211%22%20viewBox%3D%220%200%2015%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2212%207%2012%208%2015%208%2015%2011%2011%2011%2011%2010%2014%2010%2014%209%2011%209%2011%206%2015%206%2015%207%2012%207%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M13.25%2C4.21c-.1-.16-2.4-3.92-6.56-3.92S.21%2C4.06.12%2C4.22L0%2C4.47l.14.25c.09.16%2C2.28%2C3.93%2C6.57%2C3.93A6.74%2C6.74%2C0%2C0%2C0%2C9%2C8.24V7.16a5.67%2C5.67%2C0%2C0%2C1-2.31.49A7%2C7%2C0%2C0%2C1%2C1.15%2C4.47%2C7%2C7%2C0%2C0%2C1%2C6.69%2C1.29c3%2C0%2C5%2C2.38%2C5.53%2C3.18H13.4Z%22%20%2F%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23a0a0a0%22%20cx%3D%226.69%22%20cy%3D%224.5%22%20r%3D%221.45%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-visible-m{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2215%22%20height%3D%2211%22%20viewBox%3D%220%200%2015%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23a0a0a0%22%20cx%3D%226.69%22%20cy%3D%224.5%22%20r%3D%221.45%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2215%206%2015%2011%2014%2011%2014%207.38%2012.5%209.71%2011%207.38%2011%2011%2010%2011%2010%206%2011.15%206%2012.5%208.14%2013.85%206%2015%206%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M13.24%2C4.21C13.15%2C4.05%2C10.85.29%2C6.68.29S.21%2C4.06.12%2C4.22L0%2C4.47l.14.25c.09.16%2C2.27%2C3.93%2C6.56%2C3.93A6.87%2C6.87%2C0%2C0%2C0%2C8%2C8.52v-1a5.61%2C5.61%2C0%2C0%2C1-1.32.16A7%2C7%2C0%2C0%2C1%2C1.14%2C4.47%2C7%2C7%2C0%2C0%2C1%2C6.68%2C1.29c3%2C0%2C5%2C2.38%2C5.53%2C3.18H13.4Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-visible-l{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2211%22%20viewBox%3D%220%200%2014%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2213%2010%2013%2011%2010%2011%2010%206%2011%206%2011%2010%2013%2010%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M13.24%2C4.21C13.15%2C4.05%2C10.85.29%2C6.68.29S.21%2C4.06.12%2C4.22L0%2C4.47l.14.25c.09.16%2C2.27%2C3.93%2C6.56%2C3.93A6.87%2C6.87%2C0%2C0%2C0%2C8%2C8.52v-1a5.61%2C5.61%2C0%2C0%2C1-1.32.16A7%2C7%2C0%2C0%2C1%2C1.14%2C4.47%2C7%2C7%2C0%2C0%2C1%2C6.68%2C1.29c3%2C0%2C5%2C2.38%2C5.53%2C3.18H13.4Z%22%20%2F%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23a0a0a0%22%20cx%3D%226.69%22%20cy%3D%224.5%22%20r%3D%221.45%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-visible-xl{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2217%22%20height%3D%2211%22%20viewBox%3D%220%200%2017%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2217%2010%2017%2011%2014%2011%2014%206%2015%206%2015%2010%2017%2010%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2213%2011.04%2011.92%2011.04%2010.5%209.21%209.09%2011.04%208%2011.04%209.96%208.5%208.07%206.04%209.16%206.04%2010.5%207.79%2011.86%206.04%2012.94%206.04%2011.05%208.5%2013%2011.04%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M13.24%2C4.21C13.15%2C4.05%2C10.85.29%2C6.68.29S.21%2C4.06.12%2C4.22L0%2C4.47l.14.25c.09.16%2C2.27%2C3.93%2C6.56%2C3.93H7v-1H6.68A7%2C7%2C0%2C0%2C1%2C1.14%2C4.47%2C7%2C7%2C0%2C0%2C1%2C6.68%2C1.29c3%2C0%2C5%2C2.38%2C5.53%2C3.18H13.4Z%22%20%2F%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23a0a0a0%22%20cx%3D%226.69%22%20cy%3D%224.5%22%20r%3D%221.45%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-hidden-s{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2215%22%20height%3D%2212%22%20viewBox%3D%220%200%2015%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2212%208%2012%209%2015%209%2015%2012%2011%2012%2011%2011%2014%2011%2014%2010%2011%2010%2011%207%2015%207%2015%208%2012%208%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20x1%3D%2210.79%22%20y1%3D%220.42%22%20x2%3D%222.79%22%20y2%3D%2210.42%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M13.25%2C5.21c-.1-.16-2.4-3.92-6.56-3.92S.21%2C5.06.12%2C5.22L0%2C5.47l.14.25c.09.16%2C2.28%2C3.93%2C6.57%2C3.93A6.74%2C6.74%2C0%2C0%2C0%2C9%2C9.24V8.16a5.67%2C5.67%2C0%2C0%2C1-2.31.49A7%2C7%2C0%2C0%2C1%2C1.15%2C5.47%2C7%2C7%2C0%2C0%2C1%2C6.69%2C2.29c3%2C0%2C5%2C2.38%2C5.53%2C3.18H13.4Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-hidden-m{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2215%22%20height%3D%2212%22%20viewBox%3D%220%200%2015%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2215%207%2015%2012%2014%2012%2014%208.38%2012.5%2010.71%2011%208.38%2011%2012%2010%2012%2010%207%2011.15%207%2012.5%209.14%2013.85%207%2015%207%22%20%2F%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20x1%3D%2210.79%22%20y1%3D%220.42%22%20x2%3D%222.79%22%20y2%3D%2210.42%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M13.24%2C5.21c-.09-.16-2.39-3.92-6.56-3.92S.21%2C5.06.12%2C5.22L0%2C5.47l.14.25c.09.16%2C2.27%2C3.93%2C6.56%2C3.93A6.87%2C6.87%2C0%2C0%2C0%2C8%2C9.52v-1a5.61%2C5.61%2C0%2C0%2C1-1.32.16A7%2C7%2C0%2C0%2C1%2C1.14%2C5.47%2C7%2C7%2C0%2C0%2C1%2C6.68%2C2.29c3%2C0%2C5%2C2.38%2C5.53%2C3.18H13.4Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-hidden-l{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2214%22%20height%3D%2212%22%20viewBox%3D%220%200%2014%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20x1%3D%2210.79%22%20y1%3D%220.42%22%20x2%3D%222.79%22%20y2%3D%2210.42%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2213%2011%2013%2012%2010%2012%2010%207%2011%207%2011%2011%2013%2011%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M13.24%2C5.21c-.09-.16-2.39-3.92-6.56-3.92S.21%2C5.06.12%2C5.22L0%2C5.47l.14.25c.09.16%2C2.27%2C3.93%2C6.56%2C3.93A6.87%2C6.87%2C0%2C0%2C0%2C8%2C9.52v-1a5.61%2C5.61%2C0%2C0%2C1-1.32.16A7%2C7%2C0%2C0%2C1%2C1.14%2C5.47%2C7%2C7%2C0%2C0%2C1%2C6.68%2C2.29c3%2C0%2C5%2C2.38%2C5.53%2C3.18H13.4Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-hidden-xl{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2217%22%20height%3D%2212%22%20viewBox%3D%220%200%2017%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20x1%3D%2210.79%22%20y1%3D%220.42%22%20x2%3D%222.79%22%20y2%3D%2210.42%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2217%2011%2017%2012%2014%2012%2014%207%2015%207%2015%2011%2017%2011%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2213%2012%2011.92%2012%2010.5%2010.17%209.09%2012%208%2012%209.96%209.46%208.07%207%209.16%207%2010.5%208.75%2011.86%207%2012.94%207%2011.05%209.46%2013%2012%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22M13.24%2C5.21c-.09-.16-2.39-3.92-6.56-3.92S.21%2C5.06.12%2C5.22L0%2C5.47l.14.25c.09.16%2C2.27%2C3.93%2C6.56%2C3.93H7v-1H6.68A7%2C7%2C0%2C0%2C1%2C1.14%2C5.47%2C7%2C7%2C0%2C0%2C1%2C6.68%2C2.29c3%2C0%2C5%2C2.38%2C5.53%2C3.18H13.4Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-element-article{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%225%2011%200%2011%200%200%2010%200%2010%204%209%204%209%201%201%201%201%2010%205%2010%205%2011%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22m9.9%2C6h-2.4l-1%2C5h1l.2-1h2.1l.2%2C1h1l-1.1-5Zm-2%2C3l.4-2h.8l.4%2C2h-1.6Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-element-address{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%221%2011%200%2011%200%200%2010%200%2010%204%209%204%209%201%201%201%201%2011%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22m9.3%2C6h-2.3v5h2.3c.9%2C0%2C1.7-.8%2C1.7-1.7v-1.6c0-.9-.8-1.7-1.7-1.7Zm.7%2C3.3c0%2C.4-.3.7-.7.7h-1.3v-3h1.3c.4%2C0%2C.7.3.7.7v1.6Z%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22m5.4%2C6h-2.4l-1%2C5h1l.2-1h2.1l.2%2C1h1l-1.1-5Zm-2%2C3l.4-2h.8l.4%2C2h-1.6Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-element-aside{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%228%207%208%208%2011%208%2011%2011%207%2011%207%2010%2010%2010%2010%209%207%209%207%206%2011%206%2011%207%208%207%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%221%2011%200%2011%200%200%2010%200%2010%204%209%204%209%201%201%201%201%2011%22%20%2F%3E%0A%20%20%20%20%3Cpath%20fill%3D%22%23a0a0a0%22%20d%3D%22m5.4%2C6h-2.4l-1%2C5h1l.2-1h2.1l.2%2C1h1l-1.1-5Zm-2%2C3l.4-2h.8l.4%2C2h-1.6Z%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-element-footer{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%225%2011%200%2011%200%200%2010%200%2010%204%209%204%209%201%201%201%201%2010%205%2010%205%2011%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%228%207%208%208%2010%208%2010%209%208%209%208%2011%207%2011%207%206%2011%206%2011%207%208%207%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-element-header{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%225%2011%200%2011%200%200%2010%200%2010%204%209%204%209%201%201%201%201%2010%205%2010%205%2011%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2211%206%2011%2011%2010%2011%2010%209%208%209%208%2011%207%2011%207%206%208%206%208%208%2010%208%2010%206%2011%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-element-hgroup{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%221%2011%200%2011%200%200%2010%200%2010%204%209%204%209%201%201%201%201%2011%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%226%206%206%2011%205%2011%205%209%203%209%203%2011%202%2011%202%206%203%206%203%208%205%208%205%206%206%206%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%228%207%208%2010%2010%2010%2010%209%209%209%209%208%2011%208%2011%2011%207%2011%207%206%2011%206%2011%207%208%207%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-element-nav{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%225%2011%200%2011%200%200%2010%200%2010%204%209%204%209%201%201%201%201%2010%205%2010%205%2011%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%2211%206%2011%2011%2010%2011%208%207.7%208%2011%207%2011%207%206%208%206%2010%209.3%2010%206%2011%206%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-element-section{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2211%22%20height%3D%2211%22%20viewBox%3D%220%200%2011%2011%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%225%2011%200%2011%200%200%2010%200%2010%204%209%204%209%201%201%201%201%2010%205%2010%205%2011%22%20%2F%3E%0A%20%20%20%20%3Cpolygon%20fill%3D%22%23a0a0a0%22%20points%3D%228%207%208%208%2011%208%2011%2011%207%2011%207%2010%2010%2010%2010%209%207%209%207%206%2011%206%2011%207%208%207%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-icon-disabled,.yo-builder-icon-positioned,[class*=yo-builder-icon-dynamic],[class*=yo-builder-icon-element],[class*=yo-builder-icon-hidden],[class*=yo-builder-icon-visible]{width:13px;height:20px;cursor:default}[class*=yo-builder-icon-hidden],[class*=yo-builder-icon-visible]{width:17px}.yo-builder-contain-icons+ul{margin-left:5px}.yo-builder-contain-icons::after,.yo-builder-contain-icons::before{content:'';width:3px;height:20px;background-repeat:no-repeat;background-position:50% 50%}.yo-builder-contain-icons::before{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%223%22%20height%3D%2212%22%20viewBox%3D%220%200%203%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20points%3D%222.5%2011.5%20.5%2011.5%20.5%20.5%202.5%20.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}.yo-builder-contain-icons::after{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%223%22%20height%3D%2212%22%20viewBox%3D%220%200%203%2012%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cpolyline%20fill%3D%22none%22%20stroke%3D%22%23a0a0a0%22%20points%3D%22.5%20.5%202.5%20.5%202.5%2011.5%20.5%2011.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A")}[class*=yo-builder-button]{position:absolute;z-index:1}.yo-builder-section{position:relative;padding-bottom:25px}*+.yo-builder-section{margin-top:5px}[class*=yo-builder-section-status]::before{content:'';position:absolute;top:27px;bottom:37px;left:-3px;right:-3px;border:1px solid transparent;pointer-events:none}[class*=yo-builder-section-status]:has(.yo-builder-grid:last-child .yo-builder-status-icons-cell)::before{bottom:47px}.yo-builder-section-status-multiple-source::before{border-color:#3dc372}.yo-builder-section-status-disabled::before,.yo-builder-section-status-error::before{border-color:#e44e56}.yo-builder-button-section{left:0;bottom:7px;width:18px;height:15px;transform:translate(-100%)}.yo-builder-grid{position:relative;padding-bottom:15px;cursor:move}.yo-builder-grid:has(.yo-builder-status-icons-cell){padding-bottom:25px}.yo-builder-grid>*{padding:2px;background:#fff}.yo-builder-grid-status-multiple-source{outline:1px solid #3DC372}.yo-builder-grid-status-disabled,.yo-builder-grid-status-error{outline:1px solid #e44e56}.yo-builder-grid>*>.uk-grid{margin-top:-2px;margin-left:-2px;min-height:72px}.yo-builder-grid-status-icons>*>.uk-grid{min-height:105px}.yo-builder-grid>*>.yo-builder-status-icons-grid:has( > ul > :nth-child(3))~.uk-grid{min-height:125px}.yo-builder-grid>*>.uk-grid>*{position:relative;padding-top:2px;padding-left:2px;container-type:inline-size}.yo-builder-grid>*>.uk-grid>.uk-width-expand{min-width:calc(100% / 6)}.yo-builder-column-status-sticky{outline:1px solid #697bf1}.yo-builder-column-status-multiple-source{outline:1px solid #3DC372}.yo-builder-column-status-disabled,.yo-builder-column-status-error{outline:1px solid #e44e56}.yo-builder-nav-grid{position:absolute;top:0;right:0;padding-left:6px;transform:translateX(100%)}.yo-builder-status-icons-grid{position:absolute;bottom:15px;right:0;padding-left:6px;transform:translateX(100%)}.yo-builder-grid:has(.yo-builder-status-icons-cell) .yo-builder-status-icons-grid{bottom:25px}.yo-builder-status-icons-cell{position:absolute;bottom:-2px;left:0;transform:translateY(100%)}.yo-builder-button-grid{right:-5px;bottom:0;width:18px;height:15px;transform:translate(100%)}.yo-builder-element{position:relative;box-sizing:border-box;padding:15px 2px;background:#f5f5f5;color:#777}*+.yo-builder-element{margin-top:2px}.yo-builder-element-status-absolute{background:#f3f4ff!important}.yo-builder-element-status-multiple-source{background:#eff9f3!important}.yo-builder-element-status-disabled>:first-child,.yo-builder-element-status-error>:first-child{color:#e44e56}.yo-builder-element:hover{background:#ededed;color:#444}.yo-builder-element.uk-sortable-drag{outline:2px solid #fff}.yo-builder-nav-element{position:absolute;top:-2px;right:-2px;background:#fff}.yo-builder-status-icons-element{position:absolute;bottom:0;right:2px}.yo-builder-button-element{left:calc(50% - 10px);bottom:-10px;width:21px;height:21px;background-color:#fff!important}.yo-builder-button-element:hover{background-color:#3696f3!important}.yo-builder-grid .uk-sortable-empty{box-sizing:border-box;min-width:80px;background:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2220%22%20height%3D%2220%22%20viewBox%3D%220%200%2020%2020%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Crect%20width%3D%221%22%20height%3D%2217%22%20fill%3D%22%23a0a0a0%22%20x%3D%229%22%20y%3D%221%22%20%2F%3E%0A%20%20%20%20%3Crect%20width%3D%2217%22%20height%3D%221%22%20fill%3D%22%23a0a0a0%22%20x%3D%221%22%20y%3D%229%22%20%2F%3E%0A%3C%2Fsvg%3E%0A") 50% 50% no-repeat;cursor:pointer}.yo-builder .uk-sortable-item{pointer-events:none}.uk-builder-element-hover,.uk-builder-grid-hover,.uk-builder-section-hover{opacity:1;transition:.1s opacity ease-out}.uk-drag .uk-builder-element-hover,.uk-drag .uk-builder-grid-hover,.uk-drag .uk-builder-section-hover,.yo-builder-element:not(:hover):not(.uk-hover) .uk-builder-element-hover,.yo-builder-grid:not(:hover):not(.uk-hover) .uk-builder-grid-hover,.yo-builder-section:not(:hover):not(.uk-hover) .uk-builder-section-hover{opacity:0}.yo-builder-element-item-status-disabled,.yo-builder-element-item-status-error{color:#e44e56}.yo-hover{box-shadow:0 0 0 1px #3696f3,0 0 0 1px inset #3696f3!important}.yo-nav-iconnav>li{position:relative}.yo-nav-iconnav>li>a{padding-right:85px}.yo-nav-iconnav>li:hover>a{background:#e5e5e5;color:#444}.yo-nav-iconnav-1>li>a{padding-right:57px}.yo-nav-media{width:32px;height:32px;margin:-6px 6px -6px 0;object-fit:cover;object-position:center;border-radius:50%}.yo-nav-sortable.uk-sortable-empty{min-height:0}.yo-nav-sortable-drag{display:block;box-sizing:border-box;padding:12px 35px!important;background:#e5e5e5;font-family:Montserrat,"Helvetica Neue",Arial,sans-serif;font-weight:600;font-size:13px;color:#444;text-decoration:none}.uk-nav>.yo-highlight>a{position:relative}.uk-nav>.yo-highlight>a::before{content:'';position:absolute;top:calc(50% - 8px);right:calc(100% - (35px - 5px));width:16px;height:16px;background:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%225%22%20height%3D%225%22%20viewBox%3D%220%200%205%205%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Ccircle%20fill%3D%22%23bbb%22%20cx%3D%222.5%22%20cy%3D%222.5%22%20r%3D%222.5%22%20%2F%3E%0A%3C%2Fsvg%3E%0A") 50% 50% no-repeat}.yo-overlay-image{background-image:linear-gradient(rgba(0,0,0,0) 60%,rgba(0,0,0,.3))}.yo-min-height-small{min-height:150px}.yo-gap-xsmall{gap:2px}.uk-card-primary.uk-card-body .yo-subnav>*>:nth-child(n),.uk-card-primary>:not([class*=uk-card-media]) .yo-subnav>*>:nth-child(n),.uk-card-secondary.uk-card-body .yo-subnav>*>:nth-child(n),.uk-card-secondary>:not([class*=uk-card-media]) .yo-subnav>*>:nth-child(n),.uk-light .yo-subnav>*>:nth-child(n),.uk-offcanvas-bar .yo-subnav>*>:nth-child(n),.uk-section-primary:not(.uk-preserve-color) .yo-subnav>*>:nth-child(n),.uk-section-secondary:not(.uk-preserve-color) .yo-subnav>*>:nth-child(n),.uk-tile-primary:not(.uk-preserve-color) .yo-subnav>*>:nth-child(n),.uk-tile-secondary:not(.uk-preserve-color) .yo-subnav>*>:nth-child(n){font-weight:700;color:#fff}.uk-card-primary.uk-card-body .yo-subnav>*>a:hover,.uk-card-primary>:not([class*=uk-card-media]) .yo-subnav>*>a:hover,.uk-card-secondary.uk-card-body .yo-subnav>*>a:hover,.uk-card-secondary>:not([class*=uk-card-media]) .yo-subnav>*>a:hover,.uk-light .yo-subnav>*>a:hover,.uk-offcanvas-bar .yo-subnav>*>a:hover,.uk-section-primary:not(.uk-preserve-color) .yo-subnav>*>a:hover,.uk-section-secondary:not(.uk-preserve-color) .yo-subnav>*>a:hover,.uk-tile-primary:not(.uk-preserve-color) .yo-subnav>*>a:hover,.uk-tile-secondary:not(.uk-preserve-color) .yo-subnav>*>a:hover{text-decoration:underline;color:#fff}.uk-card-primary.uk-card-body .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-primary>:not([class*=uk-card-media]) .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary.uk-card-body .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-card-secondary>:not([class*=uk-card-media]) .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-light .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-offcanvas-bar .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-primary:not(.uk-preserve-color) .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-section-secondary:not(.uk-preserve-color) .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-primary:not(.uk-preserve-color) .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before,.uk-tile-secondary:not(.uk-preserve-color) .yo-subnav>:nth-child(n+2):not(.uk-first-column)::before{border-left-color:rgba(255,255,255,.5)}.uk-dotnav{margin-left:-5px}.uk-dotnav>*{padding-left:5px}.yo-dotnav>*>*{width:20px;height:20px}.yo-dotnav-item-light{background:#ddd!important}.yo-dotnav-item-white{background:#fff!important}.yo-dotnav-item-dark{background:#222!important}.yo-icon-link{color:#cfcfcf}.yo-icon-link:hover{color:#a0a0a0}.yo-child-width-1-8>*{width:calc(100% * 1 / 8.001)}.yo-flex-initial{flex:0 1 auto!important}.yo-label-changelog{width:90px}.vc-yootheme .vc-saturation-circle{width:12px;height:12px;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.1),0 0 1px 2px rgba(0,0,0,.4);transform:translate(-6px,-6px)}.vc-yootheme .vc-hue-container{margin:0 3px}.vc-yootheme .vc-alpha-picker,.vc-yootheme .vc-hue-picker{width:14px;height:14px;margin:0;border-radius:50%;transform:translate(-7px,-1px);box-shadow:0 1px 4px 0 rgba(0,0,0,.37)}.vc-yootheme .vc-input__input{box-sizing:border-box;margin:0;border-radius:0;font:inherit;-webkit-appearance:none;max-width:100%;width:100%;border:0 none;padding:0 6px;background:#fff;color:#333;border:1px solid #e5e5e5;transition:.2s ease-in-out;transition-property:color,background-color,border;box-shadow:none!important;height:24px;vertical-align:middle;font-size:11px;text-align:center}.vc-yootheme .vc-input__input:hover{color:#777}.vc-yootheme .vc-input__input::-moz-placeholder{opacity:1}.vc-yootheme .vc-input__input:hover{color:#333}.vc-yootheme .vc-input__input:focus{outline:0;background-color:#fff;border-color:#3696f3}.vc-yootheme .vc-input__input::-ms-input-placeholder{color:#bbb!important}.vc-yootheme .vc-input__input::placeholder{color:#bbb}.vc-yootheme .vc-input__label{display:block;margin-top:8px;font-size:11px;font-weight:700;text-transform:uppercase}.vc-yootheme-saturation-wrap{width:100%;padding-bottom:75%;position:relative;overflow:hidden}.vc-yootheme-controls{display:flex}*~.vc-yootheme-controls{margin-top:15px}.vc-yootheme-sliders{flex:1;display:flex;align-items:center;flex-wrap:wrap}.vc-yootheme-alpha-wrap,.vc-yootheme-hue-wrap{position:relative;height:12px;width:100%}.vc-yootheme-alpha-wrap{margin-top:6px}.vc-yootheme-sliders .vc-alpha-gradient,.vc-yootheme-sliders .vc-hue{border-radius:2px}.vc-yootheme-color-wrap{width:60px;height:30px;position:relative;margin-left:8px;border-radius:2px;overflow:hidden}.vc-yootheme-active-color,.vc-yootheme-previous-color{position:absolute;top:0;bottom:0;width:50%;z-index:2}.vc-yootheme-active-color{left:0}.vc-yootheme-previous-color{right:0}.vc-yootheme-color-wrap .vc-checkerboard{background-size:auto}.vc-yootheme-fields{display:flex;padding-top:15px}.vc-yootheme-field{flex:1;margin-right:5px;text-align:center}.vc-yootheme-nocolor-box{box-sizing:border-box;width:24px;height:24px;margin-left:16px;border:1px solid #e5e5e5}.vc-yootheme-controls>.vc-yootheme-nocolor-box{width:30px;height:30px;margin-left:8px}.vc-yootheme-nocolor{background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg%20width%3D%2230%22%20height%3D%2230%22%20preserveAspectRatio%3D%22none%22%20viewBox%3D%220%200%2030%2030%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%0A%20%20%20%20%3Cline%20fill%3D%22none%22%20stroke%3D%22%23D51C1C%22%20stroke-width%3D%222%22%20x1%3D%22-1%22%20y1%3D%2231%22%20x2%3D%2231%22%20y2%3D%22-1%22%20vector-effect%3D%22non-scaling-stroke%22%20%2F%3E%0A%3C%2Fsvg%3E%0A");background-size:cover;background-color:transparent!important}#system-message-container{display:none}.mce-tinymce{box-sizing:border-box!important;border-color:#e5e5e5!important;box-shadow:none!important}.mce-top-part::before{display:none!important}.mce-toolbar-grp{border-bottom-color:#e5e5e5!important;background:#fafafa!important}.mce-edit-area{border-color:#e5e5e5!important}.mce-statusbar{border-top:1px solid #e5e5e5!important}div.mce-toolbar-grp>div{padding:3px}.mce-toolbar .mce-btn{margin:2px!important}.mce-flow-layout-item>*{white-space:normal!important}.mce-toolbar .mce-btn-group{padding:0!important}.mce-toolbar .mce-btn.mce-active{border-color:#e5e5e5!important;background-color:#f0f0f0!important;box-shadow:none!important}.mce-toolbar .mce-btn.mce-active button,.mce-toolbar .mce-btn.mce-active i{color:#595959!important}.mce-toolbar .mce-btn{background:0 0!important}.mce-toolbar .mce-btn:focus,.mce-toolbar .mce-btn:hover{border-color:#dadada!important;background-color:#eaeaea!important}.mce-toolbar .mce-btn button{height:26px!important;padding:2px 6px!important}.mce-toolbar .mce-btn-group .mce-btn.mce-listbox{background:#fff!important;border:1px solid #e5e5e5!important}.mce-toolbar .mce-btn-group .mce-btn i.mce-caret{border-top:4px solid #b5bcc2!important}.mce-menu{box-shadow:0 2px 10px rgba(0,0,0,.07)!important}theme-highlight/assets/highlight.js000064400000177234151666572130013454 0ustar00/*! highlight.js v9.12.0 | BSD3 License | git.io/hljslicense */ !(function (e) { var n = ('object' == typeof window && window) || ('object' == typeof self && self); 'undefined' != typeof exports ? e(exports) : n && ((n.hljs = e({})), 'function' == typeof define && define.amd && define([], function () { return n.hljs; })); })(function (e) { function n(e) { return e.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>'); } function t(e) { return e.nodeName.toLowerCase(); } function r(e, n) { var t = e && e.exec(n); return t && 0 === t.index; } function a(e) { return k.test(e); } function i(e) { var n, t, r, i, o = e.className + ' '; if (((o += e.parentNode ? e.parentNode.className : ''), (t = B.exec(o)))) return w(t[1]) ? t[1] : 'no-highlight'; for (o = o.split(/\s+/), n = 0, r = o.length; r > n; n++) if (((i = o[n]), a(i) || w(i))) return i; } function o(e) { var n, t = {}, r = Array.prototype.slice.call(arguments, 1); for (n in e) t[n] = e[n]; return ( r.forEach(function (e) { for (n in e) t[n] = e[n]; }), t ); } function u(e) { var n = []; return ( (function r(e, a) { for (var i = e.firstChild; i; i = i.nextSibling) 3 === i.nodeType ? (a += i.nodeValue.length) : 1 === i.nodeType && (n.push({ event: 'start', offset: a, node: i }), (a = r(i, a)), t(i).match(/br|hr|img|input/) || n.push({ event: 'stop', offset: a, node: i })); return a; })(e, 0), n ); } function c(e, r, a) { function i() { return e.length && r.length ? e[0].offset !== r[0].offset ? e[0].offset < r[0].offset ? e : r : 'start' === r[0].event ? e : r : e.length ? e : r; } function o(e) { function r(e) { return ' ' + e.nodeName + '="' + n(e.value).replace('"', '"') + '"'; } s += '<' + t(e) + E.map.call(e.attributes, r).join('') + '>'; } function u(e) { s += '</' + t(e) + '>'; } function c(e) { ('start' === e.event ? o : u)(e.node); } for (var l = 0, s = '', f = []; e.length || r.length; ) { var g = i(); if (((s += n(a.substring(l, g[0].offset))), (l = g[0].offset), g === e)) { f.reverse().forEach(u); do c(g.splice(0, 1)[0]), (g = i()); while (g === e && g.length && g[0].offset === l); f.reverse().forEach(o); } else 'start' === g[0].event ? f.push(g[0].node) : f.pop(), c(g.splice(0, 1)[0]); } return s + n(a.substr(l)); } function l(e) { return ( e.v && !e.cached_variants && (e.cached_variants = e.v.map(function (n) { return o(e, { v: null }, n); })), e.cached_variants || (e.eW && [o(e)]) || [e] ); } function s(e) { function n(e) { return (e && e.source) || e; } function t(t, r) { return new RegExp(n(t), 'm' + (e.cI ? 'i' : '') + (r ? 'g' : '')); } function r(a, i) { if (!a.compiled) { if (((a.compiled = !0), (a.k = a.k || a.bK), a.k)) { var o = {}, u = function (n, t) { e.cI && (t = t.toLowerCase()), t.split(' ').forEach(function (e) { var t = e.split('|'); o[t[0]] = [n, t[1] ? Number(t[1]) : 1]; }); }; 'string' == typeof a.k ? u('keyword', a.k) : x(a.k).forEach(function (e) { u(e, a.k[e]); }), (a.k = o); } (a.lR = t(a.l || /\w+/, !0)), i && (a.bK && (a.b = '\\b(' + a.bK.split(' ').join('|') + ')\\b'), a.b || (a.b = /\B|\b/), (a.bR = t(a.b)), a.e || a.eW || (a.e = /\B|\b/), a.e && (a.eR = t(a.e)), (a.tE = n(a.e) || ''), a.eW && i.tE && (a.tE += (a.e ? '|' : '') + i.tE)), a.i && (a.iR = t(a.i)), null == a.r && (a.r = 1), a.c || (a.c = []), (a.c = Array.prototype.concat.apply( [], a.c.map(function (e) { return l('self' === e ? a : e); }) )), a.c.forEach(function (e) { r(e, a); }), a.starts && r(a.starts, i); var c = a.c .map(function (e) { return e.bK ? '\\.?(' + e.b + ')\\.?' : e.b; }) .concat([a.tE, a.i]) .map(n) .filter(Boolean); a.t = c.length ? t(c.join('|'), !0) : { exec: function () { return null; }, }; } } r(e); } function f(e, t, a, i) { function o(e, n) { var t, a; for (t = 0, a = n.c.length; a > t; t++) if (r(n.c[t].bR, e)) return n.c[t]; } function u(e, n) { if (r(e.eR, n)) { for (; e.endsParent && e.parent; ) e = e.parent; return e; } return e.eW ? u(e.parent, n) : void 0; } function c(e, n) { return !a && r(n.iR, e); } function l(e, n) { var t = N.cI ? n[0].toLowerCase() : n[0]; return e.k.hasOwnProperty(t) && e.k[t]; } function p(e, n, t, r) { var a = r ? '' : I.classPrefix, i = '<span class="' + a, o = t ? '' : C; return (i += e + '">'), i + n + o; } function h() { var e, t, r, a; if (!E.k) return n(k); for (a = '', t = 0, E.lR.lastIndex = 0, r = E.lR.exec(k); r; ) (a += n(k.substring(t, r.index))), (e = l(E, r)), e ? ((B += e[1]), (a += p(e[0], n(r[0])))) : (a += n(r[0])), (t = E.lR.lastIndex), (r = E.lR.exec(k)); return a + n(k.substr(t)); } function d() { var e = 'string' == typeof E.sL; if (e && !y[E.sL]) return n(k); var t = e ? f(E.sL, k, !0, x[E.sL]) : g(k, E.sL.length ? E.sL : void 0); return E.r > 0 && (B += t.r), e && (x[E.sL] = t.top), p(t.language, t.value, !1, !0); } function b() { (L += null != E.sL ? d() : h()), (k = ''); } function v(e) { (L += e.cN ? p(e.cN, '', !0) : ''), (E = Object.create(e, { parent: { value: E } })); } function m(e, n) { if (((k += e), null == n)) return b(), 0; var t = o(n, E); if (t) return ( t.skip ? (k += n) : (t.eB && (k += n), b(), t.rB || t.eB || (k = n)), v(t, n), t.rB ? 0 : n.length ); var r = u(E, n); if (r) { var a = E; a.skip ? (k += n) : (a.rE || a.eE || (k += n), b(), a.eE && (k = n)); do E.cN && (L += C), E.skip || (B += E.r), (E = E.parent); while (E !== r.parent); return r.starts && v(r.starts, ''), a.rE ? 0 : n.length; } if (c(n, E)) throw new Error( 'Illegal lexeme "' + n + '" for mode "' + (E.cN || '<unnamed>') + '"' ); return (k += n), n.length || 1; } var N = w(e); if (!N) throw new Error('Unknown language: "' + e + '"'); s(N); var R, E = i || N, x = {}, L = ''; for (R = E; R !== N; R = R.parent) R.cN && (L = p(R.cN, '', !0) + L); var k = '', B = 0; try { for (var M, j, O = 0; ; ) { if (((E.t.lastIndex = O), (M = E.t.exec(t)), !M)) break; (j = m(t.substring(O, M.index), M[0])), (O = M.index + j); } for (m(t.substr(O)), R = E; R.parent; R = R.parent) R.cN && (L += C); return { r: B, value: L, language: e, top: E }; } catch (T) { if (T.message && -1 !== T.message.indexOf('Illegal')) return { r: 0, value: n(t) }; throw T; } } function g(e, t) { t = t || I.languages || x(y); var r = { r: 0, value: n(e) }, a = r; return ( t.filter(w).forEach(function (n) { var t = f(n, e, !1); (t.language = n), t.r > a.r && (a = t), t.r > r.r && ((a = r), (r = t)); }), a.language && (r.second_best = a), r ); } function p(e) { return I.tabReplace || I.useBR ? e.replace(M, function (e, n) { return I.useBR && '\n' === e ? '<br>' : I.tabReplace ? n.replace(/\t/g, I.tabReplace) : ''; }) : e; } function h(e, n, t) { var r = n ? L[n] : t, a = [e.trim()]; return ( e.match(/\bhljs\b/) || a.push('hljs'), -1 === e.indexOf(r) && a.push(r), a.join(' ').trim() ); } function d(e) { var n, t, r, o, l, s = i(e); a(s) || (I.useBR ? ((n = document.createElementNS('http://www.w3.org/1999/xhtml', 'div')), (n.innerHTML = e.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n'))) : (n = e), (l = n.textContent), (r = s ? f(s, l, !0) : g(l)), (t = u(n)), t.length && ((o = document.createElementNS('http://www.w3.org/1999/xhtml', 'div')), (o.innerHTML = r.value), (r.value = c(t, u(o), l))), (r.value = p(r.value)), (e.innerHTML = r.value), (e.className = h(e.className, s, r.language)), (e.result = { language: r.language, re: r.r }), r.second_best && (e.second_best = { language: r.second_best.language, re: r.second_best.r })); } function b(e) { I = o(I, e); } function v() { if (!v.called) { v.called = !0; var e = document.querySelectorAll('pre code'); E.forEach.call(e, d); } } function m() { addEventListener('DOMContentLoaded', v, !1), addEventListener('load', v, !1); } function N(n, t) { var r = (y[n] = t(e)); r.aliases && r.aliases.forEach(function (e) { L[e] = n; }); } function R() { return x(y); } function w(e) { return (e = (e || '').toLowerCase()), y[e] || y[L[e]]; } var E = [], x = Object.keys, y = {}, L = {}, k = /^(no-?highlight|plain|text)$/i, B = /\blang(?:uage)?-([\w-]+)\b/i, M = /((^(<[^>]+>|\t|)+|(?:\n)))/gm, C = '</span>', I = { classPrefix: 'hljs-', tabReplace: null, useBR: !1, languages: void 0 }; return ( (e.highlight = f), (e.highlightAuto = g), (e.fixMarkup = p), (e.highlightBlock = d), (e.configure = b), (e.initHighlighting = v), (e.initHighlightingOnLoad = m), (e.registerLanguage = N), (e.listLanguages = R), (e.getLanguage = w), (e.inherit = o), (e.IR = '[a-zA-Z]\\w*'), (e.UIR = '[a-zA-Z_]\\w*'), (e.NR = '\\b\\d+(\\.\\d+)?'), (e.CNR = '(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'), (e.BNR = '\\b(0b[01]+)'), (e.RSR = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~'), (e.BE = { b: '\\\\[\\s\\S]', r: 0 }), (e.ASM = { cN: 'string', b: "'", e: "'", i: '\\n', c: [e.BE] }), (e.QSM = { cN: 'string', b: '"', e: '"', i: '\\n', c: [e.BE] }), (e.PWM = { b: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/, }), (e.C = function (n, t, r) { var a = e.inherit({ cN: 'comment', b: n, e: t, c: [] }, r || {}); return ( a.c.push(e.PWM), a.c.push({ cN: 'doctag', b: '(?:TODO|FIXME|NOTE|BUG|XXX):', r: 0 }), a ); }), (e.CLCM = e.C('//', '$')), (e.CBCM = e.C('/\\*', '\\*/')), (e.HCM = e.C('#', '$')), (e.NM = { cN: 'number', b: e.NR, r: 0 }), (e.CNM = { cN: 'number', b: e.CNR, r: 0 }), (e.BNM = { cN: 'number', b: e.BNR, r: 0 }), (e.CSSNM = { cN: 'number', b: e.NR + '(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?', r: 0, }), (e.RM = { cN: 'regexp', b: /\//, e: /\/[gimuy]*/, i: /\n/, c: [e.BE, { b: /\[/, e: /\]/, r: 0, c: [e.BE] }], }), (e.TM = { cN: 'title', b: e.IR, r: 0 }), (e.UTM = { cN: 'title', b: e.UIR, r: 0 }), (e.METHOD_GUARD = { b: '\\.\\s*' + e.UIR, r: 0 }), e ); }); hljs.registerLanguage('http', function (e) { var t = 'HTTP/[0-9\\.]+'; return { aliases: ['https'], i: '\\S', c: [ { b: '^' + t, e: '$', c: [{ cN: 'number', b: '\\b\\d{3}\\b' }] }, { b: '^[A-Z]+ (.*?) ' + t + '$', rB: !0, e: '$', c: [ { cN: 'string', b: ' ', e: ' ', eB: !0, eE: !0 }, { b: t }, { cN: 'keyword', b: '[A-Z]+' }, ], }, { cN: 'attribute', b: '^\\w', e: ': ', eE: !0, i: '\\n|\\s|=', starts: { e: '$', r: 0 }, }, { b: '\\n\\n', starts: { sL: [], eW: !0 } }, ], }; }); hljs.registerLanguage('php', function (e) { var c = { b: '\\$+[a-zA-Z_-ÿ][a-zA-Z0-9_-ÿ]*' }, i = { cN: 'meta', b: /<\?(php)?|\?>/ }, t = { cN: 'string', c: [e.BE, i], v: [ { b: 'b"', e: '"' }, { b: "b'", e: "'" }, e.inherit(e.ASM, { i: null }), e.inherit(e.QSM, { i: null }), ], }, a = { v: [e.BNM, e.CNM] }; return { aliases: ['php3', 'php4', 'php5', 'php6'], cI: !0, k: 'and include_once list abstract global private echo interface as static endswitch array null if endwhile or const for endforeach self var while isset public protected exit foreach throw elseif include __FILE__ empty require_once do xor return parent clone use __CLASS__ __LINE__ else break print eval new catch __METHOD__ case exception default die require __FUNCTION__ enddeclare final try switch continue endfor endif declare unset true false trait goto instanceof insteadof __DIR__ __NAMESPACE__ yield finally', c: [ e.HCM, e.C('//', '$', { c: [i] }), e.C('/\\*', '\\*/', { c: [{ cN: 'doctag', b: '@[A-Za-z]+' }] }), e.C('__halt_compiler.+?;', !1, { eW: !0, k: '__halt_compiler', l: e.UIR }), { cN: 'string', b: /<<<['"]?\w+['"]?$/, e: /^\w+;?$/, c: [e.BE, { cN: 'subst', v: [{ b: /\$\w+/ }, { b: /\{\$/, e: /\}/ }] }], }, i, { cN: 'keyword', b: /\$this\b/ }, c, { b: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/ }, { cN: 'function', bK: 'function', e: /[;{]/, eE: !0, i: '\\$|\\[|%', c: [e.UTM, { cN: 'params', b: '\\(', e: '\\)', c: ['self', c, e.CBCM, t, a] }], }, { cN: 'class', bK: 'class interface', e: '{', eE: !0, i: /[:\(\$"]/, c: [{ bK: 'extends implements' }, e.UTM], }, { bK: 'namespace', e: ';', i: /[\.']/, c: [e.UTM] }, { bK: 'use', e: ';', c: [e.UTM] }, { b: '=>' }, t, a, ], }; }); hljs.registerLanguage('diff', function (e) { return { aliases: ['patch'], c: [ { cN: 'meta', r: 10, v: [ { b: /^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/ }, { b: /^\*\*\* +\d+,\d+ +\*\*\*\*$/ }, { b: /^\-\-\- +\d+,\d+ +\-\-\-\-$/ }, ], }, { cN: 'comment', v: [ { b: /Index: /, e: /$/ }, { b: /={3,}/, e: /$/ }, { b: /^\-{3}/, e: /$/ }, { b: /^\*{3} /, e: /$/ }, { b: /^\+{3}/, e: /$/ }, { b: /\*{5}/, e: /\*{5}$/ }, ], }, { cN: 'addition', b: '^\\+', e: '$' }, { cN: 'deletion', b: '^\\-', e: '$' }, { cN: 'addition', b: '^\\!', e: '$' }, ], }; }); hljs.registerLanguage('cpp', function (t) { var e = { cN: 'keyword', b: '\\b[a-z\\d_]*_t\\b' }, r = { cN: 'string', v: [ { b: '(u8?|U)?L?"', e: '"', i: '\\n', c: [t.BE] }, { b: '(u8?|U)?R"', e: '"', c: [t.BE] }, { b: "'\\\\?.", e: "'", i: '.' }, ], }, s = { cN: 'number', v: [ { b: "\\b(0b[01']+)" }, { b: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)" }, { b: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)", }, ], r: 0, }, i = { cN: 'meta', b: /#\s*[a-z]+\b/, e: /$/, k: { 'meta-keyword': 'if else elif endif define undef warning error line pragma ifdef ifndef include', }, c: [ { b: /\\\n/, r: 0 }, t.inherit(r, { cN: 'meta-string' }), { cN: 'meta-string', b: /<[^\n>]*>/, e: /$/, i: '\\n' }, t.CLCM, t.CBCM, ], }, a = t.IR + '\\s*\\(', c = { keyword: 'int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not', built_in: 'std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr', literal: 'true false nullptr NULL', }, n = [e, t.CLCM, t.CBCM, s, r]; return { aliases: ['c', 'cc', 'h', 'c++', 'h++', 'hpp'], k: c, i: '</', c: n.concat([ i, { b: '\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<', e: '>', k: c, c: ['self', e], }, { b: t.IR + '::', k: c }, { v: [ { b: /=/, e: /;/ }, { b: /\(/, e: /\)/ }, { bK: 'new throw return else', e: /;/ }, ], k: c, c: n.concat([{ b: /\(/, e: /\)/, k: c, c: n.concat(['self']), r: 0 }]), r: 0, }, { cN: 'function', b: '(' + t.IR + '[\\*&\\s]+)+' + a, rB: !0, e: /[{;=]/, eE: !0, k: c, i: /[^\w\s\*&]/, c: [ { b: a, rB: !0, c: [t.TM], r: 0 }, { cN: 'params', b: /\(/, e: /\)/, k: c, r: 0, c: [t.CLCM, t.CBCM, r, s, e] }, t.CLCM, t.CBCM, i, ], }, { cN: 'class', bK: 'class struct', e: /[{;:]/, c: [{ b: /</, e: />/, c: ['self'] }, t.TM], }, ]), exports: { preprocessor: i, strings: r, k: c }, }; }); hljs.registerLanguage('bash', function (e) { var t = { cN: 'variable', v: [{ b: /\$[\w\d#@][\w\d_]*/ }, { b: /\$\{(.*?)}/ }] }, s = { cN: 'string', b: /"/, e: /"/, c: [e.BE, t, { cN: 'variable', b: /\$\(/, e: /\)/, c: [e.BE] }], }, a = { cN: 'string', b: /'/, e: /'/ }; return { aliases: ['sh', 'zsh'], l: /\b-?[a-z\._]+\b/, k: { keyword: 'if then else elif fi for while in do done case esac function', literal: 'true false', built_in: 'break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp', _: '-ne -eq -lt -gt -f -d -e -s -l -a', }, c: [ { cN: 'meta', b: /^#![^\n]+sh\s*$/, r: 10 }, { cN: 'function', b: /\w[\w\d_]*\s*\(\s*\)\s*\{/, rB: !0, c: [e.inherit(e.TM, { b: /\w[\w\d_]*/ })], r: 0, }, e.HCM, s, a, t, ], }; }); hljs.registerLanguage('objectivec', function (e) { var t = { cN: 'built_in', b: '\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+', }, _ = { keyword: 'int float while char export sizeof typedef const struct for union unsigned long volatile static bool mutable if do return goto void enum else break extern asm case short default double register explicit signed typename this switch continue wchar_t inline readonly assign readwrite self @synchronized id typeof nonatomic super unichar IBOutlet IBAction strong weak copy in out inout bycopy byref oneway __strong __weak __block __autoreleasing @private @protected @public @try @property @end @throw @catch @finally @autoreleasepool @synthesize @dynamic @selector @optional @required @encode @package @import @defs @compatibility_alias __bridge __bridge_transfer __bridge_retained __bridge_retain __covariant __contravariant __kindof _Nonnull _Nullable _Null_unspecified __FUNCTION__ __PRETTY_FUNCTION__ __attribute__ getter setter retain unsafe_unretained nonnull nullable null_unspecified null_resettable class instancetype NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN', literal: 'false true FALSE TRUE nil YES NO NULL', built_in: 'BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once', }, i = /[a-zA-Z@][a-zA-Z0-9_]*/, n = '@interface @class @protocol @implementation'; return { aliases: ['mm', 'objc', 'obj-c'], k: _, l: i, i: '</', c: [ t, e.CLCM, e.CBCM, e.CNM, e.QSM, { cN: 'string', v: [ { b: '@"', e: '"', i: '\\n', c: [e.BE] }, { b: "'", e: "[^\\\\]'", i: "[^\\\\][^']" }, ], }, { cN: 'meta', b: '#', e: '$', c: [ { cN: 'meta-string', v: [ { b: '"', e: '"' }, { b: '<', e: '>' }, ], }, ], }, { cN: 'class', b: '(' + n.split(' ').join('|') + ')\\b', e: '({|$)', eE: !0, k: n, l: i, c: [e.UTM], }, { b: '\\.' + e.UIR, r: 0 }, ], }; }); hljs.registerLanguage('cs', function (e) { var i = { keyword: 'abstract as base bool break byte case catch char checked const continue decimal default delegate do double enum event explicit extern finally fixed float for foreach goto if implicit in int interface internal is lock long nameof object operator out override params private protected public readonly ref sbyte sealed short sizeof stackalloc static string struct switch this try typeof uint ulong unchecked unsafe ushort using virtual void volatile while add alias ascending async await by descending dynamic equals from get global group into join let on orderby partial remove select set value var where yield', literal: 'null false true', }, t = { cN: 'string', b: '@"', e: '"', c: [{ b: '""' }] }, r = e.inherit(t, { i: /\n/ }), a = { cN: 'subst', b: '{', e: '}', k: i }, c = e.inherit(a, { i: /\n/ }), n = { cN: 'string', b: /\$"/, e: '"', i: /\n/, c: [{ b: '{{' }, { b: '}}' }, e.BE, c] }, s = { cN: 'string', b: /\$@"/, e: '"', c: [{ b: '{{' }, { b: '}}' }, { b: '""' }, a] }, o = e.inherit(s, { i: /\n/, c: [{ b: '{{' }, { b: '}}' }, { b: '""' }, c] }); (a.c = [s, n, t, e.ASM, e.QSM, e.CNM, e.CBCM]), (c.c = [o, n, r, e.ASM, e.QSM, e.CNM, e.inherit(e.CBCM, { i: /\n/ })]); var l = { v: [s, n, t, e.ASM, e.QSM] }, b = e.IR + '(<' + e.IR + '(\\s*,\\s*' + e.IR + ')*>)?(\\[\\])?'; return { aliases: ['csharp'], k: i, i: /::/, c: [ e.C('///', '$', { rB: !0, c: [ { cN: 'doctag', v: [{ b: '///', r: 0 }, { b: '<!--|-->' }, { b: '</?', e: '>' }], }, ], }), e.CLCM, e.CBCM, { cN: 'meta', b: '#', e: '$', k: { 'meta-keyword': 'if else elif endif define undef warning error line region endregion pragma checksum', }, }, l, e.CNM, { bK: 'class interface', e: /[{;=]/, i: /[^\s:]/, c: [e.TM, e.CLCM, e.CBCM] }, { bK: 'namespace', e: /[{;=]/, i: /[^\s:]/, c: [e.inherit(e.TM, { b: '[a-zA-Z](\\.?\\w)*' }), e.CLCM, e.CBCM], }, { cN: 'meta', b: '^\\s*\\[', eB: !0, e: '\\]', eE: !0, c: [{ cN: 'meta-string', b: /"/, e: /"/ }], }, { bK: 'new return throw await else', r: 0 }, { cN: 'function', b: '(' + b + '\\s+)+' + e.IR + '\\s*\\(', rB: !0, e: /[{;=]/, eE: !0, k: i, c: [ { b: e.IR + '\\s*\\(', rB: !0, c: [e.TM], r: 0 }, { cN: 'params', b: /\(/, e: /\)/, eB: !0, eE: !0, k: i, r: 0, c: [l, e.CNM, e.CBCM], }, e.CLCM, e.CBCM, ], }, ], }; }); hljs.registerLanguage('ini', function (e) { var b = { cN: 'string', c: [e.BE], v: [ { b: "'''", e: "'''", r: 10 }, { b: '"""', e: '"""', r: 10 }, { b: '"', e: '"' }, { b: "'", e: "'" }, ], }; return { aliases: ['toml'], cI: !0, i: /\S/, c: [ e.C(';', '$'), e.HCM, { cN: 'section', b: /^\s*\[+/, e: /\]+/ }, { b: /^[a-z0-9\[\]_-]+\s*=\s*/, e: '$', rB: !0, c: [ { cN: 'attr', b: /[a-z0-9\[\]_-]+/ }, { b: /=/, eW: !0, r: 0, c: [ { cN: 'literal', b: /\bon|off|true|false|yes|no\b/ }, { cN: 'variable', v: [{ b: /\$[\w\d"][\w\d_]*/ }, { b: /\$\{(.*?)}/ }], }, b, { cN: 'number', b: /([\+\-]+)?[\d]+_[\d_]+/ }, e.NM, ], }, ], }, ], }; }); hljs.registerLanguage('makefile', function (e) { var i = { cN: 'variable', v: [{ b: '\\$\\(' + e.UIR + '\\)', c: [e.BE] }, { b: /\$[@%<?\^\+\*]/ }], }, r = { cN: 'string', b: /"/, e: /"/, c: [e.BE, i] }, a = { cN: 'variable', b: /\$\([\w-]+\s/, e: /\)/, k: { built_in: 'subst patsubst strip findstring filter filter-out sort word wordlist firstword lastword dir notdir suffix basename addsuffix addprefix join wildcard realpath abspath error warning shell origin flavor foreach if or and call eval file value', }, c: [i], }, n = { b: '^' + e.UIR + '\\s*[:+?]?=', i: '\\n', rB: !0, c: [{ b: '^' + e.UIR, e: '[:+?]?=', eE: !0 }], }, t = { cN: 'meta', b: /^\.PHONY:/, e: /$/, k: { 'meta-keyword': '.PHONY' }, l: /[\.\w]+/ }, l = { cN: 'section', b: /^[^\s]+:/, e: /$/, c: [i] }; return { aliases: ['mk', 'mak'], k: 'define endef undefine ifdef ifndef ifeq ifneq else endif include -include sinclude override export unexport private vpath', l: /[\w-]+/, c: [e.HCM, i, r, a, n, t, l], }; }); hljs.registerLanguage('javascript', function (e) { var r = '[A-Za-z$_][0-9A-Za-z$_]*', t = { keyword: 'in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as', literal: 'true false null undefined NaN Infinity', built_in: 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise', }, a = { cN: 'number', v: [{ b: '\\b(0[bB][01]+)' }, { b: '\\b(0[oO][0-7]+)' }, { b: e.CNR }], r: 0, }, n = { cN: 'subst', b: '\\$\\{', e: '\\}', k: t, c: [] }, c = { cN: 'string', b: '`', e: '`', c: [e.BE, n] }; n.c = [e.ASM, e.QSM, c, a, e.RM]; var s = n.c.concat([e.CBCM, e.CLCM]); return { aliases: ['js', 'jsx'], k: t, c: [ { cN: 'meta', r: 10, b: /^\s*['"]use (strict|asm)['"]/ }, { cN: 'meta', b: /^#!/, e: /$/ }, e.ASM, e.QSM, c, e.CLCM, e.CBCM, a, { b: /[{,]\s*/, r: 0, c: [{ b: r + '\\s*:', rB: !0, r: 0, c: [{ cN: 'attr', b: r, r: 0 }] }], }, { b: '(' + e.RSR + '|\\b(case|return|throw)\\b)\\s*', k: 'return throw case', c: [ e.CLCM, e.CBCM, e.RM, { cN: 'function', b: '(\\(.*?\\)|' + r + ')\\s*=>', rB: !0, e: '\\s*=>', c: [ { cN: 'params', v: [ { b: r }, { b: /\(\s*\)/ }, { b: /\(/, e: /\)/, eB: !0, eE: !0, k: t, c: s }, ], }, ], }, { b: /</, e: /(\/\w+|\w+\/)>/, sL: 'xml', c: [ { b: /<\w+\s*\/>/, skip: !0 }, { b: /<\w+/, e: /(\/\w+|\w+\/)>/, skip: !0, c: [{ b: /<\w+\s*\/>/, skip: !0 }, 'self'], }, ], }, ], r: 0, }, { cN: 'function', bK: 'function', e: /\{/, eE: !0, c: [ e.inherit(e.TM, { b: r }), { cN: 'params', b: /\(/, e: /\)/, eB: !0, eE: !0, c: s }, ], i: /\[|%/, }, { b: /\$[(.]/ }, e.METHOD_GUARD, { cN: 'class', bK: 'class', e: /[{;=]/, eE: !0, i: /[:"\[\]]/, c: [{ bK: 'extends' }, e.UTM], }, { bK: 'constructor', e: /\{/, eE: !0 }, ], i: /#(?!!)/, }; }); hljs.registerLanguage('xml', function (s) { var e = '[A-Za-z0-9\\._:-]+', t = { eW: !0, i: /</, r: 0, c: [ { cN: 'attr', b: e, r: 0 }, { b: /=\s*/, r: 0, c: [ { cN: 'string', endsParent: !0, v: [{ b: /"/, e: /"/ }, { b: /'/, e: /'/ }, { b: /[^\s"'=<>`]+/ }], }, ], }, ], }; return { aliases: ['html', 'xhtml', 'rss', 'atom', 'xjb', 'xsd', 'xsl', 'plist'], cI: !0, c: [ { cN: 'meta', b: '<!DOCTYPE', e: '>', r: 10, c: [{ b: '\\[', e: '\\]' }] }, s.C('<!--', '-->', { r: 10 }), { b: '<\\!\\[CDATA\\[', e: '\\]\\]>', r: 10 }, { b: /<\?(php)?/, e: /\?>/, sL: 'php', c: [{ b: '/\\*', e: '\\*/', skip: !0 }] }, { cN: 'tag', b: '<style(?=\\s|>|$)', e: '>', k: { name: 'style' }, c: [t], starts: { e: '</style>', rE: !0, sL: ['css', 'xml'] }, }, { cN: 'tag', b: '<script(?=\\s|>|$)', e: '>', k: { name: 'script' }, c: [t], starts: { e: '</script>', rE: !0, sL: ['actionscript', 'javascript', 'handlebars', 'xml'], }, }, { cN: 'meta', v: [ { b: /<\?xml/, e: /\?>/, r: 10 }, { b: /<\?\w+/, e: /\?>/ }, ], }, { cN: 'tag', b: '</?', e: '/?>', c: [{ cN: 'name', b: /[^\/><\s]+/, r: 0 }, t] }, ], }; }); hljs.registerLanguage('python', function (e) { var r = { keyword: 'and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False', built_in: 'Ellipsis NotImplemented', }, b = { cN: 'meta', b: /^(>>>|\.\.\.) / }, c = { cN: 'subst', b: /\{/, e: /\}/, k: r, i: /#/ }, a = { cN: 'string', c: [e.BE], v: [ { b: /(u|b)?r?'''/, e: /'''/, c: [b], r: 10 }, { b: /(u|b)?r?"""/, e: /"""/, c: [b], r: 10 }, { b: /(fr|rf|f)'''/, e: /'''/, c: [b, c] }, { b: /(fr|rf|f)"""/, e: /"""/, c: [b, c] }, { b: /(u|r|ur)'/, e: /'/, r: 10 }, { b: /(u|r|ur)"/, e: /"/, r: 10 }, { b: /(b|br)'/, e: /'/ }, { b: /(b|br)"/, e: /"/ }, { b: /(fr|rf|f)'/, e: /'/, c: [c] }, { b: /(fr|rf|f)"/, e: /"/, c: [c] }, e.ASM, e.QSM, ], }, s = { cN: 'number', r: 0, v: [{ b: e.BNR + '[lLjJ]?' }, { b: '\\b(0o[0-7]+)[lLjJ]?' }, { b: e.CNR + '[lLjJ]?' }], }, i = { cN: 'params', b: /\(/, e: /\)/, c: ['self', b, s, a] }; return ( (c.c = [a, s, b]), { aliases: ['py', 'gyp'], k: r, i: /(<\/|->|\?)|=>/, c: [ b, s, a, e.HCM, { v: [ { cN: 'function', bK: 'def' }, { cN: 'class', bK: 'class' }, ], e: /:/, i: /[${=;\n,]/, c: [e.UTM, i, { b: /->/, eW: !0, k: 'None' }], }, { cN: 'meta', b: /^[\t ]*@/, e: /$/ }, { b: /\b(print|exec)\(/ }, ], } ); }); hljs.registerLanguage('markdown', function (e) { return { aliases: ['md', 'mkdown', 'mkd'], c: [ { cN: 'section', v: [{ b: '^#{1,6}', e: '$' }, { b: '^.+?\\n[=-]{2,}$' }] }, { b: '<', e: '>', sL: 'xml', r: 0 }, { cN: 'bullet', b: '^([*+-]|(\\d+\\.))\\s+' }, { cN: 'strong', b: '[*_]{2}.+?[*_]{2}' }, { cN: 'emphasis', v: [{ b: '\\*.+?\\*' }, { b: '_.+?_', r: 0 }] }, { cN: 'quote', b: '^>\\s+', e: '$' }, { cN: 'code', v: [ { b: '^```w*s*$', e: '^```s*$' }, { b: '`.+?`' }, { b: '^( {4}| )', e: '$', r: 0 }, ], }, { b: '^[-\\*]{3,}', e: '$' }, { b: '\\[.+?\\][\\(\\[].*?[\\)\\]]', rB: !0, c: [ { cN: 'string', b: '\\[', e: '\\]', eB: !0, rE: !0, r: 0 }, { cN: 'link', b: '\\]\\(', e: '\\)', eB: !0, eE: !0 }, { cN: 'symbol', b: '\\]\\[', e: '\\]', eB: !0, eE: !0 }, ], r: 10, }, { b: /^\[[^\n]+\]:/, rB: !0, c: [ { cN: 'symbol', b: /\[/, e: /\]/, eB: !0, eE: !0 }, { cN: 'link', b: /:\s*/, e: /$/, eB: !0 }, ], }, ], }; }); hljs.registerLanguage('sql', function (e) { var t = e.C('--', '$'); return { cI: !0, i: /[<>{}*#]/, c: [ { bK: 'begin end start commit rollback savepoint lock alter create drop rename call delete do handler insert load replace select truncate update set show pragma grant merge describe use explain help declare prepare execute deallocate release unlock purge reset change stop analyze cache flush optimize repair kill install uninstall checksum restore check backup revoke comment', e: /;/, eW: !0, l: /[\w\.]+/, k: { keyword: 'abort abs absolute acc acce accep accept access accessed accessible account acos action activate add addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound buffer_cache buffer_pool build bulk by byte byteordermark bytes cache caching call calling cancel capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base char_length character_length characters characterset charindex charset charsetform charsetid check checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation collect colu colum column column_value columns columns_updated comment commit compact compatibility compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection consider consistent constant constraint constraints constructor container content contents context contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user cursor curtime customdatum cycle data database databases datafile datafiles datalength date_add date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor deterministic diagnostics difference dimension direct_load directory disable disable_all disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div do document domain dotnet double downgrade drop dumpfile duplicate duration each edition editionable editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding execu execut execute exempt exists exit exp expire explain export export_set extended extent external external_1 external_2 externally extract failed failed_login_attempts failover failure far fast feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final finish first first_value fixed flash_cache flashback floor flush following follows for forall force form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ftp full function general generated get get_format get_lock getdate getutcdate global global_name globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex hierarchy high high_priority hosts hour http id ident_current ident_incr ident_seed identified identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile initial initialized initially initrans inmemory inner innodb input insert install instance instantiable instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists keep keep_duplicates key keys kill language large last last_day last_insert_id last_value lax lcase lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit lines link list listagg little ln load load_file lob lobs local localtime localtimestamp locate locator lock locked log log10 log2 logfile logfiles logging logical logical_reads_per_call logoff logon logs long loop low low_priority lower lpad lrtrim ltrim main make_set makedate maketime managed management manual map mapping mask master master_pos_wait match matched materialized max maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans md5 measures median medium member memcompress memory merge microsecond mid migration min minextents minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month months mount move movement multiset mutex name name_const names nan national native natural nav nchar nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary out outer outfile outline output over overflow overriding package pad parallel parallel_enable parameters parent parse partial partition partitions pascal passing password password_grace_time password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction prediction_cost prediction_details prediction_probability prediction_set prepare present preserve prior priority private private_sga privileges procedural procedure procedure_analyze processlist profiles project prompt protection public publishingservername purge quarter query quick quiesce quota quotename radians raise rand range rank raw read reads readsize rebuild record records recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy reject rekey relational relative relaylog release release_lock relies_on relocate rely rem remainder rename repair repeat replace replicate replication required reset resetlogs resize resource respect restore restricted result result_cache resumable resume retention return returning returns reuse reverse revoke right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment select self sequence sequential serializable server servererror session session_user sessions_per_user set sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone standby start starting startup statement static statistics stats_binomial_test stats_crosstab stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime table tables tablespace tan tdo template temporary terminated tertiary_weights test than then thread through tier ties time time_format time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek', literal: 'true false null', built_in: 'array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number numeric real record serial serial8 smallint text varchar varying void', }, c: [ { cN: 'string', b: "'", e: "'", c: [e.BE, { b: "''" }] }, { cN: 'string', b: '"', e: '"', c: [e.BE, { b: '""' }] }, { cN: 'string', b: '`', e: '`', c: [e.BE] }, e.CNM, e.CBCM, t, ], }, e.CBCM, t, ], }; }); hljs.registerLanguage('css', function (e) { var c = '[a-zA-Z-][a-zA-Z0-9_-]*', t = { b: /[A-Z\_\.\-]+\s*:/, rB: !0, e: ';', eW: !0, c: [ { cN: 'attribute', b: /\S/, e: ':', eE: !0, starts: { eW: !0, eE: !0, c: [ { b: /[\w-]+\(/, rB: !0, c: [ { cN: 'built_in', b: /[\w-]+/ }, { b: /\(/, e: /\)/, c: [e.ASM, e.QSM] }, ], }, e.CSSNM, e.QSM, e.ASM, e.CBCM, { cN: 'number', b: '#[0-9A-Fa-f]+' }, { cN: 'meta', b: '!important' }, ], }, }, ], }; return { cI: !0, i: /[=\/|'\$]/, c: [ e.CBCM, { cN: 'selector-id', b: /#[A-Za-z0-9_-]+/ }, { cN: 'selector-class', b: /\.[A-Za-z0-9_-]+/ }, { cN: 'selector-attr', b: /\[/, e: /\]/, i: '$' }, { cN: 'selector-pseudo', b: /:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/ }, { b: '@(font-face|page)', l: '[a-z-]+', k: 'font-face page' }, { b: '@', e: '[{;]', i: /:/, c: [ { cN: 'keyword', b: /\w+/ }, { b: /\s/, eW: !0, eE: !0, r: 0, c: [e.ASM, e.QSM, e.CSSNM] }, ], }, { cN: 'selector-tag', b: c, r: 0 }, { b: '{', e: '}', i: /\S/, c: [e.CBCM, t] }, ], }; }); hljs.registerLanguage('java', function (e) { var a = '[À-ʸa-zA-Z_$][À-ʸa-zA-Z_$0-9]*', t = a + '(<' + a + '(\\s*,\\s*' + a + ')*>)?', r = 'false synchronized int abstract float private char boolean static null if const for true while long strictfp finally protected import native final void enum else break transient catch instanceof byte super volatile case assert short package default double public try this switch continue throws protected public private module requires exports do', s = '\\b(0[bB]([01]+[01_]+[01]+|[01]+)|0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)|(([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?|\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))([eE][-+]?\\d+)?)[lLfF]?', c = { cN: 'number', b: s, r: 0 }; return { aliases: ['jsp'], k: r, i: /<\/|#/, c: [ e.C('/\\*\\*', '\\*/', { r: 0, c: [ { b: /\w+@/, r: 0 }, { cN: 'doctag', b: '@[A-Za-z]+' }, ], }), e.CLCM, e.CBCM, e.ASM, e.QSM, { cN: 'class', bK: 'class interface', e: /[{;=]/, eE: !0, k: 'class interface', i: /[:"\[\]]/, c: [{ bK: 'extends implements' }, e.UTM], }, { bK: 'new throw return else', r: 0 }, { cN: 'function', b: '(' + t + '\\s+)+' + e.UIR + '\\s*\\(', rB: !0, e: /[{;=]/, eE: !0, k: r, c: [ { b: e.UIR + '\\s*\\(', rB: !0, r: 0, c: [e.UTM] }, { cN: 'params', b: /\(/, e: /\)/, k: r, r: 0, c: [e.ASM, e.QSM, e.CNM, e.CBCM], }, e.CLCM, e.CBCM, ], }, c, { cN: 'meta', b: '@[A-Za-z]+' }, ], }; }); hljs.registerLanguage('perl', function (e) { var t = 'getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qqfileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent shutdown dump chomp connect getsockname die socketpair close flock exists index shmgetsub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedirioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when', r = { cN: 'subst', b: '[$@]\\{', e: '\\}', k: t }, s = { b: '->{', e: '}' }, n = { v: [ { b: /\$\d/ }, { b: /[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/ }, { b: /[\$%@][^\s\w{]/, r: 0 }, ], }, i = [e.BE, r, n], o = [ n, e.HCM, e.C('^\\=\\w', '\\=cut', { eW: !0 }), s, { cN: 'string', c: i, v: [ { b: 'q[qwxr]?\\s*\\(', e: '\\)', r: 5 }, { b: 'q[qwxr]?\\s*\\[', e: '\\]', r: 5 }, { b: 'q[qwxr]?\\s*\\{', e: '\\}', r: 5 }, { b: 'q[qwxr]?\\s*\\|', e: '\\|', r: 5 }, { b: 'q[qwxr]?\\s*\\<', e: '\\>', r: 5 }, { b: 'qw\\s+q', e: 'q', r: 5 }, { b: "'", e: "'", c: [e.BE] }, { b: '"', e: '"' }, { b: '`', e: '`', c: [e.BE] }, { b: '{\\w+}', c: [], r: 0 }, { b: '-?\\w+\\s*\\=\\>', c: [], r: 0 }, ], }, { cN: 'number', b: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b', r: 0, }, { b: '(\\/\\/|' + e.RSR + '|\\b(split|return|print|reverse|grep)\\b)\\s*', k: 'split return print reverse grep', r: 0, c: [ e.HCM, { cN: 'regexp', b: '(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*', r: 10 }, { cN: 'regexp', b: '(m|qr)?/', e: '/[a-z]*', c: [e.BE], r: 0 }, ], }, { cN: 'function', bK: 'sub', e: '(\\s*\\(.*?\\))?[;{]', eE: !0, r: 5, c: [e.TM] }, { b: '-\\w\\b', r: 0 }, { b: '^__DATA__$', e: '^__END__$', sL: 'mojolicious', c: [{ b: '^@@.*', e: '$', cN: 'comment' }], }, ]; return (r.c = o), (s.c = o), { aliases: ['pl', 'pm'], l: /[\w\.]+/, k: t, c: o }; }); hljs.registerLanguage('json', function (e) { var i = { literal: 'true false null' }, n = [e.QSM, e.CNM], r = { e: ',', eW: !0, eE: !0, c: n, k: i }, t = { b: '{', e: '}', c: [{ cN: 'attr', b: /"/, e: /"/, c: [e.BE], i: '\\n' }, e.inherit(r, { b: /:/ })], i: '\\S', }, c = { b: '\\[', e: '\\]', c: [e.inherit(r)], i: '\\S' }; return n.splice(n.length, 0, t, c), { c: n, k: i, i: '\\S' }; }); hljs.registerLanguage('shell', function (s) { return { aliases: ['console'], c: [ { cN: 'meta', b: '^\\s{0,3}[\\w\\d\\[\\]()@-]*[>%$#]', starts: { e: '$', sL: 'bash' } }, ], }; }); theme-highlight/assets/LICENSE000064400000002732151666572130012142 0ustar00Copyright (c) 2006, Ivan Sagalaev All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of highlight.js nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. theme-highlight/assets/README.md000064400000011263151666572130012413 0ustar00# Highlight.js [](https://travis-ci.org/isagalaev/highlight.js) Highlight.js is a syntax highlighter written in JavaScript. It works in the browser as well as on the server. It works with pretty much any markup, doesn’t depend on any framework and has automatic language detection. ## Getting Started The bare minimum for using highlight.js on a web page is linking to the library along with one of the styles and calling [`initHighlightingOnLoad`][1]: ```html <link rel="stylesheet" href="/path/to/styles/default.css" /> <script src="/path/to/highlight.pack.js"></script> <script> hljs.initHighlightingOnLoad(); </script> ``` This will find and highlight code inside of `<pre><code>` tags; it tries to detect the language automatically. If automatic detection doesn’t work for you, you can specify the language in the `class` attribute: ```html <pre><code class="html">...</code></pre> ``` The list of supported language classes is available in the [class reference][2]. Classes can also be prefixed with either `language-` or `lang-`. To disable highlighting altogether use the `nohighlight` class: ```html <pre><code class="nohighlight">...</code></pre> ``` ## Custom Initialization When you need a bit more control over the initialization of highlight.js, you can use the [`highlightBlock`][3] and [`configure`][4] functions. This allows you to control _what_ to highlight and _when_. Here’s an equivalent way to calling [`initHighlightingOnLoad`][1] using jQuery: ```javascript $(document).ready(function () { $('pre code').each(function (i, block) { hljs.highlightBlock(block); }); }); ``` You can use any tags instead of `<pre><code>` to mark up your code. If you don't use a container that preserve line breaks you will need to configure highlight.js to use the `<br>` tag: ```javascript hljs.configure({ useBR: true }); $('div.code').each(function (i, block) { hljs.highlightBlock(block); }); ``` For other options refer to the documentation for [`configure`][4]. ## Web Workers You can run highlighting inside a web worker to avoid freezing the browser window while dealing with very big chunks of code. In your main script: ```javascript addEventListener('load', function () { var code = document.querySelector('#code'); var worker = new Worker('worker.js'); worker.onmessage = function (event) { code.innerHTML = event.data; }; worker.postMessage(code.textContent); }); ``` In worker.js: ```javascript onmessage = function (event) { importScripts('<path>/highlight.pack.js'); var result = self.hljs.highlightAuto(event.data); postMessage(result.value); }; ``` ## Getting the Library You can get highlight.js as a hosted, or custom-build, browser script or as a server module. Right out of the box the browser script supports both AMD and CommonJS, so if you wish you can use RequireJS or Browserify without having to build from source. The server module also works perfectly fine with Browserify, but there is the option to use a build specific to browsers rather than something meant for a server. Head over to the [download page][5] for all the options. **Don't link to GitHub directly.** The library is not supposed to work straight from the source, it requires building. If none of the pre-packaged options work for you refer to the [building documentation][6]. **The CDN-hosted package doesn't have all the languages.** Otherwise it'd be too big. If you don't see the language you need in the ["Common" section][5], it can be added manually: ```html <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.4.0/languages/go.min.js"></script> ``` **On Almond.** You need to use the optimizer to give the module a name. For example: ``` r.js -o name=hljs paths.hljs=/path/to/highlight out=highlight.js ``` ## License Highlight.js is released under the BSD License. See [LICENSE][7] file for details. ## Links The official site for the library is at <https://highlightjs.org/>. Further in-depth documentation for the API and other topics is at <http://highlightjs.readthedocs.io/>. Authors and contributors are listed in the [AUTHORS.en.txt][8] file. [1]: http://highlightjs.readthedocs.io/en/latest/api.html#inithighlightingonload [2]: http://highlightjs.readthedocs.io/en/latest/css-classes-reference.html [3]: http://highlightjs.readthedocs.io/en/latest/api.html#highlightblock-block [4]: http://highlightjs.readthedocs.io/en/latest/api.html#configure-options [5]: https://highlightjs.org/download/ [6]: http://highlightjs.readthedocs.io/en/latest/building-testing.html [7]: https://github.com/isagalaev/highlight.js/blob/master/LICENSE [8]: https://github.com/isagalaev/highlight.js/blob/master/AUTHORS.en.txt theme-highlight/assets/styles/monokai.css000064400000001720151666572130014623 0ustar00/* Monokai style - ported by Luigi Maselli - http://grigio.org */ .hljs { display: block; overflow-x: auto; /* padding: 0.5em; */ color: #ddd; /* background: #272822; */ } .hljs-tag, .hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-strong, .hljs-name { color: #f92672; } .hljs-code { color: #66d9ef; } .hljs-class .hljs-title { color: white; } .hljs-attribute, .hljs-symbol, .hljs-regexp, .hljs-link { color: #bf79db; } .hljs-string, .hljs-bullet, .hljs-subst, .hljs-title, .hljs-section, .hljs-emphasis, .hljs-type, .hljs-built_in, .hljs-builtin-name, .hljs-selector-attr, .hljs-selector-pseudo, .hljs-addition, .hljs-variable, .hljs-template-tag, .hljs-template-variable { color: #a6e22e; } .hljs-comment, .hljs-quote, .hljs-deletion, .hljs-meta { color: #75715e; } .hljs-keyword, .hljs-selector-tag, .hljs-literal, .hljs-doctag, .hljs-title, .hljs-section, .hljs-type, .hljs-selector-id { font-weight: bold; } theme-highlight/assets/styles/github.css000064400000002276151666572130014457 0ustar00/* github.com style (c) Vasily Polovnyov <vast@whiteants.net> */ .hljs { display: block; overflow-x: auto; /* padding: 0.5em; */ color: #333; /* background: #f8f8f8; */ } .hljs-comment, .hljs-quote { color: #998; font-style: italic; } .hljs-keyword, .hljs-selector-tag, .hljs-subst { color: #333; font-weight: bold; } .hljs-number, .hljs-literal, .hljs-variable, .hljs-template-variable, .hljs-tag .hljs-attr { color: #008080; } .hljs-string, .hljs-doctag { color: #d14; } .hljs-title, .hljs-section, .hljs-selector-id { color: #900; font-weight: bold; } .hljs-subst { font-weight: normal; } .hljs-type, .hljs-class .hljs-title { color: #458; font-weight: bold; } .hljs-tag, .hljs-name, .hljs-attribute { color: #000080; font-weight: normal; } .hljs-regexp, .hljs-link { color: #009926; } .hljs-symbol, .hljs-bullet { color: #990073; } .hljs-built_in, .hljs-builtin-name { color: #0086b3; } .hljs-meta { color: #999; font-weight: bold; } .hljs-deletion { background: #fdd; } .hljs-addition { background: #dfd; } .hljs-emphasis { font-style: italic; } .hljs-strong { font-weight: bold; } theme-highlight/src/Listener/LoadHighlightScript.php000064400000002702151666572130016611 0ustar00<?php namespace YOOtheme\Theme\Highlight\Listener; use Joomla\CMS\Document\Document; use Joomla\CMS\Document\HtmlDocument; use YOOtheme\Config; use YOOtheme\Metadata; use YOOtheme\Path; use function YOOtheme\app; class LoadHighlightScript { public Config $config; public Metadata $metadata; public function __construct(Config $config, Metadata $metadata) { $this->config = $config; $this->metadata = $metadata; } public function handle(string $content): string { $highlight = $this->config->get('~theme.highlight'); if ($highlight && str_contains($content, '</code>')) { $this->metadata->set('style:highlight', [ 'href' => Path::get("../../assets/styles/{$highlight}.css", __DIR__), 'defer' => true, ]); $this->metadata->set('script:highlight', [ 'src' => Path::get('../../assets/highlight.js', __DIR__), 'defer' => true, ]); $this->metadata->set( 'script:highlight-init', 'document.addEventListener("DOMContentLoaded", function() {hljs.initHighlightingOnLoad()});', ); } return $content; } public function beforeRender(): void { $document = app(Document::class); if ($document instanceof HtmlDocument) { $this->handle($document->getBuffer('component') ?? ''); } } } theme-highlight/bootstrap.php000064400000000543151666572130012357 0ustar00<?php namespace YOOtheme\Theme\Highlight; return [ 'filters' => [ 'builder_content' => [Listener\LoadHighlightScript::class => '@handle'], ], 'actions' => [ 'onBeforeRender' => [Listener\LoadHighlightScript::class => '@beforeRender'], ], 'services' => [ Listener\LoadHighlightScript::class => '', ], ]; image/bootstrap.php000064400000001123151666572130010365 0ustar00<?php namespace YOOtheme; use YOOtheme\Image\ExifLoader; return [ 'routes' => [ ['get', '/image', ImageController::class . '@get', ['allowed' => true, 'save' => true]], ], 'aliases' => [ ImageProvider::class => 'image', ], 'services' => [ ImageProvider::class => function (Config $config) { $provider = new ImageProvider($config('image.cacheDir'), [ 'route' => 'image', 'secret' => $config('app.secret'), ]); return $provider->addLoader(new ExifLoader()); }, ], ]; image/src/Image.php000064400000027634151666572130010200 0ustar00<?php namespace YOOtheme; use YOOtheme\Image\GDResource; /** * @method doCrop($width, $height, $x, $y) * @method doResize($width, $height, $dstWidth, $dstHeight, $background = 'transparent') * @method doRotate($angle, $background = 'transparent') * @method doCopy($width, $height, $dstX, $dstY, $srcX, $srcY, $dstWidth, $dstHeight, $srcWidth, $srcHeight, $background = 'transparent') */ class Image { /** * @var string */ public $file; /** * @var string|null */ public $path; /** * @var string */ public $type; /** * @var array */ public $info; /** * @var int */ public $width; /** * @var int */ public $height; /** * @var int */ public $quality = 80; /** * @var mixed */ protected $resource; /** * @var string */ protected $resourceClass = Image\BaseResource::class; /** * @var array */ protected $operations = []; /** * @var array */ protected $attributes = []; /** * Constructor. * * @param string $file * @param bool $resource */ public function __construct($file, $resource = true) { $this->file = strtr($file, '\\', '/'); $this->setAttribute('resource', $resource); Event::emit('image.create', $this); if ($file = $this->getFile()) { [$this->width, $this->height, $this->type, $this->info] = ImageProvider::getInfo($file); } if ($resource && extension_loaded('gd')) { $this->resource = GDResource::create($file, $this->type); $this->resourceClass = GDResource::class; } } /** * Gets the type. * * @return string */ public function getType() { return $this->type; } /** * Gets the height. * * @return int */ public function getWidth() { return $this->width; } /** * Gets the width. * * @return int */ public function getHeight() { return $this->height; } /** * Gets the hash. * * @return string|false */ public function getHash() { if (!$this->operations) { return false; } return hash('crc32b', $this . (($file = $this->getFile()) ? filemtime($file) : '')); } /** * Gets the file path. * * @return string|false */ public function getFile() { if (is_null($this->path)) { $this->path = is_file($file = Path::resolve('~', $this->file)) ? $file : false; } return $this->path; } /** * Gets the cache filename. * * @param string $path * * @return string */ public function getFilename($path = null) { $hash = $this->getHash(); $file = pathinfo($this->file); if ($path) { $path = rtrim($path, '\/') . '/'; } return $path . ($hash ? sprintf('%s-%s.%s', $file['filename'], $hash, $this->type) : $file['basename']); } /** * Gets an attribute value. * * @param string $name * @param mixed $default * * @return mixed */ public function getAttribute($name, $default = null) { return $this->attributes[$name] ?? $default; } /** * Sets an attribute value on the instance. * * @param string $name * @param mixed $value * * @return $this */ public function setAttribute($name, $value) { $this->attributes[$name] = $value; return $this; } /** * Checks the portrait orientation. * * @return bool */ public function isPortrait() { return $this->height > $this->width; } /** * Checks the landscape orientation. * * @return bool */ public function isLandscape() { return $this->width >= $this->height; } /** * Convert the image. * * @param string $type * @param int $quality * * @return static */ public function type($type, $quality = 80) { $image = clone $this; $image->type = $type; $image->quality = $quality; return $image; } /** * Crops the image. * * @param int|string $width * @param int|string $height * @param int|string $x * @param int|string $y * * @return static */ public function crop($width = null, $height = null, $x = 'center', $y = 'center') { $ratio = $this->width / $this->height; $width = $this->parseValue($width, $this->width); $height = $this->parseValue($height, $this->height); if ($ratio > $width / $height) { $image = $this->resize((int) round($height * $ratio), $height); } else { $image = $this->resize($width, (int) round($width / $ratio)); } if ($x === 'left') { $x = 0; } elseif ($x === 'right') { $x = $image->width - $width; } elseif ($x === 'center') { $x = ($image->width - $width) / 2; } if ($y === 'top') { $y = 0; } elseif ($y === 'bottom') { $y = $image->height - $height; } elseif ($y === 'center') { $y = ($image->height - $height) / 2; } $image->doCrop($image->width = $width, $image->height = $height, intval($x), intval($y)); return $image; } /** * Resizes the image. * * @param int|string $width * @param int|string $height * @param string $background * * @return static */ public function resize($width = null, $height = null, $background = 'crop') { if ($background == 'cover') { return $this->crop($width, $height); } $image = clone $this; $width = $this->parseValue($width, $this->width); $height = $this->parseValue($height, $this->height); if ($this->width != $width) { $scale = $this->width / $width; } if ($this->height != $height) { $scale = isset($scale) ? max($scale, $this->height / $height) : $this->height / $height; } if (empty($scale)) { $scale = 1.0; } $dstWidth = intval(round($this->width / $scale)); $dstHeight = intval(round($this->height / $scale)); if ($background == 'fill') { $image->doResize($image->width = $width, $image->height = $height, $width, $height); } elseif ($background === 'crop') { $image->doResize( $image->width = $dstWidth, $image->height = $dstHeight, $dstWidth, $dstHeight, ); } else { $image->doResize( $image->width = $width, $image->height = $height, $dstWidth, $dstHeight, $background, ); } return $image; } /** * Rotate the image. * * @param int $angle * @param string $background * * @return static */ public function rotate($angle, $background = 'transparent') { $image = clone $this; $image->doRotate($angle, $background); // update width/height for rotation if (in_array($angle, [90, 270], true)) { [$image->height, $image->width] = [$this->width, $this->height]; } return $image; } /** * Flip the image. * * @param bool $horizontal * @param bool $vertical * * @return static */ public function flip($horizontal, $vertical) { $srcX = $horizontal ? $this->width - 1 : 0; $srcY = $vertical ? $this->height - 1 : 0; $srcW = $horizontal ? -$this->width : $this->width; $srcH = $vertical ? -$this->height : $this->height; $image = clone $this; $image->doCopy( $this->width, $this->height, 0, 0, $srcX, $srcY, $this->width, $this->height, $srcW, $srcH, ); return $image; } /** * Thumbnail the image. * * @param int|string $width * @param int|string $height * @param bool $flip * @param string $x * @param string $y * @return static */ public function thumbnail( $width = null, $height = null, $flip = false, $x = 'center', $y = 'center' ) { if ($flip) { $width = strpos($width, '%') ? $this->parseValue($width, $this->width) : $width; $height = strpos($height, '%') ? $this->parseValue($height, $this->height) : $height; if ($this->isPortrait() && $width > $height) { [$width, $height] = [$height, $width]; } elseif ($this->isLandscape() && $height > $width) { [$width, $height] = [$height, $width]; } } return is_numeric($width) && is_numeric($height) ? $this->crop($width, $height, $x, $y) : $this->resize($width, $height); } /** * Apply multiple operations. * * @param array $operations * * @return static */ public function apply(array $operations) { $image = clone $this; foreach ($operations as $name => $args) { if (is_int($name)) { $name = $args[0]; $args = $args[1]; } if (is_string($args)) { $args = explode(',', trim($args)); } if (method_exists($image, $name)) { $image->operations[] = [$name, $args]; } $image = call_user_func_array([$image, $name], $args); } return $image; } /** * Saves the image. * * @param string $file * @param string $type * @param int $quality * @param array $info * * @return string|false */ public function save($file, $type = null, $quality = null, array $info = []) { if (!$type) { $type = $this->type; } if (!$quality) { $quality = $this->quality; } if (!$info) { $info = $this->info; } return call_user_func( "{$this->resourceClass}::save", $this->resource, $file, $type, $quality, $info, ) ? $file : false; } /** * Calls static resource methods. * * @param string $name * @param array $args * * @return $this */ public function __call($name, $args) { $method = [$this->resourceClass, $name]; // call image resource if (is_callable($method)) { if ($this->resource) { $this->resource = call_user_func_array( $method, array_merge([$this->resource], $args), ); } } return $this; } /** * Gets image as json string. * * @return string */ public function __toString() { $query = ['file' => $this->file]; foreach ($this->operations as [$name, $args]) { $query[$name] = join(',', $args); } return json_encode($query, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); } /** * Parses a percent value. * * @param mixed $value * @param int $baseValue * * @return int */ protected function parseValue($value, $baseValue) { if (str_ends_with(strval($value), '%')) { $value = round($baseValue * (intval($value) / 100.0)); } return intval($value) ?: $baseValue; } } image/src/ImageProvider.php000064400000023576151666572130011714 0ustar00<?php namespace YOOtheme; class ImageProvider { public const IMAGE = '/<(?:div|img)\s+[^>]*?((\w+-)?src=((["\'])[^\'"]+?\.(?:gif|png|jpe?g|webp|avif)#[^\'"]+?\4))[^>]*>/i'; public const VERSION = '2'; /** * @var string */ public $cache; /** * @var string */ public $route; /** * @var string */ protected $secret; /** * @var array */ protected $params = []; /** * @var array */ protected $loaders = []; /** * Constructor. * * @param string $cache * @param array $config */ public function __construct($cache, array $config = []) { $this->cache = Path::resolve($cache); $this->route = $config['route'] ?? '@image'; $this->secret = $config['secret'] ?? filemtime(__FILE__); $this->params = $config['params'] ?? []; } /** * Adds a loader callback. * * @param callable $loader * * @return static */ public function addLoader(callable $loader) { $this->loaders[] = $loader; return $this; } /** * Creates an Image object from src attribute's relative URL. * * @param string $src * @param bool $resource * * @return Image|void */ public function create($src, $resource = true) { [$file, $params] = $this->parse($src); if (Path::isAbsolute($file) || str_ends_with(strtolower($file), '.svg')) { return; } $image = new Image($file, $resource); $image->setAttribute('src', $src); if ($image->getType()) { $image = $image->setAttribute('params', $params); foreach ($this->loaders as $loader) { $image = $loader($image, $this) ?: $image; } return $image; } } /** * Parse image url. * * @param string $url * * @return array */ public function parse($url) { $url = urldecode($url); $file = parse_url($url, PHP_URL_PATH); $data = parse_url($url, PHP_URL_FRAGMENT) ?: ''; // replace params if ($this->params) { $data = strtr($data, $this->params); } // parse params parse_str($data, $params); return [$file, $params]; } /** * Replace images in HTML. * * @param string $text * * @return string */ public function replace($text) { if (stripos($text, '<div') !== false || stripos($text, '<img') !== false) { return preg_replace_callback(static::IMAGE, [$this, 'replaceCallback'], $text); } return $text; } /** * Replace image callback. * * @param array $matches * * @return string */ public function replaceCallback($matches) { [$element, $src, $prefix, $source] = $matches; $url = html_entity_decode(trim($source, "\"'")); if ($image = $this->create($url, false)) { // load sources $sources = $this->getSources($image); // apply params $attrs = $this->getSrcsetAttrs($image, $prefix); $image = $image->apply($image->getAttribute('params')); // skip srcset and sizes attributes if additional sources are found if ($sources) { $attrs = array_slice($attrs, 0, 1); } // add sources to attrs for none image tags if ($isImage = str_starts_with($element, '<img')) { $sources = static::getSourceElements($sources, $prefix); // set width if (!str_contains($element, 'width=')) { $attrs['width'] = $image->width; } // set height if (!str_contains($element, 'height=')) { $attrs['height'] = $image->height; } } else { $attrs["{$prefix}sources"] = json_encode($sources); } // add image $image = str_replace($src, static::getAttrs($attrs), $element); // use picture? if ($sources && $isImage) { return join("\n", array_merge(['<picture>'], $sources, [$image, '</picture>'])); } return $image; } return $element; } /** * Gets the image hash. * * @param string $data * * @return string */ public function getHash($data) { return hash('fnv132', hash_hmac('sha1', static::VERSION . '-' . $data, $this->secret)); } /** * Gets the image URL. * * @param string|Image $image * * @return string|null */ public function getUrl($image) { $cached = null; if (is_string($image)) { if (!($image = $this->create($src = $image, false))) { return Url::to($src); } $image = $image->apply($image->getAttribute('params')); } if ($hash = $image->getHash()) { $cached = $image->getFilename(Path::join($this->cache, substr($hash, 0, 2))); } // url to source if (is_null($cached)) { return Url::to($image->getFile()); } // url to cached image if (is_file($cached)) { return Url::to($cached); } return Url::route($this->route, [ 'src' => ($src = strval($image)), 'hash' => $this->getHash($src), ]); } /** * Gets the image sources (webp, ...). * * @param Image $image * @param int $minWidth * * @return string[][] */ public function getSources(Image $image, $minWidth = 0) { $sources = []; foreach ($image->getAttribute('types', []) as $mime => $type) { $image = $image->apply(['type' => $type]); $attrs = array_slice($this->getSrcsetAttrs($image, '', $minWidth), 1); $sources[] = ['type' => $mime] + $attrs; } return $sources; } /** * Gets the image source set. * * @param Image $image * * @return array */ public function getSrcset(Image $image) { $params = $image->getAttribute('params'); if (!isset($params['srcset'])) { return []; } $imageDst = $image->apply($params); $maxWidth = min(max($image->width, $imageDst->width), $imageDst->width * 2); $maxHeight = min(max($image->height, $imageDst->height), $imageDst->height * 2); if (!$maxWidth || !$maxHeight) { return []; } foreach (explode(',', $params['srcset']) as $value) { $resized = $imageDst->resize($value); // if oversized, use original image sizes if (1 < ($scale = max($resized->width / $maxWidth, $resized->height / $maxHeight))) { $sizes = [round($resized->width / $scale), round($resized->height / $scale)]; } else { $sizes = [$resized->width, $resized->height]; } // set image parameters $parameters = array_map( fn($val) => join(',', $sizes + explode(',', $val)), static::filterParams($params), ); $resized = $image->apply($parameters); $images[$resized->width] = $resized; } $images[$imageDst->width] = $imageDst; ksort($images); return $images; } public function getSrcsetAttrs(Image $image, $prefix = '', $minWidth = 0) { $images = $this->getSrcset($image); $params = $image->getAttribute('params'); $image = $image->apply($params); $attrs = ["{$prefix}src" => $this->getUrl($image)]; foreach ($images as $img) { if ($minWidth && $img->width < $minWidth) { continue; } $srcset[] = "{$this->getUrl($img)} {$img->width}w"; } if (isset($srcset)) { // merge default sizes $params = array_merge( [ 'sizes' => "(min-width: {$image->width}px) {$image->width}px", ], $params, ); // set image srcset/sizes $attrs["{$prefix}srcset"] = join(', ', $srcset); $attrs["{$prefix}sizes"] = $params['sizes']; } return $attrs; } /** * Gets the image info. * * @param string $file * * @return array|void */ public static function getInfo($file) { static $cache = []; if (isset($cache[$file])) { return $cache[$file]; } if ($data = @getimagesize($file, $info)) { return $cache[$file] = [$data[0], $data[1], substr($data['mime'], 6), $info]; } } /** * Gets the image attributes. * * @param array $attributes * * @return string */ public static function getAttrs(array $attributes) { $attrs = []; foreach ($attributes as $key => $value) { $attrs[] = sprintf('%1$s="%2$s"', $key, htmlspecialchars($value)); } return join(' ', $attrs); } /** * @param array $sources * @param string $prefix * * @return array */ protected static function getSourceElements($sources, $prefix) { $elements = []; foreach ($sources as $source) { if ($prefix) { $source["{$prefix}srcset"] = $source['srcset']; unset($source['srcset']); } $elements[] = '<source ' . static::getAttrs($source) . '>'; } return $elements; } /** * Filter image parameters. */ protected static function filterParams($params) { return array_intersect_key($params, array_flip(['crop', 'resize', 'thumbnail'])); } } image/src/ImageController.php000064400000007041151666572130012232 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\CallbackStream; use YOOtheme\Http\Exception; use YOOtheme\Http\Request; use YOOtheme\Http\Response; class ImageController { protected ?string $cache; protected ImageProvider $provider; /** * Constructor. */ public function __construct(ImageProvider $provider) { $this->cache = $provider->cache; $this->provider = $provider; } /** * Gets the image file. * * @param Request $request * @param Response $response * * @throws \Exception * * @return Response */ public function get(Request $request, Response $response) { $src = $request->getQueryParam('src', ''); $hash = $request->getQueryParam('hash'); if (!$request->getAttribute('save')) { $this->cache = null; } if ($hash !== $this->provider->getHash($src)) { throw new Exception(400, 'Invalid image hash'); } $params = json_decode($src, true); $file = $params['file'] ?? ''; unset($params['file']); $response = $this->loadImage($this->getImage($file, $params, false), $response) ?? $this->createImage($this->getImage($file, $params), $response); return $response->withHeader('Cache-Control', 'max-age=600, must-revalidate'); } protected function getImage(string $file, array $params, bool $resource = true): Image { $image = $this->provider->create($file, $resource); if (!$image) { throw new Exception(404, "Image '{$file}' not found"); } if ($resource) { Memory::raise(); } return $image->apply($params); } protected function loadImage(Image $image, Response $response): ?Response { $cache = $this->cache ? Path::join($this->cache, substr($image->getHash(), 0, 2), $image->getFilename()) : null; $callback = function () use ($cache): string { readfile($cache); return ''; }; return $cache && is_file($cache) ? $response ->withBody(new CallbackStream($callback)) ->withHeader('Content-Type', "image/{$image->getType()}") ->withHeader('Content-Length', filesize($cache)) : null; } protected function createImage(Image $image, Response $response): Response { $temp = fopen('php://temp', 'rw+'); if (!$temp) { throw new Exception(500, 'Unable to create temporary file'); } if (!$image->save($temp)) { throw new Exception(500, 'Image saving failed'); } $cache = $this->cache ? Path::join($this->cache, substr($image->getHash(), 0, 2), $image->getFilename()) : null; $callback = function () use ($temp, $cache): string { // output image first if (rewind($temp)) { stream_copy_to_stream($temp, fopen('php://output', 'w')); flush(); } // write image to cache if ($cache && !is_file($cache) && rewind($temp) && File::makeDir(dirname($cache))) { file_put_contents($cache, $temp, LOCK_EX); } fclose($temp); return ''; }; return $response ->withBody(new CallbackStream($callback)) ->withHeader('Content-Type', "image/{$image->getType()}") ->withHeader('Content-Length', ftell($temp)); } } image/src/Image/ExifLoader.php000064400000002315151666572130012207 0ustar00<?php namespace YOOtheme\Image; use YOOtheme\Image; class ExifLoader { public function __invoke(Image $image) { if ($image->getType() !== 'jpeg' || !is_callable('exif_read_data')) { return $image; } // read exif data $exif = @exif_read_data($image->getFile()); // set exif attribute $image->setAttribute('exif', $exif ?: []); // check orientation and rotate it if needed switch ($exif['Orientation'] ?? 0) { case 2: $image = $image->flip(true, false); break; case 3: $image = $image->flip(true, true); // rotate 180 break; case 4: $image = $image->flip(false, true); break; case 5: $image = $image->rotate(90)->flip(false, true); break; case 6: $image = $image->rotate(270); break; case 7: $image = $image->rotate(90)->flip(true, false); break; case 8: $image = $image->rotate(90); break; } return $image; } } image/src/Image/BaseResource.php000064400000011135151666572130012547 0ustar00<?php namespace YOOtheme\Image; class BaseResource { /** * @var array */ public static $colors = [ 'aqua' => 0x00ffff, 'black' => 0x000000, 'blue' => 0x0000ff, 'fuchsia' => 0xff00ff, 'gray' => 0x808080, 'green' => 0x008000, 'lime' => 0x00ff00, 'maroon' => 0x800000, 'navy' => 0x000080, 'olive' => 0x808000, 'orange' => 0xffa500, 'purple' => 0x800080, 'red' => 0xff0000, 'silver' => 0xc0c0c0, 'teal' => 0x008080, 'white' => 0xffffff, 'yellow' => 0xffff00, 'transparent' => 0x7fffffff, ]; /** * Creates an image. * * @param string $file * @param string $type * * @return mixed|false */ public static function create($file, $type) { return false; } /** * Save image to file. * * @param mixed $image * @param string $file * @param string $type * @param int $quality * @param array $info * * @return string|false */ public static function save($image, $file, $type, $quality, $info = []) { return false; } /** * Do the image crop. * * @param mixed $image * @param int $width * @param int $height * @param int $x * @param int $y * * @return mixed */ public static function doCrop($image, $width, $height, $x, $y) { return $image; } /** * Do the image copy. * * @param mixed $image * @param int $width * @param int $height * @param int $dstX * @param int $dstY * @param int $srcX * @param int $srcY * @param int $dstWidth * @param int $dstHeight * @param int $srcWidth * @param int $srcHeight * @param string $background * * @return mixed */ public static function doCopy( $image, $width, $height, $dstX, $dstY, $srcX, $srcY, $dstWidth, $dstHeight, $srcWidth, $srcHeight, $background = 'transparent' ) { return $image; } /** * Do the image resize. * * @param mixed $image * @param int $width * @param int $height * @param int $dstWidth * @param int $dstHeight * @param string $background * * @return mixed */ public static function doResize( $image, $width, $height, $dstWidth, $dstHeight, $background = 'transparent' ) { return $image; } /** * Do the image rotate. * * @param mixed $image * @param int $angle * @param string $background * * @return mixed */ public static function doRotate($image, $angle, $background = 'transparent') { return $image; } /** * Parses a color to decimal value. * * @param mixed $color * * @return int */ public static function parseColor($color) { if (!is_string($color) && is_numeric($color)) { return $color; } $color = strtolower(trim($color)); if (isset(static::$colors[$color])) { return static::$colors[$color]; } if (preg_match('/^(#|0x|)([0-9a-f]{3,6})/i', $color, $matches)) { $col = $matches[2]; if (strlen($col) == 6) { return hexdec($col); } if (strlen($col) == 3) { $r = ''; for ($i = 0; $i < 3; ++$i) { $r .= $col[$i] . $col[$i]; } return hexdec($r); } } if (preg_match('/^rgb\(([0-9]+),([0-9]+),([0-9]+)\)/i', $color, $matches)) { [$r, $g, $b] = array_map('intval', array_slice($matches, 1)); if ($r >= 0 && $r <= 0xff && $g >= 0 && $g <= 0xff && $b >= 0 && $b <= 0xff) { return ($r << 16) | ($g << 8) | $b; } } throw new \InvalidArgumentException("Invalid color: {$color}"); } /** * Parses a color to rgba string. * * @param mixed $color * * @return string */ public static function parseColorRgba($color) { $value = static::parseColor($color); $a = ($value >> 24) & 0xff; $r = ($value >> 16) & 0xff; $g = ($value >> 8) & 0xff; $b = $value & 0xff; $a = round((127 - $a) / 127, 2); return sprintf('rgba(%d, %d, %d, %.2F)', $r, $g, $b, $a); } } image/src/Image/GDResource.php000064400000013535151666572130012175 0ustar00<?php namespace YOOtheme\Image; class GDResource extends BaseResource { /** * @inheritdoc */ public static function create($file, $type) { switch ($type) { case 'png': $image = imagecreatefrompng($file); break; case 'gif': $image = imagecreatefromgif($file); break; case 'jpeg': $image = imagecreatefromjpeg($file); break; case 'webp': $image = imagecreatefromwebp($file); break; case 'avif': $image = imagecreatefromavif($file); break; default: $image = false; } return $image ? static::normalizeImage($image) : false; } /** * @inheritdoc */ public static function save($image, $file, $type, $quality, $info = []) { if ($type == 'jpeg') { if (!imagejpeg($image, $file, (int) round($quality))) { return false; } if ( is_string($file) && !empty($info['APP13']) && ($iptc = iptcparse($info['APP13'])) && ($data = static::embedIptc($iptc, $file)) && !file_put_contents($file, $data) ) { return false; } return $file; } if ($type == 'png') { imagealphablending($image, false); imagesavealpha($image, true); return imagepng($image, $file, 9) ? $file : false; } if ($type == 'gif') { return imagegif($image, $file) ? $file : false; } if ($type == 'webp') { return imagewebp($image, $file, intval($quality)) ? $file : false; } if ($type == 'avif') { return imageavif($image, $file, intval($quality)) ? $file : false; } return false; } /** * @inheritdoc */ public static function doCrop($image, $width, $height, $x, $y) { $cropped = static::createImage($width, $height); imagecopy($cropped, $image, 0, 0, intval($x), intval($y), imagesx($image), imagesy($image)); imagedestroy($image); return $cropped; } /** * @inheritdoc */ public static function doCopy( $image, $width, $height, $dstX, $dstY, $srcX, $srcY, $dstWidth, $dstHeight, $srcWidth, $srcHeight, $background = 'transparent' ) { $resampled = static::createImage($width, $height, $background); imagecopyresampled( $resampled, $image, $dstX, $dstY, $srcX, $srcY, $dstWidth, $dstHeight, $srcWidth, $srcHeight, ); imagedestroy($image); return $resampled; } /** * @inheritdoc */ public static function doResize( $image, $width, $height, $dstWidth, $dstHeight, $background = 'transparent' ) { return static::doCopy( $image, $width, $height, ($width - $dstWidth) / 2, ($height - $dstHeight) / 2, 0, 0, $dstWidth, $dstHeight, imagesx($image), imagesy($image), $background, ); } /** * @inheritdoc */ public static function doRotate($image, $angle, $background = 'transparent') { $rotated = imagerotate($image, $angle, static::parseColor($background)); imagedestroy($image); return $rotated; } /** * Creates an image resource. * * @param int $width * @param int $height * @param mixed $color * * @return false|resource */ protected static function createImage($width, $height, $color = 'transparent') { $rgba = static::parseColor($color); $image = imagecreatetruecolor($width, $height); imagefill($image, 0, 0, $rgba); if ($color == 'transparent') { imagecolortransparent($image, $rgba); } return $image; } /** * Normalizes an image to be true color and transparent color. * * @param resource $image * * @return false|resource */ protected static function normalizeImage($image) { if (imageistruecolor($image) && imagecolortransparent($image) == -1) { return $image; } $width = imagesx($image); $height = imagesy($image); $canvas = static::createImage($width, $height); imagecopy($canvas, $image, 0, 0, 0, 0, $width, $height); imagedestroy($image); return $canvas; } /** * Embeds an image IPTC data. * * @param array $iptc * @param string $file * * @return string */ protected static function embedIptc(array $iptc, $file) { $iptcdata = ''; foreach ($iptc as $tag => $value) { $tag = explode('#', $tag, 2); $value = join(' ', (array) $value); $length = strlen($value); $iptcdata .= chr(0x1c) . chr((int) $tag[0]) . chr((int) $tag[1]); if ($length < 0x8000) { $iptcdata .= chr($length >> 8) . chr($length & 0xff); } else { $iptcdata .= chr(0x80) . chr(0x04) . chr(($length >> 24) & 0xff) . chr(($length >> 16) & 0xff) . chr(($length >> 8) & 0xff) . chr($length & 0xff); } $iptcdata .= $value; } return iptcembed($iptcdata, $file); } } theme-cookie/src/Listener/LoadThemeHead.php000064400000002531151666572130014643 0ustar00<?php namespace YOOtheme\Theme\Cookie\Listener; use YOOtheme\Config; use YOOtheme\Metadata; use YOOtheme\Path; use YOOtheme\View; class LoadThemeHead { public View $view; public Config $config; public Metadata $metadata; public function __construct(Config $config, Metadata $metadata, View $view) { $this->view = $view; $this->config = $config; $this->metadata = $metadata; } public function handle() { if (!($mode = $this->config->get('~theme.cookie.mode'))) { return; } $this->config->set('theme.data.cookie', [ 'mode' => $mode, 'template' => trim($this->view->render('~theme/templates/cookie')), 'position' => $this->config->get('~theme.cookie.bar_position'), ]); if (!$this->config->get('app.isCustomizer')) { if ($custom = $this->config->get('~theme.cookie.custom_js')) { $this->metadata->set( 'script:cookie-custom', "(window.\$load ||= []).push(function(c,n) {try {{$custom}\n} catch (e) {console.error(e)} n()});\n", ); } $this->metadata->set('script:cookie', [ 'src' => Path::get('../../app/cookie.min.js', __DIR__), 'defer' => true, ]); } } } theme-cookie/app/cookie.min.js000064400000003354151666572130012307 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ (function(s){"use strict";typeof SuppressedError=="function"&&SuppressedError;function i(n,o){return Object.prototype.hasOwnProperty.call(n,o)}function f(n){return n.replace(/[.*+?^$|[\](){}\\-]/g,"\\$&")}function l(n){var o=n.charAt(n.length-1),t=parseInt(n,10),e=new Date;switch(o){case"Y":e.setFullYear(e.getFullYear()+t);break;case"M":e.setMonth(e.getMonth()+t);break;case"D":e.setDate(e.getDate()+t);break;case"h":e.setHours(e.getHours()+t);break;case"m":e.setMinutes(e.getMinutes()+t);break;case"s":e.setSeconds(e.getSeconds()+t);break;default:e=new Date(n)}return e}function p(n){for(var o="",t=0,e=Object.keys(n);t<e.length;t++){var r=e[t];if(/^expires$/i.test(r)){var a=n[r],c=void 0;typeof a=="object"?c=a:(a+=typeof a=="number"?"D":"",c=l(String(a))),o+=";".concat(r,"=").concat(c.toUTCString())}else/^secure|partitioned$/.test(r)?n[r]&&(o+=";".concat(r)):o+=";".concat(r,"=").concat(n[r])}return i(n,"path")||(o+=";path=/"),o}function v(n,o){o===void 0&&(o=decodeURIComponent);var t=new RegExp("(?:^|; )".concat(f(n),"(?:=([^;]*))?(?:;|$)")),e=t.exec(document.cookie);return e===null?null:typeof o=="function"?o(e[1]):e[1]}function g(n,o,t,e){t===void 0&&(t=encodeURIComponent),typeof t=="object"&&t!==null&&(e=t,t=encodeURIComponent);var r=p(e||{}),a=typeof t=="function"?t(o):o,c="".concat(n,"=").concat(a).concat(r);document.cookie=c}(window.$load||(window.$load=[])).unshift(({cookie:{mode:n,template:o,position:t}={}},e)=>{const r="_cookieAllowed",a=v(r);(a==="true"||n==="notification")&&e(),a===null&&s.once((t==="top"?s.prepend:s.append)(document.body,o),"click","[data-uk-toggle]",({target:c})=>{const u=!s.hasClass(c,"js-reject");g(r,u,{expires:"1M"}),u&&n!=="notification"&&e()})})})(UIkit.util); theme-cookie/config/customizer.json000064400000012466151666572130013506 0ustar00{ "panels": { "cookie": { "title": "Cookie Banner", "width": 500, "fields": { "cookie.mode": { "label": "Cookie Banner", "description": "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.", "type": "select", "options": { "Disabled": "", "As notification only ": "notification", "With mandatory consent": "consent" } }, "cookie.type": { "label": "Type", "description": "Choose between an attached bar or a notification.", "type": "select", "options": { "Bar": "bar", "Notification": "notification" }, "enable": "cookie.mode" }, "cookie.bar_position": { "label": "Position", "description": "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.", "type": "select", "options": { "Top": "top", "Bottom": "bottom" }, "show": "cookie.type == 'bar'", "enable": "cookie.mode" }, "cookie.bar_style": { "label": "Style", "type": "select", "options": { "Default": "default", "Muted": "muted", "Primary": "primary", "Secondary": "secondary" }, "show": "cookie.type == 'bar'", "enable": "cookie.mode" }, "cookie.notification_position": { "label": "Position", "type": "select", "options": { "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "show": "cookie.type == 'notification'", "enable": "cookie.mode" }, "cookie.notification_style": { "label": "Style", "type": "select", "options": { "Default": "", "Primary": "primary", "Warning": "warning", "Danger": "danger" }, "show": "cookie.type == 'notification'", "enable": "cookie.mode" }, "cookie.message": { "label": "Content", "description": "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.", "type": "editor", "editor": "visual", "enable": "cookie.mode" }, "cookie.button_consent_style": { "label": "Consent Button Style", "type": "select", "options": { "Close Icon": "icon", "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Text": "text" }, "enable": "cookie.mode" }, "cookie.button_consent_text": { "label": "Consent Button Text", "description": "Enter the text for the button.", "enable": "cookie.mode && cookie.button_consent_style != 'icon'" }, "cookie.button_reject_style": { "label": "Reject Button Style", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Text": "text" }, "enable": "cookie.mode == 'consent'" }, "cookie.button_reject_text": { "label": "Reject Button Text", "description": "Enter the text for the button.", "enable": "cookie.mode == 'consent'" }, "cookie.custom_js": { "label": "Cookie Scripts", "description": "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.", "type": "editor", "editor": "code", "mode": "javascript", "enable": "cookie.mode == 'consent'" } } } } } theme-cookie/config/theme.json000064400000000772151666572130012401 0ustar00{ "defaults": { "cookie": { "type": "bar", "bar_position": "bottom", "bar_style": "muted", "notification_position": "bottom-center", "message": "By using this website, you agree to the use of cookies as described in our Privacy Policy.", "button_consent_style": "icon", "button_consent_text": "Ok", "button_reject_style": "default", "button_reject_text": "No, Thanks" } } } theme-cookie/bootstrap.php000064400000000420151666572130011653 0ustar00<?php namespace YOOtheme\Theme\Cookie; use YOOtheme\Config; return [ 'theme' => function (Config $config) { return $config->loadFile(__DIR__ . '/config/theme.json'); }, 'events' => ['theme.head' => [Listener\LoadThemeHead::class => '@handle']], ]; builder-joomla-regularlabs/bootstrap.php000064400000000306151666572130014513 0ustar00<?php namespace YOOtheme\Builder\Joomla\RegularLabs\Listener; return [ 'events' => [ 'source.com_fields.field' => [ ArticlesField::class => '@config', ], ], ]; builder-joomla-regularlabs/src/Listener/ArticlesField.php000064400000004405151666572130017570 0ustar00<?php namespace YOOtheme\Builder\Joomla\RegularLabs\Listener; use Joomla\CMS\Plugin\PluginHelper; use YOOtheme\Builder\Joomla\Fields\Type\FieldsType; use YOOtheme\Builder\Joomla\Source\ArticleHelper; use YOOtheme\Builder\Source; class ArticlesField { /** * @param array $config * @param object $field * @param Source $source * @param string $context */ public function config($config, $field, $source, $context) { if (!PluginHelper::isEnabled('fields', 'articles')) { return $config; } if ($field->type !== 'articles') { return $config; } return [ [ 'type' => $field->fieldparams->get('multiple') ? ['listOf' => 'Article'] : 'Article', 'extensions' => [ 'call' => [ 'func' => __CLASS__ . '::resolve', 'args' => [ 'context' => $context, 'field' => $field->name, 'id' => $field->id, ], ], ], ] + $config, ]; } public static function resolve($item, $args) { $field = isset($item->id) ? FieldsType::getField($args['field'], $item, $args['context']) : FieldsType::getSubfield($args['id'] ?? 0, $args['context']); if (!$field) { return; } $fieldValue = $field->rawvalue ?? ($item["field{$args['id']}"] ?? null); if (!$fieldValue) { return; } $ordering = $field->fieldparams->get('articles_ordering', 'title'); $direction = $field->fieldparams->get('articles_ordering_direction', 'ASC'); $ordering2 = $field->fieldparams->get('articles_ordering_2', 'created'); $direction2 = $field->fieldparams->get('articles_ordering_direction_2', 'DESC'); $value = ArticleHelper::get($fieldValue, [ 'order' => "{$ordering} {$direction}, a.{$ordering2}", 'order_direction' => $direction2, ]); if ($field->fieldparams['multiple']) { return $value; } return array_shift($value); } } builder-joomla-fields/bootstrap.php000064400000000522151666572130013456 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields; use YOOtheme\Builder\BuilderConfig; return [ 'events' => [ 'source.init' => [ Listener\LoadSourceTypes::class => ['handle', -10], ], BuilderConfig::class => [ Listener\LoadBuilderConfig::class => ['handle', -10], ], ], ]; builder-joomla-fields/src/Type/SqlFieldType.php000064400000001221151666572130015513 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields\Type; use function YOOtheme\trans; class SqlFieldType { /** * @return array */ public static function config() { return [ 'fields' => [ 'text' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Text'), ], ], 'value' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Value'), ], ], ], ]; } } builder-joomla-fields/src/Type/MediaFieldType.php000064400000001552151666572130016002 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields\Type; use function YOOtheme\trans; class MediaFieldType { /** * @return array */ public static function config() { return [ 'fields' => [ 'imagefile' => [ 'type' => 'String', 'metadata' => [ 'label' => '', ], ], ] + (version_compare(JVERSION, '4.0', '>') ? [ 'alt_text' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Alt'), ], ], ] : []), ]; } } builder-joomla-fields/src/Type/ChoiceFieldStringType.php000064400000003541151666572130017344 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields\Type; use Joomla\CMS\Language\Text; use function YOOtheme\trans; class ChoiceFieldStringType { /** * @return array */ public static function config() { $field = [ 'type' => 'String', 'args' => [ 'separator' => [ 'type' => 'String', ], ], 'metadata' => [ 'arguments' => [ 'separator' => [ 'label' => trans('Separator'), 'description' => trans('Set the separator between fields.'), 'default' => ', ', ], ], ], ]; return [ 'fields' => [ 'name' => array_merge_recursive($field, [ 'metadata' => [ 'label' => trans('Names'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveNames', ], ]), 'value' => array_merge_recursive($field, [ 'metadata' => [ 'label' => trans('Values'), ], 'extensions' => [ 'call' => __CLASS__ . '::resolveValues', ], ]), ], ]; } public static function resolveNames($item, $args) { $args += ['separator' => ', ']; $result = array_map(fn($item) => Text::_($item), array_column($item, 'name')); return join($args['separator'], $result); } public static function resolveValues($item, $args) { $args += ['separator' => ', ']; return join($args['separator'], array_column($item, 'value')); } } builder-joomla-fields/src/Type/ValueFieldType.php000064400000000716151666572130016040 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields\Type; use function YOOtheme\trans; class ValueFieldType { /** * @return array */ public static function config() { return [ 'fields' => [ 'value' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Value'), ], ], ], ]; } } builder-joomla-fields/src/Type/FieldsType.php000064400000035706151666572130015235 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields\Type; use Joomla\CMS\Factory; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\PluginHelper; use Joomla\Component\Users\Administrator\Helper\UsersHelper; use Joomla\Database\DatabaseDriver; use YOOtheme\Arr; use YOOtheme\Builder\Joomla\Fields\FieldsHelper; use YOOtheme\Builder\Source; use YOOtheme\Config; use YOOtheme\Event; use YOOtheme\Path; use YOOtheme\Str; use function YOOtheme\app; use function YOOtheme\trans; class FieldsType { /** * @var string */ protected $context; /** * Constructor. * * @param string $context */ public function __construct($context) { $this->context = $context; } /** * @param Source $source * @param string $type * @param string $context * @param array $fields * * @return array */ public static function config(Source $source, $type, $context, array $fields) { return [ 'fields' => array_filter( array_reduce( $fields, fn($fields, $field) => $fields + static::configFields( $field, [ 'type' => 'String', 'name' => strtr($field->name, '-', '_'), 'metadata' => [ 'label' => $field->title, 'group' => $field->group_title ?: trans('Fields'), ], 'extensions' => [ 'call' => "{$type}.fields@resolve", ], ], $source, $context, $type, ), [], ), ), 'extensions' => [ 'bind' => [ "{$type}.fields" => [ 'class' => __CLASS__, 'args' => ['$context' => $context], ], ], ], ]; } protected static function configFields($field, array $config, Source $source, $context, $type) { $config = is_callable($callback = [__CLASS__, "config{$field->type}"]) ? $callback($field, $config, $source, $context, $type) : static::configGenericField($field, $config); $config = Event::emit('source.com_fields.field|filter', $config, $field, $source, $context) ?: []; return array_is_list($config) ? array_combine(array_column($config, 'name'), $config) : [$config['name'] => $config]; } protected static function configGenericField($field, array $config) { if ($field->fieldparams->get('multiple')) { return ['type' => ['listOf' => 'ValueField']] + $config; } return $config; } protected static function configText($field, array $config) { return array_replace_recursive($config, [ 'metadata' => ['filters' => ['limit', 'preserve']], ]); } protected static function configTextarea($field, array $config) { return array_replace_recursive($config, [ 'metadata' => ['filters' => ['limit', 'preserve']], ]); } protected static function configEditor($field, array $config) { return array_replace_recursive($config, [ 'metadata' => ['filters' => ['limit', 'preserve']], ]); } protected static function configCalendar($field, array $config) { return array_replace_recursive($config, ['metadata' => ['filters' => ['date']]]); } protected static function configUser($field, array $config) { return ['type' => 'User'] + $config; } /** * Remove when Joomla 3 support is dropped. */ protected static function configRepeatable($field, array $config, Source $source) { $fields = []; foreach ((array) $field->fieldparams->get('fields') as $params) { $fields[$params->fieldname] = [ 'type' => $params->fieldtype === 'media' ? 'MediaField' : 'String', 'name' => Str::snakeCase($params->fieldname), 'metadata' => [ 'label' => $params->fieldname, 'filters' => !in_array($params->fieldtype, ['media', 'number']) ? ['limit', 'preserve'] : [], ], ]; } if ($fields) { $name = Str::camelCase(['Field', $field->name], true); $source->objectType($name, compact('fields')); return [ 'type' => ['listOf' => $name], 'metadata' => array_merge($config['metadata'], ['label' => $field->title]), ] + $config; } } protected static function configSubform($field, array $config, Source $source, $context, $type) { $fields = []; foreach ((array) $field->fieldparams->get('options', []) as $option) { $subField = static::getSubfield($option->customfield, $context); if (!$subField) { continue; } // Joomla update from 3 to 4 changed Repeatable fields to Subform fields, // created subform only fields for the subfields and // prefixed them with the field name and an underscore $prefix = "{$field->name}_"; $name = str_starts_with($subField->name, $prefix) ? substr($subField->name, strlen($prefix)) : $subField->name; $fields += static::configFields( $subField, [ 'type' => 'String', 'name' => Str::snakeCase($name), 'metadata' => [ 'label' => $subField->title, ], 'extensions' => [ 'call' => [ 'func' => "{$type}.fields@resolveSubfield", 'args' => ['context' => $context, 'id' => $option->customfield], ], ], ], $source, $context, $type, ); } if ($fields = array_filter($fields)) { $name = Str::camelCase(['Field', $field->name], true); $source->objectType($name, compact('fields')); return ($field->fieldparams->get('repeat') ? ['type' => ['listOf' => $name]] : [ 'type' => $name, 'metadata' => array_merge($config['metadata'], ['label' => $field->title]), ]) + $config; } } protected static function configMedia($field, array $config) { return ['type' => 'MediaField'] + $config; } protected static function configSql($field, array $config) { return [ 'type' => $field->fieldparams->get('multiple') ? ['listOf' => 'SqlField'] : 'SqlField', ] + $config; } protected static function configList($field, array $config) { if ($field->fieldparams->get('multiple')) { return [ [ 'type' => ['listOf' => 'ChoiceField'], ] + $config, [ 'name' => "{$config['name']}String", 'type' => 'ChoiceFieldString', ] + $config, ]; } return ['type' => 'ChoiceField'] + $config; } protected static function configRadio($field, array $config) { return ['type' => 'ChoiceField'] + $config; } protected static function configCheckboxes($field, array $config) { return [ [ 'type' => ['listOf' => 'ChoiceField'], ] + $config, [ 'name' => "{$config['name']}String", 'type' => 'ChoiceFieldString', ] + $config, ]; } public static function field($item, $args, $ctx, $info) { return $item; } public function resolve($item, $args, $ctx, $info) { $name = str_replace('String', '', strtr($info->fieldName, '_', '-')); if (!isset($item->id) || !($field = static::getField($name, $item, $this->context))) { return; } return $this->resolveField($field, $field->rawvalue); } public function resolveField($field, $value) { if (is_callable($callback = [$this, "resolve{$field->type}"])) { return $callback($field); } return $this->resolveGenericField($field, $value); } public function resolveGenericField($field, $value) { if ($field->fieldparams->exists('multiple')) { $value = (array) $value; if ($field->fieldparams['multiple']) { return array_map( fn($value) => is_scalar($value) ? ['value' => $value] : $value, $value, ); } else { return array_shift($value); } } return $field->rawvalue; } public function resolveUser($field) { return Factory::getUser($field->rawvalue); } /** * Remove when Joomla 3 support is dropped. */ public function resolveRepeatable($field) { $fields = []; foreach ($field->fieldparams->get('fields', []) as $subField) { $fields[$subField->fieldname] = $subField->fieldtype; } return array_map(function ($vals) use ($fields) { $values = []; foreach ($vals as $name => $value) { if (Arr::get($fields, $name) === 'media') { $values[Str::snakeCase($name)] = ['imagefile' => $value]; } else { $values[Str::snakeCase($name)] = $value; } } return $values; }, array_values(json_decode($field->rawvalue, true) ?: [])); } public function resolveSubform($field) { return is_string($field->rawvalue) ? json_decode($field->rawvalue, true) : $field->rawvalue; } public function resolveSubfield($value, $args, $ctx, $info) { $subfield = clone static::getSubfield($args['id'], $this->context); if (!$subfield || empty($value["field{$args['id']}"])) { return; } $subfield->rawvalue = $subfield->value = $value["field{$args['id']}"]; return $this->resolveField($subfield, $subfield->rawvalue); } public function resolveList($field) { return $this->resolveSelect($field, $field->fieldparams->get('multiple')); } public function resolveCheckboxes($field) { return $this->resolveSelect($field, true); } public function resolveRadio($field) { return $this->resolveSelect($field); } public function resolveSelect($field, $multiple = false) { $result = []; foreach ($field->fieldparams->get('options', []) as $option) { if (in_array($option->value, (array) $field->rawvalue ?: [])) { if ($multiple) { $result[] = $option; continue; } return $option; } } return $result; } public function resolveImagelist($field) { $config = app(Config::class); $root = Path::relative( $config('app.rootDir'), Path::join($config('app.uploadDir'), $field->fieldparams->get('directory')), ); return $this->resolveGenericField( $field, array_map( fn($value) => Path::join($root, $value), array_filter((array) $field->rawvalue, fn($value) => $value && $value != -1), ), ); } public function resolveMedia($field) { $value = $field->rawvalue; if (is_array($value)) { return $value; } if (!is_string($value)) { return; } if (str_starts_with($value, '{')) { return json_decode($value, true); } return ['imagefile' => $value, 'alt_text' => '']; } public function resolveUsergrouplist($field) { return $this->resolveGenericField( $field, array_intersect_key($this->getUserGroups(), array_flip((array) $field->rawvalue)), ); } public function resolveSql($field) { if ($field->rawvalue === '') { return; } /** @var DatabaseDriver $db */ $db = app(DatabaseDriver::class); $query = $field->fieldparams->get('query', ''); $condition = array_reduce( (array) $field->rawvalue, fn($carry, $value) => $value ? $carry . ", {$db->quote($value)}" : $carry, ); // Run the query with a having condition because it supports aliases $db->setQuery( sprintf( 'SELECT value, text FROM (%s) as a having value in (%s)', preg_replace('/[\s;]*$/', '', $query), trim($condition, ','), ), ); $items = $db->loadObjectList(); return $field->fieldparams->get('multiple') ? $items : array_pop($items); } protected function getUserGroups() { $data = []; foreach (UsersHelper::getGroups() as $group) { $data[$group->value] = Text::_(preg_replace('/^(- )+/', '', $group->text)); } return $data; } public static function getField($name, $item, $context) { $fields = static::getFields($item, $context); return $fields[$name] ?? null; } protected static function getFields($item, $context) { if (isset($item->_fields)) { return $item->_fields; } PluginHelper::importPlugin('fields'); $fields = []; foreach ($item->jcfields ?? FieldsHelper::getFields($context, $item) as $field) { if ($item && !isset($item->jcfields)) { Factory::getApplication()->triggerEvent('onCustomFieldsBeforePrepareField', [ $context, $item, &$field, ]); } $fields[$field->name] = $field; } if (isset($item)) { $item->_fields = $fields; } return $fields; } public static function getSubfield($id, $context) { static $fields = []; if (!isset($fields[$context])) { $fields[$context] = []; foreach (FieldsHelper::getFields($context, null, true) as $field) { $fields[$context][$field->id] = $field; } } return $fields[$context][$id] ?? null; } } builder-joomla-fields/src/Type/ChoiceFieldType.php000064400000001734151666572130016157 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields\Type; use Joomla\CMS\Language\Text; use function YOOtheme\trans; class ChoiceFieldType { /** * @return array */ public static function config() { return [ 'fields' => [ 'name' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Name'), ], 'extensions' => [ 'call' => __CLASS__ . '::name', ], ], 'value' => [ 'type' => 'String', 'metadata' => [ 'label' => trans('Value'), ], ], ], ]; } public static function name($choice) { $name = $choice->name ?? ($choice['name'] ?? null); if ($name) { return Text::_($name); } } } builder-joomla-fields/src/Listener/LoadSourceTypes.php000064400000003577151666572130017117 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields\Listener; use YOOtheme\Builder\Joomla\Fields\FieldsHelper; use YOOtheme\Builder\Joomla\Fields\Type; class LoadSourceTypes { public static function handle($source): void { $types = [ 'User' => 'com_users.user', 'Article' => 'com_content.article', 'Category' => 'com_content.categories', 'Contact' => 'com_contact.contact', ]; $source->objectType('SqlField', Type\SqlFieldType::config()); $source->objectType('ValueField', Type\ValueFieldType::config()); $source->objectType('MediaField', Type\MediaFieldType::config()); $source->objectType('ChoiceField', Type\ChoiceFieldType::config()); $source->objectType('ChoiceFieldString', Type\ChoiceFieldStringType::config()); foreach ($types as $type => $context) { // has custom fields? if ($fields = FieldsHelper::getFields($context)) { static::configFields($source, $type, $context, $fields); } } } protected static function configFields($source, $type, $context, array $fields): void { // add field on type $source->objectType( $type, $config = [ 'fields' => [ 'field' => [ 'type' => ($fieldType = "{$type}Fields"), 'extensions' => [ 'call' => Type\FieldsType::class . '::field', ], ], ], ], ); if ($type === 'Article') { $source->objectType('TagItem', $config); $source->objectType('SmartSearchItem', $config); } // configure field type $source->objectType($fieldType, Type\FieldsType::config($source, $type, $context, $fields)); } } builder-joomla-fields/src/Listener/LoadBuilderConfig.php000064400000001651151666572130017335 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields\Listener; use YOOtheme\Builder\BuilderConfig; use YOOtheme\Builder\Joomla\Fields\FieldsHelper; use function YOOtheme\trans; class LoadBuilderConfig { /** * @param BuilderConfig $config */ public static function handle($config): void { $fields = []; foreach (FieldsHelper::getFields('com_content.article') as $field) { if ( $field->fieldparams->get('multiple') || $field->fieldparams->get('repeat') || $field->type === 'repeatable' ) { continue; } $fields[] = ['value' => "field:{$field->id}", 'text' => $field->title]; } if ($fields) { $config->push('sources.articleOrderOptions', [ 'label' => trans('Custom Fields'), 'options' => $fields, ]); } } } builder-joomla-fields/src/FieldsHelper.php000064400000001007151666572130014575 0ustar00<?php namespace YOOtheme\Builder\Joomla\Fields; use Joomla\Component\Fields\Administrator\Helper\FieldsHelper as BaseFieldHelper; class FieldsHelper { public static function getFields($context, $item = null, $includeSubformFields = false) { return class_exists(BaseFieldHelper::class) ? array_filter( BaseFieldHelper::getFields($context, $item, false, null, $includeSubformFields), fn($field) => $field->state == 1, ) : []; } } translation/src/Translator.php000064400000002645151666572130012556 0ustar00<?php namespace YOOtheme; interface Translator { /** * Returns the current locale. * * @return string */ public function getLocale(); /** * Sets the current locale. * * @param string $locale */ public function setLocale($locale); /** * Gets all Resources. * * @return array */ public function getResources(); /** * Adds a Resource. * * @param mixed $resource * @param string $locale * * @return $this */ public function addResource($resource, $locale = null); /** * Translates the given message. * * @param string $id * @param array $parameters * @param string $locale * * @return string */ public function trans($id, array $parameters = [], $locale = null); /** * Translates the given choice message by choosing a translation according to a number. * * @param string $id The message id (may also be an object that can be cast to string) * @param int $number The number to use to find the indice of the message * @param array $parameters An array of parameters for the message * @param string|null $locale The locale or null to use the default * * @return string The translated string */ public function transChoice($id, $number, array $parameters = [], $locale = null); } translation/src/Translation/Interval.php000064400000004371151666572130014505 0ustar00<?php namespace YOOtheme\Translation; /** * @link https://github.com/symfony/Translation * * @copyright Copyright (c) Fabien Potencier <fabien@symfony.com> */ class Interval { /** * Tests if the given number is in the math interval. * * @param int $number A number * @param string $interval An interval * * @throws \InvalidArgumentException * * @return bool */ public static function test($number, $interval) { $interval = trim($interval); if (!preg_match('/^' . self::getIntervalRegexp() . '$/x', $interval, $matches)) { throw new \InvalidArgumentException( sprintf('"%s" is not a valid interval.', $interval), ); } if ($matches[1]) { foreach (explode(',', $matches[2]) as $n) { if ($number == $n) { return true; } } } else { $leftNumber = self::convertNumber($matches['left']); $rightNumber = self::convertNumber($matches['right']); return ('[' === $matches['left_delimiter'] ? $number >= $leftNumber : $number > $leftNumber) && (']' === $matches['right_delimiter'] ? $number <= $rightNumber : $number < $rightNumber); } return false; } /** * Returns a Regexp that matches valid intervals. * * @return string A Regexp (without the delimiters) */ public static function getIntervalRegexp() { return <<<EOF ({\s* (\-?\d+(\.\d+)?[\s*,\s*\-?\d+(\.\d+)?]*) \s*}) | (?P<left_delimiter>[\[\]]) \s* (?P<left>-Inf|\-?\d+(\.\d+)?) \s*,\s* (?P<right>\+?Inf|\-?\d+(\.\d+)?) \s* (?P<right_delimiter>[\[\]]) EOF; } private static function convertNumber($number) { if ('-Inf' === $number) { return log(0); } if ('+Inf' === $number || 'Inf' === $number) { return -log(0); } return (float) $number; } } translation/src/Translation/PluralizationRules.php000064400000015663151666572130016577 0ustar00<?php namespace YOOtheme\Translation; /** * @link https://github.com/symfony/Translation * * @copyright Copyright (c) Fabien Potencier <fabien@symfony.com> */ class PluralizationRules { private static $rules = []; /** * Returns the plural position to use for the given locale and number. * * @param int $number The number * @param string $locale The locale * * @return int The plural position */ public static function get($number, $locale) { if ('pt_BR' === $locale) { // temporary set a locale for brazilian $locale = 'xbr'; } if (strlen($locale) > 3) { $locale = substr($locale, 0, -strlen(strrchr($locale, '_'))); } if (isset(self::$rules[$locale])) { $return = call_user_func(self::$rules[$locale], $number); if (!is_int($return) || $return < 0) { return 0; } return $return; } /* * The plural rules are derived from code of the Zend Framework (2010-09-25), * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd). * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) */ switch ($locale) { // case 'bo': // case 'dz': // case 'id': // case 'ja': // case 'jv': // case 'ka': // case 'km': // case 'kn': // case 'ko': // case 'ms': // case 'th': // case 'tr': // case 'vi': // case 'zh': // return 0; // break; case 'af': case 'az': case 'bn': case 'bg': case 'ca': case 'da': case 'de': case 'el': case 'en': case 'eo': case 'es': case 'et': case 'eu': case 'fa': case 'fi': case 'fo': case 'fur': case 'fy': case 'gl': case 'gu': case 'ha': case 'he': case 'hu': case 'is': case 'it': case 'ku': case 'lb': case 'ml': case 'mn': case 'mr': case 'nah': case 'nb': case 'ne': case 'nl': case 'nn': case 'no': case 'om': case 'or': case 'pa': case 'pap': case 'ps': case 'pt': case 'so': case 'sq': case 'sv': case 'sw': case 'ta': case 'te': case 'tk': case 'ur': case 'zu': return $number == 1 ? 0 : 1; case 'am': case 'bh': case 'fil': case 'fr': case 'gun': case 'hi': case 'ln': case 'mg': case 'nso': case 'xbr': case 'ti': case 'wa': return $number == 0 || $number == 1 ? 0 : 1; case 'be': case 'bs': case 'hr': case 'ru': case 'sr': case 'uk': return $number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 >= 2 && $number % 10 <= 4 && ($number % 100 < 10 || $number % 100 >= 20) ? 1 : 2); case 'cs': case 'sk': return $number == 1 ? 0 : ($number >= 2 && $number <= 4 ? 1 : 2); case 'ga': return $number == 1 ? 0 : ($number == 2 ? 1 : 2); case 'lt': return $number % 10 == 1 && $number % 100 != 11 ? 0 : ($number % 10 >= 2 && ($number % 100 < 10 || $number % 100 >= 20) ? 1 : 2); case 'sl': return $number % 100 == 1 ? 0 : ($number % 100 == 2 ? 1 : ($number % 100 == 3 || $number % 100 == 4 ? 2 : 3)); case 'mk': return $number % 10 == 1 ? 0 : 1; case 'mt': return $number == 1 ? 0 : ($number == 0 || ($number % 100 > 1 && $number % 100 < 11) ? 1 : ($number % 100 > 10 && $number % 100 < 20 ? 2 : 3)); case 'lv': return $number == 0 ? 0 : ($number % 10 == 1 && $number % 100 != 11 ? 1 : 2); case 'pl': return $number == 1 ? 0 : ($number % 10 >= 2 && $number % 10 <= 4 && ($number % 100 < 12 || $number % 100 > 14) ? 1 : 2); case 'cy': return $number == 1 ? 0 : ($number == 2 ? 1 : ($number == 8 || $number == 11 ? 2 : 3)); case 'ro': return $number == 1 ? 0 : ($number == 0 || ($number % 100 > 0 && $number % 100 < 20) ? 1 : 2); case 'ar': return $number == 0 ? 0 : ($number == 1 ? 1 : ($number == 2 ? 2 : ($number % 100 >= 3 && $number % 100 <= 10 ? 3 : 4))); default: return 0; } } /** * Overrides the default plural rule for a given locale. * * @param string $rule A PHP callable * @param string $locale The locale * * @throws \LogicException */ public static function set($rule, $locale) { if ('pt_BR' === $locale) { // temporary set a locale for brazilian $locale = 'xbr'; } if (strlen($locale) > 3) { $locale = substr($locale, 0, -strlen(strrchr($locale, '_'))); } if (!is_callable($rule)) { throw new \LogicException('The given rule can not be called'); } self::$rules[$locale] = $rule; } } translation/src/Translation/Translator.php000064400000010505151666572140015047 0ustar00<?php namespace YOOtheme\Translation; use YOOtheme\Translator as TranslatorInterface; class Translator implements TranslatorInterface { /** * @var string */ protected $locale; /** * @var array */ protected $resources = []; /** * @inheritdoc */ public function getLocale() { return $this->locale; } /** * @inheritdoc */ public function setLocale($locale) { $this->locale = $locale; } /** * Gets a Resource. * * @param string $locale * * @return array */ public function getResource($locale = null) { if ($locale === null) { $locale = $this->getLocale(); } return $this->resources[$locale] ?? []; } /** * @inheritdoc */ public function getResources() { return $this->resources; } /** * @inheritdoc */ public function addResource($resource, $locale = null) { if ($locale === null) { $locale = $this->getLocale(); } if (is_string($resource) && is_file($resource)) { $resource = json_decode(file_get_contents($resource), true); } else { $resource = []; } $this->resources[$locale] = isset($this->resources[$locale]) ? array_replace($this->resources[$locale], $resource) : $resource; return $this; } /** * @inheritdoc */ public function trans($id, array $parameters = [], $locale = null) { if ($locale === null) { $locale = $this->getLocale(); } $id = (string) $id; if (isset($this->resources[$locale][$id])) { return strtr($this->resources[$locale][$id], $parameters); } return strtr($id, $parameters); } /** * @inheritdoc */ public function transChoice($id, $number, array $parameters = [], $locale = null) { if (null === $locale) { $locale = $this->getLocale(); } return strtr( $this->choose($this->trans($id, [], $locale), (int) $number, $locale), $parameters, ); } /** * Returns the correct portion of the message based on the given number. * * @param string $message The message being translated * @param int $number The number of items represented for the message * @param string $locale The locale to use for choosing * * @throws \InvalidArgumentException * * @return string */ public function choose($message, $number, $locale) { $parts = explode('|', $message); $explicitRules = []; $standardRules = []; foreach ($parts as $part) { $part = trim($part); if ( preg_match( '/^(?P<interval>' . Interval::getIntervalRegexp() . ')\s*(?P<message>.*?)$/x', $part, $matches, ) ) { $explicitRules[$matches['interval']] = $matches['message']; } elseif (preg_match('/^\w+\:\s*(.*?)$/', $part, $matches)) { $standardRules[] = $matches[1]; } else { $standardRules[] = $part; } } // try to match an explicit rule, then fallback to the standard ones foreach ($explicitRules as $interval => $m) { if (Interval::test($number, $interval)) { return $m; } } $position = PluralizationRules::get($number, $locale); if (!isset($standardRules[$position])) { // when there's exactly one rule given, and that rule is a standard // rule, use this rule if (1 === count($parts) && isset($standardRules[0])) { return $standardRules[0]; } throw new \InvalidArgumentException( sprintf( 'Unable to choose a translation for "%s" with locale "%s" for value "%d". Double check that this translation has the correct plural options (e.g. "There is one apple|There are %%count%% apples").', $message, $locale, $number, ), ); } return $standardRules[$position]; } } translation/functions.php000064400000001766151666572140011652 0ustar00<?php namespace YOOtheme; /** * Translates the given message. * * @param string $id * @param array $parameters * @param string $locale * * @return string */ function trans($id, array $parameters = [], $locale = null) { $app = Application::getInstance(); return $app(Translator::class)->trans($id, $parameters, $locale); } /** * Translates the given choice message by choosing a translation according to a number. * * @param string $id The message id (may also be an object that can be cast to string) * @param int $number The number to use to find the indice of the message * @param array $parameters An array of parameters for the message * @param string|null $locale The locale or null to use the default * * @return string The translated string */ function transChoice($id, $number, array $parameters = [], $locale = null) { $app = Application::getInstance(); return $app(Translator::class)->trans($id, $number, $parameters, $locale); } translation/bootstrap.php000064400000000434151666572140011646 0ustar00<?php namespace YOOtheme; return [ 'services' => [ Translator::class => function (Config $config) { $translator = new Translation\Translator(); $translator->setLocale($config('locale.code')); return $translator; }, ], ]; builder-newsletter/app/newsletter.min.js000064400000001103151666572140014470 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ (function(e){"use strict";e.on("body","submit",".js-form-newsletter",async r=>{r.preventDefault();const t=r.target,a=e.$(".message",t);e.addClass(a,"uk-hidden");try{const s=await fetch(t.action,{method:"post",body:new FormData(t)});if(s.ok){const{message:n,redirect:c}=await s.json();n?(o(n),t.reset()):c?window.location.href=c:o("Invalid response.",!0)}else o(await s.text(),!0)}catch{}function o(s,n){e.removeClass(a,"uk-hidden uk-text-danger"),e.addClass(a,`uk-text-${n?"danger":"success"}`),a.innerText=s}})})(UIkit.util); builder-newsletter/src/MailChimpProvider.php000064400000006676151666572140015276 0ustar00<?php namespace YOOtheme\Builder\Newsletter; use YOOtheme\HttpClientInterface; use function YOOtheme\trans; class MailChimpProvider extends AbstractProvider { /** * @param string $apiKey * @param HttpClientInterface $client * * @throws \Exception */ public function __construct($apiKey, HttpClientInterface $client) { parent::__construct($apiKey, $client); if (!str_contains($apiKey, '-')) { throw new \Exception('Invalid API key.'); } [, $dataCenter] = explode('-', $apiKey); $this->apiEndpoint = "https://{$dataCenter}.api.mailchimp.com/3.0"; } /** * @inheritdoc */ public function lists($provider) { $clients = []; if (($result = $this->get('lists', ['count' => '100'])) && $result['success']) { $lists = array_map( fn($list) => ['value' => $list['id'], 'text' => $list['name']], $result['data']['lists'], ); } else { throw new \Exception($result['data']); } return compact('lists', 'clients'); } /** * @inheritdoc */ public function subscribe($email, $data, $provider) { if (!empty($provider['list_id'])) { $mergeFields = []; if (isset($data['first_name'])) { $mergeFields['FNAME'] = $data['first_name']; } if (isset($data['last_name'])) { $mergeFields['LNAME'] = $data['last_name']; } // Deprecated if (!isset($provider['double_optin'])) { $provider['double_optin'] = true; } $result = $this->post("lists/{$provider['list_id']}/members", [ 'email_address' => $email, 'status' => $provider['double_optin'] ? 'pending' : 'subscribed', 'merge_fields' => $mergeFields, ]); if (!$result['success']) { if (str_contains($result['data'], 'already a list member')) { throw new \Exception( trans('%email% is already a list member.', [ '%email%' => htmlspecialchars($email), ]), ); } if ( str_contains( $result['data'], 'was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list', ) ) { throw new \Exception( trans( '%email% was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.', ['%email%' => htmlspecialchars($email)], ), ); } if ($result['data'] === 'Please provide a valid email address.') { throw new \Exception(trans('Please provide a valid email address.')); } throw new \Exception($result['data']); } return true; } throw new \Exception(trans('No list selected.')); } /** * @inheritdoc */ protected function getHeaders() { return parent::getHeaders() + [ 'Authorization' => "apikey {$this->apiKey}", ]; } } builder-newsletter/src/CampaignMonitorProvider.php000064400000004343151666572140016507 0ustar00<?php namespace YOOtheme\Builder\Newsletter; class CampaignMonitorProvider extends AbstractProvider { protected $apiEndpoint = 'https://api.createsend.com/api/v3.1'; /** * @inheritdoc */ public function lists($provider) { if (!($result = $this->get('clients.json')) || !$result['success']) { throw new \Exception($result['data']); } $clients = array_map( fn($client) => ['value' => $client['ClientID'], 'text' => $client['Name']], $result['data'], ); if (!($clientId = $provider['client_id'] ?: $clients[0]['value'])) { throw new \Exception('Invalid client id.'); } if (!($result = $this->get("/clients/{$clientId}/lists.json")) || !$result['success']) { throw new \Exception($result['data']); } $lists = array_map( fn($list) => ['value' => $list['ListID'], 'text' => $list['Name']], $result['data'], ); return compact('clients', 'lists'); } /** * @inheritdoc */ public function subscribe($email, $data, $provider) { if (empty($provider['list_id'])) { throw new \Exception('No list selected.'); } $name = (!empty($data['first_name']) ? $data['first_name'] . ' ' : '') . $data['last_name']; $result = $this->post("subscribers/{$provider['list_id']}.json", [ 'EmailAddress' => $email, 'Name' => $name, 'Resubscribe' => true, 'RestartSubscriptionBasedAutoresponders' => true, ]); if (!$result['success']) { throw new \Exception($result['data']); } return true; } /** * @inheritdoc */ protected function getHeaders() { return parent::getHeaders() + [ 'Authorization' => 'Basic ' . base64_encode("{$this->apiKey}:nopass"), ]; } /** * @inheritdoc */ protected function findError($response, $formattedResponse) { return isset($formattedResponse['Message']) ? sprintf('%d: %s', $formattedResponse['Code'], $formattedResponse['Message']) : parent::findError($response, $formattedResponse); } } builder-newsletter/src/AbstractProvider.php000064400000006102151666572140015156 0ustar00<?php namespace YOOtheme\Builder\Newsletter; use Psr\Http\Message\ResponseInterface; use YOOtheme\HttpClientInterface; abstract class AbstractProvider { protected $apiKey; protected $apiEndpoint = ''; /** * @var HttpClientInterface */ protected $client; public function __construct($apiKey, HttpClientInterface $client) { $this->apiKey = $apiKey; $this->client = $client; } /** * @param array $provider * * @throws \Exception * * @return array */ abstract public function lists($provider); /** * @param string $email * @param array $data * @param array $provider * * @throws \Exception * * @return bool */ abstract public function subscribe($email, $data, $provider); /** * @return string[] */ protected function getHeaders() { return [ 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json', ]; } /** * @param string $name * @param array $args * * @throws \Exception * * @return array */ public function get($name, $args = []) { return $this->request('GET', $name, $args); } /** * @param string $name * @param array $args * * @throws \Exception * * @return array */ public function post($name, $args = []) { return $this->request('POST', $name, $args); } /** * @param string $method * @param string $name * @param array $args * * @throws \Exception * * @return array */ protected function request($method, $name, $args) { $url = "{$this->apiEndpoint}/{$name}"; $headers = $this->getHeaders() + [ 'Accept' => 'application/vnd.api+json', 'Content-Type' => 'application/vnd.api+json', ]; switch ($method) { case 'GET': $query = http_build_query($args, '', '&'); $response = $this->client->get("{$url}?{$query}", compact('headers')); break; case 'POST': $response = $this->client->post($url, json_encode($args), compact('headers')); break; default: throw new \Exception("Call to undefined method {$method}"); } $encoded = json_decode($response->getBody(), true); $success = $response->getStatusCode() >= 200 && $response->getStatusCode() <= 299 && $encoded; return [ 'success' => $success, 'data' => $success ? $encoded : $this->findError($response, $encoded), ]; } /** * Get error message from response. * * @param ResponseInterface $response * @param array $formattedResponse * * @return string */ protected function findError($response, $formattedResponse) { return $formattedResponse['detail'] ?? 'Unknown error, call getLastResponse() to find out what happened.'; } } builder-newsletter/src/NewsletterController.php000064400000005164151666572140016107 0ustar00<?php namespace YOOtheme\Builder\Newsletter; use YOOtheme\Http\Request; use YOOtheme\Http\Response; use function YOOtheme\app; use function YOOtheme\trans; class NewsletterController { /** * @var array */ protected $providers; /** * @var string */ protected $secret; public function __construct(array $providers, string $secret) { $this->providers = $providers; $this->secret = $secret; } public function lists(Request $request, Response $response) { $settings = $request->getParam('settings'); try { if (!($provider = $this->getProvider($settings['name'] ?? ''))) { $request->abort(400, 'Invalid provider'); } return $response->withJson($provider->lists($settings)); } catch (\Exception $e) { $request->abort(400, $e->getMessage()); } } public function subscribe(Request $request, Response $response) { $hash = $request->getQueryParam('hash'); $settings = $request->getParam('settings'); $request->abortIf($hash !== $this->getHash($settings), 400, 'Invalid settings hash'); try { $settings = $this->decodeData($settings); $request->abortIf( !($provider = $this->getProvider($settings['name'] ?? '')), 400, 'Invalid provider', ); $provider->subscribe( $request->getParam('email'), [ 'first_name' => $request->getParam('first_name', ''), 'last_name' => $request->getParam('last_name', ''), ], $settings, ); } catch (\Exception $e) { $request->abort(400, $e->getMessage()); } $return = ['successful' => true]; if ($settings['after_submit'] === 'redirect') { $return['redirect'] = $settings['redirect']; } else { $return['message'] = trans($settings['message']); } return $response->withJson($return); } public function encodeData(array $data): string { return base64_encode(json_encode($data)); } public function decodeData(string $data): array { return json_decode(base64_decode($data), true); } public function getHash(string $data): string { return hash('fnv132', hash_hmac('sha1', $data, $this->secret)); } protected function getProvider(string $name): ?AbstractProvider { return isset($this->providers[$name]) ? app($this->providers[$name]) : null; } } builder-newsletter/bootstrap.php000064400000002734151666572140013135 0ustar00<?php namespace YOOtheme; use YOOtheme\Builder\Newsletter\CampaignMonitorProvider; use YOOtheme\Builder\Newsletter\MailChimpProvider; use YOOtheme\Builder\Newsletter\NewsletterController; return [ 'theme' => [ 'newsletterProvider' => [ 'mailchimp' => MailChimpProvider::class, 'cmonitor' => CampaignMonitorProvider::class, ], ], 'routes' => [ ['post', '/theme/newsletter/list', NewsletterController::class . '@lists'], [ 'post', '/theme/newsletter/subscribe', NewsletterController::class . '@subscribe', ['csrf' => false, 'allowed' => true], ], ], 'extend' => [ Builder::class => function (Builder $builder) { $builder->addTypePath(__DIR__ . '/elements/*/element.json'); }, ], 'services' => [ MailChimpProvider::class => function (Config $config, HttpClientInterface $client) { return new MailChimpProvider($config('~theme.mailchimp_api', ''), $client); }, CampaignMonitorProvider::class => function (Config $config, HttpClientInterface $client) { return new CampaignMonitorProvider($config('~theme.cmonitor_api'), $client); }, NewsletterController::class => function (Config $config) { return new NewsletterController( $config('theme.newsletterProvider'), $config('app.secret'), ); }, ], ]; builder-newsletter/elements/newsletter/updates.php000064400000000427151666572140016572 0ustar00<?php namespace YOOtheme; return [ '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, ['gutter' => 'gap']); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder-newsletter/elements/newsletter/templates/template.php000064400000006322151666572140020736 0ustar00<?php $el = $this->el('div'); // Layout $grid = ($props['show_name'] || $props['button_mode'] == 'button') ? $this->el('div', [ 'class' => [ 'uk-grid-{gap}', 'uk-child-width-expand@s {@layout: grid} [uk-flex-middle {@button_style: text}]', 'uk-child-width-1-1 {@layout: stacked(-name)?}', ], 'uk-grid' => true, ]) : null; // Input $input = $this->el('input', [ 'class' => [ 'el-input', 'uk-input', 'uk-form-{form_size}', 'uk-form-{form_style}', ], 'type' => 'text', ]); // Button $button = $this->el('button', [ 'class' => $props['button_mode'] == 'button' ? [ 'el-button', 'uk-button uk-button-{button_style}', 'uk-button-{form_size} {@!button_style: text}', 'uk-width-1-1 {@button_fullwidth} {@!layout: grid}', 'uk-margin[-small{@!button_margin: default}]-{0} {@show_name} {@button_margin}' => $props['layout'] == 'grid' ? 'left' : 'top', ] : 'el-button uk-form-icon uk-form-icon-flip', 'uk-icon' => [ 'icon: {button_icon}; {@!button_mode: button}', ], ]); ?> <?= $el($props, $attrs) ?> <form class="uk-form uk-panel js-form-newsletter" method="post"<?= $this->attrs($form) ?>> <?php if ($grid) : ?> <?= $grid($props) ?> <?php endif ?> <?php if ($props['show_name']) : ?> <?php if ($props['layout'] == 'stacked-name') : ?> <div> <div class="uk-child-width-1-2@s <?= $props['gap'] ? "uk-grid-{$props['gap']}" : '' ?>" uk-grid> <?php endif ?> <div><?= $input($props, ['name' => 'first_name', 'placeholder' => ['{label_first_name}'], 'aria-label' => ['{label_first_name}']]) ?></div> <div><?= $input($props, ['name' => 'last_name', 'placeholder' => ['{label_last_name}'], 'aria-label' => ['{label_last_name}']]) ?></div> <?php if ($props['layout'] == 'stacked-name') : ?> </div> </div> <?php endif ?> <?php endif ?> <?php if ($props['button_mode'] == 'button') : ?> <div><?= $input($props, ['type' => 'email', 'name' => 'email', 'placeholder' => ['{label_email}'], 'aria-label' => ['{label_email}'], 'required' => true]) ?></div> <?= $this ->el('div', ['class' => ['uk-width-auto@s {@layout: grid} [uk-flex {@button_style: text}]']], $button($props, ['type' => 'submit'], $props['label_button'] ?: '')) ->render($props) ?> <?php endif ?> <?php if ($props['button_mode'] == 'icon') : ?> <div class="uk-position-relative"> <?= $button($props, ['type' => 'submit', 'title' => ['{label_button}']], '') ?> <?= $input($props, ['type' => 'email', 'name' => 'email', 'placeholder' => ['{label_email}'], 'aria-label' => ['{label_email}'], 'required' => true]) ?> </div> <?php endif ?> <?php if ($grid) : ?> <?= $grid->end() ?> <?php endif ?> <input type="hidden" name="settings" value="<?= $settings ?>"> <div class="message uk-margin uk-hidden"></div> </form> <?= $el->end() ?> builder-newsletter/elements/newsletter/element.json000064400000026274151666572140016750 0ustar00{ "@import": "./element.php", "name": "newsletter", "title": "Newsletter", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "layout": "grid", "show_name": true, "label_first_name": "First name", "label_last_name": "Last name", "label_email": "Email address", "label_button": "Subscribe", "provider": { "name": "mailchimp", "after_submit": "message", "message": "You've been subscribed successfully.", "redirect": "" }, "mailchimp": { "client_id": "", "list_id": "", "double_optin": true }, "cmonitor": { "client_id": "", "list_id": "" }, "button_mode": "button", "button_style": "default", "button_icon": "mail" }, "updates": "./updates.php", "templates": { "render": "./templates/template.php" }, "fields": { "provider.name": { "label": "Provider", "type": "select", "options": { "Mailchimp": "mailchimp", "Campaign Monitor": "cmonitor" } }, "mailchimp": { "label": "Mailchimp", "type": "newsletter-lists", "provider": "mailchimp", "show": "provider.name == 'mailchimp'" }, "mailchimp.double_optin": { "label": "Double opt-in", "type": "checkbox", "text": "Use double opt-in.", "show": "provider.name == 'mailchimp'" }, "cmonitor": { "label": "Campaign Monitor", "type": "newsletter-lists", "provider": "cmonitor", "show": "provider.name == 'cmonitor'" }, "provider.after_submit": { "label": "After Submit", "description": "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.", "type": "select", "options": { "Show message": "message", "Redirect": "redirect" } }, "provider.message": { "label": "Message", "description": "Message shown to the user after submit.", "type": "textarea", "attrs": { "rows": 4 }, "show": "provider.after_submit == 'message'" }, "provider.redirect": { "label": "Link", "description": "Link to redirect to after submit.", "type": "link", "filePicker": false, "show": "provider.after_submit == 'redirect'" }, "layout": { "label": "Layout", "description": "Define the layout of the form.", "type": "select", "options": { "Grid": "grid", "Stacked": "stacked", "Stacked (Name fields as grid)": "stacked-name" } }, "show_name": { "type": "checkbox", "text": "Show name fields" }, "gap": { "label": "Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "" } }, "form_size": { "label": "Size", "description": "Select the form size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" } }, "form_style": { "label": "Style", "description": "Select the form style.", "type": "select", "options": { "Default": "", "Blank": "blank" } }, "label_email": { "label": "Email", "attrs": { "placeholder": "Email address" } }, "label_button": { "label": "Button", "attrs": { "placeholder": "Submit" } }, "label_first_name": { "label": "First name", "attrs": { "placeholder": "First name" }, "enable": "show_name" }, "label_last_name": { "label": "Last name", "attrs": { "placeholder": "Last name" }, "enable": "show_name" }, "button_mode": { "label": "Mode", "description": "Select whether a button or a clickable icon inside the email input is shown.", "type": "select", "options": { "Button": "button", "Icon": "icon" } }, "button_style": { "label": "Style", "description": "Set the button style.", "type": "select", "options": { "Default": "default", "Primary": "primary", "Secondary": "secondary", "Danger": "danger", "Text": "text" }, "enable": "button_mode == 'button'" }, "button_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "button_mode == 'button' && layout != 'grid'" }, "button_margin": { "label": "Extra Margin", "description": "Add extra margin to the button.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "default" }, "enable": "button_mode == 'button' && show_name" }, "button_icon": { "label": "Icon", "description": "Click on the pencil to pick an icon from the icon library.", "type": "icon", "enable": "button_mode == 'icon'" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-input", ".el-button"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "provider.name", "mailchimp", "mailchimp.double_optin", "cmonitor", "provider.after_submit", "provider.message", "provider.redirect" ] }, { "title": "Settings", "fields": [ { "label": "Form", "type": "group", "divider": true, "fields": ["layout", "show_name", "gap", "form_size", "form_style"] }, { "label": "Labels", "type": "group", "divider": true, "fields": [ "label_email", "label_button", "label_first_name", "label_last_name" ] }, { "label": "Button", "type": "group", "divider": true, "fields": [ "button_mode", "button_style", "button_fullwidth", "button_margin", "button_icon" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder-newsletter/elements/newsletter/images/icon.svg000064400000000412151666572140017324 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="28" height="19" fill="none" stroke="#444" stroke-width="2" x="1" y="5" /> <polyline fill="none" stroke="#444" stroke-width="2" points="1,8 15,18 29,8" /> </svg> builder-newsletter/elements/newsletter/images/iconSmall.svg000064400000000367151666572140020326 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="19" height="13" fill="none" stroke="#444" x="0.5" y="3.5" /> <polyline fill="none" stroke="#444" points="0.5,5.2 10,11.99 19.5,5.2" /> </svg> builder-newsletter/elements/newsletter/element.php000064400000001706151666572140016557 0ustar00<?php namespace YOOtheme; use YOOtheme\Builder\Newsletter\NewsletterController; return [ 'transforms' => [ 'render' => function ($node) { /** * @var NewsletterController $controller * @var Metadata $meta */ [$controller, $meta] = app(NewsletterController::class, Metadata::class); $provider = (array) $node->props['provider']; $node->settings = $controller->encodeData( array_merge($provider, (array) $node->props[$provider['name']]), ); $node->form = [ 'action' => Url::route('theme/newsletter/subscribe', [ 'hash' => $controller->getHash($node->settings), ]), ]; $meta->set('script:newsletter', [ 'src' => Path::get('../../app/newsletter.min.js', __DIR__), 'defer' => true, ]); }, ], ]; theme/updates.php000064400000112541151666572140010045 0ustar00<?php namespace YOOtheme; return [ '4.5.5' => function ($config) { Arr::del($config, 'post.content_length'); return $config; }, '4.5.0-beta.0.8' => function ($config) { Arr::del($config, 'less.@accordion-item-padding-top'); return $config; }, '4.5.0-beta.0.5' => function ($config) { foreach (['header.', 'mobile.header.'] as $header) { $layout = Arr::get($config, $header . 'search_mode') ?: ( Arr::get($config, $header . 'search_results_dropbar') ? 'input-dropbar' : 'input-dropdown' ); Arr::set($config, $header . 'search_layout', $layout); Arr::del($config, $header . 'search_mode'); Arr::del($config, $header . 'search_results_dropbar'); } return $config; }, '4.5.0-beta.0.2' => function ($config) { Arr::updateKeys($config, [ 'less.@lightbox-item-color' => 'less.@lightbox-color', 'less.@lightbox-toolbar-padding-vertical' => 'less.@lightbox-caption-padding-vertical', 'less.@lightbox-toolbar-padding-horizontal' => 'less.@lightbox-caption-padding-horizontal', 'less.@lightbox-toolbar-background' => 'less.@lightbox-caption-background', 'less.@lightbox-toolbar-color' => 'less.@lightbox-caption-color', ]); foreach ( [ 'less.@lightbox-toolbar-icon-padding', 'less.@lightbox-toolbar-icon-color', 'less.@lightbox-toolbar-icon-hover-color', 'less.@lightbox-button-size', 'less.@lightbox-button-background', 'less.@lightbox-button-color', 'less.@lightbox-button-hover-color', 'less.@lightbox-button-active-color', 'less.@lightbox-button-hover-background', 'less.@lightbox-button-active-background', 'less.@lightbox-button-border-width', 'less.@lightbox-button-border', 'less.@lightbox-button-hover-border', 'less.@lightbox-button-active-border', ] as $key ) { Arr::del($config, $key); } return $config; }, '4.5.0-beta.0.1' => function ($config) { foreach (['header.', 'mobile.header.'] as $header) { if (Arr::get($config, $header . 'search_style') == 'modal') { Arr::set($config, $header . 'search_mode', 'modal'); } Arr::del($config, $header . 'search_style'); } return $config; }, '4.4.0-beta.5' => function ($config) { Arr::updateKeys($config, [ 'less.@search-navbar-width' => 'less.@search-medium-width', 'less.@search-navbar-height' => 'less.@search-medium-height', 'less.@search-navbar-background' => 'less.@search-medium-background', 'less.@search-navbar-font-size' => 'less.@search-medium-font-size', 'less.@search-navbar-icon-width' => 'less.@search-medium-icon-width', 'less.@search-navbar-icon-padding' => 'less.@search-medium-icon-padding', 'less.@inverse-search-navbar-background' => 'less.@inverse-search-medium-background', 'less.@search-navbar-backdrop-filter' => 'less.@search-medium-backdrop-filter', 'less.@search-navbar-focus-background' => 'less.@search-medium-focus-background', 'less.@inverse-search-navbar-focus-background' => 'less.@inverse-search-medium-focus-background', 'less.@search-navbar-border-mode' => 'less.@search-medium-border-mode', 'less.@search-navbar-border-width' => 'less.@search-medium-border-width', 'less.@search-navbar-border' => 'less.@search-medium-border', 'less.@search-navbar-focus-border' => 'less.@search-medium-focus-border', 'less.@inverse-search-navbar-border' => 'less.@inverse-search-medium-border', 'less.@inverse-search-navbar-focus-border' => 'less.@inverse-search-medium-focus-border', 'less.@search-navbar-border-radius' => 'less.@search-medium-border-radius', 'less.@search-navbar-input-box-shadow' => 'less.@search-medium-input-box-shadow', 'less.@search-navbar-input-focus-box-shadow' => 'less.@search-medium-input-focus-box-shadow', 'less.@inverse-search-navbar-input-box-shadow' => 'less.@inverse-search-medium-input-box-shadow', 'less.@inverse-search-navbar-input-focus-box-shadow' => 'less.@inverse-search-medium-input-focus-box-shadow', ]); return $config; }, '4.4.0-beta.0.3' => function ($config) { foreach (['top', 'bottom'] as $section) { if ( Arr::get($config, "$section.vertical_align") && !( (Arr::get($config, "$section.height") == 'viewport' && Arr::get($config, "$section.height_viewport") <= 100) || Arr::get($config, "$section.height") == 'section' ) ) { Arr::set($config, "$section.vertical_align", ''); } } return $config; }, '4.3.0-beta.0.5' => function ($config) { foreach (['top', 'bottom'] as $section) { if ($height = Arr::get($config, "$section.height")) { $rename = [ 'full' => 'viewport', 'percent' => 'viewport', 'expand' => 'page', ]; Arr::set($config, "$section.height", $rename[$height]); if ($height !== 'expand' && $section === 'top') { Arr::set($config, "$section.height_offset_top", true); } if ($height === 'percent') { Arr::set($config, "$section.height_viewport", 80); } } } return $config; }, '4.3.0-beta.0.3' => function ($config) { if (Arr::get($config, 'header.transparent')) { Arr::set($config, 'header.transparent', true); } if (Arr::get($config, 'mobile.header.transparent')) { Arr::set($config, 'mobile.header.transparent', true); } if (Arr::get($config, 'top.header_transparent')) { if ( Arr::get($config, 'top.text_color') != Arr::get($config, 'top.header_transparent') || !(Arr::get($config, 'top.image') || Arr::get($config, 'top.video')) ) { Arr::set( $config, 'top.header_transparent_text_color', Arr::get($config, 'top.header_transparent'), ); } Arr::set($config, 'top.header_transparent', true); } if ( Arr::get($config, 'site.layout') === 'boxed' && Arr::get($config, 'site.boxed.header_outside') && !Arr::get($config, 'site.boxed.media') && Arr::get($config, 'site.boxed.header_transparent') ) { Arr::set( $config, 'less.@theme-page-container-color-mode', Arr::get($config, 'site.boxed.header_transparent'), ); Arr::del($config, 'site.boxed.header_transparent'); } if (Arr::get($config, 'site.boxed.header_transparent')) { Arr::set( $config, 'site.boxed.header_text_color', Arr::get($config, 'site.boxed.header_transparent'), ); Arr::set($config, 'site.boxed.header_transparent', true); } Arr::updateKeys($config, [ 'top.image_visibility' => 'top.media_visibility', 'bottom.image_visibility' => 'bottom.media_visibility', ]); return $config; }, '4.3.0-beta.0.1' => function ($config) { // Less if (Arr::get($config, 'less.@button-text-mode') === 'arrow') { Arr::set($config, 'less.@button-text-icon-mode', 'arrow'); Arr::set($config, 'less.@button-text-mode', ''); } if (Arr::get($config, 'less.@button-text-mode') === 'em-dash') { Arr::set($config, 'less.@button-text-icon-mode', 'dash'); Arr::set($config, 'less.@button-text-mode', ''); } Arr::updateKeys($config, [ 'less.@internal-button-text-em-dash-padding' => 'less.@internal-button-text-dash-padding', 'less.@internal-button-text-em-dash-size' => 'less.@internal-button-text-dash-size', ]); return $config; }, '4.1.0-beta.0.3' => function ($config) { if (str_ends_with(Arr::get($config, 'less.@pagination-item-line-height', ''), 'px')) { Arr::updateKeys($config, [ 'less.@pagination-item-line-height' => 'less.@pagination-item-height', ]); } else { Arr::del($config, 'less.@pagination-item-line-height'); } return $config; }, '4.1.0-beta.0.2' => function ($config) { if (Arr::has($config, 'less.@internal-fonts')) { Arr::update( $config, 'less.@internal-fonts', fn($fonts) => preg_replace('/&subset=[a-z,\s-]+/', '', $fonts), ); } return $config; }, '4.1.0-beta.0.1' => function ($config) { Arr::del($config, 'mobile.header.transparent'); return $config; }, '4.0.0-beta.11.1' => function ($config) { if (empty(Arr::get($config, 'footer.content.children'))) { Arr::del($config, 'footer.content'); } return $config; }, '3.1.0-beta.0.4' => function ($config) { Arr::updateKeys($config, [ 'header.social_links' => 'header.social_items', 'mobile.header.social_links' => 'mobile.header.social_items', ]); return $config; }, '3.1.0-beta.0.2' => function ($config) { foreach (['mobile.header', 'header'] as $header) { $links = []; foreach ( Arr::filter((array) Arr::get($config, "{$header}.social_links", [])) as $link ) { if ($link) { $links[] = ['link' => $link]; } } if ($links) { Arr::set($config, "{$header}.social_links", $links); } else { Arr::del($config, "{$header}.social_links"); } } return $config; }, '3.0.1.1' => function ($config) { if (Arr::get($config, 'image_metadata')) { Arr::set($config, 'webp', false); } return $config; }, '3.0.0-beta.3.2' => function ($config) { Arr::del($config, 'webp'); return $config; }, '3.0.0-beta.3.1' => function ($config) { if ( Arr::get($config, 'site.image_effect') == 'parallax' && !is_numeric(Arr::get($config, 'site.image_parallax_easing')) ) { Arr::set($config, 'site.image_parallax_easing', '1'); } return $config; }, '3.0.0-beta.1.8' => function ($config) { if (Arr::get($config, 'mobile.dialog.dropbar.animation') == 'slide') { Arr::set($config, 'mobile.dialog.dropbar.animation', 'reveal-top'); } return $config; }, '3.0.0-beta.1.7' => function ($config) { Arr::updateKeys($config, [ 'navbar.boundary_align' => 'navbar.dropdown_target', 'mobile.dialog.dropdown.animation' => 'mobile.dialog.dropbar.animation', ]); if (Arr::get($config, 'mobile.dialog.layout') == 'dropdown-top') { Arr::set($config, 'mobile.dialog.layout', 'dropbar-top'); } if (Arr::get($config, 'mobile.dialog.layout') == 'dropdown-center') { Arr::set($config, 'mobile.dialog.layout', 'dropbar-center'); } // Menu Items if (Arr::has($config, 'menu.items')) { $items = Arr::get($config, 'menu.items', []); foreach ($items as &$item) { Arr::updateKeys($item, [ 'dropdown.justify' => 'dropdown.stretch', ]); if (Arr::get($item, 'dropdown.stretch') == 'dropbar') { Arr::set($item, 'dropdown.stretch', 'navbar-container'); } } Arr::set($config, 'menu.items', $items); } return $config; }, '3.0.0-beta.1.6' => function ($config) { // Menu Positions if (Arr::has($config, 'menu.positions')) { $positions = Arr::get($config, 'menu.positions', []); foreach ($positions as &$position) { if (empty(Arr::get($position, 'style'))) { Arr::set($position, 'style', 'default'); } } Arr::set($config, 'menu.positions', $positions); } return $config; }, '3.0.0-beta.1.5' => function ($config) { Arr::updateKeys($config, [ 'dialog.menu_style' => 'menu.positions.dialog.style', 'dialog.menu_divider' => 'menu.positions.dialog.divider', 'mobile.dialog.menu_style' => 'menu.positions.dialog-mobile.style', 'mobile.dialog.menu_divider' => 'menu.positions.dialog-mobile.divider', ]); return $config; }, '3.0.0-beta.1.4' => function ($config) { // Menu Items if (Arr::has($config, 'menu.items')) { $items = Arr::get($config, 'menu.items', []); foreach ($items as &$item) { Arr::del($item, 'image_width'); Arr::del($item, 'image_height'); Arr::del($item, 'image_svg_inline'); Arr::del($item, 'icon_width'); Arr::del($item, 'image_margin'); } Arr::set($config, 'menu.items', $items); } return $config; }, '3.0.0-beta.1.3' => function ($config) { Arr::update($config, 'menu.positions', function ($positions) { foreach ($positions ?: [] as $position => $menu) { $positions[$position] = isset($menu) ? ['menu' => $menu] : null; } return $positions; }); return $config; }, '3.0.0-beta.1.1' => function ($config) { // Less Arr::updateKeys($config, [ 'less.@navbar-dropdown-dropbar-margin-top' => 'less.@navbar-dropdown-dropbar-padding-top', 'less.@navbar-dropdown-dropbar-margin-bottom' => 'less.@navbar-dropdown-dropbar-padding-bottom', ]); return $config; }, '2.8.0-beta.0.14' => function ($config) { // Less Arr::updateKeys($config, [ 'less.@nav-primary-item-font-size' => 'less.@nav-primary-font-size', 'less.@nav-primary-item-line-height' => 'less.@nav-primary-line-height', ]); return $config; }, '2.8.0-beta.0.11' => function ($config) { Arr::del($config, 'mobile.dialog.dropdown.animation'); Arr::del($config, 'mobile.dialog.dropdown'); return $config; }, '2.8.0-beta.0.10' => function ($config) { [$style] = explode(':', Arr::get($config, 'style')); if ($style == 'makai') { Arr::set($config, 'mobile.header.layout', 'horizontal-right'); } return $config; }, '2.8.0-beta.0.9' => function ($config) { if (Arr::get($config, 'mobile.dialog.layout') == 'dropdown') { Arr::set($config, 'mobile.dialog.layout', 'dropdown-top'); } Arr::set($config, 'mobile.dialog.dropdown.animation', 'slide'); Arr::del($config, 'mobile.dialog.dropdown'); return $config; }, '2.8.0-beta.0.8' => function ($config) { Arr::updateKeys($config, [ 'dialog.menu_center' => 'dialog.text_center', 'mobile.dialog.menu_center' => 'mobile.dialog.text_center', ]); return $config; }, '2.8.0-beta.0.7' => function ($config) { Arr::updateKeys($config, [ 'dialog.menu_center' => 'dialog.text_center', 'mobile.dialog.menu_center' => 'mobile.dialog.text_center', ]); // Menu Items if (Arr::has($config, 'menu.items')) { $items = Arr::get($config, 'menu.items', []); foreach ($items as &$item) { if (Arr::get($item, 'dropdown.width') == 400) { Arr::del($item, 'dropdown.width'); } Arr::updateKeys($item, [ 'image-margin' => 'image_margin', 'image-only' => 'image_only', ]); } Arr::set($config, 'menu.items', $items); } return $config; }, '2.8.0-beta.0.6' => function ($config) { // Less Arr::updateKeys($config, [ 'less.@offcanvas-bar-width-m' => 'less.@offcanvas-bar-width-s', 'less.@offcanvas-bar-padding-vertical-m' => 'less.@offcanvas-bar-padding-vertical-s', 'less.@offcanvas-bar-padding-horizontal-m' => 'less.@offcanvas-bar-padding-horizontal-s', ]); return $config; }, '2.8.0-beta.0.5' => function ($config) { // Convert builder menu items from type 'layout' to 'fragment' if (Arr::has($config, 'menu.items')) { $items = Arr::get($config, 'menu.items', []); foreach ($items as &$item) { if (Arr::get($item, 'content')) { Arr::set($item, 'content.type', 'fragment'); } } Arr::set($config, 'menu.items', $items); } return $config; }, '2.8.0-beta.0.4' => function ($config) { // Mobile Header if (Arr::get($config, 'mobile.logo') == 'left') { if (Arr::get($config, 'mobile.toggle') == 'left') { Arr::set($config, 'mobile.header.layout', 'horizontal-left'); } else { Arr::set($config, 'mobile.header.layout', 'horizontal-right'); } } else { Arr::set($config, 'mobile.header.layout', 'horizontal-center-logo'); } Arr::del($config, 'mobile.logo'); if (Arr::get($config, 'mobile.toggle') == 'left') { Arr::set($config, 'mobile.dialog.toggle', 'navbar-mobile:start'); } else { Arr::set($config, 'mobile.dialog.toggle', 'header-mobile:end'); } Arr::del($config, 'mobile.toggle'); if (Arr::get($config, 'mobile.offcanvas.flip')) { Arr::set( $config, 'mobile.dialog.offcanvas.flip', Arr::get($config, 'mobile.offcanvas.flip'), ); } else { Arr::set($config, 'mobile.dialog.offcanvas.flip', false); } Arr::del($config, 'mobile.offcanvas.flip'); Arr::updateKeys($config, [ // Mobile Header 'mobile.logo_padding_remove' => 'mobile.header.logo_padding_remove', // Mobile Navbar 'mobile.sticky' => 'mobile.navbar.sticky', // Mobile Dialog 'mobile.animation' => function ($value) use (&$config) { $menu_center_vertical = Arr::get($config, 'mobile.menu_center_vertical'); Arr::del($config, 'mobile.menu_center_vertical'); switch ($value) { case 'offcanvas': return [ 'mobile.dialog.layout' => $menu_center_vertical ? 'offcanvas-center' : 'offcanvas-top', ]; case 'modal': return [ 'mobile.dialog.layout' => $menu_center_vertical ? 'modal-center' : 'modal-top', ]; case 'dropdown': return ['mobile.dialog.layout' => 'dropdown']; } }, 'mobile.toggle_text' => 'mobile.dialog.toggle_text', 'mobile.close_button' => 'mobile.dialog.close', 'mobile.menu_style' => 'mobile.dialog.menu_style', 'mobile.menu_divider' => 'mobile.dialog.menu_divider', 'mobile.menu_center' => 'mobile.dialog.menu_center', 'mobile.offcanvas.mode' => 'mobile.dialog.offcanvas.mode', 'mobile.dropdown' => 'mobile.dialog.dropdown', 'social_links' => 'header.social_links', ]); // Mobile Search and Social settings foreach (['search', 'social'] as $key) { if (Arr::get($config, "header.{$key}")) { Arr::set($config, "mobile.header.{$key}", 'dialog-mobile:end'); } } foreach ( ['search_style', 'social_links', 'social_target', 'social_style', 'social_gap'] as $key ) { if (Arr::has($config, "header.{$key}")) { Arr::set($config, "mobile.header.{$key}", Arr::get($config, "header.{$key}")); } } return $config; }, '2.8.0-beta.0.3' => function ($config) { foreach (['bgx', 'bgy'] as $prop) { $key = "site.image_parallax_{$prop}"; $start = implode( ',', array_map('trim', explode(',', Arr::get($config, "{$key}_start", ''))), ); $end = implode( ',', array_map('trim', explode(',', Arr::get($config, "{$key}_end", ''))), ); if ($start !== '' || $end !== '') { Arr::set( $config, $key, implode(',', [$start !== '' ? $start : 0, $end !== '' ? $end : 0]), ); } Arr::del($config, "{$key}_start"); Arr::del($config, "{$key}_end"); } return $config; }, '2.8.0-beta.0.1' => function ($config) { // Stacked Center Split if (Arr::get($config, 'header.layout') == 'stacked-center-split') { Arr::set($config, 'header.layout', 'stacked-center-split-a'); } // Stacked Left if (Arr::get($config, 'header.layout') == 'stacked-left-b') { Arr::set($config, 'header.push_index', 1); } if (in_array(Arr::get($config, 'header.layout'), ['stacked-left-a', 'stacked-left-b'])) { Arr::set($config, 'header.layout', 'stacked-left'); } // Dialog Layout if ( in_array(Arr::get($config, 'header.layout'), [ 'offcanvas-top-b', 'offcanvas-center-b', 'modal-top-b', 'modal-center-b', ]) ) { Arr::set($config, 'dialog.push_index', 1); } if (preg_match('/offcanvas-top/', Arr::get($config, 'header.layout'))) { Arr::set($config, 'dialog.layout', 'offcanvas-top'); } if (preg_match('/offcanvas-center/', Arr::get($config, 'header.layout'))) { Arr::set($config, 'dialog.layout', 'offcanvas-center'); } if (preg_match('/modal-top/', Arr::get($config, 'header.layout'))) { Arr::set($config, 'dialog.layout', 'modal-top'); } if (preg_match('/modal-center/', Arr::get($config, 'header.layout'))) { Arr::set($config, 'dialog.layout', 'modal-center'); } if (preg_match('/(offcanvas|modal)/', Arr::get($config, 'header.layout'))) { if (Arr::get($config, 'header.logo_center')) { Arr::set($config, 'header.layout', 'horizontal-center-logo'); Arr::del($config, 'header.logo_center'); } else { Arr::set($config, 'header.layout', 'horizontal-left'); } } // Dialog Options Arr::updateKeys($config, [ 'navbar.toggle_text' => 'dialog.toggle_text', 'navbar.toggle_menu_style' => 'dialog.menu_style', 'navbar.toggle_menu_divider' => 'dialog.menu_divider', 'navbar.toggle_menu_center' => 'dialog.menu_center', 'navbar.offcanvas.mode' => 'dialog.offcanvas.mode', 'navbar.offcanvas.overlay' => 'dialog.offcanvas.overlay', ]); // Navbar if (Arr::get($config, 'navbar.dropbar')) { Arr::set($config, 'navbar.dropbar', true); } // Search if (Arr::get($config, 'header.search')) { Arr::set($config, 'header.search', Arr::get($config, 'header.search') . ':end'); } // Social if (Arr::get($config, 'header.social') == 'toolbar-left') { Arr::set($config, 'header.social', 'toolbar-right:start'); } elseif (Arr::get($config, 'header.social')) { Arr::set($config, 'header.social', Arr::get($config, 'header.social') . ':end'); } // Menu Items if (Arr::has($config, 'menu.items')) { $items = Arr::get($config, 'menu.items', []); foreach ($items as &$item) { if (Arr::get($item, 'justify')) { Arr::set($item, 'dropdown.justify', 'navbar'); Arr::del($item, 'justify'); } if (Arr::get($item, 'columns')) { Arr::set($item, 'dropdown.columns', Arr::get($item, 'columns')); Arr::del($item, 'columns'); } } Arr::set($config, 'menu.items', $items); } return $config; }, '2.7.15.1' => function ($config) { // Less if (Arr::get($config, 'less.@navbar-mode-border-vertical') === 'true') { Arr::set($config, 'less.@navbar-mode-border-vertical', 'partial'); } return $config; }, '2.5.0-beta.1.2' => function ($config) { if (Arr::has($config, 'menu.items')) { $items = Arr::get($config, 'menu.items', []); foreach ($items as &$item) { Arr::updateKeys($item, [ 'icon' => 'image', 'icon-only' => 'image-only', ]); } Arr::set($config, 'menu.items', $items); } return $config; }, '2.4.14' => function ($config) { // Less if (Arr::get($config, 'less.@navbar-mode') === 'border') { Arr::set($config, 'less.@navbar-mode', 'border-always'); } if (Arr::get($config, 'less.@navbar-nav-item-line-slide-mode') === 'false') { Arr::set($config, 'less.@navbar-nav-item-line-slide-mode', 'left'); } return $config; }, '2.1.0-beta.0.1' => function ($config) { // Less Arr::updateKeys($config, [ 'less.@width-xxlarge-width' => 'less.@width-2xlarge-width', 'less.@global-xxlarge-font-size' => 'less.@global-2xlarge-font-size', ]); return $config; }, '2.0.11.1' => function ($config) { $style = Arr::get($config, 'style'); $mapping = [ 'framerate:dark-blue' => 'framerate:black-blue', 'framerate:dark-lightblue' => 'framerate:dark-blue', 'joline:black-pink' => 'joline:dark-pink', 'max:black-black' => 'max:dark-black', ]; if (array_key_exists($style, $mapping)) { Arr::set($config, 'style', $mapping[$style]); } return $config; }, '2.0.8.1' => function ($config) { $style = Arr::get($config, 'style'); $mapping = [ 'copper-hill:white-turquoise' => 'copper-hill:light-turquoise', 'florence:white-lilac' => 'florence:white-beige', 'pinewood-lake:white-green' => 'pinewood-lake:light-green', 'pinewood-lake:white-petrol' => 'pinewood-lake:light-petrol', ]; if (array_key_exists($style, $mapping)) { Arr::set($config, 'style', $mapping[$style]); } return $config; }, '2.0.0-beta.5.1' => function ($config) { foreach (['blog.width', 'post.width', 'header.width'] as $prop) { if (Arr::get($config, $prop) == '') { Arr::set($config, $prop, 'default'); } if (Arr::get($config, $prop) == 'none') { Arr::set($config, $prop, ''); } } [$style] = explode(':', Arr::get($config, 'style')); foreach ( [ 'site.toolbar_width', 'header.width', 'top.width', 'bottom.width', 'blog.width', 'post.width', ] as $prop ) { if (!in_array($style, ['jack-baker', 'morgan-consulting', 'vibe'])) { if (Arr::get($config, $prop) == 'large') { Arr::set($config, $prop, 'xlarge'); } } if ( in_array($style, [ 'craft', 'district', 'florence', 'makai', 'matthew-taylor', 'pinewood-lake', 'summit', 'tomsen-brody', 'trek', 'vision', 'yard', ]) ) { if (Arr::get($config, $prop) == 'default') { Arr::set($config, $prop, 'large'); } } } // Less if (!in_array($style, ['jack-baker', 'morgan-consulting', 'vibe'])) { Arr::updateKeys($config, [ 'less.@container-large-max-width' => 'less.@container-xlarge-max-width', ]); } if ( in_array($style, [ 'craft', 'district', 'florence', 'makai', 'matthew-taylor', 'pinewood-lake', 'summit', 'tomsen-brody', 'trek', 'vision', 'yard', ]) ) { Arr::updateKeys($config, [ 'less.@container-max-width' => 'less.@container-large-max-width', ]); } return $config; }, '1.22.0-beta.0.1' => function ($config) { // Rename Top and Bottom options foreach (['top', 'bottom'] as $position) { Arr::set( $config, "{$position}.column_gap", Arr::get($config, "{$position}.grid_gutter", ''), ); Arr::set( $config, "{$position}.row_gap", Arr::get($config, "{$position}.grid_gutter", ''), ); Arr::del($config, "{$position}.grid_gutter"); Arr::set( $config, "{$position}.divider", Arr::get($config, "{$position}.grid_divider", ''), ); Arr::del($config, "{$position}.grid_divider"); } // Rename Blog options if (Arr::get($config, 'blog.column_gutter')) { Arr::set($config, 'blog.grid_column_gap', 'large'); } Arr::set($config, 'blog.grid_row_gap', 'large'); Arr::del($config, 'blog.column_gutter'); Arr::set($config, 'blog.grid_breakpoint', Arr::get($config, 'blog.column_breakpoint', 'm')); Arr::del($config, 'blog.column_breakpoint'); // Rename Sidebar options foreach (['width', 'breakpoint', 'first', 'gutter', 'divider'] as $prop) { Arr::updateKeys($config, ["sidebar.{$prop}" => "main_sidebar.{$prop}"]); } return $config; }, '1.20.4.1' => function ($config) { Arr::updateKeys($config, [ // Less 'less.@theme-toolbar-padding-vertical' => fn($value) => [ 'less.@theme-toolbar-padding-top' => $value, 'less.@theme-toolbar-padding-bottom' => $value, ], // Header settings 'site.toolbar_fullwidth' => function ($value) { if ($value) { return ['site.toolbar_width' => 'expand']; } }, ]); return $config; }, '1.20.0-beta.7' => function ($config) { // Remove empty menu items if (Arr::has($config, 'menu.items')) { Arr::set( $config, 'menu.items', array_filter((array) Arr::get($config, 'menu.items', [])), ); } return $config; }, '1.20.0-beta.6' => function ($config) { Arr::updateKeys($config, [ // Header settings 'header.fullwidth' => function ($value) { if ($value) { return ['header.width' => 'expand']; } }, ]); if (Arr::get($config, 'header.layout') == 'toggle-offcanvas') { Arr::set($config, 'header.layout', 'offcanvas-top-a'); } if (Arr::get($config, 'header.layout') == 'toggle-modal') { Arr::set($config, 'header.layout', 'modal-center-a'); Arr::set($config, 'navbar.toggle_menu_style', 'primary'); Arr::set($config, 'navbar.toggle_menu_center', true); } if ( Arr::get($config, 'mobile.animation') == 'modal' && !Arr::has($config, 'mobile.menu_center') ) { Arr::set($config, 'mobile.menu_style', 'primary'); Arr::set($config, 'mobile.menu_center', true); Arr::set($config, 'mobile.menu_center_vertical', true); } if ( Arr::get($config, 'site.boxed.padding') && (!Arr::has($config, 'site.boxed.margin_top') || !Arr::has($config, 'site.boxed.margin_bottom')) ) { Arr::set($config, 'site.boxed.margin_top', true); Arr::set($config, 'site.boxed.margin_bottom', true); } if (!Arr::has($config, 'cookie.mode') && Arr::get($config, 'cookie.active')) { Arr::set($config, 'cookie.mode', 'notification'); } if (!Arr::has($config, 'cookie.button_consent_style')) { Arr::set( $config, 'cookie.button_consent_style', Arr::get($config, 'cookie.button_style'), ); } foreach (['top', 'bottom'] as $position) { if (Arr::get($config, "{$position}.vertical_align") === true) { Arr::set($config, "{$position}.vertical_align", 'middle'); } if (Arr::get($config, "{$position}.style") === 'video') { Arr::set($config, "{$position}.style", 'default'); } if (Arr::get($config, "{$position}.width") == '1') { Arr::set($config, "{$position}.width", 'default'); } if (Arr::get($config, "{$position}.width") == '2') { Arr::set($config, "{$position}.width", 'small'); } if (Arr::get($config, "{$position}.width") == '3') { Arr::set($config, "{$position}.width", 'expand'); } } foreach (Arr::get($config, 'less', []) as $key => $value) { if ( in_array($key, [ '@heading-primary-line-height', '@heading-hero-line-height-m', '@heading-hero-line-height', ]) ) { Arr::del($config, "less.{$key}"); } elseif (Str::contains($key, ['heading-primary-', 'heading-hero-'])) { Arr::set( $config, 'less.' . strtr($key, [ 'heading-primary-line-height-l' => 'heading-medium-line-height', 'heading-primary-' => 'heading-medium-', 'heading-hero-line-height-l' => 'heading-xlarge-line-height', 'heading-hero-' => 'heading-xlarge-', ]), $value, ); Arr::del($config, "less.{$key}"); } } [$style] = explode(':', Arr::get($config, 'style', '')); $less = Arr::get($config, 'less', []); foreach ( [ [ ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'], ['medium', 'small'], ], [['trek', 'fjord'], ['medium', 'large']], [['juno', 'vibe', 'yard'], ['xlarge', 'medium']], [ ['district', 'florence', 'flow', 'nioh-studio', 'summit', 'vision'], ['xlarge', 'large'], ], [['lilian'], ['xlarge', '2xlarge']], ] as $change ) { [$styles, $transform] = $change; if (in_array($style, $styles)) { foreach ($less as $key => $value) { if (str_contains($key, "heading-{$transform[0]}")) { Arr::set( $config, 'less.' . str_replace( "heading-{$transform[0]}", "heading-{$transform[1]}", $key, ), $value, ); } } } } return $config; }, ]; theme/config/theme.json000064400000011460151666572140011127 0ustar00{ "defaults": { "menu": { "items": {}, "positions": { "navbar": { "style": "default", "image_margin": true, "image_align": "center" }, "header": { "style": "default", "image_margin": true, "image_align": "center" }, "toolbar-left": { "style": "default", "image_margin": true, "image_align": "center" }, "toolbar-right": { "style": "default", "image_margin": true, "image_align": "center" }, "dialog": { "style": "default", "image_margin": true, "image_align": "center" }, "navbar-mobile": { "style": "default", "image_margin": true, "image_align": "center" }, "header-mobile": { "style": "default", "image_margin": true, "image_align": "center" }, "dialog-mobile": { "style": "default", "image_margin": true, "image_align": "center" } } }, "site": { "layout": "full", "boxed": { "alignment": 1 }, "image_size": "cover", "image_position": "center-center", "image_effect": "fixed", "toolbar_width": "default", "breadcrumbs_show_home": true, "breadcrumbs_show_current": true, "breadcrumbs_home_text": "", "main_section": { "height": true } }, "header": { "layout": "horizontal-right", "width": "default", "search_layout": "input-dropdown", "search_dropdown.stretch": "navbar", "search_dropdown.size": true, "search_icon": "left", "social_gap": "small" }, "navbar": { "sticky": 0, "dropdown_align": "left" }, "dialog": { "layout": "offcanvas-top", "toggle": "header:end", "menu_style": "default", "offcanvas": { "mode": "slide", "flip": true } }, "mobile": { "breakpoint": "m", "header": { "layout": "horizontal-right", "search_layout": "input-dropdown", "search_dropdown.stretch": "navbar", "search_dropdown.size": true, "search_icon": "left" }, "navbar": { "sticky": 0 }, "dialog": { "layout": "offcanvas-top", "toggle": "header-mobile:end", "close": true, "menu_style": "default", "offcanvas": { "mode": "slide", "flip": true }, "dropbar": { "animation": "reveal-top" } } }, "top": { "style": "default", "width": "default", "breakpoint": "m", "image_position": "center-center" }, "main_sidebar": { "width": "1-4", "min_width": "200", "breakpoint": "m", "first": 0, "divider": 0 }, "bottom": { "style": "default", "width": "default", "breakpoint": "m", "image_position": "center-center" }, "footer": { "content": "" }, "webp": true }, "social_icons": [ "500px", "android", "android-robot", "apple", "behance", "bluesky", "discord", "dribbble", "etsy", "facebook", "flickr", "foursquare", "github", "github-alt", "gitter", "google", "instagram", "joomla", "linkedin", "mastodon", "microsoft", "pinterest", "reddit", "signal", "soundcloud", "telegram", "threads", "tiktok", "tripadvisor", "tumblr", "twitch", "twitter", "uikit", "vimeo", "whatsapp", "wordpress", "x", "xing", "yelp", "yootheme", "youtube" ] } theme/config/customizer.json000064400000335442151666572140012242 0ustar00{ "@import": [ "../../builder/config/customizer.json", "../../styler/config/customizer.json", "../../theme-cookie/config/customizer.json", "../../theme-settings/config/customizer.json" ], "help": "https://yootheme.com", "sections": { "layout": { "title": "Layout", "priority": 10, "fields": { "layout": { "type": "menu", "items": { "site": "Site", "header": "Header", "mobile": "Mobile", "top": "Top", "sidebar": "Sidebar", "bottom": "Bottom", "footer-builder": "Footer", "system-blog": "Blog", "system-post": "Post" } } } } }, "panels": { "site": { "title": "Site", "width": 400, "fields": { "logo.text": { "label": "Logo Text", "description": "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link." }, "logo.image": { "label": "Logo Image", "type": "image" }, "logo.image_svg_inline": { "description": "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.", "type": "checkbox", "text": "Inline SVG logo" }, "logo._image_dimension": { "type": "grid", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "width": "1-2", "fields": { "logo.image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "logo.image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } } }, "show": "logo.image || logo.image_inverse" }, "logo.image_inverse": { "label": "Inverse Logo (Optional)", "description": "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.", "type": "image" }, "logo.image_mobile": { "label": "Mobile Logo (Optional)", "description": "Select an alternative logo, which will be used on small devices.", "type": "image" }, "logo._image_mobile_dimension": { "type": "grid", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "width": "1-2", "fields": { "logo.image_mobile_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "logo.image_mobile_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } } }, "show": "logo.image_mobile || logo.image_mobile_inverse" }, "logo.image_mobile_inverse": { "label": "Mobile Inverse Logo (Optional)", "description": "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.", "type": "image" }, "logo.image_dialog": { "label": "Dialog Logo (Optional)", "description": "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.", "type": "image" }, "logo._image_dialog_dimension": { "type": "grid", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "width": "1-2", "fields": { "logo.image_dialog_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "logo.image_dialog_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } } }, "show": "logo.image_dialog" }, "site.layout": { "label": "Layout", "type": "select", "options": { "Full Width": "full", "Boxed": "boxed" } }, "site.boxed.alignment": { "type": "checkbox", "text": "Center", "enable": "site.layout == 'boxed'" }, "site.boxed.margin_top": { "type": "checkbox", "text": "Add top margin", "enable": "site.layout == 'boxed'" }, "site.boxed.margin_bottom": { "type": "checkbox", "text": "Add bottom margin", "enable": "site.layout == 'boxed'" }, "site.boxed.header_outside": { "type": "checkbox", "text": "Display header outside the container", "enable": "site.layout == 'boxed'" }, "site.boxed.header_transparent": { "type": "checkbox", "text": "Make header transparent", "enable": "site.layout == 'boxed' && site.boxed.header_outside" }, "site.boxed.media": { "label": "Image", "description": "Upload an optional background image that covers the page. It will be fixed while scrolling.", "type": "image", "enable": "site.layout == 'boxed'" }, "site.boxed._media": { "type": "button-panel", "panel": "site-media", "text": "Edit Settings", "show": "site.layout == 'boxed' && site.boxed.media" }, "site.boxed.header_text_color": { "label": "Text Color", "type": "select", "options": { "None": "", "Light Text": "light", "Dark Text": "dark" }, "enable": "site.layout == 'boxed' && site.boxed.header_outside && (site.boxed.header_transparent || header.transparent) && site.boxed.media" }, "site.toolbar_width": { "label": "Toolbar", "type": "select", "options": { "Default": "default", "Small": "small", "Large": "large", "X-Large": "xlarge", "Expand": "expand" } }, "site.toolbar_center": { "type": "checkbox", "text": "Center" }, "site.toolbar_transparent": { "type": "checkbox", "text": "Inherit transparency from header" }, "site.breadcrumbs": { "label": "Breadcrumbs", "type": "checkbox", "text": "Display the breadcrumb navigation" }, "site.breadcrumbs_show_current": { "text": "Show current page", "type": "checkbox", "enable": "site.breadcrumbs" }, "site.breadcrumbs_show_home": { "description": "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.", "text": "Show home link", "type": "checkbox", "enable": "site.breadcrumbs" }, "site.breadcrumbs_home_text": { "label": "Breadcrumbs Home Text", "description": "Enter the text for the home link.", "attrs": { "placeholder": "Home" }, "enable": "site.breadcrumbs && site.breadcrumbs_show_home" }, "site.main_section.height": { "label": "Main Section Height", "description": "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.", "text": "Expand height", "type": "checkbox" } } }, "site-media": { "title": "Image", "width": 400, "fields": { "site._image_dimension": { "type": "grid", "description": "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.", "width": "1-2", "fields": { "site.image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "site.image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } } } }, "site.image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" } }, "site.image_size": { "label": "Image Size", "description": "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.", "type": "select", "options": { "Auto": "", "Cover": "cover", "Contain": "contain" } }, "site.image_position": { "label": "Image Position", "description": "Set the initial background position, relative to the page layer.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "center-center", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" } }, "site.image_effect": { "label": "Image Effect", "description": "Add a parallax effect or fix the background with regard to the viewport while scrolling.", "type": "select", "options": { "None": "", "Parallax": "parallax", "Fixed": "fixed" } }, "site.image_parallax_bgx": { "text": "Translate X", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 }, "show": "site.image_effect == 'parallax'" }, "site.image_parallax_bgy": { "text": "Translate Y", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 }, "show": "site.image_effect == 'parallax'" }, "site.image_parallax_easing": { "label": "Parallax Easing", "description": "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.", "type": "range", "attrs": { "min": -2, "max": 2, "step": 0.1 }, "show": "site.image_effect == 'parallax'" }, "site.image_parallax_breakpoint": { "label": "Parallax Breakpoint", "description": "Display the parallax effect only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "x" }, "show": "site.image_effect == 'parallax'" }, "site.image_visibility": { "label": "Visibility", "description": "Display the image only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } }, "site.media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.", "type": "color" }, "site.media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" } }, "site.media_overlay": { "label": "Overlay Color", "description": "Set an additional transparent overlay to soften the image.", "type": "color" } } }, "header": { "title": "Header", "width": 400, "fields": { "header.layout": { "label": "Layout", "description": "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.", "title": "Select header layout", "type": "select-img", "options": { "horizontal-left": { "label": "Horizontal Left", "src": "$ASSETS/images/header/horizontal-left.svg" }, "horizontal-center": { "label": "Horizontal Center", "src": "$ASSETS/images/header/horizontal-center.svg" }, "horizontal-right": { "label": "Horizontal Right", "src": "$ASSETS/images/header/horizontal-right.svg" }, "horizontal-justify": { "label": "Horizontal Justify", "src": "$ASSETS/images/header/horizontal-justify.svg" }, "horizontal-center-logo": { "label": "Horizontal Center Logo", "src": "$ASSETS/images/header/horizontal-center-logo.svg" }, "stacked-center-a": { "label": "Stacked Center A", "src": "$ASSETS/images/header/stacked-center-a.svg" }, "stacked-center-b": { "label": "Stacked Center B", "src": "$ASSETS/images/header/stacked-center-b.svg" }, "stacked-center-c": { "label": "Stacked Center C", "src": "$ASSETS/images/header/stacked-center-c.svg" }, "stacked-center-split-a": { "label": "Stacked Center Split A", "src": "$ASSETS/images/header/stacked-center-split-a.svg" }, "stacked-center-split-b": { "label": "Stacked Center Split B", "src": "$ASSETS/images/header/stacked-center-split-b.svg" }, "stacked-left": { "label": "Stacked Left", "src": "$ASSETS/images/header/stacked-left.svg" }, "stacked-justify": { "label": "Stacked Justify", "src": "$ASSETS/images/header/stacked-justify.svg" } } }, "header.split_index": { "label": "Split Items", "description": "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.", "type": "select", "options": { "Auto": "", "After 1 Item": 1, "After 2 Items": 2, "After 3 Items": 3, "After 4 Items": 4, "After 5 Items": 5, "After 6 Items": 6, "After 7 Items": 7, "After 8 Items": 8, "After 9 Items": 9, "After 10 Items": 10 }, "show": "$match(header.layout, '^stacked-center-(split-|c)')" }, "header.push_index": { "label": "Push Items", "description": "Set the number of items after which the following items are pushed to the right.", "type": "select", "options": { "None": "", "After 1 Item": 1, "After 2 Items": 2, "After 3 Items": 3, "After 4 Items": 4, "After 5 Items": 5, "After 6 Items": 6, "After 7 Items": 7, "After 8 Items": 8, "After 9 Items": 9, "After 10 Items": 10 }, "show": "$match(header.layout, '^stacked-left')" }, "header.width": { "label": "Max Width", "type": "select", "options": { "Default": "default", "Small": "small", "Large": "large", "X-Large": "xlarge", "Expand": "expand" } }, "header.logo_padding_remove": { "description": "Set the maximum header width.", "type": "checkbox", "text": "Remove left logo padding", "enable": "header.width == 'expand' && !$match(header.layout, '^stacked|^horizontal-center-logo')" }, "navbar.sticky": { "label": "Navbar", "description": "Stick the navbar at the top of the viewport while scrolling or only when scrolling up.", "type": "select", "options": { "Static": 0, "Sticky": 1, "Sticky on scroll up": 2 } }, "navbar.style": { "label": "Navbar Style", "description": "Select the navbar style.", "type": "select", "options": { "Default": "", "Primary": "primary" } }, "header.transparent": { "label": "Transparent Background", "type": "checkbox", "text": "Make header transparent" }, "header.transparent_color_separately": { "type": "checkbox", "text": "Color navbar parts separately", "enable": "header.transparent && !header.blend" }, "header.blend": { "description": "Make the header transparent even when it's sticky.", "type": "checkbox", "text": "Blend with page content", "enable": "header.transparent" }, "navbar.dropdown_align": { "label": "Dropdown", "type": "select", "options": { "Left": "left", "Right": "right", "Center": "center" } }, "navbar.dropdown_target": { "type": "checkbox", "text": "Align to navbar" }, "navbar.dropbar": { "type": "checkbox", "text": "Enable dropbar" }, "navbar.parent_icon": { "type": "checkbox", "text": "Show parent icon" }, "navbar.dropdown_click": { "description": "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.", "type": "checkbox", "text": "Enable click mode on text items" }, "dialog.toggle": { "label": "Dialog Toggle", "type": "select", "options": { "Navbar Start": "navbar:start", "Navbar End": "navbar:end", "Header Start": "header:start", "Header End": "header:end" } }, "dialog.toggle_text": { "type": "checkbox", "text": "Show the menu text next to the icon" }, "dialog.layout": { "label": "Dialog Layout", "title": "Select dialog layout", "type": "select-img", "options": { "dropbar-top": { "label": "Dropbar Top", "src": "$ASSETS/images/dialog/dropbar-top.svg" }, "dropbar-center": { "label": "Dropbar Center", "src": "$ASSETS/images/dialog/dropbar-center.svg" }, "offcanvas-top": { "label": "Offcanvas Top", "src": "$ASSETS/images/dialog/offcanvas-top.svg" }, "offcanvas-center": { "label": "Offcanvas Center", "src": "$ASSETS/images/dialog/offcanvas-center.svg" }, "modal-top": { "label": "Modal Top", "src": "$ASSETS/images/dialog/modal-top.svg" }, "modal-center": { "label": "Modal Center", "src": "$ASSETS/images/dialog/modal-center.svg" } } }, "dialog.text_center": { "type": "checkbox", "text": "Center horizontally" }, "dialog._dropbar": { "type": "button-panel", "text": "Edit Dropbar", "panel": "dialog-dropbar", "show": "$match(dialog.layout, '^dropbar')" }, "dialog._offcanvas": { "type": "button-panel", "text": "Edit Offcanvas", "panel": "dialog-offcanvas", "show": "$match(dialog.layout, '^offcanvas')" }, "dialog._modal": { "type": "button-panel", "text": "Edit Modal", "panel": "dialog-modal", "show": "$match(dialog.layout, '^modal')" }, "dialog._description": { "description": "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.", "type": "description" }, "dialog.push_index": { "label": "Dialog Push Items", "description": "Set the number of items after which the following items are pushed to the bottom.", "type": "select", "options": { "None": "", "After 1 Item": 1, "After 2 Items": 2, "After 3 Items": 3, "After 4 Items": 4, "After 5 Items": 5, "After 6 Items": 6, "After 7 Items": 7, "After 8 Items": 8, "After 9 Items": 9, "After 10 Items": 10 } }, "header.search": { "label": "Search", "description": "Select the position that will display the search.", "type": "select", "options": { "Hide": "", "Navbar Start": "navbar:start", "Navbar End": "navbar:end", "Header Start": "header:start", "Header End": "header:end", "Dialog Start": "dialog:start", "Dialog End": "dialog:end", "Logo End": "logo:end" } }, "header.search_layout": { "label": "Search Layout", "title": "Select search layout", "type": "select-img", "options": { "input-dropdown": { "label": "Input Dropdown", "src": "$ASSETS/images/search/input-dropdown.svg" }, "dropdown": { "label": "Toggle Dropdown", "src": "$ASSETS/images/search/dropdown.svg" }, "input-dropbar": { "label": "Input Dropbar", "src": "$ASSETS/images/search/input-dropbar.svg" }, "dropbar": { "label": "Toggle Dropbar", "src": "$ASSETS/images/search/dropbar.svg" }, "modal": { "label": "Toggle Modal", "src": "$ASSETS/images/search/modal.svg" } }, "enable": "header.search && !$match(header.search, '^dialog')" }, "header.search_expand": { "type": "checkbox", "text": "Expand input width", "enable": "header.search && !$match(header.search, '^dialog') && $match(header.search_layout, '^input-') && $match(header.layout, '^horizontal-(left|center|right|justify)|stacked-(left|justify)$')" }, "header.search_prevent_submit": { "text": "Prevent form submit if live search is used", "type": "checkbox", "enable": "header.search && !$match(header.search, '^dialog')" }, "header.search_dropdown": { "type": "button-panel", "text": "Edit Dropdown", "panel": "search-dropdown", "show": "header.search_layout == 'input-dropdown' || header.search_layout == 'dropdown'", "enable": "header.search && !$match(header.search, '^dialog')" }, "header.search_modal": { "type": "button-panel", "text": "Edit Modal", "panel": "search-modal", "show": "header.search_layout == 'modal'", "enable": "header.search && !$match(header.search, '^dialog')" }, "header.search_dropbar": { "type": "button-panel", "text": "Edit Dropbar", "panel": "search-dropbar", "show": "header.search_layout == 'input-dropbar' || header.search_layout == 'dropbar'", "enable": "header.search && !$match(header.search, '^dialog')" }, "header.search_description": { "description": "Show an input field or an icon to open the search in a dropdown, dropbar or modal. To show live search results, assign a template in the Templates panel.", "type": "description" }, "header.search_icon": { "label": "Search Icon", "description": "Display a search icon on the left or right of the input field. The icon on the right can be clicked to submit the search.", "type": "select", "options": { "None": "", "Left (Not Clickable)": "left", "Right (Clickable)": "right" }, "enable": "header.search" }, "header.social": { "label": "Social Icons", "type": "select", "options": { "Hide": "", "Toolbar Left Start": "toolbar-left:start", "Toolbar Left End": "toolbar-left:end", "Toolbar Right Start": "toolbar-right:start", "Toolbar Right End": "toolbar-right:end", "Navbar Start": "navbar:start", "Navbar End": "navbar:end", "Header Start": "header:start", "Header End": "header:end", "Dialog Start": "dialog:start", "Dialog End": "dialog:end", "Logo End": "logo:end" } }, "header.social_items": { "type": "button-panel", "text": "Edit Items", "panel": "social-items", "enable": "header.social" }, "header.social_target": { "type": "checkbox", "text": "Open in a new window", "enable": "header.social" }, "header.social_style": { "type": "checkbox", "text": "Display icons as buttons", "enable": "header.social" }, "header.social_image_svg_inline": { "type": "checkbox", "text": "Make SVG stylable with CSS", "description": "Select the position that will display the social icons.", "enable": "header.social" }, "header.social_width": { "label": "Social Icons Size", "description": "Set the icon width.", "attrs": { "placeholder": "20" }, "enable": "header.social" }, "header.social_gap": { "label": "Social Icons Gap", "description": "Set the size of the gap between the social icons.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "header.social" } } }, "dialog-dropbar": { "title": "Dialog Dropbar", "width": 400, "fields": { "dialog.dropbar.animation": { "label": "Dropbar Animation", "description": "Select the animation on how the dropbar appears below the navbar.", "type": "select", "options": { "Fade": "", "Slide Top": "reveal-top", "Slide Left": "slide-left", "Slide Right": "slide-right" } }, "dialog.dropbar.width": { "label": "Dropbar Width", "description": "Set the dropbar width if it slides in from the left or right.", "type": "select", "options": { "None": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "$match(dialog.dropbar.animation, '^slide')" }, "dialog.dropbar.padding_remove_horizontal": { "label": "Dropbar Padding", "type": "checkbox", "text": "Remove horizontal padding" }, "dialog.dropbar.padding_remove_vertical": { "type": "checkbox", "text": "Remove vertical padding" }, "dialog.dropbar.content_width": { "label": "Dropbar Content Width", "description": "Set the width of the dropbar content.", "type": "select", "options": { "None": "", "Medium": "width-medium", "Large": "width-large", "X-Large": "width-xlarge", "2X-Large": "width-2xlarge", "Container Default": "container", "Container Small": "container-small", "Container Large": "container-large", "Container X-Large": "container-xlarge" } } } }, "dialog-offcanvas": { "title": "Dialog Offcanvas", "width": 400, "fields": { "dialog.offcanvas.mode": { "label": "Offcanvas Mode", "type": "select", "options": { "Slide": "slide", "Reveal": "reveal", "Push": "push" } }, "dialog.offcanvas.flip": { "type": "checkbox", "text": "Display on the right" }, "dialog.offcanvas.overlay": { "type": "checkbox", "text": "Overlay the site" } } }, "dialog-modal": { "title": "Dialog Modal", "width": 400, "fields": { "dialog.modal.width": { "label": "Modal Width", "description": "Set the content width.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" } } } }, "search-dropdown": { "title": "Search Dropdown", "width": 400, "fields": { "header.search_dropdown.stretch": { "label": "Dropdown Stretch", "description": "Stretch the dropdown to the width of the navbar or the navbar container.", "type": "select", "options": { "None": "", "Navbar": "navbar", "Navbar Container": "navbar-container" } }, "header.search_dropdown.width": { "label": "Dropdown Width", "description": "Set the dropdown width in pixels (e.g. 600).", "enable": "!header.search_dropdown.stretch" }, "header.search_dropdown.size": { "label": "Dropdown Padding", "type": "checkbox", "text": "Large padding" }, "header.search_dropdown.padding_remove_horizontal": { "type": "checkbox", "text": "Remove horizontal padding" }, "header.search_dropdown.padding_remove_vertical": { "type": "checkbox", "text": "Remove vertical padding" }, "header.search_dropdown.align": { "label": "Dropdown Alignment", "type": "select", "options": { "Default": "", "Left": "left", "Right": "right", "Center": "center" }, "enable": "!header.search_dropdown.stretch" } } }, "search-modal": { "title": "Search Modal", "width": 400, "fields": { "header.search_modal.width": { "label": "Modal Width", "type": "select", "options": { "Default": "", "Container": "container", "Expand": "expand", "Full": "full" } }, "header.search_modal.close": { "description": "Stretch the modal to the width of the navbar or the navbar container, or show a full modal window.", "type": "checkbox", "text": "Show close icon", "enable": "header.search_modal.width != 'full'" } } }, "search-dropbar": { "title": "Search Dropbar", "width": 400, "fields": { "header.search_dropbar.animation": { "label": "Dropbar Animation", "description": "Select the animation on how the dropbar appears below the navbar.", "type": "select", "options": { "Fade": "", "Slide Top": "reveal-top", "Slide Left": "slide-left", "Slide Right": "slide-right" } }, "header.search_dropbar.width": { "label": "Dropbar Width", "description": "Set the dropbar width if it slides in from the left or right.", "type": "select", "options": { "None": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "$match(header.search_dropbar.animation, '^slide')" }, "header.search_dropbar.padding_remove_horizontal": { "label": "Dropbar Padding", "type": "checkbox", "text": "Remove horizontal padding" }, "header.search_dropbar.padding_remove_vertical": { "type": "checkbox", "text": "Remove vertical padding" }, "header.search_dropbar.content_width": { "label": "Dropbar Content Width", "description": "Set the width of the dropbar content.", "type": "select", "options": { "None": "", "Medium": "width-medium", "Large": "width-large", "X-Large": "width-xlarge", "2X-Large": "width-2xlarge", "Container Default": "container", "Container Small": "container-small", "Container Large": "container-large", "Container X-Large": "container-xlarge" } } } }, "social-items": { "title": "Social Icons", "width": 400, "fields": { "header.social_items": { "label": "Items", "type": "item-panel", "fields": { "link": { "label": "Link", "attrs": { "placeholder": "https://" }, "description": "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported." }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item." }, "icon": { "label": "Icon", "description": "Pick an alternative icon from the icon library.", "type": "icon", "enable": "!image" }, "image": { "label": "Image", "description": "Pick an alternative SVG image from the media manager.", "type": "image", "enable": "!icon" } } } } }, "mobile": { "title": "Mobile", "width": 400, "fields": { "mobile.breakpoint": { "label": "Visibility", "description": "Select the device size where the default header will be replaced by the mobile header.", "type": "select", "options": { "None": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l" } }, "mobile.header.layout": { "label": "Layout", "description": "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.", "title": "Select mobile header layout", "type": "select-img", "options": { "horizontal-left": { "label": "Horizontal Left", "src": "$ASSETS/images/mobile-header/horizontal-left.svg" }, "horizontal-center": { "label": "Horizontal Center", "src": "$ASSETS/images/mobile-header/horizontal-center.svg" }, "horizontal-right": { "label": "Horizontal Right", "src": "$ASSETS/images/mobile-header/horizontal-right.svg" }, "horizontal-justify": { "label": "Horizontal Justify", "src": "$ASSETS/images/mobile-header/horizontal-justify.svg" }, "horizontal-center-logo": { "label": "Horizontal Center Logo", "src": "$ASSETS/images/mobile-header/horizontal-center-logo.svg" } }, "show": "mobile.breakpoint" }, "mobile.header.logo_padding_remove": { "type": "checkbox", "text": "Remove left logo padding", "show": "mobile.breakpoint && mobile.header.layout != 'horizontal-center-logo'" }, "mobile.navbar.sticky": { "label": "Navbar", "description": "Stick the navbar at the top of the viewport while scrolling or only when scrolling up.", "type": "select", "options": { "Static": 0, "Sticky": 1, "Sticky on scroll up": 2 }, "show": "mobile.breakpoint" }, "mobile.header.transparent": { "label": "Transparent Background", "type": "checkbox", "text": "Make header transparent", "show": "mobile.breakpoint" }, "mobile.header.transparent_color_separately": { "type": "checkbox", "text": "Color navbar parts separately", "show": "mobile.breakpoint", "enable": "mobile.header.transparent && !mobile.header.blend" }, "mobile.header.blend": { "description": "Make the header transparent even when it's sticky.", "type": "checkbox", "text": "Blend with page content", "show": "mobile.breakpoint", "enable": "mobile.header.transparent" }, "mobile.dialog.toggle": { "label": "Dialog Toggle", "type": "select", "options": { "Navbar Start": "navbar-mobile:start", "Navbar End": "navbar-mobile:end", "Header Start": "header-mobile:start", "Header End": "header-mobile:end" }, "show": "mobile.breakpoint" }, "mobile.dialog.toggle_text": { "type": "checkbox", "text": "Show the menu text next to the icon", "show": "mobile.breakpoint" }, "mobile.dialog.layout": { "label": "Dialog Layout", "title": "Select mobile dialog layout", "type": "select-img", "options": { "dropbar-top": { "label": "Dropbar Top", "src": "$ASSETS/images/mobile-dialog/dropbar-top.svg" }, "dropbar-center": { "label": "Dropbar Center", "src": "$ASSETS/images/mobile-dialog/dropbar-center.svg" }, "offcanvas-top": { "label": "Offcanvas Top", "src": "$ASSETS/images/mobile-dialog/offcanvas-top.svg" }, "offcanvas-center": { "label": "Offcanvas Center", "src": "$ASSETS/images/mobile-dialog/offcanvas-center.svg" }, "modal-top": { "label": "Modal Top", "src": "$ASSETS/images/mobile-dialog/modal-top.svg" }, "modal-center": { "label": "Modal Center", "src": "$ASSETS/images/mobile-dialog/modal-center.svg" } }, "show": "mobile.breakpoint" }, "mobile.dialog.text_center": { "type": "checkbox", "text": "Center horizontally", "show": "mobile.breakpoint" }, "mobile.dialog.close": { "type": "checkbox", "text": "Show close button", "enable": "mobile.breakpoint && $match(mobile.dialog.layout, '^offcanvas|^modal')" }, "mobile.dialog._dropbar": { "type": "button-panel", "text": "Edit Dropbar", "panel": "mobile.dialog-dropbar", "show": "mobile.breakpoint && $match(mobile.dialog.layout, '^dropbar')" }, "mobile.dialog._offcanvas": { "type": "button-panel", "text": "Edit Offcanvas", "panel": "mobile.dialog-offcanvas", "show": "mobile.breakpoint && $match(mobile.dialog.layout, '^offcanvas')" }, "mobile.dialog._modal": { "type": "button-panel", "text": "Edit Modal", "panel": "mobile.dialog-modal", "show": "mobile.breakpoint && $match(mobile.dialog.layout, '^modal')" }, "mobile.dialog._description": { "description": "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.", "type": "description", "show": "mobile.breakpoint" }, "mobile.dialog.push_index": { "label": "Dialog Push Items", "description": "Set the number of items after which the following items are pushed to the bottom.", "type": "select", "options": { "None": "", "After 1 Item": 1, "After 2 Items": 2, "After 3 Items": 3, "After 4 Items": 4, "After 5 Items": 5, "After 6 Items": 6, "After 7 Items": 7, "After 8 Items": 8, "After 9 Items": 9, "After 10 Items": 10 }, "show": "mobile.breakpoint" }, "mobile.header.search": { "label": "Search", "description": "Select the position that will display the search.", "type": "select", "options": { "Hide": "", "Navbar Start": "navbar-mobile:start", "Navbar End": "navbar-mobile:end", "Header Start": "header-mobile:start", "Header End": "header-mobile:end", "Dialog Start": "dialog-mobile:start", "Dialog End": "dialog-mobile:end", "Logo End": "logo-mobile:end" }, "show": "mobile.breakpoint" }, "mobile.header.search_layout": { "label": "Search Layout", "title": "Select mobile search layout", "type": "select-img", "options": { "input-dropdown": { "label": "Input Dropdown", "src": "$ASSETS/images/mobile-search/input-dropdown.svg" }, "dropdown": { "label": "Toggle Dropdown", "src": "$ASSETS/images/mobile-search/dropdown.svg" }, "input-dropbar": { "label": "Input Dropbar", "src": "$ASSETS/images/mobile-search/input-dropbar.svg" }, "dropbar": { "label": "Toggle Dropbar", "src": "$ASSETS/images/mobile-search/dropbar.svg" }, "modal": { "label": "Toggle Modal", "src": "$ASSETS/images/mobile-search/modal.svg" } }, "show": "mobile.breakpoint", "enable": "mobile.header.search && !$match(mobile.header.search, '^dialog')" }, "mobile.header.search_expand": { "type": "checkbox", "text": "Expand input width", "show": "mobile.breakpoint", "enable": "mobile.header.search && !$match(mobile.header.search, '^dialog') && $match(mobile.header.search_layout, '^input-(dropdown|dropbar)$') && $match(mobile.header.layout, '^horizontal-(left|center|right)$')" }, "mobile.header.search_prevent_submit": { "text": "Prevent form submit if live search is used", "type": "checkbox", "show": "mobile.breakpoint", "enable": "mobile.header.search && !$match(mobile.header.search, '^dialog')" }, "mobile.header.search_dropdown": { "type": "button-panel", "text": "Edit Dropdown", "panel": "mobile.search-dropdown", "show": "mobile.breakpoint && (mobile.header.search_layout == 'input-dropdown' || mobile.header.search_layout == 'dropdown')", "enable": "mobile.header.search && !$match(mobile.header.search, '^dialog')" }, "mobile.header.search_modal": { "type": "button-panel", "text": "Edit Modal", "panel": "mobile.search-modal", "show": "mobile.breakpoint && mobile.header.search_layout == 'modal'", "enable": "mobile.header.search && !$match(mobile.header.search, '^dialog')" }, "mobile.header.search_dropbar": { "type": "button-panel", "text": "Edit Dropbar", "panel": "mobile.search-dropbar", "show": "mobile.breakpoint && (mobile.header.search_layout == 'input-dropbar' || mobile.header.search_layout == 'dropbar')", "enable": "mobile.header.search && !$match(mobile.header.search, '^dialog')" }, "mobile.header.search_description": { "description": "Show an input field or an icon to open the search in a dropdown, dropbar or modal. To show live search results, assign a template in the Templates panel.", "type": "description", "show": "mobile.breakpoint" }, "mobile.header.search_icon": { "label": "Search Icon", "description": "Display a search icon on the left or right of the input field. The icon on the right can be clicked to submit the search.", "type": "select", "options": { "None": "", "Left (Not Clickable)": "left", "Right (Clickable)": "right" }, "show": "mobile.breakpoint", "enable": "mobile.header.search" }, "mobile.header.social": { "label": "Social Icons", "type": "select", "options": { "Hide": "", "Navbar Start": "navbar-mobile:start", "Navbar End": "navbar-mobile:end", "Header Start": "header-mobile:start", "Header End": "header-mobile:end", "Dialog Start": "dialog-mobile:start", "Dialog End": "dialog-mobile:end", "Logo End": "logo-mobile:end" }, "show": "mobile.breakpoint" }, "mobile.header.social_items": { "type": "button-panel", "text": "Edit Items", "panel": "mobile.social-items", "show": "mobile.breakpoint && mobile.header.social" }, "mobile.header.social_target": { "type": "checkbox", "text": "Open in a new window", "show": "mobile.breakpoint && mobile.header.social" }, "mobile.header.social_style": { "type": "checkbox", "text": "Display icons as buttons", "show": "mobile.breakpoint && mobile.header.social" }, "mobile.social_image_svg_inline": { "type": "checkbox", "text": "Make SVG stylable with CSS", "description": "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.", "show": "mobile.breakpoint && mobile.header.social" }, "mobile.header.social_width": { "label": "Social Icons Size", "description": "Set the icon width.", "attrs": { "placeholder": "20" }, "show": "mobile.breakpoint && mobile.header.social" }, "mobile.header.social_gap": { "label": "Social Icons Gap", "description": "Set the size of the gap between the social icons.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "show": "mobile.breakpoint && mobile.header.social" } } }, "mobile.dialog-dropbar": { "title": "Dialog Dropbar", "width": 400, "fields": { "mobile.dialog.dropbar.animation": { "label": "Dropbar Animation", "description": "Select the animation on how the dropbar appears below the navbar.", "type": "select", "options": { "Fade": "", "Slide Top": "reveal-top", "Slide Left": "slide-left", "Slide Right": "slide-right" } }, "mobile.dialog.dropbar.padding_remove_horizontal": { "label": "Dropbar Padding", "type": "checkbox", "text": "Remove horizontal padding" }, "mobile.dialog.dropbar.padding_remove_vertical": { "type": "checkbox", "text": "Remove vertical padding" } } }, "mobile.dialog-offcanvas": { "title": "Dialog Offcanvas", "width": 400, "fields": { "mobile.dialog.offcanvas.mode": { "label": "Offcanvas Mode", "type": "select", "options": { "Slide": "slide", "Reveal": "reveal", "Push": "push" } }, "mobile.dialog.offcanvas.flip": { "type": "checkbox", "text": "Display on the right" } } }, "mobile.dialog-modal": { "title": "Dialog Modal", "width": 400, "fields": { "mobile.dialog.modal.width": { "label": "Modal Width", "description": "Set the content width.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" } } } }, "mobile.search-dropdown": { "title": "Search Dropdown", "width": 400, "fields": { "mobile.header.search_dropdown.stretch": { "label": "Dropdown Stretch", "description": "Stretch the dropdown to the width of the navbar or the navbar container.", "type": "select", "options": { "None": "", "Navbar": "navbar", "Navbar Container": "navbar-container" } }, "mobile.header.search_dropdown.width": { "label": "Dropdown Width", "description": "Set the dropdown width in pixels (e.g. 600).", "enable": "!mobile.header.search_dropdown.stretch" }, "mobile.header.search_dropdown.size": { "label": "Dropdown Padding", "type": "checkbox", "text": "Large padding" }, "mobile.header.search_dropdown.padding_remove_horizontal": { "type": "checkbox", "text": "Remove horizontal padding" }, "mobile.header.search_dropdown.padding_remove_vertical": { "type": "checkbox", "text": "Remove vertical padding" }, "mobile.header.search_dropdown.align": { "label": "Dropdown Alignment", "type": "select", "options": { "Default": "", "Left": "left", "Right": "right", "Center": "center" }, "enable": "!mobile.header.search_dropdown.stretch" } } }, "mobile.search-modal": { "title": "Search Modal", "width": 400, "fields": { "mobile.header.search_modal.width": { "label": "Modal Width", "type": "select", "options": { "Default": "", "Container": "container", "Expand": "expand", "Full": "full" } }, "mobile.header.search_modal.close": { "description": "Stretch the modal to the width of the navbar or the navbar container, or show a full modal window.", "type": "checkbox", "text": "Show close icon", "enable": "mobile.header.search_modal.width != 'full'" } } }, "mobile.search-dropbar": { "title": "Search Dropbar", "width": 400, "fields": { "mobile.header.search_dropbar.animation": { "label": "Dropbar Animation", "description": "Select the animation on how the dropbar appears below the navbar.", "type": "select", "options": { "Fade": "", "Slide Top": "reveal-top", "Slide Left": "slide-left", "Slide Right": "slide-right" } }, "mobile.header.search_dropbar.padding_remove_horizontal": { "label": "Dropbar Padding", "type": "checkbox", "text": "Remove horizontal padding" }, "mobile.header.search_dropbar.padding_remove_vertical": { "type": "checkbox", "text": "Remove vertical padding" } } }, "mobile.social-items": { "title": "Social Icons", "width": 400, "fields": { "mobile.header.social_items": { "label": "Items", "type": "item-panel", "fields": { "link": { "label": "Link", "attrs": { "placeholder": "https://" }, "description": "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported." }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item." }, "icon": { "label": "Icon", "description": "Pick an alternative icon from the icon library.", "type": "icon", "enable": "!image" }, "image": { "label": "Image", "description": "Pick an alternative SVG image from the media manager.", "type": "image", "enable": "!icon" } } } } }, "menu-item": { "title": "Menu Item", "width": 400, "fields": { "image": { "label": "Image", "type": "image", "enable": "!icon" }, "icon": { "label": "Icon", "description": "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.", "type": "icon", "enable": "!image" }, "image_only": { "label": "Image and Title", "description": "Only show the image or icon.", "type": "checkbox", "text": "Hide title", "enable": "image || icon" }, "subtitle": { "label": "Subtitle", "description": "Enter a subtitle that will be displayed beneath the nav item.", "enable": "!((image || icon) && image_only)" }, "dropdown.columns": { "label": "Dropdown Columns", "description": "Split the dropdown into columns.", "type": "select", "default": 1, "options": { "1 Column": 1, "2 Columns": 2, "3 Columns": 3, "4 Columns": 4, "5 Columns": 5 }, "show": "this.panel.item.level == 0 && !content" }, "dropdown.stretch": { "label": "Dropdown Stretch", "description": "Stretch the dropdown to the width of the navbar or the navbar container.", "type": "select", "options": { "None": "", "Navbar": "navbar", "Navbar Container": "navbar-container" }, "show": "this.panel.item.level == 0" }, "dropdown.width": { "label": "Dropdown Width", "description": "Set the dropdown width in pixels (e.g. 600).", "show": "this.panel.item.level == 0", "enable": "!dropdown.justify" }, "dropdown.size": { "label": "Dropdown Padding", "type": "checkbox", "text": "Large padding", "show": "this.panel.item.level == 0" }, "dropdown.padding_remove_horizontal": { "type": "checkbox", "text": "Remove horizontal padding", "show": "this.panel.item.level == 0 && content" }, "dropdown.padding_remove_vertical": { "type": "checkbox", "text": "Remove vertical padding", "show": "this.panel.item.level == 0 && content" }, "dropdown.align": { "label": "Dropdown Alignment", "type": "select", "options": { "Default": "", "Left": "left", "Right": "right", "Center": "center" }, "show": "this.panel.item.level == 0", "enable": "!dropdown.justify" }, "dropdown.nav_style": { "label": "Dropdown Nav Style", "description": "Select the nav style.", "type": "select", "options": { "Default": "", "Secondary": "secondary" }, "show": "this.panel.item.level == 0 && !content" } } }, "menu-position": { "title": "Position", "width": 400, "fields": { "type": { "label": "Type", "description": "Select the menu type.", "type": "select", "options": { "Default": "", "Nav": "nav", "Subnav": "subnav", "Iconnav": "iconnav" } }, "divider": { "label": "Divider", "description": "Show optional dividers between nav or subnav items.", "type": "checkbox", "text": "Show dividers" }, "style": { "label": "Style", "description": "Select the nav style.", "type": "select", "options": { "Default": "default", "Primary": "primary", "Secondary": "secondary" }, "show": "$match(this.panel.position, '^dialog')" }, "size": { "label": "Primary Size", "description": "Select the primary nav size.", "type": "select", "options": { "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "show": "$match(this.panel.position, '^dialog')", "enable": "style == 'primary'" }, "_image_dimensions": { "type": "grid", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "width": "1-2", "fields": { "image_width": { "label": "Image Width", "attrs": { "placeholder": "auto" } }, "image_height": { "label": "Image Height", "attrs": { "placeholder": "auto" } } } }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the markup so they adopt the text color automatically.", "type": "checkbox", "text": "Make SVG stylable with CSS" }, "icon_width": { "label": "Icon Width", "description": "Set the icon width." }, "image_margin": { "label": "Image and Title", "type": "checkbox", "text": "Add margin between" }, "image_align": { "label": "Image Align", "type": "select", "options": { "Top": "top", "Center": "center" } } } }, "top": { "title": "Top", "width": 400, "fields": { "top.style": { "label": "Style", "type": "select", "options": { "Default": "default", "Muted": "muted", "Primary": "primary", "Secondary": "secondary" } }, "top.preserve_color": { "type": "checkbox", "text": "Preserve text color" }, "top.overlap": { "description": "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.", "type": "checkbox", "text": "Overlap the following section" }, "top.image": { "label": "Image", "type": "image", "show": "!top.video" }, "top.video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "show": "!top.image" }, "top.media": { "type": "button-panel", "text": "Edit Settings", "panel": "top-media", "show": "top.image || top.video" }, "top.text_color": { "label": "Text Color", "description": "Force a light or dark color for text, buttons and controls on the image or video background.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "enable": "top.image || top.video" }, "top.width": { "label": "Max Width", "description": "Set the maximum content width.", "type": "select", "options": { "Default": "default", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge", "Expand": "expand", "None": "" } }, "top._height": { "label": "Height", "type": "grid", "width": "3-4,1-4", "gap": "small", "fields": [ { "name": "top.height", "type": "select", "options": { "None": "", "Viewport": "viewport", "Viewport (Subtract Next Section)": "section", "Expand Page to Viewport": "page" } }, { "name": "top.height_viewport", "type": "number", "attrs": { "placeholder": "100", "min": 0, "step": 10 }, "enable": "top.height == 'viewport'" } ] }, "top.height_offset_top": { "description": "Set a fixed height, and optionally subtract the header height to fill the first visible viewport. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.", "type": "checkbox", "text": "Subtract height above section", "enable": "top.height == 'viewport' && (top.height_viewport || 0) <= 100 || top.height == 'section'" }, "top.vertical_align": { "label": "Vertical Alignment", "description": "Align the section content vertically, if the section height is larger than the content itself.", "type": "select", "options": { "Top": "", "Middle": "middle", "Bottom": "bottom" }, "enable": "top.height" }, "top.padding": { "label": "Padding", "description": "Set the vertical padding.", "type": "select", "options": { "Default": "", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge", "None": "none" } }, "top.padding_remove_top": { "type": "checkbox", "text": "Remove top padding", "enable": "top.padding != 'none'" }, "top.padding_remove_bottom": { "type": "checkbox", "text": "Remove bottom padding", "enable": "top.padding != 'none'" }, "top.header_transparent": { "label": "Transparent Header", "type": "checkbox", "text": "Make header transparent" }, "top.header_transparent_noplaceholder": { "description": "Make the header transparent and overlay this section if it directly follows the header.", "type": "checkbox", "text": "Pull content behind header", "enable": "top.header_transparent" }, "top.header_transparent_text_color": { "label": "Header Text Color", "description": "Force a light or dark color for text, buttons and controls on the image or video background.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "enable": "top.header_transparent" }, "top.column_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "top.row_gap": { "label": "Row Gap", "description": "Set the size of the gap between the grid rows.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "top.divider": { "label": "Divider", "description": "Show a divider between grid columns.", "type": "checkbox", "text": "Show dividers", "enable": "top.column_gap != 'collapse' && top.row_gap != 'collapse'" }, "top.match": { "label": "Panels", "description": "Stretch the panel to match the height of the grid cell.", "type": "checkbox", "text": "Match height" }, "top.breakpoint": { "label": "Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } } } }, "top-media": { "title": "Image/Video", "width": 500, "fields": { "top._image_dimension": { "type": "grid", "description": "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.", "width": "1-2", "fields": { "top.image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "top.image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } } }, "show": "top.image && !top.video" }, "top._video_dimension": { "type": "grid", "description": "Set the video dimensions.", "width": "1-2", "fields": { "video_width": { "label": "Width" }, "video_height": { "label": "Height" } }, "show": "top.video && !top.image" }, "top.media_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" } }, "top.image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "show": "top.image && !top.video" }, "top.image_size": { "label": "Image Size", "description": "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.", "type": "select", "options": { "Auto": "", "Cover": "cover", "Contain": "contain", "Width 100%": "width-1-1", "Height 100%": "height-1-1" }, "show": "top.image && !top.video" }, "top.image_position": { "label": "Image Position", "description": "Set the initial background position, relative to the section layer.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "center-center", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "show": "top.image && !top.video" }, "top.image_fixed": { "label": "Image Attachment", "text": "Fix the background with regard to the viewport.", "type": "checkbox", "show": "top.image && !top.video" }, "top.media_visibility": { "label": "Visibility", "description": "Display the image only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } }, "top.media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.", "type": "color" }, "top.media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image or video will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" } }, "top.media_overlay": { "label": "Overlay Color", "description": "Set an additional transparent overlay to soften the image or video.", "type": "color" } } }, "sidebar": { "title": "Sidebar", "width": 400, "fields": { "main_sidebar.width": { "label": "Width", "description": "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.", "type": "select", "options": { "20%": "1-5", "25%": "1-4", "33%": "1-3", "40%": "2-5", "50%": "1-2" } }, "main_sidebar.breakpoint": { "label": "Breakpoint", "description": "Set the breakpoint from which the sidebar and content will stack.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l" } }, "main_sidebar.first": { "label": "Order", "type": "checkbox", "text": "Move the sidebar to the left of the content" }, "main_sidebar.gutter": { "label": "Gap", "description": "Set the padding between sidebar and content.", "type": "select", "options": { "Default": "", "Small": "small", "Large": "large", "None": "collapse" } }, "main_sidebar.divider": { "label": "Divider", "type": "checkbox", "text": "Display a divider between sidebar and content" } } }, "bottom": { "title": "Bottom", "width": 400, "fields": { "bottom.style": { "label": "Style", "type": "select", "options": { "Default": "default", "Muted": "muted", "Primary": "primary", "Secondary": "secondary" } }, "bottom.preserve_color": { "type": "checkbox", "text": "Preserve text color" }, "bottom.overlap": { "description": "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.", "type": "checkbox", "text": "Overlap the following section" }, "bottom.image": { "label": "Image", "type": "image", "show": "!bottom.video" }, "bottom.video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "show": "!bottom.image" }, "bottom.media": { "type": "button-panel", "text": "Edit Settings", "panel": "bottom-media", "show": "bottom.image || bottom.video" }, "bottom.text_color": { "label": "Text Color", "description": "Force a light or dark color for text, buttons and controls on the image or video background.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "enable": "bottom.image || bottom.video" }, "bottom.width": { "label": "Max Width", "description": "Set the maximum content width.", "type": "select", "options": { "Default": "default", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge", "Expand": "expand", "None": "" } }, "bottom._height": { "label": "Height", "description": "Set a fixed height. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.", "type": "grid", "width": "3-4,1-4", "gap": "small", "fields": [ { "name": "bottom.height", "type": "select", "options": { "None": "", "Viewport": "viewport", "Viewport (Subtract Next Section)": "section", "Expand Page to Viewport": "page" } }, { "name": "bottom.height_viewport", "type": "number", "attrs": { "placeholder": "100", "min": 0, "step": 10 }, "enable": "bottom.height == 'viewport'" } ] }, "bottom.vertical_align": { "label": "Vertical Alignment", "description": "Align the section content vertically, if the section height is larger than the content itself.", "type": "select", "options": { "Top": "", "Middle": "middle", "Bottom": "bottom" }, "enable": "bottom.height" }, "bottom.padding": { "label": "Padding", "description": "Set the vertical padding.", "type": "select", "options": { "Default": "", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge", "None": "none" } }, "bottom.padding_remove_top": { "type": "checkbox", "text": "Remove top padding", "enable": "bottom.padding != 'none'" }, "bottom.padding_remove_bottom": { "type": "checkbox", "text": "Remove bottom padding", "enable": "bottom.padding != 'none'" }, "bottom.column_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "bottom.row_gap": { "label": "Row Gap", "description": "Set the size of the gap between the grid rows.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "bottom.divider": { "label": "Divider", "description": "Show a divider between grid columns.", "type": "checkbox", "text": "Show dividers", "enable": "bottom.column_gap != 'collapse' && bottom.row_gap != 'collapse'" }, "bottom.match": { "label": "Panels", "description": "Stretch the panel to match the height of the grid cell.", "type": "checkbox", "text": "Match height" }, "bottom.breakpoint": { "label": "Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } } } }, "bottom-media": { "title": "Image/Video", "width": 400, "fields": { "bottom._image_dimension": { "type": "grid", "description": "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.", "width": "1-2", "fields": { "bottom.image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "bottom.image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } } }, "show": "bottom.image && !bottom.video" }, "bottom._video_dimension": { "type": "grid", "description": "Set the video dimensions.", "width": "1-2", "fields": { "video_width": { "label": "Width" }, "video_height": { "label": "Height" } }, "show": "bottom.video && !bottom.image" }, "bottom.media_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" } }, "bottom.image_size": { "label": "Image Size", "description": "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.", "type": "select", "options": { "Auto": "", "Cover": "cover", "Contain": "contain" }, "show": "bottom.image && !bottom.video" }, "bottom.image_position": { "label": "Image Position", "description": "Set the initial background position, relative to the section layer.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "center-center", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "show": "bottom.image && !bottom.video" }, "bottom.image_fixed": { "label": "Image Attachment", "text": "Fix the background with regard to the viewport.", "type": "checkbox", "show": "bottom.image && !bottom.video" }, "bottom.media_visibility": { "label": "Visibility", "description": "Display the image only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } }, "bottom.media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.", "type": "color" }, "bottom.media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image or video will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" } }, "bottom.media_overlay": { "label": "Overlay Color", "description": "Set an additional transparent overlay to soften the image or video.", "type": "color" } } }, "footer-builder": { "title": "Builder", "heading": false, "width": 500 } } } theme/assets/js/customizer.min.js000064400000004235151666572140013131 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ (function(){"use strict";if(document.baseURI!==document.URL&&window.navigator.userAgent.includes("Firefox")){const e=document.createElement("base");e.href=document.URL,document.head.prepend(e)}function a(e,o){o===void 0&&(o={});var t=o.insertAt;if(!(typeof document>"u")){var d=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t==="top"&&d.firstChild?d.insertBefore(n,d.firstChild):d.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}}var s=".yo-iconnav{display:flex;flex-wrap:wrap;list-style:none;margin:0 0 0 -8px;padding:0}.yo-iconnav>*{flex:none;padding-left:8px}.yo-iconnav>*>*{color:#fff;display:block}.yo-iconnav>*>:focus,.yo-iconnav>*>:hover{color:#fff;outline:none}.yo-hover{outline:2px solid #3696f3;position:absolute;z-index:99999}.yo-inspect:not(:empty){background:#fff;border-radius:2px;color:#777;font-size:11px;margin-left:-10px;margin-top:-50px;padding:3px 6px;position:absolute;text-transform:capitalize;z-index:99999}:has(>:is([class*=yo-builder-nav],[class*=yo-builder-button])){z-index:99999}[class*=yo-builder-nav]{border-radius:1px;padding:4px}.yo-builder-nav-section{background:#3dc372}.yo-builder-nav-row{background:#e44e56}.yo-builder-nav-element{background:#3696f3}[class*=yo-builder-button]{border-radius:500px;color:#fff!important;height:30px;text-decoration:none!important;width:30px}.yo-builder-button-section{background:#3dc372}.yo-builder-button-row{background:#e44e56}.yo-builder-button-element{background:#3696f3}";a(s);const i=[],r=new MutationObserver(e=>{for(const o of e)for(const t of o.addedNodes)t.nodeType===Node.ELEMENT_NODE&&t.hasAttribute("autofocus")&&(t.removeAttribute("autofocus"),i.push(t))});r.observe(document.documentElement,{childList:!0,subtree:!0}),document.addEventListener("DOMContentLoaded",()=>{i.forEach(e=>e.setAttribute("autofocus","")),r.disconnect()}),document.addEventListener("DOMContentLoaded",()=>{const e=new Set;for(const o of document.querySelectorAll("[id]")){const t=o.getAttribute("id");t&&e.has(t)?console.error(`Duplicate id attribute value "${t}" found.`):e.add(t)}})})(); theme/assets/images/finder-list-file.svg000064400000000715151666572140014313 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <circle fill="#C1C4C9" cx="15" cy="15" r="15" /> <polygon fill="#FFFFFF" points="21,22 9,22 9,12 9,8 21,8" /> <rect width="7" height="1" fill="#C1C4C9" x="11" y="12" /> <rect width="5" height="1" fill="#C1C4C9" x="11" y="14" /> <rect width="7" height="1" fill="#C1C4C9" x="11" y="16" /> <rect width="5" height="1" fill="#C1C4C9" x="11" y="18" /> </svg> theme/assets/images/help.svg000064400000000721151666572140012103 0ustar00<svg width="22" height="22" viewBox="0 0 22 22" xmlns="http://www.w3.org/2000/svg"> <circle class="uk-preserve" fill="#e5e5e5" cx="11" cy="11" r="11" /> <path fill="#898989" d="M11.59,15.43a.74.74,0,1,1-.74-.74A.74.74,0,0,1,11.59,15.43Zm-1-9.57A2.86,2.86,0,0,0,7.77,8.72a.53.53,0,0,0,1.06,0,1.8,1.8,0,1,1,2.75,1.52l-.11.07a2.3,2.3,0,0,0-1.15,2v.56a.53.53,0,0,0,.53.53.53.53,0,0,0,.53-.53V12.3a1.27,1.27,0,0,1,.6-1.07h0a2.86,2.86,0,0,0-1.36-5.37Z" /> </svg> theme/assets/images/customizer/chevron-double-left.svg000064400000000527151666572140017227 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M5.5,11.5 L8.5,8.5" /> <path fill="none" stroke="#000" d="M5.5,11.5 L8.5,14.5" /> <path fill="none" stroke="#000" d="M9.5,11.5 L12.5,8.5" /> <path fill="none" stroke="#000" d="M9.5,11.5 L12.5,14.5" /> </svg> theme/assets/images/customizer/drag.svg000064400000000321151666572140014270 0ustar00<svg width="10" height="20" viewBox="0 0 10 20" xmlns="http://www.w3.org/2000/svg"> <rect width="1" height="18" fill="#000" x="4" y="1" /> <rect width="1" height="18" fill="#000" x="6" y="1" /> </svg> theme/assets/images/customizer/chevron-double-right.svg000064400000000531151666572140017405 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M9.5,10.5 L6.5,7.5" /> <path fill="none" stroke="#000" d="M9.5,10.5 L6.5,13.5" /> <path fill="none" stroke="#000" d="M13.5,10.5 L10.5,7.5" /> <path fill="none" stroke="#000" d="M13.5,10.5 L10.5,13.5" /> </svg> theme/assets/images/customizer/breadcrumb.svg000064400000000370151666572140015465 0ustar00<svg width="16" height="14" viewBox="0 0 16 14" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" stroke-width="2" points="6.66,12.32 1.5,6.66 6.66,1.5" /> <rect width="14" height="2" fill="#000" x="2" y="6" /> </svg> theme/assets/images/mobile-dialog/dropbar-center.svg000064400000001473151666572140016573 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,20h62V88H2V20Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H65V89H1V1Z" /> <rect width="66" height="1" fill="#444" y="19" /> <circle fill="#444" cx="10.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="15.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="20.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="9" y="43" /> <rect width="17" height="2" fill="#444" x="9" y="53" /> <rect width="20" height="2" fill="#444" x="9" y="48" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="52.5" y1="7.5" x2="58.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="58.5" y1="7.5" x2="52.5" y2="13.5" /> </svg> theme/assets/images/mobile-dialog/offcanvas-center.svg000064400000001476151666572140017113 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M14,0h52V90H14V0Z" /> <circle fill="#444" cx="23.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="28.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="33.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="22" y="37" /> <rect width="17" height="2" fill="#444" x="22" y="47" /> <rect width="20" height="2" fill="#444" x="22" y="42" /> <rect width="1" height="90" fill="#444" x="14" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H65V89H1V1Z" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="52.5" y1="7.5" x2="58.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="58.5" y1="7.5" x2="52.5" y2="13.5" /> </svg> theme/assets/images/mobile-dialog/modal-top.svg000064400000001403151666572140015551 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M0,0H66V90H0V0Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H65V89H1V1Z" /> <circle fill="#444" cx="10.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="15.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="20.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="9" y="12" /> <rect width="17" height="2" fill="#444" x="9" y="22" /> <rect width="20" height="2" fill="#444" x="9" y="17" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="52.5" y1="7.5" x2="58.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="58.5" y1="7.5" x2="52.5" y2="13.5" /> </svg> theme/assets/images/mobile-dialog/offcanvas-top.svg000064400000001476151666572140016435 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M14,0h52V90H14V0Z" /> <circle fill="#444" cx="23.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="28.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="33.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="22" y="12" /> <rect width="17" height="2" fill="#444" x="22" y="22" /> <rect width="20" height="2" fill="#444" x="22" y="17" /> <rect width="1" height="90" fill="#444" x="14" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H65V89H1V1Z" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="52.5" y1="7.5" x2="58.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="58.5" y1="7.5" x2="52.5" y2="13.5" /> </svg> theme/assets/images/mobile-dialog/modal-center.svg000064400000001403151666572140016227 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M0,0H66V90H0V0Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H65V89H1V1Z" /> <circle fill="#444" cx="10.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="15.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="20.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="9" y="37" /> <rect width="17" height="2" fill="#444" x="9" y="47" /> <rect width="20" height="2" fill="#444" x="9" y="42" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="52.5" y1="7.5" x2="58.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="58.5" y1="7.5" x2="52.5" y2="13.5" /> </svg> theme/assets/images/mobile-dialog/dropbar-top.svg000064400000001473151666572140016115 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,20h62V88H2V20Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H65V89H1V1Z" /> <rect width="66" height="1" fill="#444" y="19" /> <circle fill="#444" cx="10.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="15.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="20.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="9" y="30" /> <rect width="17" height="2" fill="#444" x="9" y="40" /> <rect width="20" height="2" fill="#444" x="9" y="35" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="52.5" y1="7.5" x2="58.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="58.5" y1="7.5" x2="52.5" y2="13.5" /> </svg> theme/assets/images/field-dynamic-arrow-left.svg000064400000000360151666572140015737 0ustar00<svg width="13" height="9" viewBox="0 0 13 9" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#000" x1="13" y1="4.5" x2="1" y2="4.5" /> <polyline fill="none" stroke="#000" points="4.55 .66 .71 4.5 4.55 8.34" /> </svg> theme/assets/images/element-image-placeholder.png000064400000002052151666572140016130 0ustar00�PNG IHDR �7nTK!PLTE������www��̏��|||}}}��拋��������桘tRNS�d�h��IDATx�݁FQ����S�V`ѣ�=�;,̾� HOZ��8�F97���p?�f�ؕ��� D@� D@� D@� D@� D@� D@� D@� D@� D@� D@�" D@�" D@�" D@�" D@�" D@�" D@�" D@�" D@�" D@�" @D@�" @D@�" @D@�" @D@�" @D@��r��r~ ���� @� @� @�yz^w䪵��@�\�������Xȿ��rR�C�d��a7�dnKG @��n��2���� ��Kc�N@�0(}� ��D� H-HP'2/@jA�%�e����D��>@ @�!?�HH0��R ��0��Ԁ����8���|�s���t���% 5 y ���<��H�GH����4�< �<�.@��)�R2l��R���% @� @���<" @��9�>ۣc�A��c�_ A��A��AB� DB� DB"!B"!B�!�!��A��A�� DB� DB� !B"!B"!��AB� DB� DB"!B"!B�!�!��A��A�� DB� DB� !B"!B"!B�!�!��A��A�� DB� DB� !B"!B"!�!�!A��A��AB� DB� DB"!B"!B�!�!�!0skR2C�IEND�B`�theme/assets/images/field-color-clear.svg000064400000000364151666572140014441 0ustar00<svg width="30" height="30" preserveAspectRatio="none" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#D51C1C" stroke-width="2" x1="-1" y1="31" x2="31" y2="-1" vector-effect="non-scaling-stroke" /> </svg> theme/assets/images/mobile-search/modal.svg000064400000001556151666572140014770 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M8,20h50v51H8V20Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h64v88H1V1Z" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="52.5" y1="7.5" x2="58.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="58.5" y1="7.5" x2="52.5" y2="13.5" /> <circle fill="#444" cx="29.5" cy="56" r="1" /> <circle fill="#444" cx="33" cy="56" r="1" /> <circle fill="#444" cx="36.5" cy="56" r="1" /> <rect width="37" height="10" fill="none" stroke="#444" stroke-miterlimit="10" x="14.5" y="30.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="17.5" y1="33" x2="17.5" y2="38" /> <rect width="51" height="52" fill="none" stroke="#444" stroke-miterlimit="10" x="7.5" y="19.5" /> </svg> theme/assets/images/mobile-search/input-dropdown.svg000064400000001400151666572140016651 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M8,24h50v47H8V24Z" /> <path class="uk-preserve" fill="#fff" d="M22,6h36v9H22V6Z" /> <rect width="64" height="1" fill="#444" x="1" y="19" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h64v88H1V1Z" /> <rect width="37" height="10" fill="none" stroke="#444" x="21.5" y="5.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="24.5" y1="8" x2="24.5" y2="13" /> <rect width="51" height="48" fill="none" stroke="#444" x="7.5" y="23.5" /> <circle fill="#444" cx="29.5" cy="47.5" r="1" /> <circle fill="#444" cx="33" cy="47.5" r="1" /> <circle fill="#444" cx="36.5" cy="47.5" r="1" /> </svg> theme/assets/images/mobile-search/dropdown.svg000064400000001551151666572140015523 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M8,24h50v47H8V24Z" /> <rect width="51" height="48" fill="none" stroke="#444" x="7.5" y="23.5" /> <rect width="64" height="1" fill="#444" x="1" y="19" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h64v88H1V1Z" /> <circle fill="#444" cx="29.5" cy="56" r="1" /> <circle fill="#444" cx="33" cy="56" r="1" /> <circle fill="#444" cx="36.5" cy="56" r="1" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="52.5" cy="9.66" r="2.47" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M56.41,13.57l-1.96-1.96" /> <rect width="37" height="10" fill="none" stroke="#444" x="14.5" y="30.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="17.5" y1="33" x2="17.5" y2="38" /> </svg> theme/assets/images/mobile-search/input-dropbar.svg000064400000001302151666572140016447 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,20h62v68H2V20Z" /> <path class="uk-preserve" fill="#fff" d="M22,6h36v9H22V6Z" /> <rect width="64" height="1" fill="#444" x="1" y="19" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h64v88H1V1Z" /> <rect width="37" height="10" fill="none" stroke="#444" stroke-miterlimit="10" x="21.5" y="5.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="24.5" y1="8" x2="24.5" y2="13" /> <circle fill="#444" cx="29.5" cy="54" r="1" /> <circle fill="#444" cx="33" cy="54" r="1" /> <circle fill="#444" cx="36.5" cy="54" r="1" /> </svg> theme/assets/images/mobile-search/dropbar.svg000064400000001467151666572140015326 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,20h62v68H2V20Z" /> <rect width="64" height="1" fill="#444" x="1" y="19" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h64v88H1V1Z" /> <circle fill="#444" cx="29.5" cy="64.5" r="1" /> <circle fill="#444" cx="33" cy="64.5" r="1" /> <circle fill="#444" cx="36.5" cy="64.5" r="1" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="52.5" cy="9.66" r="2.47" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M56.41,13.57l-1.96-1.96" /> <rect width="37" height="10" fill="none" stroke="#444" stroke-miterlimit="10" x="14.5" y="30.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="17.5" y1="33" x2="17.5" y2="38" /> </svg> theme/assets/images/field-dynamic-arrow-right.svg000064400000000353151666572140016124 0ustar00<svg width="13" height="9" viewBox="0 0 13 9" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#000" y1="4.5" x2="12" y2="4.5" /> <polyline fill="none" stroke="#000" points="8.45 8.34 12.29 4.5 8.45 .66" /> </svg> theme/assets/images/style-reset.svg000064400000000214151666572140013430 0ustar00<svg width="5" height="5" viewBox="0 0 5 5" xmlns="http://www.w3.org/2000/svg"> <circle fill="#bbb" cx="2.5" cy="2.5" r="2.5" /> </svg> theme/assets/images/field-color-transparent.svg000064400000002073151666572140015713 0ustar00<svg width="32" height="32" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg"> <rect width="8" height="8" fill="#CCCCCC" x="0" y="0" /> <rect width="8" height="8" fill="#CCCCCC" x="16" y="0" /> <rect width="8" height="8" fill="#CCCCCC" x="0" y="16" /> <rect width="8" height="8" fill="#CCCCCC" x="16" y="16" /> <rect width="8" height="8" fill="#CCCCCC" x="8" y="8" /> <rect width="8" height="8" fill="#CCCCCC" x="24" y="8" /> <rect width="8" height="8" fill="#CCCCCC" x="8" y="24" /> <rect width="8" height="8" fill="#CCCCCC" x="24" y="24" /> <rect width="8" height="8" fill="#FFFFFF" x="8" y="0" /> <rect width="8" height="8" fill="#FFFFFF" x="0" y="8" /> <rect width="8" height="8" fill="#FFFFFF" x="16" y="8" /> <rect width="8" height="8" fill="#FFFFFF" x="8" y="16" /> <rect width="8" height="8" fill="#FFFFFF" x="24" y="0" /> <rect width="8" height="8" fill="#FFFFFF" x="24" y="16" /> <rect width="8" height="8" fill="#FFFFFF" x="0" y="24" /> <rect width="8" height="8" fill="#FFFFFF" x="16" y="24" /> </svg> theme/assets/images/header/stacked-center-split-b.svg000064400000001375151666572140016655 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2H128V33H2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1Z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="64.1" cy="21.8" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M68.7,26.4l-2.3-2.3" /> <rect width="129" height="1" fill="#444" x="1" y="33" /> <rect width="18" height="3" fill="#444" x="56" y="11" /> <rect width="8" height="2" fill="#444" x="101" y="12" /> <rect width="8" height="2" fill="#444" x="113" y="12" /> <rect width="8" height="2" fill="#444" x="9" y="12" /> <rect width="8" height="2" fill="#444" x="21" y="12" /> </svg> theme/assets/images/header/stacked-center-c.svg000064400000001552151666572140015522 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2H128V34H2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1Z" /> <rect width="17" height="3" fill="#444" x="56.5" y="12" /> <rect width="8" height="2" fill="#444" x="61" y="22" /> <rect width="8" height="2" fill="#444" x="73" y="22" /> <rect width="8" height="2" fill="#444" x="49" y="22" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="12.9" cy="12.9" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M17.5,17.5l-2.3-2.3" /> <circle fill="#444" cx="108.5" cy="13.5" r="1.5" /> <circle fill="#444" cx="113.5" cy="13.5" r="1.5" /> <circle fill="#444" cx="118.5" cy="13.5" r="1.5" /> <rect width="129" height="1" fill="#444" x="1" y="33" /> </svg> theme/assets/images/header/horizontal-justify.svg000064400000001304151666572140016265 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2h126V25H2V2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1V1Z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="115.6" cy="13.4" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.2,18l-2.3-2.3" /> <rect width="129" height="1" fill="#444" x="1" y="25" /> <rect width="17" height="3" fill="#444" x="10" y="12" /> <rect width="8" height="2" fill="#444" x="66" y="13" /> <rect width="8" height="2" fill="#444" x="89" y="13" /> <rect width="8" height="2" fill="#444" x="42" y="13" /> </svg> theme/assets/images/header/stacked-justify.svg000064400000001475151666572140015523 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2h126v31H2V2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1V1Z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="115.6" cy="13.4" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.2,18l-2.3-2.3" /> <rect width="129" height="1" fill="#444" x="1" y="33" /> <rect width="17" height="3" fill="#444" x="10" y="12" /> <rect width="8" height="2" fill="#444" x="35" y="22" /> <rect width="8" height="2" fill="#444" x="87" y="22" /> <rect width="8" height="2" fill="#444" x="61" y="22" /> <rect width="8" height="2" fill="#444" x="112" y="22" /> <rect width="8" height="2" fill="#444" x="10" y="22" /> </svg> theme/assets/images/header/horizontal-center.svg000064400000001300151666572140016044 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2 2h126v23H2z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1 1h128v88H1z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="115.6" cy="13.4" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.2 18l-2.3-2.3" /> <rect width="17" height="3" fill="#444" x="10" y="12" /> <rect width="129" height="1" fill="#444" x="1" y="25" /> <rect width="8" height="2" fill="#444" x="66" y="13" /> <rect width="8" height="2" fill="#444" x="78" y="13" /> <rect width="8" height="2" fill="#444" x="54" y="13" /> </svg> theme/assets/images/header/stacked-center-b.svg000064400000001302151666572140015512 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2 2h126v40H2z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1 1h128v88H1z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="64.1" cy="27.6" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M68.7 32.2l-2.3-2.3" /> <rect width="17" height="3" fill="#444" x="56.5" y="12" /> <rect width="129" height="1" fill="#444" x="1" y="42" /> <rect width="8" height="2" fill="#444" x="61" y="19" /> <rect width="8" height="2" fill="#444" x="73" y="19" /> <rect width="8" height="2" fill="#444" x="49" y="19" /> </svg> theme/assets/images/header/horizontal-left.svg000064400000001300151666572140015516 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2 2h126v23H2z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1 1h128v88H1z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="115.6" cy="13.4" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.2 18l-2.3-2.3" /> <rect width="129" height="1" fill="#444" x="1" y="25" /> <rect width="17" height="3" fill="#444" x="10" y="12" /> <rect width="8" height="2" fill="#444" x="45" y="13" /> <rect width="8" height="2" fill="#444" x="57" y="13" /> <rect width="8" height="2" fill="#444" x="33" y="13" /> </svg> theme/assets/images/header/stacked-center-a.svg000064400000001310151666572140015510 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2 2h126v40H2z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1 1h128v88H1z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="64.1" cy="21.2" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M68.7 25.8l-2.3-2.3" /> <rect width="129" height="1" fill="#444" x="1" y="42" /> <rect width="17" height="3" fill="#444" x="56.5" y="12" /> <rect width="8" height="2" fill="#444" x="61" y="29.9" /> <rect width="8" height="2" fill="#444" x="73" y="29.9" /> <rect width="8" height="2" fill="#444" x="49" y="29.9" /> </svg> theme/assets/images/header/horizontal-right.svg000064400000001300151666572140015701 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2 2h126v23H2z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1 1h128v88H1z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="115.6" cy="13.4" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.2 18l-2.3-2.3" /> <rect width="129" height="1" fill="#444" x="1" y="25" /> <rect width="17" height="3" fill="#444" x="10" y="12" /> <rect width="8" height="2" fill="#444" x="85" y="13" /> <rect width="8" height="2" fill="#444" x="97" y="13" /> <rect width="8" height="2" fill="#444" x="73" y="13" /> </svg> theme/assets/images/header/stacked-center-split-a.svg000064400000001374151666572140016653 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2 2h126v31H2z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1 1h128v88H1z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="64.1" cy="21.8" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M68.7 26.4l-2.3-2.3" /> <rect width="129" height="1" fill="#444" x="1" y="33" /> <rect width="18" height="3" fill="#444" x="56" y="11" /> <rect width="8" height="2" fill="#444" x="81" y="12" /> <rect width="8" height="2" fill="#444" x="93" y="12" /> <rect width="8" height="2" fill="#444" x="29" y="12" /> <rect width="8" height="2" fill="#444" x="41" y="12" /> </svg> theme/assets/images/header/stacked-left.svg000064400000001550151666572140014752 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2 2h126v31H2z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1 1h128v88H1z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="115.6" cy="13.4" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.2 18l-2.3-2.3" /> <circle fill="#444" cx="108.5" cy="22.5" r="1.5" /> <circle fill="#444" cx="113.5" cy="22.5" r="1.5" /> <circle fill="#444" cx="118.5" cy="22.5" r="1.5" /> <rect width="129" height="1" fill="#444" x="1" y="33" /> <rect width="17" height="3" fill="#444" x="10" y="12" /> <rect width="8" height="2" fill="#444" x="22" y="22" /> <rect width="8" height="2" fill="#444" x="34" y="22" /> <rect width="8" height="2" fill="#444" x="10" y="22" /> </svg> theme/assets/images/header/horizontal-center-logo.svg000064400000001277151666572140017017 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2 2h126v23H2z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1 1h128v88H1z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="115.6" cy="13.4" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.2 18l-2.3-2.3" /> <rect width="17" height="3" fill="#444" x="60" y="11" /> <rect width="129" height="1" fill="#444" x="0" y="24" /> <rect width="8" height="2" fill="#444" x="21" y="12" /> <rect width="8" height="2" fill="#444" x="33" y="12" /> <rect width="8" height="2" fill="#444" x="9" y="12" /> </svg> theme/assets/images/builder/hidden-s.svg000064400000001015151666572140014271 0ustar00<svg width="15" height="12" viewBox="0 0 15 12" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="12 8 12 9 15 9 15 12 11 12 11 11 14 11 14 10 11 10 11 7 15 7 15 8 12 8" /> <line fill="none" stroke="#000" x1="10.79" y1="0.42" x2="2.79" y2="10.42" /> <path fill="#000" d="M13.25,5.21c-.1-.16-2.4-3.92-6.56-3.92S.21,5.06.12,5.22L0,5.47l.14.25c.09.16,2.28,3.93,6.57,3.93A6.74,6.74,0,0,0,9,9.24V8.16a5.67,5.67,0,0,1-2.31.49A7,7,0,0,1,1.15,5.47,7,7,0,0,1,6.69,2.29c3,0,5,2.38,5.53,3.18H13.4Z" /> </svg> theme/assets/images/builder/contain-l.svg000064400000000253151666572140014465 0ustar00<svg width="3" height="12" viewBox="0 0 3 12" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points="2.5 11.5 .5 11.5 .5 .5 2.5 .5" /> </svg> theme/assets/images/builder/visible-m.svg000064400000001006151666572140014465 0ustar00<svg width="15" height="11" viewBox="0 0 15 11" xmlns="http://www.w3.org/2000/svg"> <circle fill="#000" cx="6.69" cy="4.5" r="1.45" /> <polygon fill="#000" points="15 6 15 11 14 11 14 7.38 12.5 9.71 11 7.38 11 11 10 11 10 6 11.15 6 12.5 8.14 13.85 6 15 6" /> <path fill="#000" d="M13.24,4.21C13.15,4.05,10.85.29,6.68.29S.21,4.06.12,4.22L0,4.47l.14.25c.09.16,2.27,3.93,6.56,3.93A6.87,6.87,0,0,0,8,8.52v-1a5.61,5.61,0,0,1-1.32.16A7,7,0,0,1,1.14,4.47,7,7,0,0,1,6.68,1.29c3,0,5,2.38,5.53,3.18H13.4Z" /> </svg> theme/assets/images/builder/copy.svg000064400000000411151666572140013547 0ustar00<svg width="12" height="14" viewBox="0 0 12 14" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="3 2 11 2 11 11 12 11 12 1 3 1" /> <path fill="#000" d="M9,4 L9,13 L1,13 L1,4 L9,4 L9,4 Z M10,3 L0,3 L0,14 L10,14 L10,3 L10,3 L10,3 Z" /> </svg> theme/assets/images/builder/save.svg000064400000000555151666572140013544 0ustar00<svg width="12" height="14" viewBox="0 0 12 14" xmlns="http://www.w3.org/2000/svg"> <rect width="1" height="9" fill="#000" x="5" y="1" /> <polygon fill="#000" points="8.3 4.24 4.8 0.71 5.5 0 9 3.54" /> <polygon fill="#000" points="2 3.54 4.8 0.71 5.5 1.41 2.7 4.24" /> <polygon fill="#000" points="1 13 10 13 10 5 11 5 11 14 0 14 0 5 1 5" /> </svg> theme/assets/images/builder/visible-l.svg000064400000000723151666572140014471 0ustar00<svg width="14" height="11" viewBox="0 0 14 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="13 10 13 11 10 11 10 6 11 6 11 10 13 10" /> <path fill="#000" d="M13.24,4.21C13.15,4.05,10.85.29,6.68.29S.21,4.06.12,4.22L0,4.47l.14.25c.09.16,2.27,3.93,6.56,3.93A6.87,6.87,0,0,0,8,8.52v-1a5.61,5.61,0,0,1-1.32.16A7,7,0,0,1,1.14,4.47,7,7,0,0,1,6.68,1.29c3,0,5,2.38,5.53,3.18H13.4Z" /> <circle fill="#000" cx="6.69" cy="4.5" r="1.45" /> </svg> theme/assets/images/builder/edit.svg000064400000000637151666572140013534 0ustar00<svg width="12" height="14" viewBox="0 0 12 14" xmlns="http://www.w3.org/2000/svg"> <path fill="#000" d="M10.01,4.49 L10.66,5.14 L11.62,4.19 C12.13,3.68 12.13,2.89 11.62,2.38 C11.36,2.13 11.03,2 10.69,2 C10.36,2 10.04,2.13 9.78,2.38 L8.84,3.33 L9.49,3.98 L10.01,4.49 L10.01,4.49 Z" /> <polygon fill="#000" points="9.28 5.21 1.42 13 1 13 1 12.55 8.78 4.71 8.12 4.05 0 12.19 0 14 1.78 14 9.94 5.87" /> </svg> theme/assets/images/builder/element-ad.svg000064400000000633151666572140014616 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="1 11 0 11 0 0 10 0 10 4 9 4 9 1 1 1 1 11" /> <path fill="#000" d="m9.3,6h-2.3v5h2.3c.9,0,1.7-.8,1.7-1.7v-1.6c0-.9-.8-1.7-1.7-1.7Zm.7,3.3c0,.4-.3.7-.7.7h-1.3v-3h1.3c.4,0,.7.3.7.7v1.6Z" /> <path fill="#000" d="m5.4,6h-2.4l-1,5h1l.2-1h2.1l.2,1h1l-1.1-5Zm-2,3l.4-2h.8l.4,2h-1.6Z" /> </svg> theme/assets/images/builder/dynamic-field.svg000064400000000562151666572140015311 0ustar00<svg width="10" height="11" viewBox="0 0 10 11" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M5,4.5c3,0,4.5-.84,4.5-2S8,.5,5,.5.5,1.34.5,2.5,2,4.5,5,4.5Z" /> <path fill="none" stroke="#000" d="M9.5,5C9.5,6.16,8,7.5,5,7.5S.5,6.65.5,5.5" /> <path fill="none" stroke="#000" d="M9.5,2.5v5c0,1.74-.36,3-4.5,3S.5,9.23.5,7.5v-5" /> </svg> theme/assets/images/builder/hidden-xl.svg000064400000001125151666572140014454 0ustar00<svg width="17" height="12" viewBox="0 0 17 12" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#000" x1="10.79" y1="0.42" x2="2.79" y2="10.42" /> <polygon fill="#000" points="17 11 17 12 14 12 14 7 15 7 15 11 17 11" /> <polygon fill="#000" points="13 12 11.92 12 10.5 10.17 9.09 12 8 12 9.96 9.46 8.07 7 9.16 7 10.5 8.75 11.86 7 12.94 7 11.05 9.46 13 12" /> <path fill="#000" d="M13.24,5.21c-.09-.16-2.39-3.92-6.56-3.92S.21,5.06.12,5.22L0,5.47l.14.25c.09.16,2.27,3.93,6.56,3.93H7v-1H6.68A7,7,0,0,1,1.14,5.47,7,7,0,0,1,6.68,2.29c3,0,5,2.38,5.53,3.18H13.4Z" /> </svg> theme/assets/images/builder/dynamic-p.svg000064400000000711151666572140014461 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="m5,4.5c3,0,4.5-.8,4.5-2S8,.5,5,.5.5,1.3.5,2.5s1.5,2,4.5,2Z" /> <path fill="none" stroke="#000" d="m.5,5.5c0,1.2,1.5,2,4.5,2h.5" /> <path fill="none" stroke="#000" d="m.5,2.5v5c0,1.7.4,3,4.5,3h.5" /> <path fill="none" stroke="#000" d="m9.5,2.5v2" /> <path fill="none" stroke="#000" d="m7.5,11v-4.5h3v2.57h-3" /> </svg> theme/assets/images/builder/add.svg000064400000000317151666572140013332 0ustar00<svg width="13" height="13" viewBox="0 0 13 13" xmlns="http://www.w3.org/2000/svg"> <rect width="9" height="1" fill="#000" x="2" y="6" /> <rect width="1" height="9" fill="#000" x="6" y="2" /> </svg> theme/assets/images/builder/add-left.svg000064400000000676151666572140014272 0ustar00<svg width="18" height="15" viewBox="0 0 18 15" xmlns="http://www.w3.org/2000/svg"> <path fill="#000" d="M2.167,2.197c2.89-2.929,7.575-2.929,10.464,0l4.813,4.878c0.23,0.234,0.232,0.614,0,0.85l-4.813,4.878 c-2.89,2.93-7.575,2.93-10.464,0C-0.723,9.875-0.723,5.125,2.167,2.197z" /> <rect class="uk-preserve" width="9" height="1" fill="#fff" x="3" y="7" /> <rect class="uk-preserve" width="1" height="9" fill="#fff" x="7" y="3" /> </svg> theme/assets/images/builder/empty.svg000064400000000327151666572140013741 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="1" height="17" fill="#a0a0a0" x="9" y="1" /> <rect width="17" height="1" fill="#a0a0a0" x="1" y="9" /> </svg> theme/assets/images/builder/delete.svg000064400000000735151666572140014050 0ustar00<svg width="12" height="14" viewBox="0 0 12 14" xmlns="http://www.w3.org/2000/svg"> <rect width="5" height="1" fill="#000" x="3" y="0" /> <rect width="11" height="1" fill="#000" x="0" y="2" /> <path fill="#000" d="M9,3 L9,13 L2,13 L2,3 L9,3 L9,3 Z M10,2 L9,2 L2,2 L1,2 L1,3 L1,13 L1,14 L2,14 L9,14 L10,14 L10,13 L10,3 L10,2 L10,2 L10,2 Z" /> <rect width="1" height="5" fill="#000" x="4" y="6" /> <rect width="1" height="5" fill="#000" x="6" y="6" /> </svg> theme/assets/images/builder/disabled.svg000064400000000353151666572140014351 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#000" x1="8.58" y1="1.61" x2="2.44" y2="9.57" /> <circle fill="none" stroke="#000" cx="5.5" cy="5.6" r="5" /> </svg> theme/assets/images/builder/element-h.svg000064400000000427151666572140014462 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="5 11 0 11 0 0 10 0 10 4 9 4 9 1 1 1 1 10 5 10 5 11" /> <polygon fill="#000" points="11 6 11 11 10 11 10 9 8 9 8 11 7 11 7 6 8 6 8 8 10 8 10 6 11 6" /> </svg> theme/assets/images/builder/hidden-m.svg000064400000001042151666572140014263 0ustar00<svg width="15" height="12" viewBox="0 0 15 12" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="15 7 15 12 14 12 14 8.38 12.5 10.71 11 8.38 11 12 10 12 10 7 11.15 7 12.5 9.14 13.85 7 15 7" /> <line fill="none" stroke="#000" x1="10.79" y1="0.42" x2="2.79" y2="10.42" /> <path fill="#000" d="M13.24,5.21c-.09-.16-2.39-3.92-6.56-3.92S.21,5.06.12,5.22L0,5.47l.14.25c.09.16,2.27,3.93,6.56,3.93A6.87,6.87,0,0,0,8,9.52v-1a5.61,5.61,0,0,1-1.32.16A7,7,0,0,1,1.14,5.47,7,7,0,0,1,6.68,2.29c3,0,5,2.38,5.53,3.18H13.4Z" /> </svg> theme/assets/images/builder/contain-r.svg000064400000000253151666572140014473 0ustar00<svg width="3" height="12" viewBox="0 0 3 12" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#000" points=".5 .5 2.5 .5 2.5 11.5 .5 11.5" /> </svg> theme/assets/images/builder/element-a.svg000064400000000423151666572140014447 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="5 11 0 11 0 0 10 0 10 4 9 4 9 1 1 1 1 10 5 10 5 11" /> <path fill="#000" d="m9.9,6h-2.4l-1,5h1l.2-1h2.1l.2,1h1l-1.1-5Zm-2,3l.4-2h.8l.4,2h-1.6Z" /> </svg> theme/assets/images/builder/visible-s.svg000064400000000761151666572140014502 0ustar00<svg width="15" height="11" viewBox="0 0 15 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="12 7 12 8 15 8 15 11 11 11 11 10 14 10 14 9 11 9 11 6 15 6 15 7 12 7" /> <path fill="#000" d="M13.25,4.21c-.1-.16-2.4-3.92-6.56-3.92S.21,4.06.12,4.22L0,4.47l.14.25c.09.16,2.28,3.93,6.57,3.93A6.74,6.74,0,0,0,9,8.24V7.16a5.67,5.67,0,0,1-2.31.49A7,7,0,0,1,1.15,4.47,7,7,0,0,1,6.69,1.29c3,0,5,2.38,5.53,3.18H13.4Z" /> <circle fill="#000" cx="6.69" cy="4.5" r="1.45" /> </svg> theme/assets/images/builder/element-f.svg000064400000000412151666572140014452 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="5 11 0 11 0 0 10 0 10 4 9 4 9 1 1 1 1 10 5 10 5 11" /> <polygon fill="#000" points="8 7 8 8 10 8 10 9 8 9 8 11 7 11 7 6 11 6 11 7 8 7" /> </svg> theme/assets/images/builder/dynamic.svg000064400000000562151666572140014230 0ustar00<svg width="10" height="11" viewBox="0 0 10 11" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="M5,4.5c3,0,4.5-.84,4.5-2S8,.5,5,.5.5,1.34.5,2.5,2,4.5,5,4.5Z" /> <path fill="none" stroke="#000" d="M9.5,5C9.5,6.16,8,7.5,5,7.5S.5,6.65.5,5.5" /> <path fill="none" stroke="#000" d="M9.5,2.5v5c0,1.74-.36,3-4.5,3S.5,9.23.5,7.5v-5" /> </svg> theme/assets/images/builder/element-s.svg000064400000000426151666572140014474 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="5 11 0 11 0 0 10 0 10 4 9 4 9 1 1 1 1 10 5 10 5 11" /> <polygon fill="#000" points="8 7 8 8 11 8 11 11 7 11 7 10 10 10 10 9 7 9 7 6 11 6 11 7 8 7" /> </svg> theme/assets/images/builder/positioned.svg000064400000000636151666572140014763 0ustar00<svg width="11" height="13" viewBox="0 0 11 13" xmlns="http://www.w3.org/2000/svg"> <rect width="10" height="1" fill="#000" x="0.5" y="8" /> <path fill="#000" d="M8,8 L3,8 L3,2 L8,2 L8,8 Z M8.22222222,1 L2.77777778,1 L2,1 L2,1.58333333 L2,7.41666667 L2,8 L2.77777778,8 L8.22222222,8 L9,8 L9,7.41666667 L9,1.58333333 L9,1 L8.22222222,1 Z" /> <rect width="1" height="4" fill="#000" x="5" y="9" /> </svg> theme/assets/images/builder/add-right.svg000064400000000706151666572140014447 0ustar00<svg width="18" height="15" viewBox="0 0 18 15" xmlns="http://www.w3.org/2000/svg"> <path fill="#000" d="M15.832,12.803c-2.891,2.93-7.575,2.93-10.465,0L0.554,7.925c-0.231-0.234-0.233-0.614,0-0.85l4.813-4.878 c2.89-2.929,7.574-2.929,10.465,0C18.722,5.125,18.722,9.875,15.832,12.803z" /> <rect class="uk-preserve" width="9" height="1" fill="#fff" x="6" y="7" /> <rect class="uk-preserve" width="1" height="9" fill="#fff" x="10" y="3" /> </svg> theme/assets/images/builder/undefined-small.svg000064400000000660151666572140015652 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="1.1" cx="10" cy="10" r="9" /> <circle cx="10.44" cy="14.42" r="1.05" /> <path fill="none" stroke="#000" stroke-width="1.2" d="M8.17,7.79 C8.17,4.75 12.72,4.73 12.72,7.72 C12.72,8.67 11.81,9.15 11.23,9.75 C10.75,10.24 10.51,10.73 10.45,11.4 C10.44,11.53 10.43,11.64 10.43,11.75" /> </svg> theme/assets/images/builder/element-hg.svg000064400000000551151666572140014627 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="1 11 0 11 0 0 10 0 10 4 9 4 9 1 1 1 1 11" /> <polygon fill="#000" points="6 6 6 11 5 11 5 9 3 9 3 11 2 11 2 6 3 6 3 8 5 8 5 6 6 6" /> <polygon fill="#000" points="8 7 8 10 10 10 10 9 9 9 9 8 11 8 11 11 7 11 7 6 11 6 11 7 8 7" /> </svg> theme/assets/images/builder/undefined-large.svg000064400000001004151666572140015625 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" stroke-width="2" cx="15" cy="15" r="13" /> <circle fill="none" stroke="#000" stroke-width="2" cx="15" cy="15" r="13" /> <circle cx="14.635" cy="21.385" r="1.517" /> <path fill="none" stroke="#000" stroke-width="2.2" d="M11.356,11.808c0-4.391,6.573-4.419,6.573-0.1 c0,1.371-1.314,2.064-2.152,2.931c-0.694,0.708-1.041,1.416-1.127,2.384c-0.016,0.187-0.029,0.348-0.029,0.505" /> </svg> theme/assets/images/builder/dynamic-n.svg000064400000000750151666572140014462 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="m5,4.5c3,0,4.5-.8,4.5-2S8,.5,5,.5.5,1.3.5,2.5s1.5,2,4.5,2Z" /> <path fill="none" stroke="#000" d="m.5,5.5c0,1.2,1.5,2,4.5,2h.5" /> <path fill="none" stroke="#000" d="m.5,2.5v5c0,1.7.4,3,4.5,3h.5" /> <path fill="none" stroke="#000" d="m9.5,2.5v2" /> <polygon fill="#000" points="11 6 11 11 10 11 8 7.67 8 11 7 11 7 6 8 6 10 9.33 10 6 11 6" /> </svg> theme/assets/images/builder/element-as.svg000064400000000554151666572140014637 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="8 7 8 8 11 8 11 11 7 11 7 10 10 10 10 9 7 9 7 6 11 6 11 7 8 7" /> <polygon fill="#000" points="1 11 0 11 0 0 10 0 10 4 9 4 9 1 1 1 1 11" /> <path fill="#000" d="m5.4,6h-2.4l-1,5h1l.2-1h2.1l.2,1h1l-1.1-5Zm-2,3l.4-2h.8l.4,2h-1.6Z" /> </svg> theme/assets/images/builder/scroll-to.svg000064400000000633151666572140014521 0ustar00<svg width="14" height="14" viewBox="0 0 14 14" xmlns="http://www.w3.org/2000/svg"> <circle fill="none" stroke="#000" cx="7" cy="7" r="5.38" /> <line fill="none" stroke="#000" x1="7" x2="7" y2="5" /> <line fill="none" stroke="#000" x1="7" y1="9" x2="7" y2="14" /> <line fill="none" stroke="#000" y1="7" x2="5" y2="7" /> <line fill="none" stroke="#000" x1="9" y1="7" x2="14" y2="7" /> </svg> theme/assets/images/builder/dynamic-p-n.svg000064400000000755151666572140014724 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#000" d="m5,4.5c3,0,4.5-.8,4.5-2S8,.5,5,.5.5,1.3.5,2.5s1.5,2,4.5,2Z" /> <path fill="#000" d="m0,2.5h1v7.6c-.78-.6-1-1.49-1-2.6V2.5Z" /> <path fill="none" stroke="#000" d="m9.5,2.5v2" /> <polygon fill="#000" points="11 6 11 11 10 11 8 7.67 8 11 7 11 7 6 8 6 10 9.33 10 6 11 6" /> <path fill="#000" d="m3,11h-1v-5h4v3.57h-3v1.43Zm0-2.43h2v-1.57h-2v1.57Z" /> </svg> theme/assets/images/builder/visible-xl.svg000064400000001122151666572140014653 0ustar00<svg width="17" height="11" viewBox="0 0 17 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="17 10 17 11 14 11 14 6 15 6 15 10 17 10" /> <polygon fill="#000" points="13 11.04 11.92 11.04 10.5 9.21 9.09 11.04 8 11.04 9.96 8.5 8.07 6.04 9.16 6.04 10.5 7.79 11.86 6.04 12.94 6.04 11.05 8.5 13 11.04" /> <path fill="#000" d="M13.24,4.21C13.15,4.05,10.85.29,6.68.29S.21,4.06.12,4.22L0,4.47l.14.25c.09.16,2.27,3.93,6.56,3.93H7v-1H6.68A7,7,0,0,1,1.14,4.47,7,7,0,0,1,6.68,1.29c3,0,5,2.38,5.53,3.18H13.4Z" /> <circle fill="#000" cx="6.69" cy="4.5" r="1.45" /> </svg> theme/assets/images/builder/hidden-l.svg000064400000000756151666572140014275 0ustar00<svg width="14" height="12" viewBox="0 0 14 12" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#000" x1="10.79" y1="0.42" x2="2.79" y2="10.42" /> <polygon fill="#000" points="13 11 13 12 10 12 10 7 11 7 11 11 13 11" /> <path fill="#000" d="M13.24,5.21c-.09-.16-2.39-3.92-6.56-3.92S.21,5.06.12,5.22L0,5.47l.14.25c.09.16,2.27,3.93,6.56,3.93A6.87,6.87,0,0,0,8,9.52v-1a5.61,5.61,0,0,1-1.32.16A7,7,0,0,1,1.14,5.47,7,7,0,0,1,6.68,2.29c3,0,5,2.38,5.53,3.18H13.4Z" /> </svg> theme/assets/images/builder/element-n.svg000064400000000422151666572140014463 0ustar00<svg width="11" height="11" viewBox="0 0 11 11" xmlns="http://www.w3.org/2000/svg"> <polygon fill="#000" points="5 11 0 11 0 0 10 0 10 4 9 4 9 1 1 1 1 10 5 10 5 11" /> <polygon fill="#000" points="11 6 11 11 10 11 8 7.7 8 11 7 11 7 6 8 6 10 9.3 10 6 11 6" /> </svg> theme/assets/images/style-library-placeholder.png000064400000020757151666572140016235 0ustar00�PNG IHDR��>_�tEXtSoftwareAdobe ImageReadyq�e<hiTXtXML:com.adobe.xmp<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmpMM:OriginalDocumentID="xmp.did:3C813C0522206811822AB0C48B3EF641" xmpMM:DocumentID="xmp.did:E363E67A5D8811E784F3A0DCA98C7DE8" xmpMM:InstanceID="xmp.iid:E363E6795D8811E784F3A0DCA98C7DE8" xmp:CreatorTool="Adobe Photoshop CS6 (Macintosh)"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:7AF6CAD00C206811822AB67B8729AD36" stRef:documentID="xmp.did:3C813C0522206811822AB0C48B3EF641"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>���lIDATx���l��}�q�οE2$�2Gi�L�P�$%�Di��k��$K�VQ"��"�T��)�X&US�.d+�ȢDm�Щ*J�,e��e5�h8��e�H\�����k�9�b������K�aR����}���y�k���? �@ �B!�A� @ �B!�A� @ �B!�A �B!�A� @ �B!�A� @ �B!�A� �B!�A� @ �B!�A� @ �B!�A� @ !�A� @ �B!�A� @ �B!�A� @ ��A� @ �B!�A� @ �B!�A� @ �B!� @ �B!�A� @ �B!�A� @ �B!�@ �B!�A� @ �B!�A� @ �B!�A� �B!�A� @ �B!�A� @ �B!�A� @B!�A� @ �B!�A� @ �B!�A� @ ��A� @ �B!�A� @ �B!�A� @ �BA� @ �B!�A� @ �B!�A� @ �B!� � !�A� @ �B!�A� @ �B!�A� @ ��A� @ �B!�A� @ �B!�A� @ �BA� @ �B!�A� @ �B!�A� @ �B!�@ �B!�A� @ �B!�A� @ �B!�A �B!�A� @ �B!�A� @ �B!�A� @B!�A� @ �B!�A� @ �B!�A� @ !�A� @ �B!�A� @ �B!%�d@5۲�%����;Z�������f�����g�7y���˛���ot���o�w�>/�����XU[,�/SZC��7�O{�@�b�����֞��?���g���}�d�_dk�p�x9�z��X8��S�_��P�?df�=G���h9���o��zbu��w����F_���4��G@B�m^Ѵ��C�-�|rwgSw�������>�TC�Q':Zs�j������R?��yNe�m�6> �vt�O���Td^����7<~w�é��?6''��s�}8���c�O� �q�o�t��>�����.� ���nq�+�m���x<q.��r��H���Z¯����*eEN��e����-��4�95���T��x�*Q�!�� �t�O<��)��p���T7�n�^ez_WS� �K�6�9�~a_��Ȅ N����z����o_�:���rIr�?{i�ȚZU�!�� �\�y�|<>��ʎƲ��캼`rV*k;�~�w4�iPra�)�ۛ��L��)YP�ݝM�u6��/�%��́�m�nj/����DX.߹m0,�g}}]X�������F�F�C>����i��)����}8��a.���n��/w���V��L +�o�⭧3���gy��s��O�Jo��P�����iף�;𩄰?�,�u���pق�kwl^�j�w>�Z�?�x�c[ֶl�iϿ��ȩ�x�L�х/�x�#r�e��w7��(���2�ۛ���.� ���Ж{�M�+�$���x��,xW����~m�pY�C�x�#�G�!GC��U�����t�N�p��QMH�ټ��{�� �Fj��`�?�؛w�x ��wx(=h�3����r'ԄԞ� ��rp�A �8��ƛ�~�ށ��?�ޗ��z�>oN�;�]���ߖ[�f���g{��O]��Ó*�Co�ށ�r|�j��!P����9�����o�|���&�o��ӓ;a��D� � �{�ԭ������);$,�?��ǃ��}A�F�ē��VC 暰_ 2��'&�==])#�_fF7ӆ�g�Y��=�Q�'��l���3R�!���2q%:���I[n�;��x���9�A��&��]�r9#�H�Y�%���݃� �Xڲ�eق�(+�>Pbd��L�sGÑ�3Ԓ�>n�x�?]���z�x�@�o �u���ᨱY� %�b�u�=H�s\�J�{4�F-���nB�(Ր�x�?=�����M��רmW:32�Oy�J�/7$�v�dHh<B����{��=��f�����jjCBj��`v�A��5?�rItV���i�����Y��yQ[�mBm��!�� !�����bѾ�1O�� Ye$B�!�� !�6��^��� L����Fﺹ��ʝ8��=ij�?<r�] � ��^�s�Dv0��A(F�(�-H�[�剪���ě��=�7�!a���z�5 �j��):���1��>s�\t���>eHH�{�p�|C���y!T�UK�����{��v� �O/��D�;3R�!�� !��5.[V��-����-M� T�2 ��JrM��-���8�932a�@�v�z���}��Ҹ���T���o-�s�`��xvH�PwQӿ�kZz����8�c�}A��gE'���s�f��>;�� Fn��x� ��R�k�����s��BvH8�@�x�0��B)�k���.X���|r1:j���W(b��w�{�cF� B���bt���B%���x�<��B)�Okؚ�[��_ 0��Ih<B �;��;mJυ��TI�$4�r�II�$4!um�.E&���NB�A`��dJ)�A25|?��F�}.�|��<�P%ft'�cw����A`��B)]� `�]�*yN/�S��pق���4!Ԉ�%�:�`fn�.��|!c�/3��0$h<B�N���:�i-jk��<-�����놽=;$4�{��>:M�-H����AQn_���R��:��w��"g�{���n-�37�ּ�P�6ƃ��}A�FX8� )���?L�`�f�bt�=w�OZYVb���ю"gS/�x�l��9�nj7斗(��'�\q�C�u���9�Ϻ^��^�w�\�,�3�=B��Ggp7�h�A�]���z�{�h��~(]䝄E�3!�Cx��=v���q� f��zn����2��M��⇄�xi�� !>v�zV���늂���ƃ�^ ��{���"!��Oޏ��+�${:�� L���N�&ԀR _9�!�J��̑S���״�&0�����9���Ԇ� �A���88CB�B�x�0�Zr�CBG !�z��G���[�5�,P �6��Pc�qH�!�X�C��K<���2P�6�v���\�Pj�}�H���!�� !��g��V�W�x ȷemKwgtP�y�݃ԠY �A���ԉs������[젃I�Xx�;�X4)�x�Y�I��j��o��O�3��u�w�Q��Q�ݍ�߆c$)6�jCB�A@B���?�;����y��}IR�5��ܭ�A8F�}�m3�&(��-�>��:.ۄ���\��{:���/̉u���ߖ�>o��1b�ԭ �4u�P�7�9y!3W;�C�M�]�+S��x�N�� �Y���߄�l��#�Em���m�dC�&��z:�߾���`�A�ֹ��+��Zs;�K?~wk1���`�|���n *ׄ� k�=�[�ށ�k��tL�`CC��=ކ {{��� u��; �=B��&l�43|uS{�o)���Z��ܧ\ @��[��y�3E� ���; �=T�!T� �?Ͽjn��kw�:�znoY�[ֶ<��9?�R��Z������l\U8 ��q�uh�; �A�/�����٫7�9�*��$��}]M+�#����=ёJ{`�T��� >�ֈ=�����1:��Wz�9QB�a5����W.��oï=Gӻ?����3����3���}�����bt�(���.�!0)��{��=�����#q����kkCîé���'���,jk|dU�u� �w�p�2���ΌL��ô{`��K�S� �HX�wd���W>[�� �][禈'�e�>~��Dw�ܴl�4� )��A7�̱57&��6����N�b�[¿�m7&�|�Z ��W���� ��'�����t�O���t�=W9���-(�m*�RoJ�~8m*X B�ww���95>� ,�_�Jo�o�������j�'�(�)����?�g�@��:�䅌��� f#���>{#��oQP� ��z�Qv���c v�E[�%lA� @ �B!�A� @ �B!�A� @ �B!� @ �B!�A� @ �B!�A� @ �B!�@ �B!�A� @ �B!�A� @ �B!�A� �B!�A� @ �B!�A� @ �B!�A� @B!�A� @ �B!�A� @ �B!�A� @ ��A� @ �B!�A� @ �B!�A� @ �BA� @ �B!�A� @ �B!�A� @ �B!�@ �B!�A� @ �B!�A� @ �B!�A �B!�A� @ �B!�A� @ �B!�A� @B!�A� @ �B!�A� @ �B!�A� @ !�A� @ �B!�A� @ �B!�A� @ ���&�B!�A� @ �B!�A� @ �B!�A� @B!�A� @ �B!�A� @ �B!�A� @ !�A� @ �B!�A� @ �B!�A� @ �BA� @ �B!�A� @ �B!�A� @ �B!� @ �B!�A� @ �B!�A� @ �B!�A �B!�A� @ �B!�A� @ �B!�A� �B!�A� @ �B!�A� @ ����0p%<��)�IEND�B`�theme/assets/images/dialog/offcanvas-top.svg000064400000001507151666572140015163 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M85,0h45V90h-45V0Z" /> <circle fill="#444" cx="93.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="98.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="103.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="92" y="12" /> <rect width="17" height="2" fill="#444" x="92" y="22" /> <rect width="20" height="2" fill="#444" x="92" y="17" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1V1Z" /> <rect width="1" height="90" fill="#444" x="85" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="116.5" y1="7.5" x2="122.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="122.5" y1="7.5" x2="116.5" y2="13.5" /> </svg> theme/assets/images/dialog/modal-top.svg000064400000001410151666572140014302 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M0,0H130V90H0V0Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1V1Z" /> <circle fill="#444" cx="60" cy="80.5" r="1.5" /> <circle fill="#444" cx="65" cy="80.5" r="1.5" /> <circle fill="#444" cx="70" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="55" y="12" /> <rect width="17" height="2" fill="#444" x="55" y="22" /> <rect width="20" height="2" fill="#444" x="55" y="17" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="116.5" y1="7.5" x2="122.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="122.5" y1="7.5" x2="116.5" y2="13.5" /> </svg> theme/assets/images/dialog/dropbar-top.svg000064400000001521151666572140014642 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,20h126V87.922H2V20Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1V1Z" /> <rect width="128" height="1" fill="#444" x="1" y="19" /> <circle fill="#444" cx="11.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="16.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="21.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="10" y="30" /> <rect width="17" height="2" fill="#444" x="10" y="40" /> <rect width="20" height="2" fill="#444" x="10" y="35" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="116.5" y1="7.5" x2="122.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="122.5" y1="7.5" x2="116.5" y2="13.5" /> </svg> theme/assets/images/dialog/offcanvas-center.svg000064400000001507151666572140015641 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M85,0h45V90h-45V0Z" /> <circle fill="#444" cx="93.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="98.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="103.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="92" y="37" /> <rect width="17" height="2" fill="#444" x="92" y="47" /> <rect width="20" height="2" fill="#444" x="92" y="42" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1V1Z" /> <rect width="1" height="90" fill="#444" x="85" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="116.5" y1="7.5" x2="122.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="122.5" y1="7.5" x2="116.5" y2="13.5" /> </svg> theme/assets/images/dialog/modal-center.svg000064400000001410151666572140014760 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M0,0H130V90H0V0Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1V1Z" /> <circle fill="#444" cx="60" cy="80.5" r="1.5" /> <circle fill="#444" cx="65" cy="80.5" r="1.5" /> <circle fill="#444" cx="70" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="55" y="37" /> <rect width="17" height="2" fill="#444" x="55" y="47" /> <rect width="20" height="2" fill="#444" x="55" y="42" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="116.5" y1="7.5" x2="122.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="122.5" y1="7.5" x2="116.5" y2="13.5" /> </svg> theme/assets/images/dialog/dropbar-center.svg000064400000001521151666572140015320 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,20h126V87.922H2V20Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1H129V89H1V1Z" /> <rect width="128" height="1" fill="#444" x="1" y="19" /> <circle fill="#444" cx="11.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="16.5" cy="80.5" r="1.5" /> <circle fill="#444" cx="21.5" cy="80.5" r="1.5" /> <rect width="17" height="2" fill="#444" x="10" y="44" /> <rect width="17" height="2" fill="#444" x="10" y="54" /> <rect width="20" height="2" fill="#444" x="10" y="49" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="116.5" y1="7.5" x2="122.5" y2="13.5" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="122.5" y1="7.5" x2="116.5" y2="13.5" /> </svg> theme/assets/images/element-video-placeholder.mp4000064400000007015151666572140016074 0ustar00 ftypmp42isomiso2avc1mp41moovlmvhdڧc�ڧc���@iods���O������trak\tkhdڧc�ڧc��@Tmdia mdhdڧc�ڧc��D�U�!hdlrsounminfsmhd$dinfdrefurl �stblgstsdWmp4a�D3esds���"���@������stts*stsz*stsc*co64I$edtselst��trak\tkhdڧc�ڧc��@ �)mdia mdhdڧc�ڧc���U�!hdlrvide�minfvmhd$dinfdrefurl �stbl�stsd�avc1 �HHJVT/AVC Coding��4avcCM@��gM@�d�D�<�1�h�{,�colrnclcsttsd�stszO��2+ �*$J,+ #!'stscco64Ectts���d��d��d��d��d��d��d�stss$edtselst��mdat�!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@h!@hKe��/���'��v�K�ka�ԷI0�p�-���z՟m0/� ��<���X�o���l���/��+�<���,�Cհ�����`?m/u\AЇQ��(o�a��Z�n��ŏ�R����~>�[C��%2T���_���&Q\Ҙ;Qt��8�ƚD��u��[ZN��6�ݸ�f]Vg�WY��wM�*��wJ`��>�G#��4�ơ��X�(��E@M�<���N�X"�'8��Q�3�)[��<L�~S��6>�#�\���A�$lB���xA�B8�t��a4G����cjG���A�hI�Ah�Lg���mA��.Q0�]���)�����nG����A��5-�2����*��ú���~��E������m@�ц<x�ի����#y_��h���\�G�@��oRܶ�����P� 6̴6-�9-��-��2����(Z�p���u�MP��,��ێ�A��$�D\7��:V9#�`����)�I���nC���<���r��p�A��5-�2���ڦXo9D�lfn�8R�L�=�ZE��5���"_��M��g4�����v���rJ�:O|eq��P ל� C�U�R~=� ���T��a6��W��&��r]��Y� ���Fo��J}*x`��`����w�p')���7�b���Э2Rz���X��hnP���.�ݖ���7~G83�NUT��.A�$�D\��S�J�f��D궞=��I�d�Z�=a'�-)K� *��B�W(�����أ�2@Jځ�/nAoQ���n���2�2��A�45-�2���ڦXb�R��N��? �T=�P��:r���v�N�s��ot�W�j�m@z{&�DV>�=u��GB�-�ʄ�}�Zt�I���1�A#����x] 7n�E���K�3�@;�b�:���Q��=�U�W/�5�Qy�"3��*�Og�e{�:FȬe�R�:��9\&A�R$�D\�м<�d�}�ȽFگ�[�W�� �q)g���Y��iwhj"� ���snA�a��姴��O,)�iFA�x5-�2���ڦXo9G\K�'#��W�, ���N{�/�ʖ}�A �{�Y@�����(A��d�D\����X7fYҋ��"������'��ik����4N?�P�����Q����nA�a��姴��O,)�iA��5-�2���ڦXN�A��d�D\�a������/��0-!��ik�a������/��0- ��nA�a��姴��O,)�i#A��5-�2���ڦX0��9`P���theme/assets/images/finder-list-folder.svg000064400000000475151666572140014652 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <circle fill="#489BE0" cx="15" cy="15" r="15" /> <path fill="#FFFFFF" d="M21,11h-6.5L14,10c-0.266-0.609-0.448-1-1-1H9c-0.552,0-1,0.448-1,1v9c0,0.553,0.448,1,1,1h12c0.553,0,1-0.447,1-1v-7C22,11.448,21.553,11,21,11z" /> </svg> theme/assets/images/field-button-panel.svg000064400000000266151666572140014650 0ustar00<svg width="35" height="14" viewBox="0 0 35 14" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#777" stroke-width="2" points="15 1.5 20.5 7 15 12.5" /> </svg> theme/assets/images/field-image.svg000064400000000732151666572140013320 0ustar00<svg width="37" height="29" viewBox="0 0 37 29" xmlns="http://www.w3.org/2000/svg"> <circle fill="#D0D0D0" cx="28.75" cy="8.253" r="1.75" /> <rect width="35" height="27" fill="none" stroke="#D1D1D1" stroke-width="2" x="1" y="1" /> <polyline fill="none" stroke="#D0D0D0" stroke-width="1.8" points="6.067,20.177 13.3,12.84 22.342,22.011" /> <polyline fill="none" stroke="#D0D0D0" stroke-width="1.8" points="19.725,18.343 22.438,15.591 28.767,22.011" /> </svg> theme/assets/images/finder-thumbnail-folder.svg000064400000001524151666572140015656 0ustar00<svg width="80" height="80" viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg"> <radialGradient id="gradient" cx="305.166" cy="-352.8335" r="66.4185" fx="296.0021" fy="-357.4933" gradientTransform="matrix(1 0 0 -1 -282.5 -324)" gradientUnits="userSpaceOnUse"> <stop offset="0.3111" style="stop-color:#489BE0;stop-opacity:0" /> <stop offset="1" style="stop-color:#489BE0;stop-opacity:0.3" /> </radialGradient> <path fill="#FFFFFF" d="M73,22H38.919l-3.044-7.104C34.792,11.917,33.083,12,31,12H9c-2.209,0-4,1.791-4,4v9v4v36c0,1.657,1.343,3,3,3h65c1.657,0,3-1.343,3-3V25C76,23.343,74.657,22,73,22z" /> <path fill="url(#gradient)" fill-opacity="0" d="M73,22H38.919l-3.044-7.104C34.792,11.917,33.083,12,31,12H9c-2.209,0-4,1.791-4,4v9v4v36c0,1.657,1.343,3,3,3h65c1.657,0,3-1.343,3-3V25C76,23.343,74.657,22,73,22z" /> </svg> theme/assets/images/mobile-header/horizontal-right.svg000064400000001176151666572140017161 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2h62v17H2V2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,.98h64v88H1V.98Z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="54.9" cy="8.9" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M59.5,13.5l-2.3-2.3" /> <rect width="66" height="1" fill="#444" y="19" /> <rect width="12" height="3" fill="#444" x="6" y="9" /> <rect width="5" height="2" fill="#444" x="33" y="10" /> <rect width="5" height="2" fill="#444" x="42" y="10" /> </svg> theme/assets/images/mobile-header/horizontal-center.svg000064400000001176151666572140017324 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2h62v17H2V2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,.98h64v88H1V.98Z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="54.9" cy="8.9" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M59.5,13.5l-2.3-2.3" /> <rect width="66" height="1" fill="#444" y="19" /> <rect width="12" height="3" fill="#444" x="6" y="9" /> <rect width="5" height="2" fill="#444" x="27" y="10" /> <rect width="5" height="2" fill="#444" x="36" y="10" /> </svg> theme/assets/images/mobile-header/horizontal-justify.svg000064400000001176151666572140017541 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2h62v17H2V2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,.98h64v88H1V.98Z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="54.9" cy="8.9" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M59.5,13.5l-2.3-2.3" /> <rect width="66" height="1" fill="#444" y="19" /> <rect width="12" height="3" fill="#444" x="6" y="9" /> <rect width="5" height="2" fill="#444" x="26" y="10" /> <rect width="5" height="2" fill="#444" x="39" y="10" /> </svg> theme/assets/images/mobile-header/horizontal-left.svg000064400000001176151666572140016776 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2h62v17H2V2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,.98h64v88H1V.98Z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="54.9" cy="8.9" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M59.5,13.5l-2.3-2.3" /> <rect width="66" height="1" fill="#444" y="19" /> <rect width="12" height="3" fill="#444" x="6" y="9" /> <rect width="5" height="2" fill="#444" x="22" y="10" /> <rect width="5" height="2" fill="#444" x="31" y="10" /> </svg> theme/assets/images/mobile-header/horizontal-center-logo.svg000064400000001176151666572140020262 0ustar00<svg width="66" height="90" viewBox="0 0 66 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,2h62v17H2V2Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,.98h64v88H1V.98Z" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="55.9" cy="8.9" r="2.9" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M60.5,13.5l-2.3-2.3" /> <rect width="66" height="1" fill="#444" y="19" /> <rect width="12" height="3" fill="#444" x="27" y="9" /> <rect width="5" height="2" fill="#444" x="6" y="10" /> <rect width="5" height="2" fill="#444" x="15" y="10" /> </svg> theme/assets/images/style-reset-hover.svg000064400000000317151666572140014555 0ustar00<svg width="9" height="9" viewBox="0 0 9 9" xmlns="http://www.w3.org/2000/svg"> <path stroke="#444" stroke-width="1.1" d="M8,8 L1,1" /> <path stroke="#444" stroke-width="1.1" d="M8,1 L1,8" /> </svg> theme/assets/images/element-video-placeholder.png000064400000002734151666572140016163 0ustar00�PNG IHDR � �]��PLTE������www��������������𤤤��絵�zzz���������������ǂ��yyy������xxx��骪����������������㻻�}}}|||�����䟟���������͆�����{{{��������ܔ����������ꄄ����~~~��������������������Œ����٫����������欬������������ݢ�����"G�tRNS�d�h��IDATx���C�W���X���S�d�T�P��� �� ��� �� �� � �� �� � �� �� �� �� �� �� �� �� �� �� ��� �� ��� �� �� � �� �� �� �� �� �� �� �� �� �� ��� �� ��� �� �� � �� �� � �� �� �� ��R}�@��]�!A@A@A@AA@��@��*�f H��J;r!͈ӱۋ�.�����ȃ ����=�Bg1�L�;{���a�Bl۶�Ƕm۶��n9�{7��Jݵ[5��-�?�wH-�&�u�W�[7��O%©�ڍ~��5�,e�ץR.5|���>��@��sg� ?wcT� ��QJN=��Ի����*���9������g�\n&��+§�Itjv?�Z�W�Ω0nڣ�S{�{���L�qs��G���p0��ݜ+{�h��U�Ss(_u����9'�����G��߷%��2=mߚ��7�J±dޔ�[ƾ]+uM�m�8����A L̆N�mK��Y2iׁ4�@�|��4�@X�2�0��@@ �@@ ��@@ �@@ Bӟ!�:��@����Z�|n��[�0@9�� ��� �� �� � �� �� �� �� �� �� �� �� �� �� ��� �� ��� �� �� � �� �� � �� �� �� �� �� �� �� �� ��� �� ��� �� �� � �� �� � �� �� �� �� �� �� W���]2IEND�B`�theme/assets/images/search/input-dropbar.svg000064400000001310151666572140015201 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,20h126v68H2V20Z" /> <path class="uk-preserve" fill="#fff" d="M72,6h50v9h-50V6Z" /> <rect width="128" height="1" fill="#444" x="1" y="19" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h128v88H1V1Z" /> <circle fill="#444" cx="61.5" cy="54" r="1" /> <circle fill="#444" cx="65" cy="54" r="1" /> <circle fill="#444" cx="68.5" cy="54" r="1" /> <rect width="51" height="10" fill="none" stroke="#444" stroke-miterlimit="10" x="71.5" y="5.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="74.5" y1="8" x2="74.5" y2="13" /> </svg> theme/assets/images/search/dropbar.svg000064400000001502151666572140014047 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M2,20h126v68H2V20Z" /> <rect width="128" height="1" fill="#444" x="1" y="19" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h128v88H1V1Z" /> <circle fill="#444" cx="61.5" cy="64.5" r="1" /> <circle fill="#444" cx="65" cy="64.5" r="1" /> <circle fill="#444" cx="68.5" cy="64.5" r="1" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="116.47" cy="9.66" r="2.47" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.39,13.57l-1.96-1.96" /> <rect width="51" height="10" fill="none" stroke="#444" stroke-miterlimit="10" x="39.58" y="30.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="42.58" y1="33" x2="42.58" y2="38" /> </svg> theme/assets/images/search/input-dropdown.svg000064400000001466151666572140015420 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M72,6h50v9h-50V6Z" /> <path class="uk-preserve" fill="#fff" d="M58,24h64v47H58V24Z" /> <rect width="128" height="1" fill="#444" x="1" y="19" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h128v88H1V1Z" /> <rect width="51" height="10" fill="none" stroke="#444" stroke-miterlimit="10" x="71.5" y="5.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="74.5" y1="8" x2="74.5" y2="13" /> <rect width="65" height="48" fill="none" stroke="#444" stroke-miterlimit="10" x="57.5" y="23.5" /> <circle fill="#444" cx="86.5" cy="47.5" r="1" /> <circle fill="#444" cx="90" cy="47.5" r="1" /> <circle fill="#444" cx="93.5" cy="47.5" r="1" /> </svg> theme/assets/images/search/modal.svg000064400000001602151666572140013513 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M29,20h72v51H29V20Z" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h128v88H1V1Z" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="103.91" y1="11.07" x2="109.91" y2="17.07" /> <line fill="none" stroke="#444" stroke-width="1.5" x1="109.91" y1="11.07" x2="103.91" y2="17.07" /> <circle fill="#444" cx="61.5" cy="56" r="1" /> <circle fill="#444" cx="65" cy="56" r="1" /> <circle fill="#444" cx="68.5" cy="56" r="1" /> <rect width="73" height="52" fill="none" stroke="#444" stroke-miterlimit="10" x="28.5" y="19.5" /> <rect width="51" height="10" fill="none" stroke="#444" stroke-miterlimit="10" x="39.5" y="30.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="42.5" y1="33" x2="42.5" y2="38" /> </svg> theme/assets/images/search/dropdown.svg000064400000001644151666572140014261 0ustar00<svg width="130" height="90" viewBox="0 0 130 90" xmlns="http://www.w3.org/2000/svg"> <path class="uk-preserve" fill="#fff" d="M58,24h64v47H58V24Z" /> <rect width="128" height="1" fill="#444" x="1" y="19" /> <path fill="none" stroke="#444" stroke-width="2" d="M1,1h128v88H1V1Z" /> <rect width="65" height="48" fill="none" stroke="#444" stroke-miterlimit="10" x="57.5" y="23.5" /> <circle fill="#444" cx="86.5" cy="56" r="1" /> <circle fill="#444" cx="90" cy="56" r="1" /> <circle fill="#444" cx="93.5" cy="56.02" r="1" /> <circle fill="none" stroke="#444" stroke-width="1.2" cx="116.47" cy="9.66" r="2.47" /> <path fill="none" stroke="#444" stroke-width="1.2" d="M120.39,13.57l-1.96-1.96" /> <rect width="51" height="10" fill="none" stroke="#444" stroke-miterlimit="10" x="64.5" y="30.5" /> <line fill="none" stroke="#444" stroke-width="1.2" x1="67.5" y1="33" x2="67.5" y2="38" /> </svg> theme/assets/images/finder-thumbnail-file.svg000064400000001456151666572140015326 0ustar00<svg width="80" height="80" viewBox="0 0 80 80" xmlns="http://www.w3.org/2000/svg"> <linearGradient id="gradient" x1="40" y1="76.582" x2="40.0415" y2="65.04" gradientUnits="userSpaceOnUse"> <stop offset="0" style="stop-color:#000000;stop-opacity:0" /> <stop offset="1" style="stop-color:#000000" /> </linearGradient> <polygon fill="#FFFFFF" points="49,8 15,8 15,73 65,73 65,24" /> <rect width="18" height="1" fill="#CFD2D8" x="26" y="53" /> <rect width="28" height="1" fill="#CFD2D8" x="26" y="46" /> <rect width="28" height="1" fill="#CFD2D8" x="26" y="39" /> <rect width="13" height="1" fill="#CFD2D8" x="26" y="32" /> <polygon fill="#BEC3C7" points="49,24 65,24 49,8" /> <rect width="50" height="7" fill="url(#gradient)" opacity="0.2" x="15" y="73" /> </svg> theme/languages/ro_RO.json000064400000263232151666572140011554 0ustar00{ "- Select -": "- Selectați -", "- Select Module -": "- Selectați modulul -", "- Select Position -": "- Selectați poziția -", "- Select Widget -": "- Selectați piesa -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" există deja în bibliotecă, va fi suprascris la salvare.", "%label% Position": "%label% Poziție", "%name% already exists. Do you really want to rename?": "%name% există deja. Sigur redenumiți?", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Colecție |||| %smart_count% Colecții", "%smart_count% File |||| %smart_count% Files": "%smart_count% Fișier |||| %smart_count% Fișiere", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Fișier selectat |||| %smart_count% Fișiere selectate", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% descărcare a fișierului media nu a reușit: |||| %smart_count% descărcările a fișierelor media nu au reușit:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Fotografie |||| %smart_count% Fotografii", "%smart_count% User |||| %smart_count% Users": "%smart_count% Utilizator |||| %smart_count% Utilizatorii", "About": "Despre", "Accordion": "Acordeon", "Add": "Adaugați", "Add a colon": "Adaugați o coloană", "Add a leader": "Adăugați un lider", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Adăugați un efect de paralaxă sau fixați fundalul la fereastra de vizualizare în timpul derulării.", "Add a parallax effect.": "Adăugați un efect de paralaxă.", "Add bottom margin": "Adăugați margine jos", "Add Element": "Adăugați element", "Add extra margin to the button.": "Adăugați o margine suplimentară la buton.", "Add Folder": "Adăugați dosar", "Add Item": "Adăugați element", "Add Media": "Adăugați media", "Add Menu Item": "Adauți un element de meniu", "Add Module": "Adaugați modul", "Add Row": "Adaugați rând", "Add Section": "Adaugați sectiune", "Add top margin": "Adăugați margine sus", "Adding the Logo": "Adăugați logo", "Adding the Search": "Adăugați căutare", "Adding the Social Icons": "Adăugați iconuri sociale", "Advanced": "Avansat", "After": "După", "After Submit": "După trimitere", "Alert": "Alertă", "Align image without padding": "Aliniați imaginea fără distanțare", "Align the filter controls.": "Aliniați comenzile filtrului.", "Align the image to the left or right.": "Aliniați imaginea la stânga sau la dreapta.", "Align the image to the top or place it between the title and the content.": "Aliniați imaginea sus sau plaseaz-o între titlu și conținut.", "Align the image to the top, left, right or place it between the title and the content.": "Aliniează imaginea sus, la stânga, dreapta sau plaseaz-o între titlu și conținut.", "Align the meta text.": "Aliniați meta textul.", "Align the navigation items.": "Aliniază elementele de navigare.", "Align the section content vertically, if the section height is larger than the content itself.": "Aliniați conținutul secțiunii pe verticală, dacă înălțimea secțiunii este mai mare decât conținutul în sine.", "Align the title and meta text as well as the continue reading button.": "Aliniați titlul și meta textul, precum și butonul de continuare a lecturii.", "Align the title and meta text.": "Aliniați titlul și meta textul.", "Align the title to the top or left in regards to the content.": "Aliniați titlul în partea de sus sau la stânga în ceea ce privește conținutul.", "Alignment": "Aliniere", "Alignment Breakpoint": "Punct de rupere aliniere", "Alignment Fallback": "Aliniere alternativă", "All backgrounds": "Toate fundalurile", "All colors": "Toate culorile", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Toate imaginile sunt licențiate sub <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> ceea ce înseamnă că puteți copia, modifica, distribui și folosi imaginile gratuit, inclusiv în scopuri comerciale, fără a cere permisiunea.", "All Items": "Toate elementele", "All layouts": "Toate schemele", "All styles": "Toate stilurile", "All topics": "Toate subiectele", "All types": "Toate tipurile", "All websites": "Toate siteurile web", "Allow mixed image orientations": "Permiteți orientarea mixtă a imaginilor", "Allow multiple open items": "Permite elemente multiple deschise", "Animate background only": "Animează doar fundalul", "Animate strokes": "Animaţi conturile", "Animation": "Animație", "Any Joomla module can be displayed in your custom layout.": "Orice modul Joomla poate fi afișat în schema personalizată.", "Any WordPress widget can be displayed in your custom layout.": "Orice piesă WordPress poate fi afișat în schema personalizată.", "API Key": "Cheie API", "Apply a margin between the navigation and the slideshow container.": "Aplicați o margine între containerul de navigare și caruselul de prezentare.", "Apply a margin between the overlay and the image container.": "Aplicați o margine între suprapunere și containerul imaginii.", "Apply a margin between the slidenav and the slider container.": "Aplicați o margine între carusel de navigație și containerul carusel.", "Apply a margin between the slidenav and the slideshow container.": "Aplicați o margine între carusel de navigație și containerul caruselul de prezentare.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Se aplică o animație pentru elemente odată ce acestea intră în portul de vizualizare. Animațiile diapozitive pot avea ca efect un offest de la 100% din dimensiunea propriu elementului.", "Articles": "Articole", "Assigning Templates to Pages": "Alocarea șabloanelor la pagini", "Attach the image to the drop's edge.": "Atașați imaginea la marginea drops-ului", "Attention! Page has been updated.": "Atenţie! Pagina a fost actualizată.", "Attributes": "Atribute", "Author": "Autor", "Author Link": "Legătură autor", "Auto-calculated": "Autocalculat", "Autoplay": "Redare automată", "Back": "Înapoi", "Background Color": "Culoare de fundal", "Before": "Înainte", "Behavior": "Comportament", "Blend Mode": "Mod de amestec", "Block Alignment": "Aliniere bloc", "Block Alignment Breakpoint": "Punct de întrerupere aliniere bloc", "Block Alignment Fallback": "Alinire alternativă bloc", "Blur": "Estompare", "Border": "Bordură", "Bottom": "Jos", "Box Decoration": "Decorație casetă", "Box Shadow": "Umbra casetă", "Breadcrumbs": "Firmituri", "Breadcrumbs Home Text": "Text firmituri acasă", "Breakpoint": "Punct de rupere", "Builder": "Constructor", "Button": "Buton", "Button Margin": "Margine buton", "Button Size": "Dimensiune buton", "Buttons": "Butoane", "Campaign Monitor API Token": "Token-ul API Campaign Monitor", "Cancel": "Anulare", "Center": "Centru", "Center columns": "Centrați coloane", "Center horizontally": "Centrați orizontal", "Center rows": "Centrați rânduri", "Center the active slide": "Centrați slide activ", "Center the content": "Centrați conținutul", "Center the module": "Centrați modulul", "Center the title and meta text": "Centrați titlul și meta textul", "Center the title, meta text and button": "Centrați titlul, meta textul și butonul", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Alinierea la centru, stânga și la dreapta poate depinde de un punct de întrerupere și necesită soluție alternativă.", "Changelog": "Jurnalul schimbărilor", "Child Theme": "Temă copil", "Choose a divider style.": "Alegeți un stil de separator", "Choose a map type.": "Alegeți un tip de hartă", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Alegeți între o paralaxă în funcție de poziția de derulare sau de o animație, care se aplică odată ce slide-ul este activ.", "Choose between an attached bar or a notification.": "Alegeți între o bară atașată sau o notificare.", "Choose Font": "Alegeți fontul", "Choose the icon position.": "Alegeți poziție icon", "Class": "Clasă", "Classes": "Clase", "Clear Cache": "Curățați cache", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Curățați imagini din memoria cache. Imaginile care trebuie redimensionate sunt stocate în directorul cache al temei. Dupa ce reîncărcați o imagine cu același nume, va trebui să goliți memoria cache.", "Close": "Închide", "Code": "Cod", "Collections": "Colecții", "Color": "Culoare", "Column": "Coloană", "Column 1": "Coloana 1", "Column 2": "Coloana 2", "Column 3": "Coloana 3", "Column 4": "Coloana 4", "Column 5": "Coloana 5", "Column Gap": "Decalaj coloană", "Column Layout": "Schemă coloană", "Columns": "Coloane", "Columns Breakpoint": "Punct de rupere a coloanelor", "Comments": "Comentarii", "Components": "Componente", "Condition": "Condiție", "Consent Button Style": "Stil buton consimţământ", "Consent Button Text": "Text buton consimţământ", "Container Padding": "Distanțare container", "Container Width": "Lățime container", "Content": "Conținut", "content": "conținut", "Content Alignment": "Aliniere conținut", "Content Length": "Lungime conținut", "Content Margin": "Margine conținut", "Content Parallax": "Conținut Paralaxă", "Content Width": "Lățime conținut", "Controls": "Controloare", "Cookie Banner": "Banner cookie", "Cookie Scripts": "Scripturi cookie", "Copy": "Copie", "Countdown": "Numărătoare inversă", "Creating a New Module": "Creare modul", "Critical Issues": "Probleme critice", "Critical issues detected.": "Probleme critice detectate.", "Curated by <a href>%user%</a>": "Curat de <a href>%user%</a>", "Custom Code": "Cod personalizat", "Customization": "Personalizare", "Customization Name": "Nume personalizare", "Date": "Dată", "Date Format": "Format dată", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Decorează titlul cu un separator, bullet sau o linie aliniată vertical la titlu.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Decorează titlul cu un separator, bulină sau o linie care este centrată pe verticală, la rubrică.", "Decoration": "Decor", "Default": "Implicit", "Define a name to easily identify this element inside the builder.": "Definiți un nume pentru a identifica cu ușurință acest element în interiorul constructorului.", "Define a unique identifier for the element.": "Definiți un identificator unic pentru acest element.", "Define an alignment fallback for device widths below the breakpoint.": "Definiți o aliniere alternativă pentru lățimile dispozitivului sub punctul de întrerupere.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Definiți una sau mai multe nume de clase pentru element. Separați clasele multiple cu spații.", "Define the alignment of the last table column.": "Definiți alinierea ultimei coloane a tabelului.", "Define the device width from which the alignment will apply.": "Definiți lățimea dispozitivului de la care se va aplica alinierea.", "Define the device width from which the max-width will apply.": "Definiți lățimea dispozitivului pentru care se va aplica lățimea maximă.", "Define the layout of the form.": "Definiți aspectul formularului.", "Define the layout of the title, meta and content.": "Definiți aspectul titlului, meta și conținutul.", "Define the order of the table cells.": "Definiți ordinea celulelor tabelului", "Define the padding between items.": "Definiți distanțarea între elemente.", "Define the padding between table rows.": "Definiți distanțarea dintre rândurile tabelului", "Define the title position within the section.": "Definiți poziția titlului în secțiune.", "Define the width of the content cell.": "Definiți lățimea conținutului celulelor.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definiți lățimea navigației. Alegeți între lățimile procentuale și cele fixe ori extindeți coloanele la lățimea conținutului lor.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definiți lățimea imaginii în cadrul grilei. Alegeți între lățimile procentuale și cele fixe sau extindeți coloanele la lățimea conținutului lor.", "Define the width of the meta cell.": "Definiți lățimea celulei meta.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definiți lățimea navigației. Alegeți între lățimile procentuale și cele fixe ori extindeți coloanele la lățimea conținutului lor.", "Define the width of the title cell.": "Definiți lățimea celulei titlului.", "Define the width of the title within the grid.": "Definiți lățimea titlului în cadrul gridului.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definiți lățimea titlului în grilă. Alegeți între procente și lățimi fixe sau extindeți coloanele până la lățimea conținutului lor.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Definiți dacă lățimea elementelor slider este fixată sau extinsă automat cu lățimea conținutului său.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Definiți dacă miniaturile se înfășoară în mai multe linii sau nu, dacă recipientul este prea mic.", "Delete": "Ștergeți", "Description List": "Listă descriere", "Determine how the image or video will blend with the background color.": "Determinați modul în care imaginea sau videoclipul se vor amesteca cu culoarea de fundal.", "Determine how the image will blend with the background color.": "Determinați cum se va combina imaginea cu culoarea de fundal.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Determinați dacă imaginea se va potrivi cu dimensiunile paginii prin decuparea acesteia sau prin umplerea zonelor goale cu culoarea de fundal.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Determină dacă imaginea se va potrivi cu dimensiunile secțiunii prin tăiere sau prin umplerea zonelor goale cu culoarea de fundal.", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Dezactivați redarea automată, pornește redarea automată imediat sau imediat ce videoclipul intră în portul de vizualizare.", "Disable element": "Dezactivați elementul", "Disable Emojis": "Dezactivați emoticoane", "Disable infinite scrolling": "Dezactivați derularea infinită", "Disable item": "Dezactivați element", "Disable row": "Dezactivați rândul", "Disable section": "Dezactivați secțiunea", "Disable wpautop": "Dezactivați wpautop", "Disabled": "Dezactivat", "Discard": "Renunță", "Display": "Afișează", "Display a divider between sidebar and content": "Afișați un separator între bara laterală și conținut", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Afișați un meniu prin selectarea poziției în care ar trebui să apară. De exemplu, publică meniul principal în poziția navbar și un meniu alternativ în poziția de dispozitiv mobil.", "Display header outside the container": "Afișați antetul în afara containerului", "Display icons as buttons": "Afișați icon ca buton", "Display on the right": "Afișați în dreapta", "Display overlay on hover": "Afișați suprapunerea la trecere peste", "Display the breadcrumb navigation": "Afișați un traseu de navigare", "Display the content inside the overlay, as the lightbox caption or both.": "Afișați conținutul în interiorul suprapunerii, sub numele de subtitrare pentru lightbox sau amândouă.", "Display the content inside the panel, as the lightbox caption or both.": "Afișați conținutul in interiorul panoului, ca subtitrare pentru lightbox sau ambele.", "Display the first letter of the paragraph as a large initial.": "Afișați prima literă a paragrafului ca majusculă.", "Display the image only on this device width and larger.": "Afișați imaginea numai pe această lățime de dispozitiv sau mai mare.", "Display the image or video only on this device width and larger.": "Afișați imaginea numai pe această lățime de dispozitiv sau mai mare.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Afișați controalele de hartă și definiți dacă harta poate fi mărită sau să fie trasă cu ajutorul roții mouse-ului sau prin atingere.", "Display the meta text in a sentence or a horizontal list.": "Afișați meta textul într-o propoziție sau o listă orizontală.", "Display the module only from this device width and larger.": "Afișează modulul numai pentru această lățime de dispozitiv sau mai mare.", "Display the navigation only on this device width and larger.": "Afișați navigarea numai pe lățimea acestui dispozitiv și mai mare.", "Display the parallax effect only on this device width and larger.": "Afișați efectul de paralaxă numai pe această lățime a dispozitivului sau mai mare.", "Display the popover on click or hover.": "Afișați popup-ul pe clic sau pe trecere peste.", "Display the slidenav only on this device width and larger.": "Afișați elementul numai pe această lățime de dispozitiv sau mai mare.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Afișați slidenav-ul numai pe lățimea acestui dispozitiv și mai mare. În caz contrar, acesta va fi afișat în interior.", "Display the title inside the overlay, as the lightbox caption or both.": "Afișați titlul în interiorul suprapunerii, sub numele de subtitrare pentru lightbox sau amândouă.", "Display the title inside the panel, as the lightbox caption or both.": "Afișați titlul in interiorul panoului, ca subtitrare pentru lightbox sau ambele.", "Divider": "Separator", "Do you really want to replace the current layout?": "Înlocuiți aspectul actual?", "Do you really want to replace the current style?": "Înlocuiți stilul actual?", "Documentation": "Documentație", "Don't wrap into multiple lines": "Nu vă înfășurați în mai multe linii", "Download": "Descărcați", "Drop Cap": "Letrină", "Dropdown": "Meniu derulant", "Dynamic": "Dinamic", "Dynamic Condition": "Condiție dinamică", "Dynamic Content": "Conținut dinamic", "Edit": "Editează", "Edit %title% %index%": "Editează %title% %index%", "Edit Items": "Editați elementele", "Edit Layout": "Editați schemă", "Edit Menu Item": "Editați elementul de meniu", "Edit Module": "Editați modulul", "Edit Settings": "Editați setările", "Edit Template": "Editați șablon", "Email": "E-mail", "Enable a navigation to move to the previous or next post.": "Permiteți o navigare pentru a trece la postarea anterioară sau următoare.", "Enable autoplay": "Activați pornirea automată", "Enable click mode on text items": "Activați modul clic pe elementele de text", "Enable drop cap": "Activați letrina", "Enable filter navigation": "Activați filtrul navigației", "Enable lightbox gallery": "Activați lightbox-ul în galerie", "Enable map dragging": "Activați tragerea pe hartă", "Enable map zooming": "Activați zoom-ul pe hartă", "Enable masonry effect": "Activați efectul masonry", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Introduceți o listă de etichete separată de virgulă, de exemplu <code>blue, white, black</code>.", "Enter a subtitle that will be displayed beneath the nav item.": "Introduceți un subtitlu care va fi afișat sub elementul nav.", "Enter a table header text for the content column.": "Introduceți un text pentru antetul tabelului pentru coloana de conținut.", "Enter a table header text for the image column.": "Introduceți un text al antetului tabelului pentru coloana imagine.", "Enter a table header text for the link column.": "Introduceți un text de antet al tabelului pentru coloana de legătură.", "Enter a table header text for the meta column.": "Introduceți un text al antetului tabelului pentru coloana meta.", "Enter a table header text for the title column.": "Introduceți un text de antet al tabelului pentru coloana titlului.", "Enter a width for the popover in pixels.": "Introduceți o lățime pentru popover în pixeli.", "Enter an optional footer text.": "Introduceți un text opțional pentru subsol.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Introduceți un text opțional pentru atributul title al legăturii, care va apărea la mouse over.", "Enter labels for the countdown time.": "Introduceți o etichete pentru timpul de numărătoarea inversă.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Introduceți legătura la profilul dvs. social. Se va afișa automat <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">Icon mărcii UIkit</a>, dacă este disponibilă. De asemenea, sunt acceptate legături către adrese de e-mail și numere de telefon, cum ar fi mailto: info@example.com sau tel: +491570156.", "Enter or pick a link, an image or a video file.": "Introduceți sau selectați o legătură, o imagine sau un fișier video.", "Enter the author name.": "Introduceți numele autorului", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Introduceți mesajul de consimţământ a cookie-urilor. Textul implicit servește ca ilustrare. Vă rugăm să o ajustați în conformitate cu legile privind cookie-urile din țara dvs.", "Enter the horizontal position of the marker in percent.": "Introduceți poziția orizontală a marcatorului în procente.", "Enter the image alt attribute.": "Introduceți atributele ”alt” ale imaginii", "Enter the text for the button.": "Introduceți textul pentru buton.", "Enter the text for the home link.": "Introduceți textul pentru legătură.", "Enter the text for the link.": "Introduceți textul pentru legătură.", "Enter the vertical position of the marker in percent.": "Introduceți poziția verticală a marcatorului în procente.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Introduceți legătura dumneavoastră <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID-ul pentru a permite urmărirea. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">Anonimizare IP</a> poate reduce precizia urmăririi.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Introduceți <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> cheia API a dumneavoastră pentru a utiliza Google Maps în loc de OpenStreetMap. Aceasta permite, de asemenea, opțiuni suplimentare pentru a personaliza culorile hărților dvs.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Introduceti legătura dumneavoastră <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> cheia API pentru a fi utilizată cu elementul Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Introduceți CSS dumneavoastră personalizat. Următorii selectori vor fi prefixați automat pentru acest element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Introduceți CSS dumneavoastră personalizat. Următorii selectori vor fi prefixați automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Introduceți propriul CSS personalizat. Următorii selectori vor fi predefiniți automat pentru acest element: <code>.el-section</code>", "Error": "Eroare", "Error: %error%": "Eroare: %error%", "Expand One Side": "Extindeți o parte", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Extindeți lățimea unei părți la stânga sau la dreapta, în timp ce cealaltă parte păstrează limitele lățimii maxime.", "Expand width to table cell": "Extindeți lățimea la celula tabelului", "Extend all content items to the same height.": "Extindeți toate elementele de conținut la aceeași înălțime.", "External Services": "Servicii externe", "Extra Margin": "Margine suplimentară", "Filter": "Filtru", "Finite": "Finit", "First name": "Nume", "Fix the background with regard to the viewport.": "Fixați fundalul la portul de vizualizare.", "Fixed-Inner": "Interior fix", "Fixed-Left": "Fix-stânga", "Fixed-Outer": "Fix-exterior", "Fixed-Right": "Fix-dreapta", "Folder Name": "Numele dosarului", "Font Family": "Familie de fonturi", "Footer": "Subsol", "Force left alignment": "Forțați alinierea la stânga", "Form": "Formular", "Full width button": "Buton pe toată lățimea", "Gallery": "Galerie", "Gamma": "Gama", "Gap": "Decalaj", "Google Fonts": "Fonturi Google", "Google Maps": "Hărți Google", "Grid": "Grilă", "Grid Breakpoint": "Punct de rupere grid", "Grid Column Gap": "Decalaj grilă coloană", "Grid Row Gap": "Decalaj grilă rând", "Grid Width": "Lățime grilă", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Grupați elementele în seturi. Numărul de articole dintr-un set depinde de lățimea definită a articolului, de ex. <i>33%</i> înseamnă că fiecare set conține 3 elemente.", "Halves": "Jumătăți", "Header": "Antet", "Heading": "Antent", "Headline": "Titlu", "Headline styles differ in font size and font family.": "Stilul titlului diferă în mărimea fontului, dar poate, de asemenea, veni cu o culoare predefinită, dimensiune și font.", "Height": "Înălțime", "hex / keyword": "hex / cuvânt cheie", "Hide marker": "Ascunde marcatorul", "Highlight the hovered row": "Evidențiați rândul acoperit", "Home": "Acasă", "Home Text": "Text acasă", "Horizontal Center": "Centrat orizontal", "Horizontal Center Logo": "Logo centrat orizontal", "Horizontal Left": "Orizontal stânga", "Horizontal Right": "Orizontal dreapta", "Hover Box Shadow": "Trecere peste casetă de umbrire", "Hover Image": "Trecere peste imagine", "Hover Style": "Stil trece peste", "Hover Transition": "Tranziție trece peste", "HTML Element": "Element HTML", "Hue": "Nuanță", "Icon Color": "Culoare icon", "Icon Width": "Lățime icon", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Dacă o secțiune sau un rând are o lățime maximă și o parte se extinde la stânga sau la dreapta, distanțarea implicită poate fi îndepărtată din latura în expansiune.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Dacă creați un site multilingv, nu selectați aici un anumit meniu. În schimb, utilizați managerul de module Joomla pentru a publica meniul potrivit în funcție de limba curentă.", "Image": "Imagine", "Image Alignment": "Aliniere imagine", "Image Alt": "Alt-ul imaginii", "Image Attachment": "Atașament imagine", "Image Box Shadow": "Umbră casetă imagine", "Image Effect": "Efect imagine", "Image Height": "Înălțime imagine", "Image Margin": "Margine imagine", "Image Orientation": "Orientare imagine", "Image Position": "Poziția imagine", "Image Size": "Mărime imagine", "Image Width": "Lățime imagine", "Image Width/Height": "Lățime/Înălțime imagine", "Image/Video": "Imagine/video", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Imaginile nu pot fi memorate în cache. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Modificați permisiunile</a> din folderul <code>cache</code> în directorul temei <code>yootheme</code>, astfel încât serverul web să poată scrie în el.", "Inherit transparency from header": "Moștenește transparența din antet", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Injectați imagini SVG în marcajul paginii, astfel încât acestea să poată fi ușor personalizate cu CSS.", "Inline SVG": "SVG în linie", "Insert at the bottom": "Introduceți în partea de jos", "Insert at the top": "Introduceți în partea de sus", "Inset": "În interiorul", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "În loc să folosiți folosiți o imagine personalizată, aveți posibilitatea să faceți clic pe creion pentru a alege un icon din biblioteca de iconuri.", "Inverse Logo (Optional)": "Logo inversat (Optional)", "Inverse style": "Stil invers", "Inverse the text color on hover": "Inversați culoarea textului la trecere peste", "Invert lightness": "Inversează lumina", "IP Anonymization": "Anonimizare IP", "Issues and Improvements": "Probleme și îmbunătățiri", "Item": "Element", "Item Width": "Lățime element", "Item Width Mode": "Mod lățime element", "Items": "Elemente", "Ken Burns Effect": "Efect Ken Burns", "l": "I", "Label Margin": "Margine etichetă", "Labels": "Etichete", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Imaginile în modul portret și panoramă sunt centrate în interiorul celulelor grilei. Lățimea și înălțimea vor fi rotite când imaginile sunt redimensionate.", "Large (Desktop)": "Mare (Desktop)", "Large Screen": "Ecrane mari", "Large Screens": "Ecrane mari", "Larger padding": "Distanțare mare", "Larger style": "Stil mare", "Last Column Alignment": "Alinierea ultimei coloane", "Last name": "Prenume", "Layout": "Schemă", "Layout Media Files": "Schemă fișiere media", "Lazy load video": "Încărcare video lazy", "Left": "Stânga", "Library": "Bibliotecă", "Lightness": "Luminozitate", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Limitați lungimea conținutului la un număr de caractere. Toate elementele HTML vor fi decupate.", "Link": "Legătură", "link": "legătură", "Link card": "Legătură card", "Link image": "Legătură imagine", "Link panel": "Legătură panou", "Link Parallax": "Legătură paralax", "Link Style": "Stil legătură", "Link Target": "Ținta legăturii", "Link Text": "Text legătură", "Link title": "Legătură titlu", "Link Title": "Titlu legătură", "Link to redirect to after submit.": "Legătură de redirecționarea după trimitere.", "List": "Listă", "List Item": "Element de listă", "List Style": "Stil listă", "Load jQuery": "Încărcați JQuery", "Location": "Locație", "Logo Image": "Imagine siglă", "Logo Text": "Text siglă", "Loop video": "Video repetitiv", "Mailchimp API Token": "Token-ul API la Mailchimp", "Main styles": "Stiluri principale", "Make SVG stylable with CSS": "Făceți SVG personalizabil cu CSS", "Map": "Hartă", "Margin": "Margine", "Margin Top": "Margine sus", "Marker": "Marcator", "Match content height": "Potrivește înălțimea conținutului", "Match height": "Potrivește înălțimea", "Match Height": "Egalizează înălțimea", "Match the height of all modules which are styled as a card.": "Potriviți înălțimea tuturor modulelor care sunt concepute ca card.", "Match the height of all widgets which are styled as a card.": "Potriviți înălțimea tuturor pieselor care sunt concepute ca card.", "Max Height": "Înălțimea maximă", "Max Width": "Lățime maximă", "Max Width (Alignment)": "Lățime maximă (Aliniere)", "Max Width Breakpoint": "Lățime maximă punct de rupere", "Media Folder": "Folder media", "Medium (Tablet Landscape)": "Mediu (tableta Landscape)", "Menu": "Meniu", "Menu Style": "Stil meniu", "Menus": "Meniuri", "Message": "Mesaj", "Message shown to the user after submit.": "Mesaj afișat utilizatorului după trimitere.", "Meta Alignment": "Aliniere meta", "Meta Margin": "Margine meta", "Meta Parallax": "Paralax meta", "Meta Style": "Stil meta", "Meta Width": "Lățime Meta", "Min Height": "Înălțime minimă", "Minimum Stability": "Stabilitate minimă", "Mobile": "Mobil", "Mobile Logo (Optional)": "Siglă mobil (optional)", "Mode": "Mod", "Module": "Modul", "Module Position": "Poziție modul", "Modules": "Module", "Move the sidebar to the left of the content": "Muta bara laterala în stânga conținutului.", "Multiple Items Source": "Sursă de elemente multiple", "Mute video": "Dezactivați sunetul video", "Name": "Nume", "Navbar": "Bara de navigație", "Navbar Style": "Stil bară de navigare", "Navigation": "Navigare", "Navigation Label": "Etichetă navigație", "Navigation Thumbnail": "Miniatură navigație", "New Layout": "Schemă nouă", "New Menu Item": "Element de meniu nou", "New Module": "Modul nou", "New Template": "Șablon nou", "Next-Gen Images": "Imagini Next-Gen", "No %item% found.": "%item% nu a fost găsit.", "No critical issues found.": "Nu s-au găsit probleme critice.", "No element presets found.": "Nu au fost găsite presetări de element.", "No files found.": "Nu există fișiere.", "No font found. Press enter if you are adding a custom font.": "Nu am găsit fonturi. Apăsați pe Enter dacă vreți să adăugați un font personalizat.", "No items yet.": "Nu există elemente încă", "No layout found.": "Nu am găsit machete.", "No Results": "Fără rezultate", "No results.": "Fără rezultate.", "No source mapping found.": "Nu a fost găsită o sursă de mapare.", "No style found.": "Nu a fost găsit niciun stil.", "None": "Nici unul", "Not assigned": "Nealocat", "Offcanvas Mode": "Mod offcanvas", "Only available for Google Maps.": "Disponibil doar pentru Hărți Google", "Only display modules that are published and visible on this page.": "Afișați numai module care sunt publicate și vizibile pe această pagină.", "Open in a new window": "Deschide într-o fereastră nouă", "Open the link in a new window": "Deschide legătura într-o fereastră nouă", "Options": "Opțiuni", "Order": "Ordine", "Outside Breakpoint": "În afara punctului de rupere", "Outside Color": "Culoare exterioară", "Overlap the following section": "Suprapune următoarea sectiune", "Overlay": "Suprapunere", "Overlay Color": "Culoare suprapunere", "Overlay Parallax": "Suprapunere paralax", "Overlay the site": "Suprapuneți siteul", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Suprascrie setarea de animație a secțiunii. Această opțiune nu va avea nici un efect cu excepția cazului în care sunt activate animații pentru această secțiune.", "Padding": "Distanțare", "Pagination": "Paginare", "Panel": "Panou", "Panels": "Panouri", "Parallax": "Paralax", "Parallax Breakpoint": "Punc de rupere paralaxă", "Parallax Easing": "Easing paralax", "Pause autoplay on hover": "Oprește redarea automată la trecere peste", "Phone Landscape": "Telefon panoramă", "Phone Portrait": "Telefon portret", "Photos": "Fotografii", "Pick file": "Alegeți fișierul", "Pick icon": "Selectați icon", "Pick link": "Alegeți legătura", "Pick media": "Alegeți media", "Placeholder Image": "Substituent imagine", "Play inline on mobile devices": "Redare în linie pe dispozitivele mobile", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Vă rugăm să instalați/activați <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> pentru a activa această caracteristică.", "Position": "Poziție", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Poziționează elementul deasupra sau sub alte elemente. Dacă au același nivel de stivă, poziția depinde de ordinea din schemă.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Poziționează elementul în fluxul normal de conținut sau în flux normal, dar cu un decalaj relativ la sine, sau scoate-l din flux și poziționează-l în raport cu coloana care conține.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Poziționați navigația în partea de sus, în partea de jos, în stânga sau în dreapta. Un stil mai mare poate fi aplicat navigării la stânga și la dreapta.", "Position the meta text above or below the title.": "Poziționează meta textul deasupra sau sub titlu.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Poziționați navigația în partea de sus, în partea de jos, în stânga sau în dreapta. Un stil mai mare poate fi aplicat navigării la stânga și la dreapta.", "Post": "Postare", "Poster Frame": "Cadru poster", "Preserve text color": "Păstrați culoarea", "Preview all UI components": "Previzualizați toate componentele UI", "Primary navigation": "Navigare primară", "Provider": "Furnizor", "Pull content behind header": "Trageți conținutul de sub bara de navigare", "Quantity": "Cantitate", "Quarters": "Sferturi", "Quarters 1-1-2": "Sferturi 1-1-2", "Quarters 1-2-1": "Sferturi 1-2-1", "Quarters 1-3": "Sferturi 1-3", "Quarters 2-1-1": "Sferturi 2-1-1", "Quarters 3-1": "Sferturi 3-1", "Quotation": "Citat", "Ratio": "Rație", "Reject Button Style": "Stil buton respingere", "Reject Button Text": "Text buton respingere", "Reload Page": "Reîncărcați pagina", "Remove bottom margin": "Îndepărtează marginea de jos", "Remove bottom padding": "Îndepărtați distanțarea de jos", "Remove left and right padding": "Înlăturați distanțarea din stânga și dreapta", "Remove left logo padding": "Eliminați distanțarea din stânga al siglei", "Remove left or right padding": "Eliminați distanțarea stângă sau dreapta", "Remove Media Files": "Eliminați fișierele media", "Remove top margin": "Îndepărtează marginea de sus", "Remove top padding": "Îndepărtează distanțarea de sus", "Rename": "Redenumiți", "Replace": "Înlocuiește", "Replace layout": "Înlocuiește schemă", "Reset": "Resetează", "Reset to defaults": "Resetează", "Responsive": "Responsiv", "Reverse order": "Ordine inversă", "Right": "Dreapta", "Root": "Rădăcină", "Rotate the title 90 degrees clockwise or counterclockwise.": "Rotiți titlul la 90 de grade în sens orar sau în sens contrar acelor de ceasornic", "Rotation": "Rotație", "Row": "Rând", "Row Gap": "Decalaj rând", "Run Time": "Timp de execuție", "Saturation": "Saturație", "Save": "Salvați", "Save %type%": "Salvați %type%", "Save in Library": "Salvați în bibliotecă", "Save Layout": "Salvați macheta", "Save Template": "Salvați șablonul", "Search": "Caută", "Search Style": "Stil căutăre", "Section": "Sectiune", "Section/Row": "Secțiune/Rând", "Select": "Selectați", "Select %type%": "Selectați %type%", "Select a card style.": "Selectați un stil de card.", "Select a different position for this item.": "Selectați o poziție diferită pentru acest element.", "Select a grid layout": "Selectați o schema pentru grilă", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Selectați o poziție a modulului Joomla care va reda toate modulele publicate. Se recomandă utilizarea pozițiilor builder-1 până la -6, care nu sunt redate în altă parte de temă.", "Select a panel style.": "Selectați un stil de panou.", "Select a predefined meta text style, including color, size and font-family.": "Selectați un stil predefinit de meta text, inclusiv culoarea, dimensiunea și familia fontului.", "Select a predefined text style, including color, size and font-family.": "Selectați un stil de text predefinit, inclusiv culoarea, dimensiunea și familia fontului.", "Select a style for the continue reading button.": "Selectați un stil pentru butonul continuă lectura.", "Select a style for the overlay.": "Selectați un stil pentru suprapunere.", "Select a transition for the content when the overlay appears on hover.": "Selectați o tranziție pentru conținut atunci când se afișează la trecere peste suprapunere.", "Select a transition for the link when the overlay appears on hover.": "Selectați o tranziție pentru legătura atunci când se afișează la trecere peste suprapunere.", "Select a transition for the meta text when the overlay appears on hover.": "Selectați o tranziție pentru meta textul atunci când se afișează la trecere peste suprapunere.", "Select a transition for the overlay when it appears on hover.": "Selectați o tranziție pentru suprapunere atunci când apare la trecere peste.", "Select a transition for the title when the overlay appears on hover.": "Selectați o tranziție pentru titlu atunci când apare la trecere peste suprapunere.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Selectați un fișier video sau introduceți o legătură de la <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> sau <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Selectați o zonă de piesă WordPress care va reda toate piesele publicate. Se recomandă utilizarea zonelor de piesă de la builder-1 la -6, care nu sunt redate în altă parte de temă.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Selectați o siglă alternativă cu culori inversate, ex: alb, pentru o vizibilitate mai bună pe fundaluri închise. Va fi afișat automat dacă e nevoie.", "Select an alternative logo, which will be used on small devices.": "Selectați o siglă alternativă pentru a putea fi folosită pe dispozitive mici.", "Select an animation that will be applied to the content items when filtering between them.": "Selectați o animație care va fi aplicată elementelor de conținut atunci când comutați între ele.", "Select an animation that will be applied to the content items when toggling between them.": "Selectați o animație care va fi aplicată elementelor de conținut atunci când comutați între ele.", "Select an image transition.": "Selectați o tranziție de imagine.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Selectați o tranziție a imaginii. Dacă este setată trecerea peste imagine, tranziția are loc între cele două imagini. Dacă <i>Niciunul</i>, este selectat, imaginea de tip \"trecere peste\" se estompează.", "Select an optional image that appears on hover.": "Selectați o imagine opțională care apare la trecere peste.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Selectați o imagine opțională care va fi afișată până rulează video-ul. Dacă nu selectați, primul cadru din video va fi afișat ca poster.", "Select header layout": "Selectați schema antetului", "Select Image": "Selectați imaginea", "Select the content position.": "Selectați poziția conținutului.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Selectați stilul de navigare. Stilurile de pastilă și linii sunt disponibile numai pentru sub navigarea orizontală.", "Select the form size.": "Selectați dimensiunea formularului.", "Select the form style.": "Selectați stilul formularului.", "Select the icon color.": "Selectați culoarea pictogramei", "Select the image border style.": "Selectați stilul bordurii penru imagine", "Select the image box decoration style.": "Selectați stilul de decorare a casetei de imagini.", "Select the image box shadow size on hover.": "Selectați dimensiunea umbrei imaginii la suprapunerea cu mouseul.", "Select the image box shadow size.": "Selectați o dimensiune pentru caseta de umbră imaginii.", "Select the link style.": "Selectați un stil pentru legătură", "Select the list style.": "Selectați stilul listei.", "Select the list to subscribe to.": "Selectați lista la care te abonezi.", "Select the navbar style.": "Selectați stilul barei de navigare.", "Select the navigation type.": "Selectați tipul de navigație.", "Select the overlay or content position.": "Selectați suprapunerea sau poziția conținutului.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Selectați alinierea pop-ului la marker. Dacă pop-ul nu se potrivește cu containerul, acesta se va răsuci automat.", "Select the position of the navigation.": "Selectați poziția navigației.", "Select the position of the slidenav.": "Selectați poziția navigației.", "Select the position that will display the search.": "Selectați poziția în care se va afișa căutarea.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Selectați poziția unde vor fi afișate pictogramele pentru rețelele sociale. Fiți sigur că ați adăugat legăturile altfel iconuri nu vor apărea.", "Select the search style.": "Selectați stilul căutării", "Select the slideshow box shadow size.": "Selectați dimensiunea umbrei casetei slideshow.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Selectați stilul pentru a evidenția sintaxa codului. Utilizați GitHub pentru fundaluri luminoase și Monokai pentru fundaluri întunecate.", "Select the style for the overlay.": "Selectați stilul pentru suprapunere.", "Select the subnav style.": "Selectați un stil pentru sub-navigare", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Selectați culoarea SVG. Se va aplica numai elementelor acceptate definite în SVG.", "Select the table style.": "Selectați un stil de tabel", "Select the text color.": "Selectați culoarea textului.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Selectați culoarea textului. Dacă este selectată opțiunea de fundal, stilurile care nu aplică o imagine de fundal utilizează în schimb culoarea primară.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Selectați culoarea textului. Dacă este selectată opțiunea de fundal, stilurile care nu aplică o imagine de fundal utilizează în schimb culoarea primară.", "Select the title style and add an optional colon at the end of the title.": "Selectați stilul titlului și adăugați o coloană opțională la sfârșitul titlului.", "Select the transformation origin for the Ken Burns animation.": "Selectați originea transformării pentru animația Ken Burns.", "Select the transition between two slides.": "Selectați tranziția dintre două slide-uri.", "Select the video box decoration style.": "Selectați stilul de decorare a casetei de imagini.", "Select the video box shadow size.": "Selectați dimensiunea umbrei casetei videoclipului.", "Select whether a button or a clickable icon inside the email input is shown.": "Selectați dacă este afișat un buton sau un icon pe care se poate da clic în interiorul câmpului de introducere e-mail.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Selectați dacă va fi afișat un mesaj sau dacă veți fi redirecționat după ce faceți clic pe butonul de abonare.", "Select whether the modules should be aligned side by side or stacked above each other.": "Selectați dacă modulele trebuie să fie aliniate unul lângă altul sau stivuite unul peste altul.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Selectați dacă piesele trebuie să fie aliniate unul lângă altul sau stivuite unul peste altul.", "Serve WebP images": "Serviți imagini WebP", "Set a different link text for this item.": "Setați un text de legătură diferit pentru acest element.", "Set a different text color for this item.": "Setați o culoare diferită a textului pentru acest element.", "Set a fixed width.": "Setați o lățime fixă.", "Set a higher stacking order.": "Setați o comandă de stivuire mai mare.", "Set a large initial letter that drops below the first line of the first paragraph.": "Setați o literă inițială mare care scade sub prima linie a primului paragraf.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Setați o lățime de bară laterală în procente, iar coloana de conținut se va ajusta în mod corespunzător. Lățimea nu va merge mai jos de lățimea minimă a barei laterale, pe care o puteți seta în secțiunea Stil.", "Set an additional transparent overlay to soften the image or video.": "Setați o suprapunere transparentă suplimentară pentru a estompa imaginea sau clipul video.", "Set an additional transparent overlay to soften the image.": "Setați o suprapunere transparentă suplimentară pentru accesibilitate imagini.", "Set an optional content width which doesn't affect the image.": "Setați o lățime opțională a conținutului care nu afectează imaginea.", "Set how the module should align when the container is larger than its max-width.": "Setați modul în care modulul trebuie să se alinieze atunci când containerul este mai mare decât lățimea sa maximă.", "Set light or dark color if the navigation is below the slideshow.": "Setați culoarea deschisă sau închisă dacă navigarea este sub slideshow.", "Set light or dark color if the slidenav is outside.": "Setați culoarea deschisă sau închisă dacă navigarea este în afara slideshow.", "Set light or dark color mode for text, buttons and controls.": "Selectați modul luminos sau întunecat pentru text, butoane și controale.", "Set light or dark color mode.": "Setați modul de culoare deschisă sau închisă.", "Set percentage change in lightness (Between -100 and 100).": "Setați variația procentuală a luminozității (între -100 și 100).", "Set percentage change in saturation (Between -100 and 100).": "Setați schimbarea procentuală a saturației (între -100 și 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Setați modificarea procentuală a cantității de corecție gamma (între 0,01 și 10,0, unde 1,0 nu aplică nici o corecție).", "Set the autoplay interval in seconds.": "Setați intervalul de redare automată în secunde.", "Set the blog width.": "Setați lățimea blogului.", "Set the breakpoint from which grid items will stack.": "Setați punctul de întrerupere de la care se vor stiva elementele grilei.", "Set the breakpoint from which the sidebar and content will stack.": "Setați punctul de rupere de la care bara laterală și conținutul se vor stivui.", "Set the button size.": "Selectați dimensiunea butonului.", "Set the button style.": "Selectați stilul butonului.", "Set the duration for the Ken Burns effect in seconds.": "Setați durata efectului Ken Burns în secunde.", "Set the height in pixels.": "Setați înălțimea în pixeli.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Setați poziția orizontală a marginii de jos a elementului în pixeli. Poate fi introdusă o unitate diferită, cum ar fi % sau vw.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Setați poziția orizontală a marginii stângi a elementului în pixeli. Poate fi introdusă o unitate diferită, cum ar fi % sau vw.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Setați poziția orizontală a marginii drepte a elementului în pixeli. Poate fi introdusă o unitate diferită, cum ar fi % sau vw.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Setați poziția orizontală a marginii superioare a elementului în pixeli. Poate fi introdusă o unitate diferită, cum ar fi % sau vw.", "Set the hover style for a linked title.": "Setați un stil de trece peste legătură titlu.", "Set the hover transition for a linked image.": "Setați un stil de trece peste legătură imagine.", "Set the hue, e.g. <i>#ff0000</i>.": "Setați nuanța, de ex. <i>#ff0000</i>.", "Set the icon color.": "Setați culoare icon.", "Set the icon width.": "Setați lățime icon", "Set the initial background position, relative to the page layer.": "Setați poziția de fundal inițială, în raport cu schema paginii.", "Set the initial background position, relative to the section layer.": "Setați poziția inițială a fundalului, în raport cu schema secțiunii.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Setați rezoluția inițială la care se afișează harta. 0 este pentru cel mai mic zoom și 18 cel mai mare.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Setați lățimea elementului pentru fiecare punct de întrerupere. <i>Moștenește</i> se referă la lățimea articolului pentru următoarea dimensiune mai mică a ecranului.", "Set the link style.": "Setați stilul legăturii", "Set the margin between the countdown and the label text.": "Setați marginea dintre numărătoarea inversă și textul etichetei.", "Set the margin between the overlay and the slideshow container.": "Setați marginea dintre suprapunerea și containerul slideshow.", "Set the maximum content width.": "Setează lățimea maximă a conținutului.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Setați lățimea maximă a conținutului. Notă: Secțiunea poate avea deja o lățime maximă, care nu poate fi depășită", "Set the maximum header width.": "Setați lățimea maximă a antetului.", "Set the maximum height.": "Setați înălțimea maximă.", "Set the maximum width.": "Setați lățimea maximă.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Setați numărul de coloane pentru fiecare punct de întrerupere.<i> Inherit</i> se referă la numărul de coloane pe următoarea dimensiune mai mică a ecranului.", "Set the number of list columns.": "Setați numărul de coloane de listă.", "Set the number of text columns.": "Setați numărul de coloane de text.", "Set the padding between sidebar and content.": "Setează distanțarea între bara laterală și conținut.", "Set the padding between the overlay and its content.": "Setați distanțarea între suprapunere și conținutul său.", "Set the padding.": "Setați distanțarea.", "Set the post width. The image and content can't expand beyond this width.": "Setați lățimea postului. Imaginea și conținutul nu se pot extinde dincolo de această lățime.", "Set the size of the column gap between multiple buttons.": "Setați dimensiunea decalajului de coloană între mai multe butoane.", "Set the size of the column gap between the numbers.": "Setați dimensiunea decalajului de coloană între numere.", "Set the size of the gap between between the filter navigation and the content.": "Setați dimensiunea decalajului de coloană între filtrul navigatiei și conținut.", "Set the size of the gap between the grid columns.": "Setați dimensiunea decalajului de coloană între coloanele grilei.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Setați dimensiunea decalajului de coloană între coloanele grilei. Definiți numărul de coloane din setările <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Schemă promovată</a> în Joomla.", "Set the size of the gap between the grid rows.": "Setați dimensiunea decalajului între rândurile grilei.", "Set the size of the gap between the image and the content.": "Setați dimensiunea decalajului între imagine și conținut", "Set the size of the gap between the navigation and the content.": "Setați dimensiunea decalajului între navigare și conținut", "Set the size of the gap between the social icons.": "Setați dimensiunea marginei dintre iconuri sociale.", "Set the size of the gap between the title and the content.": "Setați dimensiunea decalajului între titlu și conținut", "Set the size of the gap if the grid items stack.": "Setați dimensiunea decalajului dacă elementele grilei se stivă", "Set the size of the row gap between multiple buttons.": "Setați dimensiunea decalajului de rând între mai multe butoane.", "Set the size of the row gap between the numbers.": "Setați dimensiunea decalajului de rând între numere.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Setați o rație. Este recomandat să utilizați același raport cu imaginea de fundal. Folosiți lățimea și înălțimea sa, cum ar fi <code>1600:900</code>.", "Set the top margin if the image is aligned between the title and the content.": "Setați margine sus dacă imaginea este aliniată între titlu și conținut.", "Set the top margin.": "Setați margine sus", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Setați margine sus. Rețineți că marginea se va aplica numai dacă câmpul de conținut urmează imediat un alt câmp de conținut.", "Set the velocity in pixels per millisecond.": "Setați velocitatea în pixeli pe milisecundă.", "Set the vertical container padding to position the overlay.": "Setați distanțarea containerul vertical pentru poziționarea suprapunerii.", "Set the vertical margin.": "Setează marginea verticală.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Setează marginea verticală. Notă: marginea de sus a primului element și marginea de jos a ultimului element sunt întotdeauna eliminate. Definiți în schimb acestea în setările grilei.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Setați marginea verticală. Notă: marginea de sus și marginea de jos a grilei sunt întotdeauna eliminate. Definiți în schimb acestea în setările secțiunii.", "Set the vertical padding.": "Setează distanțare verticală", "Set the video dimensions.": "Setează dimensiunile video.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Setați lățimea și înălțimea pentru conținutul casetei lightbox, de ex. imagine, video sau iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Setați lățimea și înălțimea în pixeli (de exemplu, 600). Stabilind doar o singură valoare se păstrează proporțiile originale. Imaginea va fi redimensionate și decupată automat.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Setați lățimea și înălțimea în pixeli. Stabilind doar o singură valoare se păstrează proporțiile originale. Imaginea va fi redimensionate și decupată automat.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Setați lățimea în pixeli. Dacă nu este setată nicio lățime, harta va lua întreaga lățime și va păstra înălțimea. Sau utilizați lățimea numai pentru a defini punctul de întrerupere din care harta începe să se micșoreze păstrând raportul de aspect.", "Sets": "Seturi", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Setarea unei singure valori păstrează proporțiile originale. Imaginea va fi redimensionată și tăiată automat și, dacă este posibil, imaginile la rezoluție mare vor fi generate automat.", "Settings": "Setări", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Afișați un banner pentru a informa vizitatorii dvs despre cookie-urile utilizate de site-ul dvs. Alegeți între o notificare simplă conform căreia cookie-urile sunt încărcate sau aveți nevoie de un acord obligatoriu înainte de a încărca cookie-uri.", "Show a divider between grid columns.": "Afișați un separator între coloanele grilei.", "Show a separator between the numbers.": "Afișați un separator între numere.", "Show archive category title": "Arată titlul categoriei arhivei", "Show author": "Afișați autorul", "Show below slideshow": "Afișați sub slideshow", "Show button": "Afișați buton", "Show categories": "Afișați categoriile", "Show comment count": "Afișați numărul de comentarii", "Show comments count": "Afișați numărul de comentarii", "Show content": "Afișați continutul", "Show Content": "Afișați conținutul", "Show controls": "Afișați controale", "Show current page": "Afișează pagina curentă", "Show date": "Afișați data", "Show dividers": "Afișați separatoarele", "Show drop cap": "Afișați letrina", "Show filter control for all items": "Afișați controlul filtrului pentru toate elementele", "Show home link": "Afișați legătură acasă", "Show hover effect if linked.": "Afișează efectul trecere peste dacă este legat.", "Show Labels": "Afișează etichetele", "Show link": "Arată legătura", "Show map controls": "Afișează controalele pentru hartă", "Show name fields": "Afișează numele câmpurilor", "Show navigation": "Afișați navigația", "Show on hover only": "Afișați numai la trecere peste", "Show or hide content fields without the need to delete the content itself.": "Afișați sau ascundeți câmpurile de conținut fără a fi nevoie să ștergeți conținutul în sine.", "Show popup on load": "Afișați popup-ul la încărcare", "Show Separators": "Afișați separatoarele", "Show space between links": "Afișați spațiu între legături", "Show Start/End links": "Afișați Începutul/Terminarea legăturiilor", "Show system fields for single posts. This option does not apply to the blog.": "Afișați câmpurile de sistem pentru postări unice. Această opțiune nu se aplică blogului.", "Show system fields for the blog. This option does not apply to single posts.": "Afișați câmpurile de sistem pentru blog. Această opțiune nu se aplică postărilor unice.", "Show tags": "Afișați etichetele", "Show Tags": "Afișați etichetele", "Show the content": "Arată conținutul", "Show the excerpt in the blog overview instead of the post text.": "Afișați the excerpt în prezentare generală a blogului în locul textului postat.", "Show the image": "Arată imaginea", "Show the link": "Arată legătura", "Show the menu text next to the icon": "Afișați textul meniu lăngă icon", "Show the meta text": "Afișați meta textul", "Show the navigation label instead of title": "Afișați eticheta de navigare în locul titlului", "Show the navigation thumbnail instead of the image": "Afișați miniatura de navigare în locul imaginii", "Show the title": "Afișează titlul", "Show title": "Afișați titlul", "Show Title": "Afișați titlul", "Sidebar": "Bară laterală", "Site": "Sit", "Size": "Mărime", "Slide all visible items at once": "Glisați toate elementele vizibile simultan", "Slidenav": "Bară laterală", "Small (Phone Landscape)": "Mic (telefon mod landscape)", "Social Icons": "Iconuri sociale", "Social Icons Gap": "Margine iconuri sociale", "Social Icons Size": "Mărime iconuri sociale", "Split the dropdown into columns.": "Împarte meniul derulant în coloane.", "Spread": "Răspândire", "Stack columns on small devices or enable overflow scroll for the container.": "Stivuiește coloanele pe dispozitive mici sau permite derularea pentru container.", "Stacked Center A": "Stivuit Centrat A", "Stacked Center B": "Stivuit Centrat B", "Stacked Center C": "Stivuit Centrat A", "Status": "Stare", "Stretch the panel to match the height of the grid cell.": "Întinde panoul pentru a se potrivi cu înălțimea celulei grilei.", "Style": "Stil", "Subnav": "Sub-navigare", "Subtitle": "Subtitlu", "Support": "Asistență", "SVG Color": "Culoare SVG", "Switcher": "Comutator", "Syntax Highlighting": "Evidențiere sintaxă", "System Check": "Verificare sistem", "Table": "Tabel", "Table Head": "Antetul tabelului", "Tablet Landscape": "Tabel landscape", "Tags": "Etichete", "Target": "Ţintă", "Text Alignment": "Alinierea textului.", "Text Alignment Breakpoint": "Punctul de rupere al alinierii textului.", "Text Alignment Fallback": "Alinierea alternativă a textului", "Text Color": "Culoarea textului", "Text Style": "Stil text", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "Bara din partea de sus împinge conținutul în jos, în timp ce bara din partea de jos este fixată deasupra conținutului.", "The changes you made will be lost if you navigate away from this page.": "Modificările pe care le-ați făcut vor fi pierdute dacă părăsiți această pagină.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Înălțimea se va adapta automat în funcție de conținutul său. În mod alternativ, înălțimea se poate adapta înălțimii portului de vizualizare. <br><br> Notă: Asigurați-vă că nu este setată nicio înălțime în setările secțiunii atunci când utilizați una dintre opțiunile portului de vizualizare.", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "Efectul masonry creează o schemă lipsită de decalajuri, chiar dacă elementele grilă au înălțimi diferite. ", "The module maximum width.": "Lățimea maximă a modulului.", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "Pagina a fost actualizată de %modifiedBy%. Renunțați la modificări și reîncărcați?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "Pagina pe care o editați în prezent a fost actualizată de %modified_by%. Salvarea modificărilor va suprascrie modificările anterioare. Salvați sau să eliminați modificările și să reîncărcați pagina?", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "Pluginul RSFirewall corupe conținutul constructorului. Dezactivați funcția <em>Convertiți adresele de e-mail din simplu text în imagini</em> în <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">Configurația RSFirewall</a>.", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "Pluginul SEBLOD face ca constructorul să nu fie disponibil. Dezactivați funcția <em>Ascunde icon editare</em> în <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">Configurația SEBLOD</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Slideshow ocupă întotdeauna lățimea completă, iar înălțimea se va adapta automat pe baza raportului definit. În mod alternativ, înălțimea se poate adapta înălțimii portului de vizualizare. <br><br> Notă: Asigurați-vă că nu este setată nicio înălțime în setările secțiunii atunci când utilizați una dintre opțiunile portului de vizualizare.", "The width of the grid column that contains the module.": "Lățimea coloanei grilă care conține modulul.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "Dosarul temei YOOtheme Pro a fost redenumit, încălcând funcționalități esențiale. Redenumiți folderul cu tema înapoi la <code>yootheme</code>.", "Thirds": "Treimi", "Thirds 1-2": "Treimi 1-2", "Thirds 2-1": "Treimi 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Acest folder stochează imaginile pe care le descărcați atunci când utilizați machete din biblioteca YOOtheme Pro. Este localizat în folderul de imagini Joomla.", "This is only used, if the thumbnail navigation is set.": "Acest lucru este utilizat numai dacă este setată navigarea prin miniatură.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Această machetă include imagini care necesită să fie descărcate în biblioteca media a siteului dumneavoastră. |||| Această machetă include %smart_count% imagini care necesită să fie descărcate în biblioteca media a siteului dumneavoastră..", "This option doesn't apply unless a URL has been added to the item.": "Această opțiune nu se aplică dacă nu a fost adăugat un element URL la articol.", "This option is only used if the thumbnail navigation is set.": "Această opțiune este folosită numai dacă este setată navigarea prin miniatură.", "Thumbnail Inline SVG": "Miniatură SVG în linie", "Thumbnail SVG Color": "Culoare miniatură SVG", "Thumbnail Width/Height": "Lățime/Înălțime miniatură", "Thumbnail Wrap": "Înfășurare miniatură", "Thumbnails": "Miniatură", "Thumbnav Inline SVG": "Miniatură SVG în linie", "Thumbnav SVG Color": "Culoare miniatură SVG", "Thumbnav Wrap": "Înfășurare miniatură", "Title": "Titlu", "title": "Titlu", "Title Decoration": "Decorațiunea titlului", "Title Margin": "Margine titlu", "Title Parallax": "Title Paralax", "Title Style": "Stil titlu", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Stilurile de titlu diferă în dimensiunea fontului, dar pot să vină și cu o culoare, dimensiune și font predefinite.", "Title Width": "Lățime titlu", "To Top": "Sus", "Toolbar": "Bară de instrumente", "Top": "Sus", "Touch Icon": "Icon atingere", "Transition": "Tranziție", "Transparent Header": "Antet transparent", "Type": "Tip", "Upload": "Încărcați", "Upload a background image.": "Încărcați o imagine de fundal.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Încărcați o imagine de fundal opțională care să acopere. Va fii fixă când derulați pagina.", "Use a numeric pagination or previous/next links to move between blog pages.": "Utilizați o navigare numerică sau legături anterioare/următoare pentru a vă deplasa între paginile blogului.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Utilizați o înălțime minimă opțională pentru a împiedica imaginile să devină mai mici decât conținutul pe dispozitive mici.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Utilizați o înălțime minimă opțională pentru a împiedica caruselul să devină mai mic decât conținutul său pe dispozitive mici.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Utilizați o înălțime minimă opțională pentru a împiedica caruselul de prezentarea să devină mai mic decât conținutul său pe dispozitive mici.", "Use as breakpoint only": "Folosiți numai ca punct de întrerupere", "Use double opt-in.": "Utilizați double opt-in.", "Use excerpt": "Folosiți excerpt", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Utilizați culoarea de fundal în combinație cu modurile de amestec, o imagine transparentă sau pentru a umple zona dacă imaginea nu acoperă întreaga pagină.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Utilizați culoarea de fundal în combinație cu modurile de amestecare, o imagine transparentă sau pentru a umple zona, în cazul în care imaginea nu acoperă întreaga secțiune.", "Use the background color in combination with blend modes.": "Utilizați culoarea de fundal în combinație cu modurile de amestec.", "Users": "Utilizatori", "Using Custom Fields": "Utilizați câmpuri personalizate", "Using Custom Sources": "Folosind surse personalizate", "Using Images": "Folosind imagini", "Using Links": "Folosind legături", "Using Related Sources": "Folosind surse conexe", "Using WordPress Popular Posts": "Folosind posturi populare WordPress", "Value": "Valoare", "Velocity": "Velocitate", "Version %version%": "Versiune %version%", "Vertical Alignment": "Aliniere verticală", "Vertical navigation": "Navigare verticală", "Vertically align the elements in the column.": "Aliniați vertical elementele din coloană.", "Vertically center grid items.": "Aliniați vertical elementele de grilă.", "Vertically center table cells.": "Centrați vertical celulele de tabel.", "Vertically center the image.": "Centrați vertical imaginea.", "Vertically center the navigation and content.": "Centrează vertical navigația ți conținutul.", "Videos": "Videoclipuri", "View Photos": "Vizualizați fotografii", "Viewport": "Port de vizualizare", "Visibility": "Vizibilitate", "Visible on this page": "Vizibile pe această pagină", "Visual": "Vizual", "When using cover mode, you need to set the text color manually.": "Când utilizați modul de acoperire, trebuie să setați manual culoarea textului.", "Whole": "Întreg", "Widget": "Piesă", "Widget Area": "Zonă piesă", "Width": "Lățime", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Lățimea și înălțimea vor fi rotite corespunzător, dacă imaginea este în format portret sau peisaj.", "Width/Height": "Lățime/Înălțime", "X-Large (Large Screens)": "X-Mare (ecrane mari)", "YOOtheme API Key": "Cheie API YOOtheme", "YOOtheme Help": "Ajutor YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro este complet operațional și este gata de decolare.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro nu este operațional. Trebuie rezolvate toate problemele critice.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro este operațional, dar există probleme care trebuie rezolvate pentru a debloca funcții și a îmbunătăți performanța.", "Z Index": "Index Z" }theme/languages/lb_LU.json000064400000002363151666572140011525 0ustar00{ "- Select -": "- Auswielen -", "- Select Module -": "- Module auswielen -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" existéiert schonn an der Bibliothéik, et wäert iwwerschriwwe ginn wann Dir späichert.", "%label% Position": "%label% Positioun", "About": "Iwwer", "Add": "Dobäisetzen", "Add a colon": "Kolonn dobäisetzen", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Eegenen Javacsript bäisetzen. <script> tags sinn net néideg.", "Add Element": "Element dobäisetzen", "Add Folder": "Dossier dobäisetzen", "Add Item": "Item dobäisetzen", "Add Menu Item": "Menu Item dobäisetzen", "Add Module": "Module dobäisetzen", "Add Row": "Reih dobäisetzen", "Add Section": "Sectioun dobäisetzen", "Advanced": "Fortgeschratt", "Alert": "Alert", "Align image without padding": "Bild alignéieren ouni padding", "Align the image to the left or right.": "Bild lenks oder riets alignéieren", "Align the image to the top, left, right or place it between the title and the content.": "Bild entweder erop, lenks oder riets alignéieren; oder tëscht dem Titel an dem Inhalt setzen." }theme/languages/bn_IN.json000064400000006702151666572140011516 0ustar00{ "a": "Ēkaṭi", "About": "Samparkita", "Accordion": "Bādyayantrabiśēṣa", "Add": "Yōga", "Add a colon": "Ēkaṭi kōlana yōga karuna", "Add a leader": "Ēkaṭi nētā yōga karuna", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Skrōlinẏēra samaẏa bhi'upōrṭēra sāthē ēkaṭi pyārālyāksa prabhāba yukta karuna bā paṭabhūmiṭi ṭhika karuna.", "Add a parallax effect.": "Ēkaṭi pyārālyāksa prabhāba yōga karuna.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Āpanāra sā'iṭē kāsṭama jābhāskripṭa yōga karuna. <Script> ṭyāga praẏōjana haẏa nā.", "Add Element": "Upādāna yōga karuna", "Add extra margin to the button.": "Bāṭana atirikta mārjina yōga karuna", "Add Folder": "Phōlḍāra yōga karuna", "Add Item": "Ā'iṭēma yōga karuna", "Add Module": "Maḍi'ula yōga karuna", "Add Row": "Sāri yōga karuna", "Add Section": "Bibhāga yōga karuna", "Advanced": "Agrasara", "After Submit": "Jamā dē'ōẏāra parē", "Alert": "Satarka", "Align image without padding": "Pyāḍiṁ chāṛā imēja sanlagna", "Align the filter controls.": "Philṭāra niẏantraṇa sāribad'dha.", "Align the image to the left or right.": "Chabiṭi bāma bā ḍāna dikē sājāna.", "Align the image to the top or place it between the title and the content.": "Uparēra chabiṭi sāribad'dha karuna athabā śirōnāma ēbaṁ sāmagrīṭira madhyē rākhuna.", "Align the image to the top, left, right or place it between the title and the content.": "Chabiṭi uparē, bāma, ḍāna dikē sannibēśa karuna athabā śirōnāma ēbaṁ sāmagrīṭira madhyē rākhuna.", "Align the navigation items.": "N'yābhigēśana ēra ā'iṭēma sanlagna.", "Align the section content vertically, if the section height is larger than the content itself.": "Yadi bibhāgēra uccatā kanṭēnṭēra cēẏē baṛa haẏa tabē bibhāgēra sāmagrīṭi ullambabhābē sanlagna karuna.", "Align the title and meta text as well as the continue reading button.": "Śirōnāma ēbaṁ mēṭā ṭēksaṭa pāśāpāśi abirata paṛā bāṭana sāribad'dha.", "Align the title and meta text.": "Śirōnāma ēbaṁ mēṭā ṭēksaṭa sāribad'dha.", "Alignment": "Śrēṇībin'yāsa", "Alignment Breakpoint": "Ayālā'inamēnṭa brēkapaẏēnṭa", "Alignment Fallback": "Ayālā'inamēnṭa phālyākaba", "All backgrounds": "Samasta byākagrā'unḍa", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Saba chabi adhīnē lā'isēnsa karā haẏa<a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Kriẏēṭibha kamansa jirō</a> Yāra artha āpani anumati chāṛā'i bāṇijyika uddēśyē saha, chabiguli anulipi, sanśōdhana, bitaraṇa ēbaṁ byabahāra karatē pārēna.", "All Items": "Sakala prakāra", "All layouts": "Samasta lē'ā'uṭa", "All styles": "Saba śailī", "All topics": "Saba biṣaẏa", "All types": "Saba dharanēra", "All websites": "Saba ōẏēbasā'iṭa", "No items yet.": "Ēkhanō kōna ā'iṭēma nē'i." }theme/languages/zh_TW.json000064400000000655151666572140011565 0ustar00{ "- Select -": "- 選擇 -", "- Select Module -": "- 選擇模組 -", "- Select Position -": "- 選擇位置 -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\"已存在於資料中, 儲存時將會複寫.", "%label% Position": "%label% 位置", "Articles": "文章", "Author": "作者", "Author Link": "作者链接", "Autoplay": "自动播放" }theme/languages/fa_IR.json000064400000415466151666572140011524 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "انتخاب", "- Select Module -": "انتخاب ماژول", "- Select Position -": "انتخاب موقعیت", "- Select Widget -": "انتخاب ویجت", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" در کتابخانه موجود است، و پس از ذخیره بازنویسی میشود.", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% المان", "%label% - %group%": "%label% - %group%", "%label% Location": "%label% Location", "%label% Position": "%label% موقعیت", "%name% already exists. Do you really want to rename?": "%name% درحال حاضر وجود دارد. آیا واقعاً می خواهید تغییر نام دهید?", "%post_type% Archive": "%post_type% آرشیو", "%s is already a list member.": "%s هنوز عضو لیست است.", "%s of %s": "%s از%s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s برای همیشه حذف شد و نمی توان آن را دوباره وارد کرد. مخاطب باید دوباره مشترک شود تا دوباره در لیست قرار گیرد.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% مجموعه |||| %smart_count% مجموعه", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% المان|||| %smart_count% المان", "%smart_count% File |||| %smart_count% Files": "%smart_count% فایل |||| %smart_count% فایل ها", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% فایل انتخاب شده |||| %smart_count% فایل ها انتخاب شده", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% آیکون|||| %smart_count% آیکون", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% چیدمان |||| %smart_count% چیدمان", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% بارگیری پرونده رسانه انجام نشد: |||| %smart_count% بارگیری پرونده رسانه انجام نشد:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% عکس|||| %smart_count% عکس", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% پیشفرض|||| %smart_count% پیشفرض", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% ظاهر|||| %smart_count% ظاهر", "%smart_count% User |||| %smart_count% Users": "%smart_count% کاربر|||| %smart_count% کاربر", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% فقط از والد انتخابی بارگیری می شوند %taxonomy%.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% پیشفرض", "<code>json_encode()</code> must be available. Install and enable the <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> extension.": "<code>json_encode()</code> باید در دسترس باشد <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> را نصب و فعال کنید.", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 ستون", "1 Column Content Width": "یک ستون عرض مطلب", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Column Grid": "شبکه 2 ستونه", "2 Column Grid (Meta only)": "شبکه دو ستونه ( فقط متا)", "2 Columns": "2 ستون", "20%": "20%", "25%": "25%", "2X-Large": "2X-Large", "3 Columns": "3 ستون", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3X-Large": "3X-Large", "4 Columns": "4 ستون", "40%": "40%", "5 Columns": "5 ستون", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 Aug, 1999 (j M, Y)", "6 Columns": "6 ستون", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "لینک", "About": "درباره", "Accordion": "آکاردئون", "Active": "فعال", "Active item": "آیتم فعال", "Add": "افزودن", "Add a colon": "افزودن دونقطه", "Add a leader": "افزودن پیشرو", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "یک اثر اختلاف منظر را اضافه کنید یا پس زمینه را با توجه به نمایشگر در حین پیمایش رفع کنید.", "Add a parallax effect.": "افزودن افکت اختلاف منظر", "Add bottom margin": "افزودن حاشیه دکمه", "Add Element": "افزودن عنصر", "Add extra margin to the button.": "اضافه کردن حاشیه اضافی به دکمه", "Add Folder": "افزودن پوشه", "Add Item": "افزودن موارد", "Add Media": "افزودن رسانه", "Add Menu Item": "افزودن منو", "Add Module": "افزودن ماژول", "Add Row": "افزودن ردیف", "Add Section": "افزودن بخش", "Add text after the content field.": "افزودن متن بعد از فیلد محتوا", "Add text before the content field.": "افزودن متن قبل از فیلد محتوا", "Add to Cart Link": "لینک افزودن به سبد خرید", "Add to Cart Text": "متن افزودن به سبد خرید", "Add top margin": "افزودن حاشیه بالا", "Adding a New Page": "افزودن صفحه جدید", "Adding the Logo": "افزودن لوگو", "Adding the Search": "افزودن جستجو", "Adding the Social Icons": "اضافه کردن نمادهای اجتماعی", "Additional Information": "اطلاعات بیشتر", "Address": "آدرس", "Advanced": "پیشرفته", "Advanced WooCommerce Integration": "تعامل پیشرفته WooCommerce", "After": "بعد از", "After Display Content": "پس از نمایش محتوا", "After Display Title": "پس از نمایش عنوان", "After Submit": "بعد از تایید", "Alert": "هشدار", "Align image without padding": "تراز تصویر بدون حاشیه بیرونی", "Align the filter controls.": "تراز کردن کنترلرهای فیلتر", "Align the image to the left or right.": "تراز کردن تصویر به چپ یا راست", "Align the image to the top or place it between the title and the content.": "تصویر را به سمت بالا قرار دهید یا آن را بین عنوان و محتوای قرار دهید.", "Align the image to the top, left, right or place it between the title and the content.": "تصویر را به بالا، چپ، راست راست یا بین عنوان و محتوا تراز کنید.", "Align the meta text.": "متن متا را تراز کنید.", "Align the navigation items.": "هماهنگ کردن موارد ناوبری", "Align the section content vertically, if the section height is larger than the content itself.": "محتوای بخش را عمودی تراز کنید، اگر ارتفاع بخش بزرگتر از محتوا باشد.", "Align the title and meta text as well as the continue reading button.": "تراز کردن عنوان و متن متا و همچنین دکمه ادامه متن", "Align the title and meta text.": "عنوان و متا متن را تراز کنید.", "Align the title to the top or left in regards to the content.": "عنوان را با توجه به محتوا به بالا یا چپ تراز کنید.", "Alignment": "تراز", "Alignment Breakpoint": "نقطه انشعاب هم ترازی", "Alignment Fallback": "نقطه بازگشت هم ترازی", "All backgrounds": "همه زمینه ها", "All colors": "همه رنگ ها", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "کلیه تصاویر تحت <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'> Creative Commons Zero </a> مجاز هستند ، به این معنی که می توانید کپی ، اصلاح ، توزیع و استفاده از تصاویر به صورت رایگان ، از جمله اهداف تجاری ، بدون درخواست مجوز.", "All Items": "همه موارد", "All layouts": "تمام طرح بندی ها", "All pages": "همه صفحات", "All presets": "همه پیش طرح ها", "All styles": "همه سبک ها", "All topics": "همه موضوعات", "All types": "همه انواع", "All websites": "همه وب سایت ها", "All-time": "همیشه", "Allow mixed image orientations": "جهت گیری های مخلوط تصویر را اجازه دهید", "Allow multiple open items": "چندین مورد باز کردن را مجاز کنید", "Alphabetical": "الفبایی", "Alphanumeric Ordering": "ترتیب الفبایی", "Alt": "جایگزین", "Animate background only": "فقط پس زمینه متحرک", "Animate items": "متحرک سازی آیتم ها", "Animate strokes": "متحرک سازی خطوط", "Animation": "متحرک سازی", "Animation Delay": "تاخیر متحرک سازی", "Any": "هر", "Any Joomla module can be displayed in your custom layout.": "هر ماژول جوملا می تواند در طرح سفارشی شما نمایش داده شود.", "Any WordPress widget can be displayed in your custom layout.": "هر ابزارک وردپرس می تواند در طرح سفارشی شما نمایش داده شود.", "API Key": "کلید API", "Apply a margin between the navigation and the slideshow container.": "حاشیه ای بین ناوبری و ظاهر نمایش اسلاید را اعمال کنید.", "Apply a margin between the overlay and the image container.": "حاشیه ای را بین پوشش و ظرف تصویر قرار دهید.", "Apply a margin between the slidenav and the slider container.": "حاشیه بین اسلاید نویگیشن و ظرف اسلایدر را اعمال کنید.", "Apply a margin between the slidenav and the slideshow container.": "یک حاشیه بین اسلاید نو و ظرف ظاهر اسلایدشو را اعمال کنید.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "پس از ورود به نمایشگر، انیمیشن را به عناصر اعمال کنید. انیمیشن های اسلاید می توانند با یک افست ثابت یا در 100٪ از اندازه عنصر خود به کار برده شوند.", "Archive": "آرشیو", "Article": "مقاله", "Article Count": "تعداد مقاله", "Article Order": "ترتیب مقاله", "Articles": "مقالات", "Assigning Modules to Specific Pages": "اختصاص ماژول به صفحات خاص", "Assigning Templates to Pages": "اختصاص الگوهای به صفحات", "Assigning Widgets to Specific Pages": "اختصاص ابزارک به صفحات خاص", "Attach the image to the drop's edge.": "تصویر را به لبه قطره وصل کنید.", "Attention! Page has been updated.": "توجه! صفحه به روز شده است", "Attributes": "ویژگی ها", "Author": "نویسنده", "Author Archive": "آرشیو مولف", "Author Link": "لینک نویسنده", "Auto-calculated": "محاسبه خودکار", "Autoplay": "پخش خودکار", "Avatar": "نمایه", "Average Daily Views": "میانگین نمایش روزانه", "Back": "بازگشت", "Back to top": "بازگشت به بالا", "Background": "پس زمینه", "Background Color": "رنگ زمینه", "Background Image": "عکس زمینه", "Badge": "نشان", "Bar": "بار", "Base Style": "استایل اصلی", "Basename": "نام پایه", "Before": "قبل از", "Before Display Content": "قبل از نمایش محتوا", "Behavior": "رفتار", "Below Content": "زیر محتوا", "Below Title": "زیر عنوان", "Beta": "بتا", "Between": "بین", "Blank": "خالی", "Blend": "ترکیب", "Blend Mode": "حالت ترکیب", "Blend the element with the page content.": "عنصر را با محتوای صفحه ترکیب کنید.", "Blend with image": "ترکیب با عکس", "Blend with page content": "ترکیب با محتوای صفحه", "Block Alignment": "تراز بلاک", "Block Alignment Breakpoint": "نقطه شکست تراز بلاک", "Block Alignment Fallback": "تغییر موضع تراز بلاک", "Blog": "بلاگ", "Blur": "تاری", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "بوت استرپ تنها زمانی مورد نیاز است که فایلهای قالب پیشفرض جوملا بارگذاری شوند، به عنوان مثال برای ویرایش پیشفرض جوملا. jQuery را برای نوشتن کد سفارشی بر اساس کتابخانه جاوا اسکریپت jQuery بارگیری کنید.", "Border": "مرز", "Bottom": "پایین", "Bottom Center": "پائین وسط", "Bottom Left": "پائین چپ", "Bottom Right": "پائین راست", "Box Decoration": "دکوراسیون جعبه", "Box Shadow": "سایه جعبه", "Boxed": "باکس شده", "Brackets": "براکت", "Breadcrumb": "مسیر", "Breadcrumbs": "مسیریاب", "Breadcrumbs Home Text": "عنوان خانه در مسیر", "Breakpoint": "نقطه شکست", "Builder": "سایت ساز", "Button": "دکمه", "Button Margin": "حاشیه دکمه", "Button Size": "سایز دکمه", "Buttons": "دکمه ها", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "بطور پیش فرض ، زمینه های منابع مرتبط با موارد واحد برای نقشه برداری در دسترس است. یک منبع مرتبط را انتخاب کنید که دارای چندین آیتم برای نقشه زمینه های آن باشد.", "Cache": "حافظه نهان", "Campaign Monitor API Token": "کمپین مانیتور API", "Cancel": "لغو", "Caption": "عنوان", "Cart Quantity": "مقدار سبد خرید", "Categories": "دسته بندی ها", "Category Blog": "دسته بندی بلاگ", "Category Order": "ترتیب دسته بندی", "Center": "وسط", "Center columns": "مرکز ستون ها", "Center grid columns horizontally and rows vertically.": "ستونهای شبکه به صورت افقی و به صورت عمودی وسط ردیف می شوند.", "Center horizontally": "وسط افقی", "Center rows": "ردیف های وسط", "Center the active slide": "اسلاید فعال را وسط کنید", "Center the content": "وسط محتوا", "Center the module": "وسط ماژول", "Center the title and meta text": "عنوان و متن متا را وسط دهید", "Center the title, meta text and button": "وسط عنوان، متا متن و دکمه", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "وسط، تراز چپ و راست ممکن است به یک نقطه شکست بستگی داشته باشد و نیاز به تغییر وضعیت جایگزینی دارد.", "Changed": "تغییر یافته", "Changelog": "تغییرات", "Child Theme": "بچه قالب", "Choose a divider style.": "یک سبک تقسیم را انتخاب کنید", "Choose a map type.": "نوع نقشه را انتخاب کنید", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "بین یک اختلاف منظر را بسته به موقعیت اسکرول یا یک انیمیشن انتخاب کنید، که یک بار فعال شده است.", "Choose between an attached bar or a notification.": "بین یک نوار پیوست یا یک اعلان را انتخاب کنید.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "بین صفحه قبلی یا بعدی یا صفحه بندی عددی را انتخاب کنید. صفحه بندی عددی برای مقالات تک در دسترس نیست.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "بین صفحه قبلی یا بعدی یا صفحه بندی عددی را انتخاب کنید. صفحه بندی عددی برای پست های مجرد در دسترس نیست.", "Choose Font": "قلم را انتخاب کنید", "Choose the icon position.": "انتخاب موقعیت آیکون", "Class": "کلاس", "Classes": "کلاس ها", "Clear Cache": "پاکسازی حافظه نهان", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "پاک کردن تصاویر و داراییهای ذخیره شده. تصاویری که نیاز به تغییر اندازه دارند در پوشه حافظه پنهان موضوع ذخیره می شوند. پس از بارگذاری مجدد تصویری با همین نام ، باید حافظه نهان را پاک کنید.", "Close": "بستن", "Code": "کد", "Collapsing Layouts": "چیدمان های جمع شو", "Collections": "مجموعه ها", "Color": "رنگ", "Column": "ستون", "Column 1": "ستون 1", "Column 2": "ستون 2", "Column 3": "ستون 3", "Column 4": "ستون 4", "Column 5": "ستون 5", "Column Gap": "فاصله بین ستون", "Column Layout": "چیدمان ستون", "Columns": "ستون ها", "Columns Breakpoint": "نقطه شکست ستون ها", "Comments": "نظرات", "Components": "کامپوننت ها", "Condition": "وضعیت", "Consent Button Style": "سبک دکمه رضایت", "Consent Button Text": "نوشته دکمه رضایت", "Container Padding": "حاشیه بیرونی محدوده", "Container Width": "عرض کانتینر", "Content": "محتوا", "content": "محتوا", "Content Alignment": "تراز محتوا", "Content Length": "طول محتوا", "Content Margin": "فاصله خارجی محتوا", "Content Parallax": "پارالکس محتوا", "Content Width": "عرض محتوا", "Controls": "کنترل ها", "Cookie Banner": "بنر کوکی", "Cookie Scripts": "اسکریپت های کوکی", "Copy": "رونوشت", "Countdown": "شمارش معکوس", "Country": "کشور", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "یک طرح کلی برای این نوع صفحه ایجاد کنید. با یک طرح جدید شروع کنید و از بین مجموعه ای از عناصر آماده استفاده کنید و یا کتابخانه طرح را مرور کنید و با یکی از طرح های از پیش ساخته شروع کنید.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "یک صفحه برای همه قسمت ها ایجاد کنید. با یک طرح جدید شروع کنید و از بین مجموعه ای از عناصر آماده استفاده کنید و یا کتابخانه طرح را مرور کنید و با یکی از طرح های از پیش ساخته شروع کنید.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "یک طرح برای این ماژول ایجاد کنید و آن را در موقعیت بالا یا پایین منتشر کنید. با یک طرح جدید شروع کنید و از بین مجموعه ای از عناصر آماده استفاده کنید و یا کتابخانه طرح را مرور کنید و با یکی از طرح های از پیش ساخته شروع کنید.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "یک طرح بندی برای این ابزارک ایجاد کنید و آن را در قسمت بالا یا پایین منتشر کنید. با یک طرح جدید شروع کنید و از بین مجموعه ای از عناصر آماده استفاده کنید و یا کتابخانه طرح را مرور کنید و با یکی از طرح های از پیش ساخته شروع کنید.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "یک صفحه شخصی برای صفحه فعلی ایجاد کنید. با یک طرح جدید شروع کنید و از بین مجموعه ای از عناصر آماده استفاده کنید و یا کتابخانه طرح را مرور کنید و با یکی از طرح های از پیش ساخته شروع کنید.", "Creating a New Module": "ایجاد یک ماژول جدید", "Creating a New Widget": "ایجاد یک ابزارک جدید", "Creating Accordion Menus": "ایجاد منوهای آکاردئونی", "Creating Advanced Module Layouts": "ایجاد طرح بندی ماژول پیشرفته", "Creating Advanced Widget Layouts": "ایجاد طرح های ابزارک پیشرفته", "Creating Menu Dividers": "ایجاد تقسیم منو", "Creating Menu Heading": "ایجاد عنوان فهرست", "Creating Menu Headings": "ایجاد عناوین منو", "Creating Navbar Text Items": "ایجاد موارد متن نوار", "Critical Issues": "مسائل بحرانی", "Critical issues detected.": "مسائل بحرانی شناسایی شد.", "Curated by <a href>%user%</a>": "انتخاب شده توسط <a href>%user%</a>", "Current Layout": "چیدمان فعلی", "Current Style": "استایل فعلی", "Custom Code": "کد سفارشی", "Customization": "سفارشی سازی", "Customization Name": "نام شخصی سازی", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "عرض ستون طرحبندی انتخاب شده را ویرایش کنید و ترتیب ستون را تنظیم کنید. تغییر در طرح بندی کل تغییرات را تنظیم مجدد خواهد کرد.", "Date": "تاریخ", "Date Archive": "آرشیو تاریخ", "Date Format": "فرمت تاریخ", "Day Archive": "آرشیو روز", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "تیتر را با یک تقسیم کننده ، گلوله یا یک خط که به طور عمودی در قسمت قرار دارد تزئین کنید.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "عنوان را با یک تقسیم کننده ، گلوله یا یک خط که به طور عمودی در قسمت قرار دارد تزئین کنید.", "Decoration": "دکوراسیون", "Default": "پیش فرض", "Define a background style or an image of a column and set the vertical alignment for its content.": "یک طرح زمینه یا تصویر برای ستون تعیین کنید و چیدمان عمودی را برای محتوایش تنظیم کنید.", "Define a name to easily identify this element inside the builder.": "یک نام را تعیین کنید تا این عنصر به راحتی در سایت ساز شناسایی شود.", "Define a unique identifier for the element.": "یک شناسه منحصر به فرد برای این عنصر تعریف کنید.", "Define an alignment fallback for device widths below the breakpoint.": "تغییر وضعیت خط تراز دستگاه را در زیر نقطه شکست تعریف کنید.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "ویژگی های مختلف را برای المنت مورد نظر تعیین کنید. اسم و مقدار ویژگی را با استفاده از کاراکتر <code>=</code> از هم جدا کنید . هر ویژگی را در سطر جداگانه بنویسید.", "Define one or more class names for the element. Separate multiple classes with spaces.": "برای عنصر یک یا چند کلاس کلاس تعریف کنید. چندین کلاس را با فاصله جدا کنید.", "Define the alignment in case the container exceeds the element max-width.": "تراز را در صورتی که مورد کانتینر بیش از حداکثر عرض عنصر باشد تعریف کنید.", "Define the alignment of the last table column.": "تراز ستون جدول آخر را تعیین کنید.", "Define the device width from which the alignment will apply.": "عرض دستگاه را مشخص کنید که از آن تراز استفاده شود.", "Define the device width from which the max-width will apply.": "عرض دستگاه را تعیین کنید که از آن حداکثر عرض استفاده شود.", "Define the layout of the form.": "طرح فرم را مشخص کنید.", "Define the layout of the title, meta and content.": "طرح عنوان ، متا و محتوا را تعریف کنید.", "Define the order of the table cells.": "ترتیب سلولهای جدول را تعیین کنید.", "Define the padding between items.": "فاصله بین آیتم ها را تعیین کنید.", "Define the padding between table rows.": "حاشیه بیرونی را بین ردیف های جدول تعریف کنید.", "Define the title position within the section.": "موقعیت عنوان را در بخش مشخص کنید.", "Define the width of the content cell.": "عرض سلول محتوا را تعیین کنید.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "عرض ناوبری فیلتر را تعیین کنید. درصد یا عرض ثابت را انتخاب کنید یا ستونها را به عرض محتوای آنها گسترش دهید.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "عرض تصویر را در داخل شبکه تعریف کنید. درصد یا عرض ثابت را انتخاب کنید یا ستونها را به عرض محتوای آنها گسترش دهید.", "Define the width of the meta cell.": "عرض سلول متا را مشخص کنید.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "عرض ناوبری را تعریف کنید. درصد یا عرض ثابت را انتخاب کنید یا ستونها را به عرض محتوای آنها گسترش دهید.", "Define the width of the title cell.": "عرض سلول عنوان را تعیین کنید.", "Define the width of the title within the grid.": "عرض عنوان را در شبکه تعریف کنید.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "عرض عنوان را در شبکه تعریف کنید. درصد و یا عرض ثابت را انتخاب کنید یا ستونها را به عرض محتوای آنها گسترش دهید.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "تعیین کنید که عرض آیتم های کشویی ثابت باشد یا بطور خودکار توسط عرض محتوای آن گسترش یافته باشد.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "تعریف کنید که آیا کوچک بودن بسته زیر عکس ها به خطوط مختلف بسته می شود یا خیر.", "Delete": "حذف", "Description List": "لیست توضیحات", "Desktop": "دسکتاپ", "Determine how the image or video will blend with the background color.": "تعیین کنید که چگونه تصویر یا ویدیو با رنگ پس زمینه ترکیب می شود.", "Determine how the image will blend with the background color.": "تعیین نحوه ترکیب تصویر با رنگ پس زمینه.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "مشخص کنید که آیا تصویر با قطع آن با ابعاد صفحه مناسب خواهد بود یا با پر کردن قسمت های خالی با رنگ پس زمینه.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "مشخص کنید که آیا تصویر با قطع آن با ابعاد بخش مناسب خواهد بود یا با پر کردن قسمت های خالی با رنگ پس زمینه.", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "پخش خودکار را غیرفعال کنید ، بلافاصله یا به محض ورود ویدیو به قسمت مشاهده ، پخش را شروع کنید.", "Disable element": "غیرفعال کردن عنصر", "Disable Emojis": "غیرفعال کردن شکلک ها", "Disable infinite scrolling": "پیمایش نامحدود را غیرفعال کنید", "Disable item": "غیر فعال کردن آیتم", "Disable row": "ردیف را غیرفعال کنید", "Disable section": "بخش را غیرفعال کنید", "Disable wpautop": "wpautop را غیرفعال کنید", "Disabled": "غیر فعال", "Discard": "دور انداختن", "Display": "نمایش", "Display a divider between sidebar and content": "تقسیم بین نوار کناری و محتوا را نشان دهید", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "با انتخاب موقعیتی که در آن باید ظاهر شود ، یک فهرست را نشان دهید. به عنوان مثال ، منوی اصلی را در موقعیت ناوبری و یک منوی جایگزین در موقعیت موبایل منتشر کنید.", "Display header outside the container": "هدر خارج از کانتینر را نشان دهید", "Display icons as buttons": "نمادها را به عنوان دکمه نمایش دهید", "Display on the right": "نمایش در سمت راست", "Display overlay on hover": "نمایش پوشش روی حالت شناور", "Display the breadcrumb navigation": "نمایش مسیریاب ناوبری", "Display the content inside the overlay, as the lightbox caption or both.": "محتوای داخل روکش را در لایت باکس به عنوان یا هر دو نمایش دهید.", "Display the content inside the panel, as the lightbox caption or both.": "محتوای داخل پنل را در لایت باکس به عنوان یا هر دو نمایش دهید.", "Display the first letter of the paragraph as a large initial.": "اولین حرف پاراگراف را به عنوان اصلی بزرگ نمایش دهید.", "Display the image only on this device width and larger.": "تصویر را فقط در عرض و بزرگتر این دستگاه نمایش دهید.", "Display the image or video only on this device width and larger.": "تصویر را فقط در عرض و بزرگتر این دستگاه نمایش دهید.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "کنترل های نقشه را نشان داده و مشخص کنید که آیا نقشه با استفاده از چرخ ماوس یا لمس می توان آن را بزرگنمایی کرد یا خیر.", "Display the meta text in a sentence or a horizontal list.": "متن متا را در یک جمله یا یک لیست افقی نمایش دهید.", "Display the module only from this device width and larger.": "ماژول را فقط از عرض و بزرگتر این دستگاه نمایش دهید.", "Display the navigation only on this device width and larger.": "پیمایش را فقط در عرض و بزرگتر این دستگاه نمایش دهید.", "Display the parallax effect only on this device width and larger.": "اثر اختلاف منظر را فقط در عرض و بزرگتر این دستگاه نمایش دهید.", "Display the popover on click or hover.": "نمایش popover روی حالت کلیک یا شناور.", "Display the section title on the defined screen size and larger.": "عنوان بخش در اندازه صفحه نمایش مشخص و بزرگتر نمایش داده می شود.", "Display the slidenav only on this device width and larger.": "نمایش ناوبری اسلاید را فقط در عرض این دستگاه و بزرگتر نشان دهید.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "نمایش ناوبری اسلاید را فقط در خارج از این عرض دستگاه و بزرگتر نشان دهید. در غیر این صورت داخل نمایش داده می شود.", "Display the title in the same line as the content.": "نمایش عنوان در همان خط به عنوان محتوا", "Display the title inside the overlay, as the lightbox caption or both.": "عنوان را در زیر لایه نمایش دهید ، به عنوان لایت باکس یا هر دو.", "Display the title inside the panel, as the lightbox caption or both.": "عنوان را در زیر پنل نمایش دهید ، به عنوان لایت باکس یا هر دو.", "Displaying the Breadcrumbs": "نمایش مسیریاب", "Displaying the Excerpt": "نمایش گزیده ای", "Displaying the Mobile Header": "نمایش هدر مویابل", "Divider": "جدا کننده", "Do you really want to replace the current layout?": "آیا واقعاً می خواهید طرح فعلی را جایگزین کنید؟", "Do you really want to replace the current style?": "آیا واقعاً می خواهید سبک فعلی را جایگزین کنید؟", "Documentation": "مستندات", "Don't wrap into multiple lines": "به چند خط پیچیده نشود", "Double opt-in": "دو بار انتخاب کردن", "Download": "دانلود", "Download All": "دانلود همه", "Download Less": "دانلود کمتر", "Draft new page": "پیش نویس صفحه جدید", "Drop Cap": "رها کردن درپوش", "Dropdown": "کشویی", "Dynamic": "پویا", "Dynamic Condition": "ویژگی داینامیک", "Dynamic Content": "محتوای پویا", "Easing": "کاهشی", "Edit": "ویرایش", "Edit Items": "موارد را ویرایش کنید", "Edit Layout": "ویرایش طرحبندی", "Edit Menu Item": "ویرایش مورد منو", "Edit Module": "ویرایش ماژول", "Edit Settings": "ویرایش تنظیمات", "Edit Template": "ویرایش قالب", "Element": "المان", "Email": "ایمیل", "Enable a navigation to move to the previous or next post.": "ناوبری را فعال کنید تا به پست قبلی یا بعدی بروید.", "Enable autoplay": "پخش خودکار را فعال کنید", "Enable click mode on text items": "حالت کلیک را روی موارد متن فعال کنید", "Enable drop cap": "حالت درپوش را فعال کنید", "Enable filter navigation": "فیلتر ناوبری را فعال کنید", "Enable lightbox gallery": "لایت باکس گالری را فعال کنید", "Enable map dragging": "قابلیت کشیدن نقشه", "Enable map zooming": "قابلیت بزرگنمایی نقشه", "Enable masonry effect": "جلوه سنگ تراشی را فعال کنید", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "لیستی از برچسب های جدا شده با کاما را وارد کنید.بعنوان مثال , <code>blue, white, black</code>.", "Enter a decorative section title which is aligned to the section edge.": "عنوانی تزئینی را وارد کنید که مطابق با لبه بخش باشد.", "Enter a subtitle that will be displayed beneath the nav item.": "زیرنویس را وارد کنید که در زیر مورد ناو نمایش داده می شود.", "Enter a table header text for the content column.": "برای ستون محتوا یک متن هدر جدول وارد کنید.", "Enter a table header text for the image column.": "برای ستون تصویر یک متن هدر جدول وارد کنید.", "Enter a table header text for the link column.": "برای ستون پیوند یک متن هدر جدول وارد کنید.", "Enter a table header text for the meta column.": "برای ستون متا یک متن هدر جدول وارد کنید.", "Enter a table header text for the title column.": "متن ستون عنوان را وارد کنید.", "Enter a width for the popover in pixels.": "عرض popover را به پیکسل وارد کنید.", "Enter an optional footer text.": "یک متن پاورقی اختیاری وارد کنید.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "برای ویژگی عنوان پیوند ، یک متن اختیاری را وارد کنید ، که در حالت شناور ظاهر می شود.", "Enter labels for the countdown time.": "برچسب ها را برای زمان شمارش معکوس وارد کنید.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "لینک پروفایل شبکه اجتماعی خود را واردکنید . یک آیکون <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">آیکون های برند UIKIT</a> به صورت خودکار انتخاب خواهد شد. لینک به شماره تماس ( tel:+989141231234 یا آدرس ایمیل mailto:info@mesal.ir نیز پشتیبانی می شود.", "Enter or pick a link, an image or a video file.": "پیوند ، تصویر یا یک فایل ویدیویی را وارد یا انتخاب کنید.", "Enter the author name.": "نام نویسنده را وارد کنید.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "پیام رضایت کوکی را وارد کنید. متن پیش فرض به عنوان تصویر ارائه می شود. لطفاً آن را مطابق قوانین کوکی کشور خود تنظیم کنید.", "Enter the horizontal position of the marker in percent.": "موقعیت افقی نشانگر را به درصد وارد کنید.", "Enter the image alt attribute.": "ویژگی alt تصویر را وارد کنید.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "رشته های جایگزینی که شاید منابعی داشته باشند ر", "Enter the text for the button.": "متن را برای دکمه وارد کنید.", "Enter the text for the home link.": "متن مربوط به لینک خانه را وارد کنید.", "Enter the text for the link.": "متن مربوط به لینک را وارد کنید.", "Enter the vertical position of the marker in percent.": "موقعیت عمودی نشانگر را به درصد وارد کنید.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "وارد کنید <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">تجزیه و تحلیل ترافیک گوگل</a> ID to enable ردیابی <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> ممکن است دقت ردیابی را کاهش دهد.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "وارد کنید<a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> کلید API برای استفاده از نقشه های Google به جای OpenStreetMap. همچنین گزینه های اضافی را برای سبک کردن رنگ نقشه های شما امکان پذیر می کند.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:<code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "ECSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:<code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:<code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:<code>.el-element</code>, <code>.el-item</code>,<code>.el-slidenav</code> <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:<code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:<code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:<code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند:<code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "CSS دلخواه خود را وارد کنید. انتخاب های زیر به طور خودکار برای این عنصر پیشوند می شوند: <code>.el-section</code>", "Error creating folder.": "خطا در ایجاد پوشه", "Error deleting item.": "خطا در پاک کردن مورد", "Error renaming item.": "خطا درتغییر نام مورد", "Error: %error%": "خطا: %error%", "Expand One Side": "گسترش از یک طرف", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "عرض یک طرف را به سمت چپ یا راست بکشید در حالی که طرف دیگر در محدودیت های حداکثر عرض قرار دارد.", "Expand width to table cell": "عرض را به سلول جدول باز کنید", "Extend all content items to the same height.": "همه موارد محتوا را در همان ارتفاع گسترش دهید.", "External Services": "خدمات خارجی", "Extra Margin": "حاشیه اضافی", "Favicon": "فاویکون", "Fifths": "ستون پنجتایی", "Fifths 1-1-1-2": "ترکیب پنجتایی 1-1-1-2", "Fifths 1-1-3": "ترکیب پنجتایی 1-1-3", "Fifths 1-3-1": "ترکیب پنجتایی 1-3-1", "Fifths 1-4": "ترکیب پنجتایی 1-4", "Fifths 2-1-1-1": "ترکیب پنجتایی 2-1-1-1", "Fifths 2-3": "ترکیب پنچتایی 2-3", "Fifths 3-1-1": "ترکیب پنجتایی 3-1-1", "Fifths 3-2": "ترکیب پنجتایی 3-2", "Fifths 4-1": "ترکیب پنجتایی 4-1", "Filter": "فیلتر", "Finite": "محدود", "Fixed-Inner": "داخلی-ثابت", "Fixed-Left": "چپ-ثابت", "Fixed-Outer": "خارج-ثابت", "Fixed-Right": "راست-ثابت", "Folder created.": "پوشه ایجاد شد", "Folder Name": "نام پوشه", "Font Family": "خانواده قلم", "Footer": "پاورقی", "Force a light or dark color for text, buttons and controls on the image or video background.": "یک رنگ روشن یا تیره را برای متن ، دکمه به صورت اجباری تنظیم کنید.", "Force left alignment": "اجبار تراز چپ", "Form": "فرم", "Full width button": "پهنای کامل دکمه", "g": "جی", "Gallery": "گالری", "Gamma": "گاما", "Gap": "شکاف", "General": "عمومی", "Google Analytics": "تجزیه و تحلیل ترافیک گوگل", "Google Fonts": "قلم های گوگل", "Google Maps": "نقشه های گوگل", "Gradient": "گرادینت", "Grid": "شبکه", "Grid Breakpoint": "نقطه شکست شبکه ", "Grid Column Gap": "شکاف ستون شبکه", "Grid Row Gap": "شکاغ ردیف شبکه", "Grid Width": "عرض شبکه", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "موارد را به صورت مجموعه قرار دهید. تعداد اقلام موجود در یک مجموعه به عرض مورد تعریف شده بستگی دارد ، به عنوان مثال. <i>33%</i> بدین معنی است که هر مجموعه شامل 3 مورد است.", "h": "اچ", "Halves": "نصف", "Header": "سرتیتر", "Headline": "عنوان", "Headline styles differ in font size and font family.": "سبک های تیتر در اندازه قلم متفاوت است اما ممکن است با یک رنگ ، اندازه و فونت از پیش تعریف شده نیز همراه باشد.", "Height": "قد", "hex / keyword": "صفحه کلید / هگز", "Hide and Adjust the Sidebar": "مخفی کردن و تنظیم نوار کناری", "Hide marker": "پنهان کردن نشانگر", "Hide title": "مخفی کردن عنوان", "Highlight the hovered row": "سطر شناور را برجسته کنید", "Home": "خانه", "Home Text": "نوشته خانه", "Horizontal Center": "وسط افقی", "Horizontal Center Logo": "لوگو وسط افقی", "Horizontal Left": "چپ افقی", "Horizontal Right": "راست افقی", "Hover Box Shadow": "سایه باکس شناور", "Hover Image": "تصویر شناور", "Hover Style": "سبک شناور", "Hover Transition": "افکت شناور", "HTML Element": "عنصر HTML", "Icon": "آیکون", "Icon Color": "رنگ آیکون", "Icon Width": "عرض آیکون", "ID": "شناسه", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "اگر یک بخش یا ردیف دارای حداکثر عرض باشد و یک طرف در سمت چپ یا راست در حال گسترش باشد ، می توان حاشیه بیرونی پیش فرض را از طرف در حال گسترش خارج کرد.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "اگر چندین قالب به همان نمای اختصاص داده شود ، الگویی که برای اولین بار ظاهر می شود اعمال می شود. ترتیب را با کشیدن و رها کردن تغییر دهید.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "اگر در حال ایجاد یک سایت چند زبانه هستید ، در اینجا منوی خاصی را انتخاب نکنید. در عوض ، از مدیر ماژول جوملا استفاده کنید تا بسته به زبان فعلی ، منوی مناسب را منتشر کنید.", "Image": "تصویر", "Image Alignment": "تراز تصویر", "Image Alt": "Alt تصویر", "Image Attachment": "پیوست تصویر", "Image Box Shadow": "سایه جعبه تصویر", "Image Effect": "افکت تصویر", "Image Height": "ارتفاع تصویر", "Image Margin": "حاشیه تصویر", "Image Orientation": "جهت تصویر", "Image Position": "موقعیت تصویر", "Image Size": "سایز عکس", "Image Width": "عرض تصویر", "Image Width/Height": "عرض / ارتفاع تصویر", "Image/Video": "تصویر / فیلم", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "تصاویر را نمی توان ذخیره کرد. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.", "Info": "اطلاعات", "Inherit transparency from header": "وراثت شفافیت از سربرگ", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "تصاویر SVG را در نشانه گذاری صفحه تزریق کنید ، تا بتوانید به راحتی با CSS طراحی شوند.", "Inline SVG": "SVG درون خطی", "Inline title": "عنوان خطی", "Insert at the bottom": "در پایین وارد دهید", "Insert at the top": "در بالا وارد کنید", "Inset": "شروع", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "به جای استفاده از یک تصویر دلخواه ، می توانید بر روی مداد کلیک کنید تا نمادی از کتابخانه آیکون ها انتخاب کنید.", "Inverse Logo (Optional)": "لوگوی معکوس (اختیاری)", "Inverse style": "سبک معکوس", "Inverse the text color on hover": "معکوس کردن رنگ متن بر روی حالت شناور", "Invert lightness": "وارونگی سبک", "IP Anonymization": "ناشناس سازی IP", "Issues and Improvements": "مسائل و پیشرفت ها", "Item": "آیتم", "Item deleted.": "مورد حذف شد.", "Item renamed.": "مورد تغییر نام یافت.", "Item Width": "عرض آیتم", "Item Width Mode": "حالت عرض آیتم", "Items": "آیتم ها", "Ken Burns Effect": "افکت کن برنز", "Label Margin": "حاشیه برچسب", "Labels": "برچسب ها", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "تصاویر منظره و تصاویر پرتره در سلولهای شبکه قرار گرفته اند. هنگام تغییر اندازه تصاویر ، عرض و ارتفاع جابجا می شوند.", "Large Screen": "صفحه نمایش های بزرگ", "Large Screens": "صفحه های بزرگ", "Larger padding": "حاشیه بیرونی بزرگتر", "Larger style": "سبک بزرگتر", "Last Column Alignment": "تراز آخرین ستون", "Last Modified": "آخرین ویرایش", "Last name": "نام خانوادگی", "Layout": "چیدمان", "Layout Media Files": "چیدمان فایل های رسانه ای", "Lazy load video": "بارگذاری با تاخیر ویدئو", "Left": "چپ", "Library": "کتابخانه", "Lightbox": "لایت باکس", "Lightness": "سبکی", "Limit by Date Archive Type": "محدود کردن با نوع آرشیو تاریخ", "Limit the content length to a number of characters. All HTML elements will be stripped.": "طول محتوا را به تعدادی کاراکتر محدود کنید. همه عناصر HTML از بین خواهند رفت.", "Link": "پیوند دادن", "link": "لینک", "Link card": "پیوند دادن کارت", "Link image": "پیوند دادن تصویر", "Link overlay": "پیوند پوشش", "Link panel": "پیوند پنل", "Link Parallax": "پیوند اختلاف منظر", "Link Style": "سبک پیوند", "Link Target": "پیوند هدف", "Link Text": "متن پیوند", "Link the image if a link exists.": "در صورت وجود پیوند ، تصویر را پیوند دهید.", "Link the title if a link exists.": "در صورت وجود پیوند ، عنوان را پیوند دهید.", "Link the whole card if a link exists.": "در صورت وجود پیوند ، کل کارت را پیوند دهید.", "Link the whole overlay if a link exists.": "در صورت وجود پیوند ، کل پوشش را پیوند دهید.", "Link the whole panel if a link exists.": "در صورت وجود پیوند ، به کل پانل پیوند دهید.", "Link title": "عنوان پیوند", "Link Title": "عنوان پیوند", "Link to redirect to after submit.": "پیوند جهت تغییر مسیر پس از ارسال", "List": "لیست", "List Item": "لیست آیتم", "List Style": "سبک لیست", "Load jQuery": "بازگذاری jQuery", "Location": "محل", "Logo Image": "تصویر لوگو", "Logo Text": "متن لوگو", "Loop video": "حلقه تکرار فیلم", "Mailchimp API Token": "میل چیمپ API Token", "Main styles": "سبک های اصلی", "Make SVG stylable with CSS": "SVG را CSS قابل استایل کنید", "Managing Menus": "مدیریت منوها", "Managing Modules": "مدیریت ماژول ها", "Managing Pages": "مدیریت صفحات", "Managing Templates": "مدیریت قالب ها", "Managing Widgets": "مدیریت ابزارک ها", "Map": "نقشه", "Mapping Fields": "زمینه های نقشه برداری", "Margin": "حاشیه", "Margin Top": "حاشیه بالا", "Marker": "نشانگر", "Marker Color": "رن مارکر", "Masonry": "سنگ تراشی", "Match content height": "مطابقت با ارتفاع", "Match height": "مطابق ارتفاع", "Match Height": "مطابق ارتفاع", "Match the height of all modules which are styled as a card.": "ارتفاع همه ماژول هایی که به عنوان کارت طراحی شده اند ، مطابقت دهید.", "Match the height of all widgets which are styled as a card.": "ارتفاع همه ابزارک هایی که به عنوان کارت طراحی شده اند ، مطابقت دهید.", "Max Height": "حداکثر ارتفاع", "Max Width": "حداکثر عرض", "Max Width (Alignment)": "حداکثر عرض (تراز)", "Max Width Breakpoint": " حداکثر عرض نقطه شکست", "Media Folder": "پوشه رسانه ای", "Menu": "منو", "Menu Divider": "جداکننده منو", "Menu Style": "سبک منو", "Menus": "منوها", "Message": "پیام", "Message shown to the user after submit.": "پیغامی که پس از ارسال به کاربر نشان داده می شود.", "Meta": "متا", "Meta Alignment": "تراز متا", "Meta Margin": "حاشیه متا", "Meta Parallax": "متا پارالاکس", "Meta Style": "سبک متا", "Meta Width": "عرض متا", "Min Height": "حداقل ارتفاع", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "توجه داشته باشید که یک الگوی با یک طرح کلی به صفحه فعلی اختصاص داده شده است. قالب را ویرایش کنید تا طرح آن به روز شود.", "Minimum Stability": "حداقل پایداری", "Mobile": "موبایل", "Mobile Logo (Optional)": "لوگو موبایل (اختیاری)", "Mode": "حالت", "Module": "ماژول", "Module Position": "موقعیت ماژول", "Modules": "ماژول ها", "Month Archive": "آرشیو ماه", "Move the sidebar to the left of the content": "نوار کناری را به سمت چپ محتوا حرکت دهید", "Multiple Items Source": "چند منلع آیتم", "Mute video": "بی صدا کردن ویدیو", "Name": "نام", "Navbar": "ناوبار", "Navbar Style": "سبک ناوبار", "Navigation": "برچسب", "Navigation Label": "برچسب ناوبری", "Navigation Thumbnail": "تصویر بند انگشتی ناوبری", "New Layout": "چیدمان جدید", "New Menu Item": "آیتم جدید", "New Module": "ماژول جدید", "New Page": "صفحه جدید", "New Template": "قالب جدید", "Newsletter": "خبرنامه", "Next-Gen Images": "تصاویر نسل بعدی", "No %item% found.": "هیچ %item% یافت نشد.", "No critical issues found.": "هیچ مسئله مهم یافت نشد.", "No element found.": "المانی پیدا نشد.", "No element presets found.": "هیچ عنصر از پیش تعیین شده ای یافت نشد.", "No files found.": "فایلی پیدا نشد.", "No font found. Press enter if you are adding a custom font.": "قلم یافت نشد در صورت اضافه کردن یک قلم سفارشی ، Enter را فشار دهید.", "No icons found.": "آیکونی پیدا نشد.", "No items yet.": "هنوز آیتمی وجود ندارد", "No layout found.": "هیچ طرحی یافت نشد.", "No pages found.": "صفحه ای پیدا نشد.", "No Results": "نتیجه ای نداشت", "No results.": "نتیجه ای نداشت.", "No source mapping found.": "هیچ نقشه برداری از منبع یافت نشد.", "No style found.": "هیچ سبکی یافت نشد.", "None": "هیچ", "Not assigned": "اختصاص داده نشده", "Offcanvas Mode": "حالت افکانواس ", "Ok": "باشه", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "در صفحات کوتاه، میتوانید بخش اصلی را تا پر کردن کل صفحه امتداد دهید. این فقط به صفحاتی که توسط صفحه ساز ساخته نشده اند اعمال میشود.", "Only available for Google Maps.": "فقط برای نقشه گوگل در دسترس است.", "Only display modules that are published and visible on this page.": "فقط ماژول هایی را نمایش دهید که در این صفحه منتشر شده و قابل مشاهده هستند ..", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "فقط صفحات و پستهای مجزا می توانند دارای طرح بندی های جداگانه باشند برای اعمال یک طرح کلی در این نوع صفحه از یک الگوی استفاده کنید.", "Open in a new window": "در یک پنجره جدید باز کنید", "Open Templates": "قالب ها را باز کنید", "Open the link in a new window": "پیوند را در یک پنجره جدید باز کنید", "Opening the Changelog": "باز کردن تغییرات ثبت شده", "Options": "گزینه ها", "Order": "سفارش", "Order First": "ابتدا مرتب کنید", "Outside Breakpoint": "در خارج از نقطه شکست", "Outside Color": "رنگ خارج", "Overlap the following section": "بخش زیر را همپوشانی کنید", "Overlay": "پوشش", "Overlay Color": "رنگ پوشش", "Overlay Parallax": "پوشش اختلاف منظر", "Overlay the site": "سایت را همپوشانی کنید", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "تنظیمات انیمیشن بخش را نادیده بگیرید. این گزینه هیچ نتیجه ای نخواهد داشت مگر اینکه انیمیشن ها برای این بخش فعال شوند.", "Padding": "حاشیه خارجی", "Pages": "صفحات", "Pagination": "صفحه گذاری", "Panel": "پانل", "Panel Slider": "اسلایدر پنل", "Panels": "پانل ها", "Parallax": "اختلاف منظر", "Parallax Breakpoint": "نقطه شکست اختلاف منظر", "Parallax Easing": "کاهشی اختلاف منظر", "Pause autoplay on hover": "پخش اتومانتیگ را در حالت شناور مکث کنید", "Phone Landscape": "موبایل افقی", "Phone Portrait": "موبایل عمودی", "Photos": "عکس ها", "Pick": "برداشتن", "Pick %type%": "انتخاب %type%", "Pick file": "پرونده را انتخاب کنید", "Pick icon": "انتخاب آیکون", "Pick link": "انتخاب پیوند", "Pick media": "انتخاب رسانه", "Pick video": "انتخاب ویدئو", "Placeholder Image": "تصویر مکان نگهدار", "Play inline on mobile devices": "در دستگاه های تلفن همراه بصورت این لاین بازی کنید", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "لطفا نصب کنید / فعال کنید<a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> برای فعال کردن این ویژگی", "Popover": "پاپ اور", "Position": "موقعیت", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "عنصر را در بالا یا پایین عناصر دیگر قرار دهید. اگر سطح پشته آنها یکسان باشد ، موقعیت به ترتیب موجود در طرح بستگی دارد.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "عنصر را در جریان محتوای طبیعی یا در جریان عادی اما با یک جبران نسبت به خود قرار دهید ، یا آن را از جریان جدا کنید و آن را نسبت به ستون حاوی قرار دهید.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "ناوبری فیلتر را در بالا ، چپ یا راست قرار دهید. از یک سبک بزرگتر می توان برای حرکتهای چپ و راست استفاده کرد.", "Position the meta text above or below the title.": "متن متا را در بالا یا زیر عنوان قرار دهید.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "پیمایش را در بالا ، پایین ، چپ یا راست قرار دهید. از یک سبک بزرگتر می توان برای حرکتهای چپ و راست استفاده کرد.", "Post": "پست", "Post Type Archive": "آرشیو نوع پست", "Poster Frame": "قاب پوستر", "Preserve text color": "حفظ رینگ متن", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "رنگ متن را حفظ کنید ، برای مثال هنگام استفاده از کارت ها . همپوشانی بخش توسط همه استایل ها پشتیبانی نمی شود و ممکن است هیچ افکت دیداری نداشته باشد.", "Preview all UI components": "پیش نمایش همه مؤلفه های UI", "Primary navigation": "پیمایش اصلی", "Product Category Archive": "آرشیو دسته بندی محصول", "Product Tag Archive": "آرشیو برچسب محصول", "Provider": "ارائه دهنده", "Quantity": "تعداد", "Quarters": "یک چهارم", "Quarters 1-1-2": "یک چهارم 1-1-2", "Quarters 1-2-1": "یک چهارم 1-2-1", "Quarters 1-3": "یک چهارم 1-3", "Quarters 2-1-1": "یک چهارم 2-1-1", "Quarters 3-1": "یک چهارم 3-1", "Quotation": "نقل قول", "Ratio": "نسبت", "Recompile style": "ترجه دوباره ظاهر", "Reject Button Style": "سبک دکمه را رد کنید", "Reject Button Text": "متن دکمه را رد کنید", "Reload Page": "بارگیری مجدد صفحه", "Remove bottom margin": "حاشیه پایین را بردارید", "Remove bottom padding": "حذف حاشیه بیرونی پایین", "Remove horizontal padding": "حذف حاشیه بیرونی افقی", "Remove left and right padding": "حذف حاشیه بیرونی چپ و راست", "Remove left logo padding": "حذف حاشیه بیرونی سمت چپ لوگو", "Remove left or right padding": "حذف حاشیه بیرونی چپ یا راست", "Remove Media Files": "پرونده های رسانه را حذف کنید", "Remove top margin": "حاشیه بالا را حذف کنید", "Remove top padding": "حذف حاشیه بیرونی بالایی", "Rename": "تغییر نام دهید", "Rename %type%": "تغییر نام %type%", "Replace": "جایگزینی", "Replace layout": "جایگزین کردن چیدمان", "Reset": "بازنشانی", "Reset to defaults": "بازنشانی به تنظیمات پیشفرض", "Responsive": "واکشنی", "Reverse order": "به صورت برعکس", "Right": "راست", "Root": "ریشه", "Rotate the title 90 degrees clockwise or counterclockwise.": "عنوان را 90 درجه در جهت عقربه های ساعت یا خلاف جهت عقربه های ساعت بچرخانید.", "Rotation": "چرخش", "Row": "ردیف", "Row Gap": "شکاف ردیف", "Run Time": "زمان اجرا", "Saturation": "اشباع رنگی", "Save": "ذخیره", "Save %type%": "ذخیره %type%", "Save in Library": "ذخیره در کتابخانه", "Save Layout": "ذخیره چیدمان", "Save Style": "ذخیره ظاهر", "Save Template": "ذخیره قالب", "Script": "اسکریپت", "Search": "جستجو", "Search pages and post types": "جستجوی صفحه ها و نوع مطلب", "Search Style": "سبک جستجو", "Section": "بخش", "Section/Row": "بخش / ردیف", "Select": "انتخاب کنید", "Select %item%": "انتخاب کنید %item%", "Select %type%": "انتخاب کنید %type%", "Select a card style.": "یک سبک کارت را انتخاب کنید.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "یک منبع محتوا را انتخاب کنید تا زمینه های آن برای تهیه نقشه در دسترس باشد. از بین منابع صفحه فعلی یا یک منبع سفارشی پرس و جو کنید.", "Select a different position for this item.": "موقعیت متفاوتی را برای این مورد انتخاب کنید.", "Select a grid layout": "یک طرح شبکه را انتخاب کنید", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "یک موقعیت ماژول جوملا را انتخاب کنید که همه ماژول های منتشر شده را ارائه دهد. توصیه می شود از موقعیت های سازنده 1 تا -6 استفاده کنید ، که در مکان دیگری توسط موضوع ارائه نشده است.", "Select a panel style.": "یک سبک پانل را انتخاب کنید.", "Select a predefined date format or enter a custom format.": "یکی از فرمت های تاریخ از قبل تعیین شده را انتخاب کنید یا یک فرمت سفارشی را وارد کنید.", "Select a predefined meta text style, including color, size and font-family.": "یک سبک متا از پیش تعریف شده از جمله رنگ ، اندازه و خانواده را با فونت انتخاب کنید.", "Select a predefined text style, including color, size and font-family.": "یک سبک متن از پیش تعریف شده ، از جمله رنگ ، اندازه و خانواده قلم را انتخاب کنید.", "Select a style for the continue reading button.": "سبک یک دکمه را برای دکمه ادامه خواندن انتخاب کنید.", "Select a style for the overlay.": "سبکی را برای پوشش انتخاب کنید.", "Select a transition for the content when the overlay appears on hover.": "هنگامی که پوشش روی صفحه شناور ظاهر می شود ، یک افکت انتقال را برای محتوا انتخاب کنید.", "Select a transition for the link when the overlay appears on hover.": "هنگامی که پوشش روی نشانگر ظاهر می شود ، یک افکت انتقال را برای پیوند انتخاب کنید.", "Select a transition for the meta text when the overlay appears on hover.": "هنگامی که پوشش روی نشانگر ظاهر می شود ، یک افکت انتقال برای متن متا انتخاب کنید.", "Select a transition for the overlay when it appears on hover.": "وقتی روی هواکش ظاهر می شود ، یک افکت انتقال را برای پوشش روی آن انتخاب کنید.", "Select a transition for the title when the overlay appears on hover.": "هنگام نمایش لایه روی شناور ، یک افکت انتقال را برای عنوان انتخاب کنید.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "یک فایل ویدیویی را انتخاب کنید یا پیوندی را از آن وارد کنید <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "یک منطقه ابزارک وردپرس را انتخاب کنید که همه ابزارهای منتشر شده را ارائه دهد. توصیه می شود از مکان های ابزارک سازنده -1 تا -6 استفاده کنید ، که در مکان دیگری ارائه نشده است.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "مثلاً یک آرم جایگزین با رنگ وارونه انتخاب کنید. سفید ، برای دید بهتر در زمینه های تیره. در صورت نیاز به صورت خودکار نمایش داده می شود.", "Select an alternative logo, which will be used on small devices.": "یک آرم جایگزین را انتخاب کنید ، که در دستگاه های کوچک استفاده خواهد شد.", "Select an animation that will be applied to the content items when filtering between them.": "در هنگام جابجایی بین آنها ، انیمیشن را انتخاب کنید که برای موارد محتوا اعمال شود.", "Select an animation that will be applied to the content items when toggling between them.": "در هنگام جابجایی بین آنها ، انیمیشن را انتخاب کنید که برای موارد محتوا اعمال شود.", "Select an image transition.": "افکت انتقال تصویر را انتخاب کنید.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "انتقال تصویر را انتخاب کنید. اگر تصویر حالت شناور تنظیم شود ، انتقال بین دو تصویر صورت می گیرد. اگر <i> هیچ کدام </ i> انتخاب نشده باشد ، تصویر شناور در می آید.", "Select an optional image that appears on hover.": "تصویری اختیاری را انتخاب کنید که در حالت شناور ظاهر شود.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "تصویری اختیاری را انتخاب کنید که تا پخش ویدیو نشان داده شود. در صورت عدم انتخاب ، اولین قاب ویدیویی به عنوان قاب پوستر نشان داده می شود.", "Select header layout": "طرح هدر را انتخاب کنید", "Select Image": "تصویر را انتخاب کنید", "Select mobile header layout": "انتخاب چیدمان سربرگ موبایل", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "نقطه شکست را از ستونی که قبل از ستون های دیگر شروع خواهد شد انتخاب کنید. در صفحه نمایش های کوچکتر ستون ها به ترتیب طبیعی نمایش داده خواهند شد.", "Select the color of the list markers.": "رنگ مارکر های لیست را تنظیم کنید . به این نکته توجه کنید که در مرورگر های کروم و ادج از این ویژگی پشتیبانی نمی شود.", "Select the content position.": "موقعیت محتوا را انتخاب کنید.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "سبک فیلتر ناوبری را انتخاب کنید. قرص و سبک های تقسیم کننده فقط برای زیر منوهای افقی در دسترس است.", "Select the form size.": "اندازه فرم را انتخاب کنید.", "Select the form style.": "سبک فرم را انتخاب کنید.", "Select the image border style.": "سبک خط حاشیه تصویر را انتخاب کنید.", "Select the image box decoration style.": "سبک دکوراسیون جعبه تصویر را انتخاب کنید. توجه: گزینه ماسک توسط همه سبک ها پشتیبانی نمی شود و ممکن است هیچ اثر مرئی نداشته باشد.", "Select the image box shadow size on hover.": "اندازه سایه جعبه تصویر را روی شناور انتخاب کنید.", "Select the image box shadow size.": "اندازه سایه جعبه تصویر را انتخاب کنید.", "Select the link style.": "سبک پیوند را انتخاب کنید.", "Select the list style.": "سبک لیست را انتخاب کنید.", "Select the list to subscribe to.": "لیست را جهت اشتراک انتخاب کنید.", "Select the marker of the list items.": "نشانگر لیست آیتم ها را انتخاب کنید.", "Select the navbar style.": "سبک ناوبار را انتخاب کنید.", "Select the navigation type.": "نوع ناوبری را انتخاب کنید.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "سبک ناوبری را انتخاب کنید. قرص و سبک های تقسیم کننده فقط برای زیرمنو افقی در دسترس است.", "Select the overlay or content position.": "موقعیت پوشش و یا محتوای را انتخاب کنید.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "تراز پاپ اور را با نشانگر آن انتخاب کنید. اگر پاپ اور ظروف خود را مناسب نباشد ، به طور خودکار تلنگر خواهد شد.", "Select the position of the navigation.": "موقعیت ناوبری را انتخاب کنید.", "Select the position of the slidenav.": "موقعیت ناوبری اسلاید را انتخاب کنید.", "Select the position that will display the search.": "موقعیتی را که جستجو نمایش می دهد انتخاب کنید.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "موقعیتی را نشان می دهد که نمادهای اجتماعی را نشان می دهد. حتماً پیوندهای پروفایل اجتماعی خود را اضافه کنید در غیر اینصورت هیچ نمادی قابل نمایش نیست.", "Select the search style.": "سبک جستجو را انتخاب کنید.", "Select the slideshow box shadow size.": "اندازه سایه جعبه اسلایدشو را انتخاب کنید.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "سبک برجسته سازی نحو کد را انتخاب کنید. از GitHub برای روشن و Monokai برای زمینه های تاریک استفاده کنید.", "Select the style for the overlay.": "سبک را برای پوشش انتخاب کنید.", "Select the subnav style.": "سبک زیرمنو را انتخاب کنید.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "رنگ SVG را انتخاب کنید. این فقط در مورد عناصر پشتیبانی شده تعریف شده در SVG اعمال می شود.", "Select the table style.": "سبک جدول را انتخاب کنید.", "Select the text color.": "رنگ متن را انتخاب کنید.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "رنگ متن را انتخاب کنید. اگر گزینه زمینه انتخاب شود ، سبک هایی که تصویر پس زمینه اعمال نمی کنند ، از رنگ اصلی استفاده می کنند.", "Select the title style and add an optional colon at the end of the title.": "سبک عنوان را انتخاب کنید و یک ستون اختیاری در انتهای عنوان اضافه کنید.", "Select the transformation origin for the Ken Burns animation.": "مبدأ تحول را برای انیمیشن Ken Burns انتخاب کنید.", "Select the transition between two slides.": "افکت انتقال بین دو اسلاید را انتخاب کنید.", "Select the video box decoration style.": "سبک دکوراسیون جعبه تصویر را انتخاب کنید. توجه: گزینه ماسک توسط همه سبک ها پشتیبانی نمی شود و ممکن است هیچ اثر مرئی نداشته باشد.", "Select the video box shadow size.": "اندازه سایه جعبه فیلم را انتخاب کنید.", "Select whether a button or a clickable icon inside the email input is shown.": "انتخاب کنید که آیا یک دکمه یا یک نماد قابل کلیک در داخل ورودی ایمیل نشان داده شده است.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "انتخاب کنید که آیا پیامی نمایش داده می شود یا پس از کلیک روی دکمه اشتراک ، سایت هدایت می شود.", "Select whether the modules should be aligned side by side or stacked above each other.": "انتخاب کنید که آیا ماژول ها باید در کنار هم قرار بگیرند یا بالاتر از یکدیگر پشته شوند.", "Select whether the widgets should be aligned side by side or stacked above each other.": "انتخاب کنید که آیا ابزارکها باید در کنار یکدیگر قرار بگیرند یا بالاتر از یکدیگر پشته شوند.", "Separator": "جداکننده", "Serve WebP images": "ارائه تصاویر WebP", "Set a condition to display the element or its item depending on the content of a field.": "وضعیت را برایی نمایش المنت یا محتوای آن بر اساس محتوای یک فیلد تنظیم کنید.", "Set a different link text for this item.": "متن پیوند دیگری را برای این مورد تنظیم کنید.", "Set a different text color for this item.": "رنگ متن متفاوتی را برای این مورد تنظیم کنید.", "Set a fixed width.": "عرض ثابت را تنظیم کنید.", "Set a higher stacking order.": "ترتیب انباشته بالاتر را تنظیم کنید.", "Set a large initial letter that drops below the first line of the first paragraph.": "یک حرف اصلی بزرگ را که در زیر خط اول پاراگراف اول قرار دارد تنظیم کنید.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "یک عرض نوار کناری را به صورت درصد تنظیم کنید و ستون محتوا مطابق آن تنظیم شود. عرض زیر حداقل عرض نوار کناری نخواهد بود ، که می توانید در بخش سبک تنظیم کنید.", "Set an additional transparent overlay to soften the image or video.": "یک پوشش شفاف اضافی را برای نرم کردن تصویر یا فیلم تنظیم کنید.", "Set an additional transparent overlay to soften the image.": "یک پوشش شفاف اضافی برای نرم کردن تصویر تنظیم کنید.", "Set an optional content width which doesn't affect the image if there is just one column.": "اگر فقط یک ستون باشد ، عرض محتوای اختیاری را تنظیم کنید که روی تصویر تأثیر نگذارد.", "Set an optional content width which doesn't affect the image.": "عرض محتوای اختیاری را تنظیم کنید که روی تصویر تأثیر نمی گذارد.", "Set how the module should align when the container is larger than its max-width.": "نحوه تنظیم ماژول در هنگام بزرگتر بودن کانتینر از حداکثر عرض را تنظیم کنید.", "Set light or dark color if the navigation is below the slideshow.": "اگر پیمایش در زیر نمایش اسلاید باشد ، نور یا رنگ تیره تنظیم کنید.", "Set light or dark color if the slidenav is outside.": "اگر نمایش پرده ای خارج از نمایش پرده ای است ، نور یا رنگ تیره تنظیم کنید.", "Set light or dark color mode for text, buttons and controls.": "حالت نور یا رنگ تیره را برای متن ، دکمه ها و کنترل ها تنظیم کنید.", "Set light or dark color mode.": "حالت رنگ روشن یا تیره را تنظیم کنید.", "Set percentage change in lightness (Between -100 and 100).": "درصد تغییر در روشنایی را (بین -100 تا 100) تنظیم کنید.", "Set percentage change in saturation (Between -100 and 100).": "درصد تغییر در اشباع رنگی را(بین -100 تا 100) تنظیم کنید.", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "درصد تغییر در مقدار تصحیح گاما را تنظیم کنید (بین 0.01 و 10.0 ، در جایی که 1.0 هیچ تصحیحی ندارد).", "Set the autoplay interval in seconds.": "فاصله پخش خودکار را در چند ثانیه تنظیم کنید.", "Set the blog width.": "عرض وبلاگ را تنظیم کنید.", "Set the breakpoint from which grid items will stack.": "نقطه شکست که از آن آیتم های شبکه پشته خواهد شد را تنظیم کنید.", "Set the breakpoint from which the sidebar and content will stack.": "نقطه شکست را که نوار کناری و محتوا در آن پشته خواهد شد تنظیم کنید.", "Set the button size.": "اندازه دکمه را تنظیم کنید.", "Set the button style.": "سبک دکمه را تنظیم کنید.", "Set the device width from which the list columns should apply.": "عرض دوایس را برای ستون هایی که باید نمایش داده شوند تنظیم کنید.", "Set the device width from which the text columns should apply.": "عرض دوایس را برای ستون های متنی که باید نمایش داده شوند تنظیم کنید.", "Set the duration for the Ken Burns effect in seconds.": "مدت زمان تأثیر Ken Burns را در چند ثانیه تنظیم کنید.", "Set the height in pixels.": "ارتفاع را در پیکسل ها تنظیم کنید. مثلاً", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "موقعیت افقی لبه پایین عنصر را در پیکسل ها تنظیم کنید. واحد متفاوتی مانند٪ یا vw را نیز می توان وارد کرد.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "موقعیت افقی لبه سمت چپ عنصر را در پیکسل ها تنظیم کنید. واحد متفاوتی مانند٪ یا vw را نیز می توان وارد کرد.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "موقعیت افقی لبه سمت راست عنصر را در پیکسل ها تنظیم کنید. واحد متفاوتی مانند٪ یا vw را نیز می توان وارد کرد.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "موقعیت افقی لبه بالای عنصر را در پیکسل ها تنظیم کنید. واحد متفاوتی مانند٪ یا vw را نیز می توان وارد کرد.", "Set the hover style for a linked title.": "سبک شناور را برای یک عنوان مرتبط تنظیم کنید.", "Set the hover transition for a linked image.": "افکت انتقال شناور را برای یک تصویر مرتبط تنظیم کنید.", "Set the hue, e.g. <i>#ff0000</i>.": "اشباع رنگ را تنظیم کنید </i>e.g. <i>#ff0000.", "Set the icon color.": "رنگ آیکون را تنظیم کنید.", "Set the icon width.": "اندازه آیکون را تنظیم کنید.", "Set the initial background position, relative to the page layer.": "موقعیت پس زمینه اولیه را نسبت به لایه صفحه تنظیم کنید.", "Set the initial background position, relative to the section layer.": "موقعیت پس زمینه اولیه را نسبت به لایه بخش تنظیم کنید.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "وضوح اولیه را برای نمایش نقشه تنظیم کنید. 0 کاملاً بزرگنمایی شده است و 18 برابر بالاترین رزولوشن بزرگنمایی شده است.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "عرض مورد را برای هر نقطه شکست تنظیم کنید. <i>Inherit</i> به عرض مورد اندازه اندازه صفحه نمایش کوچکتر بعدی اشاره دارد.", "Set the link style.": "سبک پیوند را تنظیم کنید.", "Set the margin between the countdown and the label text.": "حاشیه بین شمارش معکوس و متن برچسب را تنظیم کنید.", "Set the margin between the overlay and the slideshow container.": "حاشیه بین پوشش و کانتینر نمایش اسلاید را تنظیم کنید.", "Set the maximum content width.": "حداکثر عرض محتوا را تنظیم کنید.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "حداکثر عرض محتوا را تنظیم کنید. توجه: این بخش ممکن است از قبل دارای حداکثر پهنایی باشد که از آن نمی توانید تجاوز کنید.", "Set the maximum header width.": "حداکثر عرض هدر را تنظیم کنید.", "Set the maximum height.": "حداکثر ارتفاع را تنظیم کنید.", "Set the maximum width.": "حداکثر عرض را تنظیم کنید.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "تعداد ستون های شبکه را برای هر نقطه شکست تنظیم کنید.<i>Inherit</i> به تعداد ستون ها در اندازه صفحه نمایش کوچکتر بعدی اشاره دارد.", "Set the number of list columns.": "تعداد ستون های لیست را تنظیم کنید.", "Set the number of text columns.": "تعداد ستون های متن را تنظیم کنید.", "Set the padding between sidebar and content.": "تنظیم حاشیه بیرونی را بین نوار کناری و محتوا.", "Set the padding between the overlay and its content.": "تنظیم حاشیه بیرونی را بین پوشش و محتوای آن.", "Set the padding.": "تنظیم حاشیه بیرونی.", "Set the post width. The image and content can't expand beyond this width.": "عرض ارسال را تنظیم کنید. تصویر و محتوا نمی توانند فراتر از این عرض گسترش پیدا کنند.", "Set the search input style.": "سبک جستجو را انتخاب کنید.", "Set the size of the column gap between multiple buttons.": "اندازه فاصله ستون را بین چندین دکمه تنظیم کنید.", "Set the size of the column gap between the numbers.": "اندازه فاصله ستون را بین اعداد تنظیم کنید.", "Set the size of the gap between between the filter navigation and the content.": "اندازه فاصله بین ناوبری فیلتر و محتوا را تنظیم کنید.", "Set the size of the gap between the grid columns.": "اندازه فاصله بین ستون های شبکه را تنظیم کنید.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "اندازه فاصله بین ستون های شبکه را تنظیم کنید. تعداد ستون ها را در <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> تنظیمات در جوملا.", "Set the size of the gap between the grid rows.": "اندازه فاصله بین ردیف های شبکه را تنظیم کنید.", "Set the size of the gap between the image and the content.": "اندازه فاصله بین تصویر و محتوا را تنظیم کنید.", "Set the size of the gap between the navigation and the content.": "اندازه فاصله بین پیمایش و محتوا را تنظیم کنید.", "Set the size of the gap between the social icons.": "تنظیم فاصله بین آیکون های شبکه های اجتماعی", "Set the size of the gap between the title and the content.": "اندازه فاصله بین عنوان و محتوا را تنظیم کنید.", "Set the size of the gap if the grid items stack.": "در صورت پشته شدن وسایل شبکه اندازه فاصله را تنظیم کنید.", "Set the size of the row gap between multiple buttons.": "اندازه فاصله ردیف را بین چندین دکمه تنظیم کنید. موارد پشته", "Set the size of the row gap between the numbers.": "اندازه فاصله ردیف را بین اعداد تنظیم کنید.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "یک نسبت تنظیم کنید. توصیه می شود از همان نسبت تصویر پس زمینه استفاده کنید. فقط مانند عرض و ارتفاع آن استفاده کنید:<code>1600:900</code>.", "Set the starting point and limit the number of items.": "نقطه شروع را تنظیم کنید و تعداد لیست را محدود کنید.", "Set the top margin if the image is aligned between the title and the content.": "اگر تصویر بین عنوان و محتوا قرار دارد ، حاشیه بالا را تنظیم کنید.", "Set the top margin.": "حاشیه بالا را تنظیم کنید.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "حاشیه بالا را تنظیم کنید. توجه داشته باشید که حاشیه فقط درصورتی اعمال می شود که قسمت محتوا بلافاصله از قسمت محتوای دیگر پیروی کند.", "Set the velocity in pixels per millisecond.": "سرعت پیکسل ها را در هر میلی ثانیه تنظیم کنید.", "Set the vertical container padding to position the overlay.": "تنظیم میزان حاشیه بیرونی محدوده جهت موقعیت پوشش.", "Set the vertical margin.": "حاشیه عمودی را تنظیم کنید.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "حاشیه عمودی را تنظیم کنید. توجه: حاشیه بالای عنصر اول و حاشیه پایین عنصر آخر همیشه حذف می شوند. در عوض موارد موجود در تنظیمات شبکه را تعیین کنید.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "حاشیه عمودی را تنظیم کنید. توجه: حاشیه بالای شبکه اول و حاشیه پایین شبکه آخر همیشه حذف می شوند. در عوض موارد موجود در تنظیمات بخش را تعریف کنید.", "Set the vertical padding.": "تنظیم حاشیه بیرونی عمودی.", "Set the video dimensions.": "ابعاد ویدیو را تنظیم کنید.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "عرض و ارتفاع را در پیکسل ها تنظیم کنید (مثلاً 600). تنظیم فقط یک مقدار ، نسبت های اصلی را حفظ می کند. تصویر به صورت خودکار تغییر اندازه و برش داده می شود.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "عرض و ارتفاع را در پیکسل ها تنظیم کنید (مثلاً 600). تنظیم فقط یک مقدار ، نسبت های اصلی را حفظ می کند. تصویر به صورت خودکار تغییر اندازه و برش داده می شود.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "عرض را در پیکسل ها تنظیم کنید ، به عنوان مثال 600. در صورت تنظیم هیچ عرض ، نقشه طول کل را می گیرد و ارتفاع را حفظ می کند. یا از عرض فقط برای تعیین نقطه شکست که از آن نقشه شروع به کوچک شدن می کند با حفظ نسبت ابعاد استفاده کنید.", "Sets": "تنظیم می کند", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "تنظیم فقط یک مقدار ، نسبت های اصلی را حفظ می کند. تصویر به صورت خودکار تغییر اندازه و برش داده می شود و در صورت امکان تصاویر با وضوح بالا تولید می شوند.", "Setting the Blog Content": "تنظیم محتوای وبلاگ", "Setting the Blog Image": "تنظیم تصویر وبلاگ", "Setting the Blog Layout": "تنظیم چیدمان وبلاگ", "Setting the Blog Navigation": "تنظیم ناوبری وبلاگ", "Setting the Header Layout": "تنظیم چیدمان سرصفحه", "Setting the Minimum Stability": "حداقل پایداری", "Setting the Mobile Dialog Layout": "تنظیم چیدمان دیالوگ موبایل", "Setting the Mobile Header Layout": "تنظیم چیدمان سربرگ موبایل", "Setting the Module Appearance Options": "تنظیمات گزینه های ظاهر شدن ماژول", "Setting the Module Default Options": "تنظیم گزینه های پیش فرض ماژول", "Setting the Module Grid Options": "تنظیمات گزینه های ماژول گرید", "Setting the Module List Options": "تنظیمات گزینه های لیست ماژول", "Setting the Module Menu Options": "تنظیمات گزینه های منوی ماژول", "Setting the Navbar": "تنظیم ناوبار", "Setting the Page Layout": "تنظیم طرح بندی صفحه", "Setting the Post Content": "تنظیم محتوای پست", "Setting the Post Image": "تنظیم تصویر ارسال", "Setting the Post Layout": "تنظیم چیدمان پست", "Setting the Post Navigation": "تنظیم ناوبری پست", "Setting the Sidebar Area": "تنظیم منطقه نوار کناری", "Setting the Sidebar Position": "تنظیم موقعیت نوار کناری", "Setting the Source Order and Direction": "تنظیم دستور و منبع سورس", "Setting the Template Loading Priority": "تنظیم اولویت بارگیری قالب", "Setting the Template Status": "تنظیم وضعیت قالب", "Setting the Top and Bottom Areas": "تنظیم مناطق بالا و پایین", "Setting the Top and Bottom Positions": "تنظیم موقعیت های بالا و پایین", "Setting the Widget Appearance Options": "تنظیم گزینه های ظاهر شدن ابزارک", "Setting the Widget Default Options": "گزینه های پیش فرض ابزارک را تنظیم کنید", "Setting the Widget Grid Options": "تنظیم گزینه های شبکه ابزارک", "Setting the Widget List Options": "تنظیم گزینه های فهرست ابزارک ها", "Setting the Widget Menu Options": "تنظیم گزینه های منوی ابزارک", "Setting the WooCommerce Layout Options": "تنظیم گزینه های چیدمان فروشگاه", "Settings": "تنظیمات", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "برای اطلاع رسانی به بازدید کنندگان خود از کوکی های استفاده شده توسط وب سایت خود ، بنری را نشان دهید. قبل از بارگیری کوکی ها ، یک اعلان ساده را انتخاب کنید که کوکی ها بارگیری شده یا نیاز به رضایت اجباری دارند.", "Show a divider between grid columns.": "تقسیم بین ستونهای شبکه را نشان دهید.", "Show a divider between list columns.": "یک جداکننده بین ستون ها نمایش بده", "Show a divider between text columns.": "یک جداکننده بین ستون های متن نمایش بده", "Show a separator between the numbers.": "جدا کننده بین اعداد را نشان دهید.", "Show archive category title": "عنوان دسته بایگانی را نشان دهید", "Show author": "نمایش نویسنده", "Show below slideshow": "نمایش در زیر اسلاید شو", "Show button": "دکمه نمایش", "Show categories": "نمایش دسته ها", "Show comment count": "نمایش تعداد نظرات", "Show comments count": "نمایش تعداد نظرات", "Show content": "نمایش دادن محتوا", "Show Content": "نمایش دادن محتوا", "Show controls": "نمایش کنترل ها", "Show current page": "صفحه فعلی را نمایش دهید", "Show date": "نمایش تاریخ", "Show dividers": "نمایش جداکننده ها", "Show drop cap": "درپوش قطره را نشان دهید", "Show filter control for all items": "کنترل فیلتر را برای همه موارد نشان دهید", "Show headline": "نمایش عنوان", "Show home link": "پیوند خانه را نشان دهید", "Show hover effect if linked.": "در صورت پیوند اثر شناور را نمایش دهید.", "Show Labels": "نمایش برچسب ها", "Show map controls": "نمایش کنترل های نقشه", "Show name fields": "فیلدهای نام را نشان دهید", "Show navigation": "نمایش ناوبری", "Show on hover only": "نمایش فقط روی اثر شناور", "Show optional dividers between nav or subnav items.": "نمایش جداکننده های انتخابی بین ناوبری و زیر گزینه ها", "Show or hide content fields without the need to delete the content itself.": "زمینه های محتوا را بدون نیاز به حذف خود محتوا نشان داده یا پنهان کنید.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "نمایش یا پنهان کردن المنت ها در اندازه دوایس یا بزرگتر . اگر همه المنت ها مخفی باشند ، ستون ها ، ستر ها و بخش ها نیز پنهان میشوند.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "پیوند خانه را به عنوان اولین مورد و همچنین صفحه فعلی به عنوان آخرین مورد در ناوبری آرد سوخاری نمایش داده یا مخفی کنید.", "Show popup on load": "نمایش پنجره پوپاپ در زمان بارگذاری", "Show Separators": "جداکننده ها را نشان دهید", "Show space between links": "فضای بین پیوندها را نشان دهید", "Show Start/End links": "نمایش لینک های شروع / پایان", "Show system fields for single posts. This option does not apply to the blog.": "نمایش فیلدهای سیستم برای پستهای مجرد. این گزینه برای وبلاگ صدق نمی کند.", "Show system fields for the blog. This option does not apply to single posts.": "نمایش فیلدهای سیستم برای وبلاگ. این گزینه در مورد پستهای منفرد صدق نمی کند.", "Show tags": "نمایش برچسب ها", "Show Tags": "نمایش برچسب ها", "Show the content": "نمایش مطالب", "Show the excerpt in the blog overview instead of the post text.": "گزیده ای از نمای کلی وبلاگ را به جای متن پست نمایش دهید.", "Show the image": "نمایش تصویر", "Show the link": "پیوند را نشان دهید", "Show the menu text next to the icon": "متن منو را در کنار آیکون نشان دهید", "Show the meta text": "متن متا را نشان دهید", "Show the navigation label instead of title": "به جای عنوان ، برچسب ناوبری را نشان دهید", "Show the navigation thumbnail instead of the image": "به جای تصویر ، تصویر بندانگشتی ناوبری را نشان دهید", "Show the title": "عنوان را نشان دهید", "Show title": "نمایش عنوان", "Show Title": "نمایش عنوان", "Sidebar": "نوار کناری", "Single Post Pages": "صفحات تک مطلب", "Site": "سایت", "Size": "اندازه", "Slide all visible items at once": "همه موارد قابل مشاهده را به طور همزمان اسلاید کنید", "Slidenav": "ناوبری اسلاید", "Slider": "اسلایدر", "Slideshow": "اسلاید شو", "Social": "شبکه های اجتماعی", "Social Icons": "آیکون شبکه های اجتماعی", "Social Icons Gap": "فاصله آیکون های سفارشی", "Social Icons Size": "اندازه آیکون شبکه های اجتماعی", "Split the dropdown into columns.": "کشویی را در ستونها تقسیم کنید.", "Spread": "گسترش", "Stack columns on small devices or enable overflow scroll for the container.": "ستون ها را روی دستگاه های کوچک جمع کنید یا پیمایش سرریز را برای کانتینر فعال کنید.", "Stacked Center A": "انباشته وسط A", "Stacked Center B": "انباشته وسط B", "Stacked Center C": "مرکز استک شده ( انباشته ) C", "Start": "شروع", "Status": "وضعیت", "Stretch the panel to match the height of the grid cell.": "پانل را دراز کنید تا با ارتفاع سلول شبکه مطابقت داشته باشد.", "Style": "سبک", "Sublayout": "چیدمان فرعی", "Subnav": "زیرمنو", "Subtitle": "عنوان فرعی", "Support": "پشتیبانی", "SVG Color": "رنگ SVG", "Switcher": "تعویض کننده", "Syntax Highlighting": "ترکیب برجسته", "System Check": "بررسی سیستم", "Table": "جدول", "Table Head": "هدر جدول", "Tablet Landscape": "تبلت افقی", "Tags": "برچسب ها", "Target": "هدف", "Taxonomy Archive": "آرشیو طبقه بندی", "Templates": "قالب ها", "Text": "متن", "Text Alignment": "تراز متن", "Text Alignment Breakpoint": "نقطه شکست تراز متن", "Text Alignment Fallback": "بازپرداخت تراز متن", "Text Color": "رنگ متن", "Text Style": "سبک متن", "The Area Element": "منطقه عنصر", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "نوار در بالا محتوا را به سمت پایین هل می دهد در حالی که نوار در پایین بالای محتوا ثابت است.", "The builder is not available on this page. It can only be used on pages, posts and categories.": "سایت ساز در این صفحه موجود نیست. این فقط در صفحات ، پست ها و دسته ها قابل استفاده است.", "The changes you made will be lost if you navigate away from this page.": "اگر از این صفحه خارج شوید ، تغییراتی که ایجاد کرده اید از بین می روند.", "The Divider Element": "المان جداکننده", "The Headline Element": "المان عنوان", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "ارتفاع به طور خودکار بر اساس محتوای آن تطبیق می یابد. از طرف دیگر ، ارتفاع می تواند با ارتفاع منظره سازگار باشد. <br> <br> توجه: مطمئن شوید كه هنگام استفاده از یكی از گزینه های viewport ، هیچ كدام از تنظیمات بخش تنظیم نشده است.", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "افکت سنگ تراشی یک طرح بدون شکاف ایجاد می کند حتی اگر موارد شبکه دارای ارتفاعات مختلف باشند.", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "صفحه به روز شده است توسط %modifiedBy%.تغییرات خود را دور بیندازید و بارگیری مجدد می کنید؟", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "صفحه ای که اکنون ویرایش می کنید توسط %modified_by%. به روز شده است. صرفه جویی در تغییرات شما ، تغییرات قبلی را بازنویسی می کند. آیا می خواهید به هر حال ذخیره کنید یا تغییرات خود را دور بیندازید و صفحه را بارگیری مجدد کنید؟", "The Panel Slider Element": "المان اسلایدر پنل", "The Position Element": "موقعیت عنصر", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "افزونه RSFirewall محتوای سازنده را خراب می کند. ویژگی را غیرفعال کنید <em>آدرس های ایمیل را از متن ساده به تصاویر تبدیل کنید</em>در <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "افزونه SEBLOD باعث می شود سازنده در دسترس نباشد. ویژگی را غیرفعال کنید<em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "نمایش اسلاید همیشه طول کامل را می گیرد ، و ارتفاع بر اساس نسبت تعریف شده به طور خودکار تطبیق می یابد. از طرف دیگر ، ارتفاع می تواند با ارتفاع منظره سازگار باشد. <br> <br> توجه: مطمئن شوید كه هنگام استفاده از یكی از گزینه های viewport ، هیچ كدام از تنظیمات بخش تنظیم نشده است.", "The template is only assigned to the selected pages.": "الگو فقط به صفحات انتخاب شده اختصاص داده می شود.", "The width of the grid column that contains the module.": "عرض ستون شبکه که شامل ماژول است.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "پوشه تم YOOtheme Pro با شکستن قابلیت های اساسی تغییر نام یافت. پوشه موضوع را دوباره به تغییر نام دهید<code>yootheme</code>.", "Thirds": "یک سوم", "Thirds 1-2": "یک سوم 1-2", "Thirds 2-1": "یک سوم 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "این پوشه تصاویری را که هنگام استفاده از طرح بندی ها از کتابخانه YOOtheme Pro بارگیری می کنید ، ذخیره می کند. در داخل پوشه تصاویر جوملا قرار دارد.", "This is only used, if the thumbnail navigation is set.": "این تنها در صورتی استفاده می شود که پیمایش تصاویر بندانگشتی تنظیم شود.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "این طرح شامل یک پرونده رسانه ای است که باید در کتابخانه رسانه وب سایت شما بارگیری شود. |||| این طرح شامل %smart_count% پرونده های رسانه ای که باید در کتابخانه رسانه وب سایت شما بارگیری شوند.", "This option doesn't apply unless a URL has been added to the item.": "این گزینه صدق می کند مگر اینکه URL به مورد اضافه شود.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "این گزینه صدق می کند مگر اینکه URL به مورد اضافه شود. فقط محتوای مورد مرتبط خواهد شد.", "This option is only used if the thumbnail navigation is set.": "این گزینه فقط در صورت تنظیم پیمایش تصاویر کوچک مورد استفاده قرار می گیرد.", "Thumbnail Inline SVG": "بندانگشتی داخل متن SVG", "Thumbnail SVG Color": "بندانگشتی رنگ SVG ", "Thumbnail Width/Height": "عرض / ارتفاع تصویر بند انگشتی", "Thumbnail Wrap": "بسته بند انگشتی", "Thumbnails": "بند انگشتی", "Time Archive": "آرشیو زمان", "Title": "عنوان", "title": "عنوان", "Title Decoration": "دکوراسیون عنوان", "Title Margin": "حاشیه عنوان", "Title Parallax": "اختلاف منظر عنوان", "Title Style": "سبک عنوان", "Title styles differ in font-size but may also come with a predefined color, size and font.": "سبک عنوان در اندازه قلم متفاوت است اما ممکن است با یک رنگ ، اندازه و قلم از پیش تعریف شده نیز همراه باشد.", "Title Width": "عرض عنوان", "To Top": "به بالا", "Toolbar": "نوار ابزار", "Top": "بالا", "Touch Icon": "آیکون لمسی", "Transition": "افکت انتقال", "Transparent Header": "هدر شفاف", "Type": "نوع", "Understanding the Layout Structure": "درک ساختار چیدمان", "Updating YOOtheme Pro": "بروزرسانی قالب", "Upload": "بارگزاری", "Upload a background image.": "یک تصویر پس زمینه بارگذاری کنید.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "یک تصویر پس زمینه اختیاری که صفحه را در بر می گیرد بارگذاری کنید. هنگام پیمایش ثابت خواهد شد.", "Upload Layout": "بارگزاری چیدمان", "Upload Preset": "بارگزاری پیش طراحی", "Upload Style": "بارگزاری قالب", "Use a numeric pagination or previous/next links to move between blog pages.": "از یک صفحه بندی عددی یا پیوندهای قبلی / بعدی برای جابجایی بین صفحات وبلاگ استفاده کنید.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "برای جلوگیری از کوچکتر شدن تصاویر از محتویات دستگاه های کوچک ، از حداقل ارتفاع اختیاری استفاده کنید.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "برای جلوگیری از کوچکتر شدن کشویی از محتوای آن در دستگاه های کوچک ، از حداقل ارتفاع اختیاری استفاده کنید.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "برای جلوگیری از کوچکتر شدن نمایش پرده ای از محتوای آن در دستگاه های کوچک ، از حداقل ارتفاع اختیاری استفاده کنید.", "Use as breakpoint only": "فقط به عنوان نقطه شکست استفاده کنید", "Use double opt-in.": "استفاده از دو گزینه را انتخاب کنید.", "Use excerpt": "از گزیده استفاده کنید", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "از رنگ پس زمینه در ترکیب با حالت های ترکیبی ، یک تصویر شفاف استفاده کنید یا اگر تصویر تمام صفحه را پوشش ندهد ، منطقه را پر کنید.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "اگر تصویر تمام بخش را پوشش نمی دهد ، از رنگ پس زمینه در ترکیب با حالت های ترکیبی ، یک تصویر شفاف یا برای پر کردن ناحیه استفاده کنید.", "Use the background color in combination with blend modes.": "از رنگ پس زمینه در ترکیب با حالت های ترکیبی استفاده کنید.", "Users": "کاربران", "Using Advanced Custom Fields": "استفاده کردن از فیلد های سفارشی پیشرفته", "Using Content Fields": "با استفاده از زمینه های محتوا", "Using Content Sources": "با استفاده از منابع محتوا", "Using Custom Fields": "با استفاده از فیلد سفارشی", "Using Custom Post Type UI": "استفاده از رابط های کاربری پست سفارشی", "Using Custom Post Types": "استفاده از نوع پست های سفارشی", "Using Custom Sources": "با استفاده از منابع سفارشی", "Using Dynamic Conditions": "استفاده از شرایط متغیر", "Using Images": "با استفاده از تصاویر", "Using Links": "با استفاده از پیوندها", "Using Menu Locations": "با استفاده از مکانهای منو", "Using Menu Positions": "با استفاده از موقعیت های منو", "Using Module Positions": "با استفاده از موقعیت های ماژول", "Using My Layouts": "استفاده از چیدمان های من", "Using Page Sources": "با استفاده از منابع صفحه", "Using Powerful Posts Per Page": "استفاده از پست های قدرتمند در هر صفحه", "Using Pro Layouts": "استفاده از چیدمان های حرفه ای", "Using Related Sources": "با استفاده از منابع مرتبط", "Using the Before and After Field Options": "با استفاده از گزینه های قبل و بعد از زمینه", "Using the Builder Module": "افتتاح ماژول سایت ساز", "Using the Builder Widget": "ابزارک سایت ساز را باز کنید", "Using the Categories and Tags Field Options": "استفاده از ویژگی دسته بندی ها و فیلد برچسب ها", "Using the Content Field Options": "استفادهاز انتخاب های فیلد محتوا", "Using the Content Length Field Option": "با استفاده از گزینه زمینه فیلد محتوا", "Using the Contextual Help": "با استفاده از راهنما متنی", "Using the Date Format Field Option": "با استفاده از گزینه Field Format Field", "Using the Device Preview Buttons": "با استفاده از دکمه های پیش نمایش دستگاه", "Using the Dropdown Menu": "با استفاده از منوی کشویی", "Using the Footer Builder": "با استفاده از پاورقی ساز", "Using the Media Manager": "با استفاده از مدیر رسانه", "Using the Menu Module": "با استفاده از ماژول منو", "Using the Menu Widget": "با استفاده از ابزارک منو", "Using the Meta Field Options": "با استفاده از گزینه های فیلد متا", "Using the Search and Replace Field Options": "با استفاده از گزینه های جستجو و جایگزینی فیلد", "Using the Sidebar": "با استفاده از نوار کناری", "Using the Tags Field Options": "با استفاده از گزینه های زمینه برچسب ها", "Using the Teaser Field Options": "استفاده از فیلد تیزر", "Using the Toolbar": "با استفاده از نوار ابزار", "Using the Unsplash Library": "با استفاده از کتابخانه Unsplash", "Using the WooCommerce Pages Element": "استفاده از المان صفحه ووکامرس", "Using Toolset": "استفاده از ست ابزار", "Using Widget Areas": "با استفاده از مناطق ابزارک", "Using WordPress Category Order and Taxonomy Terms Order": "استفادها از ترتیب شاخه وردپرس و ترتیب شرایط طبقه بندی", "Using WordPress Popular Posts": "استفاده از پست های مشهور وردپرس", "Value": "مقدار", "Velocity": "شتاب", "Version %version%": "نسخه %version%", "Vertical Alignment": "چیدمان عمودی", "Vertical navigation": "ناوبری عمودی", "Vertically align the elements in the column.": "به طور عمودی عناصر موجود در ستون را تراز کنید.", "Vertically center grid items.": "وسایل شبکه را به طور عمودی وسط کنید.", "Vertically center table cells.": "به طور عمودی سلولهای جدول را وسط کنید.", "Vertically center the image.": "به طور عمودی تصویر را وسط کنید.", "Vertically center the navigation and content.": "ناوبری و محتوا را به طور عمودی متمرکز کنید.", "Video": "ویدئو", "Videos": "ویدئو ها", "View Photos": "مشاهده عکسها", "Viewport": "میدان دید", "Visibility": "پدیداری", "Visible on this page": "قابل مشاهده در این صفحه", "Visual": "دیداری", "Website": "وب سایت", "When using cover mode, you need to set the text color manually.": "هنگام استفاده از حالت جلد ، باید رنگ متن را به صورت دستی تنظیم کنید.", "Whole": "مجموع", "Widget": "ابزارک", "Widget Area": "ناحیه ابزارک", "Widgets": "ابزارک ها", "Width": "عرض", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "در صورتی که تصویر به صورت عمودی یا افقی باشد ، عرض و ارتفاع برطرف می شوند.", "Width/Height": "عرض / ارتفاع", "Woo Notices": "اعلانات فروشگاه", "Woo Pages": "صفحات ووکامرس", "Year Archive": "آرشیو سال", "YOOtheme": "یوتم", "YOOtheme API Key": "کلید API یوتم پرو", "YOOtheme Help": "راهنمای یوتم پرو", "YOOtheme Pro is fully operational and ready to take off.": "یوتم پرو کاملاً عملیاتی است و آماده برخاستن است.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "یوتم پرو عملیاتی نیست. همه مسائل مهم باید برطرف شود.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "یوتم پرو عملیاتی است ، اما مواردی وجود دارد که برای باز کردن ویژگی ها و بهبود عملکرد باید برطرف شود.", "Z Index": "Z ایندکس", "Zoom": "بزرگ نمایی" }theme/languages/uk_UA.json000064400000613702151666572140011541 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Обрати -", "- Select Module -": "- Обрати модуль -", "- Select Position -": "- Обрати позицію -", "- Select Widget -": "- Обрати віджет -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" вже існує в бібліотеці, тому він буде перезаписаний при збереженні.", "(ID %id%)": "(ID %id%)", "%element% Element": "Елемент %element%", "%label% - %group%": "%label% - %group%", "%label% Location": "Місцезнаходження %label%", "%label% Position": "Позиція %label%", "%name% already exists. Do you really want to rename?": "%name% вже існує. Ви дійсно хочете перейменувати?", "%post_type% Archive": "Архів %post_type%", "%s is already a list member.": "%s вже є учасником списку.", "%s of %s": "%s з %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s було остаточно видалено та не може бути повторно імпортовано. Щоб повернутися до списку, контакт повинен повторно підписатися.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Колекція |||| %smart_count% Колекції", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Елемент|||| %smart_count% Елементи", "%smart_count% File |||| %smart_count% Files": "%smart_count% Файл |||| %smart_count% Файли", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Обраний файл |||| %smart_count% Обрані файли", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Значок |||| %smart_count% Значки", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Макет |||| %smart_count% Макети", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% Не вдалося завантажити медіафайл: |||| %smart_count% Помилка у завантаженні медіафайлів:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Фотографія |||| %smart_count% Фотогоафії", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Пресет |||| %smart_count% Пресети", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Стиль |||| %smart_count% Стилі", "%smart_count% User |||| %smart_count% Users": "%smart_count% користувач |||| %smart_count% користувачі", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% лише завантажені з обраної батьківської %taxonomy%.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% Пресети", "<code>json_encode()</code> must be available. Install and enable the <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> extension.": "<code>json_encode()</code> має бути доступним. Встановіть та увімкніть розширення <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a>.", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 колонка", "1 Column Content Width": "1 колонка ширина матеріалу", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Column Grid": "2 колонки сітка", "2 Column Grid (Meta only)": "2 колонки сітка (лише мета)", "2 Columns": "2 колонки", "20%": "20%", "25%": "25%", "2X-Large": "2X-Large", "3 Columns": "3 колонки", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3X-Large": "3X-Large", "4 Columns": "4 колонки", "40%": "40%", "5 Columns": "5 колонок", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 Сер, 1999 (j M, Y)", "6 Columns": "6 колонок", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рекомендується вищий ліміт пам’яті. Встановіть <code>memory_limit</code> на 128 Мб у <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">конфігурації PHP</a>.", "A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рекомендується вищий ліміт завантаження. Встановіть <code>post_max_size</code> на 8 МБ у <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">конфігурації PHP</a>.", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рекомендується вищий ліміт завантаження. Встановіть <code>upload_max_filesize</code> на 8 Мб у <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">конфігурації PHP</a>.", "About": "Деталі", "Above Content": "Над вмістом", "Above Title": "Над заголовком", "Absolute": "Абсолютний", "Accessed": "Доступ", "Accordion": "Акордеон", "Active": "Акстивний", "Active item": "Активний елемент", "Add": "Додати", "Add a colon": "Додати колонку", "Add a leader": "Додати назву", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Додати ефект паралакса або виправити фон в області перегляду при прокручуванні.", "Add a parallax effect.": "Додати ефект паралакса.", "Add a stepless parallax animation based on the scroll position.": "Додати безступінчасту анімацію паралаксу на основі положення прокрутки.", "Add animation stop": "Додати зупинку анімації", "Add bottom margin": "Додати нижній відступ", "Add clipping offset": "Додати зміщення відсікання", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Додати користувацьктй CSS чи Less до вашого сайту. Доступні всі Less варіації теми та міксини. <code><style></code> мітка не потрібна.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Додати власний JavaScript до Вашого сайту. <code><script></code> мітка не потрібна.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Додати власний JavaScript що налаштовує куки. Він завантажується після подачі матеріалу. <code><script></code> мітка не потрібна.", "Add Element": "Додати елемент", "Add extra margin to the button.": "Додати додатковий відступ до кнопки.", "Add Folder": "Додати теку", "Add Item": "Додати пункт", "Add margin between": "Додати відступ між", "Add Media": "Додати медіа", "Add Menu Item": "Додати пункт меню", "Add Module": "Додати модуль", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Додайте кілька зупинок, щоб визначити початковий, проміжний і кінцевий кольори впродовж анімації. За бажанням можна вказати відсоток для розміщення зупинок впродовж анімації.", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Додайте кілька зупинок, щоб визначити початкову, проміжну та кінцеву непрозорість уздовж послідовності анімації. За бажанням, вкажіть відсоток для розташування зупинок уздовж послідовності анімації.", "Add Row": "Додати ряд", "Add Section": "Додати розділ", "Add text after the content field.": "Додати текст після поля вмісту.", "Add text before the content field.": "Додайте текст перед полем вмісту.", "Add to Cart": "Додати до кошика", "Add to Cart Link": "Додати посилання на кошик", "Add to Cart Text": "Додати текст для кошика", "Add top margin": "Додати верхній відступ", "Adding a New Page": "Додати нову сторінку", "Adding the Logo": "Додавання логотипу", "Adding the Search": "Додавання пошуку", "Adding the Social Icons": "Додавання соціальних іконок", "Additional Information": "Додаткова інформація", "Address": "Адреса", "Advanced": "Додатково", "Advanced WooCommerce Integration": "Додаткова інтеграція з WooCommerce", "After": "Після", "After 1 Item": "Після 1 елементу", "After 10 Items": "Після 10 елементів", "After 2 Items": "Після 2 елементів", "After 3 Items": "Після 3 елементів", "After 4 Items": "Після 4 елементів", "After 5 Items": "Після 5 елементів", "After 6 Items": "Після 6 елементів", "After 7 Items": "Після 7 елементів", "After 8 Items": "Після 8 елементів", "After 9 Items": "Після 9 елементів", "After Display Content": "Після відображення вмісту", "After Display Title": "Після відображення заголовка", "After Submit": "Після відправки", "Alert": "Попередження", "Alias": "Псевдонім", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Вирівняйте спадні списки відповідно до відповідного пункту меню або панелі навігації. Додатково відображайте їх у розділі на всю ширину під назвою спадна панель, відображайте піктограму для позначення спадних меню та дозволяйте текстовим елементам відкриватися клацанням, а не наведенням курсора.", "Align image without padding": "Вирівняти зображення без відступів", "Align the filter controls.": "Вирівняти елементи керування фільтрами.", "Align the image to the left or right.": "Вирівняти зображення по лівому краю або по правому.", "Align the image to the top or place it between the title and the content.": "Вирівняти зображення вгорі або помістити його між заголовком та вмістом.", "Align the image to the top, left, right or place it between the title and the content.": "Вирівняти зображення по верхньому, лівому, правому краю або помістити його між заголовком та змістом.", "Align the meta text.": "Вирівняти мета-текст.", "Align the navigation items.": "Вирівнювання елементів навігації.", "Align the section content vertically, if the section height is larger than the content itself.": "Вирівняти вміст розділу вертикально, якщо висота розділу більша, ніж сам вміст.", "Align the title and meta text as well as the continue reading button.": "Вирівняти заголовок і мета-текст, а також кнопку продовження читання.", "Align the title and meta text.": "Вирівняти назву та мета-текст.", "Align the title to the top or left in regards to the content.": "Вирівняйте заголовок по відношенню до вмісту зверху або зліва.", "Align to navbar": "Вирівняти панель навігації", "Alignment": "Вирівнювання", "Alignment Breakpoint": "Контрольна точка вирівнювання", "Alignment Fallback": "Вирівнювання відступів", "All backgrounds": "Всі фони", "All colors": "Всі кольори", "All except first page": "Усі, крім першої сторінки", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Всі зображення знаходяться на умовах ліцензії <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, а це значить, що ви можете копіювати, змінювати, розповсюджувати та використовувати зображення безкоштовно, в тому числі в комерційних цілях, не питаючи дозволу.", "All Items": "Всі елементи", "All layouts": "Всі макети", "All pages": "Всі сторінки", "All presets": "Всі попередні налаштування", "All styles": "Всі стилі", "All topics": "Всі теми", "All types": "Всі типи", "All websites": "Всі сайти", "All-time": "Весь час", "Allow mixed image orientations": "Дозволити змішані орієнтації зображення", "Allow multiple open items": "Дозволити одночасне відкриття декількох елементів", "Alphabetical": "Алфавітний", "Alphanumeric Ordering": "Буквено-цифрове впорядкування", "Alt": "Альтернативний текст", "Alternate": "Альтернативний", "Always": "Завжди", "Animate background only": "Анімація тільки фону", "Animate items": "Анімовані елементи", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Анімуйте властивості до певних значень. Додайте кілька зупинок, щоб визначити початкові, проміжні та кінцеві значення впродовж анімації для кожної властивості. За бажанням можна вказати відсоток для розміщення зупинок впродовж анімації. Переклад і масштаб можуть мати додаткові <code>%</code>, <code>vw</code> і <code>vh</code> одиниці.", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Анімуйте властивості до певних значень. Додайте кілька зупинок, щоб визначити початкові, проміжні та кінцеві значення впродовж анімації. За бажанням можна вказати відсоток для розміщення зупинок впродовж анімації. Перекладач може мати додаткові <code>%</code>, <code>vw</code> і <code>vh</code> одиниці.", "Animate strokes": "Анімаційні штрихи", "Animation": "Анімація", "Animation Delay": "Затримка анімації", "Animations": "Анімації", "Any": "Будь-який", "Any Joomla module can be displayed in your custom layout.": "Будь-який віджет Joomla може відображатися у вашому користувацькому макеті.", "Any WordPress widget can be displayed in your custom layout.": "Будь-який віджет WordPress може відображатися у вашому користувацькому макеті.", "API Key": "API ключ", "Apply a margin between the navigation and the slideshow container.": "Застосувати відступ між навігацією і презентацією.", "Apply a margin between the overlay and the image container.": "Застосувати відступ між накладенням і зображенням.", "Apply a margin between the slidenav and the slider container.": "Застосувати відступ між навігацією слайда і слайдером.", "Apply a margin between the slidenav and the slideshow container.": "Застосувати відступ між навігацією слайда і презентацією.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Застосувати анімацію до елементів, як тільки вони потраплять у вікно перегляду. Анімація слайдів може вступити в силу з фіксованим зсувом або на 100% від власного розміру елемента.", "Are you sure?": "Ви впевнені?", "ARIA Label": "Лейбл ARIA", "Article": "Стаття", "Article Count": "Кількість статей", "Article Order": "Порядок статей", "Articles": "Статті", "As notification only ": "Лише як сповіщення ", "Ascending": "Висхідний", "Assigning Modules to Specific Pages": "Призначення модулів певним сторінкам", "Assigning Templates to Pages": "Призначення шаблонів сторінкам", "Assigning Widgets to Specific Pages": "Призначення віджетів до певних сторінок", "Attach the image to the drop's edge.": "Прикріпити зображення до краю.", "Attention! Page has been updated.": "Увага! Сторінку оновлено.", "Attribute Slug": "Атрибут Slug", "Attribute Terms": "Терміни для атрибутів", "Attribute Terms Operator": "Оператор термінів атрибута", "Attributes": "Атрибути", "Aug 6, 1999 (M j, Y)": "Серп 6, 1999 (M j, Y)", "August 06, 1999 (F d, Y)": "Серпень 06, 1999 (F d, Y)", "Author": "Автор", "Author Archive": "Авторський архів", "Author Link": "Посилання на автора", "Auto": "Авто", "Auto-calculated": "Автоматично підрахований", "Autoplay": "Автоматичне відтворення", "Autoplay Interval": "Інтервал автовідтворення", "Avatar": "Аватар", "Average Daily Views": "Середня кількість переглядів за день", "b": "b", "Back": "Назад", "Back to top": "Повернутися догори", "Background": "Фон", "Background Color": "Колір фону", "Background Image": "Фонове зображення", "Badge": "Бейдж", "Bar": "Бар", "Base Style": "Базовий стиль", "Basename": "Базова назва", "Before": "До цього", "Before Display Content": "Перед відображенням вмісту", "Behavior": "Поведінка", "Below Content": "Нижче вмісту", "Below Title": "Нижче заголовка", "Beta": "Beta", "Between": "Між", "Blank": "Чистий", "Blend Mode": "Режим накладення", "Block Alignment": "Вирівнювання блоку", "Block Alignment Breakpoint": "Точка розриву блоку вирівнювання", "Block Alignment Fallback": "Запасний блок вирівнювання", "Blog": "Блог", "Blur": "Розмиття", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrap потрібен лише тоді, коли завантажуються стандартні файли шаблонів Joomla, наприклад, для редагування інтерфейсу Joomla. Завантажте jQuery для написання кооистувацького коду на основі JavaScript бібліотеки jQuery.", "Border": "Рамка", "Bottom": "Позиція Bottom", "Bottom Center": "Внизу по центру", "Bottom Left": "Внизу ліворуч", "Bottom Right": "Внизу праворуч", "Box Decoration": "Оформлення контейнера", "Box Shadow": "Тінь об'єкта", "Boxed": "У коробці", "Brackets": "Дужки", "Breadcrumbs": "Хлібні крихти", "Breadcrumbs Home Text": "Домашній текст хлібних сухарів", "Breakpoint": "Контрольна точка", "Builder": "Конструктор", "Bullet": "Дужки", "Button": "Кнопка", "Button Danger": "Кнопка Danger", "Button Default": "Кнопка Default", "Button Margin": "Кнопка Відступу", "Button Primary": "Кнопка Primary", "Button Secondary": "Кнопка Secondary", "Button Size": "Розмір кнопки", "Button Text": "Кнопка Text", "Buttons": "Кнопки", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "За замовчуванням поля для пов’язаних джерел з окремими елементами доступні для відображення. Оберіть пов’язане джерело з декількома елементами для відображення його полів.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "За налаштуванням зображення завантажуються ліниво. Увімкніть швидке завантаження для зображень у початковому вікні перегляду.", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "За налаштуванням, лише некатегоризовані статті називаються сторінками. Крім того, ви можете визначити статті з певної категорії як сторінки.", "By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.": "За налаштуванням, лише некатегоризовані статті називаються сторінками. Змініть категорію в додаткових налаштуваннях.", "Cache": "Кеш", "Campaign Monitor API Token": "API сервісу Campaign Monitor", "Cancel": "Скасувати", "Caption": "Підпис", "Card Default": "Картка Default", "Card Hover": "Картка Hover", "Card Primary": "Картка Primary", "Card Secondary": "Картка Secondary", "Cart": "Кошик", "Cart Cross-sells Columns": "Кошик перехресних продажів колонок", "Cart Quantity": "Кількість кошика", "Categories": "Категорії", "Categories are only loaded from the selected parent category.": "Категорії завантажуються лише з вибраної батьківської категорії.", "Categories Operator": "Категорії оператор", "Category": "Категорія", "Category Blog": "Категорія Блог", "Category Order": "Порядок категорій", "Center": "По центру", "Center Center": "Центр центр", "Center columns": "Центральні стовпці", "Center grid columns horizontally and rows vertically.": "Центральна сітка стовпчиків горизонтально та рядків вертикально.", "Center horizontally": "Центрувати по горизонталі", "Center Left": "По центру ліроруч", "Center Right": "По центру праворуч", "Center rows": "Центральні ряди", "Center the active slide": "Центрувати активний слайд", "Center the content": "Центрувати вміст", "Center the module": "Центрувати модуль", "Center the title and meta text": "Вирівняйте заголовок і мета-текст по центру", "Center the title, meta text and button": "Центрувати Заголовок, Мета-текст та Кнопку", "Center the widget": "Віджет по центру", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Вирівнювання по центру, правому або лівому боці контейнера може залежати від контрольної точки обраного гаджету і вимагати відступів.", "Changed": "Змінено", "Changelog": "Історія змін", "Checkout": "Каса", "Checkout Page": "Сторінка каси", "Child %taxonomies%": "Дочірній %taxonomies%", "Child Categories": "Дочірні категорії", "Child Menu Items": "Дочірні пункти меню", "Child Tags": "Дочірні теги", "Child Theme": "Тема дитини", "Choose a divider style.": "Вибрати стиль розділювача.", "Choose a map type.": "Вибрати тип карти.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Вибери між паралаксом, що залежить від позиції при прокручуванні, та анімації, що застосовується, коли слайд активний.", "Choose between a vertical or horizontal list.": "Оберіть вертикальний або горизонтальний список.", "Choose between an attached bar or a notification.": "Виберіть між прикріпленою панеллю чи сповіщенням.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Оберіть попередню/наступну або числову нумерацію сторінок. Нумерація сторінок недоступна для окремих статей.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Оберіть попередню/наступну або числову нумерацію сторінок. Числова нумерація недоступна для окремих дописів.", "Choose Font": "Вибрати шрифт", "Choose products of the current page or query custom products.": "Оберіть товари на поточній сторінці або зробіть запит на користувацькі товари.", "Choose the icon position.": "Вибери позицію іконки.", "Choose the page to which the template is assigned.": "Оберіть сторінку, до якої призначено шаблон.", "Circle": "Коло", "City or Suburb": "Місто чи передмістя", "Class": "Клас", "Classes": "Класи", "Clear Cache": "Очистити кеш", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Очистити кешированні зображення і файли. Зображення, розміри яких потребують змін зберігаються в папці \"кеш\" шаблона. Після завантаження зображення з таким же найменуванням необхідно очистити кеш.", "Click": "Клік", "Click on the pencil to pick an icon from the icon library.": "Для вибору іконки з SVG галереї натисни на олівець.", "Close": "Закрити", "Close Icon": "Іконка \"Закрити\"", "Cluster Icon (< 10 Markers)": "Іконка кластера (< 10 маркерів)", "Cluster Icon (< 100 Markers)": "Іконка кластера (< 100 маркерів)", "Cluster Icon (100+ Markers)": "Іконка кластера (100+ маркерів)", "Clustering": "Кластеризація", "Code": "Код", "Collapsing Layouts": "Макети, що згортаються", "Collections": "Колекції", "Color": "Колір", "Color navbar parts separately": "Окремо розфарбувати частини навігаційного бару", "Color-burn": "Кольорове випалювання", "Color-dodge": "Маскування кольору", "Column": "Колонка", "Column 1": "Колонка 1", "Column 2": "Колонка 2", "Column 3": "Колонка 3", "Column 4": "Колонка 4", "Column 5": "Колонка 5", "Column 6": "Колонка 6", "Column Gap": "Розрив стовпця", "Column Height": "Висота колонки", "Column Layout": "Макет стовпця", "Column Parallax": "Паралакс колонки", "Column within Row": "Колонка у рядку", "Column within Section": "Колонка в секції", "Columns": "Колонки", "Columns Breakpoint": "Контрольна точка по гаджетам для колонок", "Comment Count": "Кількість коментарів", "Comments": "Коментарі", "Components": "Компоненти", "Condition": "Положення", "Consent Button Style": "Стиль кнопки Згода", "Consent Button Text": "Текст кнопки Згода", "Contact": "Контакт", "Contacts Position": "Позиція контактів", "Contain": "Містить", "Container Default": "Контейнер за налаштуванням", "Container Large": "Контейнер Large", "Container Padding": "Відступ від контейнера", "Container Small": "Контейнер Small", "Container Width": "Ширина контейнеру", "Container X-Large": "Контейнер X-Large", "Contains": "Містить", "Contains %element% Element": "Містить елемент %element%", "Contains %title%": "Містить %title%", "Content": "Вміст", "content": "вміст", "Content Alignment": "Вирівнювання вмісту", "Content Length": "Довжина вмісту", "Content Margin": "Поля вмісту", "Content Parallax": "Паралакс Контенту/Змісту", "Content Type Title": "Заголовок типу вмісту", "Content Width": "Ширина вмісту", "Controls": "Елементи керування", "Convert": "Перетворити", "Convert to title-case": "Перетворити на регістр заголовка", "Cookie Banner": "Cookie банер", "Cookie Scripts": "Сценарії файлів Сookie", "Coordinates": "Координати", "Copy": "Скопіювати", "Countdown": "Лічильник зворотного відліку", "Country": "Країна", "Cover": "Обкладинка", "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.": "Створіть макет кладки без зазорів, якщо елементи сітки мають різну висоту. Упакуйте елементи в колонки з найбільшим простором або покажіть їх у природному порядку. За бажанням, використовуйте анімацію паралакса для переміщення колонок під час прокрутки, поки вони не вирівняються внизу.", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Створіть загальний макет для цього типу сторінки. Почніть з нового макета та оберіть з колекції готових до використання елементів або перегляньте бібліотеку макетів і починайте з однієї з попередньо побудованих макетів.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Створіть макет для нижнього колонтитулу всіх сторінок. Почніть з нового макета та оберіть із колекції готових до використання елементів або перегляньте бібліотеку макетів і починайте з однієї з попередньо побудованих макетів.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Створіть макет для випадаючого меню. Почніть з нового макета і виберіть з колекції готових елементів або перегляньте бібліотеку макетів і почніть з одного з готових макетів.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Створіть макет для цього модуля і опублікуйте його у верхній або нижній позиції. Почніть з нового макета й оберіть з колекції готових елементів або перегляньте бібліотеку макетів і почніть з одного з готових макетів.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Створіть макет для цього віджета і опублікуйте його у верхній або нижній частині. Почніть з нового макета й оберіть з колекції готових елементів або перегляньте бібліотеку макетів і почніть з одного з готових макетів.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Створіть макет. Почніть з нового макета і виберіть з колекції готових елементів або перегляньте бібліотеку макетів і почніть з одного з готових макетів.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Створіть індивідуальний макет для поточної сторінки. Почніть з нового макета й оберіть з колекції готових елементів або перегляньте бібліотеку макетів і почніть з одного з готових макетів.", "Create site-wide templates for pages and load their content dynamically into the layout.": "Створіть шаблони сторінок для всього сайту та динамічно завантажуйте їхній вміст у макет.", "Created": "Створено", "Creating a New Module": "Створення нового модуля", "Creating a New Widget": "Створення нового віджета", "Creating Accordion Menus": "Створення меню акордеонів", "Creating Advanced Module Layouts": "Створення розширених макетів модулів", "Creating Advanced Widget Layouts": "Створення розширених макетів віджетів", "Creating Advanced WooCommerce Layouts": "Створення розширених макетів WooCommerce", "Creating Individual Post Layout": "Створення індивідуального макета допису", "Creating Individual Post Layouts": "Створення індивідуальних макетів дописів", "Creating Menu Dividers": "Створення роздільників меню", "Creating Menu Heading": "Створення заголовка меню", "Creating Menu Headings": "Створення заголовків меню", "Creating Menu Text Items": "Створення текстових пунктів меню", "Creating Navbar Text Items": "Створення текстових елементів Navbar", "Creating Parallax Effects": "Створення ефектів паралакса", "Creating Sticky Parallax Effects": "Створення ефектів липкого паралаксу", "Critical Issues": "Критичні питання", "Critical issues detected.": "Виявлено критичні помилки.", "Cross-Sell Products": "Продукти для перехресного продажу", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "Куратор <a href>%user%</a>", "Current Layout": "Поточний макет", "Current Style": "Поточний стиль", "Current User": "Поточний користувач", "Custom": "Користувацький", "Custom %post_type%": "Користувацький %post_type%", "Custom %post_types%": "Користувацький %post_types%", "Custom %taxonomies%": "Користувацькі %taxonomies%", "Custom %taxonomy%": "Користувацький %taxonomy%", "Custom Article": "Стаття на замовлення", "Custom Articles": "Користувацькі статті", "Custom Categories": "Спеціальні категорії", "Custom Category": "Користувацька категорія", "Custom Code": "Користувацький код", "Custom Fields": "Користувацькі поля", "Custom Menu Item": "Користувацький пункт меню", "Custom Menu Items": "Користувацькі пункти меню", "Custom Query": "Користувацький запит", "Custom Tag": "Користувацький тег", "Custom Tags": "Кооистувацькі теги", "Custom User": "Користувацький користувач", "Custom Users": "Користувацькі користувачі", "Customization": "Персоналізація", "Customization Name": "Назва персоналізації", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Налаштуйте ширину стовпців у вибраному макеті та встановіть порядок розташування стовпців. Зміна макета призведе до скидання всіх налаштувань.", "Danger": "Небезпека", "Dark": "Темний", "Dark Text": "Темний текст", "Darken": "Темніший", "Date": "Дата", "Date Archive": "Архів дат", "Date Format": "Формат дати", "Day Archive": "Денний архів", "Decimal": "Десятковий", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Додай до заголовку декоративний елемент розділювач, вертикальну лінію зліва чи центровану лінію.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Прикрасьте заголовок роздільником, стрілкою або лінією, яка вертикально відцентрована до заголовка.", "Decoration": "Оформлення", "Default": "За налаштуванням", "Default Link": "Посилання за налаштуванням", "Define a background style or an image of a column and set the vertical alignment for its content.": "Визначте стиль тла або зображення стовпця та встановіть вертикальне вирівнювання його вмісту.", "Define a custom background color or a color parallax animation instead of using a predefined style.": "Визначте власний колір фону або анімацію кольорового паралаксу замість використання попередньо визначеного стилю.", "Define a name to easily identify the template.": "Визначте назву, щоб легко ідентифікувати шаблон.", "Define a name to easily identify this element inside the builder.": "Дай назву елементу для того, щоб легше впізнати його в конструкторі.", "Define a navigation menu or give it no semantic meaning.": "Визначте навігаційне меню або не надавайте йому жодного смислового значення.", "Define a unique identifier for the element.": "Визначте унікальний ідентифікатор для елемента.", "Define an alignment fallback for device widths below the breakpoint.": "Визначити запасний варіант вирівнювання для пристроїв, ширина яких менша за точку розриву.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Визначте один або кілька атрибутів для елемента. Відокремте ім’я та значення атрибута символом <code>=</code>. Один атрибут на рядок.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Визначте одне або декілька імен класів для елемента. Відокремлюйте декілька класів пробілами.", "Define the alignment in case the container exceeds the element max-width.": "Визначити вирівнювання на випадок, якщо контейнер перевищує максимальну ширину елемента.", "Define the alignment of the last table column.": "Визначте вирівнювання останнього стовпця таблиці.", "Define the device width from which the alignment will apply.": "Визначте ширину пристрою, з якої буде застосовуватися вирівнювання.", "Define the device width from which the max-width will apply.": "Визначте ширину пристрою, з якої буде застосовуватися максимальна ширина.", "Define the image quality in percent for generated JPG images and when converting JPEG and PNG to next-gen image formats.<br><br>Mind that setting the image quality too high will have a negative impact on page loading times.<br><br>Press the Clear Cache button in the advanced settings after changing the image quality.": "Визначте якість зображення у відсотках для створених зображень JPG та під час перетворення JPEG і PNG у формати зображень наступного покоління.<br><br>Пам’ятайте, що встановлення занадто високої якості зображення негативно вплине на час завантаження сторінки.<br> <br>Натисніть кнопку «Очистити кеш» у розширених налаштуваннях після зміни якості зображення.", "Define the layout of the form.": "Визначте макет форми.", "Define the layout of the title, meta and content.": "Визначте макет заголовка, мета-тексту та контенту.", "Define the order of the table cells.": "Визначте порядок комірок таблиці.", "Define the origin of the element's transformation when scaling or rotating the element.": "Визначте початок трансформації елемента при масштабуванні або обертанні елемента.", "Define the padding between items.": "Визначте проміжок між елементами.", "Define the padding between table rows.": "Визначте проміжок між рядками таблиці.", "Define the purpose and structure of the content or give it no semantic meaning.": "Визначте мету і структуру вмісту або не надавайте йому смислового значення.", "Define the title position within the section.": "Визначте позицію заголовка в секції.", "Define the width of the content cell.": "Визначте ширину комірки вмісту.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Визначте ширину навігації по фільтру. Виберіть між відсотковою та фіксованою шириною або розгорніть стовпці до ширини їхнього вмісту.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Визначте ширину зображення в сітці. Оберіть між відсотковою та фіксованою шириною або розгорніть стовпці до ширини їхнього вмісту.", "Define the width of the meta cell.": "Визначте ширину мета текстової комірки.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Визначте ширину навігації. Оберіть між відсотковою та фіксованою шириною або розгорніть колонки до ширини їхнього вмісту.", "Define the width of the title cell.": "Визначте ширину комірки заголовка.", "Define the width of the title within the grid.": "Визначте ширину заголовка в сітці.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Визначте ширину заголовка в сітці. Оберіть між відсотковою та фіксованою шириною або розгорніть стовпці до ширини їхнього вмісту.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Визначте, чи буде ширина елементів повзунка фіксованою, чи автоматично розширюватиметься на ширину вмісту.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Визначте, чи обгортати ескізи в кілька рядків, якщо контейнер занадто малий.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Затримуйте анімацію елемента в мілісекундах, наприклад <code>200</code>.", "Delayed Fade": "Затримка згасання", "Delete": "Видалити", "Delete animation stop": "Видалити зупинку анімації", "Descending": "За спаданням", "Description": "Опис", "description": "опис", "Description List": "Список описів", "Desktop": "ПК", "Determine how the image or video will blend with the background color.": "Визнач, як зображення або відео буде змішуватися з кольором фону.", "Determine how the image will blend with the background color.": "Визнач, як зображення буде змішуватися з кольором фону.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Визнач, чи буде зображення автоматично підганятися під розмір сторінки або порожні ділянки будуть заповнені кольором фону.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Визнач, чи буде зображення автоматично підганятися під розмір розділу або порожні ділянки будуть заповнені кольором фону.", "Dialog End": "Кінець діалогу", "Dialog Layout": "Макет діалогу", "Dialog Logo (Optional)": "Логотип діалогу (необов'язково)", "Dialog Push Items": "Пуш-елементи діалогового вікна", "Dialog Start": "Початок діалогу", "Difference": "Різниця", "Direction": "Напрямок", "Dirname": "Назва директорії", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Відключити автозапуск, включити автозапуск відразу або як тільки відео потрапляє в зону видимості.", "Disable element": "Вимкнути елемент", "Disable Emojis": "Вимкнути Emojis", "Disable infinite scrolling": "Вимкнути нескінченну прокрутку", "Disable item": "Вимкнути елемент", "Disable row": "Вимкнути ряд", "Disable section": "Вимкнути розділ", "Disable template": "Вимкнути шаблон", "Disable the <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filter for the_content and the_excerpt and disable conversion of Emoji characters to images.": "Вимкніть фільтр <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> для the_content і the_excerpt та вимкніть перетворення символів Emoji на зображення.", "Disable the element and publish it later.": "Вимкніть елемент і опублікуйте його пізніше.", "Disable the item and publish it later.": "Вимкніть елемент і опублікуйте його пізніше.", "Disable the row and publish it later.": "Вимкніть рядок і опублікуйте його пізніше.", "Disable the section and publish it later.": "Вимкніть секцію і опублікуйте її пізніше.", "Disable the template and publish it later.": "Вимкніть шаблон і опублікуйте його пізніше.", "Disable wpautop": "Вимкнути wpautop", "Disabled": "Вимкнено", "Disc": "Диск", "Discard": "Відкинути", "Display": "Показати", "Display a divider between sidebar and content": "Показати роздільник між бічною панеллю та вмістом", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Показати меню, обравши позицію, в якій воно має з'явитися. Наприклад, опублікуйте головне меню в позиції navbar, а альтернативне - в mobile.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Показати іконку пошуку ліворуч або праворуч. Іконку праворуч можна натиснути, щоб відправити пошук.", "Display header outside the container": "Показати заголовк поза контейнером", "Display icons as buttons": "Показати іконки у вигляді кнопок", "Display on the right": "Показати праворуч", "Display overlay on hover": "Показати накладення при наведенні", "Display products based on visibility.": "Показати продукти, засновані на видимості.", "Display the breadcrumb navigation": "Показати навігацію хлібними крихтами", "Display the cart quantity in brackets or as a badge.": "Показати кількість в кошику в дужках або у вигляді бейджа.", "Display the content inside the overlay, as the lightbox caption or both.": "Показати вміст всередині накладання, як підпис лайтбоксу або і те, і інше.", "Display the content inside the panel, as the lightbox caption or both.": "Показати вміст всередині панелі, у вигляді підпису лайтбоксу або і те, і інше.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Показати поле уривку, якщо воно має вміст, інакше - вміст. Щоб використовувати поле витягу, створіть користувацьке поле з назвою excerpt.", "Display the excerpt field if it has content, otherwise the intro text.": "Показати поле уривку, якщо в ньому є вміст, інакше - вступний текст.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Показати поле уривку, якщо воно містить вміст, інакше - вступний текст. Щоб використовувати поле фрагмента, створіть користувацьке поле з назвою excerpt.", "Display the first letter of the paragraph as a large initial.": "Показати першу літеру абзацу великими літерами.", "Display the image only on this device width and larger.": "Показувати зображення тільки на пристрої обраного розміру або більшого.", "Display the image or video only on this device width and larger.": "Показувати зображення тільки на пристрої обраного розміру або більшого.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Показати елементи керування мапою та визначити, чи можна масштабувати або перетягувати мапу за допомогою коліщатка миші або дотиком.", "Display the meta text in a sentence or a horizontal list.": "Показати мета-текст у вигляді речення або горизонтального списку.", "Display the module only from this device width and larger.": "Показувати модуль тільки на пристрої обраного розміру або більшого.", "Display the navigation only on this device width and larger.": "Показувати навігацію тільки на пристрої обраного розміру або більшого.", "Display the parallax effect only on this device width and larger.": "Показувати ефект Параллакс тільки на пристрої обраного розміру або більшого.", "Display the popover on click or hover.": "Показати спливаюче вікно при натисканні або наведенні курсору.", "Display the section title on the defined screen size and larger.": "Показати назву секції на визначеному розмірі екрана і більше.", "Display the short or long description.": "Показати короткий або довгий опис.", "Display the slidenav only on this device width and larger.": "Показати слайди тільки на цьому пристрої з такою шириною і більше.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Показати слайди назовні лише на пристроях цієї ширини та більших за неї. В іншому випадку відображайте його всередині.", "Display the title in the same line as the content.": "Показати заголовок у тому ж рядку, що й вміст.", "Display the title inside the overlay, as the lightbox caption or both.": "Показати заголовок всередині накладання, як підпис лайтбоксу або і те, і інше.", "Display the title inside the panel, as the lightbox caption or both.": "Показати заголовок всередині панелі, як підпис лайтбоксу або і те, і інше.", "Display the widget only from this device width and larger.": "Показати віджет тільки з цієї ширини пристрою і більше.", "Displaying the Breadcrumbs": "Відображення сухарів", "Displaying the Excerpt": "Відображення уривку", "Displaying the Mobile Header": "Відображення заголовка мобільного пристрою", "div": "div", "Divider": "Роздільник", "Do you really want to replace the current layout?": "Ви дійсно бажаєте замінити поточний макет?", "Do you really want to replace the current style?": "Ви дійсно бажаєте замінити поточний стиль?", "Documentation": "Документація", "Does not contain": "Не містить", "Does not end with": "Не закінчується на", "Does not start with": "Не починається з", "Don't collapse column": "Не згортати колонку", "Don't collapse the column if dynamically loaded content is empty.": "Не згортати стовпець, якщо динамічно завантажений вміст порожній.", "Don't expand": "Не розширювати", "Don't wrap into multiple lines": "Не обгортайте в кілька рядків", "Dotnav": "Dotnav", "Double opt-in": "Подвійний вибір", "Download": "Завантажити", "Download All": "Завантажити все", "Download Less": "Завантажити менше", "Draft new page": "Чернетка нової сторінки", "Drop Cap": "Буквиця", "Dropbar Animation": "Анімація випадаючої панелі", "Dropbar Center": "Випадаюча панель по центру", "Dropbar Content Width": "Ширина вмісту випадаючої панелі", "Dropbar Top": "Випадаюча панель зверху", "Dropbar Width": "Ширина випадаючої панелі", "Dropdown": "Спадаюче меню", "Dropdown Alignment": "Вирівнювання випадаючої панелі", "Dropdown Columns": "Колонки випадаючої панелі", "Dropdown Nav Style": "Стилі навігації випадаючої панелі", "Dropdown Padding": "Відступи у випадаючій панелі", "Dropdown Stretch": "Розтягнути випадаючій панель", "Dropdown Width": "Ширина випадаючого списку", "Dynamic": "Динамічний", "Dynamic Condition": "Динамічний стан", "Dynamic Content": "Динамічний зміст", "Dynamic Content (Parent Source)": "Динамічний вміст (батьківське джерело)", "Dynamic Multiplication": "Динамічне множення", "Dynamic Multiplication (Parent Source)": "Динамічне множення (батьківське джерело)", "Easing": "Полегшення", "Edit": "Редагувати", "Edit %title% %index%": "Редагувати %title% %index%", "Edit Article": "Редагувати статтю", "Edit Image Quality": "Редагувати якість зображення", "Edit Item": "Редагувати пункт", "Edit Items": "Редагувати елементи", "Edit Layout": "Редагувати макет", "Edit Menu Item": "Редагувати пункт меню", "Edit Module": "Редагувати модуль", "Edit Parallax": "Редагувати паралакс", "Edit Settings": "Змінити налаштування", "Edit Template": "Редагувати шаблон", "Element": "Елемент", "Elements within Column": "Елементи всередині стовпця", "Email": "Електронна пошта", "Emphasis": "Акцент", "Empty Dynamic Content": "Порожній динамічний вміст", "Enable a navigation to move to the previous or next post.": "Увімкніть навігацію, щоб перейти до попередньої або наступної публікації.", "Enable active state": "Увімкнути активний стан", "Enable autoplay": "Увімкнути автовідтворення", "Enable click mode on text items": "Увімкніть режим натискання на текстові елементи", "Enable drop cap": "Увімкнути буквицю", "Enable dropbar": "Увімкнути панель випадаючого меню", "Enable filter navigation": "Увімкнути фільтр навігації", "Enable lightbox gallery": "Увімкнути лайтбокс для галереї", "Enable map dragging": "Увімкнути перетягування мапи", "Enable map zooming": "Увімкнути масштабування карти", "Enable marker clustering": "Увімкнути кластеризацію маркерів", "Enable masonry effect": "Увімкнути ефект динамічної сітки", "Enable parallax effect": "Увімкнути ефект паралаксу", "Enable the pagination.": "Увімкніть пагінацію.", "End": "Кінець", "Ends with": "Закінчується на", "Enter %s% preview mode": "Увійдіть в режим попереднього перегляду %s%", "Enter a comma-separated list of tags to manually order the filter navigation.": "Введіть список тегів через кому, щоб вручну впорядкувати навігацію за фільтром.", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Введіть список тегів, розділених комами, наприклад: <code>blue, white, black</code>.", "Enter a date for the countdown to expire.": "Введіть дату закінчення зворотного відліку.", "Enter a decorative section title which is aligned to the section edge.": "Введіть назву декоративного розділу, який вирівняний до краю розділу.", "Enter a descriptive text label to make it accessible if the link has no visible text.": "Введіть описовий текстовий підпис, щоб зробити посилання доступним, якщо воно не містить видимого тексту.", "Enter a subtitle that will be displayed beneath the nav item.": "Введіть підзаголовок, який буде відображатися під назвою пункту меню.", "Enter a table header text for the content column.": "Введіть текст заголовка таблиці для стовпчика вмісту.", "Enter a table header text for the image column.": "Введіть текст заголовка таблиці для стовпчика зображення.", "Enter a table header text for the link column.": "Введіть текст заголовка таблиці для стовпчика посилання.", "Enter a table header text for the meta column.": "Введіть текст заголовка таблиці для стовпчика мети.", "Enter a table header text for the title column.": "Введіть текст заголовка таблиці для стовпця заголовка.", "Enter a width for the popover in pixels.": "Введіть ширину спливаючого вікна в пікселях.", "Enter an optional footer text.": "Введіть додатковий текст для позиції Footer.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Введіть додатковий текст для атрибута посилання, який буде відображатися при наведенні покажчика миші.", "Enter labels for the countdown time.": "Введіть мітки для зворотного відліку часу.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Введіть посилання на свій соціальний профіль. Відповідна <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">піктограма торгової марки UIkit </a> відображатиметься автоматично, якщо вона є. Також підтримуються посилання на електронні адреси та номери телефонів, як-от (приховано) або тел: +491570156.", "Enter or pick a link, an image or a video file.": "Введіть або виберіть посилання, зображення або відеофайл.", "Enter the API key in Settings > External Services.": "Введіть ключ API в розділі Налаштування > Зовнішні сервіси.", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Введіть ключ API, щоб увімкнути оновлення в один клік для YOOtheme Pro та отримати доступ до бібліотеки макетів, а також бібліотеки зображень Unsplash. Ви можете створити ключ API для цього веб-сайту в <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">налаштуваннях облікового запису</a>.", "Enter the author name.": "Введіть ім'я автора.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Введіть повідомлення про згоду файлу cookie. Текст за замовчуванням служить ілюстрацією. Будь ласка, налаштуйте його відповідно до законів про куки вашої країни.", "Enter the horizontal position of the marker in percent.": "Введіть горизонтальне положення маркера у відсотках.", "Enter the image alt attribute.": "Заповніть атрибут Alt зображення.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Введіть рядок заміни, який може містити посилання. Якщо залишити порожнім, результати пошуку будуть видалені.", "Enter the text for the button.": "Введіть текст кнопки.", "Enter the text for the home link.": "Введіть текст домашнього посилання.", "Enter the text for the link.": "Введіть текст посилання.", "Enter the vertical position of the marker in percent.": "Введіть вертикальне положення маркера у відсотках.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Введіть ваш ID <a href=\"https://developers.google.com/analytics/\" target=\"_blank\"> Google Analytics </a> щоб включити відстеження. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\"> IP-анонімізації </a> може зменшити точність відстеження.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Введіть сюди ваш API key від <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\"> Google Maps </a>, щоб використовувати Карти Google замість OpenStreetMap. Це також дає додаткові можливості для створення колірного стилю вашої карти.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Введіть API-ключ <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\"> Сервісу Campaign Monitor </a> для використання з елементом Розсилка.", "Enter your <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> API key for using it with the Newsletter element.": "Введіть свій ключ API <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a>, щоб використовувати його з елементом Розсилка.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Введіть CSS код. Наступні селектори будуть автоматично додані для цього елемента: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цього елемента: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Введіть CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Додайте користувацький CSS. Наступні селектори автоматично додадуть префікс для цього елемента: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code> .el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Додайте користувацький CSS. Наступні селектори автоматично додадуть префікс для цього елемента: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code> .el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Додайте користувацький CSS. Наступні селектори автоматично додадуть префікс для цього елемента: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Додайте користувацький CSS. Наступні селектори автоматично додадуть префікс для цього елемента: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Додайте користувацький CSS. Для цього елемента автоматично буде додано префікс наступних селекторів: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Введіть свій CSS код. Наступні селектори будуть автоматично додані для цих елементів: <code>.el-section</code>", "Error": "Помилка", "Error 404": "Помилка 404", "Error creating folder.": "Помилка створення папки.", "Error deleting item.": "Помилка видалення елемента.", "Error renaming item.": "Помилка перейменування елемента.", "Error: %error%": "Помилка: %error%", "Events": "Події", "Excerpt": "Витяг", "Exclude cross sell products": "Виключіть продукти перехресного продажу", "Exclude upsell products": "Виключіть товари верхнього продажу", "Exclusion": "Виключення", "Expand": "Розгорнути", "Expand columns equally to always fill remaining space within the row, center them or align them to the left.": "Розширюйте колонки однаково, щоб завжди заповнювати вільний простір у рядку, відцентруйте їх або вирівняйте ліворуч.", "Expand Content": "Розгорнути вміст", "Expand height": "Розширити висоту", "Expand One Side": "Розгорніть одну сторону", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Розгорніть ширину однієї сторони вліво або вправо, в той час як інша сторона залишається в межах обмежень максимальної ширини.", "Expand width to table cell": "Розгорнути ширину до комірки таблиці", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Експортуйте всі налаштування теми та імпортуйте їх до іншої інсталяції. Сюди не входить вміст із бібліотек макета, стилів та елементів або конструктора шаблонів.", "Export Settings": "Експорт налаштувань", "Extend all content items to the same height.": "Зробити всі елементи контенту на одній висоті.", "Extension": "Розширення", "External": "Зовнішній", "External Services": "Зовнішні сервіси", "Extra Margin": "Додатковий відступ", "Fade": "Зникнення", "Favicon": "Favicon", "Favicon PNG": "Favicon PNG", "Favicon SVG": "Favicon SVG", "Fax": "Факс", "Featured": "Обраний", "Featured Articles": "Рекомендовані статті", "Featured Articles Order": "Сортування обраних статтей", "Featured Image": "Обране зображення", "Fields": "Поля", "Fifths": "П'яті", "Fifths 1-1-1-2": "П'яті 1-1-1-2", "Fifths 1-1-3": "П'яті 1-1-3", "Fifths 1-3-1": "П'яті 1-3-1", "Fifths 1-4": "П'яті 1-4", "Fifths 2-1-1-1": "П'яті 2-1-1-1", "Fifths 2-3": "П'яті 2-3", "Fifths 3-1-1": "П'яті 3-1-1", "Fifths 3-2": "П'яті 3-2", "Fifths 4-1": "П'яті 4-1", "File": "Файл", "Files": "Файли", "Filter": "Фільтр", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Фільтруйте статті за категоріями. За допомогою клавіші <kbd> shift </kbd> або <kbd> ctrl / cmd </kbd> виберіть кілька категорій. Встановіть логічний оператор, щоб він відповідав або не відповідав вибраним категоріям.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Фільтруйте статті за тегами. За допомогою клавіші <kbd> shift </kbd> або <kbd> ctrl / cmd </kbd> виберіть кілька тегів. Встановіть логічний оператор таким чином, щоб він відповідав принаймні одному тегу, жодному з тегів або всім тегам.", "Filter by Categories": "Фільтрувати за категоріями", "Filter by Tags": "Фільтрувати за тегами", "Filter by Terms": "Фільтрувати за умовами", "Finite": "Обмеження", "First name": "Ім'я", "First page": "Перша сторінка", "Fix the background with regard to the viewport.": "Зафіксувати фон у вікні браузера.", "Fixed": "Фіксовано", "Fixed-Inner": "Фіксовано всередині", "Fixed-Left": "Фіксовано ліворуч", "Fixed-Outer": "Фіксовано ззовні", "Fixed-Right": "Фіксовано праворуч", "Folder created.": "Тека створена.", "Folder Name": "Назва теки", "Font Family": "Сімейство шрифтів", "Footer": "Позиція Footer", "Force a light or dark color for text, buttons and controls on the image or video background.": "Встановіть світлий або темний колір тексту, кнопок та елементів керування на фоні зображення чи відео.", "Force left alignment": "Сила вирівнювання вліво", "Form": "Форма", "Format": "Формат", "Full Article Image": "Повне зображення статті", "Full Article Image Alt": "Повне зображення статті Alt", "Full Article Image Caption": "Заголовок повного зображення статті", "Full Width": "Повна ширина", "Full width button": "Кнопка на всю ширину", "g": "g", "Gallery": "Галерея", "Gamma": "Гама", "Gap": "Розрив", "General": "Загальні", "Google Analytics": "Google Analytics", "Google Fonts": "Шрифти Google", "Google Maps": "Карти Google", "Gradient": "Градієнт", "Grid": "Сітка", "Grid Breakpoint": "Контрольна точка сітки", "Grid Column Gap": "Розрив стовпців сітки", "Grid Row Gap": "Розрив сітки рядка", "Grid Width": "Ширина сітки", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Угруповання елементів в набори. Кількість елементів в наборі залежить від заданої ширини елемента, наприклад, <i>33%</i> означає, що кожен набір містить 3 елементи.", "Guest User": "Гість Користувач", "h": "h", "H1": "H1", "h1": "h1", "H2": "H2", "h2": "h2", "H3": "H3", "h3": "h3", "h4": "h4", "H4": "H4", "H5": "H5", "h5": "h5", "H6": "H6", "h6": "h6", "Halves": "Навпіл", "Hard-light": "Жорстке освітлення", "Header": "Позиція Header", "Heading": "Заголовок", "Heading H1": "Заголовок H1", "Heading H2": "Заголовок H2", "Heading H3": "Заголовок H3", "Heading H4": "Заголовок H4", "Heading H5": "Заголовок H5", "Heading H6": "Заголовок H6", "Headline": "Рядок заголовка", "Headline styles differ in font size and font family.": "Стилі заголовків можуть розрізняються за розміром, також мати власний колір, розмір і шрифт.", "Height": "Висота", "Help": "Допомога", "hex / keyword": "шестигранний/ключове слово", "Hidden": "Приховано", "Hide": "Приховати", "Hide and Adjust the Sidebar": "Сховати та відрегулювати бічну панель", "Hide marker": "Приховати маркер", "Hide Term List": "Сховати список термінів", "Hide title": "Сховати заголовок", "Highlight the hovered row": "Виділити рядок при наведенні курсору", "Hits": "Хіти", "Home": "Головна", "Home Text": "Домашній текст", "Horizontal": "Горизонтально", "Horizontal Center": "По горизонталі в центрі", "Horizontal Center Logo": "Горизонтальний логотип центру", "Horizontal Left": "По горизонталі зліва", "Horizontal Right": "По горизонталі праворуч", "Hover": "Наведення", "Hover Box Shadow": "Тінь об'єкта при наведенні", "Hover Image": "Зображення при наведенні", "Hover Style": "Стиль при наведенні", "Hover Transition": "Наведення курсору", "hr": "hr", "Html": "Html", "HTML Element": "HTML елемент", "Hue": "Колірна палітра", "Hyphen": "Дефіс", "Icon": "Іконка", "Icon Color": "Колір іконки", "Icon Width": "Ширина піктограми", "ID": "ID", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Якщо розділ або рядок мають максимальну ширину, а одна сторона розширюється вліво або вправо, підкладку за замовчуванням можна видалити з розгорнутої сторони.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Якщо до одного подання призначено кілька шаблонів, буде застосовано шаблон, який з'явиться першим. Змініть порядок за допомогою перетягування.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Якщо ви створюєте багатомовний сайт, не використовуйте тут певне меню. Замість цього використовуйте менеджер модулів для публікації меню в залежності від поточної мови.", "Ignore %taxonomy%": "Ігнорувати %taxonomy%", "Image": "Зображення", "Image Alignment": "Вирівнювання зображень", "Image Alt": "Атрибут ALT зображення", "Image Attachment": "Прикріплення зображення", "Image Box Shadow": "Тінь контейнера зображення", "Image Effect": "Ефект зображення", "Image Height": "Висота зображення", "Image Margin": "Грань зображення", "Image Orientation": "Орієнтація зображення", "Image Position": "Позиція зображення", "Image Size": "Розмір зображення", "Image Width": "Ширина зображення", "Image Width/Height": "Ширина / Висота зображення", "Image/Video": "Зображення / Відео", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Зображення не можна кешувати. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Змініть дозволи</a> у <code>cache</code>папку в <code>yootheme</code>тематичний каталог, щоб веб-сервер міг писати в нього.", "Import Settings": "Параметри імпорту", "Info": "Інформація", "Inherit": "Успадковано", "Inherit transparency from header": "Спадкова прозорість від заголовка", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Вставте SVG-зображення в розмітку сторінки, щоб їх можна було легко стилізувати за допомогою CSS.", "Inline SVG": "Вбудований SVG", "Inline title": "Вбудований заголовок", "Input": "Вхідні дані", "Insert at the bottom": "Вставте внизу", "Insert at the top": "Вставте вгорі", "Inset": "Всередину", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Натисніть піктограму олівця, щоб вибрати з колекції ікон зображення замість існуючого.", "Intro Image": "Вступне зображення", "Intro Image Alt": "Вступне зображення Alt", "Intro Image Caption": "Вступний підпис зображення", "Intro Text": "Вступний текст", "Inverse Logo (Optional)": "Інвертований логотип (За бажанням)", "Inverse style": "Зворотній стиль", "Inverse the text color on hover": "Інверсний колір тексту при наведенні мишкою", "Invert lightness": "Інвертувати яскравість", "IP Anonymization": "Маскування IP", "Issues and Improvements": "Питання та вдосконалення", "Item": "Елемент", "Item Count": "Кількість предметів", "Item deleted.": "Елемент видалено.", "Item renamed.": "Елемент перейменовано.", "Item uploaded.": "Елемент завантажено.", "Item Width": "Ширина елементу", "Item Width Mode": "Режим встановлення ширини елементу", "Items": "Елементи", "JPEG": "JPEG", "JPEG to AVIF": "JPEG у AVIF", "JPEG to WebP": "JPEG у WebP", "Ken Burns Effect": "Ефект Кена Бернса", "l": "l", "Label": "Етикетка", "Label Margin": "Відступ між мітками", "Labels": "Мітки", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Альбомний і портретний варіант зображення зосереджені в межах осередку сітки. Ширина та висота будуть перевертатися при відповідному повороті зображення.", "Large (Desktop)": "Великий настільний комп'ютер", "Large Screen": "Великий екран", "Large Screens": "Великі екрани", "Larger padding": "Великі внутрішні відступи", "Larger style": "Більший стиль", "Last 24 hours": "Останні 24 години", "Last 30 days": "Останні 30 днів", "Last 7 days": "Останні 7 днів", "Last Column Alignment": "Вирівнювання по останньому стовпчику", "Last Modified": "Остання зміна", "Last name": "Прізвище", "Last visit date": "Дата останнього відвідування", "Layout": "Макет", "Layout Media Files": "Макет медіа-файлів", "Lazy load video": "Відкладене завантаження відео", "Learning Layout Techniques": "Вивчення методів макетування", "Left": "Зліва", "Library": "Бібліотека", "Light": "Саітлий", "Light Text": "Саітлий текст", "Lightbox": "Лайтбокс", "Lightness": "Яскравість", "Limit by Categories": "Обмеження за категоріями", "Limit by Date Archive Type": "Обмеження за типом архіву дати", "Limit by Language": "Обмеження за мовою", "Limit by Page Number": "Обмеження за номером сторінки", "Limit by Products on sale": "Обмеження за продуктами у продажу", "Limit by Tags": "Обмеження за тегами", "Limit by Terms": "Обмеження за умовами", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Обмежте довжину вмісту на кількість символів. Всі елементи HTML будуть видалені.", "Line": "Лінія", "Link": "Посилання", "link": "посилання", "Link card": "Карта посилання", "Link image": "Посилання на зображення", "Link overlay": "Накладання накладок", "Link panel": "Панель-посилання", "Link Parallax": "Паралакс гіперпосилання", "Link Style": "Стиль посилання", "Link Target": "Мета посилання", "Link Text": "Текст посилання", "Link the image if a link exists.": "Зв’яжіть зображення, якщо посилання існує.", "Link the title if a link exists.": "Зв’яжіть заголовок, якщо посилання існує.", "Link the whole card if a link exists.": "Зв’яжіть всю карту, якщо посилання існує.", "Link the whole overlay if a link exists.": "Зв’яжіть всю накладку, якщо посилання існує.", "Link the whole panel if a link exists.": "Зв’яжіть всю панель, якщо існує посилання.", "Link title": "Назва посилання", "Link Title": "Заголовок посилання", "Link to redirect to after submit.": "Посилання для перенаправлення після відправки.", "List": "Список", "List All Tags": "Перелічити всі теги", "List Item": "Елемент списку", "List Style": "Стиль списку", "Load Bootstrap": "Завантажити Bootstrap", "Load Font Awesome": "Завантажити Font Awesome", "Load jQuery": "Завантажити jQuery", "Load product on sale only": "Завантажуйте товар лише у продажу", "Load products on sale only": "Завантажуйте продукти лише у продажу", "Loading": "Завантаження", "Loading Layouts": "Завантаження макетів", "Location": "Розташування", "Login Page": "Сторінка авторизації", "Logo Image": "Зображення логотипу", "Logo Text": "Текст логотипу", "Loop video": "Циклічне відтворення відео", "Mailchimp API Token": "API сервіса Mailchimp", "Main styles": "Основні стилі", "Make SVG stylable with CSS": "Зробіть SVG стильовим за допомогою CSS", "Managing Menus": "Керування меню", "Managing Modules": "Керування модулями", "Managing Sections, Rows and Elements": "Керування секціями, рядками та елементами", "Managing Templates": "Керування шаблонами", "Managing Widgets": "Керування віджетами", "Map": "Карта", "Mapping Fields": "Картографічні поля", "Margin": "Зовнішній відступ", "Margin Top": "Верхній відступ", "Marker": "Маркер", "Marker Color": "Колір маркера", "Marker Icon": "Значок маркера", "Masonry": "Динамічна", "Match (OR)": "Матч (АБО)", "Match content height": "Відрегулюйте висоту вмісту", "Match height": "Регулювання висоти", "Match Height": "Регулювання висоти", "Match the height of all modules which are styled as a card.": "Порівнюйє висоту всіх модулів, оформлених як картка.", "Match the height of all widgets which are styled as a card.": "Відповідайє висоті всіх віджетів, які викладені у вигляді картки.", "Max Height": "Максимальна висота", "Max Width": "Максимальна ширина", "Max Width (Alignment)": "Максимальна ширина (Вирівнювання)", "Max Width Breakpoint": "Максимальна ширина контрольної точки", "Maximum Zoom": "Максимальне збільшення", "Maximum zoom level of the map.": "Максимальний рівень масштабування карти.", "Media Folder": "Медіатека", "Medium (Tablet Landscape)": "Середній (Планшет альбомної орієнтації)", "Menu": "Меню", "Menu Divider": "Розділювач меню", "Menu Style": "Стиль меню", "Menus": "Меню", "Message": "Повідомлення", "Message shown to the user after submit.": "Повідомлення показано користувачу після відправки.", "Meta": "Мета", "Meta Alignment": "Мета-вирівнювання", "Meta Margin": "Мета-грань", "Meta Parallax": "Паралакс мета тексту", "Meta Style": "Стиль Опису", "Meta Width": "Ширина Опису", "Mimetype": "Мімітип", "Min Height": "Мінімальна висота", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Пам'ятайте, що шаблон із загальним макетом призначено для поточної сторінки. Відредагуйте шаблон, щоб оновити його макет.", "Minimum Stability": "Мінімальна стійкість", "Minimum Zoom": "Мінімальне збільшення", "Minimum zoom level of the map.": "Мінімальний рівень масштабування карти.", "Miscellaneous Information": "Інша інформація", "Mobile": "Позиція Mobile", "Mobile Logo (Optional)": "Логотип для мобільного пристрою (опціонально)", "Modal Width/Height": "Модальна ширина / висота", "Mode": "Режим", "Modified": "Модифікований", "Module": "Модуль", "Module Position": "Позиція модуля", "Modules": "Модулі", "Move the sidebar to the left of the content": "Відображення позиції Sidebar зліва від вмісту", "Multiple Items Source": "Джерело з декількох предметів", "Mute video": "Приглушити відео", "Muted": "Приглушено", "Name": "Ім'я", "Names": "Імена", "Nav": "Нав", "Navbar": "Панель навігації", "Navbar Style": "Стиль Панелі навігації", "Navigation": "Навігація", "Navigation Label": "Мітка навігаційна", "Navigation Thumbnail": "Навігація за допомогою превьюшек", "New Article": "Нова стаття", "New Layout": "Новий Макет", "New Menu Item": "Новий пункт меню", "New Module": "Новий модуль", "New Page": "Нова сторінка", "New Template": "Новий шаблон", "New Window": "Нове вікно", "Newsletter": "Розсилка", "Next-Gen Images": "Зображення наступного покоління", "Nicename": "Гарне ім`я", "Nickname": "Прізвисько", "No %item% found.": "Не %item% знайдено.", "No critical issues found.": "Критичних проблем не виявлено.", "No element found.": "Не знайдено жодного елемента.", "No element presets found.": "Не знайдено попередньо заданих елементів.", "No files found.": "Файли не знайдені.", "No font found. Press enter if you are adding a custom font.": "Шрифт не знайдено. Натисніть enter, якщо ви додаєте власний шрифт.", "No icons found.": "Піктограм не знайдено.", "No items yet.": "Поки що нічого немає.", "No layout found.": "Макет не знайден.", "No limit": "Немає межі", "No list selected.": "Не вибрано жодного списку.", "No Results": "Немає результатів", "No results.": "Немає результатів.", "No source mapping found.": "Не знайдено відображення джерела.", "No style found.": "Стиль не знайдено.", "None": "Жоден", "Not assigned": "Не призначено", "Offcanvas Mode": "Режим спадаючого меню", "Offset": "Зсув", "Ok": "Гаразд", "ol": "ol", "Only available for Google Maps.": "Доступно тільки для Карт Google.", "Only display modules that are published and visible on this page.": "Показувати лише модулі, які опубліковані та видимі на цій сторінці.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Лише окремі сторінки та публікації можуть мати окремі макети. Використовуйте шаблон, щоб застосувати загальний макет до цього типу сторінки.", "Open in a new window": "Відкрити в новому вікні", "Open Templates": "Відкрити шаблони", "Open the link in a new window": "Відкривати посилання в новому вікні", "Opening the Changelog": "Відкриття журналу змін", "Options": "Опції", "Order": "Порядок", "Order First": "Замовити спочатку", "Ordering Sections, Rows and Elements": "Впорядкування розділів, рядків та елементів", "Outside Breakpoint": "Поза межами Контрольної точки", "Outside Color": "Зовнішній колір", "Overlap the following section": "Перекриття наступного розділу", "Overlay": "Накладення", "Overlay Color": "Колір накладення", "Overlay Parallax": "Паралакс накладення", "Overlay Slider": "Накладений повзунок", "Overlay the site": "Накладення на сайт", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Перевизначити налаштування анімації розділу. Ця опція працює тільки, якщо включена анімація в розділі.", "Padding": "Внутрішній відступ", "Page": "Сторінка", "Page Category": "Сторінка категорії", "Page Title": "Заголовок сторінки", "Pages": "Сторінки", "Pagination": "Пагинація", "Panel": "Панель", "Panel Slider": "Повзунок панелі", "Panels": "Панелі", "Parallax": "Паралакс", "Parallax Breakpoint": "Контрольна точка для ефекту Паралакс", "Parallax Easing": "Зменшення Parallax", "Parent Category": "Батьківська категорія", "Parent Tag": "Тег батьків", "Path": "Шлях", "Path Pattern": "Шаблон шляху", "Pause autoplay on hover": "Призупинити автозапускання при наведенні курсору миші", "Phone Landscape": "Смартфон в альбомному положенні", "Phone Portrait": "Смартфон в портретному положенні", "Photos": "Фотографії", "Pick": "Виберіть", "Pick %type%": "Виберіть %type%", "Pick an alternative icon from the icon library.": "Виберіть альтернативну піктограму з бібліотеки піктограм.", "Pick an alternative SVG image from the media manager.": "Виберіть альтернативне зображення SVG у медіа-менеджері.", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "Виберіть статтю вручну або використовуйте параметри фільтра, щоб вказати, яку статтю слід динамічно завантажувати.", "Pick file": "Обрати файл", "Pick icon": "Виберіть значок", "Pick link": "Обрати посилання", "Pick media": "Обрати медіа файл", "Pick video": "Виберіть відео", "Placeholder Image": "Виділитель зображення", "Play inline on mobile devices": "Автоматичне програвання на мобільних приладах", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Будь ласка, установіть / увімкніть<a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.", "Please provide a valid email address.": "Введіть дійсну електронну адресу.", "PNG to AVIF": "PNG у AVIF", "PNG to WebP": "PNG у WebP", "Popover": "Спливаюче вікно", "Popup": "Вискочити", "Position": "Позиція", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Розташуйте елемент над або під іншими елементами. Якщо вони мають однаковий рівень стеку, положення залежить від порядку в макеті.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Розташуйте елемент у нормальному потоці вмісту або в нормальному потоці, але зі зміщенням відносно самого себе, або видаліть його з потоку та розташуйте відносно стовпця який міститься.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Місцезнаходження меню фільтра вгорі, зліва чи справа. Більшість стилів може бути застосований до лівого і правого розміщення елементів навігації.", "Position the meta text above or below the title.": "Помістіть текст вище або нижче заголовка.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Місцезнаходження елементів навігації у верхній, нижній, лівій або правій частині. Більшість стилів може бути застосований до лівого і правого розміщення елементів навігації.", "Post": "Пост", "Postal/ZIP Code": "Поштовий індекс", "Poster Frame": "Перший кадр", "Prefer excerpt over intro text": "Віддайте перевагу уривку над вступним текстом", "Prefer excerpt over regular text": "Віддавайте перевагу уривку перед звичайним текстом", "Preserve text color": "Зберегти колір тексту", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Збережіть колір тексту, наприклад, під час використання карток. Накладання секцій підтримується не в усіх стилях і може не мати візуального ефекту.", "Preview all UI components": "Перегляд всіх компонентів для користувача інтерфейсу", "Previous Article": "Попередня стаття", "Previous page": "Наступна стаття", "Price": "Ціна", "Primary navigation": "Основна навігація", "Products": "Продукти", "Provider": "Сервіс розсилок", "Published": "Опубліковано", "Quantity": "Кількість", "Quarters": "Розбивка на чверті", "Quarters 1-1-2": "Четверта-чверть-половина", "Quarters 1-2-1": "Чверть-половина-чверть", "Quarters 1-3": "Чверть-три чверті", "Quarters 2-1-1": "Колонки 2-1-1", "Quarters 3-1": "Колонки 3-1", "Quotation": "Цитата", "r": "r", "Random": "Випадкові", "Rating": "Рейтинг", "Ratio": "Співвідношення", "Recompile style": "Перекомпілювати стиль", "Register date": "Дата реєстрації", "Registered": "Зареєстровано", "Reject Button Style": "Стиль кнопки Відхилити", "Reject Button Text": "Текст кнопки Відхилити", "Reload Page": "Перезавантажити сторінку", "Remove bottom margin": "Видалити нижній зовнішній відступ", "Remove bottom padding": "Видалити нижній внутрішній відступ", "Remove horizontal padding": "Видаліть горизонтальну підкладку", "Remove left and right padding": "Видалити ліве та праве заповнення", "Remove left logo padding": "Прибрати відступ для логотипу зліва", "Remove left or right padding": "Видалити ліві чи праві відступи", "Remove Media Files": "Видалити медіа-файли", "Remove top margin": "Видалити верхній зовнішній відступ", "Remove top padding": "Видалити верхній внутрішній відступ", "Rename": "Перейменувати", "Rename %type%": "Перейменувати %type%", "Replace": "Замініть", "Replace layout": "Замініть макет", "Reset": "Скинути", "Reset to defaults": "Скидання в стан за замовчуванням", "Responsive": "Адаптивність", "Reverse order": "Зворотній порядок", "Right": "Правильно", "Roles": "Ролі", "Root": "Корінь", "Rotate the title 90 degrees clockwise or counterclockwise.": "Повернути заголовок на 90 градусів за годинниковою стрілкою або проти.", "Rotation": "Повернути", "Row": "Рядок", "Row Gap": "Рядок розриву", "Run Time": "Час виконання", "Saturation": "Насиченість", "Save": "Зберегти", "Save %type%": "Зберегти %type%", "Save in Library": "Зберегти в бібліотеці", "Save Layout": "Зберегти макет", "Save Style": "Зберегти стиль", "Save Template": "Зберегти шаблон", "Script": "Скрипт", "Search": "Пошук", "Search Component": "Компонент пошуку", "Search Item": "Елемент пошуку", "Search Style": "Стиль опції Пошук", "Search Word": "Шукати слово", "Section": "Розділ", "Section Animation": "Розділ Анімація", "Section Height": "Висота секції", "Section Image and Video": "Розділ Зображення та відео", "Section Padding": "Розділ прокладки", "Section Style": "Стиль розділу", "Section Title": "Заголовок розділу", "Section Width": "Ширина розділу", "Section/Row": "Розділ/Рядок", "Select": "Виберіть", "Select %item%": "Виберіть %item%", "Select %type%": "Виберіть %type%", "Select a card style.": "Виберіть стиль спливаючого вікна.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Виберіть джерело вмісту, щоб зробити його поля доступними для відображення. Обирайте між джерелами поточної сторінки або запитуйте власні джерела.", "Select a different position for this item.": "Виберіть іншу позицію для цього елемента.", "Select a grid layout": "Виберіть макет сітки", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Виберіть позицію модуля Joomla, яка відображатиме всі опубліковані модулі. Рекомендується використовувати позиції будівника -1 до -6, які темою не надано в іншому місці.", "Select a panel style.": "Виберіть стиль панелі.", "Select a predefined date format or enter a custom format.": "Виберіть попередньо визначений формат дати або введіть власний формат.", "Select a predefined meta text style, including color, size and font-family.": "Виберіть певний стиль тексту опису, що включає колір, розмір та шрифт.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Виберіть заздалегідь заданий шаблон пошуку або введіть спеціальний рядок або регулярний вираз для пошуку. Регулярний вираз повинен бути укладений між косою рисою. Наприклад: `my-string` або`/ ab + c /`.", "Select a predefined text style, including color, size and font-family.": "Виберіть певний стиль тексту контенту, що включає колір, розмір і шрифт.", "Select a style for the continue reading button.": "Виберіть стиль для кнопки продовження читання.", "Select a style for the overlay.": "Виберіть стиль накладення.", "Select a transition for the content when the overlay appears on hover.": "Виберіть перехід для вмісту, коли накладка з’явиться під наведенням курсору.", "Select a transition for the link when the overlay appears on hover.": "Виберіть перехід для посилання, коли накладка з’явиться під наведенням курсору.", "Select a transition for the meta text when the overlay appears on hover.": "Виберіть перехід для метатексту, коли накладка з’явиться під наведенням курсору.", "Select a transition for the overlay when it appears on hover.": "Виберіть перехід для накладання, коли воно з’являється під наведенням курсору.", "Select a transition for the title when the overlay appears on hover.": "Виберіть перехід для заголовка, коли накладка з’явиться під наведенням курсору.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Виберіть відео файл, або вставте посилання на <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Виберіть область віджетів WordPress, яка відображатиме всі опубліковані віджети. Рекомендується використовувати області builder-1 до -6, які не відображаються темою в іншому місці.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Виберіть альтернативний логотип з інвертованими квітами, наприклад білий, для кращої видимості на темному фоні. Він буде автоматично з'являтися в залежності від кольору фону.", "Select an alternative logo, which will be used on small devices.": "Вибрати альтернативний логотип, який буде використовуватися на мобільних пристроях.", "Select an animation that will be applied to the content items when filtering between them.": "Виберіть вид анімації, який буде застосований до вмісту елементів при перемиканні між ними.", "Select an animation that will be applied to the content items when toggling between them.": "Виберіть вид анімації, який буде застосований до вмісту елементів при перемиканні між ними.", "Select an image transition.": "Виберіть перехід зображення.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Виберіть перехід зображення. Якщо при наведенні курсору він встановлений, то перехід відбувається між двома зображеннями. Якщо <i>Нема</i> в установлений, то при наведенні курсору поступово зникає.", "Select an optional image that appears on hover.": "Виберіть друге зображення, яке з'являється при наведенні.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Виберіть додаткове зображення, яке відображається до відтворення відео. Якщо не вибрано, відображається перший кадр з відео.", "Select header layout": "Виберіть макет в позиції Header", "Select Image": "Виберіть зображення", "Select Manually": "Виберіть вручну", "Select one of the boxed card or tile styles or a blank panel.": "Виберіть один із стилів панелі або панель Blank.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Виберіть точку розриву, з якої стовпчик почне відображатися перед іншими стовпчиками. На менших розмірах екрану стовпці відображатимуться у природному порядку.", "Select the color of the list markers.": "Виберіть колір маркерів списку.", "Select the content position.": "Виберіть позицію для змісту.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Виберіть стиль навігаційного фільтру. Талі та дільникові стилі доступні лише для горизонтальних меню.", "Select the form size.": "Виберіть розмір форми.", "Select the form style.": "Виберіть стиль форми.", "Select the icon color.": "Виберіть колір іконок.", "Select the image border style.": "Виберіть стиль межі зображення.", "Select the image box decoration style.": "Виберіть стиль оформлення вікна зображення.", "Select the image box shadow size on hover.": "Виберіть розмір відкиданої тіні накладення.", "Select the image box shadow size.": "Виберіть розмір відкиданої тіні для зображення.", "Select the link style.": "Виберіть стиль посилання.", "Select the list style.": "Виберіть стиль списку.", "Select the list to subscribe to.": "Виберіть список для відправки.", "Select the marker of the list items.": "Виберіть маркер елементів списку.", "Select the nav style.": "Виберіть стиль навігації.", "Select the navbar style.": "Виберіть панель навігації.", "Select the navigation type.": "Виберіть тип навігації.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Виберіть стиль навігації. Кружки й стильні лінії доступні тільки для горизонтального підміню.", "Select the overlay or content position.": "Вибрати розташування накладення на контент.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Виберіть вирівнювання спливаючого вікна для свого маркера. Якщо вміст у вікні не вміщується, то воно буде автоматично виходити за межі вікна і буде з'являтися прокрутка.", "Select the position of the navigation.": "Виберіть позицію навігації.", "Select the position of the slidenav.": "Виберіть позицію меню.", "Select the position that will display the search.": "Виберіть позицію, на якій буде відображена іконка пошуку.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Виберіть позицію для відображення іконок соцмереж. Ви повинні ввести посилання на свій профіль у соціальних мережах, інакше ікони не будуть відображатися.", "Select the search style.": "Оберіть стиль для відображення пошуку.", "Select the slideshow box shadow size.": "Виберіть розмір тіні рамки презентації.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Виберіть стиль підсвічування коду. GitHub стиль найкраще на світлому та Monokai на темному тлі.", "Select the style for the overlay.": "Виберіть стиль накладення.", "Select the subnav style.": "Виберіть стиль підміню.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Оберіть колір SVG. Він застосовуватиметься лише до підтримуваних елементів, визначених у SVG.", "Select the table style.": "Виберіть стиль таблиці.", "Select the text color.": "Виберіть колір тексту.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Виберіть колір тексту. Якщо опція фону обрана, стилі, що не застосовують фонове зображення, будуть використовуватися замість основного кольору.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Виберіть колір тексту. Якщо опція фону обрана, стилі, що не застосовують фонове зображення, будуть використовуватися замість основного кольору.", "Select the title style and add an optional colon at the end of the title.": "Виберіть стиль заголовка та додати двокрапку в кінці заголовка.", "Select the transformation origin for the Ken Burns animation.": "Оберіть початок трансформації для анімації Кена Бернса.", "Select the transition between two slides.": "Виберіть перехід від одного слайда до іншого.", "Select the video box decoration style.": "Виберіть стиль оформлення вікна зображення.", "Select the video box shadow size.": "Виберіть розмір тіні рамки відео.", "Select whether a button or a clickable icon inside the email input is shown.": "Виберіть або кнопку, або клікабельно іконку всередині поля введення адреси електронної пошти.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Виберіть або повідомлення, яке буде виведено, або сайт, на який буде перенаправлення після натискання на кнопку Відправити.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Виберіть, чи використовуватиметься за замовчуванням пошук або розумний пошук модулем пошуку та елементом конструктора.", "Select whether the modules should be aligned side by side or stacked above each other.": "Виберіть, чи слід вирівнювати модулі поруч або укладати один над одним.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Виберіть, чи слід віджети вирівнювати один біля одного чи складати один над одним.", "Sentence": "Вирок", "Separator": "Роздільник", "Serve WebP images": "Використовувати WebP зображення", "Set a condition to display the element or its item depending on the content of a field.": "Встановіть умову для відображення елемента або його елемента залежно від вмісту поля.", "Set a different link text for this item.": "Виберіть інший текст гіперпосилання для цього елемента.", "Set a different text color for this item.": "Виберіть інший колір тексту для цього елемента.", "Set a fixed width.": "Встановіть фіксовану ширину.", "Set a higher stacking order.": "Встановіть більш високий порядок укладання.", "Set a large initial letter that drops below the first line of the first paragraph.": "Встановіть велику початкову букву, яка опускається нижче першого рядка першого абзацу.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Визначте ширину позиції Sidebar в процентах, контент адаптується відповідно. Мінімальну ширину позиції Sidebar можна налаштувати в розділі Стиль.", "Set an additional transparent overlay to soften the image or video.": "Встановити додатковий напівпрозорий верхній шар, щоб розмити зображення або відео.", "Set an additional transparent overlay to soften the image.": "Встановіть додаткову прозору накладку, щоб пом’якшити зображення.", "Set an optional content width which doesn't affect the image if there is just one column.": "Встановіть додаткову ширину вмісту, яка не впливає на зображення, якщо є лише один стовпець.", "Set an optional content width which doesn't affect the image.": "Встановіть додаткову ширину вмісту, яка не впливає на зображення.", "Set how the module should align when the container is larger than its max-width.": "Встановити вирівнювання модуля, коли ширина контейнера більше, ніж ширина модуля.", "Set light or dark color if the navigation is below the slideshow.": "Встановіть світлий або темний колір, якщо навігація знаходиться під слайд-шоу.", "Set light or dark color if the slidenav is outside.": "Встановіть світлий або темний колір, якщо slidenav знаходиться під слайд-шоу.", "Set light or dark color mode for text, buttons and controls.": "Встановіть світлий або темний колір для тексту, кнопок та елементів керування.", "Set light or dark color mode.": "Встановити світлий або темний колірний режим.", "Set percentage change in lightness (Between -100 and 100).": "Встановіть процентну зміну в lightness (від -100 до 100).", "Set percentage change in saturation (Between -100 and 100).": "Встановіть процентну зміну насиченості (від -100 до 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Встановити процентну зміну в кількості гамма-корекції (від 0,01 до 10,0, де 1.0 не застосовується корекція).", "Set the autoplay interval in seconds.": "Встанови інтеравал автозапуску в секундах.", "Set the blog width.": "Встановити ширину блогу.", "Set the breakpoint from which grid items will align side by side.": "Встановіть точку зупинку, з якої елементи сітки будуть вирівнюватися поруч.", "Set the breakpoint from which grid items will stack.": "Встановити контрольну точку при якій комірки сітки будуть розташовуватися один над одним.", "Set the breakpoint from which the sidebar and content will stack.": "Встановити контрольну точку, при якій позиція Sidebar та контент будуть розташовуватися один над одним.", "Set the button size.": "Вибрати розмір кнопки.", "Set the button style.": "Вибрати стиль кнопки.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Встановіть ширину стовпчика для кожної точки розриву. Змішайте ширину дробу або комбінуйте фіксовану ширину зі значенням <i> Розгорнути </i>. Якщо значення не вибране, застосовується ширина стовпця наступного меншого розміру екрана. Комбінація ширин завжди повинна приймати повну ширину.", "Set the device width from which the list columns should apply.": "Встановіть ширину пристрою, від якої повинні застосовуватися стовпці списку.", "Set the device width from which the text columns should apply.": "Встановіть ширину пристрою, з якої повинні застосовуватися текстові стовпці.", "Set the duration for the Ken Burns effect in seconds.": "Встановити тривалість ефекта Кена Бернса у секундах.", "Set the height in pixels.": "Встановити висоту в пікселях.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Встановіть горизонтальне положення нижнього краю елемента в пікселях. Також може бути введена інша одиниця на зразок % або vw.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Встановити горизонтальне положення лівого краю елемента в пікселях. Також може бути введена інша одиниця на зразок % або vw.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Встановіть горизонтальне положення правого краю елемента в пікселях. Також може бути введена інша одиниця на зразок% або vw.", "Set the hover style for a linked title.": "Встановіть стиль наведення курсору для пов’язаного заголовка.", "Set the hover transition for a linked image.": "Встановіть перехід курсору для пов'язаного зображення.", "Set the hue, e.g. <i>#ff0000</i>.": "Встановіть відтінок, наприклад <i>#ff0000</i>.", "Set the icon color.": "Встановити колір іконки.", "Set the icon width.": "Встановіть ширину значка.", "Set the initial background position, relative to the page layer.": "Встановіть початкове положення фону щодо шару сторінки.", "Set the initial background position, relative to the section layer.": "Встановити початкове положення фону, по відношенню до шару розділу.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Задати початковий дозвіл, при якому відображається карта. Значення 0 означає мінімальне та 18 максимальне збільшення.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Задайте ширину елемента для кожного режиму розміру екрана.<i>Inherit</i> відноситься до ширини елемента наступного меншого розміру екрана.", "Set the link style.": "Встановити стиль посилання.", "Set the margin between the countdown and the label text.": "Встановити інтервал між лічильником зворотного відліку та текстом мітки.", "Set the margin between the overlay and the slideshow container.": "Встановіть зовнішній відступ між накладенням і контейнером слайд-шоу.", "Set the maximum content width.": "Встановити максимальну ширину контенту.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Встановити максимальну ширину контенту. Примітка: Розділ може вже мати максимальну ширину, яку ви не можете перевершити.", "Set the maximum header width.": "Встановіть максимальну ширину заголовка.", "Set the maximum height.": "Встановити максимальну висоту.", "Set the maximum width.": "Встановіть максимальну ширину.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Встановіть кількість стовпців сітки для кожної точки розриву. <i>Успадкувано</i> стосується кількості стовпців на наступному меншому розмірі екрана. <i>Авто</i> розширює стовпці на ширину їхніх елементів, відповідно заповнюючи рядки.", "Set the number of list columns.": "Встановіть кількість стовпців списку.", "Set the number of text columns.": "Встановіть кількість текстових стовпців.", "Set the offset to specify which file is loaded.": "Встановіть зміщення, щоб вказати, який файл завантажується.", "Set the padding between sidebar and content.": "Вибрати внутрішній відступ між позицією Sidebar і контентом.", "Set the padding between the card's edge and its content.": "Встановіть відступ між краєм картки та її вмістом.", "Set the padding between the overlay and its content.": "Встановити відступ між накладенням і контентом, що закриваеться.", "Set the padding.": "Встановити внутрішній відступ.", "Set the post width. The image and content can't expand beyond this width.": "Встановити ширину публікації. Зображення та вміст не можуть виходити за рамки цієї ширини.", "Set the search input size.": "Встановіть розмір пошукового введення.", "Set the search input style.": "Оберіть стиль для пошуку.", "Set the separator between fields.": "Встановіть роздільник між полями.", "Set the separator between tags.": "Встановіть роздільник між тегами.", "Set the separator between terms.": "Встановіть роздільник між термінами.", "Set the size of the column gap between multiple buttons.": "Встановіть розмір зазору стовпця між кількома кнопками.", "Set the size of the column gap between the numbers.": "Встановіть розмір проміжку стовпців між числами.", "Set the size of the gap between between the filter navigation and the content.": "Встановіть розмір зазору між навігацією фільтра та вмістом.", "Set the size of the gap between the grid columns.": "Встановіть розмір зазору між колонками сітки.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Визначте кількість стовпців у параметрах <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Блог/Редагування макета</a> settings in Joomla.", "Set the size of the gap between the image and the content.": "Встановіть розмір проміжку між зображенням та вмістом.", "Set the size of the gap between the navigation and the content.": "Виберіть відстань між навігацією та елементами контенту.", "Set the size of the gap between the social icons.": "Встановіть розмір розриву між соціальними іконками.", "Set the size of the gap between the title and the content.": "Встановіть розмір проміжку між заголовком та змістом.", "Set the size of the gap if the grid items stack.": "Встановіть розмір зазору, якщо елементи сітки укладаються.", "Set the size of the row gap between multiple buttons.": "Встановіть розмір зазору рядків між кількома кнопками.", "Set the size of the row gap between the numbers.": "Встановіть розмір проміжку рядків між числами.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Встанови співвідношення. Рекомендується застосовувати таке саме співвідношення для фонового зображення. Просто візьми ширину та висоту зображення, як позначено у коді: <code>1600:900</code>.", "Set the starting point and limit the number of articles.": "Встановіть початкову точку та обмежте кількість статей.", "Set the starting point and limit the number of categories.": "Встановіть початкову точку та обмежте кількість категорій.", "Set the starting point and limit the number of files.": "Встановіть початкову точку та обмежте кількість файлів.", "Set the starting point and limit the number of items.": "Встановіть початкову точку та обмежте кількість елементів.", "Set the starting point and limit the number of tags.": "Встановіть початкову точку та обмежте кількість тегів.", "Set the starting point and limit the number of users.": "Встановіть початкову точку та обмежте кількість користувачів.", "Set the top margin if the image is aligned between the title and the content.": "Встановіть верхній край, якщо зображення вирівняно між заголовком та вмістом.", "Set the top margin.": "Встановіть верхній край.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Встановити верхню маржу. Зауважте, що поле маркування застосовуватиметься лише в тому випадку, якщо поле вмісту негайно слідує за іншим полем вмісту.", "Set the velocity in pixels per millisecond.": "Встановіть швидкість у пікселях на мілісекунду.", "Set the vertical container padding to position the overlay.": "Встановіть вертикальне заповнення контейнера в позиції накладення.", "Set the vertical margin.": "Встановити вертикальний зовнішній відступ.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Встановити вертикальний зовнішній відступ. Примітка: верхній зовнішній відступ першого елемента і нижній зовнішній відступ останнього елемента завжди видаляються. Це визначено в налаштуваннях сітки.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Встановити вертикальний зовнішній відступ. Примітка: зверху першої сітки і нижній відступ останньої сітки завжди видаляються. Це визначено в налаштуваннях розділу.", "Set the vertical padding.": "Установка вертикальних внутрішніх відступів.", "Set the video dimensions.": "Встановити розмір відео.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Встановіть ширину та висоту для вмісту лайтбоксу, т. Е. Зображення, відео або iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Встановити ширину та висоту в пікселях (наприклад, 600). Установка тільки одного значення зберігає початкові пропорції. Зображення буде змінено та обрізане автоматично.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Встановити ширину та висоту в пікселях. Установка тільки одного значення зберігає початкові пропорції. Зображення буде змінено та обрізане автоматично.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Встановіть ширину в пікселях. Якщо ширина не встановлена, карта візьме повну ширину і збереже висоту. Або використовуйте ширину лише для визначення точки розриву, з якої карта починає скорочуватися, зберігаючи співвідношення сторін.", "Sets": "Набори", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Установка тільки одного значення зберігає оригінальні пропорції. Зображення буде змінено та обрізане автоматично та, де це можливо, зображення з високою роздільною здатністю будуть сформовані автоматично.", "Setting the Blog Content": "Налаштування вмісту блогу", "Setting the Blog Image": "Встановлення образу блогу", "Setting the Blog Layout": "Налаштування макета блогу", "Setting the Blog Navigation": "Налаштування навігації по блогу", "Setting the Header Layout": "Налаштування макета заголовка", "Setting the Minimum Stability": "Мінімальна стійкість", "Setting the Module Appearance Options": "Встановлення параметрів зовнішнього вигляду модуля", "Setting the Module Default Options": "Встановлення параметрів за замовчуванням модуля", "Setting the Module Grid Options": "Встановлення параметрів сітки модуля", "Setting the Module List Options": "Встановлення параметрів списку модулів", "Setting the Module Menu Options": "Встановлення параметрів меню модуля", "Setting the Navbar": "Встановлення Navbar", "Setting the Page Layout": "Налаштування макета сторінки", "Setting the Post Content": "Налаштування вмісту публікації", "Setting the Post Image": "Встановлення зображення поста", "Setting the Post Layout": "Налаштування макета публікації", "Setting the Post Navigation": "Налаштування поштової навігації", "Setting the Sidebar Area": "Встановлення зони бічної панелі", "Setting the Sidebar Position": "Встановлення положення бічної панелі", "Setting the Source Order and Direction": "Встановлення порядку та напрямку джерела", "Setting the Template Loading Priority": "Встановлення пріоритету завантаження шаблону", "Setting the Template Status": "Встановлення статусу шаблону", "Setting the Top and Bottom Areas": "Встановлення верхньої та нижньої областей", "Setting the Top and Bottom Positions": "Встановлення верхніх і нижніх позицій", "Setting the Widget Appearance Options": "Налаштування параметрів зовнішнього вигляду віджетів", "Setting the Widget Default Options": "Встановлення параметрів віджету за замовчуванням", "Setting the Widget Grid Options": "Налаштування параметрів сітки віджетів", "Setting the Widget List Options": "Налаштування параметрів списку віджетів", "Setting the Widget Menu Options": "Налаштування параметрів меню віджетів", "Settings": "Налаштування", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Покажіть банер, щоб повідомити своїх відвідувачів про файли cookie, які використовуються на вашому веб-сайті. Оберіть між простим сповіщенням про те, що файли cookie завантажуються або вимагають обов'язкової згоди перед завантаженням файлів cookie.", "Show a divider between grid columns.": "Показати роздільник між колонками сітки.", "Show a divider between list columns.": "Показати роздільник між стовпцями списку.", "Show a divider between text columns.": "Показати роздільник між текстовими стовпцями.", "Show a separator between the numbers.": "Покажіть роздільник між числами.", "Show archive category title": "Показати назву категорії архіву", "Show author": "Показати автора", "Show below slideshow": "Показати під презентацією", "Show button": "Показати кнопку", "Show categories": "Показати категорії", "Show Category": "Показати категорію", "Show comment count": "Показати кількість коментарів", "Show comments count": "Показати кількість коментарів", "Show content": "Показати контент", "Show Content": "Показати Контент", "Show controls": "Показати елементи керування", "Show current page": "Показати поточну сторінку", "Show date": "Показати дату", "Show dividers": "Показати роздільники", "Show drop cap": "Показати крапку", "Show filter control for all items": "Показати фільтр для всіх елементів", "Show home link": "Показати домашнє посилання", "Show hover effect if linked.": "Показати ефект наведення, якщо є посилання.", "Show intro text": "Показати вступний текст", "Show Labels": "Показати мітки", "Show link": "Показати посилання", "Show map controls": "Показати елементи керування картою", "Show name fields": "Показувати поля імені", "Show navigation": "Показати навігацію", "Show on hover only": "Показувати тільки коли наведений курсор миші", "Show or hide content fields without the need to delete the content itself.": "Показати або приховати вміст полів таблиці без видалення вмісту.", "Show or hide fields in the meta text.": "Показувати або приховувати поля в метатексті.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Показати або приховати елемент на цьому пристрої шириною і більше. Якщо всі елементи приховані, стовпці, рядки та розділи будуть приховані відповідно.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Показати або приховати домашнє посилання як перший елемент, а також поточну сторінку як останній елемент у навігаційній панелі.", "Show or hide the intro text.": "Показати або приховати вступний текст.", "Show or hide the reviews link.": "Показати або приховати посилання на відгуки.", "Show popup on load": "Показати спливаюче вікно при завантаженні сторінки", "Show reviews link": "Показати посилання на відгуки", "Show Separators": "Показати роздільники", "Show space between links": "Показати пробіл між посиланнями", "Show Start/End links": "Показати початкові/кінцеві посилання", "Show system fields for single posts. This option does not apply to the blog.": "Показувати системні поля для окремих дописів. Ця опція не застосовується до блогу.", "Show system fields for the blog. This option does not apply to single posts.": "Показувати поля системи для блогу. Цей параметр не застосовується до окремих повідомлень.", "Show tags": "Показати теги", "Show Tags": "Показати теги", "Show the content": "Показати контент", "Show the excerpt in the blog overview instead of the post text.": "Покажіть уривок у огляді блогу замість тексту публікації.", "Show the image": "Показати зображення", "Show the link": "Показати посилання", "Show the menu text next to the icon": "Показати текст Menu поруч зі значком", "Show the meta text": "Показати текст опису", "Show the navigation label instead of title": "Показати мітку навігації замість назви", "Show the navigation thumbnail instead of the image": "Показати прев'юшки навігації замість зображення", "Show the title": "Показати заголовок", "Show title": "Показати заголовок", "Show Title": "Показати назву", "Sidebar": "Позиція Sidebar", "Single Article": "Єдина стаття", "Single Contact": "Єдиний контакт", "Site": "Сайт", "Site Title": "Заголовок сайту", "Size": "Розмір", "Slide all visible items at once": "Показати всі слайди одразу", "Slider": "Слайдер", "Slideshow": "Презентація", "Small (Phone Landscape)": "Невеликий (Смартфон альбомної орієнтації)", "Smart Search": "Розумний пошук", "Smart Search Item": "Елемент розумного пошуку", "Social": "Соціальні мережі", "Social Icons": "Соціальні іконки", "Social Icons Gap": "Розрив соціальних іконок", "Social Icons Size": "Розмір соціальних іконок", "Split the dropdown into columns.": "Розділити спливаюче меню на колонки.", "Spread": "Розширити", "Stack columns on small devices or enable overflow scroll for the container.": "Колонки одна нижче іншої або включити прокрутку при збереженні стовпців на своїх місцях на мобільних девайсах.", "Stacked Center A": "Розташування по центру A", "Stacked Center B": "Розташування по центру В", "Stacked Center C": "Складений центр C", "Start": "Старт", "State or County": "Штат або округ", "Status": "Статус", "Stretch the panel to match the height of the grid cell.": "Розтягнути панель відповідно до висоти комірки сітки.", "Style": "Стиль", "Subnav": "Субнавігація", "Subtitle": "Підзаголовок", "Support": "Підтримка", "SVG Color": "SVG Колір", "Switcher": "Перемикач", "Syntax Highlighting": "Підсвічування синтаксису", "System Check": "Перевірка системи", "Table": "Таблиця", "Table Head": "Шапка таблиці", "Tablet Landscape": "Планшет (альбомної орієнтації)", "Tag": "Тег", "Tag Item": "Елемент тегу", "Tagged Items": "Позначені елементи", "Tags": "Теги", "Tags are only loaded from the selected parent tag.": "Теги завантажуються лише з вибраного батьківського тегу.", "Target": "Ціль", "Teaser": "Тизер", "Telephone": "Телефон", "Term Order": "Строкове замовлення", "Text": "Текст", "Text Alignment": "Вирівнювання тексту", "Text Alignment Breakpoint": "Девайс, з якого починається вирівнювання тексту", "Text Alignment Fallback": "Альтернативне вирівнювання тексту", "Text Color": "Колір тексту", "Text Style": "Стиль тексту", "The Area Element": "Елемент площі", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "Штрих у верхній частині відсуває вміст вниз, тоді як смужка внизу закріплена над вмістом.", "The builder is not available on this page. It can only be used on pages, posts and categories.": "Конструктор недоступний на цій сторінці. Його можна використовувати лише на сторінках, публікаціях та категоріях.", "The changes you made will be lost if you navigate away from this page.": "Внесені зміни будуть втрачені, якщо ви підете з цієї сторінки.", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "Порядок за замовчуванням слідуватиме порядку, встановленому в дужках, або резервному порядку до порядку файлів за замовчуванням, встановленому системою.", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Висота може адаптуватися до висоти області перегляду.<br><br>Примітка: Переконайтесь, що в налаштуваннях розділу не встановлено висоту під час використання одного з параметрів області перегляду.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Висота автоматично адаптується залежно від її вмісту. Крім того, висота може адаптуватися до висоти вікна перегляду. <br><br> Примітка: переконайтеся, що під час використання одного з параметрів області перегляду параметри розділу не встановлюються.", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "Ефект динамічної сітки створює розташування елементів позбавлене проміжків навіть якщо елементи мають різну висоту. ", "The Module Element": "Елемент модуля", "The module maximum width.": "Максимальна ширина модуля.", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "Сторінку оновлена%modifiedBy%. Відмовитись від змін та перезавантажити?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "Сторінку, яку ви зараз редагуєте, оновлено %modified_by%. Збереження змін змінить попередні зміни. Хочете все-таки зберегти або відхилити зміни та перезавантажити сторінку?", "The Position Element": "Елемент позиції", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "Плагін RSFirewall псує вміст розробника. Вимкніть функцію <em>Перетворення електронних адрес із звичайного тексту у зображення</em> у <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall конфігурація</a>.", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "Плагін SEBLOD приводить до недоступності програми для побудови. Вимкніть функцію <em>Сховати значок редагування</em>у<a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Слайд-шоу завжди займає повну ширину, і висота буде автоматично адаптуватися на основі певного співвідношення. Крім того, висота може адаптуватися до висоти екрану девайса. <br><br> Примітка: переконайтеся, що висота не задана в налаштуваннях розділу при використанні одного з параметрів розміру екрану девайса.", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Шаблон призначається лише статтям із вибраними тегами. За допомогою клавіші <kbd> shift </kbd> або <kbd> ctrl / cmd </kbd> виберіть кілька тегів.", "The template is only assigned to the selected pages.": "Шаблон призначається лише вибраним сторінкам.", "The Widget Element": "Елемент віджета", "The width of the grid column that contains the module.": "Ширина колонки сітки, що містить модуль.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "Тема YOOtheme Pro була перейменована на порушення функціональних можливостей. Перейменуйте папку теми назад у <code>yootheme</code>.", "Theme Settings": "Налаштування теми", "Thirds": "3 Колонки", "Thirds 1-2": "Колонки 1-2", "Thirds 2-1": "Колонки 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Ця папка зберігає зображення, які ви завантажуєте, коли використовуєте макети з бібліотеки YOOtheme Pro. Вона розташована всередині папки зображень Joomla.", "This is only used, if the thumbnail navigation is set.": "Це використовується тільки тоді, коли встановлена навігація прев'юшки.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Цей макет містить мультимедійні дані, які необхідно завантажити в медіа бібліотеку вашої вебсторінки.|||| Цей макет містить %smart_count% медіафайлів, які необхідно завантажити в медіа бібліотеку вашої вебсторінки.", "This option doesn't apply unless a URL has been added to the item.": "Цей параметр не застосовується, якщо URL-адресу був доданий до елементу.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Цей параметр не застосовується, якщо URL-адресу був доданий до елементу. Буде лінкуватися тільки вміст елемента.", "This option is only used if the thumbnail navigation is set.": "Цей параметр застосовується тільки якщо ввімкнена навігація Ескізи.", "Thumbnail": "Ескіз", "Thumbnail Inline SVG": "Ескіз в лінію SVG", "Thumbnail SVG Color": "Ескіз SVG Колір", "Thumbnail Width/Height": "Ширина / Висота ескізів", "Thumbnail Wrap": "Охоплення Мініатюри", "Thumbnails": "Мініатюри", "Thumbnav Inline SVG": "Thumbnav В лінію SVG", "Thumbnav SVG Color": "Thumbnav SVG Колір", "Thumbnav Wrap": "Thumbnav Обернути", "Time Archive": "Архів часу", "Title": "Заголовок", "title": "Заголовок", "Title Decoration": "Оформлення заголовка", "Title Margin": "Поля Заголовку", "Title Parallax": "Паралакс загаловка", "Title Style": "Стиль заголовка", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Стилі для заголовка відрізняються розміром шрифту, але також можуть бути представлені з наперед визначеним кольором, розміром і шрифтом.", "Title Width": "Ширина заголовка", "To Top": "Догори", "Toolbar": "Toolbar", "Top": "Top", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Верхній, лівий або правий краю вирівняного зображення можуть прикріплятися до краю картки. Якщо зображення вирівнюється вліво або вправо, воно буде також поширюватися і на всю поверхню.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Верхній, лівий або правий краю вирівняного зображення можуть прикріплятися до краю картки. Якщо зображення вирівнюється вліво або вправо, воно буде також поширюватися і на всю поверхню.", "Total Views": "Загальна кількість переглядів", "Touch Icon": "Іконка для мобільних пристроїв Apple", "Transition": "Анімація накладення", "Transparent Header": "Прозорість позиції Header", "Type": "Тип", "ul": "ul", "Understanding Status Icons": "Розуміння піктограм стану", "Understanding the Layout Structure": "Розуміння структури макета", "Updating YOOtheme Pro": "Оновлення YOOtheme Pro", "Upload": "Завантажити", "Upload a background image.": "Завантажити фонове зображення.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Завантажуйте будь-яку фонове зображення для сторінки. Зображення буде записано в час прокрутки.", "Upload Layout": "Макет завантаження", "Upload Preset": "Завантажити попередньо встановлену", "Upload Style": "Стиль завантаження", "Upsell Products": "Продукти Upsell", "Url": "URL-адреса", "Use a numeric pagination or previous/next links to move between blog pages.": "Використовуйте цифрові сторінки або попередні/наступні посилання, щоб переміщатись між сторінками блогу.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Використовуйте необов'язкову мінімальну висоту, щоб зображення не зменшувалося, ніж вміст на невеликих пристроях.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Використовуйте необов'язкову мінімальну висоту, щоб на невеликих пристроях слайдер не став меншим за вміст.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Використовуйте додаткову мінімальну висоту, щоб слайд-шоу не стало менше, ніж його вміст на невеликих пристроях.", "Use as breakpoint only": "Використовувати лише як точку розриву", "Use double opt-in.": "Використовуйте double opt-in.", "Use excerpt": "Використовуйте уривок", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Використовуйте колір фону в поєднанні з режимами накладання, прозорим зображенням або для заповнення області, якщо зображення не охоплює всю сторінку.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Використовуйте колір фону в поєднанні з режимами накладання, прозорим зображенням або для заповнення області, якщо зображення не покриває весь розділ.", "Use the background color in combination with blend modes.": "Використайте колір фону в поєднанні з режимами накладання.", "User": "Користувач", "User Group": "Група користувачів", "Username": "Ім'я користувача", "Users": "Користувачі", "Using Advanced Custom Fields": "Використання розширених спеціальних полів", "Using Content Fields": "Використання полів вмісту", "Using Content Sources": "Використання джерел вмісту", "Using Custom Fields": "Використання спеціальних полів", "Using Custom Post Type UI": "Використання користувацького інтерфейсу типу публікації", "Using Custom Post Types": "Використання спеціальних типів публікацій", "Using Custom Sources": "Використання користувацьких джерел", "Using Dynamic Conditions": "Використання динамічних умов", "Using Elements": "Використання елементів", "Using Images": "Використання зображень", "Using Links": "Використання посилань", "Using Menu Locations": "Використання меню \"Місцеположення\"", "Using Menu Positions": "Використання позицій меню", "Using Module Positions": "Використання позицій модуля", "Using My Layouts": "Використання моїх макетів", "Using My Presets": "Використання моїх пресетів", "Using Page Sources": "Використання джерел сторінки", "Using Powerful Posts Per Page": "Використання потужних повідомлень на сторінку", "Using Pro Layouts": "Використання Pro Layouts", "Using Related Sources": "Використання суміжних джерел", "Using the Before and After Field Options": "Використання параметрів Поле до і після", "Using the Builder Module": "Використання модуля Builder", "Using the Builder Widget": "Використання віджета Builder", "Using the Categories and Tags Field Options": "Використання параметрів поля \"Категорії та теги\"", "Using the Content Field Options": "Використання параметрів поля вмісту", "Using the Content Length Field Option": "Використання опції поля довжини вмісту", "Using the Contextual Help": "Використання контекстної довідки", "Using the Date Format Field Option": "Використання параметра поля формату дати", "Using the Device Preview Buttons": "Використання кнопок попереднього перегляду пристрою", "Using the Dropdown Menu": "Використання спадного меню", "Using the Footer Builder": "Використання Footer Builder", "Using the Media Manager": "Використання медіа-менеджера", "Using the Menu Module": "Використання модуля меню", "Using the Menu Widget": "Використання віджета меню", "Using the Meta Field Options": "Використання параметрів метаполя", "Using the Page Builder": "Використання конструктора сторінок", "Using the Search and Replace Field Options": "Використання параметрів поля пошуку та заміни", "Using the Sidebar": "Використання бічної панелі", "Using the Tags Field Options": "Використання параметрів поля \"Теги\"", "Using the Teaser Field Options": "Використання параметрів поля тизера", "Using the Toolbar": "Використання Панелі інструментів", "Using the Unsplash Library": "Використання Бібліотеки скажіть", "Using Toolset": "Використання набору інструментів", "Using Widget Areas": "Використання областей віджетів", "Using WordPress Category Order and Taxonomy Terms Order": "Використовуючи порядок категорій WordPress та порядок термінів таксономії", "Using WordPress Popular Posts": "Використання популярних дописів WordPress", "Using WordPress Post Types Order": "Використання WordPress Post Types Order", "Value": "Значення", "Values": "Значення", "Velocity": "Швидкість", "Version %version%": "Версія %version%", "Vertical": "Вертикально", "Vertical Alignment": "Вертикальне вирівнювання", "Vertical navigation": "Вертикальна навігація", "Vertically align the elements in the column.": "По вертикалі вирівняйте елементи в стовпці.", "Vertically center grid items.": "Центрировать по вертикалі комірки сітки.", "Vertically center table cells.": "Вертикально вирівняти комірки таблиці по центру.", "Vertically center the image.": "Вертикально центруйте зображення.", "Vertically center the navigation and content.": "Вертикально розташуйте навігацію та вміст по центру.", "Video": "Відео", "Videos": "Відео", "View Photos": "Перегляд фотографій", "Viewport": "Видове вікно", "Viewport Height": "Висота видового вікна", "Visibility": "Видимість", "Visible on this page": "Видимі на цій сторінці", "Visual": "Видимий", "Votes": "Голоси", "Website": "Сайт", "Website Url": "Адреса сайту", "What's New": "Що нового", "When using cover mode, you need to set the text color manually.": "При використанні режиму COVER, ви повинні вручну встановити колір тексту.", "Whole": "Повністю", "Widget": "Віджет", "Widget Area": "Площа віджета", "Widgets": "Віджети", "Width": "Ширина", "Width 100%": "Ширина 100%", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Ширина та висота будуть перевернуті відповідно знаходженню зображення в портретному або альбомному форматі.", "Width/Height": "Ширина/висота", "Woo Pages": "Сторінки Woo", "WooCommerce": "WooCommerce", "Working with Multiple Authors": "Робота з кількома авторами", "X": "Х", "X-Large": "X-Large", "X-Large (Large Screens)": "X-Large (великий екран)", "X-Small": "X-Small", "Y": "Y", "Year Archive": "Річний архів", "YOOtheme API Key": "API ключ YOOtheme", "YOOtheme Help": "Допомога YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro повністю працює та готовий до зльоту.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro не працює. Усі критичні проблеми потрібно виправити.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro працює, але є проблеми, які потрібно виправити, щоб розблокувати функції та підвищити продуктивність.", "Z Index": "Z Index", "Zoom": "Масштаб" }theme/languages/nl_NL.json000064400000221765151666572140011543 0ustar00{ "- Select -": "- Selecteer -", "- Select Module -": "- Selecteer module -", "- Select Position -": "- Selecteer positie -", "- Select Widget -": "- Selecteer widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" bestaat al in de bibliotheek, het zal overschreven worden als u opslaat.", "%label% Position": "%label% Positie", "%name% already exists. Do you really want to rename?": "%name% bestaat al. Wil je echt hernoemen?", "%post_type% Archive": "%post_type% Archief", "%s is already a list member.": "%s is al lid van de lijst.", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s is definitief verwijderd en kan niet opnieuw worden geïmporteerd. De contactpersoon moet zich opnieuw abonneren om weer op de lijst te komen.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Verzameling |||| %smart_count% Verzamelingen", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Element |||| %smart_count% Elementen", "%smart_count% File |||| %smart_count% Files": "%smart_count% Bestand |||| %smart_count% Bestanden", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Bestand geselecteerd |||| %smart_count% Bestanden geselecteerd", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Lay-out |||| %smart_count% Lay-outs", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% downloaden mediabestand mislukt: |||| %smart_count% mediabestand downloaden mislukt:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Foto |||| %smart_count% Foto's", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Voorinstelling |||| %smart_count% Voorinstellingen", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Stijl |||| %smart_count% Stijlen", "%smart_count% User |||| %smart_count% Users": "%smart_count% Gebruiker |||| %smart_count% Gebruikers", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% wordt alleen geladen vanuit de geselecteerde bovenliggende %taxonomy%.", "%type% Presets": "%type% Voorinstellingen", "1 Column": "1 kolom", "1 Column Content Width": "Inhoudsbreedte van 1 kolom", "2 Columns": "2 Kolommen", "3 Columns": "3 Kolommen", "4 Columns": "4 Kolommen", "5 Columns": "5 Kolommen", "6 Columns": "6 Kolommen", "a": "een", "About": "Over", "Above Content": "Boven inhoud", "Above Title": "Boven Titel", "Absolute": "Absoluut", "Accessed": "Benaderd", "Accordion": "Accordeon", "Active": "Actief", "Active item": "Actief item", "Add": "Toevoegen", "Add a colon": "Een kolom toevoegen", "Add a leader": "Een leider toevoegen", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Voeg een parallaxeffect toe of zet de achtergrond vast ten opzichte van de viewport tijdens het scrollen.", "Add a parallax effect.": "Voeg een parallaxeffect toe.", "Add animation stop": "Animatiestop toevoegen", "Add bottom margin": "Voeg marge toe onderaan", "Add clipping offset": "Clipping-offset toevoegen", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Voeg aangepaste CSS of Less toe aan uw site. Alle Less themavariabelen en mixen zijn beschikbaar. De tag <code><style></code> is niet nodig.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Voeg aangepast JavaScript toe aan uw site. De tag <code><script></code> is niet nodig.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Voeg aangepast JavaScript toe dat cookies instelt. Het zal worden geladen nadat toestemming is gegeven. De tag <code><script></code> is niet nodig.", "Add Element": "Element toevoegen", "Add extra margin to the button.": "Voeg extra marge aan de knop toe.", "Add Folder": "Map toevoegen", "Add Item": "Item toevoegen", "Add margin between": "Marge tussen toevoegen", "Add Media": "Voeg media toe", "Add Menu Item": "Menu-item toevoegen", "Add Module": "Module toevoegen", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Voeg meerdere stops toe om begin-, tussen- en eindkleuren langs de animatiereeks te definiëren. Geef optioneel een percentage op om de stops langs de animatiereeks te plaatsen.", "Add Row": "Rij toevoegen", "Add Section": "Sectie toevoegen", "Add text after the content field.": "Voeg tekst toe na het inhoudsveld.", "Add text before the content field.": "Voeg tekst toe vóór het inhoudsveld.", "Add to Cart Text": "Add to Cart Tekst", "Add top margin": "Voeg marge bovenaan toe", "Adding the Logo": "Het logo toevoegen", "Adding the Search": "Zoeken toevoegen", "Adding the Social Icons": "De sociale icons toevoegen", "Additional Information": "Extra informatie", "Address": "Adres", "Advanced": "Geavanceerd", "Advanced WooCommerce Integration": "Advanced WooCommerce Integratie", "After": "Na", "After 1 Item": "Na 1 Item", "After 10 Items": "Na 10 Items", "After 2 Items": "Na 2 Items", "After 3 Items": "Na 3 Items", "After 4 Items": "Na 4 Items", "After 5 Items": "Na 5 Items", "After 6 Items": "Na 6 Items", "After 7 Items": "Na 7 Items", "After 8 Items": "Na 8 Items", "After 9 Items": "Na 9 Items", "After Display Content": "Na weergave inhoud", "After Display Title": "Na weergave titel", "After Submit": "Na het verzenden", "Alert": "Melding", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Lijn vervolgkeuzelijsten uit met hun menu-item of de navigatiebalk. Toon ze optioneel in een sectie over de volledige breedte genaamd dropbar, geef een pictogram weer om vervolgkeuzemenu's aan te geven en laat tekstitems openen door erop te klikken en niet te zweven.", "Align image without padding": "Afbeelding uitlijnen zonder padding", "Align the filter controls.": "Lijn de filtercontrols uit.", "Align the image to the left or right.": "Lijn de afbeelding links of rechts uit.", "Align the image to the top or place it between the title and the content.": "Lijn de afbeelding uit naar boven of plaats deze tussen de titel en de inhoud.", "Align the image to the top, left, right or place it between the title and the content.": "Lijn de afbeelding bovenaan, links of rechts uit of plaats de afbeelding tussen de titel en de inhoud in.", "Align the meta text.": "Meta tekst uitlijnen.", "Align the navigation items.": "Navigatie items uitlijnen.", "Align the section content vertically, if the section height is larger than the content itself.": "Lijn de content van de sectie verticaal uit als de hoogte van de sectie groter is dan de content zelf.", "Align the title and meta text as well as the continue reading button.": "Lijn de titel, metatekst en 'Lees verder'-knop uit.", "Align the title and meta text.": "Lijn de titel en metatekst uit.", "Align the title to the top or left in regards to the content.": "Lijn de titel naar boven of naar links uit met betrekking tot de inhoud.", "Align to navbar": "Uitlijnen op navigatiebalk", "Alignment": "Uitlijning", "Alignment Breakpoint": "Uitlijning breakpoint", "Alignment Fallback": "Uitlijning fallback", "All backgrounds": "Alle achtergronden", "All colors": "Alle kleuren", "All except first page": "Alles behalve de eerste pagina", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Alle afbeeldingen zijn gelicenseerd onder <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, wat inhoudt dat je de afbeeldingen gratis mag kopiëren, aanpassen, verspreiden en gebruiken, ook voor commerciële doeleinden, zonder hiervoor toestemming te vragen.", "All Items": "Alle items", "All layouts": "Alle lay-outs", "All pages": "Alle pagina's", "All presets": "Alle voorinstellingen", "All styles": "Alle stijlen", "All topics": "Alle onderwerpen", "All types": "Alle typen", "All websites": "Alle websites", "All-time": "Altijd", "Allow mixed image orientations": "Gemengde beeldoriëntaties toestaan", "Allow multiple open items": "Meerdere items open toestaan", "Alphabetical": "Alfabetisch", "Alphanumeric Ordering": "Alfanumerieke volgorde", "Alternate": "Afwisselend", "Always": "Altijd", "Animate background only": "Alleen de achtergrond animeren", "Animate items": "Animeer items", "Animation": "Animatie", "Any Joomla module can be displayed in your custom layout.": "Elke Joomla-module kan worden weergegeven in uw eigen lay-out.", "Any WordPress widget can be displayed in your custom layout.": "Elke WordPress-widget kan worden weergegeven in uw eigen lay-out.", "API Key": "API-sleutel", "Apply a margin between the navigation and the slideshow container.": "Voeg een marge toe tussen de navigatie en de slideshow-container.", "Apply a margin between the overlay and the image container.": "Voeg een marge toe tussen de overlay en de afbeelding-container.", "Apply a margin between the slidenav and the slider container.": "Voeg een marge toe tussen de slidenav en de slider-container.", "Apply a margin between the slidenav and the slideshow container.": "Voeg een marge toe tussen de slidenav en de slideshow-container.", "Article": "Artikel", "Articles": "Artikelen", "Attach the image to the drop's edge.": "Voeg de afbeelding toe aan de rand van de druppel.", "Attention! Page has been updated.": "Let op! De pagina is bijgewerkt.", "Author": "Auteur", "Author Link": "Auteur Link", "Auto-calculated": "Automatisch berekenen", "Back": "Terug", "Background Color": "Achtergrondkleur", "Behavior": "Gedrag", "Blend Mode": "Blendmodus", "Block Alignment": "Block uitlijning", "Blur": "Vervagen", "Border": "Rand", "Bottom": "Bodem", "Box Decoration": "Box-decoratie", "Box Shadow": "Boxschaduw", "Breadcrumbs": "Broodkruimels", "Breakpoint": "Breekpunt", "Builder": "Bouwer", "Button": "Knop", "Button Margin": "Knopmarge", "Button Size": "Knop grootte", "Buttons": "Knoppen", "Campaign Monitor API Token": "API-sleutel Campaign Monitor", "Cancel": "Annuleren", "Center": "Midden", "Center horizontally": "Horizontaal centreren", "Center the active slide": "Centreer de actieve dia", "Center the content": "Content centreren", "Center the module": "Module midden uitlijnen", "Center the title and meta text": "De titel en metatekst centreren", "Center the title, meta text and button": "De titel, metatekst en knop centreren", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Midden, links en rechts uitlijnen kan afhangen van een breekpunt en vereist een fallback.", "Choose a divider style.": "Kies stijl van verdeler.", "Choose a map type.": "Kies een kaarttype.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Kies tussen een parallax afhankelijk van de scrollpositie of een animatie, die wordt toegepast zodra de dia actief is.", "Choose Font": "Lettertype kiezen", "Choose the icon position.": "Kies icoon-positie", "Class": "Klasse", "Clear Cache": "Cache wissen", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Wis afbeeldingen en assets uit de cache. Verkleinde afbeeldingen worden opgeslagen in de cache-map van het thema. Na het uploaden van een afbeelding met dezelfde naam is het nodig om de cache te wissen.", "Close": "Sluiten", "Collections": "Verzamelingen", "Color": "Kleur", "Column": "Kolom", "Columns": "Kolommen", "Columns Breakpoint": "Kolom breekpunt", "Components": "Componenten", "Container Width": "Container Breedte", "Content": "Inhoud", "content": "inhoud", "Content Alignment": "Content-uitlijning", "Content Length": "Contentlengte", "Content Margin": "Contentmarge", "Content Parallax": "Inhoud Parallax", "Content Width": "Contentbreedte", "Controls": "Bediening", "Copy": "Kopiëren", "Countdown": "Aftelling", "Creating a New Widget": "Een nieuw widget maken", "Critical Issues": "Kritische problemen", "Critical issues detected.": "Kritische problemen gedetecteerd.", "Current Layout": "Huidige layout", "Custom Code": "Aangepaste code", "Customization": "Aanpassing", "Customization Name": "Naam aanpassing", "Date": "Datum", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Stijl de kop met een verdeler, bullet of lijn welke verticaal in het midden uitgelijnd wordt met de titel.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Decoreer de titel met een scheiding, bullet of lijn die verticaal wordt gecentreerd ten opzichte van de kop.", "Decoration": "Decoratie", "Define a name to easily identify this element inside the builder.": "Kies een naam die het makkelijk maakt dit element te vinden in de bouwer.", "Define a unique identifier for the element.": "Kies een unieke naam voor het element.", "Define an alignment fallback for device widths below the breakpoint.": "Bepaal een fallback voor de uitlijning voor apparaatbreedtes onder het breekpunt.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Bepaal één of meer klassenamen voor het element. Scheid meerdere klassen met spaties.", "Define the alignment of the last table column.": "Definieer de uitlijning van de laatste tabelkolom.", "Define the device width from which the alignment will apply.": "Bepaal de apparaatbreedte vanaf wanneer de uitlijning wordt toegepast.", "Define the device width from which the max-width will apply.": "Bepaal de apparaatbreedte vanaf wanneer de maximale breedte van het element wordt toegepast.", "Define the layout of the form.": "Definiër de layout van het formulier.", "Define the layout of the title, meta and content.": "Definieer de lay-out van de titel, meta en inhoud.", "Define the order of the table cells.": "Definieer de volgorde van de tabelcellen.", "Define the padding between table rows.": "Definieer de padding tussen tabelrijen.", "Define the width of the content cell.": "Definieer de breedte van de inhoudcel.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definieer de breedte van de navigatie. Kies tussen procent en vaste breedtes of kolommen uitbreiden naar de breedte van hun inhoud.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definieer de breedte van de afbeelding binnen het raster. Kies tussen procent en vaste breedtes of kolommen uitbreiden naar de breedte van hun inhoud.", "Define the width of the meta cell.": "Definieer de breedte van de meta cel.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definieer de breedte van de navigatie. Kies tussen procent en vaste breedtes of kolommen uitbreiden naar de breedte van hun inhoud.", "Define the width of the title cell.": "Definieer de breedte van de titelcel.", "Define the width of the title within the grid.": "Definieer de breedte van de titel in het raster.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Definieer of de breedte van de schuifregelaar vast is of automatisch wordt uitgebreid met de breedte van de inhoud.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Definieer of thumbnails in meerdere regels worden verdeeld of niet als de container te klein is.", "Delete": "Verwijderen", "Description List": "Omschrijving Lijst", "Determine how the image or video will blend with the background color.": "Bepaal hoe de afbeelding of video zich met de achtergrondkleur mengt.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Bepaal hoe de afbeelding in de sectieruimte moet passen: door de afbeelding bij te snijden of door de lege gebieden op te vullen met de achtergrondkleur.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Bepaal hoe de afbeelding in de sectieruimte moet passen: door de afbeelding bij te snijden of door de lege gebieden op te vullen met de achtergrondkleur.", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Schakel autoplay uit, start autoplay onmiddellijk of zodra de video de viewport binnenkomt.", "Disable element": "Schakel element uit", "Disable Emojis": "Schakel emojis uit", "Disable infinite scrolling": "Oneindig scrollen uitschakelen", "Disable item": "Schakel item uit", "Disable row": "Schakel rij uit", "Disable section": "Schakel sectie uit", "Disable wpautop": "wpautop uitschakelen", "Discard": "Negeer", "Display": "Toon", "Display a divider between sidebar and content": "Een scheiding tussen zijbalk en content tonen", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Toon een menu door de positie te selecteren waar deze moet verschijnen. Bijvoorbeeld, publiceer het hoofdmenu in de navigatiebalkpositie en het alternatieve menu in de mobiel-positie.", "Display icons as buttons": "Icoontjes als knoppen tonen", "Display on the right": "Toon aan de rechterkant", "Display overlay on hover": "Overlay tonen bij hover", "Display the breadcrumb navigation": "Toon de broodkruimelnavigatie", "Display the content inside the overlay, as the lightbox caption or both.": "Geef de inhoud in de overlay weer, als bijschrift van de lightbox of beide.", "Display the content inside the panel, as the lightbox caption or both.": "Geef de inhoud in het paneel weer, als bijschrift van de lightbox of beide.", "Display the first letter of the paragraph as a large initial.": "Toon de eerste letter van de paragraaf als een grote initiaal.", "Display the image only on this device width and larger.": "Toon de afbeelding alleen op deze apparaatbreedte en breder.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Toon de kaart besturingselementen en definieer of de kaart kan ingezoomed of versleept worden met het muiswiel of met aanraking.", "Display the meta text in a sentence or a horizontal list.": "Toon de metatekst in een zin of een horizontale lijst.", "Display the module only from this device width and larger.": "Toon de module enkel vanaf deze toestelbreedte of groter.", "Display the navigation only on this device width and larger.": "Geef de navigatie alleen op deze apparaatbreedte en groter weer.", "Display the parallax effect only on this device width and larger.": "Toon het parallaxeffect alleen op deze apparaatbreedte en groter.", "Display the popover on click or hover.": "Geef de popover weer op klik of hover.", "Display the slidenav only on this device width and larger.": "Toon de slidenav alleen op dit apparaat breedte en groter.", "Display the title inside the overlay, as the lightbox caption or both.": "Geef de titel in de overlay weer, als bijschrift van de lightbox of beide.", "Display the title inside the panel, as the lightbox caption or both.": "Geef de titel in het paneel weer, als bijschrift van de lightbox of beide.", "Divider": "Scheiding", "Do you really want to replace the current layout?": "Wilt u de huidige lay-out echt vervangen?", "Do you really want to replace the current style?": "Weet je zeker dat je de huidige stijl wilt vervangen?", "Don't wrap into multiple lines": "Niet over meerdere regels verdelen", "Double opt-in": "Dubbele opt-in", "Download All": "Download alles", "Drop Cap": "Initiaal", "Edit": "Bewerken", "Edit %title% %index%": "Wijzig %title% %index%", "Edit Items": "Items bewerken", "Edit Menu Item": "Bewerk Menu Item", "Edit Module": "Bewerk Module", "Edit Settings": "Instellingen bewerken", "Enable a navigation to move to the previous or next post.": "Schakel navigatie in om naar het vorige of volgende bericht te gaan.", "Enable autoplay": "Automatisch starten inschakelen", "Enable drop cap": "Schakel intiaal in", "Enable filter navigation": "Navigatiefilter activeren", "Enable lightbox gallery": "Aanzetten lightbox voor de gallery", "Enable map dragging": "Schakel kaart slepen in", "Enable map zooming": "Schakel kaart zoomen in", "Enable masonry effect": "Masonry-effect inschakelen", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Voer een door komma's gescheiden lijst van tags in, bijvoorbeeld <code>blue, white, black</code>.", "Enter a subtitle that will be displayed beneath the nav item.": "Voer een subtitel in die onder het nav-item zal worden getoond.", "Enter a table header text for the content column.": "Voer een tabel koptekst voor elke kolom.", "Enter a table header text for the image column.": "Voer een tabelkoptekst in voor de afbeelding kolom.", "Enter a table header text for the link column.": "Voer een tabelkoptekst in voor de link kolom.", "Enter a table header text for the meta column.": "Voer een tabelkoptekst in voor de meta kolom.", "Enter a table header text for the title column.": "Voer een tabelkoptekst in voor de titel kolom.", "Enter a width for the popover in pixels.": "Geef een breedte voor de popover in pixels in.", "Enter an optional footer text.": "Geef een optionele footer tekst in.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Geef optionele tekst voor het titel attribuut van de link die zal verschijnen als deze wordt aangewezen.", "Enter labels for the countdown time.": "Voer labels in voor de tijd aftelling.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Je kunt maximaal 5 links naar sociale media-profielen toevoegen. Een overeenkomstig <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\"> UIkit-icoontje</a> wordt automatisch weergegeven indien beschikbaar. Links naar e-mailadressen en telefoonnummers, zoals mailto:info@voorbeeld.nl of tel: +3120123456, worden ook ondersteund.", "Enter or pick a link, an image or a video file.": "Kies of voer een link, een afbeelding of een videobestand in.", "Enter the text for the link.": "Geef de tekst in voor de link.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Voer je <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID in om tracking in te schakelen. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP-anonimisering</a> kan de nauwkeurigheid van de tracking verminderen.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Voer je API-sleutel van <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> in om Google Maps te gebruiken in plaats van OpenStreetMap. Dit schakelt ook extra opties in waarmee je de kleuren van je kaarten aan kunt passen.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Voer je API-sleutel van <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> in om het te gebruiken voor het element Nieuwsbrief.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Voer je eigen aangepaste CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor dit element: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Voer uw eigen aangepaste CSS in. De volgende selectors worden automatisch voor dit element ingesteld: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Geef jouw eigen custom CSS in. De volgende selectors krijgen automatisch een voorvoegsel voor deze element: <code>.el-section</code>", "Error: %error%": "Fout: %error%", "Expand One Side": "Eén kant uitbreiden", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Breidt de breedte van één kant uit naar links of rechts, terwijl de andere kant binnen de beperkingen van de maximale breedte blijft.", "Expand width to table cell": "Breid de breedte uit tot aan de tabel cel", "Extend all content items to the same height.": "Verleng alle inhoud items op dezelfde hoogte.", "External Services": "Externe diensten", "Extra Margin": "Extra margin", "Finite": "Eindig", "First name": "Voornaam", "Fix the background with regard to the viewport.": "Zet de achtergrond vast aan het venster.", "Fixed-Inner": "Vast-Binnen", "Fixed-Left": "Vast-Links", "Fixed-Outer": "Vast-Buiten", "Fixed-Right": "Vast-Rechts", "Folder Name": "Mapnaam", "Form": "Formulier", "Full width button": "Knop op volledige breedte", "Gallery": "Gallerij", "General": "Algemeen", "Google Fonts": "Google Lettertypes", "Gradient": "Gradiënt", "Grid": "Raster", "Grid Breakpoint": "Raster breekpunt", "Grid Width": "Raster Breedte", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Groeperen van items in sets. Het aantal items binnen een set is afhankelijk van de gedefinieerde itembreedte, bijvoorbeeld <i>33%</i> betekent dat elke set 3 items bevat.", "Halves": "Helften", "Headline": "Hoofdlijn", "Height": "Hoogte", "hex / keyword": "hex / trefwoord", "Hide marker": "Verberg markering", "Highlight the hovered row": "Highlight de gehoverede rij", "Home": "Hoofdpagina", "Horizontal Center": "Horizontaal centrum", "Horizontal Left": "Horizontaal Links", "Horizontal Right": "Horizontaal Rechts", "Hover Box Shadow": "Boxschaduw bij hover", "Hover Image": "Hover-afbeelding", "HTML Element": "HTML-element", "Hue": "Tint", "Icon": "Icoon", "Icon Color": "Icoon Kleur", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Als een sectie of rij een maximale breedte heeft, en één kant breidt zich uit naar links of rechts, kan de standaard padding verwijderd worden van de uitbreidende kant.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Als u een meertalige site aanmaakt, selecteert u hier geen specifiek menu. Gebruik in plaats daarvan de modulemanager van Joomla om het juiste menu te publiceren, afhankelijk van de huidige taal.", "Image": "Afbeelding", "Image Alignment": "Afbeelding Uitlijning", "Image Alt": "Afbeelding Alt", "Image Attachment": "Afbeelding Bijlage", "Image Box Shadow": "Afbeelding Kader Schaduw", "Image Effect": "Effect van de afbeelding", "Image Height": "Afbeelding Hoogte", "Image Margin": "Afbeeldingsmarge", "Image Orientation": "Afbeelding oriëntatie", "Image Position": "Positie van de afbeelding", "Image Size": "Grootte van de afbeelding", "Image Width": "Afbeelding Breedte", "Image Width/Height": "Breedte/hoogte van de afbeelding", "Image/Video": "Afbeelding/Video", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Zet SVG-afbeeldingen in de opmaak van de pagina, zodat ze eenvoudig kunnen worden opgemaakt.", "Insert at the bottom": "Aan de onderkant toevoegen", "Insert at the top": "Aan de bovenkant invoegen", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "In plaats van een aangepast afbeelding kunt u ook op het penseel icoon klikken om een icoon te kiezen van de bibliotheek.", "Inverse Logo (Optional)": "Logo omkeren (Optioneel)", "Inverse style": "Stijl omwisselen", "Inverse the text color on hover": "Tekstkleur omwisselen bij hover", "Invert lightness": "Lichtheid Omkeren", "IP Anonymization": "IP-anonimering", "Issues and Improvements": "Problemen en verbeteringen", "Item Width": "Breedte van het item", "Item Width Mode": "Breedtemodus van het item", "Ken Burns Effect": "Ken Burns-effect", "l": "Ik", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Landschap- en portretafbeeldingen worden gecentreerd binnen de cellen van het raster. De breedte en hoogte zal worden omgedraaid zodra er afbeeldingen worden verkleind.", "Large (Desktop)": "Groot (Desktop)", "Large Screen": "Grote Schermen", "Large Screens": "Grote Schermen", "Larger padding": "Meer padding", "Larger style": "Grotere stijl", "Last Column Alignment": "Laatste kolom uitlijning", "Last name": "Achternaam", "Layout": "Ontwerp", "Layout Media Files": "Mediabestanden voor de lay-out", "Lazy load video": "Video lui laden", "Left": "Links", "Library": "Bibliotheek", "Lightness": "Lichtheid", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Beperk de lengte van de content tot een aantal karakters. Alle HTML-elementen zullen worden verwijderd.", "Link Parallax": "Link parallax", "Link Style": "Link Stijl", "Link Target": "Linkbestemming", "Link Text": "Link Tekst", "Link title": "Link Titel", "Link Title": "Link Titel", "Link to redirect to after submit.": "Link om naar door te verwijzen na het verzenden.", "List": "Lijst", "List Style": "Lijst Stijl", "Load jQuery": "jQuery laden", "Location": "Locatie", "Logo Image": "Logo-afbeelding", "Logo Text": "Logotekst", "Loop video": "Herhaal Video", "Mailchimp API Token": "API-sleutel Mailchimp", "Main styles": "Hoofdstijlen", "Make SVG stylable with CSS": "Maak SVG op te maken met CSS", "Map": "Kaart", "Margin": "Marge", "Marker": "Markering", "Match content height": "Hoogte inhoud gelijk stellen", "Match height": "Gelijke hoogte", "Match Height": "Gelijke Hoogte", "Max Height": "Maximale hoogte", "Max Width": "Maximale breedte", "Max Width (Alignment)": "Max Breedte (uitlijning)", "Max Width Breakpoint": "Breekpunt van de maximale breedte", "Media Folder": "Mediamap", "Medium (Tablet Landscape)": "Medium (Tablet Landschap)", "Menu Style": "Menu-stijl", "Menus": "Menu's", "Message": "Boodschap", "Message shown to the user after submit.": "Bericht dat aan de gebruiker wordt getoond na verzenden.", "Meta Alignment": "Meta Uitlijning", "Meta Margin": "Meta-marge", "Meta Parallax": "Meta-parallax", "Meta Style": "Meta-stijl", "Meta Width": "Meta Breedte", "Min Height": "Minimale hoogte", "Mobile": "Mobiel", "Mobile Logo (Optional)": "Mobiel Logo (Optioneel)", "Mode": "Modus", "Move the sidebar to the left of the content": "De zijbalk naar de linkerkant van de content verplaatsen", "Mute video": "Video dempen", "Name": "Naam", "Navbar": "Navigatiebalk", "Navigation": "Navigatie", "Navigation Label": "Navigatie Label", "Navigation Thumbnail": "Navigatie Thumbnail", "New Layout": "Nieuwe lay-out", "New Menu Item": "Nieuw Menu Item", "New Module": "Nieuwe module", "Newsletter": "Nieuwsbrief", "Next-Gen Images": "Next-gen-afbeeldingen", "No critical issues found.": "Geen kritische problemen gevonden.", "No element found.": "Geen elementen gevonden.", "No files found.": "Geen bestanden gevonden.", "No font found. Press enter if you are adding a custom font.": "Geen lettertype gevonden. Druk op Enter als u een aangepast lettertype toevoegt.", "No items yet.": "Nog geen items.", "No layout found.": "Geen ontwerp gevonden.", "No Results": "Geen resultaten", "No results.": "Geen resultaten.", "No style found.": "Geen stijl gevonden.", "Offcanvas Mode": "Offcanvas Modus", "Only available for Google Maps.": "Alleen beschikbaar voor Google Maps.", "Only display modules that are published and visible on this page.": "Toon alleen modules die gepubliceerd en zichtbaar zijn op deze pagina.", "Open in a new window": "In een nieuw venster openen", "Open the link in a new window": "Open de link in een nieuw venster", "Options": "Opties", "Order": "Volgorde", "Outside Breakpoint": "Breekpunt aan de buitenkant", "Outside Color": "Kleur van buiten", "Overlap the following section": "De volgende sectie overlappen", "Overlay Color": "Overlappingskleur", "Overlay Parallax": "Overlay-parallax", "Overlay the site": "Overlay de site", "Panel": "Paneel", "Panels": "Panelen", "Parallax Breakpoint": "Parallax Breakpunt", "Pause autoplay on hover": "Pauzeer automatisch afspelen bij hover", "Phone Landscape": "Telefoon Landschap", "Phone Portrait": "Telefoon Portret", "Photos": "Foto's", "Pick file": "Bestand kiezen", "Pick link": "Link kiezen", "Pick media": "Media kiezen", "Placeholder Image": "Placeholder Afbeelding", "Play inline on mobile devices": "Speel inline af op mobiele apparaten", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Installeer/activeer de <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installeer-plug-in</a> om deze functie in te schakelen.", "Position": "Positie", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Positioneer de navigatie boven, onder, links of rechts. Een grotere stijl can toegewezen worden aan de navigatie links of rechts.", "Position the meta text above or below the title.": "Plaats de metatekst boven of onder de titel.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Positioneer de navigatie boven, onder, links of rechts. Een grotere stijl can toegewezen worden aan de navigatie links of rechts.", "Post": "Bericht", "Preview all UI components": "Bekijk een voorbeeld van alle UI-elementen", "Primary navigation": "Primaire navigatie", "Pull content behind header": "Content onder navigatiebalk plaatsen", "Quarters": "Kwarten", "Quarters 1-1-2": "Kwarten 1-1-2", "Quarters 1-2-1": "Kwarten 1-2-1", "Quarters 1-3": "Kwarten 1-3", "Quarters 2-1-1": "Kwarten 2-1-1", "Quarters 3-1": "Kwarten 3-1", "Quotation": "Citaat", "Reload Page": "Pagina herladen", "Remove bottom margin": "Marge onder verwijderen", "Remove bottom padding": "Padding onder verwijderen", "Remove left and right padding": "Verwijder linker en rechter padding", "Remove left logo padding": "Verwijder links logo padding", "Remove left or right padding": "Linker of rechter padding verwijderen", "Remove Media Files": "Verwijder mediabestanden", "Remove top margin": "Marge boven verwijderen", "Remove top padding": "Padding boven verwijderen", "Rename": "Hernoemen", "Replace layout": "Ontwerp vervangen", "Reset to defaults": "Naar standaard waarden terugzetten", "Rotate the title 90 degrees clockwise or counterclockwise.": "Draai de titel 90 graden met de klok mee of tegen de klok in.", "Rotation": "Rotatie", "Row": "Rij", "Saturation": "Verzadiging", "Save": "Opslaan", "Save %type%": "%type% Opslaan", "Save in Library": "In bibliotheek opslaan", "Save Layout": "Ontwerp opslaan", "Search": "Zoeken", "Search Style": "Zoeken Stijl", "Section": "Sectie", "Section/Row": "Sectie/Rij", "Select": "Selecteren", "Select %type%": "Selecteer %type%", "Select a card style.": "Selecteer een kaartstijl.", "Select a different position for this item.": "Selecteer een andere positie voor dit item.", "Select a grid layout": "Selecteer een raster layout", "Select a predefined meta text style, including color, size and font-family.": "Selecteer een vooraf bepaalde meta-tekststijl, waaronder kleur, grootte en lettertype.", "Select a predefined text style, including color, size and font-family.": "Selecteer een vooraf bepaalde tekststijl, waaronder kleur, grootte en lettertype.", "Select a style for the continue reading button.": "Selecteer een stijl voor de 'Lees verder'-knop.", "Select a style for the overlay.": "Selecteer een stijl voor de overlay.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Selecteer een video-bestand of voer een link van <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> of <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a> in.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Selecteer een widgetgebied van WordPress dat alle gepubliceerde widgets zal weergeven. Het wordt aanbevolen om de bouwer-1 tot -6 widgetgebieden te gebruiken, die niet ergens anders worden weergegeven door het thema.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Selecteer een alternatief logo met omgekeerde kleur, bijvoorbeeld wit, voor betere zichtbaarheid op donkere achtergronden. Het zal indien nodig automatisch weergegeven worden.", "Select an alternative logo, which will be used on small devices.": "Selecteer een alternatief logo dat wordt gebruikt op kleine apparaten.", "Select an animation that will be applied to the content items when filtering between them.": "Selecteer een animatie die wordt toegepast op de inhoudspunten wanneer u tussen hen wisselt.", "Select an animation that will be applied to the content items when toggling between them.": "Selecteer een animatie die wordt toegepast op de inhoudspunten wanneer u tussen hen wisselt.", "Select an image transition.": "Selecteer een afbeeldingsovergang.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Selecteer een afbeeldingsovergang. Als de hover-afbeelding is ingesteld, zal de overgang plaatsvinden tussen de twee afbeeldingen. Als <i>Geen</i> is geselecteerd, zal de hover-afbeelding vervaagd verschijnen.", "Select an optional image that appears on hover.": "Selecteer een optionele afbeelding die verschijnt als je met de muisaanwijzer over de afbeelding gaat.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Selecteer een optionele afbeelding die weergegeven totdat de video wordt afgespeeld. Indien niet gekozen voor de eerste videoframe wordt weergegeven als de filmposter.", "Select header layout": "Selecteer header-ontwerp", "Select Image": "Afbeelding selecteren", "Select the content position.": "Selecteer de contentpositie.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Selecteer de navigatiestijl. De pil- en lijnstijlen zijn alleen beschikbaar voor horizontale subnavs.", "Select the form size.": "Selecteer de grootte van het formulier.", "Select the form style.": "Selecteer de stijl van het formulier.", "Select the link style.": "Selecteer de link stijl.", "Select the list style.": "Selecteer de lijst stijl.", "Select the list to subscribe to.": "Selecteer de lijst waar je je op wilt abonneren.", "Select the navigation type.": "Selecteer de menu stijl.", "Select the overlay or content position.": "Selecteer de overlay- of contentpositie.", "Select the position of the navigation.": "Selecteer de positie van de navigatie.", "Select the position of the slidenav.": "Selecteer de positie van de slidenav.", "Select the position that will display the search.": "Selecteer de positie waar de zoekmogelijkheid wordt weergegeven.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Selecteer de positie die de sociale icoontjes toont. Zorg ervoor dat je links naar sociale profielen toevoegt, anders kunnen er geen icoontjes worden getoond.", "Select the search style.": "Selecteer de zoek stijl.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Selecteer de stijl voor het markeren van de code-syntaxis. Gebruik GitHub voor lichte en Monokai voor donkere achtergronden.", "Select the style for the overlay.": "Selecteer de stijl voor de overlay.", "Select the subnav style.": "Selecteer de subnav stijl.", "Select the table style.": "Selecteer de tabelstijl.", "Select the text color.": "Selecteer de tekstkleur.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Selecteer de tekstkleur. Als de optie Achtergrond is geselecteerd, gebruiken de stijlen die geen achtergrondafbeelding toepassen in plaats daarvan de primaire kleur.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Selecteer de tekstkleur. Als de optie Achtergrond is geselecteerd, gebruiken de stijlen die geen achtergrondafbeelding toepassen in plaats daarvan de primaire kleur.", "Select the title style and add an optional colon at the end of the title.": "Selecteer de titelstijl en voeg een optionele kolon aan het einde van de titel toe.", "Select the transformation origin for the Ken Burns animation.": "Selecteer de transformatieoorsprong voor de Ken Burns-animatie.", "Select the transition between two slides.": "Selecteer de overgang tussen twee slides.", "Select whether a button or a clickable icon inside the email input is shown.": "Selecteer of er een knop of een klikbaar icoontje binnen de e-mail-input wordt getoond.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Selecteer of er een bericht zal worden getoond of dat de site zal worden doorgestuurd nadat er op de abonneerknop is geklikt.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Selecteer of de widgets naast elkaar moeten worden uitgelijnd of op elkaar gestapeld.", "Serve WebP images": "Gebruik WebP-afbeeldingen", "Set a different link text for this item.": "Stel een andere linktekst in voor dit item.", "Set a different text color for this item.": "Stel een andere tekstkleur in voor dit item.", "Set a fixed width.": "Stel een vaste breedte in.", "Set a large initial letter that drops below the first line of the first paragraph.": "Stel een grote beginletter in die onder de eerste zin van de eerste alinea valt.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Stel een zijbalkbreedte in procent in en de contentkolom zal zich hier aan aanpassen. De breedte zal niet onder de minimale breedte van de zijbalk gaan. De minimale breedte kun je instellen in de sectie Stijl.", "Set an additional transparent overlay to soften the image or video.": "Stel een aanvullende, transparante overlay in om de afbeelding of video te verzachten.", "Set how the module should align when the container is larger than its max-width.": "Stel in hoe de module moet uitlijnen als de container grotere is dan de maximale breedte. (max-width)", "Set light or dark color if the navigation is below the slideshow.": "Stel een lichte of donkere kleur in als de navigatie zich onder de slideshow bevindt.", "Set light or dark color if the slidenav is outside.": "Stel een lichte of donkere kleur in als de slidenav zich buiten de slideshow bevindt.", "Set light or dark color mode for text, buttons and controls.": "Stel een lichte of donkere kleurenmodus in voor tekst, knoppen en besturingselementen.", "Set light or dark color mode.": "Stel een lichte of donkere kleurenmodus in.", "Set percentage change in lightness (Between -100 and 100).": "Stel een percentage verandering in lichtheid in (tussen -100 en 100).", "Set percentage change in saturation (Between -100 and 100).": "Stel een percentage verandering in verzadiging in (tussen -100 en 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Stel een percentage verandering in de hoeveelheid gammacorrectie in (tussen 0.01 en 10.0, waar 1.0 geen correctie toepast).", "Set the autoplay interval in seconds.": "Stel de autoplay-interval in seconden in.", "Set the blog width.": "Stel de breedte van de blog in.", "Set the breakpoint from which grid items will stack.": "Stel het breekpunt in vanaf waar de rastercellen onder elkaar komen te staan.", "Set the breakpoint from which the sidebar and content will stack.": "Stel het breekpunt in vanaf waar de zijbalk en content onder elkaar komen te staan.", "Set the button size.": "Stel de knop grootte in.", "Set the button style.": "Stel de knop stijl in.", "Set the duration for the Ken Burns effect in seconds.": "Stel de duur van het Ken Burns-effect in seconden in.", "Set the icon color.": "Stel de icoon kleur in.", "Set the initial background position, relative to the section layer.": "Stel de oorspronkelijke achtergrondpositie in, in verhouding tot de sectielaag.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Stel de eerste resolutie in waarop de kaart moet worden weergegeven. 0 is volledig uitgezoomd en 18 is bij de hoogste resolutie ingezoomd.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Stel de breedte van het item voor elk breekpunt in. <i>Erven</i> verwijst naar de breedte van het item op de volgende kleinere schermgrootte.", "Set the link style.": "Stel de link stijl in.", "Set the margin between the countdown and the label text.": "Stel de margin tussen de aftellen en de etikettekst in.", "Set the margin between the overlay and the slideshow container.": "Stel de marge tussen de overlay en de slideshow-container in.", "Set the maximum content width.": "Stel de maximale breedte van de content in.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Stel de maximale contentbreedte in. Opmerking: De sectie kan al een maximale breedte hebben, die je niet kan overschrijden.", "Set the maximum height.": "Stel de maximale hoogte in.", "Set the maximum width.": "Stel de maximale breedte in.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Stel het aantal grid kolommen voor elk breekpunt in. <I>Inherit</ i> verwijst naar het aantal kolommen in de volgende kleinere schermgrootte.", "Set the padding between sidebar and content.": "Stel de padding tussen de zijbalk en content in.", "Set the padding between the overlay and its content.": "Stel de padding tussen de overlay en de content in.", "Set the padding.": "Stel de padding in.", "Set the post width. The image and content can't expand beyond this width.": "Stel de breedte van het bericht in. De afbeelding en content kunnen zich niet voorbij deze breedte uitbreiden.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Bepaal het aantal kolommen in de <a href=\"index.php?optie=com_config&view=component&component=com_content#blog_default_parameters\">blog-/uitgelichte lay-out</a>-instellingen in Joomla.", "Set the size of the gap between the navigation and the content.": "Selecteer de gootbreedte tussen de navigatie- en inhoud items.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Stel een verhouding in. Het wordt aangeraden om dezelfde verhouding als die van de achtergrondafbeelding te gebruiken. Gebruik de breedte en hoogte, bijvoorbeeld <code>1600:900</code>.", "Set the top margin if the image is aligned between the title and the content.": "Stel de marge aan de bovenkant in als de afbeelding is uitgelijnd tussen de titel en de content.", "Set the top margin.": "Stel de marge aan de bovenkant in.", "Set the velocity in pixels per millisecond.": "Stel de snelheid in pixels per milliseconde in.", "Set the vertical container padding to position the overlay.": "Stel de padding van de verticale container in om de overlay te positioneren.", "Set the vertical margin.": "Stel de verticale margin in.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Stel de verticale marge in. Opmerking: De bovenste marge van het eerste raster en de onderste marge van het laatste raster worden altijd verwijderd. Bepaal deze in plaats daarvan in de instellingen van het raster.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Stel de verticale marge in. Opmerking: De bovenste marge van het eerste raster en de onderste marge van het laatste raster worden altijd verwijderd. Bepaal deze in plaats daarvan in de instellingen van de sectie.", "Set the vertical padding.": "Stel de verticale padding in.", "Set the video dimensions.": "Stel de video afmetingen in.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Stel de breedte en de hoogte in pixels (bijvoorbeeld 600) in. Als je slechts één waarde instelt, zullen de oorspronkelijke verhoudingen behouden blijven. Het formaat van de afbeelding zal automatisch worden aangepast.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Stel de breedte en de hoogte in pixels in. Als je slechts één waarde instelt, zullen de oorspronkelijke verhoudingen behouden blijven. Het formaat van de afbeelding zal automatisch worden aangepast.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Stel de breedte in pixels in. Als er geen breedte is ingesteld, zal de kaart de volledige breedte innemen en de hoogte behouden. Of gebruik de breedte alleen om het breekpunt te bepalen vanaf wanneer de kaart begint te krimpen voor behoud van de beeldverhouding.", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Als je slechts één waarde instelt, zullen de oorspronkelijke verhoudingen behouden blijven. Het formaat van de afbeelding wordt automatisch aangepast en waar mogelijk worden hoge resolutie afbeeldingen automatisch gegenereerd.", "Settings": "Instellingen", "Show a divider between grid columns.": "Scheiding weergeven tussen de tekst kolommen", "Show archive category title": "Titel van archiefcategorie tonen", "Show author": "Auteur tonen", "Show below slideshow": "Onder slideshow tonen", "Show button": "Knop tonen", "Show categories": "Categorieën tonen", "Show comments count": "Reactiestelling tonen", "Show content": "Content tonen", "Show Content": "Content tonen", "Show controls": "Bedieningselementen tonen", "Show date": "Datum tonen", "Show dividers": "Scheidingen tonen", "Show drop cap": "Drop cap tonen", "Show filter control for all items": "Filterbediening voor alle items tonen", "Show hover effect if linked.": "Toon het hover-effect als deze is gelinkt.", "Show Labels": "Labels tonen", "Show map controls": "Kaart knoppen weergeven", "Show name fields": "Naamvelden tonen", "Show navigation": "Navigatie tonen", "Show on hover only": "Alleen bij hover tonen", "Show or hide content fields without the need to delete the content itself.": "Weergeven of verbergen van inhoud velden zonder dat het nodig is de inhoud zelf te verwijderen.", "Show popup on load": "Popup weergeven bij laden", "Show Separators": "Toon afscheiders", "Show Start/End links": "Start/einde-links tonen", "Show system fields for single posts. This option does not apply to the blog.": "Toon systeemvelden voor berichten. Deze optie werkt niet voor de blog.", "Show system fields for the blog. This option does not apply to single posts.": "Toon systeemvelden voor de blog. Deze optie werkt niet voor berichten.", "Show tags": "Tags tonen", "Show the content": "Inhoud weergeven", "Show the image": "Afbeelding weergeven", "Show the link": "Link weergeven", "Show the menu text next to the icon": "Menutekst naast het icoontje weergeven", "Show the meta text": "Meta text weergeven", "Show the navigation label instead of title": "Het navigatielabel in plaats van de titel tonen", "Show the navigation thumbnail instead of the image": "De navigatie-thumbnail in plaats van de afbeelding tonen", "Show the title": "Titel weergeven", "Show title": "Titel weergeven", "Show Title": "Titel weergeven", "Sidebar": "Zijbalk", "Site": "Website", "Size": "Grootte", "Slide all visible items at once": "Alle zichtbare items onmiddellijk sliden", "Small (Phone Landscape)": "Klein (Telefoon Landschap)", "Social": "Sociaal", "Social Icons": "Sociale icoontjes", "Split the dropdown into columns.": "Verdeel de dropdown in kolommen.", "Spread": "Uitspreiden", "Stack columns on small devices or enable overflow scroll for the container.": "Stapelkolommen op kleine apparaten of activeer overlooprol voor de container.", "Stacked Center A": "Gestapeld Midden A", "Stacked Center B": "Gestapeld Midden B", "Stacked Center C": "Gestapeld Midden A", "Stretch the panel to match the height of the grid cell.": "Rek het paneel uit zodat de hoogte van het paneel gelijk is aan de hoogte van de rastercel.", "Style": "Stijl", "Subtitle": "Subtitel", "Syntax Highlighting": "Syntaxis-markering", "System Check": "Systeemcontrole", "Table": "Tabel", "Table Head": "Table Hoofd", "Tablet Landscape": "Tablet Landschap", "Text": "Tekst", "Text Alignment": "Tekst-uitlijning", "Text Alignment Breakpoint": "Breekpunt tekst-uitlijning", "Text Alignment Fallback": "Fallback tekst-uitlijning", "Text Color": "Tekstkleur", "Text Style": "Tekststijl", "The changes you made will be lost if you navigate away from this page.": "De wijzigen die je hebt gemaakt zullen verloren gaan, wanneer je weggaat van deze pagina.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "De hoogte past zich automatisch aan de content aan. De hoogte kan zich ook aanpassen aan de hoogte van de viewport.<br><br>Opmerking: Let er op dat er geen hoogte is ingesteld in de sectie-instellingen als je gebruikmaakt van een van de viewport-opties.", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "Het masonry-effect zorgt voor een lay-out zonder gaten, zelfs als rastercellen verschillende hoogtes hebben. ", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "De pagina die je aan het bewerken bent is bijgewerkt door %modified_by%. Als je je wijzigingen opslaat zal dit de vorige wijzigingen overschrijven. Weet je zeker dat je wilt opslaan of wil je je wijzigingen ongedaan maken en de pagina vernieuwen?", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "De slideshow neemt altijd de volledige breedte in beslag en de hoogte zal zich automatisch aanpassen aan de bepaalde verhouding. De hoogte kan zich ook aanpassen aan de hoogte van de viewport.<br><br>Opmerking: Let er op dat er geen hoogte is ingesteld in de sectie-instellingen als je gebruikmaakt van een van de viewport-opties.", "The width of the grid column that contains the module.": "De breedte van de raster kolom die de module bevat.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "De themafolder van YOOtheme Pro is hernoemd, waardoor essentiële functionaliteiten niet meer werken. Hernoem de themafolder terug naar <code>yootheme</code>.", "Thirds": "Derde", "Thirds 1-2": "Derde 1-2", "Thirds 2-1": "Derde 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "In deze map worden de afbeeldingen die je downloadt wanneer je lay-outs van de YOOtheme Pro-bibliotheek gebruikt opgeslagen.", "This is only used, if the thumbnail navigation is set.": "Dit wordt alleen gebruikt als de miniatuurnavigatie is ingesteld.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Dit ontwerp is voorzien van een afbeelding dat moet worden gedownload naar de Mediabibliotheek van uw website |||| Dit ontwerp bevat %smart_count% afbeeldingen die moeten worden gedownload naar de Mediabibliotheek van uw website.", "This option doesn't apply unless a URL has been added to the item.": "Deze optie is niet van toepassing, tenzij een URL is toegevoegd aan het item.", "This option is only used if the thumbnail navigation is set.": "Dit wordt alleen gebruikt als de miniatuurnavigatie is ingesteld.", "Thumbnail Width/Height": "Breedte/hoogte van de thumbnail", "Thumbnail Wrap": "Thumbnail-wrap", "Thumbnav Wrap": "Thumbnav-wrap", "Title": "Titel", "title": "titel", "Title Decoration": "Titel Decoratie", "Title Margin": "Titelmarge", "Title Parallax": "Titel parallax", "Title Style": "Titelstijl", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Titelstijlen verschillen in lettergrootte, maar kunnen ook voorzien zijn van een vooraf bepaalde kleur, grootte en lettertype.", "Title Width": "Titel Breedte", "To Top": "Naar Boven", "Touch Icon": "Touch-icoontje", "Transition": "Overgang", "Transparent Header": "Transparante Header", "Upload": "Uploaden", "Upload a background image.": "Upload een achtergrondafbeelding.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Upload een optionele achtergrondafbeelding dat de pagina bedekt. Het zal worden vastgezet tijdens het scrollen.", "Use a numeric pagination or previous/next links to move between blog pages.": "Gebruik een numerieke paginering of vorige/volgende-links om te navigeren tussen blogpagina's.", "Use as breakpoint only": "Alleen als breekpunt gebruiken", "Use double opt-in.": "Gebruik dubbele opt-in.", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Gebruik de achtergrondkleur in combinatie met blendmodus, een transparante afbeelding of om het gebied te vullen, als de afbeelding niet de gehele sectie bedekt.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Gebruik de achtergrondkleur in combinatie met blendmodus, een transparante afbeelding of om het gebied te vullen, als de afbeelding niet de gehele sectie bedekt.", "Use the background color in combination with blend modes.": "Gebruik de achtergrondkleur in combinatie met mengmodi.", "Users": "Gebruikers", "Velocity": "Snelheid", "Version %version%": "Versie %version%", "Vertical Alignment": "Verticale uitlijning", "Vertical navigation": "Verticale navigatie", "Vertically align the elements in the column.": "Lijn de elementen verticaal uit in de kolom.", "Vertically center grid items.": "Cellen verticaal en gecentreerd", "Vertically center table cells.": "Verticaal midden tafel cellen.", "Vertically center the image.": "Centreer de afbeelding verticaal.", "Vertically center the navigation and content.": "Centreer de navigatie en content verticaal.", "View Photos": "Foto's bekijken", "Visibility": "Zichtbaarheid", "Visible on this page": "Op deze pagina zichtbaar", "Visual": "Visueel", "When using cover mode, you need to set the text color manually.": "Wanneer je de omslagmodus gebruikt, moet je de tekstkleur handmatig instellen.", "Whole": "Geheel", "Widget Area": "Widget-gebied", "Width": "Breedte", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Als de afbeelding in portret- of landschapformaat is, zullen de breedte en hoogte omgedraaid worden.", "Width/Height": "Breedte/hoogte", "X-Large (Large Screens)": "X-Large (Grote Schermen)", "YOOtheme API Key": "API-sleutel YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro is volledig operationeel en klaar voor gebruik.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro is niet operationeel. Alle kritieke problemen moeten opgelost worden.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro is operationeel, maar er zijn problemen die opgelost moeten worden om bepaalde functies te kunnen gebruiken en de werking te verbeteren." }theme/languages/et_EE.json000064400000031100151666572140011500 0ustar00{ "- Select -": "- Vali -", "- Select Module -": "- Vali moodul -", "- Select Position -": "- Vali asukoht -", "- Select Widget -": "- Vali vidin -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" eksisteerib juba teegis, see kirjutatakse salvestamisel üle.", "%label% Position": "%label% asukoht", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Kogu |||| %smart_count% Kogu", "%smart_count% File |||| %smart_count% Files": "%smart_count% fail |||| %smart_count% failid", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% fail valitud |||| %smart_count% faili valitud", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Foto |||| %smart_count% Fotot", "%smart_count% User |||| %smart_count% Users": "%smart_count% Kasutaja |||| %smart_count% Kasutajat", "About": "Teave", "Accordion": "Akordion", "Add": "Lisa", "Add a colon": "Lisa koolon", "Add Element": "Lisa element", "Add Folder": "Lisa kataloog", "Add Item": "Lisa element", "Add Menu Item": "Lisa menüü element", "Add Module": "Lisa moodul", "Add Row": "Lisa rida", "Add Section": "Lisa sektsioon", "Advanced": "Lisavalikud", "After Submit": "Pärast lisamist", "Alert": "Hoiatus", "Alignment": "Joondamine", "Alignment Breakpoint": "Katkestuspunkti joondamine", "All backgrounds": "Kõik taustad", "All colors": "Kõik värvid", "All Items": "Kõik kirjed", "All layouts": "Kõik paigutused", "All styles": "Kõik stiilid", "All topics": "Kõik teemad", "All types": "Kõik tüübid", "All websites": "Kõik veebilehed", "Allow multiple open items": "Luba mitu avatud elementi", "Animate background only": "Animeeri ainult tausta", "Animation": "Animatsioon", "API Key": "API võti", "Articles": "Artiklid", "Author": "Autor", "Author Link": "Autori link", "Auto-calculated": "Automaatselt arvutatud", "Autoplay": "Automaatne esitamine", "Back": "Tagasi", "Background Color": "Tagatausta värv", "Behavior": "Omadused", "Blend Mode": "Sujutamisrežiim", "Blur": "Hägustus", "Border": "Piirjoon", "Bottom": "All", "Box Shadow": "Kasti vari", "Breadcrumbs": "Aukoht lehel", "Breakpoint": "Katkestuspunkt", "Builder": "Ehitaja", "Button": "Nupp", "Button Size": "Nupu suurus", "Buttons": "Nupud", "Cache": "Vahemälu", "Cancel": "Tühista", "Center": "Keskel", "Center the module": "Mooduli keskel", "Changelog": "Muudatuste logi", "Choose a divider style.": "Vali eraldaja stiil.", "Choose a map type.": "Vali kaardi tüüp.", "Choose Font": "Vali font", "Choose the icon position.": "Vali ikooni asukoht.", "Class": "Klass", "Clear Cache": "Puhasta vahemälu", "Close": "Sulge", "Code": "Kood", "Collections": "Kogud", "Color": "Värv", "Column": "Veerg", "Columns": "Veerud", "Columns Breakpoint": "Veeru katkestuspunkt", "Components": "Komponendid", "Consent Button Style": "Nõusoleku nupu stiil", "Consent Button Text": "Nõusoleku nupu tekst", "Container Width": "Konteineri laius", "Content": "Sisu", "content": "sisu", "Content Alignment": "Sisu joondus", "Content Length": "Sisu pikkus", "Content Parallax": "Sisu parallax", "Content Width": "Sisu laius", "Controls": "Juhtelemendid", "Copy": "Kopeeri", "Countdown": "Mahalugemine", "Critical Issues": "Kriitilised probleemid", "Critical issues detected.": "Tuvastati kriitilisi probleeme.", "Custom Code": "Omaloodud kood", "Customization": "Kohandamine", "Customization Name": "Kohandamise nimi", "Date": "Kuupäev", "Define the layout of the form.": "Määra vormi paigutus.", "Define the width of the title cell.": "Määra pealkirja lahtri laius.", "Delete": "Kustuta", "Description List": "Kirjelduste nimekiri", "Desktop": "Töölaud", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Vali, kas sektsioon täidetmisel pilti lõigatakse või tühjad alad täidetakse taustavärviga.", "Display": "Vaade", "Display a divider between sidebar and content": "Näita külgriba ja sisu vahel eraldajat", "Display icons as buttons": "Näita ikoone nuppudena", "Display on the right": "Näita paremal", "Display the breadcrumb navigation": "Näita kasutaja asukohta lehel", "Display the first letter of the paragraph as a large initial.": "Näita lõigu esimest tähte suurena üle mitme rea.", "Display the image only on this device width and larger.": "Näita seda pilti ainult sellel või suuremal seadmel.", "Display the module only from this device width and larger.": "Näita moodulit ainult sellel või suuremal seadmel.", "Divider": "Eraldaja", "Download": "Laadi alla", "Drop Cap": "Suur algustäht", "Edit": "Muuda", "Edit %title% %index%": "Muuda %title% %index%", "Edit Menu Item": "Muuda menüü linki", "Edit Module": "Muuda moodulit", "Edit Settings": "Muuda seadeid", "Email": "E-post", "Enable autoplay": "Automaatne esitamine", "Enable drop cap": "Suure algustähe kasutamine", "Enable map dragging": "Luba kaardi lohistamine", "Enable map zooming": "Luba kaardi suumimine", "Enter an optional footer text.": "Sisesta soovi korral jaluse tekst.", "Enter the text for the link.": "Sisesta lingi tekst.", "Error: %error%": "Vead: %error%", "First name": "Eesnimi", "Folder Name": "Kausta nimi", "Footer": "Jalus", "Form": "Vorm", "Full width button": "Täislaiusega nupp", "Gallery": "Galerii", "General": "Üldine", "Google Maps": "Google kaardid", "Gradient": "Värviüleminek", "Grid": "Võrgustik", "Grid Width": "Võrgustiku laius", "Header": "Päis", "Height": "Kõrgus", "Hide marker": "Peida marker", "Home": "Avaleht", "Html": "HTML", "HTML Element": "HTML element", "Icon": "Ikoon", "Icon Color": "Ikooni värv", "Image": "Pilt", "Image Alt": "Pildi ALT", "Image Box Shadow": "Pildi piirjoone vari", "Image Orientation": "Pildi suund", "Image Position": "Pildi asukoht", "Image Size": "Pildi suurus", "Image Width": "Pildi laius", "Image Width/Height": "Pildi laius/kõrgus", "Image/Video": "Pilt/Video", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Kohandatud pildi asemel võid klikkide pliiatsi ikoonil, et valida ikoon ikoonikogust.", "Inverse Logo (Optional)": "Logo pööratuna (valikuline)", "Item": "Kirje", "Items": "Kirjed", "Labels": "Sildid", "Large (Desktop)": "Suur (töölaud)", "Large Screens": "Suured ekraanid", "Last name": "Perekonnanimi", "Layout": "Paigutus", "Left": "Paremal", "Library": "Teek", "Lightness": "Heledus", "Link Style": "Lingi stiil", "Link Text": "Lingi tekst", "Link Title": "Lingi nimi", "List": "Loetelu", "List Style": "Loetelu stiil", "Location": "Asukoht", "Logo Image": "Logo pilt", "Logo Text": "Logo tekst", "Loop video": "Video korduv esitamine", "Main styles": "Peamised stiilid", "Map": "Kaart", "Match Height": "Sobita kõrgusega", "Match height": "Sobita kõrgusega", "Max Width": "Maks. laius", "Max Width (Alignment)": "Maks. laius (joondus)", "Menu Style": "Menüü stiil", "Message": "Sõnum", "Meta": "META", "Min Height": "Minimaalne kõrgus", "Mobile": "Mobiil", "Mobile Logo (Optional)": "Logo mobiilil (valikuline)", "Mode": "Režiim", "Name": "Nimi", "Navbar": "Navigeerimisriba", "Navigation": "Menüü", "Navigation Label": "Menüü silt", "Navigation Thumbnail": "Menüü pisipilt", "New Menu Item": "Uus menüülink", "New Module": "Uus moodul", "Newsletter": "Uudiskiri", "No files found.": "Faile ei leitud.", "No font found. Press enter if you are adding a custom font.": "Fonti ei leitud. Kui sa kasutad kohandatud fonti, siis vajuta Enter.", "No layout found.": "Ühtegi paigutust ei leitud.", "Open the link in a new window": "Ava link uues aknas", "Order": "Järjekord", "Panel": "Paneel", "Panels": "Paneelid", "Phone Landscape": "Telefon rõhtasendis", "Phone Portrait": "Telefon püstises asendis", "Placeholder Image": "Kohatäitja pilt", "Position": "Asukoht", "Primary navigation": "Peamenüü", "Quarters": "Veerandid", "Quarters 1-1-2": "Veerandid 1-1-2", "Quarters 1-2-1": "Veerandid 1-2-1", "Quarters 1-3": "Veerandid 1-3", "Quarters 2-1-1": "Veerandid 2-1-1", "Quarters 3-1": "Veerandid 3-1", "Quotation": "Tsitaat", "Reset to defaults": "Taasta vaikeväärtused", "Row": "Rida", "Saturation": "Värviküllastus", "Save": "Salvesta", "Save %type%": "Salvesta %type%", "Save Layout": "Salvesta paigutus", "Script": "Skript", "Search": "Otsi", "Search Style": "Otsingu stiil", "Section": "Sektsioon", "Select": "Vali", "Select a grid layout": "Vali võrgustiku paigutus", "Select an alternative logo, which will be used on small devices.": "Vali alternatiivne logo, mida näidatakse väiksematel seadmetel.", "Select header layout": "Vali päise paigutus", "Select Image": "Vali pilt", "Select the link style.": "Vali lingi stiil.", "Select the list style.": "Vali loetelu stiil.", "Select the search style.": "Vali otsingu stiil.", "Set a different text color for this item.": "Määra sellele kirjele teine teksti värv.", "Set light or dark color mode for text, buttons and controls.": "Vali teksti, nuppude ja juhtelementide jaoks hele või tume värvirežiim.", "Set the button size.": "Määra nupu suurus.", "Set the button style.": "Määra nupu stiil.", "Set the icon color.": "Määra ikooni värv.", "Set the link style.": "Määra lingi stiil.", "Set the maximum content width.": "Määra sisu maksimaalne laius.", "Set the video dimensions.": "Määra video mõõdud.", "Settings": "Seaded", "Show below slideshow": "Näita slaidiseansi all", "Show Content": "Näita sisu", "Show Labels": "Näita silte", "Show map controls": "Näita kaardi juhtelemente", "Show name fields": "Näita väljade nimesid", "Show Separators": "Näita eraldajaid", "Show the content": "Näita sisu", "Show the image": "Näita pilti", "Show the link": "Näita linki", "Show the title": "Näita pealkirja", "Show title": "Näita pealkirja", "Show Title": "Näita pealkirja", "Sidebar": "Külgriba", "Site": "Sait", "Size": "Suurus", "Slideshow": "Slaidiseanss", "Small (Phone Landscape)": "Väike (telefon püstises asendis)", "Social": "Sotsiaalmeedia", "Social Icons": "Sotsiaalmeedia ikoonid", "Split the dropdown into columns.": "Jaga rippmenüü kaheks veeruks", "Spread": "Jaota", "Style": "Stiil", "Subnav": "Alammenüü", "Subtitle": "Alampealkiri", "Switcher": "Lülitaja", "Syntax Highlighting": "Süntaksi esiletõstmine", "Table": "Tabel", "Table Head": "Tabeli päis", "Tablet Landscape": "Tahvel rõhtsas asendis", "Text": "Tekst", "Text Alignment": "Teksti joondus", "Text Color": "Teksti värv", "Text Style": "Teksti stiil", "Thirds": "Kolmandikud", "Thirds 1-2": "Kolmandikud 1-2", "Thirds 2-1": "Kolmandikud 2-1", "Thumbnail Width/Height": "Pisipildi laius/kõrgus", "Thumbnails": "Pisipildid", "Title": "Pealkiri", "title": "pealkiri", "Title Decoration": "Pealkirja kaunistus", "Title Style": "Pealkirja stiil", "Title Width": "Pealkirja laius", "To Top": "Üles", "Toolbar": "Tööriistariba", "Top": "Üleval", "Touch Icon": "Ikoon puuteekraanil", "Transition": "Üleminek", "Transparent Header": "Läbipaistev päis", "Type": "Tüüp", "Upload": "Laadi üles", "Upload a background image.": "Laadi taustapilt üles.", "Version %version%": "Versioon %version%", "Vertical Alignment": "Vertikaalne joondus", "Visibility": "Nähtavus", "Visible on this page": "Nähtav sellel lehel", "Visual": "Visuaalne", "Whole": "Terve", "Width": "Laius", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Laius ja kõrgus vahetatakse automaatselt vastavalt sellele, kas pilt on püstine või pikali.", "Width/Height": "Laius/kõrgus", "X-Large (Large Screens)": "X-Suur (Suured ekraanid)", "Zoom": "Suurendus" }theme/languages/nb_NO.json000064400000427367151666572140011542 0ustar00{ "- Select -": "- Velg -", "- Select Module -": "- Velg modul -", "- Select Position -": "- Velg posisjon -", "- Select Widget -": "- Velg widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" finnes allerede i biblioteket og vil overskrives ved lagring.", "%label% Position": "%label% Posisjon", "%name% already exists. Do you really want to rename?": "%name% finnes allerede. Er du sikker på du vil gi nytt navn?", "%post_type% Archive": "%post_type% arkiv", "%s is already a list member.": "%s er allerede medlem.", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s er slettet og kan ikke re-importeres. Kontakten må melde seg inn på nytt, for å komme på listen igjen.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% samling |||| %smart_count% samlinger", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% element |||| %smart_count% elementer", "%smart_count% File |||| %smart_count% Files": "%smart_count% fil |||| %smart_count% filer", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% fil valgt |||| %smart_count% filer valgt", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% ikon |||| %smart_count% ikoner", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% utforming |||| %smart_count% utforminger", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% nedlasting av mediafil feilet: |||| %smart_count% nedlastinger av mediafiler feilet", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% bilde |||| %smart_count% bilder", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% forhåndsinnstilling |||| %smart_count% forhåndsinnstillinger", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% stil |||| %smart_count% stiler", "%smart_count% User |||| %smart_count% Users": "%smart_count% bruker |||| %smart_count% brukere", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% er kun lastet fra den forrige valgte %taxonomy%.", "%type% Presets": "%type% forhåndsinnstillinger", "1 Column Content Width": "1 kolonne innholdsbredde", "a": "en", "About": "Om", "Accessed": "TIlgang", "Accordion": "Trekkspill", "Active": "Aktiv", "Active item": "Aktive elementer", "Add": "Legg til", "Add a colon": "Legg til et kolon", "Add a leader": "Legg til en leder", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Legg til en parallakse-effekt eller reparer bakgrunnen med hensyn til visningsområdet mens du ruller.", "Add a parallax effect.": "Legg til parallakse effekt.", "Add animation stop": "Legg til animasjonsstopp", "Add bottom margin": "Legg til bunnmarg", "Add clipping offset": "Legg til klippe avsats", "Add Element": "Legg til element", "Add extra margin to the button.": "Legg til en ekstra marg til knappen", "Add Folder": "Legg til mappe", "Add Item": "Legg til et element", "Add margin between": "Legg til margin mellom", "Add Media": "Legg til media", "Add Menu Item": "Legg til menyelement", "Add Module": "Legg til modul", "Add Row": "Legg til en rad", "Add Section": "Legg til en seksjon", "Add text after the content field.": "Legg til tekst etter innholdsfelt.", "Add text before the content field.": "Legg til tekst før innholdsfelt.", "Add to Cart": "Legg til handlekurv", "Add to Cart Link": "Legg i Handlekurv lenke", "Add to Cart Text": "Legg i Handlekurv tekst", "Add top margin": "Legg til toppmarg", "Adding the Logo": "Legg til logoen", "Adding the Search": "Legg til søkefeltet", "Adding the Social Icons": "Legg til sosiale ikoner", "Additional Information": "Ytterligere informasjon", "Address": "Adresse", "Advanced": "Avansert", "Advanced WooCommerce Integration": "Avansert WooCommerce integrasjon", "After": "Etter", "After Display Content": "Etter visning av innhold", "After Display Title": "Etter visning av tittel", "After Submit": "Etter innsending", "Alert": "Varsling", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Juster rullegardinmenyene til menyelementet eller navigasjonslinjen. Eventuelt, vis dem i en seksjon i full bredde kalt dropbar, vis et ikon for å indikere rullegardiner og la tekstelementer åpne ved å klikke og ikke holde musepekeren.", "Align image without padding": "Juster bilde uten utfylling", "Align the filter controls.": "Juster filterkontrollene.", "Align the image to the left or right.": "Juster bildet til venstre eller høyre.", "Align the image to the top or place it between the title and the content.": "Plassér bildet på toppen eller mellom tittelen og innholdet.", "Align the image to the top, left, right or place it between the title and the content.": "Juster bildet til toppen, venstre, høyre eller mellom tittel og innhold.", "Align the meta text.": "Juster metateksten.", "Align the navigation items.": "Juster navigasjons elementene.", "Align the section content vertically, if the section height is larger than the content itself.": "Juster seksjonsinnholdet vertikalt, hvis seksjonshøyden er større enn innholdet.", "Align the title and meta text as well as the continue reading button.": "Plassér tittelen og metateksten, i tillegg til les mer knappen", "Align the title and meta text.": "Plassér tittelen og metateksten.", "Align the title to the top or left in regards to the content.": "Plasser tittelen på toppen eller til venstre for innholdet.", "Align to navbar": "Juster til navigasjonslinjen", "Alignment": "Justering", "Alignment Breakpoint": "Justerings stoppunkt", "Alignment Fallback": "Justerings reserveløsning", "All backgrounds": "Alle bakgrunner", "All colors": "Alle farger", "All except first page": "Alle unntatt forside", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Alle bildet er lisensert under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, som betyr at du kan kopiere, redigere, distrubere og bruke bildene gratis, inkludert ved kommersiell bruk, uten egen tillatelse.", "All Items": "Alle elementer", "All layouts": "Alle utforminger", "All pages": "Alle sider", "All presets": "Alle forhåndsinnstillinger", "All styles": "Alle stiler", "All topics": "Alle emner", "All types": "Alle typer", "All websites": "Alle nettsider", "All-time": "Hele tiden", "Allow mixed image orientations": "Tillat mikset bildeorientering", "Allow multiple open items": "Tillat flere åpne elementer", "Alphabetical": "Alfabetisk", "Alphanumeric Ordering": "Alfanummerisk sortering", "Animate background only": "Animer kun bakgrunn", "Animate items": "Animer elementer", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animer egenskaper til spesifikke verdier. Legg til flere stopp for å definere start-, mellom- og sluttverdier langs animasjonssekvensen for hver eiendom. Eventuelt, spesifiser prosent for å plassere stoppene langs animasjonssekvensen. Oversett og skala kan ha valgfrie <code>%</code>, <code>vw</code> and <code>vh</code> -enheter.", "Animate strokes": "Animer strøk", "Animation": "Animering", "Animation Delay": "Forsinkelse animering", "Any": "Noen", "Any Joomla module can be displayed in your custom layout.": "Enhver Joomla modul kan vises i din egendefinerte utforming.", "Any WordPress widget can be displayed in your custom layout.": "Enhver Wordpress modul kan vises i din egendefinerte utforming.", "API Key": "API nøkkel", "Apply a margin between the navigation and the slideshow container.": "Velg en marg mellom navigasjonen og lysbildefremvisnings beholderen.", "Apply a margin between the overlay and the image container.": "Velg en marg mellom overlegg og bildeområdet.", "Apply a margin between the slidenav and the slider container.": "Velg en marg mellom glider-navigasjonen og glider-området.", "Apply a margin between the slidenav and the slideshow container.": "Velg en marg mellom glider-navigasjonen og lysbildefremvisningsområdet.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Bruk animasjon på elementer som kommer inn i visningsområdet. Gli-animasjoner kan tre i kraft med fast/fikset avsats eller ved 100% av elementets egen størrelse.", "Are you sure?": "Er du sikker?", "Article": "Artikkel", "Article Count": "Artikkel telling", "Article Order": "Artikkelsortering", "Articles": "Artikler", "Ascending": "Stigende", "Assigning Modules to Specific Pages": "Tilegne moduler til bestemte sider", "Assigning Templates to Pages": "Tilegne maler til sider", "Assigning Widgets to Specific Pages": "Tilegne widgets til bestemte sider", "Attach the image to the drop's edge.": "Legg bildet til hjørnekanten (drop's edge)", "Attention! Page has been updated.": "Merk! Siden har blitt oppdatert.", "Attribute Slug": "Attributt Slug", "Attribute Terms": "Attributtvilkår", "Attribute Terms Operator": "Attributtvilkår Operatør", "Attributes": "Attributter", "Author": "Skribent", "Author Archive": "Skribent arkiv", "Author Link": "Skribent lenke", "Auto-calculated": "Autokalkulert", "Autoplay": "Automatisk avspilling", "Average Daily Views": "Gjennomsnittlig daglige visninger", "Back": "Tilbake", "Background Color": "Bakgrunnsfarge", "Base Style": "Hovedstil", "Basename": "Basenavn", "Before": "Før", "Before Display Content": "Før visning av innhold", "Behavior": "Oppførsel", "Blend Mode": "Blandemodus", "Block Alignment": "Blokkjustering", "Block Alignment Breakpoint": "Blokkjusterings stoppunkt", "Block Alignment Fallback": "Blokkjustering reserveløsning", "Blog": "Blogg", "Blur": "Uskarphet", "Border": "Kantlinje", "Bottom": "Bunn", "Box Decoration": "Boks dekorering", "Box Shadow": "Boksskygge", "Breadcrumbs": "Brødsmuler", "Breadcrumbs Home Text": "Brødsmuler hjemtekst", "Breakpoint": "Stoppunkt", "Builder": "Sidebygger", "Button": "Knapp", "Button Margin": "Knappemarg", "Button Size": "Knappestørrelse", "Buttons": "Knapper", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Som standard, felter av relaterte kilder med et element er tilgjengelig for kartlegging. Velg en relatert kilde som har flere elementer for kartlegging av dens felter.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "Som standard blir bildene lastet lat. Aktiver ivrig lasting for bilder i den første visningsporten.", "Cache": "Mellomlager", "Campaign Monitor API Token": "Campaign Monitor API nøkkel", "Cancel": "Avbryt", "Caption": "Bildetekst", "Cart Quantity": "Handlekurv mengde", "Categories": "Kategorier", "Categories are only loaded from the selected parent category.": "Kategorier er kun lastet fra den forrige valgte kategorien.", "Categories Operator": "Kategorier Operatør", "Category": "Kategori", "Category Blog": "Kategoriblogg", "Category Order": "Kategori sortering", "Center": "Midtstill", "Center columns": "Midtstill kolonner", "Center grid columns horizontally and rows vertically.": "Midtstill rutenettkolonner horisontalt og rader vertikalt.", "Center horizontally": "Midtstill horisontalt", "Center rows": "Midtstill rader", "Center the active slide": "Midstill the aktive lysbildet", "Center the content": "Midtstill innholdet", "Center the module": "Midtstill modulen", "Center the title and meta text": "Midtstill tittel og metatekst", "Center the title, meta text and button": "Midtstill tittelen, metateksten og knappen", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Midtstill-, venstre- og høyrejustering kan avhenge av stoppunkt og kreve et reserveløsning.", "Changed": "Endret", "Changelog": "Endringslogg", "Child %taxonomies%": "Under%taxonomies%", "Child Categories": "Underkategorier", "Child Tags": "Under emneord", "Child Theme": "Undermal", "Choose a divider style.": "Velg en deler-stil", "Choose a map type.": "Velg en karttype.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Velg om parallaksen skal være avhengig av rulleposisjonen eller en animasjon, som brukes når lysbildet er aktivt.", "Choose between a vertical or horizontal list.": "Velg mellom en vertikal eller horisontal liste.", "Choose between an attached bar or a notification.": "Velg mellom en vedlagt linje eller en beskjed.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Velg mellom forrige/neste eller numerisk paginering. Numerisk paginering er ikke tilgjengelig for frittstående sider.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Velg mellom forrige/neste eller numerisk paginering. Numerisk paginering er ikke tilgjengelig for frittstående poster.", "Choose Font": "Velg skrifttype", "Choose products of the current page or query custom products.": "Velg produkter fra gjeldende side eller spør etter egendefinerte produkter.", "Choose the icon position.": "Velg ikonplasseringen", "Choose the page to which the template is assigned.": "Velg siden som malen er tildelt.", "City or Suburb": "Sted", "Class": "Klasse", "Classes": "Klasser", "Clear Cache": "Tøm mellomlager", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Tøm mellomlagrede bilder og tilknyttede eiendeler. Bilder som endrer størrelse er lagret i malens mellomlager mappe. Disse lastes opp på nytt med samme navn i denne mappen. Mellomlagermappen må derfor tømmes for at disse endringene skal tre i kraft.", "Click on the pencil to pick an icon from the icon library.": "Klikk på blyanten for å velge et ikon fra ikonbiblioteket.", "Close": "Lukk", "Cluster Icon (< 10 Markers)": "Klyngeikon (< 10 markører)", "Cluster Icon (< 100 Markers)": "Klyngeikon (< 100 markører)", "Cluster Icon (100+ Markers)": "Klyngeikon (100+ markører)", "Clustering": "Klynger", "Code": "Kode", "Collapsing Layouts": "Skjul utforminger", "Collections": "Samlinger", "Color": "Farge", "Column": "Kolonne", "Column 1": "Kolonne 1", "Column 2": "Kolonne 2", "Column 3": "Kolonne 3", "Column 4": "Kolonne 4", "Column 5": "Kolonne 5", "Column Gap": "Mellomrom kolonne", "Column Layout": "Kolonneutforming", "Columns": "Kolonner", "Columns Breakpoint": "Kolonnens stoppunkt.", "Comment Count": "Kommentar telling", "Comments": "Kommentarer", "Components": "Komponenter", "Condition": "Tilstand", "Consent Button Style": "Samtykke knappestil", "Consent Button Text": "Samtykke knappetekst", "Contact": "Kontakt", "Contacts Position": "Kontaktposisjon", "Container Padding": "Beholder utfylling", "Container Width": "Beholder bredde", "Content": "Innhold", "content": "innhold", "Content Alignment": "Innholdsjustering", "Content Length": "Lengde innhold", "Content Margin": "Marg innhold", "Content Parallax": "Innholdsparallakse", "Content Type Title": "Innholdstype tittel", "Content Width": "Innholdsbredde", "Controls": "Kontroller", "Convert": "Konverter", "Convert to title-case": "Konverter til store bokstaver", "Cookie Banner": "Informasjonskapsel banner", "Cookie Scripts": "Informasjonskapsel skript", "Coordinates": "Koordinater", "Copy": "Kopier", "Countdown": "Nedtelling", "Country": "Land", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opprett en generell utforming for denne sidetyper. Start med en ny utforming og velg fra samlingen med klar-til-bruk elementer eller bla gjennom biblioteket og start med en av de ferdigbygde utformingene.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opprett en utforming for bunnteksten for alle sider. Start med en ny utforming og velg fra samlingen med klar-til-bruk elementer eller bla gjennom biblioteket og start med en av de ferdigbygde utformingene.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Lag et oppsett for rullegardinmenyen for menyelementet. Start med en ny layout og velg fra en samling klare til bruk elementer eller bla gjennom layoutbiblioteket og start med en av de forhåndsbygde layoutene.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opprett en utforming for denne modulen og publiser den i topp eller bunn posisjonen. Start med en ny utforming og velg fra samlingen med klar-til-bruk elementer eller bla gjennom biblioteket og start med en av de ferdigbygde utformingene.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opprett en utforming for denne widgeten og publiser den i topp eller bunn området. Start med en ny utforming og velg fra samlingen med klar-til-bruk elementer eller bla gjennom biblioteket og start med en av de ferdigb", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Lag et oppsett. Start med en ny layout og velg fra en samling klare til bruk elementer eller bla gjennom layoutbiblioteket og start med en av de forhåndsbygde layoutene.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opprett en individuell utforming for denne siden. Start med en ny utforming og velg fra samlingen med klar-til-bruk elementer eller bla gjennom biblioteket og start med en av de ferdigbygde utformingene.", "Created": "Opprettet", "Creating a New Module": "Opprett en ny modul", "Creating a New Widget": "Opprett en ny widget", "Creating Accordion Menus": "Opprett trekkspill menyer", "Creating Advanced Module Layouts": "Hvordan lage avanserte modul utforminger", "Creating Advanced Widget Layouts": "Hvordan lage avanserte widget utforminger", "Creating Advanced WooCommerce Layouts": "Hvordan lage avanserte WooCommerce utforminger", "Creating Menu Dividers": "Opprett menyskillere", "Creating Menu Heading": "Opprett menyoverskrift", "Creating Menu Headings": "Opprett menyoverskrifter", "Creating Navbar Text Items": "Opprett menylinje tekstelementer", "Critical Issues": "Kritiske feil", "Critical issues detected.": "Kritiske feil funnet.", "Cross-Sell Products": "Kryss-salg produkter", "Curated by <a href>%user%</a>": "Kuratert av <a href>%user%</a>", "Current Layout": "Nåværende utforming", "Current Style": "Nåværende stil", "Current User": "Nåværende bruker", "Custom": "Egendefinert", "Custom %post_type%": "Egendefinert %post_type%", "Custom %post_types%": "Egendefinerte %post_types%", "Custom %taxonomies%": "Egendefinerte %taxonomies%", "Custom %taxonomy%": "Egendefinert %taxonomy%", "Custom Article": "Egendefinert artikkel", "Custom Articles": "Egendefinerte artikler", "Custom Categories": "Egendefinerte kategorier", "Custom Category": "Egendefinert kategori", "Custom Code": "Egendefinert kode", "Custom Fields": "Egendefinerte felter", "Custom Menu Items": "Egendefinerte menyelementer", "Custom Query": "Egendefinert spørring", "Custom Tag": "Egendefinert emneord", "Custom Tags": "Egendefinerte emneord", "Custom User": "Egendefinert bruker", "Custom Users": "Egendefinerte brukere", "Customization": "Tilpasninger", "Customization Name": "Navn på tilpasning", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Tilpass kolonnebreddene i den valgte utformingen og angi kolonnesortering. Endring av utformingen vil nullstille tidligere tilpasninger.", "Date": "Dato", "Date Archive": "Dato arkiv", "Date Format": "Datoformat", "Day Archive": "Dag arkiv", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Dekorer overskriften med en skillelinje, kule eller en linje som er vertikalt midstilt til overskriften.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Dekorer tittelen med en skillelinje, kule eller en linje som er vertikalt midtstilt til overskriften.", "Decoration": "Dekorering", "Default": "Standard", "Define a background style or an image of a column and set the vertical alignment for its content.": "Definer en bakgrunnsstil eller et bilde til en kolonne og angi den vertikale justeringen av innholdet.", "Define a name to easily identify the template.": "Definer et navn for enkelt å identifisere malen.", "Define a name to easily identify this element inside the builder.": "Definer et navn som enkelt kan identifisere dette element i sidebyggeren.", "Define a unique identifier for the element.": "Definer en unik identifikator til elementet", "Define an alignment fallback for device widths below the breakpoint.": "Definer en justeringsreserve for enhetsbredder under stoppunktet.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Definer en eller flere attributter for elementet. Separer attributt navn og verdi med <code>=</code>. En attributt per linje.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Definer ett eller flere klassenavn for elementet. Skill flere klasser med mellomrom.", "Define the alignment in case the container exceeds the element max-width.": "Definer justering i tilfelle beholderen overskrider elementets maks-bredde.", "Define the alignment of the last table column.": "Definer justeringen av den siste tabellkolonnen.", "Define the device width from which the alignment will apply.": "Definer enhetsbredden fra hvor justeringen vil gjelde.", "Define the device width from which the max-width will apply.": "Definer enhetsbredden fra hvor innholdets maks bredde vil gjelde.", "Define the layout of the form.": "Definer utforminger for dette skjemaet.", "Define the layout of the title, meta and content.": "Definer utforminger for tittel, meta og innhold.", "Define the order of the table cells.": "Definer rekkefølgen på tabellrutene.", "Define the padding between items.": "Definér utfylling mellom elementene.", "Define the padding between table rows.": "Definér utfylling mellom tabellrader.", "Define the title position within the section.": "Definer tittelposisjonen innenfor denne seksjonen.", "Define the width of the content cell.": "Definer bredden på innholdsfeltet.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definer bredden til filternavigasjonen. Velg mellom prosent og fast bredde, eller utvid kolonner til bredden av innholdet.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definer bredden til bildet i en rute. Velg mellom prosent og fast bredde eller utvid kolonnen til bredden av innholdet.", "Define the width of the meta cell.": "Definer bredden på metafeltet.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definer bredden til navigasjonen. Velg mellom prosent og fast bredde eller utvid kolonnen til bredden av dens innhold.", "Define the width of the title cell.": "Definer bredden på tittelfelt.", "Define the width of the title within the grid.": "Definer bredden til tittelen i en rute.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definer bredden til tittelen i en rute. Velg mellom prosent og fast bredde eller utvid kolonnen til bredden av innholdet.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Definer om bredden til glider-elementene skal være fast eller om de skal automatisk utvides etter deres innholds bredde.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Definér om minityrbildene skal pakkes inn i flere linjer eller ikke hvis beholderen er for liten.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Forsinke elementenes animasjon i millisekunder. F.eks. <code>200</code>", "Delete": "Fjern", "Delete animation stop": "Slett animasjonsstopp", "Descending": "Synkende", "description": "beskrivelse", "Description": "Beskrivelse", "Description List": "Beskrivelsesliste", "Desktop": "Datamaskin", "Determine how the image or video will blend with the background color.": "Bestem hvordan bildet eller videoen vil blande seg med bakgrunnsfargen.", "Determine how the image will blend with the background color.": "Bestem hvordan bildet vil blande seg med bakgrunnsfargen.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Bestem om bildet vil tilpasse sidedimensjonene ved å klippe det eller ved å fylle de tomme områdene med bakgrunnsfargen.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Bestem om bildet vil tilpasse seksjonsdimensjonene ved å klippe det eller ved å fylle de tomme områdene med bakgrunnsfargen.", "Dialog Layout": "Dialogoppsett", "Dialog Logo (Optional)": "Dialoglogo (valgfritt)", "Dialog Push Items": "Dialog Push-elementer", "Dialog Toggle": "Dialogboks", "Direction": "Retning", "Dirname": "Dirnavn", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Deaktiver autostart, start videoen med en gang eller start videoen når den kommer i visningsområdet", "Disable element": "Avpubliser element", "Disable Emojis": "Deaktiver emojier", "Disable infinite scrolling": "Deaktiver ubegrenset rulling", "Disable item": "Avpubliser element", "Disable row": "Avpubliser rad", "Disable section": "Avpubliser seksjon", "Disable template": "Deaktiver mal", "Disable wpautop": "Deaktiver wpautop", "Disabled": "Deaktivert", "Discard": "Forkast", "Display": "Skjerm", "Display a divider between sidebar and content": "Vis en skiller mellom sidekolonnen og innholdet", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Vis en meny ved å velge den posisjonen den skal vises i. Publiser f.eks. hovedmenyen i navbar-posisjon og en alternativ meny i mobilposisjon.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Vis et søke ikon til venstre eller høyre. Ved å velge ikon til høyre kan det trykkes på for å søke.", "Display header outside the container": "Vis toppteksten på utsiden av beholderen", "Display icons as buttons": "Vis ikoner som knapper", "Display on the right": "Vis på høyre side", "Display overlay on hover": "Vis overlegg ved markørsveving", "Display products based on visibility.": "Vis produkter basert på synlighet.", "Display the breadcrumb navigation": "Vis brødsmulenavigering", "Display the cart quantity in brackets or as a badge.": "Vis vognmengden i parentes eller som et merke.", "Display the content inside the overlay, as the lightbox caption or both.": "Vis tittelen i overlegget, som lysboksens bildetekst eller begge.", "Display the content inside the panel, as the lightbox caption or both.": "Vis tittelen i panelet, som lysboksens bildetekst eller begge.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Vis utdragsfeltet hvis det har innhold, ellers innholdet. For å bruke et utdragsfelt, lag et egendefinert felt med navnet utdrag.", "Display the excerpt field if it has content, otherwise the intro text.": "Vis utdragsfeltet hvis det har innhold, ellers introteksten.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Vis utdragsfeltet hvis det har innhold, ellers introteksten. For å bruke et utdragsfelt, lag et egendefinert felt med navnet utdrag.", "Display the first letter of the paragraph as a large initial.": "Vis den første bokstaven i avsnittet som en stor initial.", "Display the image only on this device width and larger.": "Vis bildet kun på denne enhetsbredden og større.", "Display the image or video only on this device width and larger.": "Vis bildet eller videoen kun på denne enhetsbredden eller større.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Vise kartkontroller og angi om kartet skal kunne zoomes eller dras med musehjulet eller ved berøring.", "Display the meta text in a sentence or a horizontal list.": "Vis metateksten i en setning eller som en horisontal liste.", "Display the module only from this device width and larger.": "Vis modulen kun for denne enhetsbredden og større.", "Display the navigation only on this device width and larger.": "Vis navigasjonen kun på denne enhetsbredden og større.", "Display the parallax effect only on this device width and larger.": "Vis parallakse effekten kun på denne og større enheter.", "Display the popover on click or hover.": "Vis sprettopp ved klikk eller markørsveving.", "Display the section title on the defined screen size and larger.": "Vis seksjonstittelen på den definerte skjermstørrelsen eller større.", "Display the short or long description.": "Vis den korte eller lange beskrivelsen.", "Display the slidenav only on this device width and larger.": "Vis lsybildenavigasjonen kun på denne enhetens bredde og større.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Vis lysbildenavigasjonen kun på utsiden på denne enhetens bredde og større. Ellers vises den på innsiden.", "Display the title in the same line as the content.": "Vis tittelen på samme linje som innholdet.", "Display the title inside the overlay, as the lightbox caption or both.": "Vis tittelen i overlegget, som lysboksens bildetekst eller begge.", "Display the title inside the panel, as the lightbox caption or both.": "Vis tittelen i panelet, som lysboksens bildetekst eller begge.", "Displaying the Breadcrumbs": "Vis brødsmuler", "Displaying the Excerpt": "Vis utdraget", "Displaying the Mobile Header": "Vis mobil topptekst", "Divider": "Deler", "Do you really want to replace the current layout?": "Vil du erstatte gjeldende utforming?", "Do you really want to replace the current style?": "Er du sikker på at du vil erstatte den gjeldende utformingen?", "Documentation": "Dokumentasjon", "Don't wrap into multiple lines": "Ikke pakk inn over flere linjer", "Double opt-in": "Dobbel bekreftelse", "Download": "Last ned", "Download All": "Last ned alle", "Download Less": "Last ned Less", "Drop Cap": "Innfelt forbokstav", "Dropdown": "Nedtrekk", "Dropdown Alignment": "Rullegardinjustering", "Dropdown Columns": "Rullegardinkolonner", "Dropdown Padding": "Dropdown-polstring", "Dropdown Width": "Bredde på rullegardinmenyen", "Dynamic": "Dynamisk", "Dynamic Condition": "Dynamisk tilstand", "Dynamic Content": "Dynamisk innhold", "Easing": "Lettelse/easing", "Edit": "Rediger", "Edit %title% %index%": "Rediger %title% %index%", "Edit Items": "Rediger elementer", "Edit Layout": "Rediger utforming", "Edit Menu Item": "Rediger menypunkter", "Edit Module": "Rediger modul", "Edit Settings": "Rediger innstillinger", "Edit Template": "Rediger mal", "Email": "E-post", "Enable a navigation to move to the previous or next post.": "Aktiver en navigasjon for å navigere mellom forrige og neste post.", "Enable autoplay": "Aktiver automatisk avspilling", "Enable click mode on text items": "Aktiver klikkmodus på tekstelementer", "Enable drop cap": "Aktiver innfelt forbokstav.", "Enable dropbar": "Aktiver dropbar", "Enable filter navigation": "Aktiver filtreringsnavigasjon", "Enable lightbox gallery": "Aktiver lysboks galleri", "Enable map dragging": "Aktiver kartdraing", "Enable map zooming": "Aktiver kart-zooming", "Enable marker clustering": "Aktiver markørklynger", "Enable masonry effect": "Aktiver murgalleri effekt", "End": "Slutt", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Skriv en kommaseparert liste av etiketter, for eksempel, <code>blue, white, black</code>.", "Enter a decorative section title which is aligned to the section edge.": "Skriv inn en dekorativ seksjonstittel som justeres til seksjonens hjørne.", "Enter a subtitle that will be displayed beneath the nav item.": "Skriv inn en undertittel som vil bli vist under menypunktet.", "Enter a table header text for the content column.": "Skriv inn en tabelloverskrift for innholdskolonnen.", "Enter a table header text for the image column.": "Skriv inn en tabelloverskrift for bildekolonnen.", "Enter a table header text for the link column.": "Skriv inn en tabelloverskrift for lenkekolonnen.", "Enter a table header text for the meta column.": "Skriv inn en tabelloverskrift for metakolonnen.", "Enter a table header text for the title column.": "Skriv inn en tabelloverskrift for tittelkolonnen.", "Enter a width for the popover in pixels.": "Skriv inn bredden for sprettoppen i pixler.", "Enter an optional footer text.": "Skriv en alternativ bunntekst.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Skriv inn en valgfri tekst for tittel-egenskap av linken, som vil vises ved markørsveving.", "Enter labels for the countdown time.": "Skriv inn etiketter til nedtellingstiden.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Skriv en lenke til din sosial profil. Et passende <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">Uikit ikon</a> vil vises automatisk, hvis tilgjengelig. Lenker til e-postadresser og telefonnummer, som mailto:info@eksempel.no eller tel:+4712345678.", "Enter or pick a link, an image or a video file.": "Skriv inn eller velg en lenke, et bilde eller en video.", "Enter the author name.": "Skriv inn skribentens navn.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Skriv inn informasjonskapsels samtykke beskjeden. Standard beskjeden vises kun som et forslag. Vennligst endre den i forhold til ditt lands lover og regler.", "Enter the horizontal position of the marker in percent.": "Skriv inn horisontal posisjon av markøren i prosent.", "Enter the image alt attribute.": "Skriv inn bildets alternativ tekst.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Skriv inn en erstatningsstreng som kan inneholde referanser. Hvis feltet er tomt vil søketreffene bli fjernet.", "Enter the text for the button.": "Skriv inn teksten til knappen.", "Enter the text for the home link.": "Skriv inn teksten for hjemlenken.", "Enter the text for the link.": "Skriv inn lenketeksten", "Enter the vertical position of the marker in percent.": "Skriv inn vertikal posisjon av markøren i prosent.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Skriv inn din <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID for å aktivere sporing. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP Anonymisering</a> kan redusere sporings nøyaktigheten.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Legg inn din <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API nøkkel for å bruke Google Maps istedenfor OpenStreetMap. Det aktiverer også flere alternativer for å endre fargene på kartene.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Skriv inn din <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API nøkkel for å bruke nyhetsbrev elementet.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>,<code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Skriv inn din egen tilpassede CSS. Følgende velgere får automatisk prefiks for dette elementet: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Skriv inn din egen CSS-kode. De følgende selektorene vil bli prefiksert automatisk til dette elementet: <code>.el-section</code>", "Error": "Feil", "Error 404": "Feil 404", "Error creating folder.": "Det oppstod en feil under oppretting av mappe.", "Error deleting item.": "Det oppstod en feil ved sletting av element.", "Error renaming item.": "Det oppstod en feil endring av navn på element.", "Error: %error%": "Feil: %error%", "Events": "Hendelser", "Excerpt": "Utdrag", "Exclude cross sell products": "Ekskluder kryss-salg produkter", "Exclude upsell products": "Ekskluder mersalg produkter", "Expand height": "Utvid høyden", "Expand One Side": "Utvid på en side", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Utvid bredden til venstre eller høyre på den ene siden, mens den motsatte siden beholder begrensningene angitt i den maksimale bredden.", "Expand width to table cell": "Utvid bredden til tabellcellen", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Eksporter alle temainnstillinger og importer dem til en annen installasjon. Dette inkluderer ikke innhold fra layout-, stil- og elementbibliotekene eller malbyggeren.", "Export Settings": "Eksporter innstillinger", "Extend all content items to the same height.": "Utvid alle innholdselementer til lik høyde.", "Extension": "Utvidelse", "External Services": "Eksterne tjenester", "Extra Margin": "Ekstra marg", "Favicon": "Favikon", "Fax": "Faks", "Featured Articles": "Fremhevede artikler", "Featured Articles Order": "Utvalgte artikler Rekkefølge", "Featured Image": "Fremhevet bilde", "Fields": "Felter", "Fifths": "Femdeler", "Fifths 1-1-1-2": "Femdeler 1-1-1-2", "Fifths 1-1-3": "Femdeler 1-1-3", "Fifths 1-3-1": "Femdeler 1-3-1", "Fifths 1-4": "Femdeler 1-4", "Fifths 2-1-1-1": "Femdeler 2-1-1-1", "Fifths 2-3": "Femdeler 2-3", "Fifths 3-1-1": "Femdeler 3-1-1", "Fifths 3-2": "Femdeler 3-2", "Fifths 4-1": "Femdeler 4-1", "File": "Fil", "Files": "Filer", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtrer %post_types% etter forfattere. Bruk <kbd>shift</kbd>- eller <kbd>ctrl/cmd</kbd>-tasten for å velge flere forfattere. Still inn den logiske operatoren til å samsvare med eller ikke samsvare med de valgte forfatterne.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Filtrer %post_types% etter termer. Bruk <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd>-tasten for å velge flere termer. Sett den logiske operatoren til å samsvare med minst ett av termene, ingen av termene eller alle termene.", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtrer artikler etter forfattere. Bruk <kbd>shift</kbd>- eller <kbd>ctrl/cmd</kbd>-tasten for å velge flere forfattere. Still inn den logiske operatoren til å samsvare med eller ikke samsvare med de valgte forfatterne.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Filtrer artikler etter kategorier. Bruk <kbd>shift</kbd>- eller <kbd>ctrl/cmd</kbd>-tasten for å velge flere kategorier. Still inn den logiske operatoren til å matche eller ikke samsvare med de valgte kategoriene.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Filtrer artikler etter tagger. Bruk <kbd>shift</kbd>- eller <kbd>ctrl/cmd</kbd>-tasten for å velge flere tagger. Still inn den logiske operatoren til å matche minst én av taggene, ingen av taggene eller alle taggene.", "Filter by Authors": "Filtrer etter forfattere", "Filter by Categories": "Filtrer etter kategorier", "Filter by Tags": "Filtrer etter emneord", "Filter by Term": "Filtrer etter term", "Filter by Terms": "Filtrer etter vilkår", "Filter products by attribute using the attribute slug.": "Filtrer produkter etter attributt ved å bruke attributtet slug.", "Filter products by categories using a comma-separated list of category slugs.": "Filtrer produkter etter kategorier ved hjelp av en kommadelt liste over kategorisnegler.", "Filter products by tags using a comma-separated list of tag slugs.": "Filtrer produkter etter tagger ved hjelp av en kommaseparert liste over tagsnegler.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "Filtrer produkter etter termer for det valgte attributtet ved å bruke en kommaseparert liste over attributtermslugs.", "Filter products using a comma-separated list of IDs.": "Filtrer produkter ved hjelp av en kommadelt liste over IDer.", "Filter products using a comma-separated list of SKUs.": "Filtrer produkter ved hjelp av en kommadelt liste over SKU-er.", "Finite": "Begrenset", "First name": "Fornavn", "First page": "Første side", "Fix the background with regard to the viewport.": "Fest bakgrunnen med hensyn til visningsområdet.", "Fixed-Inner": "Fast-indre", "Fixed-Left": "Fast-venstre", "Fixed-Outer": "Fast-ytre", "Fixed-Right": "Fast-høyre", "Folder created.": "Mappe opprettet.", "Folder Name": "Mappenavn", "Font Family": "Skriftfamilie", "Footer": "Bunntekst", "Force a light or dark color for text, buttons and controls on the image or video background.": "Tving lys eller mørk farge for tekst, knapper og kontroller på bilde- eller videobakgrunn.", "Force left alignment": "Tving venstrejustering", "Form": "Skjema", "Format": "Formatering", "Full Article Image": "Full artikkel bilde", "Full Article Image Alt": "Full artikkel bilde alt", "Full Article Image Caption": "Full artikkel bildetekst", "Full width button": "Fullbredde knapp", "Gallery": "Galleri", "Gallery Thumbnail Columns": "Galleri-miniatyrkolonner", "Gap": "Mellomrom", "General": "Generelt", "Google Fonts": "Google skrifttyper", "Gradient": "Gradering", "Grid": "Rutenett", "Grid Breakpoint": "Rutenett stoppunkt", "Grid Column Gap": "Mellomrom kolonne i rutenett", "Grid Row Gap": "Mellomrom rad i rutenett", "Grid Width": "Rutenettbredde", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Grupperer elementer i sett. Antallet elementer i et sett er avhengig av den desfinerte elementbredden. F.eks. <i>33%</i> betyr at hvert sett inneholder 3 elementer.", "Guest User": "Gjestebruker", "Halves": "Halvdel", "Header": "Topptekst", "Heading": "Overskrift", "Headline": "Overskrift", "Headline styles differ in font size and font family.": "Overskrift-stiler varierer i skriftstørrelse, men kan også komme med en forhåndsdefinert farge, størrelse og skrift.", "Height": "Høyde", "hex / keyword": "hex / nøkkelord", "Hide and Adjust the Sidebar": "Skjul og rediger sidekolonnen", "Hide marker": "Skjul markør", "Hide Term List": "Skjul vilkårliste", "Hide title": "Skjul tittel", "Highlight the hovered row": "Fremhev markørsvevingsraden", "Hits": "Treff", "Home": "Hjem", "Home Text": "Hjem-tekst", "Horizontal Center": "Midtstill horisontalt", "Horizontal Center Logo": "Horisontal midtstilt logo", "Horizontal Justify": "Horisontal begrunnelse", "Horizontal Left": "Venstrejustert horisontalt", "Horizontal Right": "Høyrejustert horisontalt", "Hover Box Shadow": "Markørsveving boksskygge", "Hover Image": "Markørsveving bilde", "Hover Style": "Markørsveving stil", "Hover Transition": "Markørsveving overgang", "HTML Element": "HTML element", "Icon": "Ikon", "Icon Color": "Ikonfarge", "Icon Width": "Ikonbredde", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Hvis en seksjon eller en rad har egen maksimumsbredde, kan en av sidene utvides til venstre eller høyre. Standard utfylling kan fjernes på den utvidede siden.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Hvis flere maler er tilegnet til den samme visningen, vil malen som kommer først bli brukt. Endre rekkefølgene med dra og slipp.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Lager du en flerspråkelig nettside, ikke velg meny her. Bruk Joomla! modulvelger istedenfor. Da kan du publisere korrekt meny til korrekt språk.", "Ignore %taxonomy%": "Ignorer %taxonomy%", "Image": "Bilde", "Image Alignment": "Bildejustering", "Image Alt": "Bilde alt", "Image and Title": "Bilde og tittel", "Image Attachment": "Bildevedlegg", "Image Box Shadow": "Bildeboksskygge", "Image Effect": "Bildeeffekt", "Image Height": "Bildehøyde", "Image Margin": "Bildemarg", "Image Orientation": "Bilde orientering", "Image Position": "Bildeposisjon", "Image Size": "Bildestørrelse", "Image Width": "Bilde bredde", "Image Width/Height": "Bilde bredde/høyde", "Image/Video": "Bilde/video", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Bilder kan ikke mellomlagres. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Endre rettighetene</a> til <code>cache</code> mappen i <code>yootheme</code> mal-mappen, slik at serveren kan skrive til den.", "Import Settings": "Importer innstillinger", "Inherit transparency from header": "Arve gjennomsiktigheten fra toppteksten", "Inject SVG images into the markup so they adopt the text color automatically.": "Sett inn SVG-bilder i markeringen slik at de automatisk tar i bruk tekstfargen.", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Injiser SVG-bilder i sideoppslaget, slik at de enkelt kan stileres med CSS.", "Inline SVG": "På linje SVG", "Inline SVG logo": "På linje SVG logo", "Inline title": "På linje tittel", "Input": "Innmating", "Insert at the bottom": "Sett inn på bunnen", "Insert at the top": "Sett inn på toppen", "Inset": "Innfelt", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "I stedet for å bruke et egendefinert bilde, kan du klikke på blyanten for å plukke et ikon fra ikonbiblioteket.", "Intro Image": "Introbilde", "Intro Image Alt": "Introbilde alt", "Intro Image Caption": "Introbilde bildetekst", "Intro Text": "Introtekst", "Inverse Logo (Optional)": "Omvendt logo (valgfri)", "Inverse style": "Omvendt stil", "Inverse the text color on hover": "Omvendt tekstfarge ved markørsveving", "Invert lightness": "Inverter lyshet", "IP Anonymization": "IP anonymisering", "Issues and Improvements": "Feil og forbedringer", "Item": "Element", "Item Count": "Element telling", "Item deleted.": "Element slettet.", "Item renamed.": "Element endret navn.", "Item uploaded.": "Element opplastet.", "Item Width": "Elementbredde", "Item Width Mode": "Elementbredde modus", "Items": "Elementer", "Ken Burns Effect": "Ken Burns effekt", "Label": "Etikett", "Label Margin": "Etikettmarg", "Labels": "Etiketter", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Landskaps og portrett bilder er midtstilt i rutenettet. Bredden og høyden vil bli endret når bildestørrelsen endres.", "Large (Desktop)": "Stor (skrivebord)", "Large padding": "Stor polstring", "Large Screen": "Stor skjerm", "Large Screens": "Store skjermer", "Larger padding": "Større utfylling", "Larger style": "Større stil", "Last 24 hours": "Siste 24 timer", "Last 30 days": "Siste 30 dager", "Last 7 days": "Siste 7 dager", "Last Column Alignment": "Justering av siste kolonne", "Last Modified": "Sist endret", "Last name": "Etternavn", "Last visit date": "Sist besøkt dato", "Layout": "Utforming", "Layout Media Files": "Utforming mediafiler", "Lazy load video": "Lat lasting av videoer", "Learning Layout Techniques": "Lær oppsett teknikker", "Left": "Venstre", "Library": "Bibliotek", "Lightbox": "Lysboks", "Lightness": "Lyshet", "Limit": "Begrens", "Limit by Categories": "Begrens etter kategorier", "Limit by Date Archive Type": "Begrens etter dato arkiv type", "Limit by Language": "Begrens etter språk", "Limit by Page Number": "Begrens etter sidenummer", "Limit by Products on sale": "Begrens etter produkter på salg", "Limit by Tags": "Begrens etter emneord", "Limit by Terms": "Begrens etter vilkår", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Begrens innholdslengden til antall tegn. Alle HTML elementer vil bli fjernet.", "Limit the number of products.": "Begrens antallet produkter", "Link": "Lenke", "link": "lenke", "Link card": "Lenke kort", "Link image": "Lenke bilde", "Link overlay": "Lenke overlegg", "Link panel": "Lenke panel", "Link Parallax": "Lenkeparallakse", "Link Style": "Lenkestil", "Link Target": "Lenke målvindu", "Link Text": "Lenketekst", "Link the image if a link exists.": "Lenk bildet hvis en lenke eksisterer.", "Link the title if a link exists.": "Lenk tittelen hvis en lenke eksisterer.", "Link the whole card if a link exists.": "Lenk hele kortet hvis en lenke eksisterer.", "Link the whole overlay if a link exists.": "Lenk hele overlegget hvis en lenke eksisterer.", "Link the whole panel if a link exists.": "Lenk hele panelet hvis en lenke eksisterer.", "Link title": "Lenketittel", "Link Title": "Lenketittel", "Link to redirect to after submit.": "Videresending til lenke etter innsending.", "List": "Liste", "List All Tags": "Liste alle emneord", "List Item": "Listeelement", "List Style": "Listestil", "Load Bootstrap": "Last Bootstrap", "Load image eagerly": "Last inn bildet ivrig", "Load jQuery": "Last JQuery", "Load product on sale only": "Last kun produkt på salg", "Load products on sale only": "Last kun produkter på salg", "Loading": "Laster", "Loading Layouts": "Laster oppsett", "Location": "Lokasjon", "Logo Image": "Bildelogo", "Logo Text": "Logotekst", "Loop video": "Sløyfe video (Vises hele tiden)", "Mailchimp API Token": "Mailchimp API nøkkel", "Main Section Height": "Hovedseksjonshøyde", "Main styles": "Hovedstiler", "Make SVG stylable with CSS": "Gjør SVG stilbare med CSS", "Make the column or its elements sticky only from this device width and larger.": "Gjør kolonnen eller dens elementer klissete bare fra denne enhetens bredde og større.", "Managing Menus": "Administrer menyer", "Managing Modules": "Administrer moduler", "Managing Sections, Rows and Elements": "Administrer seksjoner, rader og elementer", "Managing Templates": "Administrer maler", "Managing Widgets": "Administrer widgeter", "Map": "Kart", "Mapping Fields": "Kartlegging av felter", "Margin": "Marg", "Margin Top": "Toppmarg", "Marker": "Markør", "Marker Color": "Markørfarge", "Marker Icon": "Markørikon", "Masonry": "Murgalleri", "Match (OR)": "Samsvarer (OR)", "Match content height": "Samsvar innholdets høyde", "Match height": "Samsvar høyde", "Match Height": "Samsvar høyde", "Match the height of all modules which are styled as a card.": "Samsvar høyden med alle moduler som er stilert som et kort.", "Match the height of all widgets which are styled as a card.": "Samsvar høyden med alle widgeter som er stilert som et kort.", "Max Height": "Maks høyde", "Max Width": "Maks bredde", "Max Width (Alignment)": "Maks bredde (justering)", "Max Width Breakpoint": "Maks bredde (stoppunkt)", "Maximum Zoom": "Maks forstørrelse", "Maximum zoom level of the map.": "Maks forstørrelse på kartet.", "Media Folder": "Mediamappe", "Medium (Tablet Landscape)": "Medium (nettbrett landskap)", "Menu": "Meny", "Menu Divider": "Menyskiller", "Menu Item": "Menyelement", "Menu items are only loaded from the selected parent item.": "Menyelementer lastes bare inn fra det valgte overordnede elementet.", "Menu Style": "Menystil", "Menu Type": "Menytype", "Menus": "Menyer", "Message": "Beskjed", "Message shown to the user after submit.": "Beskjed til bruker etter innsending.", "Meta Alignment": "Metajustering", "Meta Margin": "Metamarg", "Meta Parallax": "Metaparallakse", "Meta Style": "Metastil", "Meta Width": "Metabredde", "Min Height": "Minimum høyde", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Merk at malen med den generelle utformingen er tilegnet den gjeldende siden. Redigering av malen vil oppdatere den generelle utformingen.", "Minimum Stability": "Minimum stabilitet", "Minimum Zoom": "Minimum forminskelse", "Minimum zoom level of the map.": "Maks forstørrelse på kartet.", "Miscellaneous Information": "Diverse informasjon", "Mobile": "Mobil", "Mobile Inverse Logo (Optional)": "Mobile Inverse-logo (valgfritt)", "Mobile Logo (Optional)": "Mobillogo (valgfri)", "Modal Center": "Modal Senter", "Modal Top": "Modal Topp", "Modal Width": "Modal bredde", "Modal Width/Height": "Modal bredde/høyde", "Mode": "Modus", "Modified": "Endret", "Module": "Modul", "Module Position": "Modulposisjon", "Modules": "Moduler", "Month Archive": "Måneds arkiv", "Move the sidebar to the left of the content": "Flytt sidekolonnen til venstre for innholdet", "Multiple Items Source": "Flere elementkilder", "Mute video": "Skru av lyden på video", "Muted": "Dempet", "Name": "Navn", "Names": "Navn", "Nav": "Meny", "Navbar": "Menylinje", "Navbar Style": "Menylinje stil", "Navigation": "Navigasjon", "Navigation Label": "Navigasjonsetikett", "Navigation Thumbnail": "Miniatyrbilde navigasjon", "New Layout": "Ny utforming", "New Menu Item": "Nytt menypunkt", "New Module": "Ny modul", "New Template": "Ny mal", "Newsletter": "Nyhetsbrev", "Next %post_type%": "Neste %post_type%", "Next Article": "Neste artikkel", "Next-Gen Images": "Neste generasjon bilder", "Nicename": "Fine navn", "Nickname": "Kallenavn", "No %item% found.": "Ingen %item% funnet.", "No critical issues found.": "Ingen kritiske feil funnet.", "No element found.": "Ingen elementer funnet.", "No element presets found.": "Ingen element forhåndsinnstillinger funnet.", "No files found.": "Ingen filer funnet.", "No font found. Press enter if you are adding a custom font.": "Ingen skrifttyper funnet. Trykk enter for å bruke en egendefinert skrifttype.", "No icons found.": "Ingen ikoner funnet.", "No items yet.": "Ingen elementer ennå.", "No layout found.": "Ingen oppsett funnet.", "No limit": "Ingen begrensning", "No list selected.": "Ingen liste valgt.", "No Results": "Ingen resultater.", "No results.": "Ingen resultater.", "No source mapping found.": "Ingen kilde kartlegging funnet.", "No style found.": "Ingen stil funnet.", "None": "Ingen", "Not assigned": "Ikke tildelt", "Offcanvas Mode": "Offcanvas modus", "Offcanvas Top": "Offcanvas topp", "Offset": "Avsats", "On Sale Product": "På salg produkt", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "På korte sider kan hoveddelen utvides til å fylle visningsporten. Dette gjelder kun sider som ikke er bygget med sidebyggeren.", "Only available for Google Maps.": "Kun tilgjengelig for Google Maps.", "Only display modules that are published and visible on this page.": "Vis kun moduler som er publiserte og synlige på denne siden.", "Only show the image or icon.": "Vis kun bildet eller ikonet.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Kun enkle sider og poster kan ha individuell utforming. Bruk en mal for å tilegne generell utforming til denne sidetypen.", "Opacity": "Opasitet", "Open in a new window": "Åpne i et nytt vindu", "Open Templates": "Åpne maler", "Open the link in a new window": "Åpne lenke i et nytt vindu", "Opening the Changelog": "Åpne forandringslogg", "Options": "Valg", "Order": "Sortering", "Order Direction": "Retning sortering", "Order First": "Sortering først", "Ordering Sections, Rows and Elements": "Sortering seksjoner, rader og elementer", "Out of Stock": "Utsolgt", "Outside Breakpoint": "Utside stoppunkt", "Outside Color": "Utside farge", "Overlap the following section": "Overlapp følgende seksjon", "Overlay": "Overlegg", "Overlay Color": "Overleggsfarge", "Overlay Parallax": "Overleggsparallakse", "Overlay Slider": "Overlegg glider", "Overlay the site": "Overlegg siden", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Overstyre seksjonens animasjonsinstillinger. Denne funksjonen vil ikke ha noen effekt med mindre animasjoner er aktivert for denne delen.", "Padding": "Utfylling", "Page": "Side", "Page Title": "Sidetittel", "Pagination": "Paginering", "Panel Slider": "Panel glider", "Panels": "Paneler", "Parallax": "Parallakse", "Parallax Breakpoint": "Parallakse stoppunkt", "Parallax Easing": "Parallakse lettelse", "Parent %taxonomy%": "Forrige %taxonomy%", "Parent Category": "Forrige kategori", "Parent Menu Item": "Overordnet menyelement", "Parent Tag": "Forrige emneord", "Path": "Sti", "Path Pattern": "Stimønster", "Pause autoplay on hover": "Pause automatisk start ved markørsveving", "Phone Landscape": "Telefon: landskap", "Phone Portrait": "Telefon: portrett", "Photos": "Bilder", "Pick": "Velg", "Pick %type%": "Velg %type%", "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.": "Velg en %post_type% manuelt eller bruk filteralternativer for å spesifisere hvilken %post_type% som skal lastes dynamisk.", "Pick an alternative icon from the icon library.": "Velg et alternativ ikon fra ikonbiblioteket.", "Pick an alternative SVG image from the media manager.": "Velg et alternativ SVG bilde fra mediebehandleren.", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "Velg en artikkel manuelt eller bruk filteralternativer for å spesifisere hvilken artikkel som skal lastes dynamisk.", "Pick an optional icon from the icon library.": "Velg et alternativt ikon fra ikonbiblioteket.", "Pick file": "Velg fil", "Pick icon": "Velg ikon", "Pick link": "Velg lenke", "Pick media": "Velg media", "Pick video": "Velg video", "Placeholder Image": "Plassholderbilde", "Play inline on mobile devices": "Spill på linje på mobile enheter", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Vennligst installer/aktiver <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer - YOOtheme </a> programstillegget for å aktivere denne funksjonen.", "Please provide a valid email address.": "Vennligst skriv inn en gyldig e-postadresse.", "Popover": "Sprettopp", "Popular %post_type%": "Populær %post_type%", "Popup": "Sprettopp", "Position": "Posisjon", "Position Sticky": "Plasser Sticky", "Position Sticky Breakpoint": "Plasser Sticky Breakpoint", "Position Sticky Offset": "Plasser Sticky Offset", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Posisjoner elementet over eller under alle andre elementer. Hvis de har samme stablenivå, vil posisjonen være avhengig av rekkefølgen i utformingen.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Posisjoner elementet i normal innholdsflyt, eller i normal flyt, men med en forskyvning i forhold til seg selv, eller fjern det fra flyten og plasser det i forhold til den kolonnen den hører til.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Plasser filternavigasjonen på toppen, venstre eller høyre. En større stil kan brukes på venstre og høyre navigasjon.", "Position the meta text above or below the title.": "Plassere metateksten over eller under tittelen.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Plasser navigasjonen enten på toppen, bunnen, til venstre eller til høyre. En større stil kan velges på venstre og høyre navigering.", "Post Order": "Post ordre", "Postal/ZIP Code": "Postnummer", "Poster Frame": "Plakatramme", "Prefer excerpt over intro text": "Foretrekker utdrag fremfor introtekst", "Prefer excerpt over regular text": "Foretrekker utdrag fremfor vanlig tekst", "Preserve text color": "Bevar tekstfarge", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Bevar tekstfarge, for eksempel når du bruker kort. Overlappende seksjoner er ikke støttet av alle stiler og kan derfor ha ingen synlig effekt.", "Preview all UI components": "Vis alle UI komponenter", "Previous %post_type%": "Forrige %post_type%", "Previous Article": "Forrige artikkel", "Primary navigation": "Hovednavigasjon", "Product Description": "Produkt Beskrivelse", "Product Gallery": "Produktgalleri", "Product IDs": "Produkt IDer", "Product Images": "Produktbilder", "Product Information": "Produktinformasjon", "Product Meta": "Produkt meta", "Product Price": "Produktpris", "Product Rating": "Produktvurdering", "Product SKUs": "Produkt SKU", "Product Stock": "Produktbeholdning", "Product Tabs": "Produktfaner", "Product Title": "Produkt tittel", "Products": "Produkter", "Property": "Eiendom", "Provider": "Tilbyder", "Published": "Publisert", "Push Items": "Push elementer", "Quantity": "Mengde", "Quarters": "Fjerdedeler", "Quarters 1-1-2": "Fjerdedeler 1-1-2", "Quarters 1-2-1": "Fjerdedeler 1-2-1", "Quarters 1-3": "Fjerdedeler 1-3", "Quarters 2-1-1": "Fjerdedeler 2-1-1", "Quarters 3-1": "Fjerdedeler 3-1", "Quotation": "Sitat", "Random": "TIlfeldig", "Rating": "Vurdering", "Ratio": "Forhold", "Recompile style": "Gjenoppbygg stil", "Register date": "Registreringsdato", "Registered": "Registrert", "Reject Button Style": "Avvis knappestil", "Reject Button Text": "Avvis knappetekst", "Related %post_type%": "Relatert %post_type%", "Related Articles": "Relaterte artikler", "Related Products": "Relaterte produkter", "Relationship": "Relasjon", "Reload Page": "Last på nytt", "Remove bottom margin": "Fjern bunnmarg", "Remove bottom padding": "Fjern bunn utfylling", "Remove horizontal padding": "Fjern horisontal utfylling", "Remove left and right padding": "Fjern venstre og høyre utfylling", "Remove left logo padding": "Fjern venstre logo utfylling", "Remove left or right padding": "Fjern venstre og høyre utfylling", "Remove Media Files": "Fjern media filer", "Remove top margin": "Fjern toppmarg", "Remove top padding": "Fjern topp utfylling", "Remove vertical padding": "Fjern vertikal polstring", "Rename": "Gi nytt navn", "Rename %type%": "Endre navn %type%", "Replace": "Erstatt", "Replace layout": "Erstatt utforming", "Reset": "Nullstill", "Reset to defaults": "Tilbakestill til standard", "Responsive": "Responsiv", "Reverse order": "Motsatt rekkefølge", "Right": "Høyre", "Roles": "Roller", "Root": "Rot", "Rotate": "Rotere", "Rotate the title 90 degrees clockwise or counterclockwise.": "Roter tittelen 90 grader med eller mot klokken.", "Rotation": "Rotasjon", "Row": "Rad", "Row Gap": "Mellomrom rad", "Rows": "Rader", "Run Time": "Løpetid", "Saturation": "Saturasjon", "Save": "Lagre", "Save %type%": "Lagre %type%", "Save in Library": "Lagre i bibliotek", "Save Layout": "Lagre oppsett", "Save Style": "Lagre stil", "Save Template": "Lagre mal", "Scale": "Skala", "Script": "Skript", "Search": "Søk", "Search Component": "Søkekomponent", "Search Item": "Søkeelement", "Search Style": "Søkestil", "Search Word": "Søkeord", "Section": "Seksjon", "Section Animation": "Seksjonanimasjon", "Section Height": "Seksjonhøyde", "Section Image and Video": "Seksjon bilder og videoer", "Section Padding": "Seksjonutfylling", "Section Style": "Seksjonstil", "Section Title": "Seksjontittel", "Section Width": "Seksjonbredde", "Section/Row": "Seksjon/rad", "Select": "Velg", "Select %item%": "Velg %item%", "Select %type%": "Velg %type%", "Select a card style.": "Velg en kortstil.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Velg en innholdskilde for å gjøre dens felter tilgjengelig for kartlegging. Velg mellom kilder fra den gjeldende siden eller en spørring til en egendefinert kilde.", "Select a different position for this item.": "Velg en annen posisjon for dette elementet.", "Select a grid layout": "Velg rutenett utforming", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Velg en Joomla modulposisjon som skal gjengi alle dens publiserte moduler. Det er anbefalt å bruke builder-1 til -6 posisjonene, som ikke er gjengitt andre steder i malen.", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "Velg en logo som vil vises i offcanvas og modale dialoger for visse overskriftsoppsett.", "Select a panel style.": "Velg en panelstil.", "Select a predefined date format or enter a custom format.": "Velg et forhåndsdefinert datoformat eller skriv inn en egendefinert format.", "Select a predefined meta text style, including color, size and font-family.": "Velg en predefinert metatekst-stil, inklusiv farge, størrelse og skriftfamilie.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Velg et predefinert søkemønster, skriv inn en egendefinert streng eller vanlige uttrykk som kan søkes etter. De vanlige søkeuttrykkene må lukkes mellom skråstreker. For eksempel `min-streng` eller `/ab+c/`.", "Select a predefined text style, including color, size and font-family.": "Velg en predefinert tekst-stil, inklusiv farge, størrelse og skriftfamilie.", "Select a style for the continue reading button.": "Velg stilen for les mer knappen.", "Select a style for the overlay.": "Velg en til for overlegget.", "Select a taxonomy to only load posts from the same term.": "Velg en taksonomi for kun å laste innlegg fra samme begrep.", "Select a taxonomy to only navigate between posts from the same term.": "Velg en taksonomi for kun å navigere mellom innlegg fra samme term.", "Select a transition for the content when the overlay appears on hover.": "Velg en overgang for innholdet når overlegget vises under markørsveving.", "Select a transition for the link when the overlay appears on hover.": "Velg en overgang for lenken når overlegget vises under markørsveving.", "Select a transition for the meta text when the overlay appears on hover.": "Velg en overgang for metateksten når overlegget vises under markørsveving.", "Select a transition for the overlay when it appears on hover.": "Velg en overgang for overlegget når det vises under markørsveving.", "Select a transition for the title when the overlay appears on hover.": "Velg en overgang for tittelen når overlegget vises under markørsveving.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Velg en videofil eller skriv inn en lenke fra <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> eller <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WooCommerce page.": "Velg en WooCommerce side.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Velg et WordPress widget område som vil gjengi alle dens publiserte widgets. Det anbefales å bruke builder-1 til -6 i widget områdene, som ikke er gjengitt andre steder i temaet.", "Select an alternative font family. Mind that not all styles have different font families.": "Velg en alternativ skriftfamilie. Husk at ikke alle stiler har forskjellige skriftfamilier.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Velg en alternativ logo med invertert farge, f.eks. hvit, for bedre synlighet på mørke bakgrunner. Den vises automatisk hvis nødvendig.", "Select an alternative logo, which will be used on small devices.": "Velg en alernativ logo som vil bli brukt på små skjermer.", "Select an animation that will be applied to the content items when filtering between them.": "Velg en animasjon som skal brukes med veksling mellom innholdselementene.", "Select an animation that will be applied to the content items when toggling between them.": "Velg en animasjon som skal brukes med veksling mellom innholdselementene.", "Select an image transition.": "Velg en bildeovergang", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Velg en bildeovergang, når markørsveving er valgt. Overgangen skjer mellom to bilder. Hvis <i>ingen</i> er valgt, vil bildet falme inn ved markørsveving.", "Select an optional image that appears on hover.": "Velg et valgfri bilde som vises ved markørsveving.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Velg et valgfritt bilde som dukker opp før videoen spilles av. Hvis ikke velges det første videobildet som plakatramme.", "Select dialog layout": "Velg dialogoppsett", "Select header layout": "Velg utforming for topptekst", "Select Image": "Velg bilde", "Select Manually": "Velg manuelt", "Select mobile dialog layout": "Velg mobildialogoppsett", "Select mobile header layout": "Velg mobiloverskriftsoppsett", "Select one of the boxed card or tile styles or a blank panel.": "Velg ett av bokskort-stilene eller et blankt panel.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Velg stoppunktet fra hvor kolonnen skal vises før alle kolonnene. På mindre skjermer, vil kolonnen vises i naturlig rekkefølge.", "Select the color of the list markers.": "Velg fargen på listemarkørene.", "Select the content position.": "Velg innholdsposisjon.", "Select the device size where the default header will be replaced by the mobile header.": "Velg enhetsstørrelsen der standardhodet skal erstattes av mobilhodet.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Velg filternavigasjonstil. Pille og dele stiler er kun tilgjengelig for horisontale undernavigasjoner.", "Select the form size.": "Velg skjemastørrelse", "Select the form style.": "Velg skjemastil", "Select the icon color.": "Velg ikonfarge.", "Select the image border style.": "Velg bildets kantstil.", "Select the image box decoration style.": "Velg bildeboksdekorasjonsstilen.", "Select the image box shadow size on hover.": "Velg bildeboksens skyggestørrelse ved markørsveving.", "Select the image box shadow size.": "Velg bildeboksens skyggestørrelse.", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "Velg oppsettet for <code>dialog-mobile</code> -posisjonen. Skyvede elementer i posisjonen vises som ellipse.", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "Velg oppsettet for <code>dialog</code> -posisjonen. Elementer som kan skyves vises som ellipse.", "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.": "Velg oppsettet for posisjonene <code>logo-mobile</code>, <code>navbar-mobile</code> og <code>header-mobile</code>.", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "Velg oppsettet for posisjonene <code>logo</code>, <code>navbar</code> og <code>header</code>. Noen oppsett kan dele eller skyve elementer i en posisjon som vises som ellipse.", "Select the link style.": "Velg en lenkestil.", "Select the list style.": "Velg en listestil.", "Select the list to subscribe to.": "Velg listen som du ønsker å abonnere på.", "Select the logical operator for the attribute term comparison. Match at least one of the terms, none of the terms or all terms.": "Velg den logiske operatoren for sammenligning av attributter. Match minst ett av vilkårene, ingen av vilkårene eller alle vilkårene.", "Select the logical operator for the category comparison. Match at least one of the categories, none of the categories or all categories.": "Velg den logiske operatoren for kategorisammenligningen. Match minst én av kategoriene, ingen av kategoriene eller alle kategoriene.", "Select the logical operator for the tag comparison. Match at least one of the tags, none of the tags or all tags.": "Velg den logiske operatoren for tag-sammenligningen. Match minst én av kodene, ingen av taggene eller alle taggene.", "Select the marker of the list items.": "Angi markør for listeelementene.", "Select the menu type.": "Velg menytype.", "Select the nav style.": "Velg menystil", "Select the navbar style.": "Velg menylinje stilen.", "Select the navigation type.": "Velg navigasjonstype.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Velg navigasjonsstil. Pille- og linjestiler er kun tilgjengelig for horisontale undermenyer.", "Select the overlay or content position.": "Velg overlegg eller innholdsposisjonen.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Velg sprettoppens justering til dens markør. Hvis sprettoppen ikke passer beholderen, vil den snu automatisk.", "Select the position of the navigation.": "Velg posisjon for navigasjon.", "Select the position of the slidenav.": "Velg posisjonen til sklinavigasjonen.", "Select the position that will display the search.": "Velg posisjonen til hvor søk skal vises.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Velg posisjonen hvor sosiale lenker skal vises. Husk å legg inn nettadressene, for å vise ikoner, til dine sosiale profiler.", "Select the search style.": "Velg søkestil.", "Select the slideshow box shadow size.": "Velg lysbildefremvisningsboksens skyggestørrelse", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Velg stil for code syntax highlighting . Bruk GitHub for lys og Monokai for mørke bakgrunner.", "Select the style for the overlay.": "Velg en stil for overlegget.", "Select the subnav style.": "Velg undermenystil.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Velg SVG fargen. Den vil kun legges til støttede elementer definert i SVG.", "Select the table style.": "Velg en tabellstil.", "Select the text color.": "Velg tekstfarge.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Velg tekstfargen. Hvis bakgrunnsvalget er valgt, vil stiler som ikke har et bakgrunnsbilde, bruke hovedfargen istedenfor.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Velg tekstfargen. Hvis bakgrunnsvalget er valgt, vil stiler som ikke har et bakgrunnsbilde, bruke hovedfargen istedenfor.", "Select the title style and add an optional colon at the end of the title.": "Velg tittelstil og legg til en valgfri kolon etter tittelen.", "Select the transformation origin for the Ken Burns animation.": "Velg forvandlingsopphav for Ken Burns animasjonen.", "Select the transition between two slides.": "Velg overgang mellom lysbilder.", "Select the video box decoration style.": "Velg videoboks dekorasjonsstilen.", "Select the video box shadow size.": "Velg videobeholderens skyggestørrelse.", "Select whether a button or a clickable icon inside the email input is shown.": "Velg om en knapp eller et klikkbart ikon i en e-post skal bli vist.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Velg om en beskjeden skal vises eller om man skal bli videresendt til annen side, etter man har trykt på abonnere knappen.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Velg om standardsøk eller smartsøk skal brukes av søkemodulen og byggelementet.", "Select whether the modules should be aligned side by side or stacked above each other.": "Velg om modulene skal justeres side om side eller stables over hverandre.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Velg om en widget skal bli justert side ved side eller stablet over hverandre.", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "Velg din logo. Eventuelt injiser en SVG-logo i markeringen slik at den tar i bruk tekstfargen automatisk.", "Sentence": "Setning", "Separator": "Skilletegn", "Serve WebP images": "WebP bilder", "Set a condition to display the element or its item depending on the content of a field.": "Angi en tilstand for å vise et element eller elementets avhengighet av innholdet i et felt.", "Set a different link text for this item.": "Angi en annen lenketekst for dette elementet.", "Set a different text color for this item.": "Angi en annen tekstfarge for dette elementet.", "Set a fixed width.": "Angi en fast bredde.", "Set a higher stacking order.": "Angi en høyere stablingsrekkefølge.", "Set a large initial letter that drops below the first line of the first paragraph.": "Sett inn en stor innledende bokstav, som faller ned under første linje i første ledd.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Definer sidekolonnens bredde i prosent og innholdet vil justeres tilsvarende. Bredden vil ikke gå under sidekolonnens minste bredde, som du kan definere i stil delen.", "Set an additional transparent overlay to soften the image or video.": "Legg på et ekstra gjennomsiktig overlegg for å myke opp bilde eller video.", "Set an additional transparent overlay to soften the image.": "Legg på et ekstra gjennomsiktig overlegg for å myke opp bildet.", "Set an optional content width which doesn't affect the image if there is just one column.": "Angi en valgfri innholdsbredde som ikke påvirker bildet hvis det kun er en kolonne.", "Set an optional content width which doesn't affect the image.": "Angi en valgfri innholdsbredde som ikke påvirker bildet.", "Set how the module should align when the container is larger than its max-width.": "Angi hvordan modulen skal justeres når beholderen er større enn dens maksbredde.", "Set light or dark color if the navigation is below the slideshow.": "Angi lys eller mørk farge hvis navigasjonen er under lysbildefremvisningen.", "Set light or dark color if the slidenav is outside.": "Angi lys eller mørk farge hvis sklinavigasjonen er på utsiden av lysbildefremvisningen.", "Set light or dark color mode for text, buttons and controls.": "Velg lys eller mørk fargemodus for tekst, knapper og kontroller.", "Set light or dark color mode.": "Angi lys eller mørk modus.", "Set percentage change in lightness (Between -100 and 100).": "Angi lyshet i prosent (mellom -100 og 100).", "Set percentage change in saturation (Between -100 and 100).": "Angi saturasjon i prosent (mellom -100 og 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Angi gamma korreksjon i prosent (mellom 0.01 og 10.0, hvor 1.0 er ingen korreksjon).", "Set the autoplay interval in seconds.": "Angi automatisk avspillingsintervall i sekunder.", "Set the blog width.": "Angi blogbredde.", "Set the breakpoint from which grid items will align side by side.": "Angi bruddpunktet som rutenettelementene skal justeres side ved side fra.", "Set the breakpoint from which grid items will stack.": "Angi et stoppunkt fra hvor rutenettet skal stables.", "Set the breakpoint from which the sidebar and content will stack.": "Velg stoppunkt fra hvor sidekolonnen og innhold skal stables.", "Set the button size.": "Velg knappestørrelse.", "Set the button style.": "Velg knappestil.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Angi kolonnebredden for hvert stoppunkt. Bland fraksjonsbredder eller kombinerte faste bredder med <i>Expand</i> verdien. Hvis ingen verdi er valgt, brukes kolonnebredden for den neste mindre skjermstørrelsen. Kombinasjonen av bredder skal alltid ha full bredde.", "Set the content width.": "Still inn innholdsbredden.", "Set the device width from which the list columns should apply.": "Angi enhetsbredden fra hvor listekolonnene vil gjelde.", "Set the device width from which the text columns should apply.": "Angi enhetsbredden fra hvor tekstkolonnene vil gjelde.", "Set the dropdown width in pixels (e.g. 600).": "Angi rullegardinbredden i piksler (f.eks. 600).", "Set the duration for the Ken Burns effect in seconds.": "Angi varigheten for Ken Burns effekten i sekunder.", "Set the height in pixels.": "Angi høyden i piksler.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Angi den horisontale plasseringen av elementets underkant i piksler. En annen enhet som % eller vw kan også legges inn.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Angi den horisontale plasseringen av elementets venstrekant i piksler. En annen enhet som % eller vw kan også legges inn.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Angi den horisontale plasseringen av elementets høyrekant i piksler. En annen enhet som % eller vw kan også legges inn.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Angi den horisontale plasseringen av elementets overkant i piksler. En annen enhet som % eller vw kan også legges inn.", "Set the hover style for a linked title.": "Angi markørsvevingsovergangen for en lenket tittel.", "Set the hover transition for a linked image.": "Angi markørsvevingsovergangen for et lenket bilde.", "Set the hue, e.g. <i>#ff0000</i>.": "Angi fargetone, f.eks. <i>#ff0000</i>.", "Set the icon color.": "Velg ikonfarge", "Set the icon width.": "Angi ikonbredde.", "Set the initial background position, relative to the page layer.": "Angi utgangs bakgrunnsposisjonen, i forhold til sidens lag.", "Set the initial background position, relative to the section layer.": "Angi utgangs bakgrunnsposisjonen, i forhold til seksjonens lag.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Angi den første oppløsningen som skal vises på kartet. 0 er helt zoomet ut og 18 er den høyeste oppløsningen zoomet inn.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Angi elementsbredden for hvert stoppunkt. <i>Arvet</i> refererer til elementets bredde for den neste mindre skjermstørrelsen.", "Set the link style.": "Velg lenkestil.", "Set the logical operator for how the %post_type% relate to the author. Choose between matching at least one term, all terms or none of the terms.": "Angi den logiske operatoren for hvordan %post_type% forholder seg til forfatteren. Velg mellom å matche minst én term, alle termer eller ingen av termene.", "Set the logical operators for how the %post_type% relate to %taxonomy_list% and author. Choose between matching at least one term, all terms or none of the terms.": "Angi de logiske operatorene for hvordan %post_type% forholder seg til %taxonomy_list% og forfatter. Velg mellom å matche minst én term, alle termer eller ingen av termene.", "Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.": "Angi de logiske operatorene for hvordan artiklene forholder seg til kategori, tagger og forfatter. Velg mellom å matche minst én term, alle termer eller ingen av termene.", "Set the margin between the countdown and the label text.": "Velg en marg mellom nedtilling og etiketteksten.", "Set the margin between the overlay and the slideshow container.": "Angi margen mellom overlegget og lysbildefremvisningsområdet.", "Set the maximum content width.": "Angi maksimum innholdsbredde.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Angi maksimum innholdsbredde. Merk: Seksjonen har kanskje allerede en maksimumsbredde, som du ikke kan overskride.", "Set the maximum header width.": "Angi maksimum bredde på topptekst.", "Set the maximum height.": "Angi maksimum høyde.", "Set the maximum width.": "Angi maksimum bredde.", "Set the number of columns for the gallery thumbnails.": "Angi antall kolonner for galleriminiatyrbildene.", "Set the number of grid columns for desktops and larger screens. On smaller viewports the columns will adapt automatically.": "Angi antall rutenettkolonner for skrivebord og større skjermer. På mindre visningsporter vil kolonnene tilpasses automatisk.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Angi antall rutekolonner for hvert stoppunkt. <i>Arvet</i> viser til antall kolonner for den neste mindre skjermstørrelsen.", "Set the number of items after which the following items are pushed to the bottom.": "Still inn antall elementer hvoretter følgende elementer skyves til bunnen.", "Set the number of items after which the following items are pushed to the right.": "Still inn antall elementer hvoretter følgende elementer skyves til høyre.", "Set the number of list columns.": "Angi antall listekolonner", "Set the number of text columns.": "Angi antall tekstkolonner", "Set the offset to specify which file is loaded.": "Angi offset for å spesifisere hvilken fil som er lastet inn.", "Set the order direction.": "Angi rekkefølgen.", "Set the padding between sidebar and content.": "Angi utfylling mellom sidekolonne og innhold.", "Set the padding between the card's edge and its content.": "Sett polstringen mellom kortets kant og innholdet.", "Set the padding between the overlay and its content.": "Angi utfylling mellom overlegg og dens innhold.", "Set the padding.": "Angi utfylling", "Set the post width. The image and content can't expand beyond this width.": "Angi bloggpost bredden. Bildet og innholdet kan ikke gå utenfor denne bredden.", "Set the product ordering.": "Still inn produktbestillingen.", "Set the search input size.": "Angi søkets innmatingsstørrelse.", "Set the search input style.": "Angi søkets innmatingsstil.", "Set the separator between fields.": "Angi skille mellom felter.", "Set the separator between list items.": "Sett skillelinjen mellom listeelementer.", "Set the separator between tags.": "Angi skilletegn mellom emneord.", "Set the separator between terms.": "Angi skilletegn mellom vilkår.", "Set the size of the column gap between multiple buttons.": "Angi størrelsen på kolonne mellomrommet mellom flere knapper", "Set the size of the column gap between the numbers.": "Angi størrelsen på kolonne mellomrommet mellom tallene.", "Set the size of the gap between between the filter navigation and the content.": "Angi størrelsen på mellomrommet mellom filternavigasjonen og innholdet.", "Set the size of the gap between the grid columns.": "Angi størrelsen på mellomrommet mellom rutenett kolonnene.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Angi størrelsen på mellomrommet mellom kolonnene i rutenettet i <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blogg/Utvalgt utforming</a> innstillingene i Joomla.", "Set the size of the gap between the grid rows.": "Angi størrelsen på mellomrommet mellom rutenett radene.", "Set the size of the gap between the image and the content.": "Angi størrelsen på mellomrommet mellom bildet og innholdet.", "Set the size of the gap between the navigation and the content.": "Angi mellomrommet mellom navigasjonen og innholdet.", "Set the size of the gap between the social icons.": "Angi størrelsen på mellomrommet mellom de sosiale ikonene.", "Set the size of the gap between the title and the content.": "Angi størrelsen på mellomrommet mellom tittelen og innholdet.", "Set the size of the gap if the grid items stack.": "Angi størrelsen på mellomrommet hvis rutenettet stables.", "Set the size of the row gap between multiple buttons.": "Angi størrelsen på rad mellomrommet mellom flere knapper.", "Set the size of the row gap between the numbers.": "Angi størrelsen på rad mellomrommet mellom tallene.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Angi forhold. Det er anbefalt å bruke samme forhold i bakgrunnsbilder. Bare bruk dens bredde og høyde, som <code>1600:900</code>.", "Set the starting point and limit the number of %post_type%.": "Angi startpunkt og begrens antallet %post_type%.", "Set the starting point and limit the number of %post_types%.": "Angi startpunkt og begrens antallet %post_types%.", "Set the starting point and limit the number of %taxonomies%.": "Angi startpunkt og begrens antallet %taxonomies%.", "Set the starting point and limit the number of articles.": "Angi startpunkt og begrens antallet artikler.", "Set the starting point and limit the number of categories.": "Angi startpunkt og begrens antallet kategorier.", "Set the starting point and limit the number of files.": "Angi startpunkt og begrens antallet filer.", "Set the starting point and limit the number of items.": "Angi startpunktet og begrens antall elementer.", "Set the starting point and limit the number of tags.": "Angi startpunkt og begrens antallet emneord.", "Set the starting point and limit the number of users.": "Angi startpunkt og begrens antallet brukere.", "Set the starting point to specify which %post_type% is loaded.": "Angi startpunktet for å spesifisere hvilken %post_type% som er lastet.", "Set the starting point to specify which article is loaded.": "Angi startpunktet for å spesifisere hvilken artikkel som er lastet inn.", "Set the top margin if the image is aligned between the title and the content.": "Angi toppmargen for bildet som er plassert mellom tittelen og innholdet.", "Set the top margin.": "Angi toppmarg", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Angi toppmarg. Merk at margen vil kun brukes hvis innholdsfeltet kommer direkte etter et annet innholdsfelt.", "Set the velocity in pixels per millisecond.": "Angi hastigheten i piksler per millisekund.", "Set the vertical container padding to position the overlay.": "Angi vertikal beholder utfylling for posisjonering av overlegg.", "Set the vertical margin.": "Angi vertikalmarg.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Sett den vertikale margen. Merk: Det første elementets toppmarg og det siste elementets bunnmarg fjernes alltid. Definer disse verdiene i rutenettinnstillingene.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Sett den vertikale margen. Merk: Det første elementets toppmarg og det siste elementets bunnmarg fjernes alltid. Definer disse verdiene i seksjonsinnstillingene.", "Set the vertical padding.": "Angi vertikal utfylling.", "Set the video dimensions.": "Angi videodimensjoner", "Set the width and height for the modal content, i.e. image, video or iframe.": "Angi bredden og høyden for lysboks innhold, f.eks. bilde, video eller iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Angi bredde og høyde i piksler (for eksempel 600). Skriv kun én verdi for å bevare de opprinnelige proporsjonene. Bildet vil bli endret og beskjært automatisk.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Angi bredde og høyde i piksler. Skriv kun én verdi for å bevare de opprinnelige proporsjonene. Bildet vil bli endret og beskjært automatisk.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Angi bredden i piksler, f.eks. 600. Hvis ingen bredde er angitt, vil kartet bruke full bredde og beholde høyden. Eller bruk kun bredden for å definere stoppunktet fra hvor kartet skal starte forminskning f bevare størrelsesforholdet.", "Sets": "Sett", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Ved kun å sette en verdi bevares de originale dimensjonene. Bildet vil bli forstørret/forminsket og beskåret automatisk. Hvis mulig vil høyoppløslige bilder bli autogenerert.", "Setting the Blog Content": "Innstilling av blogginnhold", "Setting the Blog Image": "Innstilling av bloggbilde", "Setting the Blog Layout": "Innstilling av bloggutforming", "Setting the Blog Navigation": "Innstilling av bloggnavigasjon", "Setting the Header Layout": "Innstilling av topptekst utforming", "Setting the Minimum Stability": "Angi minimumsstabilitet", "Setting the Module Appearance Options": "Innstilling av modul visningsvalg", "Setting the Module Default Options": "Innstilling av modul standardvalg", "Setting the Module Grid Options": "Innstilling av modul rutenettvalg", "Setting the Module List Options": "Innstilling av modul listevalg", "Setting the Module Menu Options": "Innstilling av modul menyvalg", "Setting the Navbar": "Innstilling av menylinjen", "Setting the Page Layout": "Innstilling av sideutforming", "Setting the Post Content": "Innstilling av sideinnhold", "Setting the Post Image": "Innstilling av sidebilde", "Setting the Post Layout": "Innstilling av sideutforming", "Setting the Post Navigation": "Innstilling av sidenavigasjon", "Setting the Sidebar Area": "Innstilling av sidekolonneområdet", "Setting the Sidebar Position": "Innstilling av sidekolonneposisjonen", "Setting the Source Order and Direction": "Innstilling av kilderekkefølge og retning", "Setting the Template Loading Priority": "Innstilling av mal lastingsprioritet", "Setting the Template Status": "Innstilling av malstatus", "Setting the Top and Bottom Areas": "Innstilling av topp- og bunnområder", "Setting the Top and Bottom Positions": "Innstilling av topp- og bunnposisjoner", "Setting the Widget Appearance Options": "Innstilling av widget visningsvalg", "Setting the Widget Default Options": "Innstilling av widget standardvalg", "Setting the Widget Grid Options": "Innstilling av widget rutenettvalg", "Setting the Widget List Options": "Innstilling av widget listevalg", "Setting the Widget Menu Options": "Innstilling av widget menyvalg", "Setting the WooCommerce Layout Options": "Innstilling av WooCommerce utformingsvalg", "Settings": "Innstillinger", "Short Description": "Kort beskrivelse", "Show %taxonomy%": "Vis %taxonomy%", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Vis et banner som skal informere dine besøkende om at informasjonskapsler nyttes på din nettside. Velg mellom en enkel beskjed om at informasjonskapslene er lastet eller krev et obligatorisk samtykke før informasjonskapslene lastes.", "Show a divider between grid columns.": "Vis delere mellom tekstkolonner", "Show a divider between list columns.": "Vis en deler mellom listekolonner.", "Show a divider between text columns.": "Vis en deler mellom tekstkolonner.", "Show a separator between the numbers.": "Vis et skilletegn mellom tallene.", "Show archive category title": "Vis arkivkategori tittel", "Show as disabled button": "Vis som deaktivert knapp", "Show author": "Vis skribent", "Show below slideshow": "Vis under lysbildefremvisning", "Show button": "Vis knapp", "Show categories": "Vis kategorier", "Show Category": "Vis kategori", "Show close button": "Vis lukk knapp", "Show comment count": "Vis antall kommentarer", "Show comments count": "Vis antall kommentarer", "Show content": "Vis innhold", "Show Content": "Vis innhold", "Show controls": "Vis kontroller", "Show current page": "Vis gjeldende side", "Show date": "Vis dato", "Show dividers": "Vis delere", "Show drop cap": "Vis innfelt forbokstav", "Show filter control for all items": "Vis filterkontroll for alle elementer", "Show headline": "Vis overskrift", "Show home link": "Vis hjemlenke", "Show hover effect if linked.": "Vis markørsvevingseffekt hvis lenket.", "Show intro text": "Vis introtekst", "Show Labels": "Vis etiketter", "Show link": "Vis lenken", "Show lowest price": "Vis laveste pris", "Show map controls": "Vis kartknapper", "Show name fields": "Vis navnefelter", "Show navigation": "Vis navigasjon", "Show on hover only": "Vis kun på markørsveving", "Show optional dividers between nav or subnav items.": "Vis valgfrie skillelinjer mellom nav- eller subnavigasjonselementer.", "Show or hide content fields without the need to delete the content itself.": "Vis eller skjul innholdsfeltet uten å måtte slette selve innholdet.", "Show or hide fields in the meta text.": "Vis eller skjul felter i metateksten.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Vis eller skjul elementet på denne enhetsbredden og større. Hvis alle elementene er skjult, skjules kolonner, rader og seksjoner tilsvarende.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Vis eller skjul hjemlenken som første element, så vel som den gjeldende siden som siste element i brødsmulenavigasjonen.", "Show or hide the intro text.": "Vis eller skjul introteksten.", "Show or hide the reviews link.": "Vis eller skjul vurderingslenken.", "Show or hide title.": "Vis eller skjul tittel.", "Show out of stock text as disabled button for simple products.": "Vis utsolgt tekst som deaktivert knapp for enkle produkter.", "Show parent icon": "Vis overordnet ikon", "Show popup on load": "Vis sprettopp under lasting", "Show rating": "Vis vurdering", "Show result count": "Vis resultattelling", "Show result ordering": "Vis resultatbestilling", "Show reviews link": "Vis vurderingslenke", "Show Separators": "Vis skillere", "Show space between links": "Vis mellomrom mellom lenker", "Show Start/End links": "Vis start/slutt lenker", "Show system fields for single posts. This option does not apply to the blog.": "Vis systemfelter for enkle blogg poster. Dette valget gjelder ikke for bloggen.", "Show system fields for the blog. This option does not apply to single posts.": "Vis systemfelter i bloggen. Dette valget gjelder ikke for enkle blogg poster.", "Show tags": "Vis emneord", "Show Tags": "Vis emneord", "Show the content": "Vis innholdet", "Show the excerpt in the blog overview instead of the post text.": "Vis utdraget i blogoversikten istedenfor i innholdsteksten.", "Show the image": "Vis bildet", "Show the link": "Vis lenken", "Show the lowest price instead of the price range.": "Vis den laveste prisen i stedet for prisklassen.", "Show the menu text next to the icon": "Vis menyteksten ved siden av menyikonet", "Show the meta text": "Vis metateksten", "Show the navigation label instead of title": "Vis navigasjonsetiketten istedenfor tittelen", "Show the navigation thumbnail instead of the image": "Vis navigasjons miniatyrbilde istedenfor bildet", "Show the sale price before or after the regular price.": "Vis salgsprisen før eller etter ordinær pris.", "Show the subtitle": "Vis underteksten", "Show the title": "Vis tittelen", "Show title": "Vis tittel", "Show Title": "Vis tittel", "Sidebar": "Sidekolonne", "Single %post_type%": "Enkel %post_type%", "Single Article": "Enkel artikkel", "Single Contact": "Enkel kontakt", "Single Post Pages": "Enkeltinnleggssider", "Site": "Side", "Site Title": "Sidetittel", "Size": "Størrelse", "Slide all visible items at once": "Skli alle synlige elementer med en gang.", "Slidenav": "Sklinavigasjonen", "Slider": "Glider", "Slideshow": "Lysbildefremvisning", "Small (Phone Landscape)": "Liten (Telefon: portrett)", "Smart Search": "Smartsøk", "Smart Search Item": "Smartsøk element", "Social": "Sosial", "Social Icons": "Sosiale ikoner", "Social Icons Gap": "Mellomrom sosiale ikoner", "Social Icons Size": "Størrelse sosiale ikoner", "Split Items": "Del elementer", "Split the dropdown into columns.": "Del nedtrekksmenyen i kolonner", "Spread": "Spre", "Stack columns on small devices or enable overflow scroll for the container.": "Stable kolonner på små enheter eller aktivere overfyll rulling av beholderen.", "Stacked Center A": "Stablet midtstilt B", "Stacked Center B": "Stablet midtstilt B", "Stacked Center C": "Stablet midtstilt C", "Stacked Center Split A": "Stablet sentersplitt A", "Stacked Center Split B": "Stablet sentersplitt B", "Stacked Justify": "Stablet rettferdiggjøre", "Stacked Left": "Stablet til venstre", "Start with all items closed": "Start med alle elementer lukket", "State or County": "Fylke", "Sticky Effect": "Klistrete effekt", "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.": "Den klebrige delen vil bli dekket av den følgende delen mens du ruller. Avslør seksjon for forrige seksjon.", "Stretch the panel to match the height of the grid cell.": "Strekk panelet til å samsvare med høyden til rutenettet.", "Style": "Stil", "Sublayout": "Underlayout", "Subnav": "Undermeny", "Subtitle": "Undertittel", "Support": "Støtte", "SVG Color": "SVG farge", "Switch prices": "Bytt priser", "Switcher": "Skifter", "Syntax Highlighting": "Syntaks fremheving", "System Check": "Systemsjekk", "Table": "Tabell", "Table Head": "Tabellhode", "Tablet Landscape": "Nettbrett: Landskap", "Tag": "Emneord", "Tag Item": "Emneord element", "Tagged Items": "Elementer med emneord", "Tags": "Emneord", "Tags are only loaded from the selected parent tag.": "Emneord er kun lastet fra den forrige valgte emneordet.", "Tags Operator": "Tagger Operatør", "Target": "Mål", "Teaser": "Smakebit", "Telephone": "Telefon", "Templates": "Maler", "Term Order": "Vilkår sortering", "Text": "Tekst", "Text Alignment": "Tekstjustering", "Text Alignment Breakpoint": "Tekstjusterings stoppunkt", "Text Alignment Fallback": "Tekstjustering reserveløsning", "Text Color": "Tekstfarge", "Text Style": "Tekststil", "The Accordion Element": "Trekkspillelementet", "The Alert Element": "Varslingselementet", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "Animasjonen starter og stopper avhengig av elementposisjonen i visningsporten. Alternativt kan du bruke posisjonen til en overordnet beholder.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "Animasjonen starter når elementet kommer inn i viewporten og slutter når det forlater viewporten. Velg eventuelt en start- og sluttforskyvning, f.eks. <code>100px</code>, <code>50vh</code> eller <code>50vh + 50%</code>. Prosent er relatert til målets høyde.", "The Area Element": "Område elementet", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "Linjen på toppen presser innholdet ned, mens linjen på bunnen er fiksert over innholdet.", "The Breadcrumbs Element": "Brødsmuleelementet", "The builder is not available on this page. It can only be used on pages, posts and categories.": "Byggeren er ikke tilgjengelig på denne siden. Den kan bare brukes på sider, poster og kategorier.", "The Button Element": "Knappeelementet", "The changes you made will be lost if you navigate away from this page.": "Endringene du har gjort vil forsvinne, hvis du navigerer bort fra denne siden.", "The Code Element": "Kodeelementet", "The Countdown Element": "Nedtellingselementet", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "Standardrekkefølgen vil følge rekkefølgen angitt av parentes eller fallback til standardfilrekkefølgen angitt av systemet.", "The Description List Element": "Beskrivelseslisteelementet", "The Divider Element": "Divider-elementet", "The Gallery Element": "Gallerielementet", "The Grid Element": "Gitterelementet", "The Headline Element": "Overskriftselementet", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Høyden kan tilpasses høyden på utsiktsporten. <br><br>Merk: Sørg for at ingen høyde er angitt i seksjonsinnstillingene når du bruker et av visningsportalternativene.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Høyden vil tilpasses automatisk etter innholdet. Alternativt kan høyden tilpasses høyden til visningsområdet.<br><br>NB: Sjekk at høyden ikke er angitt i seksjonsinnstillingene når et av visningsområdene er valgt.", "The Icon Element": "Ikonelementet", "The Image Element": "Bildeelementet", "The List Element": "Listeelementet", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "Logoen plasseres automatisk mellom varene. Du kan eventuelt angi antall elementer som elementene deles etter.", "The Map Element": "Kartelementet", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "Murgalleri effekten lager et utseende uten mellomrom selv om rutenett cellene har forskjellig høyde. ", "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.": "Minimums stabiliteten til maloppdateringer. Stabil er anbefalt for produksjonsnettsider. Beta er kun for testing av nye egenskaper og for rapportering av feil.", "The Module Element": "Modulelementet", "The module maximum width.": "Modulens maksimumsbredde.", "The Nav Element": "Nav-elementet", "The Newsletter Element": "Nyhetsbrevelementet", "The Overlay Element": "Overleggselementet", "The Overlay Slider Element": "Overleggsglideelementet", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "Denne siden har blitt oppdatert av %modifiedBy%. Forkast dine endringer og last inn på ny?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "Siden du redigerer på har blitt oppdatert av %modified_by%. Lagrer du dine endringer vil disse overskrive de tidligere endringene. Ønsker du å lagre uansett eller vil forkaste dine endringer og laste inn siden på nytt?", "The Pagination Element": "Pagineringselementet", "The Panel Element": "Panelelementet", "The Panel Slider Element": "Panelskyveelementet", "The Popover Element": "Popover-elementet", "The Position Element": "Posisjonselementet", "The Quotation Element": "Sitatelementet", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "RSFirewall programtillegget ødelegger innholdet i sidebyggeren. Deaktiver egenskapen <em>Konverter e-postadresser fra rem tekst til bilder</em> i <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall innstillingene</a>.", "The Search Element": "Søkeelementet", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "SEBLOD programtillegg gjør at sidebyggeren blir utilgjengelig. Deaktiver egenskapen <em>Skjul rediger icon</em> i <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD innstillinger</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Lysbildefremvisningen vil bruke sin fulle bredde, og høyden tilpasses automatisk etter det definerte forholdet. Alternativt kan høyden tilpasses høyden til visningsområdet.<br><br>NB: Sjekk at høyden ikke er angitt i seksjonsinnstillingene når et av visningsområdene er valgt.", "The Slideshow Element": "Slideshow-elementet", "The Social Element": "Det sosiale elementet", "The Subnav Element": "Subnav-elementet", "The Switcher Element": "Switcher-elementet", "The Table Element": "Bordelementet", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Malen er kun tilknyttet til artikler med de valgte emneordene. Bruk <kbd>skift</kbd> eller <kbd>ctrl/cms</kbd> tasten for å velge flere emneord.", "The template is only assigned to the selected pages.": "Malen er kun tilegnet de valgte sidene.", "The Text Element": "Tekstelementet", "The Totop Element": "Toppelementet", "The Video Element": "Videoelementet", "The Widget Element": "Widgetelementet", "The width of the grid column that contains the module.": "Bredden til rutekolonnen som inneholder modulen.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "YOOtheme Pro mappen har feil navn, noe som ødelegger for essensielle funksjonaliteter. Du må endre navnet tilbake til <code>yootheme</code>.", "Theme Settings": "Malinnstillinger", "Thirds": "Tredeler", "Thirds 1-2": "Tredeler 1-2", "Thirds 2-1": "Tredeler 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "I denne mappen lagres bildene som lastes ned når du bruker utforminger fra Yootheme Pro biblioteket. Denne er lokalisert i Joomlas images mappe.", "This is only used, if the thumbnail navigation is set.": "Dette brukes kun når miniatyrbildenavigasjon er valgt.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Denne utformingen inkluderer en mediafil som må lastes ned til din nettsides mediagalleri. |||| Denne utformingen inkluderer %smart_count% mediafiler som må lastes ned til din nettsides mediagalleri.", "This option doesn't apply unless a URL has been added to the item.": "Dette valget gjelder ikke, hvis ikke en lenke er tilknyttet til elementet.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Dette alternativet gjelder ikke med mindre en URL er lagt til elementet. Bare elementinnholdet vil bli koblet.", "This option is only used if the thumbnail navigation is set.": "Dette brukes kun når miniatyrbildenavigasjon er valgt.", "Thumbnail": "Miniatyrbilde", "Thumbnail Inline SVG": "Miniatyrbilde på linje SVG", "Thumbnail SVG Color": "Miniatyrbilde SVG farge", "Thumbnail Width/Height": "Miniatyrbilde bredde/høyde", "Thumbnail Wrap": "Miniatyrbilde innpakking", "Thumbnails": "Miniatyrbilder", "Thumbnav Inline SVG": "Miniatyrnavigasjon på linje SVG", "Thumbnav SVG Color": "Miniatyrnavigasjon SVG farge", "Thumbnav Wrap": "Miniatyrnavigasjon innpakking", "Time Archive": "Tidsarkiv", "Title": "Tittel", "title": "tittel", "Title Decoration": "Tittel dekorering", "Title Margin": "Tittelmarg", "Title Parallax": "Tittelparallakse", "Title Style": "Tittelstil", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Tittelstilen er forskjellig i skriftstørrelse, men kan også komme i forhåndsdefinert farge, størrelse og skrifttype.", "Title Width": "Tittelbredde", "To Top": "Til toppen", "Toolbar": "Verktøylinje", "Top": "Topp", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Topp, bunn, venstre eller høyre justerte bilder kan festes til kortets kant. Hvis bildet er justert til venstre eller høyre, vil det også utvide til å dekke hele området til kortet.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Topp, venstre eller høyre justerte bilder kan festes til kortets kant. Hvis bildet er justert til venstre eller høyre, vil det også utvide til å dekke hele rommet til kortet.", "Total Views": "Totalt antall visninger", "Touch Icon": "Touch ikon", "Transition": "Overgang", "Translate X": "Oversett X", "Translate Y": "Oversett Y", "Transparent Header": "Gjennomsiktig topptekst", "Understanding Status Icons": "Forstå statusikoner", "Understanding the Layout Structure": "Forstå oppsettstrukturen", "Unknown %type%": "Ukjent %type%", "Unpublished": "Avpublisert", "Updating YOOtheme Pro": "Oppdaterer YOOtheme Pro", "Upload": "Last opp", "Upload a background image.": "Last opp et bakgrunnsbilde", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Last opp et valgfritt bakgrunnsbilde som dekker siden. Bildetvil stå fast når du ruller.", "Upload Layout": "Last opp utforming", "Upload Preset": "Last opp forhåndsinnstilling", "Upload Style": "Last opp stil", "Upsell Products": "Mersalg produkter", "Use a numeric pagination or previous/next links to move between blog pages.": "Bruke numerisk navigasjon eller forrige/neste lenker for å navigere mellom blogg sider.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Bruk en alternativ minimumshøyde for å forhindre bilder fra å bli mindre enn innholdet på mindre enheter.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Bruk en alternativ minimumshøyde for å forhindre glideren fra å bli mindre enn innholdet på mindre enheter.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Bruk en alternativ minimumshøyde for å forhindre lysbildefremvisningen fra å bli mindre enn innholdet på mindre enheter.", "Use as breakpoint only": "Bruk kun som stoppunkt.", "Use double opt-in.": "Bruk dobbel bekreftelse.", "Use excerpt": "Bruk utdrag", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Bruk bakgrunnsfarge i kombinasjon med blandemodus, et gjennomsiktig bilde eller for å fylle området, hvis bildet ikke dekker hele siden.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Bruk bakgrunnsfarge i kombinasjon med blandemodus, et gjennomsiktig bilde eller for å fylle området, hvis bildet ikke dekker hele seksjonen.", "Use the background color in combination with blend modes.": "Bruk bakgrunnsfargen i kombinasjon med blandingsmodus.", "User": "Bruker", "User Group": "Brukergruppe", "Username": "Brukernavn", "Users": "Brukere", "Using Advanced Custom Fields": "Hvordan bruke avanserte egendefinerte felter", "Using Content Fields": "Hvordan bruke Innholdsfelter", "Using Content Sources": "Hvordan bruke innholdskilder", "Using Custom Fields": "Hvordan bruke egendefinerte felter", "Using Custom Post Type UI": "Hvordan bruke egendefinerte posttyper UI", "Using Custom Post Types": "Hvordan bruke egendefinerte posttyper", "Using Custom Sources": "Hvordan bruke egendefinerte kilder", "Using Dynamic Conditions": "Hvordan bruke dynamisk tilstander", "Using Elements": "Hvordan bruke elementer", "Using Images": "Hvordan bruke bilder", "Using Links": "Hvordan bruke lenker", "Using Menu Locations": "Hvordan bruke menylokasjoner", "Using Menu Positions": "Hvordan bruke menyposisjoner", "Using Module Positions": "Hvordan bruke modulposisjoner", "Using My Layouts": "Hvordan bruke mine oppsett", "Using My Presets": "Hvordan bruke mine forhåndsinnstillinger", "Using Page Sources": "Hvordan bruke sidekilder", "Using Powerful Posts Per Page": "Hvordan bruke Powerful poster per side", "Using Pro Layouts": "Hvordan bruke profesjonelle oppsett", "Using Pro Presets": "Bruke Pro Presets", "Using Related Sources": "Hvordan bruke relaterte kilder", "Using the Before and After Field Options": "Hvordan bruke før og etter felgvalg", "Using the Builder Module": "Hvordan bruke modulbyggeren", "Using the Builder Widget": "Hvordan bruke widgetbyggeren", "Using the Categories and Tags Field Options": "Hvordan bruke kategorienes og emneordsfeltenes valg", "Using the Content Field Options": "Hvordan bruke innholdsfelters valg", "Using the Content Length Field Option": "Hvordan bruke innholdslengde feltvalg", "Using the Contextual Help": "Hvordan bruke sprettopp hjelp", "Using the Date Format Field Option": "Hvordan bruke datoformat feltvalg", "Using the Device Preview Buttons": "Hvordan bruke enhets forhåndsvisningsknapper", "Using the Dropdown Menu": "Hvordan bruke nedtrekksmenyen", "Using the Footer Builder": "Hvordan bruke bunntekst byggeren", "Using the Media Manager": "Hvordan bruke mediebehandleren", "Using the Menu Module": "Hvordan bruke menymodul", "Using the Menu Widget": "Hvordan bruke meny widget", "Using the Meta Field Options": "Hvordan bruke metafelt valg", "Using the Page Builder": "Hvordan bruke sidebyggeren", "Using the Search and Replace Field Options": "Hvordan bruke søke og erstatt feltvalg", "Using the Sidebar": "Bruken av sidekolonnen", "Using the Tags Field Options": "Hvordan bruke emneord feltvalg", "Using the Teaser Field Options": "Hvordan bruke forsmak feltvalg", "Using the Toolbar": "Hvordan bruke verktøylinjen", "Using the Unsplash Library": "Hvordan bruke Unsplash biblioteket", "Using the WooCommerce Builder Elements": "Hvordan bruke WooCommerce bygger element", "Using the WooCommerce Page Builder": "Hvordan bruke WooCommerce sidebygger", "Using the WooCommerce Pages Element": "Hvordan bruke WooCommerce sideelement", "Using the WooCommerce Product Stock Element": "Hvordan bruke WooCommerce produktlager element", "Using the WooCommerce Products Element": "Hvordan bruke WooCommerce produktelementer", "Using the WooCommerce Related and Upsell Products Elements": "Hvordan bruke WooCommerce relaterte eller mersalg produkt element", "Using the WooCommerce Style Customizer": "Hvordan bruke WooCommerce stilendrer", "Using the WooCommerce Template Builder": "Hvordan bruke WooCommerce malbygger", "Using Toolset": "Hvordan bruke verktøyskrin", "Using Widget Areas": "Hvordan bruke widget områder", "Using WooCommerce Dynamic Content": "Hvordan bruke WooCommerce dynamisk innhold", "Using WordPress Category Order and Taxonomy Terms Order": "Hvordan bruke Wordpress kategori og taksonomi vilkår", "Using WordPress Popular Posts": "Hvordan bruke Wordpress populære poster", "Using WordPress Post Types Order": "Hvordan bruke Wordpress posttype sortering", "Value": "Verdi", "Values": "Verdier", "Variable Product": "Variabelt produkt", "Velocity": "Hastighet", "Version %version%": "Versjon %version%", "Vertical Alignment": "Vertikal justering", "Vertical navigation": "Vertikal navigasjon", "Vertically align the elements in the column.": "Juster elementene i kolonnen vertikalt", "Vertically center grid items.": "Midtstill rutenettet vertikalt.", "Vertically center table cells.": "Midtstill tabellceller vertikalt.", "Vertically center the image.": "Midtstill bildet vertikalt.", "Vertically center the navigation and content.": "Midtstill navigasjon og innhold vertikalt.", "Videos": "Videoer", "View Photos": "Vis bilder", "Viewport": "Visningsområde", "Viewport Height": "Visningsområde høyde", "Visibility": "Synlighet", "Visible on this page": "Synlig på denne siden", "Visual": "Visuell", "Votes": "Stemmer", "Website": "Nettside", "Website Url": "Nettside lenke", "What's New": "Hva er nytt", "When using cover mode, you need to set the text color manually.": "Når cover modus brukes, må du angi tekstfargen manuelt.", "Whole": "Hele", "Widget Area": "Widget område", "Width": "Bredde", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Bredde og høyde vil bli justert etter om bildet er i portrett- eller landskapsformat.", "Width/Height": "Bredde/høyde", "Woo Notices": "Woo beskjeder", "Woo Pages": "Woo sider", "Working with Multiple Authors": "Arbeide med flere forfattere", "X-Large (Large Screens)": "X-stor (Store skjermer)", "Year Archive": "Årsarkiv", "YOOtheme API Key": "Yootheme API nøkkel", "YOOtheme Help": "YOOtheme hjelp", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro er fullt operativ og klar til bruk.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro er ikke operativt. Alle kritiske feil må fikses.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro er operativt, men det er feil som må fikses for å låse opp funksjoner og forbedre ytelsen.", "Z Index": "Z indeks" }theme/languages/sr_RS.json000064400000007526151666572140011566 0ustar00{ "-": "-", "- Select -": "- Одабери -", "- Select Module -": "- Одабери модул -", "- Select Position -": "- Одабери позицију -", "- Select Widget -": "- Одабери виџет -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" већ постоји у библиотеци, ако сачувате биће преснимљена.", "(ID %id%)": "(ID %id%)", "%label% - %group%": "%label% - %group%", "%label% Position": "Позиција %label%", "%name% already exists. Do you really want to rename?": "Назив %name% већ постоји. Да ли желите да преименујете?", "%post_type% Archive": "%post_type% архива", "%s is already a list member.": "%s је постојећи члан.", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s је трајно обрисан и не може поново бити враћен на листу. Контакт се мора поново пријавити да би поново био члан листе.", "${theme.title}": "${theme.title}", "1 Column Content Width": "Ширина једне колоне", "About": "О", "Accessed": "Приступ", "Accordion": "Хармоника", "Add": "Додај", "Add a colon": "Додај колону", "Add a leader": "Додај наглашени текст", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Додај ефекат паралакс или фиксирану позадину на позадину у видном пољу док се скролује страница.", "Add a parallax effect.": "Додај ефекат паралакса.", "Add bottom margin": "Додај доњу маргину", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Додај произвољни JavaScript на сајт. Ознака <script> није потребна.", "Add Element": "Додај елемент", "Add extra margin to the button.": "Додај додатну маргину на дну.", "Add Folder": "Додај фасциклу", "Add Item": "Додај ставку", "Add Media": "Додај медије", "Add Menu Item": "Додај ставку менија", "Add Module": "Додај модул", "Add Row": "Додај ред", "Add Section": "Додај секцију", "Add text after the content field.": "Додај текст после поља за садржај.", "Add text before the content field.": "Додај текст испред поља за садржај.", "Add to Cart": "Додај у корпу", "Add to Cart Link": "Додај линк за корпу", "Add to Cart Text": "Додај текст за корпу", "Add top margin": "Додај горњу маргину", "Adding the Logo": "Додавање логотипа", "Adding the Search": "Додавање претраге", "Adding the Social Icons": "Додавање икона за друштвене мреже", "Additional Information": "Додатне информације", "Address": "Адреса", "Advanced": "Напредно", "Advanced WooCommerce Integration": "Напредна WooCommerce интеграција", "After": "После", "After Display Content": "Након приказаног садржаја", "After Display Title": "Након приказаног наслова", "After Submit": "Након Пошаљи", "Alert": "Обавештење", "Align image without padding": "Поравнај слику без испуне", "Alignment": "Поравнање" }theme/languages/de_DE.json000064400000632437151666572140011503 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Auswählen -", "- Select Module -": "- Modul auswählen -", "- Select Position -": "- Position auswählen -", "- Select Widget -": "- Widget auswählen -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" existiert bereits in der Bibliothek und wird beim Speichern ersetzt.", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% Element", "%email% is already a list member.": "%email% ist bereits in der Teilnehmerliste.", "%email% was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%email% wurde dauerhaft gelöscht und kann nicht re-importiert werden. Um wieder in die Liste zu kommen, ist ein erneutes Eintragen erforderlich.", "%label% - %group%": "%label% - %group%", "%label% (%depth%)": "%label% (%depth%)", "%label% Location": "%label% Position", "%label% Position": "%label% Position", "%name% already exists. Do you really want to rename?": "%name% ist bereits vorhanden, wirklich umbenennen?", "%name% Copy": "%name% Kopie", "%name% Copy %index%": "%name% Kopie %index%", "%post_type% Archive": "%post_type% Archiv", "%s is already a list member.": "%s ist bereits Mitglied.", "%s of %s": "%s von %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s wurde permanent entfernt und kann nicht neu importiert werden. Der Kontakt muss sich erneut registrieren.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Sammlung |||| %smart_count% Sammlungen", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Element |||| %smart_count% Elemente", "%smart_count% File |||| %smart_count% Files": "%smart_count% Datei |||| %smart_count% Dateien", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Datei ausgewählt |||| %smart_count% Dateien ausgewählt", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Icon |||| %smart_count% Icons", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Layout |||| %smart_count% Layouts", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% Download fehlgeschlagen: |||| %smart_count% Downloads fehlgeschlagen:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Foto |||| %smart_count% Fotos", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Voreinstellung |||| %smart_count% Voreinstellungen", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Stil |||| %smart_count% Stile", "%smart_count% User |||| %smart_count% Users": "%smart_count% Benutzer |||| %smart_count% Benutzer", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "Es werden nur %taxonomies% aus der ausgewählten übergeordneten %taxonomy% geladen.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% Voreinstellungen", "<code>json_encode()</code> must be available. Install and enable the <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> extension.": "<code>json_encode()</code> muss verfügbar sein. Installiere und aktiviere die <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> Erweiterung.", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 Spalte", "1 Column Content Width": "1-spaltige Inhalt-Breite", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Column Grid": "2-spaltiges Grid", "2 Column Grid (Meta only)": "2-spaltiges Grid (nur Meta)", "2 Columns": "2 Spalten", "20%": "20%", "25%": "25%", "2X-Large": "2X-Large", "3 Columns": "3 Spalten", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3rd Party Integration": "Drittanbieter-Integration", "3X-Large": "3X-Large", "4 Columns": "4 Spalten", "40%": "40%", "5 Columns": "5 Spalten", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 Aug, 1999 (j M, Y)", "6 Columns": "6 Spalten", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Die Zuteilung von mehr Arbeitsspeicher wird empfohlen. Setze den <code>memory_limit</code> auf 128M in der <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP Konfiguration</a>.", "A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Ein höheres Upload-Limit wird empfohlen. Setze die <code>post_max_size</code> auf mindestens 8M in der <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP Konfiguration</a>.", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Ein höheres Upload-Limit wird empfohlen. Setze die <code>upload_max_filesize</code> auf 8M in der <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP Konfiguration</a>.", "About": "Über", "Above Content": "Oberhalb des Inhalts", "Above Title": "Oberhalb des Titels", "Absolute": "Absolut", "Accessed": "Letzter Zugriff", "Accessed Date": "Zugriffsdatum", "Accordion": "Akkordeon", "Active": "Aktiv", "Active Filters": "Aktive Filter", "Active Filters Count": "Anzahl aktiver Filter", "Active item": "Aktiver Eintrag", "Add": "Hinzufügen", "Add a colon": "Doppelpunkt einfügen", "Add a comma-separated list of font weights to load, e.g. 300, 400, 600. Look up available variants at <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.": "Komma-getrennte Liste der Schriftstärken, die geladen werden sollen, z.B. 300, 400, 600. Verfügbare Varianten werden auf <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a> gezeigt.", "Add a leader": "Leader (Verbindungspunkte zwischen Spalten) hinzufügen", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Füge einen Parallax Effekt hinzu oder fixiere den Hintergrund beim Scrollen zum Viewport.", "Add a parallax effect.": "Parallax Effekt hinzufügen.", "Add a stepless parallax animation based on the scroll position.": "Stufenlose Parallax-Animation basierend auf der Scroll Position einfügen.", "Add animation stop": "Animationsstopp hinzufügen", "Add bottom margin": "Unteres Außenabstand hinzufügen", "Add clipping offset": "Clipping Offset hinzufügen", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Eigenes CSS oder LESS in die Seite einfügen. Alle LESS theme Variablen und Mixins können verwendet werden. Das <code><style></code> Tag wird nicht benötigt.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Eigenes JavaScript in die Seite einfügen. Das <code><script></code> Tag wird nicht benötigt.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Füge eigenen JavaScript Code hinzu, der Cookies setzt. Es wird erst geladen, nachdem die Einwilligung erteilt wurde. Das <code><script></code>-Tag wird nicht benötigt.", "Add Element": "Element hinzufügen", "Add extra margin to the button.": "Zusätzliches Außenabstand zum Button hinzufügen.", "Add Folder": "Ordner hinzufügen", "Add hover style": "Hover-Stil hinzufügen", "Add Item": "Eintrag einfügen", "Add margin between": "Zusätzliches Außenabstand einfügen", "Add Media": "Medien einfügen", "Add Menu Item": "Menü Eintrag einfügen", "Add Module": "Modul einfügen", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Füge mehrere Stopps hinzu, um Start-, Zwischen- und Endfarben entlang der Animationssequenz zu definieren. Gebe optional einen Prozentsatz an, um die Stopps entlang der Animation zu positionieren.", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Füge mehrere Stopps hinzu, um die Deckkraft am Start-, Zwischen- und Endpunkt entlang der Animationssequenz zu definieren. Gebe optional einen Prozentsatz an, um die Stopps entlang der Animation zu positionieren.", "Add Row": "Zeile einfügen", "Add Section": "Section einfügen", "Add text after the content field.": "Füge Text nach dem Inhaltsfeld ein.", "Add text before the content field.": "Füge Text vor dem Inhaltsfeld ein.", "Add to Cart": "Zum Warenkorb hinzufügen", "Add to Cart Link": "In den Warenkorb Link", "Add to Cart Text": "In den Warenkorb Text", "Add top margin": "Oberes Außenabstand hinzufügen", "Adding a New Page": "Eine neue Seite anlegen", "Adding the Logo": "Das Logo hinzufügen", "Adding the Search": "Suche hinzufügen", "Adding the Social Icons": "Social Icons hinzufügen", "Additional Information": "Zusätzliche Informationen", "Address": "Adresse", "Advanced": "Erweitert", "Advanced WooCommerce Integration": "Erweiterte WooCommerce Integration", "After": "Nach", "After 1 Item": "Nach 1 Element", "After 10 Items": "Nach 10 Elementen", "After 2 Items": "Nach 2 Elementen", "After 3 Items": "Nach 3 Elementen", "After 4 Items": "Nach 4 Elementen", "After 5 Items": "Nach 5 Elementen", "After 6 Items": "Nach 6 Elementen", "After 7 Items": "Nach 7 Elementen", "After 8 Items": "Nach 8 Elementen", "After 9 Items": "Nach 9 Elementen", "After Display Content": "Nach dem Inhalt", "After Display Title": "Nach dem Titel", "After Submit": "Nach dem Senden", "Alert": "Warnung", "Alias": "Alias", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Richte Dropdowns an ihrem Menüeintrag oder der Navbar aus. Optional, zeige sie in voller Breite als s. g. Dropbar, zeige einen Dropdown Symbol neben dem Menueintrag, und öffne die Textelemente durch Klicken und nicht durch Hovern.", "Align image without padding": "Bild ausrichten ohne Innenabstand", "Align the filter controls.": "Filter-Steuerelemente ausrichten.", "Align the image to the left or right.": "Bild nach links oder rechts ausrichten.", "Align the image to the top or place it between the title and the content.": "Richte das Bild nach oben aus oder zwischen Titel und Inhalt.", "Align the image to the top, left, right or place it between the title and the content.": "Richte das Bild nach oben, links, rechts aus oder zwischen Titel und Inhalt.", "Align the meta text.": "Richte den Meta Text aus.", "Align the navigation items.": "Navigations Elemente ausrichten.", "Align the section content vertically, if the section height is larger than the content itself.": "Inhalt der Section vertikal ausrichten, falls die Section höher als der Inhalt ist.", "Align the title and meta text as well as the continue reading button.": "Richte den Titel, Meta Text und den Weiterlesen Button aus.", "Align the title and meta text.": "Richte den Titel und Meta Text aus.", "Align the title to the top or left in regards to the content.": "Richte den Titel oben oder links zum Inhalt aus.", "Align to filter bar": "An der Filter-Leiste ausrichten", "Align to navbar": "An Navbar ausrichten", "Alignment": "Ausrichtung", "Alignment Breakpoint": "Ausrichtung Breakpoint", "Alignment Fallback": "Ausrichtung Fallback", "All %filter%": "Alle %filter%", "All %label%": "Alle %label%", "All backgrounds": "Alle Hintergründe", "All colors": "Alle Farben", "All except first page": "Alle außer der ersten Seite", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Alle Bilder sind lizenziert unter <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, was bedeutet, sie dürfen kopiert, verändert, weitergegeben und kostenfrei verwendet werden, auch für kommerzielle Zwecke, ohne eine Erlaubnis einholen zu müssen.", "All Items": "Alle Einträge", "All layouts": "Alle Layouts", "All pages": "Alle Seiten", "All presets": "Alle Voreinstellungen", "All styles": "Alle Stile", "All topics": "Alle Themen", "All types": "Alle Typen", "All websites": "Alle Webseiten", "All-time": "Gesamter Zeitraum", "Allow mixed image orientations": "Unterschiedliche Bildausrichtungen erlauben", "Allow multiple open items": "Mehrere geöffnete Einträge erlauben", "Alphabetical": "Alphabetisch", "Alphanumeric Ordering": "Alphanumerische Sortierung", "Alt": "Alt", "Alternate": "Abwechseln", "Always": "Immer", "Animate background only": "Animation nur auf Hintergrund anwenden", "Animate items": "Animiere Elemente", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animiere Eigenschaften auf bestimmte Werte. Füge mehrere Stopps hinzu, um Start-, Zwischen- und Endwerte entlang der Animationssequenz für jede Eigenschaft zu definieren. Gib optional einen Prozentsatz an, um die Stopps entlang der Animationssequenz zu positionieren. Translate und Scale können die optionalen Einheiten <code>%</code>, <code>vw</code> und <code>vh</code> haben.", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animiere Eigenschaften auf bestimmte Werte. Füge mehrere Stopps hinzu, um Start-, Zwischen- und Endwerte entlang der Animationssequenz für jede Eigenschaft zu definieren. Gib optional einen Prozentsatz an, um die Stopps entlang der Animationssequenz zu positionieren. Translate und Scale können die optionalen Einheiten <code>%</code>, <code>vw</code> und <code>vh</code> haben.", "Animate strokes": "Striche animieren", "Animation": "Animation", "Animation Delay": "Animationsverzögerung", "Animations": "Animationen", "Any": "Beliebig", "Any Joomla module can be displayed in your custom layout.": "Jedes Joomla Modul kann im eigenen Layout angezeigt werden.", "Any WordPress widget can be displayed in your custom layout.": "Jedes WordPress Widget kann im eigenen Layout angezeigt werden.", "API Key": "API Schlüssel", "Apply a margin between the navigation and the slideshow container.": "Füge einen Außenabstand zwischen Navigation und der Slideshow ein.", "Apply a margin between the overlay and the image container.": "Füge einen Außenabstand zwischen Overlay und Bild ein.", "Apply a margin between the slidenav and the slider container.": "Füge einen Außenabstand zwischen der Slidenav und dem Slider ein.", "Apply a margin between the slidenav and the slideshow container.": "Füge einen Außenabstand zwischen der Slidenav und dem Slideshow Container ein.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Animiere Elemente, sobald diese im Viewport sichtbar sind. Slide Animationen können einen festen Startwert bekommen oder um 100% der Element-Breite versetzt starten.", "Archive": "Archiv", "Are you sure?": "Bist du dir sicher?", "ARIA Label": "ARIA Label", "Article": "Beitrag", "Article Count": "Beitrags-Anzahl", "Article Order": "Beitrags-Reihenfolge", "Articles": "Beiträge", "As notification only ": "Nur als Mitteilung ", "As superscript": "Als hochgestellte Schrift", "Ascending": "Aufsteigend", "Assigning Modules to Specific Pages": "Module bestimmten Seiten zuweisen", "Assigning Templates to Pages": "Templates bestimmten Seiten zuweisen", "Assigning Widgets to Specific Pages": "Widgets bestimmten Seiten zuweisen", "Attach the image to the drop's edge.": "Bild an den Kanten des Drop ausrichten.", "Attention! Page has been updated.": "Achtung! Die Seite wurde aktualisiert.", "Attribute Filters": "Attribut Filter", "Attribute Slug": "Slug des Attributs", "Attribute Terms": "Attribut Begriffe", "Attribute Terms Operator": "Attribut Begriffe Operator", "Attributes": "Attribute", "Aug 6, 1999 (M j, Y)": "Aug 6, 1999 (M j, Y)", "August 06, 1999 (F d, Y)": "August 06, 1999 (F d, Y)", "Author": "Autor", "Author Archive": "Autor Archiv", "Author Link": "Autor Link", "Auto": "Automatisch", "Auto-calculated": "Automatisch berechnet", "Autoplay": "Automatisch starten", "Autoplay Interval": "Autoplay-Intervall", "Avatar": "Avatar", "Average Daily Views": "Durchschnittliche Seitenansichten pro Tag", "b": "b", "Back": "Zurück", "Back to top": "Zurück nach oben", "Background": "Hintergrund", "Background Color": "Hintergrundfarbe", "Background Image": "Hintergrundbild", "Badge": "Plakete", "Bar": "Balken", "Base Style": "Basis-Stil", "Basename": "Basisname", "Before": "Vor", "Before Display Content": "Vor dem Inhalt", "Behavior": "Verhalten", "Below Content": "Unterhalb des Inhalts", "Below Title": "Unterhalb des Titels", "Beta": "Beta", "Between": "Dazwischen", "Blank": "Leer", "Blend": "Mischen", "Blend Mode": "Überblendungsmodus", "Block Alignment": "Block Ausrichtung", "Block Alignment Breakpoint": "Block Ausrichtung Breakpoint", "Block Alignment Fallback": "Block Ausrichtung Fallback", "Blog": "Blog", "Blur": "Blur", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrap ist nur dann erforderlich, wenn Standard-Ansichten von Joomla im Frontend verwendet werden, insbesondere zur Frontend-Bearbeitung von Artikeln. jQuery kann geladen werden, um eigene Scripts zu verwenden, die die jQuery JavaScript Bibliothek benötigen.", "Border": "Außenlinie", "Bottom": "Bottom", "Bottom Center": "Unten Mitte", "Bottom Left": "Unten Links", "Bottom Right": "Unten Rechts", "Box Decoration": "Box Dekoration", "Box Shadow": "Box Schatten", "Boxed": "Eingerahmt", "Brackets": "Klammern", "Breadcrumb": "Breadcrumb", "Breadcrumbs": "Breadcrumbs", "Breadcrumbs Home Text": "Breadcrumbs Home Text", "Breakpoint": "Breakpoint", "Builder": "Builder", "Builder Module": "Builder Modul", "Builder Widget": "Builder Widget", "Bullet": "Aufzählungspunkt", "Button": "Button", "Button Danger": "Button Danger", "Button Default": "Button Default", "Button Margin": "Button Außenabstand", "Button Primary": "Button Primary", "Button Secondary": "Button Secondary", "Button Size": "Button-Größe", "Button Text": "Button Text", "Buttons": "Buttons", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Standardmäßig stehen Felder verwandter Quellen mit einzelnen Einträgen für die Zuordnung zur Verfügung. Wähle eine Quelle aus, die mehrere Einträge enthält, um ihre Felder zuzuordnen.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "Standardmäßig werden Bilder nachgeladen. Aktiviere sofortiges Laden der Bilder im ersten Viewport.", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "Standardmäßig werden nur nicht kategorisierte Artikel als Seiten bezeichnet. Alternativ können auch Artikel aus einer bestimmten Kategorie als Seiten definiert werden.", "By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.": "Standardmäßig werden nur nicht kategorisierte Artikel als Seiten bezeichnet. Die Kategorie kann in den erweiterten Einstellungen geändert werden.", "Cache": "Cache", "Campaign Monitor API Token": "Campaign Monitor API-Token", "Cancel": "Abbrechen", "Caption": "Caption", "Card Default": "Card Default", "Card Hover": "Card Hover", "Card Primary": "Card Primary", "Card Secondary": "Card Secondary", "Cart": "Warenkorb", "Cart Cross-sells Columns": "Warenkorb Cross-Sells Spalten", "Cart Quantity": "Anzahl der Artikel im Warenkorb", "Categories": "Kategorien", "Categories are only loaded from the selected parent category.": "Es werden nur Kategorien aus der ausgewählten übergeordneten Kategorie geladen.", "Categories Operator": "Kategorien-Operator", "Category": "Kategorie", "Category Blog": "Kategorieblog", "Category Order": "Kategoriereihenfolge", "Center": "Mitte", "Center Center": "Mitte Mitte", "Center columns": "Spalten zentrieren", "Center grid columns horizontally and rows vertically.": "Zentriere Grid Spalten horizontal und Zeilen vertikal.", "Center horizontally": "Horizontal zentrieren", "Center Left": "Mitte Links", "Center Right": "Mitte Rechts", "Center rows": "Zeilen zentrieren", "Center the active slide": "Aktiven Slide zentrieren", "Center the content": "Inhalt zentrieren", "Center the module": "Modul zentrieren", "Center the title and meta text": "Titel und Meta Text zentrieren", "Center the title, meta text and button": "Titel, Meta Text und Button zentrieren", "Center the widget": "Widget zentrieren", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Ausrichtung: center, links und rechts können vom Breakpoint abhängig sein und benötigen einen Fallback.", "Changed": "Änderungsdatum", "Changed Date": "Geändertes Datum", "Changelog": "Changelog", "Checkout": "Zur Kasse", "Checkout Page": "Checkout Seite", "Child %taxonomies%": "Untergeordnete %taxonomies%", "Child Categories": "Unterkategorien", "Child Menu Items": "Untergeordnete Menüpunkte", "Child Tags": "Untergeordnete Tags", "Child Theme": "Child-Theme", "Choose a divider style.": "Wähle einen Trenner-Stil.", "Choose a map type.": "Kartentyp wählen.", "Choose between a navigation that shows filter controls separately in single dropdowns or a toggle button that shows all filters in a dropdown or an offcanvas dialog.": "Wähle zwischen einer Navigation, die Filter separat in einzelnen Dropdown-Menüs anzeigt, oder alle Filter in einem Dropdown-Menü oder einem Offcanvas-Dialogfeld anzeigt.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Wähle zwischen einem Parallax-Effekt abhängig von der Scroll Position, oder einer Animation, die angewendet wird, sobald der Slide aktiv ist.", "Choose between a vertical or horizontal list.": "Wähle zwischen einer vertikalen und einer horizontalen Liste.", "Choose between an attached bar or a notification.": "Wähle zwischen der unten platzierten Leiste oder einer Mitteilung.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Wähle zwischen den Vorheriger/Nächster Links oder der numerischen Paginierung. Die numerische Paginierung ist auf der Beitrag Ansicht nicht verfügbar.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Wähle zwischen den Vorheriger/Nächster Links oder der numerischen Paginierung. Die numerische Paginierung ist auf der Post Ansicht nicht verfügbar.", "Choose Font": "Schriftart wählen", "Choose products of the current page or query custom products.": "Wähle Produkte der aktuellen Seite oder frage benutzerdefinierte Produkte ab.", "Choose the icon position.": "Wähle die Icon Position.", "Choose the page to which the template is assigned.": "Wähle die Seite, der das Template zugeordnet ist.", "Circle": "Kreis", "City or Suburb": "Stadt oder Region", "Class": "Klasse", "Classes": "Klassen", "Clear Cache": "Cache leeren", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Lösche gecachte Bilder und Assets. Bilder, deren Größe geändert wurde, werden im Cache-Ordner des Templates gespeichert. Wurde ein Bild mit gleichem Namen erneut hochgeladen, muss der Cache geleert werden.", "Click": "Klick", "Click on the pencil to pick an icon from the icon library.": "Klicke den Stift um ein Icon aus der Icon-Sammlung zu wählen.", "Close": "Schließen", "Close Icon": "Schließen-Icon", "Close on background click": "Bei Klick außerhalb schließen", "Cluster Icon (< 10 Markers)": "Cluster-Icon (< 10 Marker)", "Cluster Icon (< 100 Markers)": "Cluster-Icon (< 100 Marker)", "Cluster Icon (100+ Markers)": "Cluster-Icon (100+ Marker)", "Clustering": "Clustering", "Code": "Code", "Collapsing Layouts": "Zusammenfallende Layouts", "Collections": "Sammlungen", "Color": "Farbe", "Color navbar parts separately": "Navbar-Teile separat einfärben", "Color-burn": "Color-burn", "Color-dodge": "Color-dodge", "Column": "Spalte", "Column 1": "Spalte 1", "Column 2": "Spalte 2", "Column 3": "Spalte 3", "Column 4": "Spalte 4", "Column 5": "Spalte 5", "Column 6": "Spalte 6", "Column Gap": "Spalten Abstand", "Column Height": "Spaltenhöhe", "Column Layout": "Spalten Layout", "Column Parallax": "Spalten Parallax", "Column within Row": "Spalte innerhalb Zeile", "Column within Section": "Spalte innerhalb Section", "Columns": "Spalten", "Columns Breakpoint": "Spalten Breakpoint", "Comment Count": "Anzahl der Kommentare", "Comments": "Kommentare", "Components": "Komponenten", "Condition": "Bedingung", "Consent Button Style": "Bestätigungs-Button Stil", "Consent Button Text": "Bestätigungs-Button Text", "Contact": "Kontakt", "Contacts Position": "Kontakt Position", "Contain": "Beinhalten", "Container": "Container", "Container Default": "Container Default", "Container Large": "Container Large", "Container Padding": "Container Innenabstand", "Container Small": "Container Small", "Container Width": "Container Breite", "Container X-Large": "Container X-Large", "Contains": "Enthält", "Contains %element% Element": "Enthält %element% Element", "Contains %title%": "Enthält %title%", "Content": "Inhalt", "content": "Inhalt", "Content Alignment": "Inhalt Ausrichtung", "Content Length": "Inhalt Länge", "Content Margin": "Inhalt Außenabstand", "Content Parallax": "Inhalt Parallax", "Content Type Title": "Inhalts-Typ Titel", "Content Width": "Inhalt Breite", "Controls": "Steuerelemente", "Convert": "Umwandeln", "Convert to title-case": "Titel-Großschreibung benutzen", "Cookie Banner": "Cookie Banner", "Cookie Scripts": "Cookie Skripte", "Coordinates": "Koordinaten", "Copy": "Kopieren", "Countdown": "Countdown", "Country": "Land", "Cover": "Ausfüllen", "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.": "Das \"Masonry\" Layout ist besonders geeignet, wenn die Inhalte unterschiedlich hoch sind. Ordne sie nach Platzbedarf oder lass sie in ihrer festgelegten Reihefolge. Der optionale Parallax-Effekt bewegt die Spalten beim Scrollen bis sie unten ausgeglichen sind.", "Create a general layout for the live search results. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Erstell ein allgemeines Layout für die Live Suche. Fang an mit einem neuen Layout, füge neue gebrauchsfertige Elemente hinzu oder such Dir ein bereits vorbereitetes Layout aus der Libray aus.", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Erstelle ein generelles Layout für diesen Seiten-Typ. Starte mit einem neuen Layout und füge Elemente aus der Sammlung hinzu oder lade ein vorhandenes Layout aus der Bibliothek.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Erstelle ein generelles Layout für die Footer Section, die auf allen Seiten gezeigt wird. Starte mit einem neuen Layout und füge Elemente aus der Sammlung hinzu oder lade ein vorhandenes Layout aus der Bibliothek.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Erstelle ein Layout für das Menü Dropdown. Starte mit einem neuen Layout und füge Elemente aus der Sammlung hinzu oder lade ein vorhandenes Layout aus der Bibliothek.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Erstelle ein Layout für dieses Modul und veröffentliche es in der Top oder Bottom Position. Fang an mit einem neuen Layout und füge Elemente aus der Sammlung hinzu oder lade ein vorhandenes Layout aus der Bibliothek.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Erstelle ein Layout für dieses Widget und veröffentliche es in der Top oder Bottom Position. Fang an mit einem neuen Layout und füge Elemente aus der Sammlung hinzu oder lade ein vorhandenes Layout aus der Bibliothek.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Erstelle ein Layout. Fang an mit einem neuen Layout und füge Elemente aus der Sammlung hinzu oder lade ein vorhandenes Layout aus der Bibliothek.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Erstelle ein individuelles Layout für die aktuelle Seite. Fang an mit einem neuen Layout und füge Elemente aus der Sammlung hinzu oder lade ein vorhandenes Layout aus der Bibliothek.", "Create site-wide templates for pages and load their content dynamically into the layout.": "Erstelle Templates mit Builder-Layouts, in die per Dynamic Content Text, Bilder und andere Inhalte geladen werden können.", "Created": "Erstellungsdatum", "Created Date": "Erstellungsdatum", "Creating a New Module": "Neues Modul erstellen", "Creating a New Widget": "Neues Widget erstellen", "Creating Accordion Menus": "Accordion Menüs erstellen", "Creating Advanced Module Layouts": "Fortgeschrittene Modul Layouts erstellen", "Creating Advanced Widget Layouts": "Erweiterte Widget Layouts erstellen", "Creating Advanced WooCommerce Layouts": "Erweiterte WooCommerce Layouts erstellen", "Creating Individual Post Layout": "Individuelles Post-Layout erstellen", "Creating Individual Post Layouts": "Individuelle Post-Layouts erstellen", "Creating Menu Dividers": "Menü Trenner erstellen", "Creating Menu Heading": "Menü Überschrift erstellen", "Creating Menu Headings": "Menü Überschriften erstellen", "Creating Menu Text Items": "Menü Text Einträge erstellen", "Creating Navbar Text Items": "Navbar Text Einträge erstellen", "Creating Parallax Effects": "Parallax Effekte erstellen", "Creating Sticky Parallax Effects": "Sticky Parallax Effekte erstellen", "Critical Issues": "Kritische Fehler", "Critical issues detected.": "Kritische Fehler wurden festgestellt.", "Cross-Sell Products": "Cross-Selling-Produkte", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "Kuratiert von <a href>%user%</a>", "Current Layout": "Aktuelles Layout", "Current Style": "Aktueller Stil", "Current User": "Aktueller Benutzer", "Custom": "Benutzerdefiniert", "Custom %post_type%": "Benutzerdefinierte(r) %post_type%", "Custom %post_types%": "Benutzerdefinierte(r) %post_types%", "Custom %taxonomies%": "Benutzerdefinierte(r) %taxonomies%", "Custom %taxonomy%": "Eigene(r) %taxonomy%", "Custom Article": "Benutzerdefinierter Beitrag", "Custom Articles": "Benutzerdefinierte Beiträge", "Custom Categories": "Benutzerdefinierte Kategorien", "Custom Category": "Benutzerdefinierte Kategorie", "Custom Code": "Benutzerdefinierter Code", "Custom Fields": "Benutzerdefinierte Felder", "Custom Menu Item": "Benutzerdefinierter Menüeintrag", "Custom Menu Items": "Benutzerdefinierte Menü Einträge", "Custom Product category": "Custom Produktkategorie", "Custom Product tag": "Custom Produkt-Tag", "Custom Query": "Benutzerdefinierte Abfrage", "Custom Tag": "Benutzerdefinierter Tag", "Custom Tags": "Benutzerdefinierte Tags", "Custom User": "Benutzerdefinierter Benutzer", "Custom Users": "Benutzerdefinierte Benutzer", "Customization": "Anpassung", "Customization Name": "Anpassung Name", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Passe die Spaltenbreite des ausgewählten Layouts an und lege die Spaltenreihenfolge fest. Durch Ändern des Layouts werden alle Anpassungen zurückgesetzt.", "Customizer": "Customizer", "Danger": "Danger", "Dark": "Dunkel", "Dark Text": "Dunkler Text", "Darken": "Abdunkeln", "Date": "Datum", "Date Archive": "Datum Archiv", "Date Format": "Datumsformat", "Day Archive": "Tagesarchiv", "Decimal": "Dezimal", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Füge einen dekorativen Trenner, Bullet oder eine vertikal zentrierte Linie in die Überschrift ein.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Füge einen dekorativen Trenner, Bullet oder eine vertikal zentrierte Linie in die Überschrift ein.", "Decoration": "Dekoration", "Default": "Default", "Default Link": "Default Link", "Define a background style or an image of a column and set the vertical alignment for its content.": "Setze einen Hintergrundstil oder ein Bild einer Spalte und lege die vertikale Ausrichtung für den Inhalt fest.", "Define a custom background color or a color parallax animation instead of using a predefined style.": "Define a custom background color or a color parallax animation instead of using a predefined style.", "Define a name to easily identify the template.": "Gib einen Namen an, um das Template leicht zu erkennen.", "Define a name to easily identify this element inside the builder.": "Definiere einen Namen, um dieses Element im Builder zu identifizieren.", "Define a navigation menu or give it no semantic meaning.": "Definiere ein Navigationsmenü oder gib keine semantische Bedeutung an.", "Define a unique identifier for the element.": "Definiere eine eindeutige Kennzeichnung für das Element.", "Define an alignment fallback for device widths below the breakpoint.": "Definiere eine Fallback-Ausrichtung für Geräte, die kleiner sind als der Breakpoint.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Definiere ein oder mehrere Attribute für das Element. Attributname und Wert werden durch das Zeichen <code>=</code> getrennt. Ein Attribut pro Zeile.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Definiere eine oder mehr CSS-Klassen für das Element. Mehrere Klassen werden mit Leerzeichen getrennt.", "Define the alignment in case the container exceeds the element max-width.": "Definiere die Ausrichtung wenn der Container die maximale Breite des Elements überschreitet.", "Define the alignment of the last table column.": "Definiere die Ausrichtung der letzten Tabellen Spalte.", "Define the device width from which the alignment will apply.": "Definiere die Gerätegröße, ab der die Ausrichtung der Elemente wirksam wird.", "Define the device width from which the dropnav will be shown.": "Leg fest, ab welcher Fensterbreite der Dropnav gezeigt werden soll.", "Define the device width from which the max-width will apply.": "Definiere die Gerätegröße, ab der die maximale Breite wirksam wird.", "Define the filter fallback mode for device widths below the breakpoint.": "Lege den Fallback-Modus für Gerätebreiten unterhalb des Breakpoints fest.", "Define the image quality in percent for generated JPG images and when converting JPEG and PNG to next-gen image formats.<br><br>Mind that setting the image quality too high will have a negative impact on page loading times.<br><br>Press the Clear Cache button in the advanced settings after changing the image quality.": "Definiere die Bildqualität in Prozent für generierte JPG-Bilder und bei der Konvertierung von JPEG und PNG in Next-Gen-Bildformate.<br><br>Eine zu hohe Einstellung der Bildqualität kann einen negativen Einfluss auf Seitenladezeiten haben.<br><br>Nach Änderung der Bildqualität klicke Clear Cache in den erweiterten Einstellungen.", "Define the layout of the form.": "Definiere das Layout des Formulars.", "Define the layout of the title, meta and content.": "Definiere das Layout von Titel, Meta und Inhalt.", "Define the order of the table cells.": "Definiere die Sortierung der Tabellen Zellen.", "Define the origin of the element's transformation when scaling or rotating the element.": "Lege den Ursprung der Transformation des Elements bei Größenänderung oder Drehung fest.", "Define the padding between items.": "Definiere den Innenabstand zwischen Elementen.", "Define the padding between table rows.": "Definiere den Innenabstand zwischen Tabellen Zeilen.", "Define the purpose and structure of the content or give it no semantic meaning.": "Definiere den Zweck und die Struktur des Inhalts oder setze keine semantische Bedeutung.", "Define the title position within the section.": "Definiere die Position des Titels innerhalb der Section.", "Define the width of the content cell.": "Definiere die Breite der Inhalts-Zelle.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Setze die Breite der Filter Navigation. Wähle zwischen prozentualen und festen Werten oder erweitere die Spalten auf die Breite des Inhalts.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Setze die Breite des Bilds im Grid. Wähle zwischen prozentualen und festen Werten oder erweitere die Spalten auf die Breite des Inhalts.", "Define the width of the meta cell.": "Definiere die Breite der Meta-Zelle.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Setze die Breite der Navigation. Wähle zwischen prozentualen und festen Werten oder erweitere die Spalten auf die Breite des Inhalts.", "Define the width of the title cell.": "Definiere die Breite der Titel-Zelle.", "Define the width of the title within the grid.": "Definiere die Breite des Titels innerhalb des Grid.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Setze die Breite des Titels im Grid. Wähle zwischen prozentualen und festen Werten oder erweitere die Spalten auf die Breite des Inhalts.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Wähle ob die Breite der Slider Einträge einen festen Wert hat oder erweitere sie auf die Breite des Inhalts.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Wähle ob die Thumbnails in mehrere Spalten brechen wenn der Container zu klein wird.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Verzögere die Element-Animation in Millisekunden, z.B. <code>200</code>.", "Delayed Fade": "Verzögertes Ein-/Ausblenden", "Delete": "Löschen", "Delete animation stop": "Animationsstopp löschen", "Descending": "Absteigend", "description": "Beschreibung", "Description": "Beschreibung", "Description List": "Beschreibungsliste", "Desktop": "Desktop", "Determine how the image or video will blend with the background color.": "Lege fest wie das Bild oder Video mit der Hintergrundfarbe überblendet.", "Determine how the image will blend with the background color.": "Lege fest wie das Bild mit der Hintergrundfarbe überblendet.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Lege fest, ob das Bild automatisch an die Größe der Seite angepasst wird oder leere Bereiche mit der Hintergrundfarbe gefüllt werden.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Wähle, ob das Bild automatisch an die Größe der Section angepasst wird oder leere Bereiche mit der Hintergrundfarbe gefüllt werden.", "Dialog": "Dialog", "Dialog End": "Dialog Ende", "Dialog Layout": "Dialog Layout", "Dialog Logo (Optional)": "Dialog-Logo (Optional)", "Dialog Push Items": "Dialog-Push-Elemente", "Dialog Start": "Dialog Start", "Dialog Toggle": "Dialog Toggle", "Difference": "Unterschied", "Direction": "Richtung", "Dirname": "Verzeichnis-Name", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Deaktiviere autoplay, starte das Video immer automatisch oder sobald das Video im Viewport erscheint.", "Disable element": "Element deaktivieren", "Disable Emojis": "Emojis deaktivieren", "Disable infinite scrolling": "Endloses Scrollen deaktivieren", "Disable item": "Eintrag deaktivieren", "Disable row": "Zeile deaktivieren", "Disable section": "Section deaktivieren", "Disable template": "Template deaktivieren", "Disable the <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filter for the_content and the_excerpt and disable conversion of Emoji characters to images.": "Deaktiviere den <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> Filter für the_content und the_excerpt sowie die Umwandlung von Emojis in Bilder.", "Disable the element and publish it later.": "Deaktiviere das Element, um es später zu veröffentlichen.", "Disable the item and publish it later.": "Deaktiviere das Element, um es später zu veröffentlichen.", "Disable the row and publish it later.": "Deaktiviere die Zeile, um sie später zu veröffentlichen.", "Disable the section and publish it later.": "Deaktiviere die Section, um sie später zu veröffentlichen.", "Disable the template and publish it later.": "Deaktiviere das Template, um es später zu veröffentlichen.", "Disable wpautop": "Deaktiviere wpautop", "Disabled": "Deaktiviert", "Disc": "Scheibe", "Discard": "Verwerfen", "Display": "Anzeigen", "Display a divider between sidebar and content": "Trenner zwischen Sidebar und Inhalt anzeigen", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Wähle die Position, in der das Menü angezeigt werden soll. Zum Beispiel, zeige das Hauptmenü in der Navbar Position und ein alternatives Menü in der Mobile Position.", "Display a search icon on the left or right of the input field. The icon on the right can be clicked to submit the search.": "Zeige das Such-Icon links oder rechts neben dem Eingabefeld an. Das Icon auf der rechten Seite kann angeklickt werden, um die Suche zu starten.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Zeigt ein Suchen Icon auf der linken oder rechten Seite an. Das Icon rechts kann geklickt werden, um die Suche abzuschicken.", "Display header outside the container": "Zeige den Header außerhalb des Containers", "Display icons as buttons": "Icons als Buttons anzeigen", "Display on the right": "Rechts anzeigen", "Display overlay on hover": "Zeige das Overlay bei Maus-Hover", "Display products based on visibility.": "Zeige die Produkte basierend auf der Sichtbarkeit.", "Display the breadcrumb navigation": "Zeige die Breadcrumb-Navigation", "Display the cart quantity in brackets or as a badge.": "Zeigt die Menge des Warenkorbs in Klammern oder als Plakette an.", "Display the content inside the overlay, as the lightbox caption or both.": "Zeige den Inhalt im Overlay, als Caption in der Lightbox oder beides.", "Display the content inside the panel, as the lightbox caption or both.": "Zeige den Inhalt im Panel, als Caption in der Lightbox oder beides.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Zeige das Textauszugsfeld an, wenn es Inhalt hat, andernfalls den Inhalt. Um ein Textauszugsfeld zu verwenden, erstelle ein benutzerdefiniertes Feld mit dem Namen 'excerpt'.", "Display the excerpt field if it has content, otherwise the intro text.": "Zeige das Textauszugsfeld an, wenn es Inhalt hat, andernfalls den Einleitungstext.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Zeige das Textauszugsfeld an, wenn es Inhalt hat, andernfalls den Einleitungstext. Um ein Auszugsfeld zu verwenden, erstelle ein benutzerdefiniertes Feld mit dem Namen 'textauszugsfeld'.", "Display the first letter of the paragraph as a large initial.": "Ersten Buchstaben eines Absatzes als mehrzeilige Initiale anzeigen.", "Display the image only on this device width and larger.": "Bild erst ab der gewählten Gerätegröße anzeigen.", "Display the image or video only on this device width and larger.": "Bild oder Video erst ab der gewählten Gerätegröße anzeigen.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Zeige die Karten-Steuerelemente und erlaube das Zoomen und Verschieben der Karte per Klick oder Touch.", "Display the meta text in a sentence or a horizontal list.": "Zeige den Meta Text in einer Zeile oder als Horizontale Liste.", "Display the module only from this device width and larger.": "Das Modul erst ab der gewählten Gerätegröße anzeigen.", "Display the navigation only on this device width and larger.": "Navigation erst ab der gewählten Gerätegröße anzeigen.", "Display the parallax effect only on this device width and larger.": "Den Parallax Effekt erst ab der gewählten Gerätegröße anzeigen.", "Display the popover on click or hover.": "Zeige den Popover bei Klick oder Maus-Hover.", "Display the section title on the defined screen size and larger.": "Den Section-Titel ab der gewählten Gerätegröße anzeigen.", "Display the short or long description.": "Zeige die kurze oder lange Beschreibung an.", "Display the slidenav only on this device width and larger.": "Slidenav erst ab der gewählten Gerätegröße anzeigen.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Die Slidenav außen erst ab der gewählten Gerätegröße anzeigen. Andernfalls, zeige sie innen.", "Display the title in the same line as the content.": "Zeige den Titel auf der selben Höhe wie den Inhalt.", "Display the title inside the overlay, as the lightbox caption or both.": "Zeige den Titel im Overlay, als Caption in der Lightbox oder beides.", "Display the title inside the panel, as the lightbox caption or both.": "Zeige den Titel im Panel, als Caption in der Lightbox oder beides.", "Display the widget only from this device width and larger.": "Widget erst ab dieser Gerätegröße und größer anzeigen.", "Display together with filters": "Zusammen mit Filtern anzeigen", "Displaying the Breadcrumbs": "Breadcrumbs anzeigen", "Displaying the Excerpt": "Textauszug anzeigen", "Displaying the Mobile Header": "Mobile Header anzeigen", "div": "div", "Divider": "Trenner", "Do you really want to replace the current layout?": "Soll das aktuelle Layout verworfen werden?", "Do you really want to replace the current style?": "Soll der aktuelle Stil ersetzt werden?", "Documentation": "Dokumentation", "Does not contain": "Enthält nicht", "Does not end with": "Endet nicht mit", "Does not start with": "Beginnt nicht mit", "Don't collapse column": "Spalte auch zeigen, wenn sie leer ist", "Don't collapse the column if dynamically loaded content is empty.": "Spalte auch zeigen, wenn dynamischer geladener Inhalt leer ist.", "Don't expand": "Nicht ausweiten", "Don't match (NOR)": "Nicht übereinstimmen (NOR)", "Don't match %taxonomies% (NOR)": "%taxonomies% nicht übereinstimmen (NOR)", "Don't match author (NOR)": "Autor nicht übereinstimmen (NOR)", "Don't match category (NOR)": "Kategorie nicht übereinstimmen (NOR)", "Don't match tags (NOR)": "Tags nicht übereinstimmen (NOR)", "Don't wrap into multiple lines": "Nicht in mehrere Zeilen umbrechen", "Dotnav": "Dotnav", "Double opt-in": "Zweifache Bestätigung (Double opt-in)", "Download": "Herunterladen", "Download All": "Alles herunterladen", "Download Less": "LESS herunterladen", "Draft new page": "Neue Seite erstellen", "Drop Cap": "Initiale", "Dropbar Animation": "Dropbar Animation", "Dropbar Center": "Dropbar Mitte", "Dropbar Content Width": "Dropbar Inhaltsbreite", "Dropbar Top": "Dropbar Oben", "Dropbar Width": "Dropbar Weite", "Dropdown": "Dropdown", "Dropdown Alignment": "Dropdown Ausrichtung", "Dropdown Columns": "Dropdown Spalten", "Dropdown Nav Style": "Dropbar Navigation Stil", "Dropdown Padding": "Dropdown Innenabstand", "Dropdown Stretch": "Dropdown ausweiten", "Dropdown Width": "Dropdown Weite", "Dynamic": "Dynamisch", "Dynamic Condition": "Dynamische Bedingung", "Dynamic Content": "Dynamischer Inhalt", "Dynamic Content (Parent Source)": "Dynamischer Inhalt (übergeordnete Quelle)", "Dynamic Multiplication": "Dynamisches Multiplizieren", "Dynamic Multiplication (Parent Source)": "Dynamisches Multiplizieren (übergeordnete Quelle)", "Easing": "Easing", "Edit": "Bearbeiten", "Edit %title% %index%": "Bearbeiten %title% %index%", "Edit Article": "Artikel bearbeiten", "Edit Image Quality": "Bildqualität bearbeiten", "Edit Item": "Element bearbeiten", "Edit Items": "Einträge bearbeiten", "Edit Layout": "Layout bearbeiten", "Edit Menu Item": "Menü Eintrag bearbeiten", "Edit Module": "Modul bearbeiten", "Edit Parallax": "Parallax bearbeiten", "Edit Settings": "Einstellungen", "Edit Template": "Template bearbeiten", "Element": "Element", "Element presets uploaded successfully.": "Element-Voreinstellungen erfolgreich hochgeladen.", "elements": "Elemente", "Elements within Column": "Elemente in der Spalte", "Email": "E-Mail", "Emphasis": "Betont", "Empty Dynamic Content": "Leerer Dynamic Content", "Enable a navigation to move to the previous or next post.": "Aktiviere die Navigation zum vorherigen und nächsten Post.", "Enable active state": "Status auf \"Aktiv\" setzen", "Enable autoplay": "Autoplay aktivieren", "Enable autoplay or play a muted inline video without controls.": "Automatische Wiedergabe aktivieren oder ein stummgeschaltetes Inline-Video ohne Steuerelemente abspielen.", "Enable click mode on text items": "Klick-Modus auf Textelementen aktivieren", "Enable drop cap": "Initiale aktivieren", "Enable dropbar": "Dropbar aktivieren", "Enable filter navigation": "Aktiviere Filter Navigation", "Enable lightbox gallery": "Aktiviere Lightbox Galerie", "Enable map dragging": "Erlaube Verschieben der Karte", "Enable map zooming": "Erlaube Zoomen der Karte", "Enable marker clustering": "Aktiviere Marker Clustering", "Enable masonry effect": "Aktiviere Masonry Grid", "Enable parallax effect": "Parallaxeffekt aktivieren", "Enable the pagination.": "Aktiviert die Paginierung.", "End": "Ende", "Ends with": "Endet mit", "Enter %s% preview mode": "Vorschau für %s% aktivieren", "Enter a comma-separated list of tags to manually order the filter navigation.": "Durch Komma getrennte Liste von Tags zum manuellen sortieren der Filter Navigation.", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Durch Komma getrennte Liste von Tags, z.B. <code>blue, white, black</code>.", "Enter a date for the countdown to expire.": "Gebe das Ablauf-Datum des Countdown an.", "Enter a decorative section title which is aligned to the section edge.": "Dekorativer Titel der am Rand der Section ausgerichtet ist.", "Enter a descriptive text label to make it accessible if the link has no visible text.": "Beschreibender Text, wenn der Link keinen sichtbaren Text hat.", "Enter a subtitle that will be displayed beneath the nav item.": "Gebe ein Untertitel ein der unter dem Navigations Element angezeigt wird.", "Enter a table header text for the content column.": "Definiere die Tabellen Überschrift für die Inhalts-Spalte.", "Enter a table header text for the image column.": "Definiere die Tabellen Überschrift für die Bild-Spalte.", "Enter a table header text for the link column.": "Definiere die Tabellen Überschrift für die Link-Spalte.", "Enter a table header text for the meta column.": "Definiere die Tabellen Überschrift für die Meta Text-Spalte.", "Enter a table header text for the title column.": "Definiere die Tabellen Überschrift für die Titel-Spalte.", "Enter a width for the popover in pixels.": "Gebe die Breite des Popovers in Pixeln ein.", "Enter an optional footer text.": "Gebe einen optionalen Text für den Footer ein.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Gebe einen optionalen Text für das Title Attribut des Links ein, der auf Maus-Hover angezeigt wird.", "Enter labels for the countdown time.": "Gebe die Beschriftung für den Countdown ein.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Gib den Link zum sozialen Profil ein. Ein entsprechendes <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit Icon</a> wird automatisch angezeigt, sofern verfügbar. Links zu E-Mail-Adressen und Telefonnummern wie mailto: info@example.com oder tel: +491570156 werden ebenfalls unterstützt.", "Enter or pick a link, an image or a video file.": "Gebe ein oder wähle einen Link, Bild oder Video Datei aus.", "Enter the API key in Settings > External Services.": "Füge den API-Schlüssel in den Systemeinstellungen hinzu.", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Gib den API Schlüssel ein um YOOtheme Pro Updates zu aktivieren und Zugriff auf die Layout-Bibliothek und die Unsplash Galerie zu erhalten. Der API Schlüssel für diese Webseite kann in den <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a> erstellt werden.", "Enter the author name.": "Gebe den Namen des Autors ein.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Gib die Cookie-Einwilligungsnachricht ein. Der vorgegebene Text dient als Beispiel. Der Text sollte entsprechend der national geltenden Cookie Richtlinien eingegeben werden.", "Enter the horizontal position of the marker in percent.": "Horizontale Position des Icons in Prozent.", "Enter the image alt attribute.": "Gebe das Bild Alt-Attribut ein.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Gebe die Ersatzzeichenfolge ein, die Verweise enthalten kann. Wenn leer, werden die Suchübereinstimmungen entfernt.", "Enter the text for the button.": "Gebe den Button Text ein.", "Enter the text for the home link.": "Gebe den Text für den Home-Link ein.", "Enter the text for the link.": "Gebe den Link Text ein.", "Enter the vertical position of the marker in percent.": "Gebe die Vertikale Position des Markers in Prozent ein.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Füge die <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID ein um, Tracking auf der Webseite zu aktivieren. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP Anonymisierung</a> kann die Tracking-Genauigkeit verringern.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Füge den <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API Schlüssel ein, um Google Maps anstelle von OpenStreetMap zu nutzen. Es werden zusätzliche Optionen aktiviert, um die Karte einzufärben.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Füge den <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API Schlüssel ein, um ihn mit dem Newsletter-Element zu nutzen.", "Enter your <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> API key for using it with the Newsletter element.": "Füge den <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> API Schlüssel ein, um ihn mit dem Newsletter-Element zu nutzen.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Füge benutzerdefiniertes CSS ein. Die folgenden Selektoren werden für dieses Element automatisch vorangestellt: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind in diesem Element automatisch verfügbar: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind in diesem Element automatisch verfügbar: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Füge benutzerdefiniertes CSS ein. Die folgenden Selektoren werden für dieses Element automatisch vorangestellt: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Füge benutzerdefiniertes CSS ein. Die folgenden Selektoren werden für dieses Element automatisch vorangestellt: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Füge eigenes CSS hinzu. Folgende Selektoren sind automatisch an diesem Element verfügbar: <code>.el-section</code>", "Error": "Fehler", "Error 404": "Fehler 404", "Error creating folder.": "Fehler beim Erstellen des Ordners.", "Error deleting item.": "Fehler beim Löschen des Eintrags.", "Error renaming item.": "Fehler beim Umbenennen des Eintrags.", "Error: %error%": "Fehler: %error%", "Events": "Events", "Excerpt": "Textauszug", "Exclude child %taxonomies%": "Untergeordnete %taxonomies% ausschließen", "Exclude child categories": "Unterkategorien ausschließen", "Exclude child tags": "Untergeordnete Tags ausschließen", "Exclude cross sell products": "Cross-Selling-Produkte ausschließen", "Exclude upsell products": "Upselling-Produkte ausschließen", "Exclusion": "Ausschluss", "Expand": "Ausweiten", "Expand columns equally to always fill remaining space within the row, center them or align them to the left.": "Spalten gleichmäßig erweitern um den verbleibenden Platz in der Zeile zu füllen, zentrieren oder nach links ausrichten.", "Expand Content": "Inhalt erweitern", "Expand content": "Inhalt erweitern", "Expand height": "Höhe erweitern", "Expand One Side": "In eine Richtung ausweiten", "Expand Page to Viewport": "Seite auf Viewport erweitern", "Expand the height of the content to fill the available space in the panel and push the link to the bottom.": "Erweitert die Höhe des Inhalts, um den verfügbaren Platz im Panel auszufüllen, und verschiebt den Link nach unten.", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The image will cover the element's content box.": "Erweitert die Höhe des Elements um den verfügbaren Platz in der Spalte auszufüllen oder setze eine feste Viewport-Höhe. Das Bild wird das Inhaltsfeld des Elements überdecken.", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The video will cover the element's content box.": "Erweitert die Höhe des Elements um den verfügbaren Platz in der Spalte auszufüllen oder setze eine feste Viewport-Höhe. Das Video wird das Inhaltsfeld des Elements überdecken.", "Expand the height of the element to fill the available space in the column.": "Erweitert die Höhe des Elements, um den verfügbaren Platz in der Spalte auszufüllen.", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Erweitere eine Seite nach links oder rechts, während die andere Seite die Einstellung der maximalen Breite beibehält.", "Expand width to table cell": "Erweitere die Breite auf die Tabellenzelle", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Exportiere alle Theme-Einstellungen und importiere sie in einer anderen Installation. Dies umfasst nicht die Inhalte aus den Layout-, Stil- und Elementbibliotheken oder dem Template Builder.", "Export Settings": "Einstellungen exportieren", "Extend all content items to the same height.": "Höhe aller Inhalts-Elemente angleichen.", "Extension": "Erweiterung", "External": "Extern", "External Services": "Externe Dienste", "Extra Margin": "Zusätzliches Außenabstand", "Fade": "Ein-/Ausblenden", "Favicon": "Favicon", "Favicon PNG": "Favicon PNG", "Favicon SVG": "Favicon SVG", "Fax": "Fax", "Featured": "Haupteintrag", "Featured Articles": "Hauptbeiträge", "Featured Articles Order": "Reihenfolge der Hauptbeiträge", "Featured Image": "Beitragsbild", "Fields": "Felder", "Fifths": "Fünftel", "Fifths 1-1-1-2": "Fünftel 1-1-1-2", "Fifths 1-1-3": "Fünftel 1-1-3", "Fifths 1-3-1": "Fünftel 1-3-1", "Fifths 1-4": "Fünftel 1-4", "Fifths 2-1-1-1": "Fünftel 2-1-1-1", "Fifths 2-3": "Fünftel 2-3", "Fifths 3-1-1": "Fünftel 3-1-1", "Fifths 3-2": "Fünftel 3-2", "Fifths 4-1": "Fünftel 4-1", "File": "Datei", "Files": "Dateien", "Fill the available column space": "Verfügbaren Spaltenplatz füllen", "Filter": "Filter", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtere %post_types% nach Autor. Verwende die <kbd>shift-</kbd> oder <kbd>ctrl/cmd</kbd> Taste, um mehrere Autoren auszuwählen. Benutze die logischen Operatoren, um einzustellen, ob die ausgewählten Autoren übereinstimmen sollen oder nicht.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Filtere %post_types% nach Begriffen. Verwende die <kbd>shift-</kbd> oder die <kbd>ctrl/cmd</kbd>-Taste, um mehrere Begriffe auszuwählen. Benutze die logischen Operatoren, um einzustellen, ob mit mindestens ein Begriff, kein Begriff oder alle Begriffen zutreffen sollen.", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtere Beiträge nach Autoren. Verwende die <kbd>shift</kbd> oder <kbd>ctrl/cmd</kbd> Taste, um mehrere Autoren auszuwählen. Benutze die logischen Operatoren, um einzustellen, ob die ausgewählten Autoren übereinstimmen sollen oder nicht.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Filtere Beiträge nach Kategorien. Verwende die <kbd>shift</kbd> oder <kbd>ctrl/cmd</kbd> Taste, um mehrere Kategorien auszuwählen. Benutze die logischen Operatoren, um einzustellen, ob die ausgewählten Kategorien übereinstimmen sollen oder nicht.", "Filter articles by featured status. Load all articles, featured articles only, or articles which are not featured.": "Beiträge nach Haupteinträgen filtern. Alle Beiträge laden, nur Haupteinträge laden oder Haupteinträge ausschließen.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Filtere Beiträge nach Tags. Verwende die <kbd>shift</kbd> oder <kbd>ctrl/cmd</kbd> Taste, um mehrere Tags auszuwählen. Benutze die logischen Operatoren, um einzustellen, ob mit mindestens ein Tag, kein Tag oder alle Tags zutreffen sollen.", "Filter by Authors": "Nach Autoren filtern", "Filter by Categories": "Nach Kategorien filtern", "Filter by Featured Articles": "Nach Hauptbeiträgen filtern", "Filter by Tags": "Nach Tags filtern", "Filter by Term": "Nach Begriff filtern", "Filter by Terms": "Nach Begriffen filtern", "Filter products by attribute using the attribute slug.": "Produkte nach Attributen filtern anhand des Attribut-Slugs.", "Filter products by categories using a comma-separated list of category slugs.": "Produkte nach Kategorien filtern anhand einer Komma getrennte Liste von Kategorie-Slugs.", "Filter products by tags using a comma-separated list of tag slugs.": "Produkte nach Tags filtern anhand einer Komma getrennte Liste von Tag-Slugs.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "Produkte nach Begriffen des gewählten Attributs filtern anhand einer Komma getrennte Liste von Attributbegriffen-Slugs.", "Filter products using a comma-separated list of IDs.": "Produkte anhand einer Komma getrennte Liste von IDs filtern.", "Filter products using a comma-separated list of SKUs.": "Produkte anhand einer Komma getrennte Liste von SKUs filtern.", "Finite": "Endlich", "First Item": "Erstes Element", "First name": "Vorname", "First page": "Erste Seite", "Fix the background with regard to the viewport.": "Der Hintergrund ist fixiert zum Viewport.", "Fixed": "Fixieren", "Fixed-Inner": "Innen fixiert", "Fixed-Left": "Links fixiert", "Fixed-Outer": "Außen fixiert", "Fixed-Right": "Rechts fixiert", "Floating Shadow": "Schwebender Schatten", "Focal Point": "Mittelpunkt", "Folder created.": "Ordner erstellt.", "Folder Name": "Ordner Name", "Font Family": "Schriftfamilie", "Footer": "Footer", "Force a light or dark color for text, buttons and controls on the image or video background.": "Lege eine helle oder dunkle Farbe für Text, Buttons und Steuerelemente auf dem Bild- oder Videohintergrund fest.", "Force left alignment": "Links-Ausrichtung erzwingen", "Force viewport height": "Viewport-Höhe erzwingen", "Form": "Formular", "Format": "Format", "Full Article Image": "Komplettes Beitragsbild", "Full Article Image Alt": "Beitragsbild Alt Attribut", "Full Article Image Caption": "Beitragsbild Caption", "Full Width": "Volle Breite", "Full width button": "Button über gesamte Breite", "g": "g", "Gallery": "Galerie", "Gallery Thumbnail Columns": "Galerie Miniaturbild-Spalten", "Gamma": "Gamma", "Gap": "Abstand", "General": "Allgemein", "GitHub (Light)": "GitHub (Hell)", "Google Analytics": "Google Analytics", "Google Fonts": "Google Fonts", "Google Maps": "Google Maps", "Gradient": "Verlauf", "Greater than": "Größer als", "Grid": "Grid", "Grid Breakpoint": "Grid Breakpoint", "Grid Column Gap": "Grid Spaltenabstand", "Grid Row Gap": "Grid Zeilenabstand", "Grid Width": "Grid Breite", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Fasse Einträge in Gruppen zusammen. Die Anzahl der Einträge einer Gruppe wird anhand der Breite festgelegt, z.B. <i>33%</i> bedeutet jede Gruppe beinhaltet 3 Einträge.", "Guest User": "Gast Benutzer", "h": "h", "H1": "H1", "h1": "h1", "H2": "H2", "h2": "h2", "H3": "H3", "h3": "h3", "H4": "H4", "h4": "h4", "H5": "H5", "h5": "h5", "H6": "H6", "h6": "h6", "Halves": "Hälften", "Hard-light": "Hartes Licht", "Header": "Header", "Header End": "Header Ende", "Header Start": "Header Start", "Header Text Color": "Header Textfarbe", "Heading": "Überschrift", "Heading 2X-Large": "Überschrift 2X-Large", "Heading 3X-Large": "Überschrift 3X-Large", "Heading H1": "Überschrift H1", "Heading H2": "Überschrift H2", "Heading H3": "Überschrift H3", "Heading H4": "Überschrift H4", "Heading H5": "Überschrift H5", "Heading H6": "Überschrift H6", "Heading Large": "Überschrift Large", "Heading Link": "Überschrift Link", "Heading Medium": "Überschrift Medium", "Heading Small": "Überschrift Small", "Heading X-Large": "Überschrift X-Large", "Headline": "Überschrift", "Headline styles differ in font size and font family.": "Headline-Stile unterscheiden sich in Bezug auf Schriftgröße und Schriftfamilie voneinander.", "Height": "Höhe", "Height 100%": "Höhe 100%", "Help": "Hilfe", "hex / keyword": "Hex / Schlüsselwort", "Hidden": "Versteckt", "Hidden Large (Desktop)": "Versteckt Large (Desktop)", "Hidden Medium (Tablet Landscape)": "Versteckt Medium (Tablet Querformat)", "Hidden Small (Phone Landscape)": "Versteckt Small (Phone Querformat)", "Hidden X-Large (Large Screens)": "Versteckt X-Large (Große Displays)", "Hide": "Verstecken", "Hide and Adjust the Sidebar": "Verstecke die Sidebar und passe sie an", "Hide marker": "Marker verstecken", "Hide Sidebar": "Sidebar verstecken", "Hide Term List": "Begriffsliste verstecken", "Hide title": "Titel verstecken", "Highlight the hovered row": "Hebe die Zeile/Reihe bei Maus-Hover hervor", "Highlight the item as the active item.": "Markiere den Eintrag als aktiv.", "Hits": "Hits", "Home": "Startseite", "Home Text": "Startseitentext", "Horizontal": "Horizontal", "Horizontal Center": "Horizontal Mitte", "Horizontal Center Logo": "Horizontal Logo Mitte", "Horizontal Justify": "Horizontal Bündig", "Horizontal Left": "Horizontal Links", "Horizontal Right": "Horizontal Rechts", "Hover": "Hover", "Hover Box Shadow": "Hover Box Schatten", "Hover Image": "Hover Bild", "Hover Style": "Hover Stil", "Hover Transition": "Hover Effekt", "Hover Video": "Hover-Video", "hr": "hr", "Html": "Html", "HTML Element": "HTML Element", "Hue": "Farbton", "Hyphen": "Bindestrich", "Hyphen and Underscore": "Bindestrich und Unterstrich", "Icon": "Icon", "Icon Button": "Icon-Button", "Icon Color": "Icon Farbe", "Icon Link": "Icon-Link", "Icon Width": "Icon Breite", "Iconnav": "Iconnav", "ID": "ID", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Entferne den Standard Innenabstand der erweiterten Seite, wenn in der Section oder Zeile eine maximale Breite eingestellt ist.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Wenn derselben Ansicht mehrere Templates zugewiesen sind, wird das zuerst angezeigte Template angewendet. Ändere die Reihenfolge per Drag & Drop.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Wenn eine mehrsprachige Webseite erstellt wird, wähle hier KEIN spezifisches Menü aus. Verwende stattdessen den \"Joomla Modul Manager\", um das entsprechende Menü in der aktuellen Sprache zu veröffentlichen.", "If you are using WPML, you can not select a menu here. Instead, use the WordPress menu manager to assign menus to locations for a language.": "Wenn WPML verwendet wird, kann hier kein Menü ausgewählt werden. Verwende stattdessen den WordPress-Menümanager, um die Menüs den Positionen zuzuweisen.", "Ignore %taxonomy%": "%taxonomy% ignorieren", "Ignore author": "Autor ignorieren", "Ignore category": "Kategorie ignorieren", "Ignore tags": "Tags ignorieren", "Image": "Bild", "Image Align": "Bild ausrichten", "Image Alignment": "Bild Ausrichtung", "Image Alt": "Bild Alt Attribut", "Image and Content": "Bild und Inhalt", "Image and Title": "Bild und Titel", "Image Attachment": "Bild Anhang", "Image Box Shadow": "Bild Box Schatten", "Image Bullet": "Bild Aufzählungspunkt", "Image Effect": "Bild Effekt", "Image Focal Point": "Bild Mittelpunkt", "Image Height": "Bild Höhe", "Image Margin": "Bild Außenabstand", "Image Orientation": "Bildausrichtung", "Image Position": "Bild Position", "Image Quality": "Bildqualität", "Image Size": "Bildgröße", "Image Width": "Bild Breite", "Image Width/Height": "Bild Breite/Höhe", "Image, Title, Content, Meta, Link": "Bild, Titel, Inhalt, Meta, Link", "Image, Title, Meta, Content, Link": "Bild, Titel, Meta, Inhalt, Link", "Image/Video": "Bild/Video", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Bilder können nicht gecached werden. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Ändere die Berechtigungen</a> des <code>cache</code> Ordner im <code>yootheme</code> theme Ordner, so dass der Webserver Schreib-Berechtigung hat.", "Import Settings": "Einstellungen importieren", "Include %post_types% from child %taxonomies%": "%post_types% aus untergeordneten %taxonomies% einbeziehen", "Include articles from child categories": "Artikel aus Unterkategorien einbeziehen", "Include child %taxonomies%": "Untergeordnete %taxonomies% einbeziehen", "Include child categories": "Unterkategorien einbeziehen", "Include child tags": "Untergeordnete Tags einbeziehen", "Include heading itself": "Überschrift mit einschließen", "Include items from child tags": "Elemente von untergeordneten Tags einbeziehen", "Include query string": "Query einbeziehen", "Info": "Info", "Inherit": "Übernehmen", "Inherit transparency from header": "Transparenz vom Header übernehmen", "Inject SVG images into the markup so they adopt the text color automatically.": "Füge SVG Bilder in den Markup der Seite ein, so dass diese automatisch die Text-Farbe annehmen.", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Füge SVG Bilder als Markup in die Seite ein, so dass sie mit CSS angepasst werden können.", "Inline SVG": "Inline SVG", "Inline SVG logo": "Inline SVG-Logo", "Inline title": "Inline Titel", "Input": "Eingabe", "Insert at the bottom": "Unten einfügen", "Insert at the top": "Oben einfügen", "Inset": "Inset", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Klicke auf das Stift-Symbol um alternativ zu einem Bild ein Icon aus der Icon-Sammlung zu wählen.", "Intro Image": "Einleitungsbild", "Intro Image Alt": "Einleitungsbild Alt Attribut", "Intro Image Caption": "Einleitungsbild Caption", "Intro Text": "Einführungstext", "Invalid Field Mapped": "ungültiges Feld verknüpft", "Invalid Source": "ungültige Quelle", "Inverse Logo (Optional)": "Invertiertes Logo (Optional)", "Inverse style": "Invertierter Stil", "Inverse text color on hover or when active": "Inverse Textfarbe beim hovern oder wenn aktiv", "Inverse the text color on hover": "Invertiere Schriftfarbe beim hovern", "Invert lightness": "Invertiere Helligkeit", "IP Anonymization": "Anonymisiere IP-Adressen", "Is empty": "Ist leer", "Is equal to": "Ist gleich", "Is not empty": "Ist nicht leer", "Is not equal to": "Ist nicht gleich", "Issues and Improvements": "Fehler und Verbesserungen", "Item": "Eintrag", "Item Count": "Anzahl der Einträge", "Item deleted.": "Eintrag gelöscht.", "Item Index": "Item Index", "Item Max Width": "Item maximale Breite", "Item renamed.": "Eintrag umbenannt.", "Item uploaded.": "Eintrag hochgeladen.", "Item Width": "Eintrag Breite", "Item Width Mode": "Modus der Eintragsbreite", "Items": "Einträge", "JPEG": "JPEG", "JPEG to AVIF": "JPEG zu AVIF", "JPEG to WebP": "JPEG zu WebP", "Justify": "Verteilen", "Justify columns at the bottom": "Gleiche die Spalten unten an", "Keep existing": "Beibehalten", "Ken Burns Duration": "Ken Burns Dauer", "Ken Burns Effect": "Ken Burns Effekt", "l": "l", "Label": "Label", "Label Margin": "Label Außenabstand", "Labels": "Labels", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Quer- und Hochformat Bilder werden in der Grid Zelle zentriert. Breite und Höhe werden getauscht wenn die Größe der Bilder geändert wird.", "Large": "Large", "Large (Desktop)": "Large (Desktop)", "Large padding": "Großer Innenabstand", "Large Screen": "Großer Bildschirm", "Large Screens": "Große Bildschirme", "Larger padding": "Größerer Innenabstand", "Larger style": "Größerer Stil", "Last 24 hours": "Letzte 24 Stunden", "Last 30 days": "Letzte 30 Tage", "Last 7 days": "Letzte 7 Tage", "Last Column Alignment": "Ausrichtung der letzten Zelle", "Last Item": "Letztes Element", "Last Modified": "Zuletzt geändert", "Last name": "Nachname", "Last visit date": "Datum des letzten Besuchs", "Layout": "Layout", "Layout Media Files": "Layout-Mediendateien", "Lazy load video": "Lazy Load Video", "Lead": "Lead", "Learning Layout Techniques": "Lernen von Layout-Techniken", "Left": "Links", "Left (Not Clickable)": "Links (Nicht klickbar)", "Left Bottom": "Links Unten", "Left Center": "Links Mittig", "Left Top": "Links Oben", "Less than": "Weniger als", "Library": "Bibliothek", "Light": "Hell", "Light Text": "Heller Text", "Lightbox": "Lightbox", "Lightbox only": "Nur Lightbox", "Lighten": "Aufhellen", "Lightness": "Helligkeit", "Limit": "Limit", "Limit by %taxonomies%": "Auf %taxonomies% begrenzen", "Limit by Categories": "Auf Kategorien begrenzen", "Limit by Date Archive Type": "Auf Datum Archivtyp begrenzen", "Limit by Language": "Auf Sprache begrenzen", "Limit by Menu Heading": "Auf Menü Überschrift begrenzen", "Limit by Page Number": "Auf Seitenanzahl begrenzen", "Limit by Products on sale": "Auf Produkte im Angebot begrenzen", "Limit by Tags": "Auf Tags limitieren", "Limit by Terms": "Auf Begriffe begrenzen", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Den Inhalt auf die angegebene Zeichenanzahl begrenzen. Alle HTML Elemente werden entfernt.", "Limit the number of products.": "Die Anzahl der Produkte begrenzen.", "Line": "Linie", "Link": "Link", "link": "Link", "Link ARIA Label": "ARIA-Label verlinken", "Link card": "Card verlinken", "Link image": "Bild verlinken", "Link Muted": "Link Muted", "Link overlay": "Overlay verlinken", "Link panel": "Panel verlinken", "Link Parallax": "Link Parallax", "Link Reset": "Link Reset", "Link Style": "Link Stil", "Link Target": "Link-Ziel", "Link Text": "Link Text", "Link the image if a link exists.": "Das Bild verlinken, wenn ein Link existiert.", "Link the title if a link exists.": "Den Titel verlinken, wenn ein Link existiert.", "Link the whole card if a link exists.": "Die komplette Card verlinken, wenn ein Link existiert.", "Link the whole overlay if a link exists.": "Das komplette Overlay verlinken, wenn ein Link existiert.", "Link the whole panel if a link exists.": "Die komplette Panel verlinken, wenn ein Link existiert.", "Link title": "Titel verlinken", "Link Title": "Link Titel", "Link to redirect to after submit.": "Link, zu dem nach dem Senden weitergeleitet werden soll.", "List": "Liste", "List All Tags": "Liste aller Tags", "List Item": "Listen Eintrag", "List Style": "Listen-Stil", "Load Bootstrap": "Bootstrap laden", "Load Font Awesome": "Font Awesome laden", "Load image eagerly": "Bilder sofort laden", "Load jQuery": "jQuery laden", "Load jQuery to write custom code based on the jQuery JavaScript library.": "jQuery laden um eigenen Code basierend auf der JavaScript-Bibliothek zu verwenden.", "Load product on sale only": "Nur Produkt im Angebot laden", "Load products on sale only": "Nur Produkte im Angebot laden", "Loading": "Laden", "Loading Layouts": "Layouts laden", "Location": "Standort", "Login Page": "Login Seite", "Logo End": "Logo Ende", "Logo Image": "Logo Bild", "Logo Text": "Logo Text", "Loop video": "Video in Schleife abspielen", "Lost Password Confirmation Page": "Bestätigungsseite für verlorenes Passwort", "Lost Password Page": "Seite für verlorenes Passwort", "Luminosity": "Helligkeit", "Mailchimp API Token": "Mailchimp API Schlüssel", "Main Section Height": "Main Section Höhe", "Main styles": "Haupt-Stile", "Make header transparent": "Header transparent machen", "Make only first item active": "Nur das erste Element aktiv setzen", "Make SVG stylable with CSS": "SVG kann mit CSS angepasst werden", "Make the column or its elements sticky only from this device width and larger.": "Hefte die Spalte oder ihre Elemente erst ab der gewählten Gerätegröße an.", "Make the header transparent and overlay this section if it directly follows the header.": "Header transparent machen und diese Section überlappen wenn sie direkt auf den Header folgt.", "Make the header transparent even when it's sticky.": "Transparenter Header auch im Sticky Modus.", "Managing Menus": "Menüs verwalten", "Managing Modules": "Module verwalten", "Managing Pages": "Seiten Verwalten", "Managing Sections, Rows and Elements": "Sektionen, Zeilen und Elemente verwalten", "Managing Templates": "Templates verwalten", "Managing Widgets": "Widgets verwalten", "Manual": "manuell", "Manual Order": "manuelle Sortierung", "Map": "Karte", "Mapping Fields": "Felder zuweisen", "Margin": "Außenabstand", "Margin Top": "Außenabstand Oben", "Marker": "Marker", "Marker Color": "Marker Farbe", "Marker Icon": "Marker-Icon", "Mask": "Maske", "Masonry": "Masonry", "Match (OR)": "Stimmt überein (ODER)", "Match all (AND)": "Alle stimmen überein (UND)", "Match all %taxonomies% (AND)": "Alle %taxonomies% stimmen überein (UND)", "Match all tags (AND)": "Alle Tags übereinstimmen (UND)", "Match author (OR)": "Autor stimmt überein (ODER)", "Match category (OR)": "Kategorie stimmt überein (ODER)", "Match content height": "Höhe des Inhalts angleichen", "Match height": "Höhe angleichen", "Match Height": "Höhe angleichen", "Match one (OR)": "Eine(r) stimmt überein (ODER)", "Match one %taxonomy% (OR)": "Einer %taxonomy% stimmt überein (ODER)", "Match one tag (OR)": "Ein Tag stimmt überein (ODER)", "Match panel heights": "Panel Höhe anpassen", "Match the height of all modules which are styled as a card.": "Pass die Höhe aller Module an, die als Card gestaltet sind.", "Match the height of all widgets which are styled as a card.": "Pass die Höhe aller Widgets an, die als Card gestaltet sind.", "Max Height": "Max. Höhe", "Max Width": "Max. Breite", "Max Width (Alignment)": "Max. Breite (Ausrichtung)", "Max Width Breakpoint": "Max. Breite Breakpoint", "Maximum Zoom": "Maximaler Zoom", "Maximum zoom level of the map.": "Maximaler Zoom Level der Karte.", "Media Folder": "Medien Ordner", "Medium": "Medium", "Medium (Tablet Landscape)": "Medium (Tablet Querformat)", "Menu": "Menü", "Menu Divider": "Menü Trenner", "Menu Icon Width": "Menü Icon Weite", "Menu Image Align": "Menü-Bild Ausrichtung", "Menu Image and Title": "Menü Bild und Titel", "Menu Image Height": "Menü Bild Höhe", "Menu Image Width": "Menü Bild Breite", "Menu Inline SVG": "Menü Inline SVG", "Menu Item": "Menü Eintrag", "Menu items are only loaded from the selected parent item.": "Es werden nur Einträge aus dem ausgewählten übergeordneten Menü Element geladen.", "Menu Primary Size": "Menü Primärgröße", "Menu Style": "Menü Stil", "Menu Type": "Menütyp", "Menus": "Menüs", "Message": "Nachricht", "Message shown to the user after submit.": "Nachricht, die dem Benutzer/-in nach dem Senden angezeigt wird.", "Meta": "Meta", "Meta Alignment": "Meta Ausrichtung", "Meta Margin": "Meta Außenabstand", "Meta Parallax": "Meta Parallax", "Meta Style": "Meta Stil", "Meta Width": "Meta Breite", "Meta, Image, Title, Content, Link": "Meta, Bild, Title, Inhalt, Link", "Meta, Title, Content, Link, Image": "Meta, Titel, Inhalt, Link, Bild", "Middle": "Mitte", "Mimetype": "Mimetype", "Min Height": "Mindesthöhe", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Beachte, dass der aktuellen Seite ein Template mit einem allgemeinen Layout zugewiesen ist. Bearbeite das Template, um das Layout zu aktualisieren.", "Minimum Stability": "Mindeststabilität", "Minimum Zoom": "Minimaler Zoom", "Minimum zoom level of the map.": "Minimaler Zoom Level der Karte.", "Miscellaneous Information": "Sonstige Informationen", "Mobile": "Mobil", "Mobile Inverse Logo (Optional)": "Invertiertes Mobil-Logo (Optional)", "Mobile Logo (Optional)": "Mobil-Logo (Optional)", "Modal": "Modal", "Modal Center": "Modal Mitte", "Modal Focal Point": "Modal Mittelpunkt", "Modal Image Focal Point": "Modal Image Mittelpunkt", "Modal Top": "Modal Oben", "Modal Width": "Modal Breite", "Modal Width/Height": "Modal Breite/Höhe", "Mode": "Modus", "Modified": "Geändert", "Module": "Modul", "Module Position": "Modulposition", "Modules": "Module", "Monokai (Dark)": "Monokai (Dunkel)", "Month Archive": "Monats-Archiv", "Move the sidebar to the left of the content": "Die Sidebar links vom Inhalt anzeigen", "Multibyte encoded strings such as UTF-8 can't be processed. Install and enable the <a href=\"https://php.net/manual/en/book.mbstring.php\" target=\"_blank\">Multibyte String extension</a>.": "Multibyte-codierte Zeichenfolgen wie UTF-8 können nicht verarbeitet werden. Installiere und aktiviere die <a href=\"https://php.net/manual/en/book.mbstring.php\" target=\"_blank\">Multibyte String extension</a>.", "Multiple Items Source": "Quelle mit mehreren Einträgen", "Multiply": "Vervielfältigen", "Mute video": "Video stummschalten", "Muted": "Muted", "My Account": "Mein Benutzerkonto", "My Account Page": "Meine Benutzerkonto-Seite", "Name": "Name", "Names": "Namen", "Nav": "Nav", "Navbar": "Navbar", "Navbar Container": "Navbar Container", "Navbar Dropdown": "Navbvar Dropdown", "Navbar End": "Navbar Ende", "Navbar Start": "Navbar Start", "Navbar Style": "Navbar Stil", "Navigation": "Navigation", "Navigation Label": "Navigation Label", "Navigation Order": "Navigation Sortierung", "Navigation Thumbnail": "Navigation Thumbnail", "New Article": "Neuer Artikel", "New Layout": "Neues Layout", "New Menu Item": "Neuer Menü Eintrag", "New Module": "Neues Modul", "New Page": "Neue Seite", "New Template": "Neues Template", "New Window": "Neues Fenster", "Newsletter": "Newsletter", "Next": "Nächste", "Next %post_type%": "Nächste(r) %post_type%", "Next Article": "Nächster Beitrag", "Next page": "Nächste Seite", "Next Section": "Nächste Section", "Next slide": "Nächster Slide", "Next-Gen Images": "Next-Gen Bilder", "Nicename": "Nicename", "Nickname": "Spitzname", "No %item% found.": "Kein %item% gefunden.", "No articles found.": "Keine Artikel gefunden.", "No critical issues found.": "Keine kritischen Fehler gefunden.", "No element found.": "Kein Element gefunden.", "No element presets found.": "Keine Element Voreinstellung gefunden.", "No Field Mapped": "kein Feld verknüpft", "No files found.": "Keine Dateien gefunden.", "No font found. Press enter if you are adding a custom font.": "Schriftart nicht gefunden. Drücke Enter um eine eigene Schrift hinzuzufügen.", "No icons found.": "Kein Icon gefunden.", "No image library is available to process images. Install and enable the <a href=\"https://php.net/manual/en/book.image.php\" target=\"_blank\">GD</a> extension.": "Es ist keine Bild-Bibliothek verfügbar um Bilder zu bearbeiten. Installiere und aktiviere die <a href=\"https://php.net/manual/en/book.image.php\" target=\"_blank\">GD</a> Erweiterung.", "No items yet.": "Noch keine Einträge.", "No layout found.": "Keine Layouts gefunden.", "No limit": "Keine Begrenzung", "No list selected.": "Keine Liste ausgewählt.", "No pages found.": "Keine Seiten gefunden.", "No Results": "Keine Suchergebnisse", "No results.": "Keine Suchergebnisse.", "No source mapping found.": "Keine Quell-Zuweisung gefunden.", "No style found.": "Kein Stil gefunden.", "None": "Keine", "None (Fade if hover image)": "Keine (Einblenden bei Hover)", "Normal": "Normal", "Not assigned": "Nicht zugewiesen", "Notification": "Mitteilung", "Numeric": "Numerisch", "Off": "Aus", "Offcanvas Center": "Offcanvas Mitte", "Offcanvas Mode": "Offcanvas Modus", "Offcanvas Top": "Offcanvas Oben", "Offset": "Offset", "Ok": "Ok", "ol": "ol", "On": "An", "On (If inview)": "An (wenn sichtbar)", "On Sale Product": "Produkt im Angebot", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "Auf kurzen Seiten kann die Main Section erweitert werden, so dass sie das Browserfenster komplett ausfüllt. Dies gilt nur für Seiten, die nicht mit dem Page Builder erstellt wurden.", "Only available for Google Maps.": "Nur in Google Maps verfügbar.", "Only display modules that are published and visible on this page.": "Ziege nur Module die auf dieser Seite sichtbar sind.", "Only display widgets that are published and visible on this page.": "Nur Widgets anzeigen, die auf dieser Seite veröffentlicht und sichtbar sind.", "Only include child %taxonomies%": "Nur untergeordnete %taxonomies% einbeziehen", "Only include child categories": "Nur Unterkategorien einbeziehen", "Only include child tags": "Nur untergeordnete Tags einbeziehen", "Only load menu items from the selected menu heading.": "Nur Menü Einträge aus der ausgewählten Menü Überschrift laden.", "Only show the image or icon.": "Zeige nur das Bild oder Icon.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Nur einzelne Seiten und Posts können individuelle Layouts haben. Verwende ein Template, um ein allgemeines Layout für diesen Seitentyp anzuwenden.", "Opacity": "Deckkraft", "Open": "Öffnen", "Open in a new window": "In neuem Fenster öffnen", "Open menu": "Menü öffnen", "Open Templates": "Templates öffnen", "Open the link in a new window": "Den Link in neuem Fenster öffnen", "Opening the Changelog": "Changelog öffnen", "Options": "Optionen", "Order": "Reihenfolge", "Order Direction": "Sortierreihenfolge", "Order First": "Zuerst einsortieren", "Order Received Page": "Order Received Seite", "Order the filter navigation alphabetically or by defining the order manually.": "Filter Navigation alphabetisch oder manuell sortieren.", "Order Tracking": "Bestell-Verfolgung", "Ordering": "Sortierung", "Ordering Sections, Rows and Elements": "Sections, Reihen und Elemente anordnen", "Out of Stock": "Nicht vorrätig", "Outside": "Außerhalb", "Outside Breakpoint": "Außerhalb Breakpoint", "Outside Color": "Ausserhalb Farbe", "Overlap the following section": "Nachfolgende Section überlappen", "Overlay": "Overlay", "Overlay + Lightbox": "Overlay + Lightbox", "Overlay Color": "Overlay Farbe", "Overlay Default": "Overlay Default", "Overlay only": "Nur Overlay", "Overlay Parallax": "Overlay Parallax", "Overlay Primary": "Overlay Primary", "Overlay Slider": "Overlay Slider", "Overlay the site": "Seite überlagern", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Überschreibe die Animation der Section. Die Einstellung ist nur wirksam wenn eine Animation auf der Section aktiviert ist.", "Pack": "Pack", "Padding": "Innenabstand", "Page": "Seite", "Page Category": "Seiten Kategorie", "Page Locale": "Seiten-Locale", "Page Title": "Seitenüberschrift", "Page URL": "Seiten-URL", "Pages": "Seiten", "Pagination": "Paginierung", "Panel": "Panel", "Panel + Lightbox": "Panel + Lightbox", "Panel only": "Nur Panel", "Panel Slider": "Panel Slider", "Panels": "Panels", "Parallax": "Parallax", "Parallax Breakpoint": "Parallax Breakpoint", "Parallax Easing": "Parallax Easing", "Parallax Start/End": "Parallax Start/Ende", "Parallax Target": "Parallax Ziel", "Parent": "Übergeordnet", "Parent (%label%)": "Übergeordnet (%label%)", "Parent %taxonomy%": "Übergeordnete %taxonomy%", "Parent Category": "Übergeordnete Kategorie", "Parent Menu Item": "Übergeordneter Menüeintrag", "Parent Tag": "Übergeordneter Tag", "Path": "Pfad", "Path Pattern": "Pfadmuster", "Pause autoplay on hover": "Pausiere die Slideshow bei Maus-Hover", "Phone Landscape": "Smartphone Querformat", "Phone Portrait": "Smartphone Porträt", "Photos": "Fotos", "Pick": "Auswählen", "Pick %type%": "%type% wählen", "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.": "Wähle manuell einen %post_type% aus oder verwende die Filteroptionen, um festzulegen, welcher %post_type% dynamisch geladen werden soll.", "Pick an alternative icon from the icon library.": "Wähle ein alternatives Icon aus der Icon-Sammlung.", "Pick an alternative SVG image from the media manager.": "Wähle ein alternatives SVG Bild aus dem Media Manager.", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "Wähle manuell einen Beitrag aus oder verwende die Filteroptionen, um festzulegen, welcher Beitrag dynamisch geladen werden soll.", "Pick an optional icon from the icon library.": "Wähle ein optionales Icon aus der Icon-Sammlung.", "Pick file": "Datei wählen", "Pick icon": "Icon wählen", "Pick link": "Link wählen", "Pick media": "Media wählen", "Pick video": "Video wählen", "Pill": "Pill", "Pixels": "Pixel", "Placeholder Image": "Platzhalter Bild", "Play inline on mobile devices": "Inline abspielen auf mobilen Geräten", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Bitte installiere/aktiviere das <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">Installer plugin</a> um dieses Feature zu aktivieren.", "Please provide a valid email address.": "Bitte gib eine gültige E-Mail Adresse an.", "PNG to AVIF": "PNG zu AVIF", "PNG to WebP": "PNG zu WebP", "Popover": "Popover", "Popular %post_type%": "Beliebte(r) %post_type%", "Popup": "Popup", "Position": "Position", "Position Absolute": "Position Absolute", "Position Sticky": "Position Sticky", "Position Sticky Breakpoint": "Position Sticky Breakpoint", "Position Sticky Offset": "Position Sticky Offset", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Positioniere das Element über oder unter anderen Elementen. Wenn sie dieselbe Stapelebene haben, hängt die Position von der Reihenfolge im Layout ab.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Positioniere das Element im normalen Inhaltsfluss oder im normalen Fluss, jedoch mit einem Offset zu sich selbst, oder entferne es aus dem Fluss und positioniere es relativ zur enthaltenden Spalte.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Positioniere die Filter Navigation oben, links order rechts. Die Navigation die links oder rechts positioniert ist kann einen größeren Stil haben.", "Position the meta text above or below the title.": "Positioniere den Meta Text über oder unter dem Titel.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Positioniere die Navigation oben, unten, links oder rechts. Die Navigation die links oder rechts positioniert ist kann einen größeren Stil haben.", "Post": "Post", "Post Order": "Post Sortierung", "Post Type Archive": "Post-Typ Archiv", "Postal/ZIP Code": "Postleitzahl", "Poster Frame": "Poster Frame", "Poster Frame Focal Point": "Poster Frame Mittelpunkt", "Prefer excerpt over intro text": "Textauszug dem Einleitungstext vorziehen", "Prefer excerpt over regular text": "Textauszug dem normalen Text vorziehen", "Preserve text color": "Textfarbe beibehalten", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Textfarbe beibehalten, z.B. wenn Cards verwendet werden. Sektion Überschneidungen werden nicht von allen Stilen unterstützt und haben eventuell keinen Effekt.", "Preview all UI components": "Vorschau aller UI Elemente", "Previous %post_type%": "Vorherige(r) %post_type%", "Previous Article": "Vorheriger Beitrag", "Previous page": "Vorherige Seite", "Previous slide": "Vorheriger Slide", "Previous/Next": "Vorheriger/Nächster", "Price": "Preis", "Primary": "Primary", "Primary navigation": "Hauptnavigation", "Primary Size": "Primärgröße", "Product Category Archive": "Produkt-Kategorie Archiv", "Product Description": "Produktbeschreibung", "Product Gallery": "Galerie", "Product IDs": "Produkt-IDs", "Product Images": "Produktbilder", "Product Information": "Produktinformation", "Product Meta": "Produkt Meta Information", "Product Price": "Produktpreis", "Product Rating": "Produktbewertung", "Product SKUs": "Produkt SKUs", "Product Stock": "Produktbestand", "Product Tabs": "Produkt-Tabs", "Product Tag Archive": "Produkt Tag Archiv", "Product Title": "Produkttitel", "Products": "Produkte", "Property": "Eigenschaft", "Provider": "Anbieter", "Published": "Veröffentlicht", "Pull": "Ziehen", "Pull content behind header": "Inhalt hinter den Header ziehen", "Purchases": "Käufe", "Push": "Drücken", "Push Items": "Push-Elemente", "Quantity": "Menge", "Quarters": "Viertel", "Quarters 1-1-2": "Viertel 1-1-2", "Quarters 1-2-1": "Viertel 1-2-1", "Quarters 1-3": "Viertel 1-3", "Quarters 2-1-1": "Viertel 2-1-1", "Quarters 3-1": "Viertel 3-1", "Query String": "Query String", "Quotation": "Zitat", "r": "r", "Random": "Zufällig", "Rating": "Bewertung", "Ratio": "Verhältnis", "Read More": "Weiterlesen", "Recompile style": "Stil neu kompilieren", "Redirect": "Umleiten", "Register date": "Datum der Registrierung", "Registered": "Registriert", "Reject Button Style": "Ablehnen-Button Style", "Reject Button Text": "Ablehnen-Button Text", "Related %post_type%": "Zugehörige(r) %post_type%", "Related Articles": "Zugehörige Beiträge", "Related Products": "Zugehörige Produkte", "Relationship": "Zugehörigkeit", "Relationships": "Beziehungen", "Relative": "Relativ", "Reload Page": "Seite neu laden", "Remove bottom margin": "Unteren Außenabstand entfernen", "Remove bottom padding": "Unteren Innenabstand entfernen", "Remove horizontal padding": "Horizontalen Innenabstand entfernen", "Remove left and right padding": "Innenabstand Links und Rechts entfernen", "Remove left logo padding": "Logo Padding Links entfernen", "Remove left or right padding": "Innenabstand Links oder Rechts entfernen", "Remove Media Files": "Entferne Mediendateien", "Remove top margin": "Oberen Außenabstand entfernen", "Remove top padding": "Oberen Innenabstand entfernen", "Remove vertical padding": "Vertikalen Innenabstand entfernen", "Rename": "Umbenennen", "Rename %type%": "%type% umbenennen", "Replace": "Ersetzen", "Replace layout": "Layout ersetzen", "Reset": "Zurücksetzen", "Reset Link Sent Page": "Seite \"Link versendet\" zurücksetzen", "Reset to defaults": "Alles zurücksetzen", "Resize Preview": "Größenänderung Vorschau", "Responsive": "Responsive", "Reveal": "Enthüllen", "Reverse order": "Umgekehrte Reihenfolge", "Right": "Rechts", "Right (Clickable)": "Rechts (Klickbar)", "Right Bottom": "Rechts Unten", "Right Center": "Rechts Mitte", "Right Top": "Rechts Oben", "Roadmap": "Roadmap", "Roles": "Rollen", "Root": "Stammverzeichnis", "Rotate": "Drehen", "Rotate the title 90 degrees clockwise or counterclockwise.": "Drehe den Titel um 90 Grad Uhrzeigersinn oder gegen den Uhrzeigersinn.", "Rotation": "Drehung", "Rounded": "Abgerundet", "Row": "Zeile", "Row Gap": "Zeilenabstand", "Rows": "Reihen", "Run Time": "Laufzeit", "s": "s", "Same Window": "Gleiches Fenster", "Satellite": "Satellit", "Saturation": "Sättigung", "Save": "Speichern", "Save %type%": "%type% speichern", "Save in Library": "In Bibliothek speichern", "Save Layout": "Layout speichern", "Save Module": "Modul speichern", "Save Style": "Stil speichern", "Save Template": "Template speichern", "Save Widget": "Widget speichern", "Scale": "Skalieren", "Scale Down": "Verkleinern", "Scale Up": "Vergrößern", "Screen": "Bildschirm", "Script": "Skript", "Scroll into view": "Zur Ansicht scrollen", "Scroll overflow": "Scroll overflow", "Search": "Suche", "Search articles": "Artikel suchen", "Search Component": "Such-Komponente", "Search Item": "Suchelement", "Search pages and post types": "Seiten und Post-Typen suchen", "Search Style": "Suche Stil", "Search Word": "Suchwort", "Secondary": "Secondary", "Section": "Section", "Section Animation": "Section Animation", "Section Height": "Section Höhe", "Section Image and Video": "Section Bild und Video", "Section Padding": "Section Innenabstand", "Section Style": "Section Stil", "Section Title": "Section Titel", "Section Width": "Section Breite", "Section/Row": "Section/Zeile", "Select": "Auswählen", "Select %item%": "%item% auswählen", "Select %type%": "%type% auswählen", "Select a card style.": "Wähle einen Card-Stil.", "Select a child theme. Note that different template files will be loaded, and theme settings will be updated respectively. To create a child theme, add a new folder <code>yootheme_NAME</code> in the templates directory, for example <code>yootheme_mytheme</code>.": "Wähle ein Child-Theme. Beachte, dass unterschiedliche Template Dateien geladen und die Theme Einstellungen aktualisiert werden. Um ein eigenes Child-Theme einzurichten, erstelle einen neuen Ordner auf derselben Ebene wie das Theme und nenne es <code>yootheme_NAME</code>, zum Beispiel <code>yootheme_mytheme</code>.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Wähle eine Quelle aus, um deren Felder für die Zuordnung verfügbar zu machen. Wähle zwischen den Quellen der aktuellen Seite oder erstelle eine benutzerdefinierte Quelle.", "Select a different position for this item.": "Wähle eine andere Position für dieses Eintrag.", "Select a grid layout": "Wähle ein Grid Layout aus", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Wähle eine Joomla Modul Position die alle veröffentlichten Module anzeigt. Die Positionen Builder-1 bis -6 sind empfohlen, da diese nicht an anderer Stelle im Theme gerendert werden.", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "Wähle ein Logo, welches in Offcanvas und Modal Dialogen in bestimmten Header Layouts angezeigt wird.", "Select a panel style.": "Wähle einen Panel-Stil.", "Select a predefined date format or enter a custom format.": "Wähle ein vordefiniertes Datumsformat oder gib ein eigenes Format ein.", "Select a predefined meta text style, including color, size and font-family.": "Wähle einen vordefinierten Meta-Stil, der Farbe, Größe und Schriftart einschließt.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Wähle ein vordefiniertes Suchmuster aus oder gib eine eingene Zeichenfolge oder einen regulären Ausdruck für die Suche ein. Der reguläre Ausdruck muss zwischen Schrägstrichen stehen, z.B. \"my-string\" oder \"/ ab + c /\".", "Select a predefined text style, including color, size and font-family.": "Wähle einen vordefinierten Text-Stil, der Farbe, Größe und Schriftart einschließt.", "Select a style for the continue reading button.": "Wähle den Stil für den Weiterlesen-Button.", "Select a style for the overlay.": "Wähle einen Stil für das Overlay.", "Select a taxonomy to only load posts from the same term.": "Wähle eine Taxonomie, um nur Beiträge mit demselben Begriff zu laden.", "Select a taxonomy to only navigate between posts from the same term.": "Wähle eine Taxonomie, um nur zwischen Beiträgen desselben Begriffs zu navigieren.", "Select a transition for the content when the overlay appears on hover or when active.": "Wähle einen Effekt für den Inhalt wenn das Overlay sichtbar oder aktiv wird.", "Select a transition for the content when the overlay appears on hover.": "Wähle einen Effekt für den Inhalt wenn das Overlay sichtbar wird.", "Select a transition for the link when the overlay appears on hover or when active.": "Wähle einen Effekt für den Link wenn das Overlay sichtbar oder aktiv wird.", "Select a transition for the link when the overlay appears on hover.": "Wähle einen Effekt für den Link wenn das Overlay sichtbar wird.", "Select a transition for the meta text when the overlay appears on hover or when active.": "Wähle einen Effekt für den Meta Text wenn das Overlay sichtbar oder aktiv wird.", "Select a transition for the meta text when the overlay appears on hover.": "Wähle einen Effekt für den Meta Text wenn das Overlay sichtbar wird.", "Select a transition for the overlay when it appears on hover or when active.": "Wähle einen Effekt für das Overlay wenn es sichtbar oder aktiv wird.", "Select a transition for the overlay when it appears on hover.": "Wähle einen Effekt für das Overlay wenn es sichtbar wird.", "Select a transition for the title when the overlay appears on hover or when active.": "Wähle einen Effekt für den Titel wenn das Overlay sichtbar oder aktiv wird.", "Select a transition for the title when the overlay appears on hover.": "Wähle einen Effekt für den Titel wenn das Overlay sichtbar wird.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Wähle eine Video-Datei oder füge einen <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> oder <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a> Link ein.", "Select a WooCommerce page.": "Wähle eine WooCommerce Seite.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Wähle eine WordPress Widget Area die alle veröffentlichten Widgets anzeigt. Die Areas Builder-1 bis -6 sind empfohlen, da diese nicht an anderer Stelle im Theme gerendert werden.", "Select an alternative font family. Mind that not all styles have different font families.": "Wähle eine alternative Schriftart. Nicht alle Stile haben verschieden Schriftarten.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Wähle ein alternatives Logo mit invertierten Farben. Es wird auf dunklen Hintergründen automatisch für bessere Sichtbarkeit angezeigt.", "Select an alternative logo, which will be used on small devices.": "Wähle ein alternatives Logo, das auf kleinen Geräten angezeigt wird.", "Select an animation that will be applied to the content items when filtering between them.": "Wähle eine Animation für den Filter zwischen den Inhalts Einträgen.", "Select an animation that will be applied to the content items when toggling between them.": "Wähle eine Animation für den Wechsel zwischen den Inhalts Elementen.", "Select an image transition.": "Wähle einen Bild Übergang.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Wähle eine Bild Übergang. Wenn ein Hover-Bild ausgewählt ist, erfolgt der Übergang zwischen den beiden Bildern. Ist <i>None</i> gewählt, wird das zweite Bild eingeblendet.", "Select an optional <code>favicon.svg</code>. Modern browsers will use it instead of the PNG image. Use CSS to toggle the SVG color scheme for light/dark mode.": "Wähle ein optionales <code>favicon.svg</code>. Browser verwenden dieses statt des PNG Bilds. Verwende CSS um das SVG Farbschema für den hell/dunkel Modus anzupassen.", "Select an optional image that appears on hover.": "Wähle ein optionales Bild, das auf Hover angezeigt wird.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Wähle ein optionales Bild, das angezeigt wird, bevor das Video abgespielt wird. Ist kein Bild gewählt, wird der erste Frame des Videos angezeigt.", "Select an optional video that appears on hover.": "Wähle ein optionales Video, das auf Hover angezeigt wird.", "Select Color": "Farbe wählen", "Select dialog layout": "Dialog Layout auswählen", "Select Element": "Element wählen", "Select Gradient": "Verlauf wählen", "Select header layout": "Header Layout auswählen", "Select Image": "Bild auswählen", "Select Manually": "Manuell auswählen", "Select menu item.": "Menü Eintrag wählen.", "Select menu items manually. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple menu items.": "Wähle Menü Einträge manuell aus. Verwende die <kbd>shift-</kbd> oder <kbd>ctrl/cmd</kbd> Taste, um mehrere Menü Einträge auszuwählen.", "Select mobile dialog layout": "Mobil-Dialog Layout auswählen", "Select mobile header layout": "Wähle das Mobil-Header Layout", "Select mobile search layout": "Wähle das Suche Layout", "Select one of the boxed card or tile styles or a blank panel.": "Wähle einen der Card oder Tile Stile oder ein leeres Panel.", "Select the animation on how the dropbar appears below the navbar.": "Wähle die Animation mit der die Dropbar unterhalb der Navigation angezeigt wird.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Wähle den Breakpoint aus, ab dem die Spalte vor anderen Spalten angezeigt werden soll. Bei kleineren Bildschirmgrößen wird die Spalte in der natürlichen Reihenfolge angezeigt.", "Select the color of the list markers.": "Wähle die Farbe der Listenmarkierungen.", "Select the content position.": "Wähle die Position vom Inhalt.", "Select the device size where the default header will be replaced by the mobile header.": "Wähle eine Größe, ab der das Mobil-Header Layout angezeigt wird.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Wähle den Navigation Stil. Die 'Pill'- und 'Divider'-Stile sind nur bei horizontalen Subnavs verfügbar.", "Select the form size.": "Wähle die Formulargröße.", "Select the form style.": "Wähle einen Formular-Stil.", "Select the icon color.": "Wähle die Farbe des Icons.", "Select the image border style.": "Wähle den Border-Stil für das Bild.", "Select the image box decoration style.": "Wähle die Box Dekoration für das Bild.", "Select the image box shadow size on hover.": "Wähle die Größe des Bild Box Schattens auf Maus-Hover.", "Select the image box shadow size.": "Wähle die Größe des Box Schattens für das Bild.", "Select the item type.": "Wähle den Eintrag-Typ.", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "Wähle das Layout für die <code>dialog-mobile</code> Position. Die verschobenen Einträge der Position werden als Ellipse angezeigt.", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "Wähle das Layout für die <code>dialog</code> Position. Einträge die verschoben werden können werden als Ellipse angezeigt.", "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.": "Wähle das Layout für die <code>logo-mobile</code>, <code>navbar-mobile</code> und <code>header-mobile</code> Positionen.", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "Wähle das Layout für die <code>logo</code>, <code>navbar</code> und <code>header</code> Positionen. Einige Layouts können Elemente einer Position aufteilen oder verschieben, die als Ellipse angezeigt werden.", "Select the link style.": "Wähle den Link-Stil.", "Select the list style.": "Wähle den Listen Stil.", "Select the list to subscribe to.": "Wähle die zu abonnierende Liste aus.", "Select the logical operator for the attribute term comparison. Match at least one of the terms, none of the terms or all terms.": "Setze den logischen Operator für den Vergleich der Attribut-Begriffe. Wähle, ob eine Übereinstimmung mit mindestens einem der Begriffe, keinem Begriff oder allen Begriffen bestehen soll.", "Select the logical operator for the category comparison. Match at least one of the categories, none of the categories or all categories.": "Setze den logischen Operator für den Kategorievergleich. Wähle, ob eine Übereinstimmung mit mindestens einer Kategorie, keiner Kategorie oder allen Kategorien bestehen soll.", "Select the logical operator for the tag comparison. Match at least one of the tags, none of the tags or all tags.": "Setze den logischen Operator für den Tag-Vergleich. Wähle, ob eine Übereinstimmung mit mindestens einem Tag, keinem Tag oder allen Tags bestehen soll.", "Select the marker of the list items.": "Wähle die Markierung der Listenelemente.", "Select the menu type.": "Wähle einen Menü-Typ.", "Select the nav style.": "Wähle den Navigation Stil.", "Select the navbar style.": "Wähle den Navbar Stil.", "Select the navigation type.": "Wähle den Navigation Typ.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Wähle den Navigation Stil. Die 'Pill'- und 'Line'-Stile sind nur bei horizontalen Subnavs verfügbar.", "Select the overlay or content position.": "Wähle die Position vom Overlay oder Inhalt.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Wähle die Ausrichtung des Popover zum Marker. Wenn d asPopover nicht in seinen Container passt, wird es automatisch umgedreht.", "Select the position of the navigation.": "Wähle die Position der Navigation.", "Select the position of the slidenav.": "Wähle die Position der Slidenav.", "Select the position that will display the search.": "Wähle die Position, in der die Suche angezeigt wird.", "Select the position that will display the social icons.": "Wähle die Position, in der die Social Icons angezeigt wird.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Wähle die Position, in der die Icons sozialer Netzwerke angezeigt werden. Links zu den sozialen Netzwerken müssen eigetragen sein.", "Select the primary nav size.": "Wähle die primäre Navigationsgröße aus.", "Select the search style.": "Wähle den Stil für die Suche.", "Select the slideshow box shadow size.": "Wähle die Größe des Box Schattens für die Slideshow.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Wähle den Stil für den Code Syntax Highlighting. Nutze den GitHub-Style auf hellen und Monokai auf dunklen Hintergründen.", "Select the style for the overlay.": "Wähle den Stil für das Overlay.", "Select the subnav style.": "Wählen den Subnav-Stil.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Wähle die SVG Farbe. Sie wird nur auf unterstützte Elemente die im SVG definiert sind angewendet.", "Select the table style.": "Wähle den Tabellen Stil.", "Select the text color.": "Wähle die Textfarbe.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Wähle die Schriftfarbe. Ist die Hintergrund Option aktiviert wird die Primärfarbe benutzt, wenn der Stil kein Hintergrund-Bild verwendet.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Wähle die Schriftfarbe. Ist die Hintergrund Option aktiviert wird die Primärfarbe benutzt, wenn der Stil kein Hintergrund-Bild verwendet.", "Select the title style and add an optional colon at the end of the title.": "Wähle den Titel Stil. Optional kann ein Doppelpunkt nach dem Titel eingefügt werden.", "Select the transformation origin for the Ken Burns animation.": "Wähle den Transformationsursprung für die Ken Burns-Animation aus.", "Select the transition between two slides.": "Wähle den Übergang zwischen zwei Slides aus.", "Select the video box decoration style.": "Wähle die Box Dekoration für das Video.", "Select the video box shadow size.": "Wähle die Größe des Box Schattens für das Video.", "Select whether a button or a clickable icon inside the email input is shown.": "Wähle ob ein Button oder klickbares Icon im E-Mail Feld angezeigt wird.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Wähle ob nach dem Absenden eine Nachricht angezeigt werden soll oder die Seite weitergeleitet wird.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Wähle ob die Standardsuche oder Smart-Search vom Suchmodul und vom Builder-Element verwendet werden soll.", "Select whether the modules should be aligned side by side or stacked above each other.": "Wähle ob die Module nebeneinander oder übereinander angezeigt werden.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Wähle ob die Widgets nebeneinander oder übereinander angezeigt werden.", "Select your <code>apple-touch-icon.png</code>. It appears when the website is added to the home screen on iOS devices. The recommended size is 180x180 pixels.": "Wähle das <code>apple-touch-icon.png</code> aus. Es ist zu sehen, wenn die Website zum Home-Bildschirm von iOS Geräten hinzugefügt wird. Die empfohlene Größe ist 180x180 Pixel.", "Select your <code>favicon.png</code>. It appears in the browser's address bar, tab and bookmarks. The recommended size is 96x96 pixels.": "Wähle das <code>favicon.png</code> aus. Es wird in der Adresszeile des Browsers angezeigt, in Tabs und in für Lesezeichen. Die empfohlene Größe ist 96x96 Pixel.", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "Wähle ein Logo. Optional füge das SVG markup in die Seite ein, so dass dieses automatisch die Text-Farbe annimmt.", "Sentence": "Satz", "Separator": "Trenner", "Serve AVIF images": "Bilder im AVIF Format anbieten", "Serve optimized image formats with better compression and quality than JPEG and PNG.": "Bilder in optimierten Dateiformaten anbieten, die JPEG und PNG überlegen sind.", "Serve WebP images": "Bilder im WebP Format anbieten", "Set %color% background": "%color% Hintergrund einstellen", "Set a condition to display the element or its item depending on the content of a field.": "Setze eine Bedingung, um das Element abhängig vom Inhalt eines Felds anzuzeigen.", "Set a different link ARIA label for this item.": "Anderes ARIA-Label für diesen Link.", "Set a different link text for this item.": "Setze einen anderen Link-Text für diesen Eintrag.", "Set a different text color for this item.": "Setze eine andere Textfarbe für diesen Eintrag.", "Set a fixed height for all columns. They will keep their height when stacking. Optionally, subtract the header height to fill the first visible viewport.": "Legt eine feste Höhe für alle Spalten fest. Die Höhe wird auch beim Stapeln erhalten. Optional kann die Höhe des Header abgezogen werden, um den ersten sichtbaren Viewport auszufüllen.", "Set a fixed width.": "Setzte eine feste Breite.", "Set a focal point to adjust the image focus when cropping.": "Setze einen Mittelpunkt, um den Bildfokus beim Zuschneiden anzupassen.", "Set a higher stacking order.": "Setze eine höhere Stapelreihenfolge.", "Set a large initial letter that drops below the first line of the first paragraph.": "Setze einen großen Anfangsbuchstaben, der unter die erste Zeile des ersten Absatzes reicht.", "Set a parallax animation to move columns with different heights until they justify at the bottom. Mind that this disables the vertical alignment of elements in the columns.": "Lege eine Parallax-Animation fest, um Spalten mit unterschiedlichen Höhen zu verschieben, bis sie sich am unteren Rand ausrichten. Beachte, dass dadurch die vertikale Ausrichtung der Elemente in den Spalten deaktiviert wird.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Setze die Breite der Sidebar in Prozent, und der Inhalt passt sich entsprechend an. Die Mindestbreite der Sidebar kann im Abschnitt 'Stil' angepasst werden.", "Set a thematic break between paragraphs or give it no semantic meaning.": "Setze eine thematische Trennung zwischen den Absätzen oder vergebe keine semantische Bedeutung.", "Set an additional transparent overlay to soften the image or video.": "Setze ein zusätzliches transparentes Overlay, um das Bild oder Video abzudämpfen.", "Set an additional transparent overlay to soften the image.": "Setze ein zusätzliches transparentes Overlay, um das Bild abzudämpfen.", "Set an optional content width which doesn't affect the image if there is just one column.": "Setze eine optionale Weite für den Inhalt. Die Weite des Bildes wird nicht beeinflusst wenn es nur eine Zelle gibt.", "Set an optional content width which doesn't affect the image.": "Setze eine optionale Weite für den Inhalt. Die Weite des Bildes wird nicht beeinflusst wenn es nur eine Zelle gibt.", "Set how the module should align when the container is larger than its max-width.": "Wähle die Ausrichtung des Modules, wenn der Container die maximale Breite überschreitet.", "Set how the widget should align when the container is larger than its max-width.": "Wähle die Ausrichtung des Widgets, wenn der Container größer ist als seine maximal zulässige Breite.", "Set light or dark color if the navigation is below the slideshow.": "Wähle eine dunkle oder helle Farbe, wenn die Navigation unterhalb der Slideshow angezeigt wird.", "Set light or dark color if the slidenav is outside.": "Wähle eine dunkle oder helle Farbe, wenn die Slidenav außerhalb angezeigt wird.", "Set light or dark color mode for text, buttons and controls.": "Wähle eine helle oder dunkle Farbe für den Text, Buttons und Steuerelemente.", "Set light or dark color mode.": "Wähle eine dunkle oder helle Farbe.", "Set percentage change in lightness (Between -100 and 100).": "Setze die Helligkeit in Prozent (Zwischen -100 und 100).", "Set percentage change in saturation (Between -100 and 100).": "Setze die Sättigung in Prozent (Zwischen -100 und 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Setze die Gammakorrektur in Prozent (Zwischen 0.01 und 10.0, wobei 1.0 keine Korrektur bedeutet).", "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.": "Setze das Animation Easing. Null sorgt für eine gleichbleibende Geschwindigkeit der Animation, ein negativer Wert bewirkt einen schnellen Start, ein positiver Wert einen langsamen.", "Set the autoplay interval in seconds.": "Setze den Autoplay Interval in Sekunden.", "Set the blog width.": "Setze die Blog-Breite.", "Set the breakpoint from which grid items will align side by side.": "Setze den Breakpoint, ab dem die Grid-Einträge nebeneinander angeordnet werden.", "Set the breakpoint from which grid items will stack.": "Setze den Breakpoint, ab welchem Grid-Zellen umbrechen und übereinander angeordnet werden.", "Set the breakpoint from which the sidebar and content will stack.": "Setze den Breakpoint, ab welchem die Sidebar und der Inhalt umbrechen und übereinander angeordnet werden.", "Set the button size.": "Setze die Buttongröße.", "Set the button style.": "Setze den Button-Stil.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Setze die Spaltenbreite für jeden Breakpoint. Kombiniere feste Breiten mit dem Wert <i>Ausweiten</i>. Wenn kein Wert ausgewählt ist, wird die Spaltenbreite der nächst kleineren Bildschirmgröße angewendet. Die Kombination der Breiten sollte immer die volle Breite einnehmen.", "Set the content width.": "Setze die Breite des Inhalts.", "Set the device width from which the list columns should apply.": "Setze die Gerätebreite, ab der die Listenspalten gelten sollen.", "Set the device width from which the nav columns should apply.": "Stelle ein, ab welcher Mindest-Bildschirmgröße die Spaltenaufteilung in der Navigation angewendet werden soll.", "Set the device width from which the text columns should apply.": "Setze die Gerätebreite, ab der die Textspalten angewendet werden sollen.", "Set the dropbar width if it slides in from the left or right.": "Setze die Dropbar-Breite, wenn sie von links oder rechts eingeblendet wird.", "Set the dropdown width in pixels (e.g. 600).": "Setze die Dropdown-Breite in Pixel (z.B. 600).", "Set the duration for the Ken Burns effect in seconds.": "Setze die Dauer des Ken Burns-Effekt in Sekunden.", "Set the height in pixels.": "Setze die Höhe in Pixel.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Setze die horizontale Position der Unterkante des Elements in Pixel. Es kann auch eine andere Einheit wie % oder vw eingegeben werden.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Setze die horizontale Position des linken Randes des Elements in Pixel. Es kann auch eine andere Einheit wie % oder vw eingegeben werden.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Setze die horizontale Position des rechten Randes des Elements in Pixel. Es kann auch eine andere Einheit wie % oder vw eingegeben werden.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Setze die horizontale Position der oberen Kante des Elements in Pixel. Es kann auch eine andere Einheit wie % oder vw eingegeben werden.", "Set the hover style for a linked title.": "Wähle einen Hover Effekt für den verlinkten Titel.", "Set the hover transition for a linked image.": "Wähle einen Hover Effekt für das Bild.", "Set the hue, e.g. <i>#ff0000</i>.": "Setze den Farbton, z.B. <i>#ff0000</i>.", "Set the icon color.": "Setze die Icon-Farbe.", "Set the icon width.": "Setze die Icon-Breite.", "Set the initial background position, relative to the page layer.": "Setze die initiale Position des Hintergrundes relativ zur Seite.", "Set the initial background position, relative to the section layer.": "Setze die initiale Position des Hintergrundes relativ zur Section.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Setze die initiale Zoomstufe der Karte. Der Wert 0 bedeutet minimale und 18 maximale Vergrößerung.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Setze die Eintrag-Breite für jeden Breakpoint. <i>Übernehmen</i> bezieht sich auf die Größe des nächst kleineren Breakpoints.", "Set the level for the section heading or give it no semantic meaning.": "Setze das Level der Section-Überschrift oder gebe ihr keine semantische Bedeutung.", "Set the link style.": "Setze den Link-Stil.", "Set the logical operator for how the %post_type% relate to the author. Choose between matching at least one term, all terms or none of the terms.": "Setze den logischen Operator, wie sich der %post_type% auf den Autor bezieht. Wähle, ob eine Übereinstimmung mit mindestens einem Begriff, allen Begriffen oder keinem der Begriffe bestehen soll.", "Set the logical operators for how the %post_type% relate to %taxonomy_list% and author. Choose between matching at least one term, all terms or none of the terms.": "Setze den logischen Operator dafür, wie sich der %post_type% auf die %taxonomy_list% und den Autor bezieht. Wähle, ob eine Übereinstimmung mit mindestens einem Begriff, allen Begriffen oder keinem der Begriffe bestehen soll.", "Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.": "Setze den logischen Operator, wie sich der Beitrag auf Kategorien, Tags und den Autor beziehen. Wähle, ob eine Übereinstimmung mit mindestens einem Begriff, allen Begriffen oder keinem der Begriffe bestehen soll.", "Set the margin between the countdown and the label text.": "Setze den Außenabstand zwischen Countdown und Beschriftung.", "Set the margin between the overlay and the slideshow container.": "Setze den Außenabstand zwischen dem Overlay und der Slideshow.", "Set the maximum content width.": "Setze die maximale Breite des Inhalts.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Setze die maximale Breite des Inhalts. Hinweis: Auf der Section kann bereits eine maximale Breite gesetzt sein, diese kann nicht überschritten werden.", "Set the maximum header width.": "Setze die maximale Breite des Headers.", "Set the maximum height.": "Setze die maximal Höhe.", "Set the maximum width.": "Setze die maximal Breite.", "Set the number of columns for the cart cross-sell products.": "Setze die Anzahl der Spalten für die Cross-Sell-Produkte im Warenkorb.", "Set the number of columns for the gallery thumbnails.": "Setze die Anzahl der Spalten für die Galerie Thumbnails.", "Set the number of grid columns for desktops and larger screens. On smaller viewports the columns will adapt automatically.": "Setze die Anzahl der Grid Spalten für Desktops und größere Bildschirme. Bei kleineren Viewports passen sich die Spalten automatisch an.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Setze die Anzahl an Grid-Spalten pro Breakpoint. <i>Übernehmen</i> bezieht sich auf die Anzahl des nächst kleineren Breakpoints. <i>Automatisch</i> erweitert die Spalten auf die Breite der Einträge in den Zeilen.", "Set the number of grid columns.": "Setze die Anzahl der Grid Spalten.", "Set the number of items after which the following items are pushed to the bottom.": "Setze die Anzahl der Elemente, nach denen die folgenden Elemente nach unten verschoben werden.", "Set the number of items after which the following items are pushed to the right.": "Setze die Anzahl der Elemente, nach denen die folgenden Elemente nach rechts verschoben werden.", "Set the number of list columns.": "Setze die Anzahl an Listen Spalten.", "Set the number of text columns.": "Setze die Anzahl an Text Spalten.", "Set the offset from the top of the viewport where the column or its elements should become sticky, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height.": "Set the offset from the top of the viewport where the column or its elements should become sticky, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height.", "Set the offset to specify which file is loaded.": "Setze den Offset, um zu bestimmen, welche Datei geladen wird.", "Set the order direction.": "Lege die Reihenfolge der Sortierung fest.", "Set the padding between sidebar and content.": "Wähle den Innenabstand zwischen Sidebar und Inhalt.", "Set the padding between the card's edge and its content.": "Setze den Innenabstand zwischen dem Rand des Cards und dem Inhalt.", "Set the padding between the overlay and its content.": "Setze den Innenabstand zwischen Overlay und dem Inhalt.", "Set the padding.": "Setze den Innenabstand.", "Set the post width. The image and content can't expand beyond this width.": "Setze die Post Breite. Das Bild und der Inhalt können diese Breite nicht überschreiten.", "Set the product ordering.": "Setze die Produktreihenfolge.", "Set the search input size.": "Setze die Größe der Sucheingabe.", "Set the search input style.": "Setze den Stil der Sucheingabe.", "Set the separator between fields.": "Setze den Trenner zwischen den Felder.", "Set the separator between list items.": "Setze den Trenner zwischen den Listeneinträgen.", "Set the separator between tags.": "Setze den Trenner zwischen den Tags.", "Set the separator between terms.": "Setze den Trenner zwischen den Begriffen.", "Set the separator between user groups.": "Trenner zwischen Benutzergruppen.", "Set the separator between user roles.": "Trenner zwischen Zugriffsebenen.", "Set the size for the Gravatar image in pixels.": "Set the size for the Gravatar image in pixels.", "Set the size of the column gap between multiple buttons.": "Setze den Spaltenabstand zwischen mehreren Buttons.", "Set the size of the column gap between the numbers.": "Setze den Spaltenabstand zwischen den Zahlen.", "Set the size of the gap between between the filter navigation and the content.": "Setze den Abstand zwischen der Filternavigation und dem Inhalt.", "Set the size of the gap between the grid columns.": "Setze den Abstand zwischen den Grid Spalten.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Setze den Abstand zwischen Grid Zellen. Definiere die Anzahl an Spalten in den <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> Einstellungen in Joomla.", "Set the size of the gap between the grid rows.": "Stelle den Abstand zwischen den Grid Zeilen ein.", "Set the size of the gap between the image and the content.": "Stelle den Abstand zwischen Bild und Inhalt ein.", "Set the size of the gap between the navigation and the content.": "Stelle den Abstand zwischen Navigation und Inhalt ein.", "Set the size of the gap between the social icons.": "Stelle den Abstand zwischen den Social Icons ein.", "Set the size of the gap between the title and the content.": "Stelle den Abstand zwischen Titel und Inhalt ein.", "Set the size of the gap if the grid items stack.": "Stelle den Abstand ein wenn die Grid-Zellen umbrechen.", "Set the size of the row gap between multiple buttons.": "Stelle den Zeilenabstand zwischen mehreren Buttons ein.", "Set the size of the row gap between the numbers.": "Stelle den Zeilenabstand zwischen den Ziffern ein.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Setze das Verhältnis für die Slideshow. Es wird empfohlen das selbe Verhältnis wie in der Bild- oder Videodatei zu verwenden. Benutze einfach die Breite und Höhe, z.B. <code>1600:900</code>.", "Set the starting point and limit the number of %post_type%.": "Setze den Startpunkt und begrenze die Anzahl der %post_type%.", "Set the starting point and limit the number of %post_types%.": "Setze den Startpunkt und begrenze die Anzahl der %post_types%.", "Set the starting point and limit the number of %taxonomies%.": "Setze den Startpunkt und begrenze die Anzahl der %taxonomies%.", "Set the starting point and limit the number of articles.": "Setze den Startpunkt und begrenze die Anzahl der Artikel.", "Set the starting point and limit the number of categories.": "Setze den Startpunkt und begrenze die Anzahl der Kategorien.", "Set the starting point and limit the number of files.": "Setze den Startpunkt und begrenze die Anzahl der Dateien.", "Set the starting point and limit the number of items.": "Setze den Startpunkt und begrenze die Anzahl der Einträge.", "Set the starting point and limit the number of tagged items.": "Set the starting point and limit the number of tagged items.", "Set the starting point and limit the number of tags.": "Setze den Startpunkt und begrenze die Anzahl der Tags.", "Set the starting point and limit the number of users.": "Setze den Startpunkt und begrenze die Anzahl der Benutzer.", "Set the starting point to specify which %post_type% is loaded.": "Setze den Startpunkt, um zu bestimmen, welche(r) %post_type% geladen wird.", "Set the starting point to specify which article is loaded.": "Setze den Startpunkt, um zu bestimmen, welcher Beitrag geladen wird.", "Set the top margin if the image is aligned between the title and the content.": "Setze den oberen Außenabstand wenn das Bild zwischen Titel und Inhalt positioniert ist.", "Set the top margin.": "Setze den oberen Außenabstand.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Setze den oberen Außenabstand. Dieses wird angewendet wenn das Inhaltsfeld direkt auf ein anderes Inhaltsfeld folgt.", "Set the type of tagged items.": "Set the type of tagged items.", "Set the velocity in pixels per millisecond.": "Setze die Geschwindigkeit in Pixel pro Millisekunde.", "Set the vertical container padding to position the overlay.": "Setze den vertikale Innenabstand um das Overlay zu positionieren.", "Set the vertical margin.": "Setze den vertikalen Außenabstand.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Setze den vertikalen Außenabstand. Hinweis: Der obere Außenabstand des ersten Elementes und der untere Außenabstand des letzten Elementes werden immer entfernt. Diese Abstände können in den Grid-Einstellungen definiert werden.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Setze die vertikalen Abstände. Hinweis: Der obere Außenabstand des ersten Grids und der untere Außenabstand des letzten Grids werden immer entfernt. Diese Abstände können in den Section-Einstellungen definiert werden.", "Set the vertical padding.": "Setze den vertikalen Innenabstand.", "Set the video dimensions.": "Setze die Videogröße.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Setze die Breite und Höhe für den Modal Inhalt, d.h. Bild, Video oder Iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Setze Breite und Höhe in Pixel (z.B. 600). Wird nur ein Wert gesetzt, so wird das Seitenverhältnis beibehalten. Das Bild wird automatisch skaliert und zugeschnitten.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Setze Breite und Höhe in Pixel. Wird nur ein Wert gesetzt, so wird das Seitenverhältnis beibehalten. Das Bild wird automatisch skaliert und zugeschnitten.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Setze die Breite in Pixel. Wenn keine Breite gesetzt ist, wird die Karte die volle Breite einnehmen. Wenn Breite und Höhe gesetzt sind, verhält sich die Karte \"responsive\" wie ein Bild. Zusätzlich kann die Breite der Karte als ein Breakpoint benutzt werden. Die Karte nimmt die volle Breite ein, aber unter dem Breakpoint wird die Karte im Seitenverhältnis verkleinert.", "Set the width of the dropbar content.": "Setze die Breite des Dropbar-Inhalts.", "Set whether it's an ordered or unordered list.": "Lege fest, ob es sich um eine geordnete oder ungeordnete Liste handelt.", "Sets": "Gruppen", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Bei nur einer Größenangabe wird das Seitenverhältnis beibehalten. Das Bild wird automatisch neu berechnet und wenn möglich wird eine hochauflösende Version erstellt.", "Setting Menu Items": "Menü Einträge einstellen", "Setting the Blog Content": "Blog Inhalt einstellen", "Setting the Blog Image": "Blog Bild einstellen", "Setting the Blog Layout": "Blog Layout einstellen", "Setting the Blog Navigation": "Blog Navigation einstellen", "Setting the Dialog Layout": "Dialog Layout einstellen", "Setting the Header Layout": "Header Layout einstellen", "Setting the Main Section Height": "Main Section Höhe einstellen", "Setting the Minimum Stability": "Mindeststabilität bestimmen", "Setting the Mobile Dialog Layout": "Mobile Dialog Layout einstellen", "Setting the Mobile Header Layout": "Mobile Header Layout einstellen", "Setting the Mobile Navbar": "Mobile Navbar einstellen", "Setting the Mobile Search": "Mobile Suche einstellen", "Setting the Module Appearance Options": "Modul Aussehen Optionen einstellen", "Setting the Module Default Options": "Modul Standard Optionen einstellen", "Setting the Module Grid Options": "Modul Grip Optionen einstellen", "Setting the Module List Options": "Modul Listen Option einstellen", "Setting the Module Menu Options": "Modul Menü Optionen einstellen", "Setting the Navbar": "Navbar einstellen", "Setting the Page Layout": "Seiten Layout einstellen", "Setting the Post Content": "Post Inhalt einstellen", "Setting the Post Image": "Post Bild einstellen", "Setting the Post Layout": "Post Layout einstellen", "Setting the Post Navigation": "Post Navigation einstellen", "Setting the Sidebar Area": "Sidebar Area einstellen", "Setting the Sidebar Position": "Sidebar Position einstellen", "Setting the Source Order and Direction": "Die Quellreihenfolge und -richtung einstellen", "Setting the Template Loading Priority": "Template Prioritäten einstellen", "Setting the Template Status": "Template Status einstellen", "Setting the Top and Bottom Areas": "Top und Bottom Areas einstellen", "Setting the Top and Bottom Positions": "Top und Bottom Positionen einstellen", "Setting the Widget Appearance Options": "Widget Aussehen Optionen einstellen", "Setting the Widget Default Options": "Widget Standard Optionen einstellen", "Setting the Widget Grid Options": "Widget Grip Optionen einstellen", "Setting the Widget List Options": "Widget Listen Optionen einstellen", "Setting the Widget Menu Options": "Widget Menü Optionen einstellen", "Setting the WooCommerce Layout Options": "WooCommerce Layout Optionen einstellen", "Settings": "Einstellungen", "Shop": "Shop", "Shop and Search": "Shop and Search", "Short Description": "Kurzbeschreibung", "Show": "Zeigen", "Show %taxonomy%": "%taxonomy% anzeigen", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Zeige einen Banner, um die Besucher über die von der Website verwendeten Cookies zu informieren. Wähle zwischen einer einfachen Benachrichtigung, dass Cookies geladen werden oder hole eine obligatorische Zustimmung ein vor dem Laden von Cookies.", "Show a divider between grid columns.": "Zeige einen Trenner zwischen Grid Zellen an.", "Show a divider between list columns.": "Zeige einen Trenner zwischen Listen Spalten an.", "Show a divider between text columns.": "Zeige einen Trenner zwischen Text Spalten an.", "Show a separator between the numbers.": "Zeige einen Trenner zwischen den Ziffern an.", "Show archive category title": "Zeige den Archiv Kategorie Titel", "Show as disabled button": "Als deaktivierten Button anzeigen", "Show author": "Zeige den Autor", "Show below slideshow": "Unter der Slideshow anzeigen", "Show button": "Zeige den Button", "Show categories": "Zeige die Kategorien", "Show Category": "Zeige die Kategorie", "Show close button": "\"Schließen\" Button anzeigen", "Show comment count": "Zeige die Anzahl der Kommentare", "Show comments count": "Zeige die Anzahl der Kommentare", "Show content": "Inhalt anzeigen", "Show Content": "Inhalt anzeigen", "Show controls": "Steuerelemente anzeigen", "Show current page": "Aktuelle Seite anzeigen", "Show date": "Das Datum anzeigen", "Show dividers": "Trenner anzeigen", "Show drop cap": "Initiale zeigen", "Show filter control for all items": "Filter Navigation für alle Einträge anzeigen", "Show headline": "Überschrift anzeigen", "Show home link": "Home Link anzeigen", "Show hover effect if linked.": "Zeige einen Hover-Effekt wenn verlinkt.", "Show intro text": "Einführungstext anzeigen", "Show Labels": "Zeige Labels", "Show link": "Link anzeigen", "Show lowest price": "Niedrigsten Preis anzeigen", "Show map controls": "Karten-Steuerelemente anzeigen", "Show message": "Nachricht zeigen", "Show name fields": "Zeige die Felder für Namen an", "Show navigation": "Zeige die Navigation", "Show on hover only": "Nur bei Maus-Hover anzeigen", "Show optional dividers between nav or subnav items.": "Optionale Trenner zwischen Nav- oder Subnav Einträgen anzeigen.", "Show or hide content fields without the need to delete the content itself.": "Zeige oder verstecke Inhaltsfelder, ohne den Inhalt zu löschen.", "Show or hide fields in the meta text.": "Zeige oder verstecke Felder im Meta-Text.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Zeige oder verstecke die Elemente auf dieser Gerätebreite und größer. Wenn alle Elemente versteckt sind, werden Spalten, Zeilen und Sections entsprechend versteckt.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Zeige oder verstecke den Home-Link als erstes Element sowie die aktuelle Seite als letztes Element in der Breadcrumb-Navigation.", "Show or hide the intro text.": "Zeige oder verstecke den Einführungstext.", "Show or hide the reviews link.": "Zeige oder verstecke den Link zu den Bewertungen.", "Show or hide title.": "Zeige oder verstecke den Titel.", "Show out of stock text as disabled button for simple products.": "Zeige den Text \"Nicht vorrätig\" als deaktivierten Button für einfache Produkte an.", "Show parent icon": "Parent Icon anzeigen", "Show points of interest": "Sehenswürdigkeiten anzeigen", "Show popup on load": "Popup beim Laden der Seite anzeigen", "Show rating": "Bewertung anzeigen", "Show result count": "Anzahl der Suchergebnisse anzeigen", "Show result ordering": "Sortierung der Suchergebnisse anzeigen", "Show reviews link": "Link zu den Bewertungen anzeigen", "Show Separators": "Zeige Trenner", "Show space between links": "Abstand zwischen Links anzeigen", "Show Start/End links": "Zeige Start/Ende Links", "Show system fields for single posts. This option does not apply to the blog.": "Zeige System Felder in der Post Ansicht. Diese Option gilt nicht für die Blog Übersicht.", "Show system fields for the blog. This option does not apply to single posts.": "Zeige System Felder in der Blog Ansicht. Diese Option gilt nicht für die Post Ansicht.", "Show tags": "Zeige Tags", "Show Tags": "Zeige Tags", "Show the content": "Inhalt anzeigen", "Show the excerpt in the blog overview instead of the post text.": "Zeige den Textauszug in der Blog Übersicht anstatt des Post Text.", "Show the hover image": "Hover Bild anzeigen", "Show the hover video": "Hover Video anzeigen", "Show the image": "Bild anzeigen", "Show the link": "Link anzeigen", "Show the lowest price instead of the price range.": "Zeige den niedrigsten Preis anstelle der Preisspanne an.", "Show the menu text next to the icon": "Menü-Text neben dem Icon anzeigen", "Show the meta text": "Meta-Text anzeigen", "Show the navigation label instead of title": "Zeige das Navigation Label anstelle des Titels an", "Show the navigation thumbnail instead of the image": "Zeige das Navigation Thumbnail anstelle des Bildes an", "Show the sale price before or after the regular price.": "Zeige den Angebotspreis vor oder nach dem regulären Preis an.", "Show the subtitle": "Untertitel anzeigen", "Show the title": "Titel anzeigen", "Show title": "Titel anzeigen", "Show Title": "Titel anzeigen", "Show Variations": "Variationen anzeigen", "Shrink": "Schrumpfen", "Sidebar": "Sidebar", "Single %post_type%": "Einzelne(r) %post_type%", "Single Article": "Einzelner Artikel", "Single Contact": "Einzelner Kontakt", "Single Post": "Einzelner Post", "Single Post Pages": "Einzelne Beitragsseiten", "Site": "Seite", "Site Title": "Titel der Website", "Sixths": "Sechstel", "Sixths 1-5": "Sechstel 1-5", "Sixths 5-1": "Sechstel 5-1", "Size": "Größe", "Slide": "Slide", "Slide %s": "Slide %s", "Slide all visible items at once": "Slide alle sichtbaren Einträge zeitgleich", "Slide Bottom 100%": "Slide Bottom 100%", "Slide Bottom Medium": "Slide Bottom Medium", "Slide Bottom Small": "Slide Bottom Small", "Slide Left": "Slide Left", "Slide Left 100%": "Slide Left 100%", "Slide Left Medium": "Slide Left Medium", "Slide Left Small": "Slide Left Small", "Slide Right": "Slide Right", "Slide Right 100%": "Slide Right 100%", "Slide Right Medium": "Slide Right Medium", "Slide Right Small": "Slide Right Small", "Slide Top": "Slide Top", "Slide Top 100%": "Slide Top 100%", "Slide Top Medium": "Slide Top Medium", "Slide Top Small": "Slide Top Small", "Slidenav": "Slidenav", "Slider": "Slider", "Slideshow": "Slideshow", "Slug": "Slug", "Small": "Small", "Small (Phone Landscape)": "Small (Smartphone Querformat)", "Smart Search": "Suchindex", "Smart Search Item": "Suchindex Eintrag", "Social": "Social", "Social Icons": "Icons sozialer Netzwerke", "Social Icons Gap": "Social Icons Abstand", "Social Icons Size": "Social Icons Größe", "Soft-light": "Weiches Licht", "Source": "Quelle", "Split Items": "Elemente aufteilen", "Split the dropdown into columns.": "Teile das Dropdown in mehrere Spalten.", "Spread": "Spread", "Square": "Rechteck", "Stable": "Stabil", "Stack columns on small devices or enable overflow scroll for the container.": "Ordne die Spalten übereinander an oder aktiviere 'overflow scroll' auf mobilen Geräten.", "Stacked": "Gestapelt", "Stacked (Name fields as grid)": "Gestapelt (Name als Grid)", "Stacked Center A": "Stapeln Mitte A", "Stacked Center B": "Stapeln Mitte B", "Stacked Center C": "Stapeln Mitte C", "Stacked Center Split A": "Stapeln Mitte Geteilt A", "Stacked Center Split B": "Stapeln Mitte Geteilt B", "Stacked Justify": "Stapeln Bündig", "Stacked Left": "Stapeln Links", "Start": "Start", "Start with all items closed": "Initial alle Elemente geschlossen", "Starts with": "Beginnt mit", "State or County": "Staat oder Bezirk", "Static": "Statisch", "Status": "Status", "Stick the column or its elements to the top of the viewport while scrolling down. They will stop being sticky when they reach the bottom of the containing column, row or section. Optionally, blend all elements with the page content.": "Hefte die Spalte oder ihre Elemente an der Oberkante des Viewports während des Herunterscrollens an. Sie sind nicht mehr angeheftet sobald die Unterkante der übergeordnete Spalte, Zeile oder Section erreicht wird.", "Stick the navbar at the top of the viewport while scrolling or only when scrolling up.": "Hefte die Navigationsleiste beim scrollen an den oberen Rand des Browserfensters oder nur beim nach oben scrollen.", "Sticky": "Sticky", "Sticky Effect": "Sticky Effekt", "Sticky on scroll up": "Sticky beim Aufwärtsscrollen", "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.": "Überdecke die angeheftete Section beim Scrollen von der nachfolgende Section. Enthülle die Section von der vorherigen Section.", "Stretch the dropdown to the width of the navbar or the navbar container.": "Streckt das Dropdown auf die Breite der Navbar oder des Navbar Containers.", "Stretch the panel to match the height of the grid cell.": "Panel-Höhe an die Höhe der Grid-Zelle anpassen.", "Striped": "Gestreift", "Style": "Stil", "Sublayout": "Sublayout", "Subnav": "Subnav", "Subnav (Nav)": "Subnav (Nav)", "Subnav Divider (Nav)": "Subnav Trenner (Nav)", "Subnav Pill (Nav)": "Subnav Pill (Nav)", "Subtitle": "Untertitel", "Subtract height above": "Höhe darüber abziehen", "Success": "Success", "Support": "Support", "Support Center": "Hilfe Center", "SVG Color": "SVG Farbe", "Switch prices": "Preise wechseln", "Switcher": "Switcher", "Syntax Highlighting": "Syntax Highlighting", "System Assets": "System-Assets", "System Check": "System Check", "Tab": "Tab", "Table": "Tabelle", "Table Head": "Tabellen Kopf", "Tablet Landscape": "Tablet Querformat", "Tabs": "Tabs", "Tag": "Tag", "Tag Item": "Tag Eintrag", "Tag Order": "Tag-Reihenfolge", "Tagged Items": "Getaggte Einträge", "Tags": "Tags", "Tags are only loaded from the selected parent tag.": "Es werden nur Tags geladen vom ausgewählten übergeordneten Tag.", "Tags Operator": "Tags-Operator", "Target": "Ziel", "Taxonomy Archive": "Taxonomie Archiv", "Teaser": "Teaser", "Telephone": "Telefon", "Template": "Template", "Templates": "Templates", "Term ID": "Term ID", "Term Order": "Reihenfolge der Bergriffe", "Tertiary": "Tertiär", "Text": "Text", "Text Alignment": "Text Ausrichtung", "Text Alignment Breakpoint": "Text Ausrichtung Breakpoint", "Text Alignment Fallback": "Text Ausrichtung Fallback", "Text Bold": "Text Fett", "Text Color": "Textfarbe", "Text Large": "Text Large", "Text Lead": "Text Lead", "Text Meta": "Text Meta", "Text Muted": "Text Muted", "Text Small": "Text Small", "Text Style": "Text-Stil", "The Accordion Element": "Das Akkordion-Element", "The Alert Element": "Das Alarm-Element", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "Die Animation startet und stoppt abhängig von der Elementposition im Viewport. Alternativ kann die Position eines übergeordneten Containers verwendet werden.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.": "Die Animation beginnt, wenn das Element das Ansichtsfenster betritt, und endet, wenn es das Ansichtsfenster verlässt. Lege optional einen Start- und End-Offset fest, z. B. <code>100px</code>, <code>50vh</code> oder <code>50vh + 50%</code>. Prozent bezieht sich auf die Höhe des Elements.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "Die Animation beginnt, wenn das Element im Viewport sichtbar wird und endet wenn es aus dem Viewport scrollt. Optional, definiere einen Start- und End-Offset, z. B. <code>100px</code>, <code>50vh</code> oder <code>50vh + 50%</code>. Prozent bezieht sich auf die Höhe des Ziel-Elementes.", "The animation starts when the row enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the row's height.": "Die Animation beginnt, wenn die Zeile das Ansichtsfenster betritt, und endet, wenn sie das Ansichtsfenster verlässt. Lege optional einen Start- und End-Offset fest, z. B. <code>100px</code>, <code>50vh</code> oder <code>50vh + 50%</code>. Prozent bezieht sich auf die Höhe der Zeile.", "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.": "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.", "The Area Element": "Das Area Element", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "Ist die Leiste oben positioniert wird der Inhalt nach unten verschoben. Ist sie unten positioniert wird sie fixiert über dem Inhalt angezeigt.", "The Breadcrumbs Element": "Das Breadcrumbs-Element", "The builder is not available on this page. It can only be used on pages, posts and categories.": "Builder ist auf dieser Seite nicht verfügbar. Der Builder kann nur auf Seiten, Beiträgen und Kategorien verwendet werden.", "The Button Element": "Das Button-Element", "The changes you made will be lost if you navigate away from this page.": "Alle Änderungen gehen verloren, sobald diese Seite verlassen wird.", "The Code Element": "Das Code-Element", "The Countdown Element": "Das Countdown-Element", "The current PHP version %version% is outdated. Upgrade the installation, preferably to the <a href=\"https://php.net\" target=\"_blank\">latest PHP version</a>.": "Die aktuelle PHP version %version% is veraltet. Aktualisiere die Installation, vorzugsweise mit der <a href=\"https://php.net\" target=\"_blank\">aktuellsten PHP Version</a>.", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "Die Standardreihenfolge folgt der durch die Klammern festgelegten Reihenfolge oder greift auf die vom System festgelegte Standardreihenfolge der Dateien zurück.", "The Description List Element": "Das Beschreibungslisten-Element", "The Divider Element": "Das Trennelement", "The Gallery Element": "Das Galerie-Element", "The Grid Element": "Das Grid-Element", "The Headline Element": "Das Headline-Element", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Die Höhe kann sich an die Höhe des Viewports anpassen. <br><br>Hinweis: Stelle sicher, dass in den Section-Einstellungen keine Höhe eingestellt ist, wenn eine der Viewport-Optionen verwendet wird.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Die Höhe passt sich automatisch an den Inhalt an. Alternativ kann die Höhe an die Viewport Größe angepasst werden. <br><br>Hinweis: Stelle sicher, dass keine Höhe in der Section gesetzt ist, wenn eine der Viewport Optionen verwendet wird.", "The Icon Element": "Das Icon-Element", "The Image Element": "Das Bild-Element", "The List Element": "Das Listenelement", "The list shows pages and is limited to 50. Use the search to find a specific page or search for a post of any post type to give it an individual layout.": "Die Liste zeigt Seiten und ist auf 50 begrenzt. Verwende die Suche, um eine bestimmte Seite zu finden, oder suche nach einem Beitrag eines beliebigen Beitragstyps, um ein individuelles Layout anzulegen.", "The list shows uncategorized articles and is limited to 50. Use the search to find a specific article or an article from another category to give it an individual layout.": "Die Liste zeigt nicht kategorisierte Artikel und ist auf 50 begrenzt. Verwende die Suche, um einen bestimmten Artikel zu finden und ein individuelles Layout anzulegen.", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "Das Logo wird automatisch zwischen den Elementen platziert. Optional, definiere die Anzahl der Elemente, nach denen diese aufgeteilt werden.", "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.": "Der Logo-Text wird angezeigt, wenn kein Logo-Bild gewählt wurde. Wenn ein Bild gewählt ist wird der Text als aria-label Attribut im Link verwendet.", "The Map Element": "Das Map-Element", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "Das Masonry Grid passt die Einträge lückenlos an, selbst wenn Grid-Zellen unterschiedliche Höhen haben. ", "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.": "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.", "The Module Element": "Das Modul Element", "The module maximum width.": "Maximale Breite des Moduls.", "The Nav Element": "Das Nav-Element", "The Newsletter Element": "Das Newsletter-Element", "The Overlay Element": "Das Overlay-Element", "The Overlay Slider Element": "Das Overlay-Slider-Element", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "Die Seite wurde von %modifiedBy% aktualisiert. Eigene Änderungen verwerfen und neu laden?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "Die Seite wurde gerade von %modified_by% aktualisiert. Speichern überschreibt diese Änderungen. Trotzdem speichern oder eigene Änderungen verwerfen und die Seite neu laden?", "The Pagination Element": "Das Paginierungselement", "The Panel Element": "Das Panel-Element", "The Panel Slider Element": "Das Panel-Slider-Element", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels.": "Die Parallax-Animation bewegt einzelne Grid-Spalten beim Scrollen mit unterschiedlicher Geschwindigkeit. Definiere den vertikalen Parallax-Versatz in Pixel.", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.": "Die Parallax-Animation bewegt einzelne Grid-Spalten beim Scrollen mit unterschiedlicher Geschwindigkeit. Definiere den vertikalen Parallax-Versatz in Pixel. Alternativ, verschiebe die Spalten mit unterschiedlichen Höhen, bis sie unten ausgerichtet sind.", "The Popover Element": "Das Popover-Element", "The Position Element": "Das Position Element", "The Quotation Element": "Das Zitatelement", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "Das RSFirewall Plugin kann den Seiteninhalt vom Builder korrumpieren. Deaktiviere die Funktion <em>Convert email addresses from plain text to images</em> in der <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall Konfiguration</a>.", "The Search Element": "Das Suchelement", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "Das SEBLOD Plugin bewirkt, dass der Builder nicht verfügbar ist. Deaktiviere die Funktion <em>Hide Edit Icon</em> in der <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD Konfiguration</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Die Slideshow nutzt immer die volle Breite, die Höhe passt sich automatisch an den Inhalt basierend auf der definierten Ratio an. Alternativ kann die Höhe an die Viewport Größe angepasst werden. <br><br>Hinweis: Stelle sicher, dass keine Höhe in der Section gesetzt ist, wenn eine der Viewport Optionen verwendet wird.", "The Slideshow Element": "Das Slideshow-Element", "The Social Element": "Das Social-Element", "The Sublayout Element": "Das Sublayout Element", "The Subnav Element": "Das Subnav-Element", "The Switcher Element": "Das Switcher-Element", "The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.": "The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.", "The Table Element": "Das Tabellenelement", "The template is only assigned to %post_types_lower% with the selected terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "Das Template wird nur auf %post_types_lower% mit den ausgewählten Begriffen zugewiesen. Verwende die Taste <kbd>Umschalt</kbd> oder <kbd>Strg/cmd</kbd>, um mehrere Begriffe auszuwählen.", "The template is only assigned to %taxonomies% if the selected terms are set in the URL. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "The template is only assigned to %taxonomies% if the selected terms are set in the URL. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.", "The template is only assigned to articles from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "Das Template wird nur den Artikeln aus den ausgewählten Kategorien zugewiesen. Mit der Taste <kbd>Umschalt</kbd> oder <kbd>Strg/cmd</kbd> können mehrere Kategorien ausgewählt werden.", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Das Template wird nur Beiträgen mit den ausgewählten Tags zugeordnet. Verwende die <kbd>shift-</kbd> oder <kbd>ctrl/cmd-</kbd> Taste, um mehrere Tags auszuwählen.", "The template is only assigned to categories if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "The template is only assigned to categories if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.", "The template is only assigned to contacts from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "Das Template wird nur Kontakten aus den ausgewählten Kategorien zugewiesen. Verwende die Taste <kbd>Umschalt</kbd> oder <kbd>Strg/Befehl</kbd>, um mehrere Kategorien auszuwählen.", "The template is only assigned to contacts with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Das Template wird nur auf Kontakte mit den ausgewählten Tags angewendet. Um mehrere Tags auszuwählen, die Tasten <kbd>shift</kbd> oder <kbd>ctrl/cmd</kbd> verwenden.", "The template is only assigned to the selected %taxonomies%. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple %taxonomies%.": "Das Template wird nur den ausgewählten %taxonomies% zugewiesen. Verwende die Taste <kbd>Umschalt</kbd> oder <kbd>Strg/Befehl</kbd>, um mehrere %taxonomies% auszuwählen.", "The template is only assigned to the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "Das Template wird nur den ausgewählten Kategorien zugewiesen. Mit der Taste <kbd>Umschalt</kbd> oder <kbd>Strg/cmd</kbd> können mehrere Kategorien ausgewählt werden.", "The template is only assigned to the selected pages.": "Das Template ist nur den ausgewählten Seiten zugeordnet.", "The template is only assigned to the view if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Das Template wird dem View nur zugewiesen, wenn die ausgewählten Tags im Menüpunkt gesetzt sind. Benutze <kbd>shift</kbd> oder <kbd>ctrl/cmd</kbd> um mehrere Tags auszuwählen.", "The Text Element": "Das Textelement", "The Totop Element": "Das Totop-Element", "The Video Element": "Das Videoelement", "The Widget Element": "Das Widget-Element", "The widget maximum width.": "Maximale Breite des Widgets.", "The width of the grid column that contains the module.": "Breite der Grid-Zelle, die das Modul beinhaltet.", "The width of the grid column that contains the widget.": "Die Breite der Spalte, die das Widget enthält.", "The YOOtheme API key, which enables <span class=\"uk-text-nowrap\">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Der YOOtheme API Schlüssel, durch den <span class=\"uk-text-nowrap\">Updates mit einem klick</span> installiert werden und Zugriff auf die Layout Bibliothek ermöglicht wird, fehlt. Erstelle einen API Schlüssel in den <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account Einstellungen</a>.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "Der Ordner vom YOOtheme Pro Theme wurde umbenannt und beeinträchtigt wesentliche Funktionen. Benenne den Ordner wieder in <code>yootheme</code> um.", "Theme Settings": "Theme Einstellungen", "Thirds": "Drittel", "Thirds 1-2": "Drittel 1-2", "Thirds 2-1": "Drittel 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "In diesem Ordner werden die Bilder gespeichert, die du herunterlädst, wenn du Layouts aus der YOOtheme Pro-Bibliothek verwendest. Der Ordner befindet sich innerhalb des Joomla Medienverzeichnisses.", "This is only used, if the thumbnail navigation is set.": "Wird nur verwendet wenn die Thumbnail Navigation aktiviert ist.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Das Layout beinhaltet eine Mediendatei die in die Bibliothek heruntergeladen werden muss. |||| Das Layout beinhaltet %smart_count% Mediendateien die in die Bibliothek heruntergeladen werden müssen.", "This option doesn't apply unless a URL has been added to the item.": "Diese Option ist nur aktiv wenn eine URL hinzugefügt wurde.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Diese Option ist nur aktiv wenn eine URL hinzugefügt wurde. Es wird nur der Inhalt verlinkt.", "This option is only used if the thumbnail navigation is set.": "Wird nur verwendet wenn die Thumbnail Navigation aktiviert ist.", "Thumbnail": "Thumbnail", "Thumbnail Inline SVG": "Thumbnail Inline SVG", "Thumbnail SVG Color": "Thumbnail SVG Farbe", "Thumbnail Width/Height": "Thumbnail Breite/Höhe", "Thumbnail Wrap": "Thumbnail Umbruch", "Thumbnails": "Miniaturbilder", "Thumbnav": "Thumbnav", "Thumbnav Inline SVG": "Thumbnav Inline SVG", "Thumbnav SVG Color": "Thumbnav SVG Farbe", "Thumbnav Wrap": "Thumbnav Umbruch", "Tile Checked": "Tile Kariert", "Tile Default": "Tile Default", "Tile Muted": "Tile Muted", "Tile Primary": "Tile Primary", "Tile Secondary": "Tile Secondary", "Time Archive": "Zeitarchiv", "Title": "Titel", "title": "Titel", "Title Decoration": "Titel Dekoration", "Title Margin": "Titel Außenabstand", "Title Parallax": "Titel Parallax", "Title Style": "Titel Stil", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Die Stile für den Titel unterscheiden sich in der Größe, können aber auch eine eigene Farbe, Größe und Schriftart haben.", "Title Width": "Breite des Titels", "Title, Image, Meta, Content, Link": "Titel, Bild, Meta, Inhalt, Link", "Title, Meta, Content, Link, Image": "Titel, Meta, Inhalt, Link, Bild", "To left": "Nach links", "To right": "Nach rechts", "To Top": "Nach oben", "Toolbar": "Toolbar", "Toolbar Left End": "Toolbar Links Ende", "Toolbar Left Start": "Toolbar Links Start", "Toolbar Right End": "Toolbar Rechts Ende", "Toolbar Right Start": "Toolbar Rechts Start", "Top": "Top", "Top Center": "Oben Mitte", "Top Left": "Oben Links", "Top Right": "Oben Rechts", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Oben, unten, links oder rechts ausgerichtete Bilder können bis zu den Rändern erweitert werden. Ist das Bild links oder rechts ausgerichtet füllt es automatisch den leeren Bereich.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Oben, links oder rechts ausgerichtete Bilder können bis zu den Rändern erweitert werden. Ist das Bild links oder rechts ausgerichtet füllt es automatisch den leeren Bereich.", "Total Views": "Ansichten insgesamt", "Touch Icon": "Touch Icon", "Transform": "Transform", "Transform Origin": "Ursprung der Transformation", "Transform the element into another element while keeping its content and settings. Unused content and settings are removed. Transforming into a preset only keeps the content but adopts all preset settings.": "Transform the element into another element while keeping its content and settings. Unused content and settings are removed. Transforming into a preset only keeps the content but adopts all preset settings.", "Transition": "Übergang", "Translate X": "Translate X", "Translate Y": "Translate Y", "Transparent Background": "Transparenter Hintergrund", "Transparent Header": "Transparenter Header", "Tuesday, Aug 06 (l, M d)": "Dienstag, Aug 06 (l, M d)", "Type": "Typ", "ul": "ul", "Understanding Status Icons": "Status Icons verstehen", "Understanding the Layout Structure": "Die Layout Struktur verstehen", "Unknown %type%": "Unbekannte(r) %type%", "Unpublished": "Unveröffentlicht", "Updating YOOtheme Pro": "YOOtheme Pro updaten", "Upload": "Hochladen", "Upload a background image.": "Hintergrund-Bild hochladen.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Optionales Hintergrund-Bild für die Seite hochladen. Das Bild bleibt während des Scrollens stehen.", "Upload Layout": "Layout hochladen", "Upload Preset": "Voreinstellung hochladen", "Upload Style": "Stil hochladen", "Upsell Products": "Upselling-Produkte", "Url": "Url", "URL Protocol": "URL Protokoll", "Use a numeric pagination or previous/next links to move between blog pages.": "Nutze eine numerische Navigation oder Vorheriger/Nächster Links zum navigieren auf der Blog Übersicht.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Verwende eine optionale Mindesthöhe, um zu verhindern, dass Bilder auf kleinen Geräten kleiner werden als der Inhalt.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Verwende eine optionale Mindesthöhe, um zu verhindern, dass der Slider auf kleinen Geräten kleiner wird als der Inhalt.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Verwende eine optionale Mindesthöhe, um zu verhindern, dass die Slideshow auf kleinen Geräten kleiner wird als der Inhalt.", "Use as breakpoint only": "Nur als Breakpoint verwenden", "Use double opt-in.": "Benutze Double Opt-In.", "Use excerpt": "Textauszug nutzen", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Benutze eine Hintergrundfarbe in Kombination mit Blend-Modes, einem transparenten Bild oder um leere Bereiche zu füllen, wenn das Bild nicht die komplette Seite abdeckt.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Benutze eine Hintergrundfarbe in Kombination mit Blend-Modes, einem transparenten Bild oder um leere Bereiche zu füllen, wenn das Bild nicht die komplette Section abdeckt.", "Use the background color in combination with blend modes.": "Benutze die Hintergrundfarbe in Kombination mit Blend-Modes.", "User": "Benutzer", "User Group": "Benutzergruppe", "User Groups": "Benutzergruppen", "Username": "Benutzername", "Users": "Benutzer", "Users are only loaded from the selected roles. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple roles.": "Es werden nur Benutzer aus den gewählten Rollen geladen. Verwende die <kbd>shift</kbd> oder <kbd>ctrl/cmd</kbd> Taste, um mehrere Benutzerrollen auszuwählen.", "Users are only loaded from the selected user groups. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple user groups.": "Es werden nur Benutzer aus den gewählten Gruppen geladen. Verwende die <kbd>shift</kbd> oder <kbd>ctrl/cmd</kbd> Taste, um mehrere Benutzergruppen auszuwählen.", "Using Advanced Custom Fields": "Advanced Custom Fields verwenden", "Using Content Fields": "Inhalts-Felder verwenden", "Using Content Sources": "Inhalts-Quellen verwenden", "Using Custom Fields": "Benutzerdefinierte Felder verwenden", "Using Custom Post Type UI": "Custom Post Type UI verwenden", "Using Custom Post Types": "Custom Post Types verwenden", "Using Custom Sources": "Benutzerdefinierte Quellen verwenden", "Using Dynamic Conditions": "Dynamische Bedingungen verwenden", "Using Dynamic Multiplication": "Verwendung der dynamischen Multiplikation", "Using Elements": "Elemente verwenden", "Using External Sources": "Externe Quellen verwenden", "Using Images": "Bilder verwenden", "Using Links": "Links verwenden", "Using Menu Location Options": "Using Menu Location Options", "Using Menu Locations": "Menü Positionen verwenden", "Using Menu Position Options": "Using Menu Position Options", "Using Menu Positions": "Menü Positionen verwenden", "Using Module Positions": "Module Positionen verwenden", "Using My Layouts": "Meine Layouts verwenden", "Using My Presets": "Meine Voreinstellungen verwenden", "Using Page Sources": "Seiten Quellen verwenden", "Using Parent Sources": "Verwendung übergeordneter Quellen", "Using Powerful Posts Per Page": "Powerful Posts Per Page verwenden", "Using Pro Layouts": "Pro Layouts verwenden", "Using Pro Presets": "Pro Voreinstellung verwenden", "Using Related Sources": "Verwandte Quellen verwenden", "Using Site Sources": "Website Quellen verwenden", "Using the Before and After Field Options": "Before und After Feld Optionen verwenden", "Using the Builder Module": "Builder Modul verwenden", "Using the Builder Widget": "Builder Widget verwenden", "Using the Categories and Tags Field Options": "Kategorie- und Tag-Feld Optionen verwenden", "Using the Content Field Options": "Inhalt Feld Optionen verwenden", "Using the Content Length Field Option": "Inhaltslänge Feld Option verwenden", "Using the Contextual Help": "Kontext-Hilfe verwenden", "Using the Date Format Field Option": "Datum Format Feld Option verwenden", "Using the Device Preview Buttons": "Vorschau Buttons für Geräte verwenden", "Using the Dropdown Menu": "Dropdown Menü verwenden", "Using the Element Finder": "Element-Suche verwenden", "Using the Footer Builder": "Footer Builder verwenden", "Using the Media Manager": "Medien-Manager verwenden", "Using the Mega Menu Builder": "Using the Mega Menu Builder", "Using the Menu Module": "Menü Modul verwenden", "Using the Menu Widget": "Menü Widget verwenden", "Using the Meta Field Options": "Meta Feld Optionen verwenden", "Using the Page Builder": "Page Builder verwenden", "Using the Search and Replace Field Options": "Suchen und Ersetzen Feld Optionen verwenden", "Using the Sidebar": "Sidebar verwenden", "Using the Tags Field Options": "Tag-Feld Optionen verwenden", "Using the Teaser Field Options": "Teaser Feld Optionen verwenden", "Using the Toolbar": "Toolbar verwenden", "Using the Unsplash Library": "Unsplash Bibliothek verwenden", "Using the WooCommerce Builder Elements": "WooCommerce Builder Elemente verwenden", "Using the WooCommerce Page Builder": "WooCommerce Page Builder verwenden", "Using the WooCommerce Pages Element": "WooCommerce-Seitenelement verwenden", "Using the WooCommerce Product Stock Element": "WooCommerce-Produktbestandselement verwenden", "Using the WooCommerce Products Element": "WooCommerce-Produktelement verwenden", "Using the WooCommerce Related and Upsell Products Elements": "WooCommerce Zugehörige- und Upsell-Produkte-Elemente verwenden", "Using the WooCommerce Style Customizer": "WooCommerce Style Customizer verwenden", "Using the WooCommerce Template Builder": "WooCommerce Template Builder verwenden", "Using Toolset": "Toolset verwenden", "Using Widget Areas": "Widget Areas verwenden", "Using WooCommerce Dynamic Content": "Dynamischen Inhalt in WooCommerce verwenden", "Using WordPress Category Order and Taxonomy Terms Order": "WordPress Category Order and Taxonomy Terms Order verwenden", "Using WordPress Popular Posts": "WordPress Powerful Posts verwenden", "Using WordPress Post Types Order": "WordPress Post Types Order verwenden", "Value": "Wert", "Values": "Werte", "Variable Product": "Variables Produkt", "Velocity": "Geschwindigkeit", "Version %version%": "Version %version%", "Vertical": "Vertikal", "Vertical Alignment": "Vertikale Ausrichtung", "Vertical navigation": "Vertikale Navigation", "Vertically align the elements in the column.": "Elemente vertikal in der Zeile ausrichten.", "Vertically center grid items.": "Grid-Zellen vertikal zentrieren.", "Vertically center table cells.": "Tabellen-Zellen vertikal zentrieren.", "Vertically center the image.": "Bild vertikal zentrieren.", "Vertically center the navigation and content.": "Navigation und Inhalt vertikal zentrieren.", "Video": "Video", "Videos": "Videos", "View Photos": "Fotos ansehen", "Viewport": "Viewport", "Viewport (Subtract Next Section)": "Viewport (Nächste Section subtrahieren)", "Viewport Height": "Viewport Höhe", "Visibility": "Sichtbarkeit", "Visible Large (Desktop)": "Sichtbar Large (Desktop)", "Visible Medium (Tablet Landscape)": "Sichtbar Medium (Tablet Querformat)", "Visible on this page": "Sichtbar auf dieser Seite", "Visible Small (Phone Landscape)": "Sichtbar Small (Smartphone Querformat)", "Visible X-Large (Large Screens)": "Sichtbar X-Large (Große Displays)", "Visual": "Visuell", "Votes": "Stimmen", "Warning": "Warnung", "WebP image format isn't supported. Enable WebP support in the <a href=\"https://php.net/manual/en/image.installation.php\" target=\"_blank\">GD extension</a>.": "WebP Bildformat wird nicht unterstützt. Aktiviere die WebP-Unterstützung in der <a href=\"https://php.net/manual/en/image.installation.php\" target=\"_blank\">GD Extension</a>.", "Website": "Webseite", "Website Url": "Webadresse", "What's New": "Was gibt’s Neues", "When using cover mode, you need to set the text color manually.": "Die Textfarbe muss manuell geändert werden wenn der 'Bedecken' Modus aktiviert ist.", "White": "Weiß", "Whole": "Komplett", "Widget": "Widget", "Widget Area": "Widget Area", "Widgets": "Widgets", "Width": "Breite", "Width 100%": "Breite 100%", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Breite und Höhe werden entsprechend getauscht wenn das Bildformat geändert wird.", "Width/Height": "Breite/Höhe", "With mandatory consent": "Zustimmung zwingend erforderlich", "Woo Notices": "Woo Notices", "Woo Pages": "Woo Seiten", "WooCommerce": "WooCommerce", "Working with Multiple Authors": "Mit mehreren Autoren arbeiten", "Wrap with nav element": "Mit Navigationselement umschließen", "X": "X", "X-Large": "X-Large", "X-Large (Large Screens)": "X-Large (Große Displays)", "X-Small": "X-Small", "Y": "Y", "Year Archive": "Jahres-Archiv", "YOOtheme": "YOOtheme", "YOOtheme API Key": "YOOtheme API Schlüssel", "YOOtheme Help": "YOOtheme Hilfe", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro ist voll einsatzbereit und startklar.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro ist nicht betriebsbereit. Alle kritischen Fehler müssen behoben werden.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro ist einsatzbereit, aber einige Probleme müssen noch behoben werden, um die Leistung zu verbessern und alle Funktionen verfügbar zu machen.", "Z Index": "Z Index", "Zoom": "Zoom" }theme/languages/zh_CN.json000064400000313730151666572140011534 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- 选择 -", "- Select Module -": "- 选择模块 -", "- Select Position -": "- 选择位置 -", "- Select Widget -": "- 选择小工具 -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "“%name%”已经存在于库中,保存时将被覆盖。", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% 元素", "%label% - %group%": "%label% - %group%", "%label% Location": "%label% 位置", "%label% Position": "%label%位置", "%name% already exists. Do you really want to rename?": "%name%已经存在,你确定想重命名?", "%post_type% Archive": "%post_type%存档", "%s is already a list member.": "%s已经是列表成员。", "%s of %s": "%s 的 %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s已被永久删除,无法重新导入。联系人必须重新订阅才能重新加入列表。", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count%集合 |||| %smart_count%集合", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% 元素 |||| %smart_count% 元素", "%smart_count% File |||| %smart_count% Files": "%smart_count%文件 |||| %smart_count%文件", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count%选中的文件 |||| %smart_count%选中的文件", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% 图标 |||| %smart_count% 图标", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% 布局 |||| %smart_count% 布局", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count%下载失败媒体文件: |||| %smart_count%下载失败媒体文件:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count%照片 |||| %smart_count%照片", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% 预设值 |||| %smart_count% 预设值", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% 风格 |||| %smart_count% 风格", "%smart_count% User |||| %smart_count% Users": "%smart_count%用户 |||| %smart_count%用户", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% 仅从选定的父级 %taxonomy% 加载。", "%title% %index%": "%title% %index%", "%type% Presets": "%type%预设", "<code>json_encode()</code> must be available. Install and enable the <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> extension.": "<code>json_encode()</code> 必须可用。安装并启用 <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> 扩展。", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 列", "1 Column Content Width": "一列内容宽度", "100%": "100%", "a": "一个", "About": "关于", "Accordion": "折叠", "Add": "添加", "Add a colon": "添加冒号", "Add a leader": "添加领导者", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "滚动时添加视差效果或固定相关视区的背景。", "Add a parallax effect.": "添加视差效果。", "Add bottom margin": "添加下边距", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "不需要 <code><style></code> 标签,就能向您的网站添加自定义 CSS 或 Less。所有 Less 主题变量和混合都可用。", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "不需要 <code><script></code> 标签,就能将自定义 JavaScript 添加到您的网站。", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "不需要 <code><script></code> 标签,就能添加设置 cookie 的自定义 JavaScript。并将在获得同意后加载。", "Add Element": "添加元素", "Add extra margin to the button.": "为按钮添加额外的边距。", "Add Folder": "添加目录", "Add Item": "添加项目", "Add margin between": "在之间添加边距", "Add Media": "添加媒体", "Add Menu Item": "添加菜单项", "Add Module": "添加模块", "Add Row": "添加行", "Add Section": "添加片段", "Add text after the content field.": "在内容字段之后添加文本。", "Add text before the content field.": "在内容字段之前添加文本。", "Add top margin": "添加上边距", "Adding the Logo": "添加Logo", "Adding the Search": "添加搜索", "Adding the Social Icons": "添加社交图标", "Advanced": "高级", "After": "之后", "After Submit": "提交后", "Alert": "警报", "Align image without padding": "没有填充并对齐图像", "Align the filter controls.": "对齐过滤器控件。", "Align the image to the left or right.": "图像左右对齐。", "Align the image to the top or place it between the title and the content.": "图像顶部对齐或将其放在标题和内容之间。", "Align the image to the top, left, right or place it between the title and the content.": "图像顶部、左侧、右侧对齐或将其放置在标题和内容之间。", "Align the meta text.": "对齐元文本。", "Align the navigation items.": "对齐导航项。", "Align the section content vertically, if the section height is larger than the content itself.": "如果片段高度大于内容本身,则垂直对齐片段内容。", "Align the title and meta text as well as the continue reading button.": "对齐标题和元文本以及继续阅读按钮。", "Align the title and meta text.": "对齐标题和元文本。", "Align the title to the top or left in regards to the content.": "将标题与内容在顶部或左侧对齐。", "Alignment": "对齐", "Alignment Breakpoint": "对齐断点", "Alignment Fallback": "对齐回退", "All backgrounds": "所有背景", "All colors": "所有颜色", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "所有图片均根据<a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>获得许可,这意味着您可以未经许可复制,修改,分发和使用图像免费,包括商业用途。", "All Items": "所有项目", "All layouts": "所有布局", "All styles": "所有样式", "All topics": "所有主题", "All types": "所有类型", "All websites": "所有网站", "Allow mixed image orientations": "允许混合图像方向", "Allow multiple open items": "允许打开多个项目", "Animate background only": "仅限背景动画", "Animate strokes": "动画笔画", "Animation": "动画", "Any Joomla module can be displayed in your custom layout.": "任何Joomla模块都可以显示在您的自定义布局中。", "Any WordPress widget can be displayed in your custom layout.": "任何WordPress小工具都可以显示在您的自定义布局中。", "API Key": "API密钥", "Apply a margin between the navigation and the slideshow container.": "在导航和幻灯片容器之间设置边距。", "Apply a margin between the overlay and the image container.": "在叠加层和图像容器之间设置边距。", "Apply a margin between the slidenav and the slider container.": "在滑动导航和滑块容器之间设置边距。", "Apply a margin between the slidenav and the slideshow container.": "在滑动导航和幻灯片容器之间设置边距。", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "进入视区后,将动画应用于元素。幻灯片动画效果可以使用固定偏移量或元素自身大小的100%。", "Assigning Modules to Specific Pages": "将模块分配给特定页面", "Assigning Templates to Pages": "将模板分配给页面", "Assigning Widgets to Specific Pages": "将窗口小工具分配给特定页面", "Attach the image to the drop's edge.": "将图像附加到弹出窗口边缘。", "Attention! Page has been updated.": "注意!页面已更新。", "Attributes": "属性", "Author": "作者", "Author Link": "作者链接", "Auto-calculated": "自动计算", "Autoplay": "自动播放", "Back": "返回", "Background Color": "背景颜色", "Base Style": "基础风格", "Before": "之前", "Behavior": "行为", "Blend Mode": "混合模式", "Block Alignment": "模块对齐", "Block Alignment Breakpoint": "模块对齐断点", "Block Alignment Fallback": "模块对齐方案", "Blog": "博客", "Blur": "模糊", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "仅在加载默认 Joomla 模板文件时才需要 Bootstrap,例如用于 Joomla 前端编辑。加载 jQuery 后,基于 jQuery JavaScript 库可编写自定义代码。", "Border": "边界", "Bottom": "底部", "Box Decoration": "Box装饰", "Box Shadow": "Box阴影", "Breadcrumbs": "面包屑", "Breadcrumbs Home Text": "面包屑首页文字", "Breakpoint": "断点", "Builder": "编辑器", "Button": "按钮", "Button Margin": "按钮边距", "Button Size": "按钮大小", "Buttons": "按钮", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "默认情况,具有单个项目的相关源字段可用于映射。选择一个具有多个项目的相关源以映射其字段。", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "默认情况下,只有未分类的文章才会被视为页面。或者,将特定类别的文章定义为页面。", "Cache": "缓存", "Campaign Monitor API Token": "Campaign Monitor API令牌", "Cancel": "取消", "Category Blog": "分类博客", "Center": "居中", "Center columns": "中心列", "Center grid columns horizontally and rows vertically.": "网格列水平居中,行垂直居中。", "Center horizontally": "水平居中", "Center rows": "中心行", "Center the active slide": "居中活动幻灯片", "Center the content": "居中内容", "Center the module": "居中模块", "Center the title and meta text": "居中标题和元文本", "Center the title, meta text and button": "居中标题、元文本和按钮", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "居中,左右对齐也许取决于断点并需要反馈。", "Changelog": "更新日志", "Child Theme": "子主题", "Choose a divider style.": "选择分隔线样式。", "Choose a map type.": "选择地图样式。", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "选择滚动位置视差或幻灯激活动画。", "Choose between an attached bar or a notification.": "选择附加栏或通知。", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "在上一个/下一个或数字分页之间选择。数字分页不适用于单个文章。", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "在上一个/下一个或数字分页之间选择。数字分页不适用于单个帖子。", "Choose Font": "选择字体", "Choose the icon position.": "选择图标位置。", "Class": "类", "Classes": "类", "Clear Cache": "清除缓存", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "清除缓存的图像和资源。需要调整大小的图像存储在主题的缓存文件夹中。重新上载具有相同名称的图像后,您必须清除缓存。", "Close": "关闭", "Code": "代码", "Collapsing Layouts": "折叠式布局", "Collections": "集合", "Color": "颜色", "Column": "列", "Column 1": "第1列", "Column 2": "第2列", "Column 3": "第3列", "Column 4": "第4列", "Column 5": "第5列", "Column Gap": "列间距", "Column Layout": "列布局", "Columns": "列", "Columns Breakpoint": "列断点", "Comments": "评论", "Components": "组件", "Condition": "条件", "Consent Button Style": "同意按钮样式", "Consent Button Text": "同意按钮文本", "Container Padding": "容器填充", "Container Width": "容器宽度", "Content": "内容", "content": "内容", "Content Alignment": "内容对齐", "Content Length": "内容长度", "Content Margin": "内容边距", "Content Parallax": "内容视差", "Content Width": "内容宽度", "Controls": "控制", "Cookie Banner": "Cookie横幅", "Cookie Scripts": "Cookie脚本", "Copy": "复制", "Countdown": "倒数", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "为此页面类型创建常规布局。开始一个新的布局,并从一组准备使用的元素中进行选择,或者浏览布局库,从一个预先构建的布局开始。", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "为所有页面的页脚片段创建布局。开始一个新的布局,并从一组准备使用的元素中进行选择,或者浏览布局库,从一个预先构建的布局开始。", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "为此模块创建一个布局,并将其发布在顶部或底部。开始一个新的布局,并从一组准备使用的元素中进行选择,或者浏览布局库,从一个预先构建的布局开始。", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "为此小工具创建一个布局,并将其发布在顶部或底部。开始一个新的布局,并从一组准备使用的元素中进行选择,或者浏览布局库,从一个预先构建的布局开始。", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "为当前页面创建一个单独的布局。开始一个新的布局,并从一组准备使用的元素中进行选择,或者浏览布局库,从一个预先构建的布局开始。", "Creating a New Module": "创建一个新模块", "Creating a New Widget": "创建一个新的小工具", "Creating Accordion Menus": "创建折叠菜单", "Creating Advanced Module Layouts": "创建高级模块布局", "Creating Advanced Widget Layouts": "创建高级小工具布局", "Creating Menu Dividers": "创建菜单分隔符", "Creating Menu Heading": "创建菜单标题", "Creating Menu Headings": "创建菜单标题", "Creating Navbar Text Items": "创建导航栏文本项", "Critical Issues": "危急问题", "Critical issues detected.": "检测到危急问题。", "Curated by <a href>%user%</a>": "由<a href>%user%</a>策划", "Current Layout": "当前布局", "Current Style": "当前风格", "Custom Code": "自定义代码", "Customization": "定制", "Customization Name": "自定义名称", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "自定义所选布局的列宽并设置列顺序。更改布局将重置所有自定义设置。", "Date": "日期", "Date Format": "日期格式", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "使用分隔线,线框或垂直居中于标题的线条装饰标题。", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "使用分隔线,线框或垂直居中于标题的线条装饰标题。", "Decoration": "装饰", "Default": "默认", "Define a background style or an image of a column and set the vertical alignment for its content.": "定义背景样式或列的图像,并为其内容设置垂直对齐方式。", "Define a name to easily identify this element inside the builder.": "定义名称以在编辑器中轻松标识此元素。", "Define a unique identifier for the element.": "为元素定义唯一标识符。", "Define an alignment fallback for device widths below the breakpoint.": "为断点下方的设备宽度定义对齐回退。", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "为元素定义一个或多个属性。属性名称和值用 <code>=</code> 字符分隔。每行一个属性。 ", "Define one or more class names for the element. Separate multiple classes with spaces.": "为元素定义一个或多个类名。用空格分隔多个类。", "Define the alignment in case the container exceeds the element max-width.": "如果容器超出元素的最大宽度,则定义对齐。", "Define the alignment of the last table column.": "定义表格最后一列的对齐方式。", "Define the device width from which the alignment will apply.": "定义将应用对齐的设备宽度。", "Define the device width from which the max-width will apply.": "定义将应用的最大设备宽度。", "Define the layout of the form.": "定义表单的布局。", "Define the layout of the title, meta and content.": "定义标题,元和内容的布局。", "Define the order of the table cells.": "定义表格单元格的顺序。", "Define the padding between items.": "定义项目之间的填充。", "Define the padding between table rows.": "定义表格各行之间的填充。", "Define the title position within the section.": "定义标题在该片段中的位置。", "Define the width of the content cell.": "定义内容单元格的宽度。", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "定义过滤器导航的宽度。在百分比和固定宽度之间进行选择,或将列扩展为其内容的宽度。", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "定义网格中图像的宽度。在百分比和固定宽度之间进行选择,或将列扩展为其内容的宽度。", "Define the width of the meta cell.": "定义元单元格的宽度。", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "定义导航的宽度。在百分比和固定宽度之间进行选择,或将列扩展为其内容的宽度。", "Define the width of the title cell.": "定义标题单元格的宽度。", "Define the width of the title within the grid.": "定义网格中标题的宽度。", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "定义网格中标题的宽度。在百分比和固定宽度之间进行选择,或将列扩展为其内容的宽度。", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "定义幻灯项的宽度是固定的还是按其内容宽度自动展开。", "Define whether thumbnails wrap into multiple lines if the container is too small.": "如果容器太小,定义缩略图是否包裹成多行。", "Delete": "删除", "Description List": "说明列表", "Desktop": "桌面", "Determine how the image or video will blend with the background color.": "确定图像或视频如何与背景颜色混合。", "Determine how the image will blend with the background color.": "确定图像如何与背景颜色混合。", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "通过剪切图像或使用背景颜色填充空白区域,来确定图像是否适合页面尺寸。", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "通过剪切图像或使用背景颜色填充空白区域来确定图像是否适合片段尺寸。", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "禁用自动播放、立即开始自动播放或视频进入视区后立即开始自动播放。", "Disable element": "禁用元素", "Disable Emojis": "禁用表情符号", "Disable infinite scrolling": "禁用无限滚动", "Disable item": "禁用项目", "Disable row": "禁用行", "Disable section": "禁用片段", "Disable wpautop": "禁用wpautop", "Disabled": "禁用", "Discard": "丢弃", "Display": "显示", "Display a divider between sidebar and content": "在侧边栏和内容之间显示分隔符", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "通过选择应出现的位置来显示菜单。例如,在导航栏位置发布主菜单,在移动位置发布替代菜单。", "Display header outside the container": "在容器外显示标题", "Display icons as buttons": "显示图标作为按钮", "Display on the right": "显示在右侧", "Display overlay on hover": "在悬停时显示叠加层", "Display the breadcrumb navigation": "显示面包屑导航", "Display the content inside the overlay, as the lightbox caption or both.": "显示叠加层内的内容,作为灯箱标题或两者皆是。", "Display the content inside the panel, as the lightbox caption or both.": "显示面板内的内容,作为灯箱标题或两者皆是。", "Display the first letter of the paragraph as a large initial.": "将段落的第一个字母显示为大的首字母。", "Display the image only on this device width and larger.": "仅在此设备宽度和更大的宽度上显示图像。", "Display the image or video only on this device width and larger.": "仅在此设备宽度和更大的宽度上显示图像。", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "显示地图控件并定义是否可以使用鼠标滚轮来缩放地图或划动来拖动地图。", "Display the meta text in a sentence or a horizontal list.": "在句子或水平列表中显示元文本。", "Display the module only from this device width and larger.": "仅从此设备宽度和更大的宽度显示模块。", "Display the navigation only on this device width and larger.": "仅在此设备宽度和更大的宽度上显示导航。", "Display the parallax effect only on this device width and larger.": "仅在此设备宽度和更大的宽度上显示视差效果。", "Display the popover on click or hover.": "单击或悬停时显示弹出窗口。", "Display the section title on the defined screen size and larger.": "片段标题将显示在定义的屏幕尺寸和更大尺寸上。", "Display the slidenav only on this device width and larger.": "仅在此设备宽度和更大的宽度上显示滑动导航。", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "仅在此设备宽度和更大的外部显示滑动导航。否则它将显示在里面。", "Display the title in the same line as the content.": "在内容的同一行中显示标题。", "Display the title inside the overlay, as the lightbox caption or both.": "在叠加层内显示标题,作为灯箱标题或两者皆是。", "Display the title inside the panel, as the lightbox caption or both.": "在面板内显示标题,作为灯箱标题或两者皆是。", "Displaying the Breadcrumbs": "显示面包屑", "Displaying the Excerpt": "显示摘录", "Displaying the Mobile Header": "显示移动标题", "Divider": "分隔符", "Do you really want to replace the current layout?": "你真的想要更换当前的布局吗?", "Do you really want to replace the current style?": "你真的想要更换当前的风格吗?", "Documentation": "文档", "Don't wrap into multiple lines": "不要包裹成多行", "Double opt-in": "双重验证登入", "Download": "下载", "Download Less": "下载Less", "Drop Cap": "首字下沉", "Dropdown": "下拉", "Dynamic": "动态", "Dynamic Condition": "动态条件", "Dynamic Content": "动态内容", "Easing": "减轻", "Edit": "编辑", "Edit Image Quality": "编辑图像质量", "Edit Items": "编辑项目", "Edit Layout": "编辑布局", "Edit Menu Item": "编辑菜单项目", "Edit Module": "编辑模块", "Edit Settings": "编辑设置", "Edit Template": "编辑模板", "Element": "元素", "Email": "电子邮件", "Enable a navigation to move to the previous or next post.": "启用导航移至上一个或下一个帖子。", "Enable autoplay": "启用自动播放", "Enable click mode on text items": "在文本项上启用点击模式", "Enable drop cap": "启用首字下沉", "Enable filter navigation": "启用过滤器导航", "Enable lightbox gallery": "启用灯箱画廊", "Enable map dragging": "启用地图拖动", "Enable map zooming": "启用地图缩放", "Enable masonry effect": "启用瀑布流效果", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "输入以逗号分隔的标签列表,例如,<code>blue, white, black</code>.", "Enter a decorative section title which is aligned to the section edge.": "输入与片段边缘对齐的装饰片段标题。", "Enter a subtitle that will be displayed beneath the nav item.": "输入将显示在导航项目下方的子标题。", "Enter a table header text for the content column.": "输入内容列的表头文本。", "Enter a table header text for the image column.": "输入图像列的表头文本。", "Enter a table header text for the link column.": "输入链接列的表头文本。", "Enter a table header text for the meta column.": "输入元列的表头文本。", "Enter a table header text for the title column.": "输入标题列的表头文本。", "Enter a width for the popover in pixels.": "以像素为单位输入弹出窗口的宽度。", "Enter an optional footer text.": "输入可选的页脚文本。", "Enter an optional text for the title attribute of the link, which will appear on hover.": "输入链接的title属性的可选文本,该文本将显示在悬停上。", "Enter labels for the countdown time.": "输入倒计时时间的标签。", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "输入指向您的社交资料的链接。相应的 <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> 将自动显示(如果有)。还支持指向电子邮件地址和电话号码的链接,例如mailto:info@example.com或tel:+491570156。", "Enter or pick a link, an image or a video file.": "输入或选择链接,图像或视频文件。", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "输入 API 密钥以启用 YOOtheme Pro 的一键更新,并访问布局库以及 Unsplash 图片库。您可以在<a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">帐户设置</a>中为此网站创建 API 密钥。", "Enter the author name.": "输入作者姓名。", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "输入cookie同意消息。默认文本用作说明。请根据您所在国家/地区的Cookie法律进行调整。", "Enter the horizontal position of the marker in percent.": "输入百分比的标记水平位置。", "Enter the image alt attribute.": "输入图像的alt属性。", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "输入可能包含参考的替换字符串。如果保留为空,则将删除搜索匹配项。", "Enter the text for the button.": "输入按钮的文本。", "Enter the text for the home link.": "输入主页链接的文本。", "Enter the text for the link.": "输入链接的文本。", "Enter the vertical position of the marker in percent.": "输入百分比的标记的垂直位置。", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "输入您的 <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID以启用跟踪。<a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP匿名化</a>可能会降低跟踪准确性。", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "输入您的<a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">谷歌地图</a>API密钥使用谷歌地图而不是OpenStreetMap。它还支持其他选项来设置地图颜色的样式。", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "输入您的<a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a>API密钥,以便将其与Newsletter元素一起使用。", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code> <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "输入您的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "输入您自己的自定义CSS。以下选择器将自动为此元素添加前缀:<code>.el-section</code>", "Error 404": "错误 404", "Error creating folder.": "创建文件夹出错。", "Error deleting item.": "删除项目出错。", "Error renaming item.": "重命名项目出错。", "Error: %error%": "错误:%error%", "Excerpt": "摘抄", "Expand One Side": "展开一面", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "将一侧的宽度向左或向右扩展,而另一侧保持在最大宽度的约束范围内。", "Expand width to table cell": "将宽度扩展到表格单元格", "Extend all content items to the same height.": "将所有内容项扩展到相同的高度。", "External Services": "外部服务", "Extra Margin": "附加边距", "Fifths": "五等分", "Fifths 1-1-1-2": "五等分 1-1-1-2", "Fifths 1-1-3": "五等分 1-1-3", "Fifths 1-3-1": "五等分 1-3-1", "Fifths 1-4": "五等分 1-4", "Fifths 2-1-1-1": "五等分 2-1-1-1", "Fifths 2-3": "五等分 2-3", "Fifths 3-1-1": "五等分 3-1-1", "Fifths 3-2": "五等分 3-2", "Fifths 4-1": "五等分 4-1", "Filter": "过滤器", "Finite": "有限", "First name": "姓", "Fix the background with regard to the viewport.": "修复视区的背景。", "Fixed-Inner": "内固定", "Fixed-Left": "左固定", "Fixed-Outer": "外固定", "Fixed-Right": "右固定", "Folder created.": "文件夹已创建。", "Folder Name": "目录名称", "Font Family": "字体系列", "Footer": "页脚", "Force a light or dark color for text, buttons and controls on the image or video background.": "在图像或视频背景上为文本、按钮和控件强制使用浅色或深色。", "Force left alignment": "强制左对齐", "Form": "表单", "Full width button": "全宽按钮", "Gallery": "画廊", "Gamma": "伽玛", "Gap": "间距", "General": "常规", "Google Analytics": "谷歌分析", "Google Fonts": "谷歌字体", "Google Maps": "谷歌地图", "Gradient": "梯度", "Grid": "网格", "Grid Breakpoint": "网格断点", "Grid Column Gap": "网格列间距", "Grid Row Gap": "网格行间距", "Grid Width": "网格宽度", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "将项目分组。集合中的项目数取决于定义的项目宽度,例如:<i>33%</i>表示每组包含3个项目。", "Halves": "一半", "Header": "页头", "Heading": "标题", "Headline": "标题", "Headline styles differ in font size and font family.": "标题样式的字体大小不同,但也可能带有预定义的颜色、大小和字体。", "Height": "高度", "hex / keyword": "hex / 关键词", "Hide and Adjust the Sidebar": "隐藏和调整侧边栏", "Hide marker": "隐藏标记", "Hide title": "隐藏标题", "Highlight the hovered row": "突出显示悬停的行", "Home": "主页", "Home Text": "主页文字", "Horizontal Center": "水平居中", "Horizontal Center Logo": "水平居中Logo", "Horizontal Left": "水平居左", "Horizontal Right": "水平居右", "Hover Box Shadow": "悬停框阴影", "Hover Image": "悬停图像", "Hover Style": "悬停样式", "Hover Transition": "悬停过渡", "HTML Element": "HTML 元素", "Hue": "色调", "Icon": "图标", "Icon Color": "图标颜色", "Icon Width": "图标宽度", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "如果某个片段或行具有最大宽度,并且一侧向左或向右扩展,则可以从扩展侧移除默认填充。", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "如果将多个模板分配给同一视图,则将应用第一个出现的模板。通过拖放更改顺序。", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "如果要创建多语言网站,请不要在此处选择特定菜单。而是使用Joomla模块管理器根据当前语言发布正确的菜单。", "Image": "图像", "Image Alignment": "图像对齐", "Image Alt": "图像Alt", "Image Attachment": "图像附件", "Image Box Shadow": "图像框阴影", "Image Effect": "图像效果", "Image Height": "图像高度", "Image Margin": "图像边距", "Image Orientation": "图像方向", "Image Position": "图像位置", "Image Size": "图像尺寸", "Image Width": "图像宽度", "Image Width/Height": "图像宽度/高度", "Image/Video": "图片/视频", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "图像无法缓存。<a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">更改权限</a>:<code>cache</code>目录位于<code>yootheme</code>主题文件夹,以便Web服务器可以写入它。", "Info": "信息", "Inherit transparency from header": "从标题继承透明度", "Inject SVG images into the markup so they adopt the text color automatically.": "将 SVG 图像注入标记中,以便它们自动采用文本颜色。", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "将SVG图像注入页面标记,以便可以轻松使用CSS设置样式。", "Inline SVG": "内联SVG", "Inline title": "内联标题", "Insert at the bottom": "插入底部", "Insert at the top": "插入顶部", "Inset": "插页", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "您可以单击铅笔按钮从图标库中选择一个图标,而不是使用自定义图像。", "Inverse Logo (Optional)": "反色Logo(可选)", "Inverse style": "反色风格", "Inverse the text color on hover": "在悬停时反转文本颜色", "Invert lightness": "反转亮度", "IP Anonymization": "IP匿名化", "Issues and Improvements": "问题和改进", "Item": "项目", "Item deleted.": "项目已删除。", "Item renamed.": "项目已重命名。", "Item Width": "项目宽度", "Item Width Mode": "项目宽度模式", "Items": "项目", "Ken Burns Effect": "肯伯恩斯效应", "Label Margin": "标签边距", "Labels": "标签", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "横向和纵向图像在网格单元格中居中。调整图像大小时,将翻转宽度和高度。", "Large Screen": "大屏", "Large Screens": "大屏幕", "Larger padding": "更大填充", "Larger style": "更大样式", "Last Column Alignment": "末列对齐", "Last Modified": "最后修改", "Last name": "名", "Layout": "布局", "Layout Media Files": "布局媒体文件", "Lazy load video": "懒加载视频", "Left": "居左", "Library": "布局库", "Lightbox": "灯箱", "Lightness": "亮度", "Limit the content length to a number of characters. All HTML elements will be stripped.": "将内容长度限制为一定数量字符。将删除所有HTML元素。", "Link": "链接", "link": "链接", "Link card": "链接卡", "Link image": "链接图", "Link overlay": "链接叠加", "Link panel": "链接面板", "Link Parallax": "链接视差", "Link Style": "链接样式", "Link Target": "链接目标", "Link Text": "链接文本", "Link the image if a link exists.": "如果存在链接,则链接图像。", "Link the title if a link exists.": "如果存在链接,则链接标题。", "Link the whole card if a link exists.": "如果存在链接,则链接整片。", "Link the whole overlay if a link exists.": "如果存在链接,则链接整层。", "Link the whole panel if a link exists.": "如果存在链接,则链接整面。", "Link title": "链接标题", "Link Title": "链接标题", "Link to redirect to after submit.": "链接提交后重定向。", "List": "列表", "List Item": "列表项目", "List Style": "列表样式", "Load Bootstrap": "加载 Bootstrap", "Load Font Awesome": "加载 Font Awesome", "Load jQuery": "加载jQuery", "Location": "位置", "Logo Image": "Logo图像", "Logo Text": "Logo文本", "Loop video": "Logo视频", "Mailchimp API Token": "Mailchimp API令牌", "Main styles": "主样式", "Make SVG stylable with CSS": "使用CSS制作SVG样式", "Managing Menus": "管理菜单", "Managing Modules": "管理模块", "Managing Templates": "管理模板", "Managing Widgets": "管理小工具", "Map": "地图", "Mapping Fields": "映射字段", "Margin": "边距", "Margin Top": "顶边距", "Marker": "标记", "Marker Color": "标记颜色", "Masonry": "瀑布流", "Match content height": "匹配内容高度", "Match height": "匹配高度", "Match Height": "匹配高度", "Match the height of all modules which are styled as a card.": "为所有卡片样式,匹配模块高度。", "Match the height of all widgets which are styled as a card.": "为所有卡片样式,匹配小工具的高度。", "Max Height": "最大高度", "Max Width": "最大宽度", "Max Width (Alignment)": "最大宽度(对齐)", "Max Width Breakpoint": "最大宽度断点", "Media Folder": "媒体文件夹", "Menu": "菜单", "Menu Divider": "菜单分隔线", "Menu Icon Width": "菜单图标宽度", "Menu Image Align": "菜单图像对齐", "Menu Image and Title": "菜单图片和标题", "Menu Image Height": "菜单图片高度", "Menu Image Width": "菜单图片宽度", "Menu Inline SVG": "菜单内联 SVG", "Menu Primary Size": "菜单主要尺寸", "Menu Style": "菜单样式", "Menu Type": "菜单类型", "Menus": "菜单", "Message": "信息", "Message shown to the user after submit.": "提交后向用户显示的消息。", "Meta": "元", "Meta Alignment": "元对齐", "Meta Margin": "元边距", "Meta Parallax": "元视差", "Meta Style": "元样式", "Meta Width": "元宽度", "Min Height": "元高度", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "请注意,具有常规布局的模板已分配给当前页面。编辑模板以更新其布局。", "Minimum Stability": "最低稳定性", "Mobile": "移动", "Mobile Logo (Optional)": "移动Logo(可选)", "Mode": "模式", "Module": "模块", "Module Position": "模块位置", "Modules": "模块", "Move the sidebar to the left of the content": "将侧边栏移动到内容的左侧", "Multiple Items Source": "多个项目来源", "Mute video": "静音视频", "Name": "名称", "Navbar": "导航栏", "Navbar Style": "导航样式", "Navigation": "导航", "Navigation Label": "导航标签", "Navigation Thumbnail": "导航缩略图", "New Article": "新建文章", "New Layout": "新建布局", "New Menu Item": "新建菜单项", "New Module": "新建模块", "New Template": "新建模板", "Newsletter": "通讯", "Next-Gen Images": "下一代图像", "No %item% found.": "%item% 没有发现。", "No critical issues found.": "没有找到危急问题。", "No element found.": "找不到元素。", "No element presets found.": "找不到预设元素。", "No files found.": "找不到文件。", "No font found. Press enter if you are adding a custom font.": "找不到字体。如果要添加自定义字体,请按Enter键。", "No icons found.": "找不到图标。", "No items yet.": "尚无项目。", "No layout found.": "尚无布局。", "No Results": "没有结果", "No results.": "没有结果。", "No source mapping found.": "找不到映射源。", "No style found.": "尚无样式。", "None": "无", "Not assigned": "未分配", "Offcanvas Mode": "抽屉模式", "Ok": "好", "Only available for Google Maps.": "仅适用于谷歌地图。", "Only display modules that are published and visible on this page.": "仅显示在此页面上发布并可见的模块。", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "只有单个页面和帖子可以具有单独的布局。使用模板将常规布局应用于此页面类型。", "Open in a new window": "在新窗口中打开", "Open Templates": "打开模板", "Open the link in a new window": "在新窗口中打开链接", "Opening the Changelog": "打开更新日志", "Options": "选项", "Order": "排序", "Order First": "排序优先", "Outside Breakpoint": "外部断点", "Outside Color": "外部颜色", "Overlap the following section": "叠加以下片段", "Overlay": "叠加", "Overlay Color": "叠加颜色", "Overlay Parallax": "叠加视差", "Overlay the site": "叠加网站", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "覆盖该片段的动画设置。除非为此片段启用了动画,否则此选项无效。", "Padding": "填充", "Page": "页", "Page Category": "页面类别", "Pages": "页面", "Pagination": "分页", "Panel": "面板", "Panels": "面板", "Parallax": "视差", "Parallax Breakpoint": "视差断点", "Parallax Easing": "视差渐变", "Pause autoplay on hover": "悬停时暂停自动播放", "Phone Landscape": "手机横屏", "Phone Portrait": "手机竖屏", "Photos": "照片", "Pick": "选择", "Pick %type%": "选择 %type%", "Pick file": "选择文件", "Pick icon": "选择图标", "Pick link": "选择链接", "Pick media": "选择媒体", "Pick video": "选择视频", "Placeholder Image": "占位符图片", "Play inline on mobile devices": "在移动设备上内联播放", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "请安装/启用<a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">安装程序插件</a>以启用此功能。", "Popover": "弹出窗口", "Position": "位置", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "将元素定位在其他元素上方或下方。如果它们具有相同的堆栈级别,则位置取决于布局中的顺序。", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "将元素定位在常规内容流中,或相对于常规流自身偏移,或将其从流中移除并相对于包含列偏移。", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "将过滤器导航定位在顶部,左侧或右侧。可以将更大的样式应用于左右导航。", "Position the meta text above or below the title.": "将元文本放在标题的上方或下方。", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "将导航定位在顶部,底部,左侧或右侧。可以将更大的样式应用于左右导航。", "Post": "发帖", "Poster Frame": "海报框架", "Preserve text color": "保留文字颜色", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "保留文本颜色,例如在使用卡片时。并非所有样式都支持片段重叠,并且可能没有视觉效果。", "Preview all UI components": "预览所有UI组件", "Primary navigation": "主要导航", "Provider": "提供者", "Quantity": "数量", "Quarters": "隔间", "Quarters 1-1-2": "隔间 1-1-2", "Quarters 1-2-1": "隔间 1-2-1", "Quarters 1-3": "隔间 1-3", "Quarters 2-1-1": "隔间 2-1-1", "Quarters 3-1": "隔间 3-1", "Quotation": "引文", "Ratio": "比例", "Recompile style": "重新编译样式", "Reject Button Style": "拒绝按钮样式", "Reject Button Text": "拒绝按钮文本", "Reload Page": "重新加载页面", "Remove bottom margin": "删除下边距", "Remove bottom padding": "删除下填充", "Remove horizontal padding": "删除水平填充", "Remove left and right padding": "删除左右填充", "Remove left logo padding": "删除左logo填充", "Remove left or right padding": "删除左或右填充", "Remove Media Files": "删除媒体文件", "Remove top margin": "删除上边距", "Remove top padding": "删除上填充", "Rename": "重命名", "Rename %type%": "重命名 %type%", "Replace": "替换", "Replace layout": "替换布局", "Reset": "重置", "Reset to defaults": "重置为默认值", "Responsive": "响应", "Reverse order": "反序", "Right": "右", "Root": "根", "Rotate the title 90 degrees clockwise or counterclockwise.": "顺时针或逆时针旋转标题90度。", "Rotation": "旋转", "Row": "行", "Row Gap": "行间距", "Run Time": "播放时间", "Saturation": "饱和", "Save": "保存", "Save %type%": "保存 %type%", "Save in Library": "保存于库", "Save Layout": "保存布局", "Save Style": "保存样式", "Save Template": "保存模板", "Script": "脚本", "Search": "搜索", "Search articles": "搜索文章", "Search pages and post types": "搜索页面和帖子类型", "Search Style": "搜索样式", "Section": "片段", "Section/Row": "片段/行", "Select": "选择", "Select %item%": "选择 %item%", "Select %type%": "旋转 %type%", "Select a card style.": "选择卡片样式", "Select a child theme. Note that different template files will be loaded, and theme settings will be updated respectively. To create a child theme, add a new folder <code>yootheme_NAME</code> in the templates directory, for example <code>yootheme_mytheme</code>.": "选择一个子主题。请注意,将加载不同的模板文件,并分别更新主题设置。要创建子主题,请在模板目录中添加一个新文件夹 <code>yootheme_NAME</code>,例如 <code>yootheme_mytheme</code>。", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "选择一个内容源,使其字段可用于映射。在当前页面的来源之间进行选择或查询自定义来源。", "Select a different position for this item.": "为此项目选择其他位置。", "Select a grid layout": "选择网格布局", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "选择将呈现所有已发布模块的Joomla模块位置。建议使用builder-1到-6的位置,这些位置不会在主题的其他位置呈现。", "Select a panel style.": "选择一种面板样式。", "Select a predefined date format or enter a custom format.": "选择预定义的日期格式或输入自定义格式。", "Select a predefined meta text style, including color, size and font-family.": "选择预定义的元文本样式,包括颜色、大小和字体系列。", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "选择预定义的搜索模式或输入自定义字符串或正则表达式进行搜索。正则表达式必须放在斜杠之间。例如`my-string` 或`/ab+c/`。", "Select a predefined text style, including color, size and font-family.": "选择预定义的文本样式,包括颜色、大小和字体系列。", "Select a style for the continue reading button.": "选择继续阅读按钮的样式。", "Select a style for the overlay.": "选择叠加层的样式。", "Select a transition for the content when the overlay appears on hover.": "当悬停显示叠加层时,为内容选择一个过渡。", "Select a transition for the link when the overlay appears on hover.": "当悬停显示叠加层时,为链接选择一个过渡。", "Select a transition for the meta text when the overlay appears on hover.": "当悬停显示叠加层时,为元文本选择一个过渡。", "Select a transition for the overlay when it appears on hover.": "当悬停显示叠加层时,为叠加层选择一个过渡。", "Select a transition for the title when the overlay appears on hover.": "当悬停显示叠加层时,为标题选择一个过渡。", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "选择视频文件或从<a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a>或<a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>中输入链接。", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "选择一个WordPress窗口小工具区域,用来呈现所有已发布窗口小工具。建议使用builder-1到-6小部件区域,这些区域不会被主题在其他位置呈现。", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "选择具有反色的替代logo,例如白色,在黑暗的背景下更好的能见度。如果需要,它将自动显示。", "Select an alternative logo, which will be used on small devices.": "选择一个替代logo,该logo将用于小型设备。", "Select an animation that will be applied to the content items when filtering between them.": "选择将在内容项之间切换时应用于内容项的动画。", "Select an animation that will be applied to the content items when toggling between them.": "选择将在内容项之间切换时应用于内容项的动画。", "Select an image transition.": "选择图像过渡。", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "选择图像过渡。如果设置了悬停图像,则在两个图像之间进行转换。如果选择<i>None</i>,则悬停图像会淡入。", "Select an optional <code>favicon.svg</code>. Modern browsers will use it instead of the PNG image. Use CSS to toggle the SVG color scheme for light/dark mode.": "选择备用的 <code>favicon.svg</code>。现代浏览器将使用它代替 PNG 图像。使用 CSS 切换 SVG 配色方案以用于明暗模式。", "Select an optional image that appears on hover.": "选择悬停时显示的可选图像。", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "选择在视频播放前显示的可选图像。如果未选择,则第一视频帧显示为张贴帧。", "Select header layout": "选择标题布局", "Select Image": "选择图像", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "选择断点,该列将从该断点开始出现在其他列之前。在小屏尺寸上,该列将以自然顺序出现。", "Select the color of the list markers.": "选择列表标记的颜色", "Select the content position.": "选择内容位置。", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "选择过滤器导航样式。选项和分隔器样式仅适用于水平子导航。", "Select the form size.": "选择表单大小。", "Select the form style.": "选择表单样式。", "Select the icon color.": "选择图标的颜色。", "Select the image border style.": "选择图像的边框样式。", "Select the image box decoration style.": "选择图像的框式样式。", "Select the link style.": "选择链接样式。", "Select the list style.": "选择列表样式。", "Select the list to subscribe to.": "选择要订阅的列表。", "Select the marker of the list items.": "选择列表项目的标记。", "Select the menu type.": "选择菜单类型。", "Select the nav style.": "选择子导航样式。", "Select the navbar style.": "选择导航栏样式。", "Select the navigation type.": "选择导航类型。", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "选择导航样式。选项和分隔器样式仅适用于水平子导航。", "Select the overlay or content position.": "选择叠加层或内容位置。", "Select the position of the navigation.": "选择导航的位置。", "Select the position of the slidenav.": "选择滑动导航的位置。", "Select the position that will display the search.": "选择将显示搜索的位置。", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "选择将显示社交图标的位置。请务必添加社交个人资料链接,否则无法显示图标。", "Select the primary nav size.": "选择主要导航尺寸。", "Select the search style.": "选择搜索样式。", "Select the slideshow box shadow size.": "选择幻灯片的框阴影大小。", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "选择代码语法突出显示的样式。使用GitHub作为亮背景,使用Monokai作为暗背景。", "Select the style for the overlay.": "选择叠加层的样式。", "Select the subnav style.": "选择子导航样式。", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "选择SVG颜色。它仅适用于SVG中定义的受支持元素。", "Select the table style.": "选择表格样式。", "Select the text color.": "选择文字颜色。", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "选择文字颜色。如果选择“背景”选项,则样式不应用背景图像而使用原色。", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "选择文字颜色。如果选择“背景”选项,则样式不应用背景图像而使用原色。", "Select the title style and add an optional colon at the end of the title.": "选择标题样式并在标题末尾添加可选冒号。", "Select the transformation origin for the Ken Burns animation.": "选择肯伯恩斯动画的变换原点。", "Select the transition between two slides.": "选择两张幻灯片之间的过渡。", "Select the video box decoration style.": "选择视频的盒子装饰样式。", "Select the video box shadow size.": "选择视频的框阴影大小。", "Select whether a button or a clickable icon inside the email input is shown.": "选择是否显示电子邮件输入中的按钮或可单击图标。", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "选择在单击订阅按钮后是显示消息还是重定向站点。", "Select whether the modules should be aligned side by side or stacked above each other.": "选择模块是并排排列还是堆叠在一起。", "Select whether the widgets should be aligned side by side or stacked above each other.": "选择窗口小工具是并排对齐还是堆叠在一起。", "Select your <code>apple-touch-icon.png</code>. It appears when the website is added to the home screen on iOS devices. The recommended size is 180x180 pixels.": "选择您的 <code>apple-touch-icon.png</code>。当网站添加到 iOS 设备的主屏幕时,它会显示出来。建议尺寸为 180x180 像素。", "Select your <code>favicon.png</code>. It appears in the browser's address bar, tab and bookmarks. The recommended size is 96x96 pixels.": "选择您的 <code>favicon.png</code>。它会出现在浏览器的地址栏、标签和书签中。建议尺寸为 96x96 像素。", "Separator": "分隔符", "Serve AVIF images": "提供 AVIF 图像", "Serve optimized image formats with better compression and quality than JPEG and PNG.": "提供比 JPEG 和 PNG 具有更好压缩质量比的优化图像格式。", "Serve WebP images": "提供 WebP 图像", "Set a condition to display the element or its item depending on the content of a field.": "设置条件以显示元素或其项目,具体取决于字段的内容。", "Set a different link text for this item.": "为此项目设置不同的链接文本。", "Set a different text color for this item.": "为此项目设置不同的文本颜色。", "Set a fixed width.": "设置固定宽度。", "Set a higher stacking order.": "设置更高的堆叠顺序。", "Set a large initial letter that drops below the first line of the first paragraph.": "设置一个大的首字母,该字母低于第一段的第一行。", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "设置侧边栏宽度(以百分比表示),内容列将相应调整。宽度不会低于补充工具栏的最小宽度,您可以在“样式”部分中进行设置。", "Set an additional transparent overlay to soften the image or video.": "设置额外透明叠加层以柔化图像或视频。", "Set an additional transparent overlay to soften the image.": "设置附加透明叠加层以柔化图像。", "Set an optional content width which doesn't affect the image if there is just one column.": "设置可选的内容宽度,如果只有一列,则该宽度不会影响图像。", "Set an optional content width which doesn't affect the image.": "设置一个可选的内容宽度,该宽度不会影响图像。", "Set how the module should align when the container is larger than its max-width.": "当容器大于其最大宽度时,设置模块应如何对齐。", "Set light or dark color if the navigation is below the slideshow.": "如果导航位于幻灯片下方,请设置浅色或深色。", "Set light or dark color if the slidenav is outside.": "如果滑块位于幻灯片放映之外,请设置浅色或深色。", "Set light or dark color mode for text, buttons and controls.": "设置文本、按钮和控件为浅色或深色模式。", "Set light or dark color mode.": "设置浅色或深色模式。", "Set percentage change in lightness (Between -100 and 100).": "设置亮度的百分比变化(介于-100和100之间)。", "Set percentage change in saturation (Between -100 and 100).": "设置饱和度的百分比变化(介于-100和100之间)。", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "设置伽马校正量的百分比变化(介于0.01和10.0之间,其中1.0不应用校正)。", "Set the autoplay interval in seconds.": "以秒为单位设置自动播放间隔。", "Set the blog width.": "设置博客宽度。", "Set the breakpoint from which grid items will stack.": "设置网格单元堆栈的断点。", "Set the breakpoint from which the sidebar and content will stack.": "设置边栏和内容堆栈的断点。", "Set the button size.": "设置按钮大小。", "Set the button style.": "设置按钮样式。", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "设置每个断点的列宽。混合分数宽度或将固定宽度与 <i>Expand</i> 值组合。如果未选择任何值,则应用下一个较小屏幕尺寸的列宽。宽度的组合应始终占全宽。", "Set the device width from which the list columns should apply.": "设置设备宽度,列表列对应之。", "Set the device width from which the text columns should apply.": "设置设备宽度,文本列对应之。", "Set the duration for the Ken Burns effect in seconds.": "设置肯伯恩斯效果的持续时间(以秒为单位)。", "Set the height in pixels.": "以像素为单位设置高度。", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "设置元素底边的水平位置(以像素为单位)。也可以输入其他单位,例如%或vw。", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "设置元素左边的水平位置(以像素为单位)。也可以输入其他单位,例如%或vw。", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "设置元素右边的水平位置(以像素为单位)。也可以输入其他单位,例如%或vw。", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "设置元素顶部边的水平位置(以像素为单位)。也可以输入其他单位,例如%或vw。", "Set the hover style for a linked title.": "设置链接标题的悬停样式。", "Set the hover transition for a linked image.": "设置链接图像的悬停过渡。", "Set the hue, e.g. <i>#ff0000</i>.": "设置色调(例如#ff0000)。", "Set the icon color.": "设置图标颜色。", "Set the icon width.": "设置图标宽度。", "Set the initial background position, relative to the page layer.": "设置相对页面图层的初始背景位置。", "Set the initial background position, relative to the section layer.": "设置相对于片段图层的初始背景位置。", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "设置显示地图的初始分辨率。 0完全缩小,18处于放大的最高分辨率。", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "设置每个断点的项宽度。<i>Inherit</i>是指下一个较小屏幕尺寸的项目宽度。", "Set the link style.": "设置链接样式。", "Set the margin between the countdown and the label text.": "设置倒计时和标签文本之间的边距。", "Set the margin between the overlay and the slideshow container.": "设置叠加层和幻灯片放映容器之间的边距。", "Set the maximum content width.": "设置最大内容宽度。", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "设置最大内容宽度。注意:该部分可能已经具有最大宽度,您不能超过该宽度。", "Set the maximum header width.": "设置最大标题宽度。", "Set the maximum height.": "设置最大高度。", "Set the maximum width.": "设置最大宽度。", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "设置每个断点的网格列数。<i>Inherit</i>是指下一个较小屏幕尺寸的列数。", "Set the number of list columns.": "设置列表列数。", "Set the number of text columns.": "设置文本列数。", "Set the padding between sidebar and content.": "在侧边栏和内容之间设置填充。", "Set the padding between the overlay and its content.": "在叠加层及其内容之间设置填充。", "Set the padding.": "设置填充。", "Set the post width. The image and content can't expand beyond this width.": "设置帖子宽度。图像和内容无法扩展到此宽度以外。", "Set the search input style.": "选择搜索样式。", "Set the size of the column gap between multiple buttons.": "设置多个按钮之间的列间距。", "Set the size of the column gap between the numbers.": "设置数字之间的列间距。", "Set the size of the gap between between the filter navigation and the content.": "设置过滤器导航和内容之间的间距。", "Set the size of the gap between the grid columns.": "设置网格列之间的间距。", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "在Joomla中定义<a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">博客/特色布局</a>设置中的列数。", "Set the size of the gap between the grid rows.": "设置网格行之间的间距。", "Set the size of the gap between the image and the content.": "设置图像和内容之间的间距。", "Set the size of the gap between the navigation and the content.": "选择导航和内容项之间的间隙宽度。", "Set the size of the gap between the social icons.": "设置社交图标之间的间距大小。", "Set the size of the gap between the title and the content.": "设置标题和内容之间的间距。", "Set the size of the gap if the grid items stack.": "如果网格项目堆叠,则设置间距。", "Set the size of the row gap between multiple buttons.": "设置多个按钮之间的行间距。", "Set the size of the row gap between the numbers.": "设置数字之间行间距。", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "设定比率。建议使用相同比例的背景图像。只需使用它的宽度和高度,如<code>1600:900</code>。", "Set the starting point and limit the number of items.": "设置起点并限制项目数。", "Set the top margin if the image is aligned between the title and the content.": "如果图像在标题和内容之间对齐,请设置上边距。", "Set the top margin.": "设置上边距。", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "设置上边距。请注意,仅当内容字段紧跟在另一个内容字段后面时,才会应用边距。", "Set the velocity in pixels per millisecond.": "设置速度,以每毫秒像素为单位。", "Set the vertical container padding to position the overlay.": "设置垂直容器填充以定位叠加层。", "Set the vertical margin.": "设置垂直边距。", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "设置垂直边距。注意:始终删除第一个元素的上边距和最后一个元素的下边距。改为在网格设置中定义它们。", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "设置垂直边距。注意:始终删除第一个网格的上边距和最后一个网格的下边距。而是在片段设置中定义它们。", "Set the vertical padding.": "设置垂直填充。", "Set the video dimensions.": "设置视频尺寸。", "Set the width and height for the modal content, i.e. image, video or iframe.": "设置灯箱内容的宽度和高度,例如图像、视频或iframe。", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "设置宽度和高度(以像素为单位)(例如600)。仅设置一个值可保留原始比例。图像将自动调整大小并裁剪。", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "设置宽度和高度(以像素为单位)。仅设置一个值可保留原始比例。图像将自动调整大小并裁剪。", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "以像素为单位设置宽度,例如600。如果未设置宽度,则地图将采用整个宽度并保持高度。或者仅使用宽度来定义地图开始收缩的断点,从而保留纵横比。", "Sets": "集合", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "仅设置一个值,可保留原始比例。图像将自动调整大小并自动裁剪,并在可能的情况下自动生成高分辨率图像。", "Setting the Blog Content": "设置博客内容", "Setting the Blog Image": "设置博客图像", "Setting the Blog Layout": "设置博客布局", "Setting the Blog Navigation": "设置博客导航", "Setting the Header Layout": "设置页眉布局", "Setting the Minimum Stability": "设定最小稳定性", "Setting the Module Appearance Options": "设置模块外观选项", "Setting the Module Default Options": "设置模块默认选项", "Setting the Module Grid Options": "设置模块网格选项", "Setting the Module List Options": "设置模块列表选项", "Setting the Module Menu Options": "设置模块菜单选项", "Setting the Navbar": "设置导航栏", "Setting the Page Layout": "设置页面布局", "Setting the Post Content": "设置文章内容", "Setting the Post Image": "设置文章图像", "Setting the Post Layout": "设置文章布局", "Setting the Post Navigation": "设置文章导航", "Setting the Sidebar Area": "设置边栏区域", "Setting the Sidebar Position": "设置边栏位置", "Setting the Source Order and Direction": "设置来源顺序和方向", "Setting the Template Loading Priority": "设置模板加载优先级", "Setting the Template Status": "设置模板状态", "Setting the Top and Bottom Areas": "设置顶部和底部区域", "Setting the Top and Bottom Positions": "设置顶部和底部位置", "Setting the Widget Appearance Options": "设置小工具外观选项", "Setting the Widget Default Options": "设置小工具默认选项", "Setting the Widget Grid Options": "设置小工具网格选项", "Setting the Widget List Options": "设置小工具列表选项", "Setting the Widget Menu Options": "设置小工具菜单选项", "Settings": "设置", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "显示横幅以通知访问者您的网站正在使用Cookie。在加载cookie之前,选择加载cookie的简单通知或要求强制许可。", "Show a divider between grid columns.": "显示文本列之间的分隔符", "Show a divider between list columns.": "在列表列之间显示分隔线。", "Show a divider between text columns.": "在文本列之间显示分隔线。", "Show a separator between the numbers.": "在数字之间显示分隔符。", "Show archive category title": "显示存档类别标题", "Show author": "显示作者", "Show below slideshow": "显示以下幻灯片", "Show button": "显示按钮", "Show categories": "显示类别", "Show comment count": "显示评论计数", "Show comments count": "显示评论计数", "Show content": "显示内容", "Show Content": "显示内容", "Show controls": "显示控件", "Show current page": "显示当前页面", "Show date": "显示日期", "Show dividers": "显示分隔线", "Show drop cap": "显示首字下沉", "Show filter control for all items": "显示所有项目的过滤器控件", "Show home link": "显示首页链接", "Show hover effect if linked.": "如果有链接显示悬停效果。", "Show Labels": "显示标签", "Show link": "显示链接", "Show map controls": "显示地图控件", "Show name fields": "显示名称字段", "Show navigation": "显示导航", "Show on hover only": "仅在悬停时显示", "Show or hide content fields without the need to delete the content itself.": "显示或隐藏内容字段,而无需删除内容本身。", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "显示或隐藏此设备宽度及更大的元素。如果所有元素都隐藏,则列、行和片段将相应隐藏。", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "在面包屑导航中,将主页链接显示或隐藏为第一项,将当前页面显示或隐藏为最后一项。", "Show popup on load": "在加载时显示弹出窗口", "Show Separators": "显示分隔符", "Show space between links": "显示链接之间的空间", "Show Start/End links": "显示开始/结束链接", "Show system fields for single posts. This option does not apply to the blog.": "显示单个帖子的系统字段。此选项不适用于博客。", "Show system fields for the blog. This option does not apply to single posts.": "显示博客的系统字段。此选项不适用于单个帖子。", "Show tags": "显示标签", "Show Tags": "显示标签", "Show the content": "显示内容", "Show the excerpt in the blog overview instead of the post text.": "在博客概述中显示摘录而不是帖子文本。", "Show the image": "显示图像", "Show the link": "显示链接", "Show the menu text next to the icon": "显示图标旁边的菜单文本", "Show the meta text": "显示元文本", "Show the navigation label instead of title": "显示导航标签而不是标题", "Show the navigation thumbnail instead of the image": "显示导航缩略图而不是图像", "Show the title": "显示标题", "Show title": "显示标题", "Show Title": "显示标题", "Sidebar": "侧边栏", "Single Article": "单篇文章", "Single Contact": "个人名片", "Site": "网站", "Size": "尺寸", "Slide all visible items at once": "一次滑动所有可见项目", "Slidenav": "滑动导航", "Slider": "滑块", "Slideshow": "幻灯片", "Smart Search": "智能搜索", "Social": "社交", "Social Icons": "社交图标", "Social Icons Gap": "社交图标间距", "Social Icons Size": "社交图标大小", "Split the dropdown into columns.": "将下拉列表拆分为列。", "Spread": "传播", "Stack columns on small devices or enable overflow scroll for the container.": "在小型设备上堆叠列或为容器启用溢出滚动。", "Stacked Center A": "堆叠居中A", "Stacked Center B": "堆叠居中B", "Stacked Center C": "堆叠中心C", "Start": "开始", "Status": "状态", "Stretch the panel to match the height of the grid cell.": "拉伸面板以匹配网格单元的高度。", "Style": "样式", "Subnav": "子导航", "Subtitle": "子标题", "Support": "支持", "SVG Color": "SVG颜色", "Switcher": "切换器", "Syntax Highlighting": "语法突出显示", "System Assets": "系统资源", "System Check": "系统检查", "Table": "表格", "Table Head": "表头", "Tablet Landscape": "平板横屏", "Tags": "标签", "Target": "目标", "Templates": "模板", "Text": "文本", "Text Alignment": "文字对齐", "Text Alignment Breakpoint": "文本对齐断点", "Text Alignment Fallback": "文本对齐回退", "Text Color": "文本颜色", "Text Style": "文本样式", "The Area Element": "区域元素", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "顶部的栏将内容向下推,而底部的栏固定在内容上方。", "The builder is not available on this page. It can only be used on pages, posts and categories.": "编辑器在此页面上不可用。它只能用于页面、文章和类别。", "The changes you made will be lost if you navigate away from this page.": "如果您离开此页面,您所做的更改将会丢失。", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "高度将根据其内容自动调整。或者,高度可以适应视区的高度。 <br><br>注意:确保在使用其中一个视区选项时,在片段设置中未设置高度。", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "即使网格单元具有不同的高度,瀑布流效果也会产生无间隙的布局。 ", "The module maximum width.": "模块最大宽度。", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "该页面已由%modifiedBy%更新。放弃更改并重新加载?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "您当前正在编辑的页面已由%modified_by%更新。保存更改将覆盖以前的更改。您是想保存还是放弃更改并重新加载页面?", "The Position Element": "位置元素", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "RSFirewall插件会破坏构建器内容。在<a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall配置</a>中禁用<em>将电子邮件地址从纯文本转换为图像</em>功能。", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "SEBLOD插件导致编辑器不可用。禁用<a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD配置</a>中的功能<em>隐藏编辑图标</em>。", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "幻灯片放映始终占据整个宽度,高度将根据定义的比例自动调整。或者,高度可以适应视区的高度。 <br><br>注意:确保在使用其中一个视区选项时,在片段设置中未设置高度。", "The width of the grid column that contains the module.": "包含模块的网格列的宽度。", "The YOOtheme API key, which enables <span class=\"uk-text-nowrap\">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "缺少 YOOtheme API 密钥,该密钥可用于<span class=\"uk-text-nowrap\">一键式</span>更新和访问布局库。请在您的<a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">帐户设置</a>中创建 API 密钥。", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "YOOtheme Pro主题文件夹已重命名,这会破坏基本功能。将主题文件夹重命名为<code>yootheme</code>。", "Thirds": "三分", "Thirds 1-2": "三分 1-2", "Thirds 2-1": "三分 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "此文件夹存储使用YOOtheme Pro库中的布局时下载的图像。它位于Joomla图像文件夹内。", "This is only used, if the thumbnail navigation is set.": "设置了缩略图导航时,才使用此选项。", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "此布局包括需要下载到您网站的媒体库的媒体文件。 ||||此布局包含%smart_count%媒体文件,需要将其下载到您网站的媒体库。", "This option doesn't apply unless a URL has been added to the item.": "除非已将URL添加到项目,否则此选项不适用。", "This option is only used if the thumbnail navigation is set.": "设置了缩略图导航时,才使用此选项。", "Thumbnail Inline SVG": "缩略图内联SVG", "Thumbnail SVG Color": "缩略图SVG颜色", "Thumbnail Width/Height": "缩略图宽度/高度", "Thumbnail Wrap": "缩略图包裹", "Thumbnails": "缩略图", "Thumbnav Inline SVG": "缩略导航内联SVG", "Thumbnav SVG Color": "缩略导航SVG颜色", "Thumbnav Wrap": "缩略导航包裹", "Title": "标题", "title": "标题", "Title Decoration": "标题装饰", "Title Margin": "标题边距", "Title Parallax": "标题视差", "Title Style": "标题样式", "Title styles differ in font-size but may also come with a predefined color, size and font.": "标题样式的字体大小不同,但也可能带有预定义的颜色、大小和字体。", "Title Width": "标题宽度", "To Top": "返回顶部", "Toolbar": "工具栏", "Top": "顶部", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "顶部、底部、左侧或右侧对齐的图像可以附加到卡片的边缘。如果图像向左或向右对齐,它也将延伸以覆盖整个空间。", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "顶部、左侧或右侧对齐的图像可以附加到卡片的边缘。如果图像向左或向右对齐,它也将延伸以覆盖整个空间。", "Touch Icon": "触摸图标", "Transition": "过渡", "Transparent Header": "透明标题", "Type": "类型", "Updating YOOtheme Pro": "更新YOOtheme Pro", "Upload": "上传", "Upload a background image.": "上传背景图片。", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "上传可选背景图像覆盖页面。它将在滚动时固定。", "Upload Layout": "上传布局", "Upload Preset": "上传预设值", "Upload Style": "上传风格", "Use a numeric pagination or previous/next links to move between blog pages.": "使用数字分页或上一页/下一页链接导航博客页面。", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "使用可选最小高度,防止图像变得小于小型设备上的内容。", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "使用可选最小高度,防止滑块变得小于小型设备上的滑块。", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "使用可选最小高度,防止幻灯片变得小于小型设备上的幻灯片内容。", "Use as breakpoint only": "仅用作断点", "Use double opt-in.": "使用双重验证。", "Use excerpt": "使用摘录", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "如果图像未覆盖整个页面,请将背景颜色与混合模式、透明图像结合使用,或填充区域。", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "如果图像未覆盖整个片段,请将背景颜色与混合模式、透明图像结合使用,或填充区域。", "Use the background color in combination with blend modes.": "将背景颜色与混合模式结合使用。", "Users": "用户", "Using Advanced Custom Fields": "使用高级自定义字段", "Using Content Fields": "使用内容字段", "Using Content Sources": "使用内容来源", "Using Custom Fields": "使用自定义字段", "Using Custom Post Type UI": "使用自定义帖子类型界面", "Using Custom Post Types": "使用自定义帖子类型", "Using Custom Sources": "使用自定义来源", "Using Dynamic Conditions": "使用动态条件", "Using Images": "使用图像", "Using Links": "使用链接", "Using Menu Locations": "使用菜单定位", "Using Menu Positions": "使用菜单位置", "Using Module Positions": "使用模块位置", "Using Page Sources": "使用页面源", "Using Powerful Posts Per Page": "每页都使用强力文章", "Using Related Sources": "使用相关来源", "Using the Before and After Field Options": "使用前和后字段选项", "Using the Builder Module": "打开编辑器模块", "Using the Builder Widget": "打开编辑器小工具", "Using the Categories and Tags Field Options": "使用类别和标签字段选项", "Using the Content Field Options": "使用内容字段选项", "Using the Content Length Field Option": "使用内容长度字段选项", "Using the Contextual Help": "使用上下文帮助", "Using the Date Format Field Option": "使用日期格式字段选项", "Using the Device Preview Buttons": "使用设备预览按钮", "Using the Dropdown Menu": "使用下拉菜单", "Using the Footer Builder": "使用页脚编辑器", "Using the Media Manager": "使用媒体管理器", "Using the Menu Module": "使用菜单模块", "Using the Menu Widget": "使用菜单小工具", "Using the Meta Field Options": "使用元字段选项", "Using the Page Builder": "使用文章编辑器", "Using the Search and Replace Field Options": "使用搜索和替换字段选项", "Using the Sidebar": "使用边栏", "Using the Tags Field Options": "使用标签字段选项", "Using the Teaser Field Options": "使用预告片字段选项", "Using the Toolbar": "使用工具栏", "Using the Unsplash Library": "使用无启动库", "Using Toolset": "使用工具集", "Using Widget Areas": "使用小工具区域", "Using WordPress Category Order and Taxonomy Terms Order": "使用WordPress类别顺序和分类术语顺序", "Using WordPress Popular Posts": "使用WordPress热门帖子", "Value": "值", "Velocity": "速度", "Version %version%": "版本 %version%", "Vertical Alignment": "垂直对齐", "Vertical navigation": "垂直导航", "Vertically align the elements in the column.": "垂直对齐列中的元素。", "Vertically center grid items.": "垂直居中网格项。", "Vertically center table cells.": "垂直居中表格单元格。", "Vertically center the image.": "垂直居中图像。", "Vertically center the navigation and content.": "垂直居中导航和内容。", "Video": "视频", "Videos": "视频", "View Photos": "查看照片", "Viewport": "视区", "Visibility": "可见性", "Visible on this page": "在此页面上可见", "Visual": "视觉", "Website": "网站", "What's New": "新功能", "When using cover mode, you need to set the text color manually.": "使用封面模式时,需要手动设置文本颜色。", "Whole": "整个", "Widget": "小工具", "Widget Area": "小工具区", "Width": "宽度", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "如果图像是纵向或横向格式,则相应地翻转宽度和高度。", "Width/Height": "宽度/高度", "YOOtheme API Key": "YOOtheme API密钥", "YOOtheme Help": "YOOtheme帮助", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro已全面就绪并准备雄起。", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro无法使用。所有危急问题都需要修复。", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro可以运行,但是需要解决一些问题才能解锁功能并提高性能。", "Zoom": "缩放" }theme/languages/sk_SK.json000064400000117740151666572140011550 0ustar00{ "- Select -": "-vybrať-", "- Select Module -": "-vybrať modul-", "- Select Position -": "-vybrať pozíciu-", "- Select Widget -": "- vybrať widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" už existuje v knižnici, bude prepísaný po uložení.", "%email% is already a list member.": "%email% je už členom zoznamu.", "%email% was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%email% bol natrvalo odstránený a nie je možné ho znova importovať. Kontakt sa musí znova prihlásiť, aby sa mohol vrátiť do zoznamu.", "%label% Location": "%label% Poloha", "%label% Position": "%label% pozícia", "%name% already exists. Do you really want to rename?": "%name% už existuje. Naozaj ho chcete premenovať?", "%name% Copy": "%name% kopírovať", "%name% Copy %index%": "%name% kopírovať %index%", "%post_type% Archive": "Archív %post_type%", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% kolekcia|||| %smart_count% kolekcií", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% element |||| %smart_count% elementov", "%smart_count% File |||| %smart_count% Files": "%smart_count% súbor |||| %smart_count% súborov", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% vybraný súbor |||| %smart_count% vybraných súborov", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% ikona |||| %smart_count% ikony", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Rozloženie |||| %smart_count% Rozloženia", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% mediálny súbor sa nepodarilo stiahnuť: |||| %smart_count% mediálny súbor sa nepodarilo stiahnuť:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% fotografia |||| %smart_count% fotografií", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Prednastavenie |||| %smart_count% Prednastavenia", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% štýl |||| %smart_count% štýly", "%smart_count% User |||| %smart_count% Users": "%smart_count% užívateľ |||| %smart_count% užívateľov", "About": "O nás", "Add": "Pridať", "Add a colon": "Pridať dvojbodku", "Add a leader": "Pridať bodky (leader)", "Add a parallax effect.": "Pridať parallax efekt.", "Add bottom margin": "Pridať medzeru dole", "Add Element": "Pridať element", "Add Folder": "Pridať priečinok", "Add Item": "Pridať položku", "Add Menu Item": "Pridať novú položku menu", "Add Module": "Pridať modul", "Add Row": "Pridať riadok", "Add Section": "Pridať sekciu", "Add text after the content field.": "Pridať text za pole obsahu.", "Add text before the content field.": "Pridať text pred pole obsahu.", "Add top margin": "Pridať medzeru hore", "Additional Information": "Doplňujúce informácie", "Address": "Adresa", "Advanced": "Pokročilé", "After": "Po", "After Display Content": "Po zobrazení obsahu", "After Display Title": "Po zobrazení nadpisu", "Align image without padding": "Zarovnať obrázok bez padding-u", "Align the image to the left or right.": "Zarovnať obrázok doľava alebo doprava.", "Align the image to the top or place it between the title and the content.": "Zarovnať obrázok nahor alebo ho umiestniť medzi nadpis a obsah.", "Align the image to the top, left, right or place it between the title and the content.": "Zarovnať obrázok nahor, doľava, doprava alebo ho umiestniť medzi nadpis a obsah.", "Align the meta text.": "Zarovnanie meta textu.", "Align the navigation items.": "Zarovnanie položiek navigácie.", "Align the section content vertically, if the section height is larger than the content itself.": "Zarovnajte obsah sekcie vertikálne, pokiaľ je výška sekcie väčšia ako samotný obsah.", "Align the title and meta text.": "Zarovnanie nadpisu a meta textu.", "Align the title to the top or left in regards to the content.": "Zarovnať nadpis nahor alebo doľava v závislosti k obsahu.", "Alignment": "Zarovnanie", "All colors": "Všetky farby", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Všetky obrázky sú licencované v rámci <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>. To znamená, že ich môžete bez vyžiadania súhlasu kopírovať, upravovať, distribuovať a používať zadarmo, vrátane komerčných účelov.", "All Items": "Všetky položky", "All layouts": "Všetky rozloženia (layouts)", "All pages": "Všetky stránky", "All styles": "Všetky štýly", "All topics": "Všetky témy", "All types": "Všetky typy", "All websites": "Všetky stránky", "All-time": "Za celé obdobie", "Allow mixed image orientations": "Povoliť miešanie orientácie obrázkov", "Alphabetical": "Abecedne", "Animate background only": "Animovať iba pozadie", "Animate strokes": "Animovať ťahy (strokes)", "Animation": "Animácia", "Any Joomla module can be displayed in your custom layout.": "Vo vašom vlastnom rozložení je možné zobraziť akýkoľvek Joomla modul.", "Any WordPress widget can be displayed in your custom layout.": "Vo vašom vlastnom rozložení je možné zobraziť akýkoľvek WordPress widget.", "API Key": "API kľúč", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Aplikuje animáciu pre elementy, ktoré vstupujú na obrazovku. Animácie typu 'Slide' môžu byť použité s pevným odsadením alebo so 100% veľkosťou vlastných elementov.", "Assigning Modules to Specific Pages": "Priradenie modulov ku konkrétnym stránkam (pages).", "Assigning Templates to Pages": "Priradenie šablón k stránkam (pages)", "Assigning Widgets to Specific Pages": "Priradenie widgetov ku konkrétnym stránkam (pages).", "Attributes": "Atribúty", "Author": "Autor", "Author Link": "Link autora", "Auto-calculated": "Vypočítané automaticky", "Autoplay": "Automatické prehrávanie", "Average Daily Views": "Priemerné denné zobrazenia", "Back": "Späť", "Background Color": "Farba pozadia", "Base Style": "Základný štýl", "Basename": "Základný názov", "Before": "Pred", "Before Display Content": "Pred zobrazením obsahu", "Block Alignment": "Zarovnanie bloku", "Blur": "Rozmazanie (blur)", "Border": "Okraj", "Breadcrumbs": "Drobčeková navigácia", "Breadcrumbs Home Text": "Text domovskej stránky v drobčekovej navigácii.", "Breakpoint": "Zlom (breakpoint)", "Builder": "Staviteľ", "Button": "Tlačítko", "Button Size": "Veľkosť tlačítka", "Buttons": "Tlačítka", "Cache": "Vyrovnávacia pamäť", "Cancel": "Zrušiť", "Caption": "Popis", "Category": "Kategória", "Category Order": "Zoradenie kategórií", "Center": "Na stred", "Center columns": "Centrovať stĺpce", "Center horizontally": "Centrovať vodorovne", "Center rows": "Centrovať riadky", "Center the active slide": "Centrovať aktívny slide", "Center the content": "Centrovať obsah", "Center the module": "Centrovať modul", "Center the title and meta text": "Centrovať nadpis a meta text", "Center the title, meta text and button": "Centrovať nadpis, meta text a tlačítko", "Changelog": "Zoznam zmien", "Child Categories": "Vedľajšie kategórie", "Child Tags": "Vedľajšie značky", "Child Theme": "Vedľajšia téma", "Choose a divider style.": "Vyberte štýl oddeľovača.", "Choose a map type.": "Vybrať typ mapy.", "Choose between an attached bar or a notification.": "Vyberte medzi pripnutým panelom alebo notifikáciou.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Vyberte medzi predchádzajúca/ďalšia alebo číselným stránkovaním. Číselné stránkovanie nie je dostupné pre samostatné články (articles).", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Vyberte medzi predchádzajúca/ďalšia alebo číselným stránkovaním. Číselné stránkovanie nie je dostupné pre samostatné príspevky (posts).", "Choose Font": "Vybrať písmo", "Choose the icon position.": "Vyberte umiestnenie ikony.", "Class": "Trieda (class)", "Classes": "Triedy (classes)", "Clear Cache": "Vyčistiť vyrovnávaciu pamäť", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Vymažte obrázky a záznamy uložené vo vyrovnávacej pamäti. Obrázky, ktoré je potrebné zmenšiť, sa ukladajú do priečinka vyrovnávacej pamäte šablóny. Po nahratí obrázka s rovnakým menom budete musieť vyčistiť vyrovnávaciu pamäť.", "Close": "Zavrieť", "Cluster Icon (< 10 Markers)": "Ikona klastra (< 10 značiek)", "Cluster Icon (< 100 Markers)": "Ikona klastra (< 100 značiek)", "Cluster Icon (100+ Markers)": "Ikona klastra (100+ značiek)", "Clustering": "Klastrovanie", "Code": "Kód", "Collections": "Kolekcie", "Color": "Farba", "Column": "Stĺpec", "Column 1": "Stĺpec 1", "Column 2": "Stĺpec 2", "Column 3": "Stĺpec 3", "Column 4": "Stĺpec 4", "Column 5": "Stĺpec 5", "Column Gap": "Medzera medzi stĺpcami", "Columns": "Stĺpce", "Comment Count": "Počet komentárov", "Comments": "Komentáre", "Components": "Komponenty", "Condition": "Podmienka", "Contact": "Kontakt", "Container Width": "Šírka kontajnera", "Content": "Obsah", "content": "obsah", "Content Alignment": "Zarovnanie obsahu", "Content Length": "Dĺžka obsahu", "Content Width": "Šírka obsahu", "Controls": "Ovládacie prvky", "Cookie Banner": "Baner s cookies", "Copy": "Kopírovať", "Critical Issues": "Kritické chyby", "Critical issues detected.": "Našli sa kritické chyby.", "Curated by <a href>%user%</a>": "Upravil <a href>%user%</a>", "Current Layout": "Aktuálne rozloženie", "Current Style": "Aktuálny štýl", "Current User": "Aktuálny úžívateľ", "Custom %post_type%": "Vlastný %post_type%", "Custom %post_types%": "Vlastné %post_types%", "Custom %taxonomies%": "Vlastné %taxonomies%", "Custom %taxonomy%": "Vlastná %taxonomy%", "Custom Article": "Vlastný článok", "Custom Articles": "Vlastné články", "Custom Categories": "Vlastné kategórie", "Custom Category": "Vlastná kategória", "Custom Code": "Vlastný kód", "Custom Tag": "Vlastná značka", "Custom Tags": "Vlastné značky", "Custom User": "Vlastný užívateľ", "Custom Users": "Vlastný užívatelia", "Customization": "Prispôsobenie", "Date": "Dátum", "Date Format": "Formát dátumu", "Decoration": "Dekorácia", "Default": "Predvolený", "Define a name to easily identify this element inside the builder.": "Zadajte meno pre lepšiu identifikáciu elementu v staviteľovi.", "Define a unique identifier for the element.": "Zadajte unikátny identifikátor pre element.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Definujte jeden alebo viacero atribútov pre element. Meno a hodnotu oddeľte znakom <code>=</code>. Jeden atribút na jeden riadok.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Zadajte jednu alebo viac tried pre element. Viaceré triedy oddeľte medzerou.", "Define the alignment of the last table column.": "Definujte zarovnanie posledného stĺpca tabuľky.", "Define the device width from which the alignment will apply.": "Definujte šírku zariadenia, pre ktorú sa bude aplikovať zarovnanie.", "Define the device width from which the max-width will apply.": "Definujte šírku zariadenia, pre ktorú sa bude aplikovať hodnota max-wiidth.", "Define the order of the table cells.": "Definujte zoradenie buniek tabuľky.", "Define the title position within the section.": "Definujte pozíciou nadpisu v sekcii.", "Define the width of the content cell.": "Definujte šírku buniek obsahu.", "Delete": "Vymazať", "Descending": "Zostupne", "Description": "Popis", "Disable element": "Zakázať element", "Disable Emojis": "Zakázať Emoji", "Disable item": "Zakázať položku", "Disable row": "Zakázať riadok", "Disable section": "Zakázať sekciu", "Disable wpautop": "Zakázať wpautop", "Disabled": "Zakázané", "Discard": "Zahodiť", "Display": "Zobraziť", "Display header outside the container": "Zobraziť hlavičku (header) mimo kontajnera", "Display icons as buttons": "Zobraziť ikony ako tlačítka", "Display on the right": "Zobraziť vpravo", "Display the breadcrumb navigation": "Zobraziť drobčekovú navigáciu", "Display the section title on the defined screen size and larger.": "Zobrazte nadpis sekcie na vybranej veľkosti obrazovky a väčšej.", "Displaying the Breadcrumbs": "Zobraziť drobčekovú navigáciu", "Displaying the Excerpt": "Zobraziť úryvok", "Divider": "Oddeľovač", "Do you really want to replace the current layout?": "Naozaj chcete nahradiť aktuálne rozloženie?", "Documentation": "Dokumentácia", "Download": "Stiahnuť", "Download All": "Stiahnuť všetko", "Download Less": "Stiahnuť Less", "Dropdown": "Rozbaľovací zoznam (dropdown)", "Dynamic Condition": "Dynamická podmienka", "Dynamic Content": "Dynamický obsah", "Edit": "Upraviť", "Edit Items": "Upraviť položky", "Edit Layout": "Upraviť rozloženie", "Edit Menu Item": "Upraviť položku menu", "Edit Module": "Upraviť modul", "Edit Settings": "Upraviť nastavenia", "Edit Template": "Upraviť šablónu", "Enable autoplay": "Povoliť automatické prehrávanie", "Enable click mode on text items": "Zapnúť režim kliknutia pre textové položky", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Zadajte zoznam značiek (tags) oddelený čiarkou, napríklad <code>blue, white, black</code>.", "Enter a decorative section title which is aligned to the section edge.": "Zadajte ilustračný nadpis sekcie, ktorý bude zarovnaný k jej okraju.", "Enter a subtitle that will be displayed beneath the nav item.": "Zadajte podnadpis, ktorý sa zobrazí pod položkou navigácie.", "Enter labels for the countdown time.": "Zadajte popisy pre časy odpočítavania.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Zadajte odkazy na vaše profily na sociálnych sieťach. Ikony z <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">frameworku UIkit</a> budú zobrazené automaticky, ak sú dostupné. Odkazy na e-mailové adresy a telefónne čísla, ako napríklad mailto:info@example.com alebo tel:+491570156, sú takisto podporované.", "Enter or pick a link, an image or a video file.": "Zadajte alebo vyberte odkaz, obrázok alebo video.", "Enter the author name.": "Zadajte meno autora.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Zadajte správu o súhlase s používaním súborov cookies. Predvolený text slúži iba ako ilustrácia. Upravte ho podľa platných zákonov o cookies vo vašej krajine.", "Enter the text for the button.": "Zadajte text tlačítka.", "Enter the text for the home link.": "Zadajte text odkazu na domovskú stránku.", "Enter the text for the link.": "Zadajte text odkazu.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Zadajte vaše ID <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> pre zapnutie sledovania. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">Anonymizácia IP adresy</a> môže znížiť presnosť sledovania.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Zadajte váš API kľúč pre <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Mapy Google</a>, ak ich chcete používať namiesto OpenStreetMap. Umožní vám to takisto ďalšie možnosti, ako napr. úprava farby mapy.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Zadajte váš API kľúč pre <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> pre jeho použitie v elemente Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Zadajte vaše vlastné CSS. Pre tento element budú automaticky priradené nasledujúce selektory: <code>.el-section</code>", "Error": "Chyba", "Error 404": "Chyba 404", "Error creating folder.": "Chyba pri vytváraní priečinku.", "Error deleting item.": "Chyba pri odstraňovaní položky.", "Error renaming item.": "Chyba pri premenovaní položky.", "Error: %error%": "Chyba: %error%", "Excerpt": "Úryvok", "Expand One Side": "Rozšírenie jednej strany", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Rozšírte šírku jednej strany naľavo alebo napravo, zatiaľ čo druhá strana je zarovnaná k nastavenej maximálnej šírke.", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Exportujte všetky nastavenia šablóny a importujte ich do inej inštalácie. Toto nezahŕňa obsah z rozložení (layout), knižnice štýlov, knižnice elementov a zo staviteľa šablón.", "Export Settings": "Exportovať nastavenia", "Extension": "Rozšírenie", "External Services": "Externé služby", "Fields": "Polia", "Fifths": "Pätiny", "Fifths 1-1-1-2": "Pätiny 1-1-1-2", "Fifths 1-1-3": "Pätiny 1-1-3", "Fifths 1-3-1": "Pätiny 1-3-1", "Fifths 1-4": "Pätiny 1-4", "Fifths 2-1-1-1": "Pätiny 2-1-1-1", "Fifths 2-3": "Pätiny 2-3", "Fifths 3-1-1": "Pätiny 3-1-1", "Fifths 3-2": "Pätiny 3-2", "Fifths 4-1": "Pätiny 4-1", "File": "Súbor", "Files": "Súbory", "Filter by Categories": "Filtrovať podľa kategórií", "Filter by Tags": "Filtrovať podľa značiek", "First name": "Krstné meno", "First page": "Prvá strana", "Folder created.": "Priečinok bol vytvorený.", "Folder Name": "Meno priečinka.", "Font Family": "Rodina písiem", "Force a light or dark color for text, buttons and controls on the image or video background.": "Môžete vynútiť svetlú alebo tmavú farbu textu, tlačidiel a ovládacích prvkov na pozadí s obrázkom alebo videom.", "Format": "Formát", "Full width button": "Tlačítko na celú šírku", "Gallery": "Galéria", "General": "Všeobecné", "Google Fonts": "Písma Google", "Google Maps": "Mapy Google", "Gradient": "Prechod (gradient)", "Header": "Hlavička (header)", "Height": "Výška", "Home": "Úvod", "Home Text": "Text hlavnej stránky", "HTML Element": "HTML element", "Hue": "Odtieň (hue)", "Icon": "Ikona", "Icon Color": "Farba ikony", "Icon Width": "Šírka ikony", "Ignore %taxonomy%": "Ignorovať %taxonomy%", "Image": "Obrázok", "Image Alignment": "Zarovnanie obrázka", "Image Height": "Výška obrázka", "Image Orientation": "Orientácia obrázka", "Image Position": "Pozícia obrázka", "Image Size": "Veľkosť obrázka", "Image Width": "Šírka obrázka", "Image Width/Height": "Šírka/výška obrázka", "Image/Video": "Obrázok/video", "Import Settings": "Importovať nastavenia", "Inherit transparency from header": "Aplikovať priehľadnosť z hlavičky (header)", "Intro Image": "Úvodný obrázok", "Intro Text": "Úvodný text", "Inverse Logo (Optional)": "Inverzné logo (voliteľné)", "IP Anonymization": "Anonymizácia IP", "Item": "Položka", "Item Count": "Počet položiek", "Item deleted.": "Položka bola vymazaná.", "Item renamed.": "Položka bola premenovaná.", "Item Width": "Šírka položky", "Items": "Položky", "Ken Burns Effect": "Ken Burns efekt", "Last Modified": "Posledná úprava", "Layout": "Rozloženie (layout)", "Left": "Vľavo", "Library": "Knižnica", "Link": "Odkaz", "link": "odkaz", "Link card": "Pridať odkaz na celú kartu", "Link Style": "Štýl odkazu", "Link Target": "Cieľ odkazu", "List": "Zoznam", "List Style": "Štýl zoznamu", "Load jQuery": "Načítať jQuery", "Location": "Poloha", "Logo Image": "Obrázok loga", "Logo Text": "Text loga", "Loop video": "Prehrávať video ako slučku", "Managing Templates": "Spravovať šablóny", "Map": "Mapa", "Max Height": "Maximálna výška", "Max Width": "Maximálna šírka", "Max Width (Alignment)": "Maximálna šírka (zarovnanie)", "Menu Style": "Štýl menu", "Message": "Správa", "Message shown to the user after submit.": "Správa sa zobrazí užívateľovi po odoslaní.", "Min Height": "Minimálna výška", "Minimum Stability": "Minimálna stabilita", "Mobile": "Mobil", "Mobile Logo (Optional)": "Logo pre mobily (voliteľné)", "Mode": "Mód", "Module": "Modul", "Modules": "Moduly", "Mute video": "Stlmiť video", "Name": "Meno", "Navbar": "Navigácia (navbar)", "Navbar Style": "Štýl navigácie (navbar)", "Navigation": "Navigácia", "New Module": "Nový modul", "Next-Gen Images": "Obrázky novej generácie", "No critical issues found.": "Nenašli sa žiadne kritické problémy.", "No icons found.": "Nenašli sa žiadne ikony.", "No Results": "Žiadne výsledky", "No results.": "Žiadne výsledky.", "Offcanvas Mode": "Mód offcanvas-u", "Only available for Google Maps.": "K dispozícii iba pre Mapy Google.", "Open in a new window": "Otvoriť v novom okne", "Open Templates": "Otvoriť šablóny", "Open the link in a new window": "Otvoriť odkaz v novom okne", "Options": "Možnosti", "Order": "Usporiadanie", "Overlap the following section": "Prekryť nasledujúcu sekciu", "Pagination": "Stránkovanie", "Panels": "Panely", "Photos": "Fotky", "Pick %type%": "Vybrať %type%", "Pick file": "Vybrať súbor", "Pick icon": "Vybrať ikonu", "Pick link": "Vybrať odkaz", "Pick media": "Vybrať súbor", "Pick video": "Vybrať video", "Position": "Pozícia", "Post": "Príspevok (post)", "Preserve text color": "Zachovať farbu text", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Zachovajte farbu textu, napríklad ak používate karty (cards). Prekrytie nepodporujú všetky štýly a nemusí mať žiadny vizuálny efekt.", "Preview all UI components": "Zobraziť všetky komponenty používateľského rozhrania", "Pull content behind header": "Podsunúť obsah pod navigáciu (navbar)", "Quantity": "Množstvo", "Quarters": "Štvrtiny", "Quarters 1-1-2": "Štvrtiny 1-1-2", "Quarters 1-2-1": "Štvrtiny 1-2-1", "Quarters 1-3": "Štvrtiny 1-3", "Quarters 2-1-1": "Štvrtiny 2-1-1", "Quarters 3-1": "Štvrtiny 3-1", "Quotation": "Citát", "Ratio": "Pomer", "Recompile style": "Prekompilovať štýl", "Remove horizontal padding": "Odstrániť vodorovné medzery (padding)", "Remove left logo padding": "Odstrániť ľavý okraj loga", "Rename %type%": "Premenovať %type%", "Reset to defaults": "Vrátiť na predvolené", "Rotate the title 90 degrees clockwise or counterclockwise.": "Otočiť nadpis o 90 stupňov v smere alebo proti smeru hodinových ručičiek.", "Rotation": "Rotácia", "Row": "Riadok", "Row Gap": "Medzera medzi riadkami", "Run Time": "Dĺžka trvania", "Saturation": "Saturácia (saturation)", "Save": "Uložiť", "Save %type%": "Uložiť %type%", "Save in Library": "Uložiť do knižnice", "Save Layout": "Uložiť rozloženie", "Save Template": "Uložiť šablónu", "Search": "Vyhľadávanie", "Search Style": "Štýl vyhľadávania", "Section": "Sekcia", "Section/Row": "Sekcia/riadok", "Select %type%": "Vybrať %type%", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Vyberte zdroj obsahu pre sprístupnenie jeho polí na mapovanie. Vyberte medzi zdrojmi z aktuálnej stránky alebo vlastným zdrojom.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Vyberte súbor s videom alebo zadajte odkaz z <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> alebo <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Vyberte alternatívne logo s inverznými farbami, napr. biele pre lepšie zobrazenie na tmavom pozadí. Bude zobrazené automaticky, keď to bude potrebné.", "Select an alternative logo, which will be used on small devices.": "Vyberte alternatívne logo, ktoré bude zobrazené na mobilných zariadeniach.", "Select the icon color.": "Vyberte farbu ikoniek.", "Select the navbar style.": "Vyberte štýl navigácie (navbar).", "Select the position that will display the search.": "Vyberte pozíciu, kde sa zobrazí vyhľadávanie.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Vyberte pozíciu, kde sa zobrazia ikony sociálnych sietí. Nezabudnite pridať odkazy na sociálny siete. Inak sa nezobrazia žiadne ikony.", "Select the search style.": "Vyberte štýl vyhľadávania.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Vyberte štýl pre zvýraznenie kódu (syntax). Použite GitHub pre svetlé a Monokai pre tmavé pozadie.", "Select the text color.": "Vybrať farbu textu.", "Serve WebP images": "Použiť obrázky vo formáte WebP", "Set the icon width.": "Zadajte šírku ikony.", "Set the maximum content width.": "Vyberte maximálnu šírku obsahu.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Vyberte maximálnu šírku obsahu. Upozornenie: Sekcia už môže mať nastavenú maximálnu šírku, ktorú nemôžete prekročiť.", "Set the maximum header width.": "Vyberte maximálnu šírku hlavičky (header).", "Set the size of the gap between the social icons.": "Vyberte veľkosť medzery medzi ikonami sociálnych sietí.", "Setting the Minimum Stability": "Nastavenie minimálnej stability", "Settings": "Nastavenia", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Zobrazte banner a informujte svojich návštevníkov o používbaní súborov cookies na vašom webe. Vyberte medzi jednoduchým oznámením o načítaní súborov cookies alebo pred načítaním súborov cookies vyžadujte povinný súhlas.", "Show author": "Zobraziť autora", "Show button": "Zobraziť tlačítko", "Show categories": "Zobraziť kategórie", "Show comments count": "Zobraziť počet komentárov", "Show content": "Zobraziť obsah", "Show Content": "Zobraziť obsah", "Show current page": "Zobraziť aktuálnu stránku", "Show date": "Zobraziť dátum", "Show dividers": "Zobraziť oddeľovače", "Show home link": "Zobraziť odkaz na domovskú stránku", "Show navigation": "Zobraziť navigáciu", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Zobraziť alebo skryť odkaz na domovskú stránku ako prvú položku ako aj aktuálnu stránku ako poslednú položku drobčekovej navigácie.", "Show tags": "Zobraziť značky", "Show the content": "Zobraziť obsah", "Show the image": "Zobraziť obrázok", "Show the link": "Zobraziť odkaz", "Show the menu text next to the icon": "Zobraziť text 'Menu' vedľa ikony mobilného menu.", "Site": "Stránka", "Size": "Veľkosť", "Social Icons": "Sociálne siete", "Social Icons Gap": "Medzera medzi ikonami sociálnych sietí", "Social Icons Size": "Veľkosť ikon sociálnych sietí", "Style": "Štýl", "Support": "Podpora", "Syntax Highlighting": "Zvýraznenie kódu (syntax)", "System Check": "Kontrola systému", "Table": "Tabuľka", "Table Head": "Hlavička tabuľky", "Target": "Cieľ", "Text Alignment": "Zarovnanie textu", "Text Color": "Farba textu", "Text Style": "Štýl textu", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "Panel umiestnený hore posunie obsah nižšie, panel umiestnený dole je nad obsahom", "The module maximum width.": "Maximálna šírka modulov.", "Theme Settings": "Nastavenia šablóny", "Title": "Nadpis", "Toolbar": "Panel nástrojov (toolbar)", "Touch Icon": "Touch ikona", "Transparent Header": "Priehľadná hlavička (header)", "Type": "Typ", "Upload": "Nahrať", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Voliteľne nahrajte obrázok, ktorý bude použitý na pozadí. Pri skrolovaní bude pevne ukotvený (fixed).", "Upload Layout": "Nahrať rozloženie", "Users": "Užívatelia", "Version %version%": "Verzia %version%", "Vertical Alignment": "Vertikálne zarovnanie", "Videos": "Videá", "Visibility": "Viditeľnosť", "Visible on this page": "Viditeľné na tejto stránke", "Width": "Šírka", "Width/Height": "Šírka/výška", "YOOtheme API Key": "API kľúč YOOtheme", "YOOtheme Help": "Nápoveda YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro je plne pripravené na použitie.", "Z Index": "Z index", "Zoom": "Priblíženie" }theme/languages/es_ES.json000064400000613641151666572140011535 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Seleccione -", "- Select Module -": "- Seleccionar Módulo -", "- Select Position -": "- Seleccionar Posición -", "- Select Widget -": "- Seleccionar widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" ya existe en la biblioteca, se sobrescribirá al guardar.", "(ID %id%)": "(ID %id%)", "%element% Element": "Elemento %element%", "%label% - %group%": "%label% - %group%", "%label% Position": "Posición %label%", "%name% already exists. Do you really want to rename?": "El %name% ya existe. ¿De verdad quieres cambiar el nombre?", "%post_type% Archive": "%post_type% Archivo", "%s is already a list member.": "%s ya es miembro de la lista.", "%s of %s": "%s de %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s se eliminó permanentemente y no se puede volver a importar. El contacto debe volver a suscribirse para volver a estar en la lista.", "%smart_count% Collection |||| %smart_count% Collections": "Colección %smart_count% |||| Colecciones %smart_count%", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Elemento |||| %smart_count% Elementos", "%smart_count% File |||| %smart_count% Files": "%smart_count% Archivo |||| %smart_count% Archivos", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Archivo seleccionado |||| %smart_count% Archivos seleccionados", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Icono |||| %smart_count% Iconos", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Diseño |||| %smart_count% Diseños", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% la descarga del archivo multimedia falló: |||| %smart_count% la descarga de los archivos multimedia falló:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Fotografia |||| %smart_count% Fotografias", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Preajuste|||| %smart_count% Preajustes", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Estilo |||| %smart_count% Estilos", "%smart_count% User |||| %smart_count% Users": "%smart_count% Usuario |||| %smart_count% Usuarios", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% solo se cargan desde el padre seleccionado %taxonomy%.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% preajustes", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 columna", "1 Column Content Width": "Ancho de contenido de 1 columna", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Column Grid": "Cuadrícula de 2 columnas", "2 Column Grid (Meta only)": "Cuadrícula de 2 columnas (solo Meta)", "2 Columns": "2 columnas", "20%": "20%", "25%": "25%", "2X-Large": "2X-Grande", "3 Columns": "3 columnas", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3rd Party Integration": "Integración con terceros", "3X-Large": "3X-Grande", "4 Columns": "4 columnas", "40%": "40%", "5 Columns": "5 columnas", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 columnas", "6 Columns": "6 columnas", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "About": "Acerca de", "Above Content": "Por encima del contenido", "Above Title": "Por encima del título", "Absolute": "Absoluto", "Accessed": "Accedido", "Accessed Date": "Fecha de Acceso", "Accordion": "Acordeón", "Active": "Activo", "Active Filters": "Filtros Activos", "Active Filters Count": "Conteo de Filtros Activos", "Active item": "Elemento activo", "Add": "Añadir", "Add a colon": "Añadir dos puntos", "Add a comma-separated list of font weights to load, e.g. 300, 400, 600. Look up available variants at <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.": "Agregue una lista de grosor de fuentes separadas por coma, por ejemplo: 300, 400, 600. Puede consultar las variables disponibles en <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.", "Add a leader": "Añada un líder", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Añada un efecto de paralaje o fijar el fondo con respecto a la ventana de visualización mientras se desplaza.", "Add a parallax effect.": "Agregue efecto de paralaje.", "Add a stepless parallax animation based on the scroll position.": "Agregue una animación de paralaje sin pasos basado en la posición de la barra de desplazamiento.", "Add animation stop": "Agregar parada de animación", "Add bottom margin": "Añadir margen inferior", "Add clipping offset": "Agregar desplazamiento de recorte", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Agregue CSS personalizado o Menos a su sitio. Todas las variables y mixins del tema Less están disponibles. La etiqueta <code><style></code> no es necesaria.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Agregue JavaScript personalizado a su sitio. La etiqueta <code><script></code> no es necesaria.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Agregue JavaScript personalizado que establece cookies. Se cargará después de que se dé el consentimiento. La etiqueta <code><script></code> no es necesaria.", "Add Element": "Añadir Elemento", "Add extra margin to the button.": "Añadir margen adicional al botón.", "Add Folder": "Añadir Carpeta", "Add Item": "Añadir Artículo", "Add margin between": "Añadir margen entre", "Add Media": "Añadir Media", "Add Menu Item": "Agregar elemento de menú", "Add Module": "Añadir Módulo", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Agregue varias paradas para definir los colores inicial, intermedio y final a lo largo de la secuencia de animación. Opcionalmente, especifique el porcentaje para colocar las paradas a lo largo de la secuencia de animación.", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Agregue varias paradas para definir la opacidad inicial, intermedia y final a lo largo de la secuencia de animación. Opcionalmente, especifique el porcentaje para colocar las paradas a lo largo de la secuencia de animación.", "Add Row": "Añadir Fila", "Add Section": "Añadir Sección", "Add text after the content field.": "Agregue texto después del campo de contenido.", "Add text before the content field.": "Agregue texto antes del campo de contenido.", "Add to Cart": "Añadir al carrito", "Add to Cart Link": "Añadir al carrito Enlace", "Add to Cart Text": "Agregar al carrito de texto", "Add top margin": "Añade margen superior", "Adding the Logo": "Agregar el logotipo", "Adding the Search": "Agregar la búsqueda", "Adding the Social Icons": "Agregar los iconos sociales", "Additional Information": "Información adicional", "Address": "Habla a", "Advanced": "Avanzado", "Advanced WooCommerce Integration": "Integración avanzada de WooCommerce", "After": "Despues", "After 1 Item": "Después de 1 artículo", "After 10 Items": "Después de 10 artículos", "After 2 Items": "Después de 2 artículos", "After 3 Items": "Después de 3 artículos", "After 4 Items": "Después de 4 artículos", "After 5 Items": "Después de 5 artículos", "After 6 Items": "Después de 6 artículos", "After 7 Items": "Después de 7 artículos", "After 8 Items": "Después de 8 artículos", "After 9 Items": "Después de 9 artículos", "After Display Content": "Después de mostrar contenido", "After Display Title": "Después del título de visualización", "After Submit": "Después del envio", "Alert": "Alerta", "Alias": "Apodo", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Alinee los menús desplegables con su elemento de menú o la barra de navegación. Opcionalmente, muéstrelos en una sección de ancho completo llamada barra desplegable, muestre un ícono para indicar los menús desplegables y permita que los elementos de texto se abran con un clic y sin pasar el mouse.", "Align image without padding": "Alinear imagen sin margen de relleno", "Align the filter controls.": "Alinee los controles del filtro.", "Align the image to the left or right.": "Alinear imagen a la izquierda o a la derecha.", "Align the image to the top or place it between the title and the content.": "Alinear imagen en la parte superior, o colóquela entre el título y el contenido.", "Align the image to the top, left, right or place it between the title and the content.": "Alinear imagen en la parte superior, izquierda, derecha o colóquela entre el título y el contenido.", "Align the meta text.": "Alinea el meta texto.", "Align the navigation items.": "Después del título de visualización.", "Align the section content vertically, if the section height is larger than the content itself.": "Alinee el contenido de la sección verticalmente, si la altura de la sección es mayor que el contenido en sí.", "Align the title and meta text as well as the continue reading button.": "Alinear el título y el meta texto así como el botón de continuar leyendo.", "Align the title and meta text.": "Alinear el título y el meta texto.", "Align the title to the top or left in regards to the content.": "Alinee el título en la parte superior o izquierda con respecto al contenido.", "Align to navbar": "Alinear a la barra de navegación", "Alignment": "Alineación", "Alignment Breakpoint": "Punto de ruptura de alineación", "Alignment Fallback": "Respaldo de alineación", "All backgrounds": "Todos los fondos", "All colors": "Todos los colores", "All except first page": "Todos excepto la primera página", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Todas las imágenes están bajo licencia <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, lo que significa que puede copiar, modificar, distribuir y utilizar las imágenes de forma gratuita, incluidos los fines comerciales, sin solicitar permiso.", "All Items": "Todos los elementos", "All layouts": "Todas los diseños", "All pages": "Todas las páginas", "All presets": "Todos los ajustes preestablecidos", "All styles": "Todos los estilos", "All topics": "Todos los temas", "All types": "Todos los tipos", "All websites": "Todos los sitios web", "All-time": "Todo el tiempo", "Allow mixed image orientations": "Permitir orientaciones de imágenes mixtas", "Allow multiple open items": "Permitir varios elementos abiertos", "Alphabetical": "Alfabético", "Alphanumeric Ordering": "Orden alfanumérico", "Alt": "Alternativa", "Alternate": "Alterno", "Always": "Siempre", "Animate background only": "Animar solo el fondo", "Animate items": "Animar elementos", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animar propiedades a valores específicos. Agregue múltiples paradas para definir valores de inicio, intermedios y finales a lo largo de la secuencia de animación para cada propiedad. Opcionalmente, especifique el porcentaje para colocar las paradas a lo largo de la secuencia de animación. La traducción y la escala pueden tener unidades opcionales <code>%</code>, <code>vw</code> y <code>vh</code>.", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animar propiedades a valores específicos. Agregue múltiples paradas para definir valores de inicio, intermedios y finales a lo largo de la secuencia de animación. Opcionalmente, especifique el porcentaje para colocar las paradas a lo largo de la secuencia de animación. Translate puede tener unidades opcionales <code>%</code>, <code>vw</code> and <code>vh</code>.", "Animate strokes": "Animar trazos", "Animation": "Animación", "Animation Delay": "Retraso de animación", "Animations": "animaciones", "Any": "Alguna", "Any Joomla module can be displayed in your custom layout.": "Cualquier módulo de Joomla se puede mostrar en su diseño personalizado.", "Any WordPress widget can be displayed in your custom layout.": "Cualquier widget de WordPress se puede mostrar en su diseño personalizado.", "API Key": "LLave API", "Apply a margin between the navigation and the slideshow container.": "Aplicar margen entre la navegación y el contenedor del slideshow.", "Apply a margin between the overlay and the image container.": "Aplique un margen entre la superposición y el contenedor de imágenes.", "Apply a margin between the slidenav and the slider container.": "Aplicar margen entre el navegador (slidenav) y el contenedor (slider container) de diapositivas.", "Apply a margin between the slidenav and the slideshow container.": "Aplicar margen entre el navegador (slidenav) y el contenedor de diapositivas (slideshow container).", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Aplicar animación a los elementos una vez se visualizan. La animación del desplazamiento puede ser con un valor fijo o al 100% de su tamaño.", "Are you sure?": "¿Está seguro?", "ARIA Label": "Etiqueta ARIA", "Article": "Artículo", "Article Count": "Número de artículos", "Article Order": "Orden de artículos", "Articles": "Artículos", "As notification only ": "Solo como notificación ", "Ascending": "Ascendente", "Assigning Modules to Specific Pages": "Asignación de módulos a páginas específicas", "Assigning Templates to Pages": "Asignación de plantillas a páginas", "Assigning Widgets to Specific Pages": "Asignación de widgets a páginas específicas", "Attach the image to the drop's edge.": "Adjunte la imagen al borde de la gota.", "Attention! Page has been updated.": "¡Atención! La página ha sido actualizada.", "Attribute Slug": "Slug de atributos", "Attribute Terms": "Términos de atributos", "Attribute Terms Operator": "Operador de términos de atributos", "Attributes": "Atributos", "Aug 6, 1999 (M j, Y)": "Aug 6, 1999 (M j, Y)", "August 06, 1999 (F d, Y)": "August 06, 1999 (F d, Y)", "Author": "Autor", "Author Archive": "archivo de autor", "Author Link": "Enlace al Autor", "Auto": "Auto", "Auto-calculated": "Calculado automáticamente", "Autoplay": "Auto-reproducción", "Avatar": "Avatar", "Average Daily Views": "Vistas diarias promedio", "b": "b", "Back": "Atrás", "Back to top": "Volver arriba", "Background": "Fondo", "Background Color": "Color del Fondo", "Background Image": "Fondo", "Badge": "Insignia", "Bar": "Barra", "Base Style": "Estilo base", "Basename": "Nombre de base", "Before": "Antes", "Before Display Content": "Antes de mostrar contenido", "Behavior": "Comportamiento", "Below Content": "Debajo del contenido", "Below Title": "Debajo del título", "Beta": "Beta", "Between": "Entre", "Blank": "Blanco", "Blend": "Fusionar", "Blend Mode": "Modo de mezcla", "Blend the element with the page content.": "Fusionar con el contenido de la página.", "Blend with page content": "Fusionar con el contenido de la página", "Block Alignment": "Alineación del bloque", "Block Alignment Breakpoint": "Punto de ruptura de la alineación del bloque", "Block Alignment Fallback": "Respaldo de alineación de bloque", "Blog": "Blog", "Blur": "Difuminar", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrap solo es necesario cuando se cargan archivos de plantilla de Joomla predeterminados, por ejemplo, para la edición del frontend de Joomla. Cargue jQuery para escribir código personalizado basado en la biblioteca jQuery JavaScript.", "Border": "Borde", "Bottom": "Abajo", "Bottom Center": "Parte inferior central", "Bottom Left": "Abajo a la izquierda", "Bottom Right": "Abajo a la derecha", "Box Decoration": "Decoración de la caja", "Box Shadow": "Sombra de caja", "Boxed": "en caja", "Brackets": "Soportes", "Breadcrumbs": "Ruta", "Breadcrumbs Home Text": "Texto de inicio de Ruta", "Breakpoint": "Punto de Ruptura", "Builder": "Constructor", "Bullet": "Bala", "Button": "Botón", "Button Danger": "Botón de peligro", "Button Default": "Botón predeterminado", "Button Margin": "Margen del Botón", "Button Primary": "Botón principal", "Button Secondary": "Botón secundario", "Button Size": "Tamaño del Botón", "Button Text": "Button Texto", "Buttons": "Botones", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Por defecto, los campos de fuentes relacionadas con elementos individuales están disponibles para la asignación. Seleccione una fuente relacionada que tenga varios elementos para asignar sus campos.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "De forma predeterminada, las imágenes se cargan de forma diferida. Habilite la carga ansiosa de imágenes en la ventana gráfica inicial.", "Cache": "Submemoria (Cache)", "Campaign Monitor API Token": "Token de API de Campaign Monitor", "Cancel": "Cancelar", "Caption": "Subtítulo", "Card Default": "Tarjeta por defecto", "Card Hover": "Tarjeta con efecto \"encima\"", "Card Primary": "Trajeta Principal", "Card Secondary": "Tarjeta Secundaria", "Cart": "Carrito", "Cart Cross-sells Columns": "Columnas de venta cruzada del carrito", "Cart Quantity": "Cantidad en carrito", "Categories": "Categorías", "Categories are only loaded from the selected parent category.": "Las categorías solo se cargan desde la categoría principal seleccionada.", "Categories Operator": "Categorías Operador", "Category": "Categoría", "Category Blog": "Blog de categoría", "Category Order": "Orden de categoría", "Center": "Centrar", "Center Center": "centro centro", "Center columns": "Centrar columnas", "Center grid columns horizontally and rows vertically.": "Centrar las columnas de la cuadrícula horizontalmente y las filas verticalmente.", "Center horizontally": "Centrar horizontalmente", "Center Left": "centro izquierda", "Center Right": "Centro Derecha", "Center rows": "Centrar Filas", "Center the active slide": "Centrar la diapositiva activa", "Center the content": "Centrar el contenido", "Center the module": "Centrar el Módulo", "Center the title and meta text": "Centrar el título y el meta texto", "Center the title, meta text and button": "Centrar el título, el meta texto y el botón", "Center the widget": "Centrar el widget", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "La alineación centrada, izquierda y derecha pueden depender de un punto de ruptura y requieren un respaldo.", "Changed": "Cambiado", "Changelog": "Registro de cambios", "Checkout": "Verificar", "Checkout Page": "Página de pago", "Child %taxonomies%": "%taxonomies% del hijo", "Child Categories": "Categorías de niños", "Child Menu Items": "Elementos del menú secundario", "Child Tags": "Etiquetas hijas", "Child Theme": "Tema hijo", "Choose a divider style.": "Elija un estilo de divisor.", "Choose a map type.": "Elija un tipo de mapa.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Elija entre una paralaje (parallax) según la posición de desplazamiento o una animación, que se aplica una vez que la diapositiva está activa.", "Choose between a vertical or horizontal list.": "Elija entre una lista vertical u horizontal.", "Choose between an attached bar or a notification.": "Elige entre una barra adjunta o una notificación.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Elija entre la paginación anterior / siguiente o numérica. La paginación numérica no está disponible para artículos individuales.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Elija entre la paginación anterior / siguiente o numérica. La paginación numérica no está disponible para publicaciones individuales.", "Choose Font": "Elija fuente", "Choose products of the current page or query custom products.": "Elige productos de la página actual o consulta productos personalizados.", "Choose the icon position.": "Elija la posición del icono.", "Choose the page to which the template is assigned.": "Elija la página a la que se asigna la plantilla.", "Circle": "Círculo", "City or Suburb": "Ciudad o suburbio", "Class": "Clase", "Classes": "Clases", "Clear Cache": "Limpiar la Memoria (cache)", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Borrar las imágenes y los recursos almacenados en (la memoria) caché. Las imágenes que necesitan ser cambiadas de tamaño se almacenan en la carpeta de caché del tema. Después de volver a cargar una imagen con el mismo nombre, tendrá que borrar la (memoria) caché.", "Click": "Hacer clic", "Click on the pencil to pick an icon from the icon library.": "Haz clic en el lápiz para seleccionar un icono de la galería SVG.", "Close": "Cerrar", "Close Icon": "Cerrar icono", "Cluster Icon (< 10 Markers)": "Icono de grupo (<10 marcadores)", "Cluster Icon (< 100 Markers)": "Icono de grupo (<100 marcadores)", "Cluster Icon (100+ Markers)": "Icono de grupo (100+ marcadores)", "Clustering": "Agrupar", "Code": "Código", "Collapsing Layouts": "Diseños colapsados", "Collections": "Colecciones", "Color": "Color", "Color-burn": "Color Quemado", "Color-dodge": "Esquivar color", "Column": "Columna", "Column 1": "Columna 1", "Column 2": "Columna 2", "Column 3": "Columna 3", "Column 4": "Columna 4", "Column 5": "Columna 5", "Column 6": "columna 6", "Column Gap": "Espacio entre columnas", "Column Height": "Altura de la columna", "Column Layout": "Diseño de columna", "Column Parallax": "Columna Parallax", "Column within Row": "Columna dentro de Fila", "Column within Section": "Columna dentro de la sección", "Columns": "Columnas", "Columns Breakpoint": "Punto de ruptura de las Columnas", "Comment Count": "Recuento de comentarios", "Comments": "Comentarios", "Components": "Componentes", "Condition": "Condición", "Consent Button Style": "Estilo del Botón de Consentimiento", "Consent Button Text": "Texto del Botón de Consentimiento", "Contact": "Contacto", "Contacts Position": "Posición de los contactos", "Contain": "Contener", "Container Default": "Predeterminado del contenedor", "Container Large": "Contenedor Grande", "Container Padding": "Acolchado del contenedor", "Container Small": "Contenedor Pequeño", "Container Width": "Ancho del contenedor", "Container X-Large": "Contenedor extragrande", "Contains": "Contiene", "Contains %element% Element": "Contiene %element% Elemento", "Contains %title%": "Contiene %title%", "Content": "Contenido", "content": "contenido", "Content Alignment": "Alineación del Contenido", "Content Length": "Longitud del Contenido", "Content Margin": "Margen del Contenido", "Content Parallax": "Contenido del Parallax", "Content Type Title": "Título del tipo de contenido", "Content Width": "Ancho del contenido", "Controls": "Controles", "Convert": "Convertir", "Convert to title-case": "Convertir a mayúsculas y minúsculas", "Cookie Banner": "Letrero de \"Cookies\"", "Cookie Scripts": "Scripts de \"cookies\"", "Coordinates": "Coordenadas", "Copy": "Copiar", "Countdown": "Cuenta atrás", "Country": "País", "Cover": "Cubrir", "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.": "Cree un diseño de masonry sin espacios si los elementos de la cuadrícula tienen diferentes alturas. Empaque los elementos en columnas con la mayor cantidad de espacio o muéstrelos en su orden natural. Opcionalmente, use una animación de paralaje para mover columnas mientras se desplaza hasta que se justifiquen en la parte inferior.", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Cree un diseño general para este tipo de página. Comience con un nuevo diseño y elija entre una colección de elementos listos para usar o explore la biblioteca de diseños y comience con uno de los diseños preconstruidos.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Cree un diseño para la sección de pie de página de todas las páginas. Comience con un nuevo diseño y elija entre una colección de elementos listos para usar o explore la biblioteca de diseños y comience con uno de los diseños preconstruidos.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Cree un diseño para el elemento de menú desplegable. Comience con un nuevo diseño y elija entre una colección de elementos listos para usar o explore la biblioteca de diseños y comience con uno de los diseños prediseñados.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Cree un diseño para la sección de pie de página de todas las páginas. Comience con un nuevo diseño y elija entre una colección de elementos listos para usar o explore la biblioteca de diseños y comience con uno de los diseños preconstruidos.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Cree un diseño para este widget y publíquelo en el área superior o inferior. Comience con un nuevo diseño y elija entre una colección de elementos listos para usar o explore la biblioteca de diseños y comience con uno de los diseños preconstruidos.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crea un diseño. Comience con un nuevo diseño y elija entre una colección de elementos listos para usar o explore la biblioteca de diseños y comience con uno de los diseños prediseñados.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crear un diseño individual para la página actual. Comience con un nuevo diseño y elija entre una colección de elementos listos para usar o explore la biblioteca de diseños y comience con uno de los diseños preconstruidos.", "Create site-wide templates for pages and load their content dynamically into the layout.": "Cree plantillas para páginas para todo el sitio y cargue su contenido dinámicamente en el diseño.", "Created": "Creado", "Creating a New Module": "Crear un nuevo módulo", "Creating a New Widget": "Crear un nuevo widget", "Creating Accordion Menus": "Crear menús de acordeón", "Creating Advanced Module Layouts": "Crear diseños de módulos avanzados", "Creating Advanced Widget Layouts": "Crear diseños de widgets avanzados", "Creating Advanced WooCommerce Layouts": "Creación de diseños avanzados de WooCommerce", "Creating Menu Dividers": "Crear divisores de menú", "Creating Menu Heading": "Crear encabezado de menú", "Creating Menu Headings": "Creación de títulos de menú", "Creating Menu Text Items": "Creación de elementos de texto del menú", "Creating Navbar Text Items": "Creación de elementos de texto de la barra de navegación", "Creating Parallax Effects": "Creación de efectos de paralaje", "Creating Sticky Parallax Effects": "Creación de efectos de paralaje pegajosos", "Critical Issues": "Problemas críticos", "Critical issues detected.": "Se han detectado problemas críticos.", "Cross-Sell Products": "Productos de venta cruzada", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "Curado por <a href>%user%</a>", "Current Layout": "Diseño actual", "Current Style": "Estilo actual", "Current User": "Usuario actual", "Custom": "Personalizado", "Custom %post_type%": "%post_type% Personalizado", "Custom %post_types%": "%post_types% personalizado", "Custom %taxonomies%": "%taxonomies% Personalizadas", "Custom %taxonomy%": "%taxonomy% personalizada", "Custom Article": "Artículo personalizado", "Custom Articles": "Artículos personalizados", "Custom Categories": "Categorías personalizadas", "Custom Category": "Categoría personalizada", "Custom Code": "Código personalizado", "Custom Fields": "Campos Personalizados", "Custom Menu Item": "Elemento de menú personalizado", "Custom Menu Items": "Elementos de menú personalizados", "Custom Query": "Consulta personalizada", "Custom Tag": "Etiqueta personalizada", "Custom Tags": "Etiquetas personalizadas", "Custom User": "Usuario personalizado", "Custom Users": "Usuarios personalizados", "Customization": "Personalización", "Customization Name": "Personalización del Nombre", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Personalice los anchos de columna del diseño seleccionado y establezca el orden de las columnas. Cambiar el diseño restablecerá todas las personalizaciones.", "Danger": "Peligro", "Dark": "Oscuro", "Dark Text": "Texto Oscuro", "Darken": "Oscurecido", "Date": "Fecha", "Date Archive": "Archivo de fecha", "Date Format": "Formato de Fecha", "Day Archive": "Archivo del día", "Decimal": "Decimal", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Decora el titular con un divisor, un punto decorativo o una línea que está centrada verticalmente al encabezado.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Decora el título con un divisor, un punto decorativo o una línea que está centrada verticalmente al encabezado.", "Decoration": "Decoración", "Default": "Por defecto", "Default Link": "Enlace predeterminado", "Define a background style or an image of a column and set the vertical alignment for its content.": "Defina un estilo de fondo o una imagen de una columna y establezca la alineación vertical de su contenido.", "Define a custom background color or a color parallax animation instead of using a predefined style.": "Defina un color de fondo personalizado o una animación parallax de color en lugar de utilizar un estilo predefinido.", "Define a name to easily identify the template.": "Defina un nombre para identificar fácilmente la plantilla.", "Define a name to easily identify this element inside the builder.": "Defina un nombre para identificar fácilmente este elemento dentro del constructor.", "Define a navigation menu or give it no semantic meaning.": "Defina un menú de navegación o no le dé ningún significado semántico.", "Define a unique identifier for the element.": "Defina un identificador único para el elemento.", "Define an alignment fallback for device widths below the breakpoint.": "Defina disposición de alineación de anchos por debajo de los puntos de corte establecidos.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Defina uno o más atributos para el elemento. Separe el nombre y el valor del atributo mediante el carácter <code>=</code>. Un atributo por línea.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Defina uno a más nombres de clase para el elemento. Separe múltiples clases con espacios.", "Define the alignment in case the container exceeds the element max-width.": "Defina la alineación en caso de exceder el ancho máximo del contenedor.", "Define the alignment of the last table column.": "Defina la alineación de la última columna de la tabla.", "Define the device width from which the alignment will apply.": "Defina el ancho del dispositivo para el que se aplicará esta alineación.", "Define the device width from which the max-width will apply.": "Defina el ancho del dispositivo desde el cual se aplicará el ancho máximo.", "Define the image quality in percent for generated JPG images and when converting JPEG and PNG to next-gen image formats.<br><br>Mind that setting the image quality too high will have a negative impact on page loading times.<br><br>Press the Clear Cache button in the advanced settings after changing the image quality.": "Defina la calidad de la imagen en porcentaje para las imágenes JPG generadas y al convertir JPEG y PNG a formatos de imagen de next-gen.<br><br>Tenga en cuenta que establecer una calidad de imagen demasiado alta tendrá un impacto negativo en los tiempos de carga de la página.<br> <br>Presione el botón Borrar caché en la configuración avanzada después de cambiar la calidad de la imagen.", "Define the layout of the form.": "Defina el diseño del formulario.", "Define the layout of the title, meta and content.": "Defina el diseño del título, la metaetiqueta y el contenido.", "Define the order of the table cells.": "Define el orden de las celdas de la tabla.", "Define the origin of the element's transformation when scaling or rotating the element.": "Defina el origen de la transformación del elemento al escalar o rotar el elemento.", "Define the padding between items.": "Defina el acolchado entre elementos.", "Define the padding between table rows.": "Defina el relleno entre las filas de la tabla.", "Define the purpose and structure of the content or give it no semantic meaning.": "Define el propósito y la estructura del contenido o no darle ningún significado semántico.", "Define the title position within the section.": "Defina la posición del título dentro de la sección.", "Define the width of the content cell.": "Defina el ancho de la celda de contenido.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Defina el ancho del navegador del filtro. Elija entre el porcentaje y el ancho fijo o expanda las columnas al ancho de su contenido.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Defina el ancho de la imagen dentro de la cuadrícula. Elija entre porcentaje y anchos fijos o ampliar columnas a la anchura de su contenido.", "Define the width of the meta cell.": "Defina el ancho de la meta celda.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Defina el ancho de la navegación. Elija entre porcentaje y anchos fijos o expanda columnas al ancho de su contenido.", "Define the width of the title cell.": "Defina el ancho de la celda de título.", "Define the width of the title within the grid.": "Defina el ancho del título dentro de la cuadrícula.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Define el ancho del título dentro de la cuadrícula. Elija entre porcentajes y anchos fijos o expanda columnas al ancho de su contenido.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Defina si el ancho de los elementos del control deslizante es fijo o se expande automáticamente por su ancho de contenido.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Defina si las miniaturas se ajustan en varias líneas o no en caso de que el contenedor sea demasiado pequeño.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Retrasa las animaciones de los elementos en milisegundos, por ejemplo, <code>200</code>.", "Delayed Fade": "Desvanecimiento retardado", "Delete": "Borrar", "Delete animation stop": "Eliminar parada de animación", "Descending": "Descendente", "description": "descripción", "Description": "Descripción", "Description List": "Lista Descriptiva", "Desktop": "Escritorio", "Determine how the image or video will blend with the background color.": "Determine cómo se fusionará la imagen o el video con el color de fondo.", "Determine how the image will blend with the background color.": "Determine cómo se combinará la imagen con el color de fondo.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Determine si la imagen se ajustará a las dimensiones de la página recortándola o rellenando las áreas vacías con el color de fondo.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Determine si la imagen se ajustará a las dimensiones de la sección cortándola o rellenando las áreas vacías con el color de fondo.", "Dialog End": "Fin de diálogo", "Dialog Layout": "Diseño de diálogo", "Dialog Logo (Optional)": "Logotipo de diálogo (opcional)", "Dialog Push Items": "Elementos de inserción de diálogo", "Dialog Start": "Inicio de diálogo", "Dialog Toggle": "Alternar diálogo", "Difference": "Diferencia", "Direction": "Dirección", "Dirname": "Nombre de directorio", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Desactive la reproducción automática, inicie la reproducción automática inmediatamente o tan pronto como el vídeo aparezca en la zona de visión de la pantalla.", "Disable element": "Deshabilitar elemento", "Disable Emojis": "Desactiva Emojis", "Disable infinite scrolling": "Deshabilita el desplazamiento infinito", "Disable item": "Deshabilitar artículo", "Disable row": "Deshabilitar fila", "Disable section": "Deshabilitar sección", "Disable template": "Deshabilitar plantilla", "Disable the <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filter for the_content and the_excerpt and disable conversion of Emoji characters to images.": "Deshabilite el filtro <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> para the_content y the_excerpt y deshabilite la conversión de caracteres Emoji en imágenes.", "Disable the element and publish it later.": "Deshabilite el elemento y publíquelo más tarde.", "Disable the item and publish it later.": "Deshabilite el elemento y publíquelo más tarde.", "Disable the row and publish it later.": "Deshabilite la fila y publíquela más tarde.", "Disable the section and publish it later.": "Deshabilite la sección y publíquela más tarde.", "Disable the template and publish it later.": "Deshabilite la plantilla y publíquela más tarde.", "Disable wpautop": "Deshabilitar wpautop", "Disabled": "Deshabilitado", "Disc": "Disco", "Discard": "Descartar", "Display": "Mostrar", "Display a divider between sidebar and content": "Mostrar un divisor entre la barra lateral y el contenido", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Muestra un menú seleccionando la posición en la que debería aparecer. Por ejemplo, publique el menú principal en la posición de la barra de navegación y un menú alternativo en la posición móvil.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Muestra un icono de búsqueda a la izquierda o a la derecha. Se puede hacer clic en el icono de la derecha para enviar la búsqueda.", "Display header outside the container": "Mostrar encabezado fuera del contenedor", "Display icons as buttons": "Mostrar iconos como botones", "Display on the right": "Mostrar a la Derecha", "Display overlay on hover": "Mostrar la superposición flotando", "Display products based on visibility.": "Mostrar productos en función de la visibilidad.", "Display the breadcrumb navigation": "Mostrar la ruta de navegación", "Display the cart quantity in brackets or as a badge.": "Muestre la cantidad del carrito entre paréntesis o como una insignia.", "Display the content inside the overlay, as the lightbox caption or both.": "Despliega el contenido dentro de la superposición, como el título de la lightbox o ambos.", "Display the content inside the panel, as the lightbox caption or both.": "Despliega el contenido dentro del panel, como el título de la lightbox o ambos.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Muestre el campo de extracto si tiene contenido, de lo contrario, el contenido. Para usar un campo de extracto, cree un campo personalizado con el nombre extracto.", "Display the excerpt field if it has content, otherwise the intro text.": "Muestre el campo de extracto si tiene contenido, de lo contrario, el texto de introducción.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Muestre el campo de extracto si tiene contenido; de lo contrario, el texto de introducción. Para utilizar un campo de extracto, cree un campo personalizado con el nombre extracto.", "Display the first letter of the paragraph as a large initial.": "Muestra la primera letra del párrafo como una inicial grande.", "Display the image only on this device width and larger.": "Muestra la imagen sólo en este ancho de dispositivo o mayores.", "Display the image or video only on this device width and larger.": "Muestra la imagen o el video solo en el ancho de este dispositivo y más grande.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Muestre los controles del mapa y defina si el mapa puede ser ampliado o arrastrado usando la rueda del ratón o tactílmente (en pantallas que lo permitan).", "Display the meta text in a sentence or a horizontal list.": "Mostrar el meta texto en una frase o en una lista horizontal.", "Display the module only from this device width and larger.": "Muestra el módulo sólo en este ancho de dispositivo y mayores.", "Display the navigation only on this device width and larger.": "Mostrar la navegación solo en este ancho de dispositivo y largo.", "Display the parallax effect only on this device width and larger.": "Visualizar el efecto parallax sólo en esta anchura del dispositivo y más grande.", "Display the popover on click or hover.": "Mostrar el efecto popover (acercarse) al clicar o pasar el cursor por encima.", "Display the section title on the defined screen size and larger.": "Muestra el título de la sección en el tamaño de pantalla definido y más grande.", "Display the short or long description.": "Muestra la descripción corta o larga.", "Display the slidenav only on this device width and larger.": "Mostrar el elemento sólo en este ancho dispositivo o superiores.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Muestre la navegación deslizante sólo en este ancho dispositivo o superiores. Fuera solo en el ancho de este dispositivo y más grande. De lo contrario, muéstrelo adentro.", "Display the title in the same line as the content.": "Muestre el título en la misma línea que el contenido.", "Display the title inside the overlay, as the lightbox caption or both.": "Despliega el título dentro de la plantilla, como el título de la lightbox o ambos.", "Display the title inside the panel, as the lightbox caption or both.": "Despliega el título dentro del panel, como el título de la lightbox o ambos.", "Display the widget only from this device width and larger.": "Muestre el widget solo desde el ancho de este dispositivo y más grande.", "Displaying the Breadcrumbs": "Visualización de las migas de pan", "Displaying the Excerpt": "Visualización del extracto", "Displaying the Mobile Header": "Visualización del encabezado móvil", "div": "división", "Divider": "Divisor", "Do you really want to replace the current layout?": "¿Realmente quiere reemplazar el diseño actual?", "Do you really want to replace the current style?": "¿Realmente quiere reemplazar el estilo actual?", "Documentation": "Documentación", "Does not contain": "No contiene", "Does not end with": "No termina con", "Does not start with": "No comienza con", "Don't collapse column": "No colapsa la columna", "Don't collapse the column if dynamically loaded content is empty.": "No colapsa la columna si el contenido cargado dinámicamente está vacío.", "Don't expand": "No expandir", "Don't match author (NOR)": "No coincida autor (NOR)", "Don't wrap into multiple lines": "No envuelva en múltiples líneas", "Dotnav": "Puntonav", "Double opt-in": "Doble opt-in", "Download": "Descargar", "Download All": "Descargar todo", "Download Less": "Descargar Less", "Draft new page": "Nueva página borrador", "Drop Cap": "Letra Capital", "Dropbar Animation": "Animación de la Barra Desplegable", "Dropbar Center": "Centro de Barra Desplegable", "Dropbar Content Width": "Ancho del Contenido de la Barra Desplegable", "Dropbar Top": "Barra Desplegable Superior", "Dropbar Width": "Ancho de la Barra Desplegable", "Dropdown": "Desplegable", "Dropdown Alignment": "Alineación desplegable", "Dropdown Columns": "Columnas desplegables", "Dropdown Nav Style": "Estilo de Navegación Desplegable", "Dropdown Padding": "Relleno desplegable", "Dropdown Stretch": "Estiramiento Desplegable", "Dropdown Width": "Ancho desplegable", "Dropnav": "Dropnav", "Dynamic": "Dinámico", "Dynamic Condition": "Condición dinámica", "Dynamic Content": "Contenido dinámico", "Dynamic Content (Parent Source)": "Contenido Dinámico (Fuente Principal)", "Dynamic Multiplication": "Multiplicación Dinámica", "Dynamic Multiplication (Parent Source)": "Multiplicación Dinámica (Fuente Principal)", "Easing": "Facilitando", "Edit": "Editar", "Edit %title% %index%": "Editar %title% %index%", "Edit Article": "Editar Artículo", "Edit Image Quality": "Editar Calidad de Imagen", "Edit Item": "Editar Elemento", "Edit Items": "Editar Elementos", "Edit Layout": "Editar diseño", "Edit Menu Item": "Editar Elemento de Menu", "Edit Module": "Editar Módulo", "Edit Parallax": "Editar Parallax", "Edit Settings": "Editar Ajustes", "Edit Template": "Editar plantilla", "Element": "Elemento", "Elements within Column": "Elementos Dentro de la Columna", "Email": "Correo Electrónico", "Emphasis": "Énfasis", "Empty Dynamic Content": "Contenido Dinámico Vacío", "Enable a navigation to move to the previous or next post.": "Habilitar navegación para pasar a la publicación anterior o siguiente.", "Enable active state": "Habilitar estado activo", "Enable autoplay": "Activar Reproducción automática", "Enable click mode on text items": "Habilitar el modo de clic en elementos de texto", "Enable drop cap": "Activar Letra Capital", "Enable dropbar": "Habilitar barra desplegable", "Enable filter navigation": "Habilitar filtro de navegación", "Enable lightbox gallery": "Activar galería lightbox", "Enable map dragging": "Habilitar arrastrar mapa", "Enable map zooming": "Habilitar el zoom del mapa", "Enable marker clustering": "Habilitar la agrupación de marcadores", "Enable masonry effect": "Habilitar efecto de mosaico", "Enable the pagination.": "Habilite la paginación.", "End": "Final", "Ends with": "Termina con", "Enter %s% preview mode": "Ingrese al modo de vista previa de %s%", "Enter a comma-separated list of tags to manually order the filter navigation.": "Ingrese una lista de etiquetas separadas por comas para ordenar manualmente la navegación del filtro.", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Introduza las etiquetas separados por comas, por ejemplo, <code>blue, white, black</code>.", "Enter a date for the countdown to expire.": "Ingrese una fecha para que expire la cuenta regresiva.", "Enter a decorative section title which is aligned to the section edge.": "Introduzca un título de sección decorativa que esté alineado con el borde de la sección.", "Enter a descriptive text label to make it accessible if the link has no visible text.": "Ingrese una etiqueta de texto descriptivo para que sea accesible si el enlace no tiene texto visible.", "Enter a subtitle that will be displayed beneath the nav item.": "Introduzca un subtítulo que se mostrará debajo del elemento de navegación.", "Enter a table header text for the content column.": "Ingrese un texto de encabezado de tabla para la columna de contenido.", "Enter a table header text for the image column.": "Ingrese un texto de encabezado de tabla para la columna de la imagen.", "Enter a table header text for the link column.": "Ingrese un texto de encabezado de tabla para la columna de enlace.", "Enter a table header text for the meta column.": "Ingrese un texto de encabezado de tabla para la columna meta .", "Enter a table header text for the title column.": "Ingrese un texto de encabezado de tabla para la columna del título.", "Enter a width for the popover in pixels.": "Ingrese un ancho para la ventana emergente en píxeles.", "Enter an optional footer text.": "Introduzca un texto de pie de página opcional.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Introduzca un texto opcional para el atributo de título del enlace, que se mostrará al posicionarse sobre el.", "Enter labels for the countdown time.": "Introduzca las etiquetas para el marcador de la cuenta atrás.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Ingrese el enlace a su perfil social. El <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\"> icono de la marca UIkit </a> correspondiente se mostrará automáticamente, si está disponible. También se admiten enlaces a direcciones de correo electrónico y números de teléfono, como mailto: info@example.com o tel: +491570156.", "Enter or pick a link, an image or a video file.": "Ingrese o elija un enlace, una imagen o un archivo de video.", "Enter the API key in Settings > External Services.": "Ingrese la clave API en Configuración > Servicios externos.", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Ingrese la clave API para habilitar las actualizaciones con 1 clic para YOOtheme Pro y para acceder a la biblioteca de diseño, así como a la biblioteca de imágenes Unsplash. Puede crear una clave de API para este sitio web en la <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\"> configuración de la cuenta </a> .", "Enter the author name.": "Introduzca el nombre del autor.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Introduzca el mensaje de consentimiento para las \"cookies\". El texto predeterminado sirve como ilustración. Por favor ajústelo según las leyes de \"cookies\" de su país.", "Enter the horizontal position of the marker in percent.": "Ingrese la posición horizontal del marcador en porcentaje.", "Enter the image alt attribute.": "Introduzca el atributo alt de la imagen.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Ingrese la cadena de reemplazo que puede contener referencias. Si se deja en blanco, se eliminarán las coincidencias de búsqueda.", "Enter the text for the button.": "Introduzca el texto para el botón.", "Enter the text for the home link.": "Ingrese el texto del enlace de inicio.", "Enter the text for the link.": "Introduzca el texto para el enlace.", "Enter the vertical position of the marker in percent.": "Ingrese la posición vertical del marcador en porcentaje.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Ingrese su <a href=\"https://developers.google.com/analytics/\" target=\"_blank\"> ID de Google Analytics </a> ppara habilitar el seguimiento. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">una IP anónima</a>puede reducir la precisión del seguimiento.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Ingresa la <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\"> clave de la API de Google Maps </a> para usar Google Maps en lugar de OpenStreetMap. Al hacerlo también activará opciones adicionales del mapa, como poder modificar los colores, o luminosidad de tus mapas.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Ingrese su clave API <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> para usarla con el elemento Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores tendrán el prefijo automático para este elemento: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores tendrán prefijos automáticamente para este elemento: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code> .el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores tendrán el prefijo automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores tendrán el prefijo automático para este elemento: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores se prefijarán automáticamente para este elemento: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores tendrán prefijos automáticamente para este elemento: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code> .el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el -contenido</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores se prefijarán automáticamente para este elemento: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores se prefijarán automáticamente para este elemento: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores se prefijarán automáticamente para este elemento: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Ingrese su propio CSS personalizado. Los siguientes selectores serán prefijados automáticamente para este elemento: <code>.el-section</code>", "Error": "Error", "Error 404": "Error 404", "Error creating folder.": "Error al crear la carpeta.", "Error deleting item.": "Error al eliminar el elemento.", "Error renaming item.": "Error al cambiar el nombre del elemento.", "Error: %error%": "Error: %error%", "Events": "Eventos", "Excerpt": "Extracto", "Exclude child %taxonomies%": "Excluir subtaxonomías %taxonomies%", "Exclude child categories": "Excluir subcategorías", "Exclude child tags": "Excluir subetiquetas", "Exclude cross sell products": "Excluir productos de venta cruzada", "Exclude upsell products": "Excluir productos de venta adicional", "Exclusion": "Exclusión", "Expand": "Expandir", "Expand columns equally to always fill remaining space within the row, center them or align them to the left.": "Expanda las columnas por igual para llenar siempre el espacio restante dentro de la fila, céntrelas o alinéelas a la izquierda.", "Expand content": "Expandir contenido", "Expand height": "Expandir altura", "Expand One Side": "Expandir Un Lado", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Expandir el ancho de un lado a la izquierda o a la derecha mientras el otro lado se mantiene dentro de las restricciones del ancho máximo.", "Expand width to table cell": "Expandir el ancho a la celda de la tabla", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Exporte todas las configuraciones del tema e impórtelas en otra instalación. Esto no incluye el contenido de las bibliotecas de diseño, estilo y elementos o el generador de plantillas.", "Export Settings": "Exportar configuración", "Extend all content items to the same height.": "Extender todos lo elementos de contenido a la misma altura.", "Extension": "Extensión", "External": "Externo", "External Services": "Servicios Externos", "Extra Margin": "Margen Extra", "Fade": "Desvanecer", "Failed loading map": "Fall al cargar el mapa", "Favicon": "Favicon (icono de favoritos)", "Favicon PNG": "icono de favoritos PNG", "Favicon SVG": "Favicón SVG", "Fax": "Fax", "Featured": "Presentado", "Featured Articles": "Artículos destacados", "Featured Articles Order": "Orden de artículos destacados", "Featured Image": "Foto principal", "Fields": "Campos", "Fifths": "Quintos", "Fifths 1-1-1-2": "Quintos 1-1-1-2", "Fifths 1-1-3": "Quintos 1-1-3", "Fifths 1-3-1": "Quintos 1-3-1", "Fifths 1-4": "Quintos 1-4", "Fifths 2-1-1-1": "Quintos 2-1-1-1", "Fifths 2-3": "Quintos 2-3", "Fifths 3-1-1": "Quintos 3-1-1", "Fifths 3-2": "Quintos 3-2", "Fifths 4-1": "Quintos 4-1", "File": "Archivo", "Files": "Archivos", "Filter": "Filtro", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtra %post_types% por autores. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varios autores. Configure el operador lógico para que coincida o no con los autores seleccionados.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Filtre %post_types% por términos. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varios términos. Configure el operador lógico para que coincida con al menos uno de los términos, ninguno de los términos o todos los términos.", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtrar artículos por autores. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varios autores. Configure el operador lógico para que coincida o no con los autores seleccionados.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Filtra artículos por categorías. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varias categorías. Configure el operador lógico para que coincida o no con las categorías seleccionadas.", "Filter articles by featured status. Load all articles, featured articles only, or articles which are not featured.": "Filtra artículos por estado destacado. Cargue todos los artículos, solo los artículos destacados o los artículos que no están destacados.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Filtrar artículos por etiquetas. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varias etiquetas. Configure el operador lógico para que coincida con al menos una de las etiquetas, ninguna de las etiquetas o todas las etiquetas.", "Filter by Authors": "Filtrar por Autores", "Filter by Categories": "Filtrar por Categorías", "Filter by Featured Articles": "Filtrar por artículos destacados", "Filter by Post Types": "Filtrar por tipo de publicación", "Filter by Tags": "Filtrar por Etiquetas", "Filter by Term": "Filtrar por Término", "Filter by Terms": "Filtrar por Términos", "Filter products by attribute using the attribute slug.": "Filtre los productos por atributo usando el atributo slug.", "Filter products by categories using a comma-separated list of category slugs.": "Filtre los productos por categorías utilizando una lista separada por comas de slugs de categoría.", "Filter products by tags using a comma-separated list of tag slugs.": "Filtra productos por etiquetas usando una lista separada por comas de slugs de etiquetas.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "Filtre productos por términos del atributo elegido utilizando una lista separada por comas de slugs de términos de atributos.", "Filter products using a comma-separated list of IDs.": "Filtre productos utilizando una lista de ID separados por comas.", "Filter products using a comma-separated list of SKUs.": "Filtre productos utilizando una lista de SKU separados por comas.", "Finite": "Finito (limitado)", "First Item": "Primer elemento", "First name": "Nombre de pila", "First page": "Primera página", "Fix the background with regard to the viewport.": "Corregir el fondo con respecto a la ventana gráfica.", "Fixed": "Fijado", "Fixed-Inner": "Fijo-Interior", "Fixed-Left": "Fijo a la izquierda", "Fixed-Outer": "Fijo-Exterior", "Fixed-Right": "Fijo a la derecha", "Floating Shadow": "Sombra flotante", "Focal Point": "Punto focal", "Folder created.": "Carpeta creada.", "Folder Name": "Nombre de la carpeta", "Font Family": "Familia de la tipografía", "Footer": "Pie de página", "Force a light or dark color for text, buttons and controls on the image or video background.": "Fuerza un color claro u oscuro para el texto, los botones y los controles en el fondo de la imagen o del video.", "Force left alignment": "Forzar alineación a la izquierda", "Force viewport height": "Forzar altura de la ventana gráfica", "Form": "Formulario", "Format": "Formato", "Full": "Completo", "Full Article Image": "Imagen completa del artículo", "Full Article Image Alt": "Imagen del artículo completo Alt", "Full Article Image Caption": "Título de la imagen del artículo completo", "Full Width": "Ancho completo", "Full width button": "Botón de ancho completo", "g": "g", "Gallery": "Galería", "Gallery Thumbnail Columns": "Columnas de miniaturas de la galería", "Gamma": "Gama", "Gap": "Espaciado", "General": "General", "GitHub (Light)": "GitHub (Light)", "Google Analytics": "Google Analytics", "Google Fonts": "Fuentes de Google", "Google Maps": "Google Maps", "Gradient": "Gradiente", "Greater than": "Mas grande que", "Grid": "Cuadrícula", "Grid Breakpoint": "Punto de quiebre de la cuadrícula", "Grid Column Gap": "Espaciado de columna de la cuadrícula", "Grid Row Gap": "Espaciado de la fila de la cuadrícula", "Grid Width": "Ancho de la cuadrícula", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Agrupe los artículos en conjuntos. El número de artículos dentro de un conjunto depende en el ancho del artículo definido, por ejemplo, <i>33%</i> significa que cada conjunto contiene 3 artículos.", "Guest User": "Usuario invitado", "h": "h", "H1": "H1", "h1": "h1", "H2": "H2", "h2": "h2", "H3": "H3", "h3": "h3", "h4": "h4", "H4": "H4", "H5": "H5", "h5": "h5", "h6": "h6", "H6": "H6", "Halves": "Mitades", "Hard-light": "Luz Dura", "Header": "Encabezamiento", "Header End": "Fin del encabezado", "Header Start": "Comienzo del encabezado", "Header Text Color": "Color de texto de encabezado", "Heading": "Título", "Heading 2X-Large": "Título 2X-Large", "Heading H1": "Encabezado H1", "Heading H2": "Encabezado H2", "Heading H3": "Encabezado H3", "Heading H4": "Encabezado H4", "Heading H5": "Encabezado H5", "Heading H6": "Encabezado H6", "Heading Large": "Encabezado grande", "Heading Link": "Enlace de encabezado", "Heading Medium": "Encabezado Medio", "Heading Small": "Encabezado Pequeño", "Heading X-Large": "Encabezado extragrande", "Headline": "Titular", "Headline styles differ in font size and font family.": "Los estilos de título varían en tamaño de fuente pero también pueden incluir un color, tamaño y tipografía predefinidos.", "Height": "Altura", "Height 100%": "Altura 100%", "Help": "Ayuda", "hex / keyword": "Hex. / Palabra clave", "Hidden": "Oculto", "Hidden Large (Desktop)": "Ocultar grande (escritorio)", "Hidden Medium (Tablet Landscape)": "Ocultar medio (Tableta Apaisada)", "Hidden Small (Phone Landscape)": "Ocultar pequeño (Móvil Apaisado)", "Hidden X-Large (Large Screens)": "Ocultar Extra Grande (pantallas grandes)", "Hide": "Ocultar", "Hide and Adjust the Sidebar": "Ocultar y ajustar la barra lateral", "Hide marker": "Ocultar marcador", "Hide Sidebar": "Esconder barra lateral", "Hide Term List": "Ocultar lista de términos", "Hide title": "Ocultar título", "Highlight the hovered row": "Resaltar la fila señalada", "Highlight the item as the active item.": "Resalte el elemento como elemento activo.", "Hits": "Visto", "Home": "Página de Inicio", "Home Text": "Texto de inicio", "Horizontal": "Horizontal", "Horizontal Center": "Centrado Horizontal", "Horizontal Center Logo": "Centrar Logo Horizontalmente", "Horizontal Justify": "Justificación horizontal", "Horizontal Left": "Centrado a la Izquierda", "Horizontal Right": "Horizontal Derecha", "Host": "Host", "Hover": "Hover", "Hover Box Shadow": "Sombra de caja flotante", "Hover Image": "Imagen al pasar el ratón", "Hover Style": "Estilo de la superposición", "Hover Transition": "Transición de la superposición", "hr": "hr", "Html": "Html", "HTML Element": "Elemento HTML", "Hue": "Matiz", "Hyphen": "Guión", "Hyphen and Underscore": "Guión y Guión Bajo", "Icon": "Icono", "Icon Alignment": "Alineamiento del icono", "Icon Color": "Color del Icono", "Icon Width": "Ancho del icono", "Iconnav": "Iconnav", "ID": "ID (Identificador)", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Si una sección o fila tiene un ancho máximo, y un lado se está expandiendo hacia la izquierda o hacia la derecha, el relleno predeterminado se puede eliminar del lado en expansión.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Si se asignan varias plantillas a la misma vista, se aplica la plantilla que aparece primero. Cambie el orden arrastrando y soltando.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Si está creando un sitio multi-idioma, no seleccione un menú específico aquí. En su lugar, use el gestor de módulos de Joomla para publicar el menú correcto en función del idioma actual.", "Ignore %taxonomy%": "Ignorar %taxonomy%", "Image": "Imagen", "Image Align": "Alinear imagen", "Image Alignment": "Alineación de la Imagen", "Image Alt": "Texto Alternativo a la Imagen", "Image and Title": "Imagen y Título", "Image Attachment": "Adjunto de imagen", "Image Box Shadow": "Sombra del cuadro de imagen", "Image Bullet": "Imagen Viñeta", "Image Effect": "Efecto de imagen", "Image Focal Point": "Punto Focal de Imagen", "Image Height": "Altura de la imagen", "Image Margin": "Margen de la Imagen", "Image Orientation": "Orientación de la imagen", "Image Position": "Posición de la Imagen", "Image Quality": "Calidad de la Imagen", "Image Size": "Tamaño de Imagen", "Image Width": "Ancho de la imagen", "Image Width/Height": "Ancho / Altura de la imagen", "Image, Title, Content, Meta, Link": "Imagen, Título, Contenido, Meta, Enlace", "Image, Title, Meta, Content, Link": "Imagen, Título, Meta, Contenido, Enlace", "Image/Video": "Imagen/Video", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Las imágenes no pueden ser almacenadas en caché. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\"> Cambie los permisos </a> del <code>cache</code> carpeta en el directorio del tema <code>yootheme</code>, para que el servidor web pueda escribir en ella.", "Import Settings": "Importar ajustes", "Include %post_types% from child %taxonomies%": "Incluir %post_types% de %taxonomies% secundarias", "Include articles from child categories": "Incluir artículos de categorías secundarias", "Include child categories": "Incluye subcategorías", "Include heading itself": "Incluir el título mismo", "Include items from child tags": "Incluir elementos de etiquetas secundarias", "Include query string": "Incluir cadena de consulta", "Info": "Información", "Inherit": "Heredar", "Inherit transparency from header": "Heredar la transparencia del encabezado", "Inject SVG images into the markup so they adopt the text color automatically.": "Inyecte imágenes SVG en el marcado para que adopten el color del texto automáticamente.", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Inserte imágenes SVG en el marcado de la página, para que puedan ser estilizadas fácilmente con CSS.", "Inline SVG": "SVG en línea", "Inline SVG logo": "Logotipo SVG en línea", "Inline title": "Título en línea", "Input": "Entrada", "Insert at the bottom": "Insertar en la parte inferior", "Insert at the top": "Insertar en la parte superior", "Inset": "Recuadro", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "En lugar de utilizar una imagen personalizada, puede hacer clic en el lápiz para seleccionar un icono de la biblioteca de iconos.", "Intro Image": "Imagen de introducción", "Intro Image Alt": "Alt de la Imagen de introducción", "Intro Image Caption": "Leyenda de la imagen de introducción", "Intro Text": "Texto de introducción", "Invalid Field Mapped": "Campo asignado no válido", "Invalid Source": "Fuente Inválida", "Inverse Logo (Optional)": "Logotipo inverso (opcional)", "Inverse style": "Estilo inverso", "Inverse the text color on hover": "Invertir el color del texto al seleccionar", "Invert lightness": "Invertir Luminosidad", "IP Anonymization": "Anonimización IP", "Is empty": "Está vacío", "Is equal to": "Es igual a", "Is not empty": "No esta vacío", "Is not equal to": "No es igual a", "Issues and Improvements": "Problemas y mejoras", "Item": "Artículo", "Item (%post_type% fields)": "Artículo (campos %post_type%)", "Item Count": "Recuento de elementos", "Item deleted.": "Elemento eliminado.", "Item Index": "Índice de artículos", "Item Max Width": "Ancho máximo del artículo", "Item renamed.": "Elemento renombrado.", "Item uploaded.": "Elemento subido.", "Item Width": "Ancho del Artículo", "Item Width Mode": "Modo de ancho de elemento", "Items": "Artículos", "JPEG": "JPEG", "JPEG to AVIF": "JPEG a AVIF", "JPEG to WebP": "JPEG a WebP", "Justify": "Justificar", "Justify columns at the bottom": "Justificar columnas en la parte inferior", "Keep existing": "Sigue existiendo", "Ken Burns Effect": "Efecto Ken Burns", "l": "l", "Label": "Etiqueta", "Label Margin": "Margen de etiqueta", "Labels": "Etiquetas", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Las imágenes de paisaje y retrato están centradas dentro de las celdas de la grilla. El ancho y la altura se invertirán cuando las imágenes cambien de tamaño.", "Large": "Grande", "Large (Desktop)": "Grande (Escritorio)", "Large padding": "Acolchado grande", "Large Screen": "Pantalla grande", "Large Screens": "Pantallas grandes", "Larger padding": "Espacio Interno grande", "Larger style": "Estilo grande", "Last 24 hours": "Últimas 24 horas", "Last 30 days": "Últimos 30 días", "Last 7 days": "Los últimos 7 días", "Last Column Alignment": "Alineación de la última columna", "Last Item": "Último Artículo", "Last Modified": "Última modificación", "Last name": "Apellido", "Last visit date": "Fecha de la última visita", "Last Visit Date": "Fecha de última visita", "Layout": "Esquema del Diseño", "Layout Media Files": "Diseño de archivos multimedia", "Lazy load video": "Carga diferida de video", "Lead": "Dirigir", "Learning Layout Techniques": "Técnicas de diseño de aprendizaje", "Left": "Izquierda", "Left (Not Clickable)": "Izquierda (No se Puede Hacer Clic)", "Left Bottom": "Abajo a la Izquierda", "Left Center": "Centro Izquierda", "Left Top": "Arriba a la izquierda", "Less than": "Menos que", "Library": "Biblioteca", "Light": "Luz", "Light Text": "Texto Claro", "Lightbox": "Caja Ligera", "Lightbox only": "Solo caja de luz", "Lighten": "Aligerar", "Lightness": "Luminosidad", "Limit": "Limite", "Limit by %taxonomies%": "Limitar por %taxonomies%", "Limit by Categories": "Límite por categorías", "Limit by Date Archive Type": "Límite por tipo de archivo de fecha", "Limit by Language": "Limitar por idioma", "Limit by Menu Heading": "Limitar por encabezado de menú", "Limit by Page Number": "Límite por número de página", "Limit by Products on sale": "Límite por productos en oferta", "Limit by Tags": "Limitar por etiquetas", "Limit by Terms": "Límite por términos", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Limite la longitud del contenido a un número de caracteres. Todos los elementos HTML serán eliminados.", "Limit the number of products.": "Limitar el número de productos.", "Line": "Línea", "Link": "Enlace", "link": "Enlace", "Link ARIA Label": "Enlace Etiqueta ARIA", "Link card": "Tarjeta de enlace", "Link image": "Imagen de enlace", "Link Muted": "Enlace silenciado", "Link overlay": "Superposición de enlaces", "Link panel": "Panel con hipervínculo", "Link Parallax": "Enlace del Parallax", "Link Reset": "Restablecer enlace", "Link Style": "Estilo del Enlace", "Link Target": "Enlace objetivo", "Link Text": "Texto del Enlace", "Link the image if a link exists.": "Vincula la imagen si existe un vínculo.", "Link the title if a link exists.": "Vincula el título si existe un vínculo.", "Link the whole card if a link exists.": "Vincula toda la tarjeta si existe un vínculo.", "Link the whole overlay if a link exists.": "Vincula toda la superposición si existe un vínculo.", "Link the whole panel if a link exists.": "Vincular todo el panel si existe un vínculo.", "Link title": "Título del enlace", "Link Title": "Título del Enlace", "Link to redirect to after submit.": "Enlace para redirigir a después de enviar.", "List": "Lista", "List All Tags": "Listar todas las etiquetas", "List Item": "Elemento de lista", "List Style": "Estilo de la Lista", "Load Bootstrap": "Cargar Bootstrap", "Load Font Awesome": "Cargar Font Awesome", "Load image eagerly": "Cargar imagen con ansias", "Load jQuery": "Cargar jQuery", "Load jQuery to write custom code based on the jQuery JavaScript library.": "Cargue jQuery para escribir código personalizado basado en la biblioteca jQuery JavaScript.", "Load product on sale only": "Cargar producto solo en oferta", "Load products on sale only": "Cargar productos solo en oferta", "Loading": "Cargando", "Loading Layouts": "Cargando diseños", "Location": "Ubicación", "Login Page": "Página de inicio de sesión", "Logo End": "Fin del logotipo", "Logo Image": "Imagen del Logo", "Logo Text": "Texto del Logo", "Loop video": "Vídeo en bucle", "Lost Password Confirmation Page": "Página de confirmación de contraseña perdida", "Lost Password Page": "Página de contraseña perdida", "Luminosity": "Luminosidad", "Mailchimp API Token": "Token API de Mailchimp", "Main Section Height": "Altura de la sección principal", "Main styles": "Estilos principales", "Make SVG stylable with CSS": "Hacer SVG editable con CSS", "Make the column or its elements sticky only from this device width and larger.": "Haga que la columna o sus elementos sean pegajosos solo desde el ancho de este dispositivo y más grande.", "Make the header transparent and overlay this section if it directly follows the header.": "Haga que el encabezado sea transparente y superponga esta sección si sigue directamente al encabezado.", "Managing Menus": "Gestión de menús", "Managing Modules": "Gestión de módulos", "Managing Sections, Rows and Elements": "Gestión de secciones, filas y elementos", "Managing Templates": "Administrar plantillas", "Managing Widgets": "Administrar widgets", "Manual": "Manual", "Manual Order": "Orden manual", "Map": "Mapa", "Mapping Fields": "Campos de mapeo", "Margin": "Margen", "Margin Top": "Margen superior", "Marker": "Marcador", "Marker Color": "Color del marcador", "Marker Icon": "Icono de marcador", "Mask": "Máscara", "Masonry": "Mosaico", "Match (OR)": "Coincidir (OR)", "Match content height": "Igualar la altura del contenido", "Match height": "Igualar la altura", "Match Height": "Igualar la altura", "Match the height of all modules which are styled as a card.": "Haga coincidir la altura de todos los módulos que tienen el estilo de tarjeta.", "Match the height of all widgets which are styled as a card.": "Hacer coincidir la altura de todos los widgets con estilo de tarjeta.", "Max Height": "Alto máximo", "Max Width": "Anchura Máxima", "Max Width (Alignment)": "Ancho máximo (alineación)", "Max Width Breakpoint": "Punto de ruptura máximo", "Maximum Zoom": "Icono de marcador", "Maximum zoom level of the map.": "Nivel máximo de zoom del mapa.", "Media Folder": "Directorio multimedia", "Medium": "Medio", "Medium (Tablet Landscape)": "Mediano (Tableta en Horizontal)", "Menu": "Menú", "Menu Divider": "Divisor de menú", "Menu Icon Width": "Ancho del icono de menú", "Menu Image Align": "Imagen del menú Alinear", "Menu Image and Title": "Imagen y título del menú", "Menu Image Height": "Altura de la imagen del menú", "Menu Image Width": "Ancho de la imagen del menú", "Menu Inline SVG": "Menú SVG en línea", "Menu Item": "Opción del menú", "Menu items are only loaded from the selected parent item.": "Los elementos del menú solo se cargan desde el elemento principal seleccionado.", "Menu Style": "Estilo del Menu", "Menu Type": "Tipo de menú", "Menus": "Menús", "Message": "Mensaje", "Message shown to the user after submit.": "Mensaje que se muestra al usuario después de enviarlo.", "Meta": "Meta (Etiquetas de Información)", "Meta Alignment": "Alineación del Meta", "Meta Margin": "Margen del Meta", "Meta Parallax": "Meta del Parallax", "Meta Style": "Estilo del Meta", "Meta Width": "Meta ancho", "Meta, Image, Title, Content, Link": "Meta, imagen, título, contenido, enlace", "Meta, Title, Content, Link, Image": "Meta, Título, Contenido, Enlace, Imagen", "Middle": "Medio", "Mimetype": "Tipo de Mime (.extensión)", "Min Height": "Altura mínima", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Tenga en cuenta que se asigna una plantilla con un diseño general a la página actual. Edite la plantilla para actualizar su diseño.", "Minimum Stability": "Estabilidad mínima", "Minimum Zoom": "Zoom mínimo", "Minimum zoom level of the map.": "Nivel mínimo de zoom del mapa.", "Miscellaneous Information": "Información Variada", "Mobile": "Móvil", "Mobile Inverse Logo (Optional)": "Logotipo de móvil inverso (opcional)", "Mobile Logo (Optional)": "Logo para Móviles (Opcional)", "Modal": "Modal", "Modal Center": "Centro modal", "Modal Focal Point": "Punto focal modal", "Modal Image Focal Point": "Punto focal de imagen modal", "Modal Top": "Top Modal", "Modal Width": "Ancho modal", "Modal Width/Height": "Anchura / altura modal", "Mode": "Modo", "Modified": "Modificado", "Module": "Módulo", "Module Position": "Posición del módulo", "Modules": "Módulos", "Monokai (Dark)": "Monokai (Oscuro)", "Month Archive": "Archivo del mes", "Move the sidebar to the left of the content": "Mover la barra lateral a la izquierda del contenido", "Multiple Items Source": "Fuente de varios elementos", "Multiply": "Multiplicar", "Mute video": "Enmudecer el video", "Muted": "Apagado", "My Account": "Mi cuenta", "My Account Page": "Página de mi cuenta", "Name": "Nombre", "Names": "Nombres", "Nav": "Navegación (Nav)", "Navbar": "Barra de Navegación", "Navbar Container": "Contenedor de barra de navegación", "Navbar Dropdown": "Desplegable de la barra de navegación", "Navbar End": "Fin de la barra de navegación", "Navbar Start": "Inicio de la barra de navegación", "Navbar Style": "Estilo barra de navegación", "Navigation": "Navegación", "Navigation Label": "Etiqueta de Navegación", "Navigation Order": "Orden de navegación", "Navigation Thumbnail": "Miniatura de la navegación", "New Layout": "Nuevo Diseño", "New Menu Item": "Nuevo Elemento de Menú", "New Module": "Nuevo Módulo", "New Template": "Nueva plantilla", "New Window": "Nueva ventana", "Newsletter": "Boletín informativo", "Next": "Siguiente", "Next %post_type%": "Siguiente %post_type%", "Next Article": "Artículo siguiente", "Next page": "Siguiente Página", "Next slide": "Siguiente diapositiva", "Next-Gen Images": "Imágenes de próxima generación", "Nicename": "Bonito nombre", "Nickname": "Apodo", "No %item% found.": "No se encontró %item% .", "No critical issues found.": "No se encontraron problemas críticos.", "No element found.": "No se encontró ningún elemento.", "No element presets found.": "No se encontraron ajustes preestablecidos de elementos.", "No Field Mapped": "Ningún Campo Asignado", "No files found.": "No se encontraron Archivos.", "No font found. Press enter if you are adding a custom font.": "No se encontró fuente. Pulse Intro si está agregando una fuente personalizada.", "No icons found.": "No se encontraron íconos.", "No items yet.": "No hay artículos todavía.", "No layout found.": "No se ha encontrado ningún diseño.", "No limit": "Sin límite", "No list selected.": "Lista no seleccionada.", "No Results": "No Hay Resultados", "No results.": "No hay resultados.", "No source mapping found.": "No se encontró ningún mapeo de origen.", "No style found.": "No se ha encontrado ningún estilo.", "None": "Ninguno", "None (Fade if hover image)": "Ninguno (se desvanece si se desplaza la imagen)", "Normal": "Normal", "Not assigned": "No asignado", "Notification": "Notificación", "Numeric": "Numérico", "Off": "Apagado", "Offcanvas Center": "Centro Offcanvas", "Offcanvas Mode": "Modo sin lienzo (Offcanvas)", "Offcanvas Top": "Top sin lienzo", "Offset": "Compensar", "Ok": "OK", "ol": "viejo", "On": "On", "On (If inview)": "On (Si está en vista)", "On Sale Product": "Producto en oferta", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "En páginas cortas, la sección principal se puede expandir para llenar la ventana gráfica. Esto solo se aplica a las páginas que no se crean con el creador de páginas.", "Only available for Google Maps.": "Solo disponible para Google Maps.", "Only display modules that are published and visible on this page.": "Mostrar solo los módulos que están publicados y visibles en esta página.", "Only load menu items from the selected menu heading.": "Cargue únicamente elementos del menú desde el encabezado del menú seleccionado.", "Only show the image or icon.": "Mostrar solo la imagen o el icono.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Solo las páginas y publicaciones individuales pueden tener diseños individuales. Utilice una plantilla para aplicar un diseño general a este tipo de página.", "Opacity": "Opacidad", "Open": "Abierto", "Open in a new window": "Abrir en una nueva ventana", "Open menu": "Abrir menú", "Open Templates": "Plantillas abiertas", "Open the link in a new window": "Abrir el enlace en una nueva ventana", "Opening the Changelog": "Abrir el registro de cambios", "Options": "Opciones", "Order": "Orden", "Order Direction": "Dirección del Pedido", "Order First": "Ordene primero", "Order Received Page": "Página de Pedido Recibido", "Order the filter navigation alphabetically or by defining the order manually.": "Ordene la navegación del filtro alfabéticamente o definiendo el orden manualmente.", "Order Tracking": "Rastreo de Orden", "Ordering": "Realizar Pedidos", "Ordering Sections, Rows and Elements": "Ordenar secciones, filas y elementos", "Out of Stock": "Agotado", "Outside": "Afuera", "Outside Breakpoint": "Punto de ruptura exterior", "Outside Color": "Color Exterior", "Overlap the following section": "Superponga la siguiente sección", "Overlay": "Sobreponer", "Overlay + Lightbox": "Superposición + Caja de Luz", "Overlay Color": "Color de superposición", "Overlay Default": "Superposición Predeterminada", "Overlay only": "Solo superposición", "Overlay Parallax": "Superposición de paralaje", "Overlay Primary": "Superposición Primaria", "Overlay Slider": "Control deslizante de superposición", "Overlay the site": "Sobreponer el sitio", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Anula la configuración de animación de la sección. Esta opción no tendrá ningún efecto a menos que las animaciones estén habilitadas para esta sección.", "Pack": "Paquete", "Padding": "Espacio de relleno Interno (Padding)", "Page": "Página", "Page Locale": "Configuración Regional de la Página", "Page Title": "Título de la página", "Page URL": "URL de la Página", "Pagination": "Paginación", "Panel": "Panel", "Panel + Lightbox": "Panel + Caja de Luz", "Panel only": "Sólo Paneles", "Panel Slider": "Control deslizante del panel", "Panels": "Paneles", "Parallax": "Parallax", "Parallax Breakpoint": "Punto de quiebre del paralax", "Parallax Easing": "Paralelaje facilitado", "Parallax Start/End": "Inicio/Fin del Parallax", "Parent": "Padre", "Parent (%label%)": "Padre (%label%)", "Parent %taxonomy%": "Padre %taxonomy%", "Parent Category": "Categoría principal", "Parent Menu Item": "Elemento del Menú Padre", "Parent Tag": "Etiqueta principal", "Path": "Ruta", "Path Pattern": "Patrón de ruta", "Pause autoplay on hover": "Detener autoplay en hover", "Phone Landscape": "Móvil en Horizontal", "Phone Portrait": "Móvil en Vertical", "Photos": "Fotografías", "Pick": "Elegir", "Pick %type%": "Elija %type%", "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.": "Elija un %post_type% manualmente o use opciones de filtro para especificar qué %post_type% debe cargarse dinámicamente.", "Pick an alternative icon from the icon library.": "Elija un icono alternativo de la biblioteca de iconos.", "Pick an alternative SVG image from the media manager.": "Elija una imagen SVG alternativa del administrador de medios.", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "Elija un artículo manualmente o use las opciones de filtro para especificar qué artículo debe cargarse dinámicamente.", "Pick an optional icon from the icon library.": "Elija un ícono opcional de la biblioteca de íconos.", "Pick file": "Seleccione un archivo", "Pick icon": "Icono de selección", "Pick link": "Seleccione un enlace", "Pick media": "Elegir medios", "Pick video": "Elegir video", "Pill": "Píldora", "Placeholder Image": "Imagen del marcador de posición", "Play inline on mobile devices": "Activa en línea en dispositivos móviles", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Para habilitar esta función, instale / habilite el <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\"> complemento del instalador </a>.", "Please provide a valid email address.": "Por favor ingrese su dirección de correo electrónico válida.", "PNG to AVIF": "PNG a AVIF", "PNG to WebP": "PNG a WebP", "Popover": "Popover", "Popular %post_type%": "Popular %post_type%", "Popup": "Ventana emergente", "Position": "Posición", "Position Absolute": "Posición Absoluta", "Position Sticky": "Posición Pegajosa", "Position Sticky Breakpoint": "Posición del Punto de Interrupción Fijo", "Position Sticky Offset": "Posición de Compensación Adhesiva", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Posicione el elemento encima o debajo de otros elementos. Si tienen el mismo nivel de apilado, la posición dependerá del orden en el diseño.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Posicione el elemento en el flujo de contenido normal, o en el flujo normal pero con un desplazamiento relativo a sí mismo, o retírelo del flujo y colóquelo en relación con la columna que lo contiene.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Coloque la navegación del filtro en la parte superior, izquierda o derecha. Se puede aplicar un estilo más grande a la navegación izquierda y derecha.", "Position the meta text above or below the title.": "Posicione el meta texto encima o debajo del título.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Posiciona la navegación arriba, abajo, izquierda o derecha. Si la navegación está posicionada a la izquierda o a la derecha, se puede aplicar un estilo largo.", "Post": "Publicación", "Post Order": "Orden de Publicación", "Post Type Archive": "Archivo de Tipo de Publicación", "Postal/ZIP Code": "Código postal", "Poster Frame": "Marco del Cartel", "Poster Frame Focal Point": "Punto Focal del Marco del Cartel", "Prefer excerpt over intro text": "Elegir un extracto en lugar del texto de introducción", "Prefer excerpt over regular text": "Elegir un extracto en lugar del texto normal", "Preserve text color": "Preservar el color del texto", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Conserve el color del texto, por ejemplo, al utilizar tarjetas. La superposición de secciones no es compatible con todos los estilos y es posible que no tenga ningún efecto visual.", "Preview all UI components": "Vista previa de todos los componentes de UI", "Previous %post_type%": "Anterior %post_type%", "Previous Article": "Artículo Anterior", "Previous page": "Pagina anterior", "Previous slide": "Diapositiva anterior", "Previous/Next": "Anterior/Siguiente", "Price": "Precio", "Primary": "Primario", "Primary navigation": "Navegación primaria", "Product Category Archive": "Archivo de Categorías de Productos", "Product Description": "Descripción del Producto", "Product Gallery": "Galería de Productos", "Product IDs": "IDs de producto", "Product Images": "Imágenes del producto", "Product Information": "Información del Producto", "Product Meta": "Meta del producto", "Product Price": "Precio del producto", "Product Rating": "Calificación del producto", "Product SKUs": "SKU del producto", "Product Stock": "Inventario de productos", "Product Tabs": "Pestañas de productos", "Product Tag Archive": "Archivo de etiquetas de productos", "Product Title": "Titulo del producto", "Products": "productos", "Property": "Propiedad", "Provider": "Proveedor", "Published": "Publicado", "Pull": "Tirar de", "Pull content behind header": "Colocar contenido detrás del encabezado", "Purchases": "compras", "Push": "Empujar", "Push Items": "Empujar Elementos", "Quantity": "Cantidad", "Quarters": "Cuartos", "Quarters 1-1-2": "Cuartos 1-1-2", "Quarters 1-2-1": "Cuartos 1-2-1", "Quarters 1-3": "Cuartos 1-3", "Quarters 2-1-1": "Cuartos 2-1-1", "Quarters 3-1": "Cuartos 3-1", "Query String": "Query String", "Quotation": "Cita", "r": "r", "Random": "Aleatorio", "Rating": "Clasificación", "Ratio": "Proporción", "Read More": "Leer Más", "Recompile style": "Recompilar estilo", "Redirect": "redirigir", "Register date": "Fecha de registro", "Registered": "Registrado", "Reject Button Style": "Estilo de botón de rechazo", "Reject Button Text": "Texto del botón de rechazo", "Related %post_type%": "%post_type% relacionado", "Related Articles": "Artículos relacionados", "Related Products": "Productos Relacionados", "Relationship": "Relación", "Relationships": "Relaciones", "Relative": "Relativo", "Reload Page": "Recargar Página", "Remove bottom margin": "Quitar el margen inferior", "Remove bottom padding": "Quitar el ancho de relleno inferior", "Remove horizontal padding": "Quitar el acolchado horizontal", "Remove left and right padding": "Quitar el relleno izquierdo y derecho", "Remove left logo padding": "Eliminar el relleno de logotipo de la izquierda", "Remove left or right padding": "Elimar el relleno izquierdo o derecho", "Remove Media Files": "Eliminar archivos multimedia", "Remove top margin": "Eliminar el margen superior", "Remove top padding": "Quitar el ancho de relleno superior", "Remove vertical padding": "Retire el relleno vertical", "Rename": "Renombrar", "Rename %type%": "Cambiar el nombre de %type%", "Replace": "Reemplazar", "Replace layout": "Reemplazar diseño", "Reset": "Reiniciar", "Reset Link Sent Page": "Restablecer enlace Página enviada", "Reset to defaults": "Restablecer los valores predeterminados", "Resize Preview": "Redimensionar vista previa", "Responsive": "Adaptativo", "Reveal": "Revelar", "Reverse order": "Orden inverso", "Right": "Derecha", "Right (Clickable)": "Derecha (se puede hacer clic)", "Right Bottom": "Boton derecho", "Right Center": "Derecha Centro", "Right Top": "Derecha Arriba", "Roadmap": "Mapa de ruta", "Roles": "Roles", "Root": "Raíz", "Rotate": "Girar", "Rotate the title 90 degrees clockwise or counterclockwise.": "Gire el título 90 grados hacia la derecha o hacia la izquierda.", "Rotation": "Rotación", "Rounded": "Redondeado", "Row": "Fila", "Row Gap": "Espacio entre filas", "Rows": "Filas", "Run Time": "Tiempo de ejecución", "s": "s", "Same Window": "La misma ventana", "Satellite": "Satélite", "Saturation": "Saturación", "Save": "Guardar", "Save %type%": "Guardar %type%", "Save in Library": "Guardar en biblioteca", "Save Layout": "Guardar Diseño", "Save Style": "Guardar estilo", "Save Template": "Guardar plantilla", "Scale": "Escala", "Scale Down": "Reducir proporcionalmente", "Scale Up": "Aumentar proporcionalmente", "Screen": "Pantalla", "Script": "Guion", "Scroll into view": "Mover a la vista", "Scroll overflow": "Desplazamiento desbordado", "Search": "Buscar", "Search Component": "Componente de búsqueda", "Search Item": "Buscar Artículo", "Search Style": "Estilo de Busqueda", "Search Word": "Buscar Palabra", "Secondary": "Secundario", "Section": "Sección", "Section Animation": "Animación de sección", "Section Height": "Altura de la sección", "Section Image and Video": "Imagen de sección y video", "Section Padding": "Acolchado de sección", "Section Style": "Estilo de sección", "Section Title": "Sección de título", "Section Width": "Ancho de la sección", "Section/Row": "Sección/Fila", "Select": "Seleccionar", "Select %item%": "Seleccione un %item%", "Select %type%": "Seleccionar %type%", "Select a card style.": "Seleccione un estilo de tarjeta.", "Select a child theme. Note that different template files will be loaded, and theme settings will be updated respectively. To create a child theme, add a new folder <code>yootheme_NAME</code> in the templates directory, for example <code>yootheme_mytheme</code>.": "Seleccione un tema secundario. Tenga en cuenta que se cargarán diferentes archivos de plantilla y la configuración del tema se actualizará respectivamente. Para crear un tema secundario, agregue una nueva carpeta <code>yootheme_NAME</code> en el directorio de plantillas, por ejemplo , <code>yootheme_mytheme</code> .", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Seleccione una fuente de contenido para que sus campos estén disponibles para mapeo. Elija entre las fuentes de la página actual o consulte una fuente personalizada.", "Select a different position for this item.": "Seleccionar una posición distinta para este item.", "Select a grid layout": "Seleccione un diseño de cuadrícula", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Seleccione una posición de módulo de Joomla que renderizará todos los módulos publicados. Se recomienda utilizar las posiciones de constructor-1 a -6, que no están representadas en ninguna otra parte por el tema.", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "Seleccione un logotipo, que se mostrará en los cuadros de diálogo modales y fuera del lienzo de ciertos diseños de encabezado.", "Select a panel style.": "Seleccione un estilo de panel.", "Select a predefined date format or enter a custom format.": "Seleccione un formato de fecha predefinido o ingrese un formato personalizado.", "Select a predefined meta text style, including color, size and font-family.": "Seleccione un estilo de meta-texto predefinido, incluyendo color, tamaño y familia de la fuente.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Seleccione un patrón de búsqueda predefinido o ingrese una cadena personalizada o una expresión regular para buscar. La expresión regular debe encerrarse entre barras. Por ejemplo, `my-string` or `/ab+c/`.", "Select a predefined text style, including color, size and font-family.": "Seleccione un estilo de texto predefinido, incluido el color, el tamaño y la familia de la fuente.", "Select a style for the continue reading button.": "Seleccione un estilo para el botón de Continuar Leyendo.", "Select a style for the overlay.": "Selecciona un estilo para la capa.", "Select a taxonomy to only load posts from the same term.": "Seleccione una taxonomía para cargar solo publicaciones del mismo término.", "Select a taxonomy to only navigate between posts from the same term.": "Seleccione una taxonomía para navegar solo entre publicaciones del mismo término.", "Select a transition for the content when the overlay appears on hover.": "Seleccione una transición para el contenido cuando la superposición aparezca al pasar el ratón.", "Select a transition for the link when the overlay appears on hover.": "Seleccione una transición para el enlace cuando la superposición aparezca al pasar el ratón.", "Select a transition for the meta text when the overlay appears on hover.": "Seleccione una transición para el meta texto cuando la superposición aparezca al pasar el ratón.", "Select a transition for the overlay when it appears on hover.": "Seleccione una transición para la superposición cuando aparezca al pasar el ratón.", "Select a transition for the title when the overlay appears on hover.": "Seleccione una transición para el título cuando la superposición aparezca al pasar el ratón.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Selecciona un archivo de vídeo o ingresa un vínculo desde <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> o <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WooCommerce page.": "Seleccione una página de WooCommerce.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Seleccione un área de widget de WordPress que representará todos los widgets publicados. Se recomienda utilizar las áreas de widget de constructor-1 a -6, que el tema no representa en ningún otro lugar.", "Select an alternative font family. Mind that not all styles have different font families.": "Seleccione una familia de fuentes alternativa. Tenga en cuenta que no todos los estilos tienen familias de fuentes diferentes.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Seleccione un logo alternativo con color inverso, p ej.: Blanco, para una mejor visibilidad en fondos oscuros. Se mostrará automáticamente, si es necesario.", "Select an alternative logo, which will be used on small devices.": "Seleccione un logotipo alternativo, que se utilizará en dispositivos pequeños.", "Select an animation that will be applied to the content items when filtering between them.": "Seleccione una animación que se aplicará a los elementos de contenido al filtrar entre ellos.", "Select an animation that will be applied to the content items when toggling between them.": "Selecciona la animación que se aplicará a los elementos de contenido al alternar entre ellos.", "Select an image transition.": "Seleccione una imagen de transición.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Seleccione una transición de imagen. Si se establece la imagen de desplazamiento, la transición tiene lugar entre las dos imágenes. Si se selecciona <i>None</i> , la imagen de desplazamiento se desvanece.", "Select an optional <code>favicon.svg</code>. Modern browsers will use it instead of the PNG image. Use CSS to toggle the SVG color scheme for light/dark mode.": "Seleccione un <code>favicon.svg</code> opcional. Los navegadores modernos lo utilizarán en lugar de la imagen PNG. Utilice CSS para alternar el esquema de color SVG para el modo claro/oscuro.", "Select an optional image that appears on hover.": "Seleccione una imagen opcional que aparece en la superposición.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Seleccione una imagen opcional que se muestre hasta que se reproduzca el vídeo. Si no se selecciona, el primer cuadro de video se muestra como el marco del cartel.", "Select Color": "Seleccionar el Color", "Select dialog layout": "Seleccionar diseño de diálogo", "Select Element": "Seleccionar elemento", "Select Gradient": "Seleccionar Gradiente", "Select header layout": "Selección del diseño del encabezado", "Select Image": "Seleccionar Imágen", "Select Manually": "Seleccionar Manualmente", "Select menu item.": "Seleccione el elemento del menú.", "Select menu items manually. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple menu items.": "Seleccione los elementos del menú manualmente. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varios elementos del menú.", "Select mobile dialog layout": "Seleccionar diseño de diálogo móvil", "Select mobile header layout": "Seleccionar diseño de encabezado móvil", "Select one of the boxed card or tile styles or a blank panel.": "Seleccione uno de los estilos de tarjeta en caja o un panel en blanco.", "Select the animation on how the dropbar appears below the navbar.": "Seleccione la animación sobre cómo aparece la barra desplegable debajo de la barra de navegación.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Seleccione el punto de interrupción a partir del cual la columna comenzará a aparecer antes que otras columnas. En tamaños de pantalla más pequeños, la columna aparecerá en el orden natural.", "Select the color of the list markers.": "Seleccione el color de los marcadores de la lista.", "Select the content position.": "Seleccionar la posición del contenido.", "Select the device size where the default header will be replaced by the mobile header.": "Seleccione el tamaño del dispositivo donde el encabezado predeterminado será reemplazado por el encabezado móvil.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Selecciona el estilo de navegación. Los estilos de pastilla y línea solo están disponibles para los <i>Subnavs</i> horizontales.", "Select the form size.": "Seleccione el tamaño del formulario.", "Select the form style.": "Seleccione el estilo del formulario.", "Select the icon color.": "Seleccione el color del icono.", "Select the image border style.": "Seleccione el estilo del borde de la imagen.", "Select the image box decoration style.": "Seleccione el estilo de decoración de la caja de la imagen.", "Select the image box shadow size on hover.": "Selecciona el tamaño de la caja de sombra de la imagen al hacer <i>hover</i>.", "Select the image box shadow size.": "Seleccione el tamaño de sombra del cuadro de imagen.", "Select the item type.": "Seleccione el tipo de artículo.", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "Seleccione el diseño para la posición <code>dialog-mobile</code>. Los elementos empujados de la posición se muestran como puntos suspensivos.", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "Seleccione el diseño para la posición <code>diálogo</code>. Los elementos que se pueden empujar se muestran como puntos suspensivos.", "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.": "Seleccione el diseño para las posiciones <code>logo-mobile</code>, <code>navbar-mobile</code> y <code>header-mobile</code>.", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "Seleccione el diseño para las posiciones <code>logo</code>, <code>navbar</code> y <code>header</code>. Algunos diseños pueden dividir o empujar elementos de una posición que se muestran como puntos suspensivos.", "Select the link style.": "Seleccione el estilo de enlace.", "Select the list style.": "Seleccione el estilo de lista.", "Select the list to subscribe to.": "Seleccione la lista a la cual suscribirse.", "Select the logical operator for the attribute term comparison. Match at least one of the terms, none of the terms or all terms.": "Seleccione el operador lógico para la comparación de términos de atributo. Coincide con al menos uno de los términos, ninguno de los términos o todos los términos.", "Select the logical operator for the category comparison. Match at least one of the categories, none of the categories or all categories.": "Seleccione el operador lógico para la comparación de categorías. Coincide con al menos una de las categorías, ninguna de las categorías o todas las categorías.", "Select the logical operator for the tag comparison. Match at least one of the tags, none of the tags or all tags.": "Seleccione el operador lógico para la comparación de etiquetas. Coincide con al menos una de las etiquetas, ninguna de las etiquetas o todas las etiquetas.", "Select the marker of the list items.": "Seleccione el marcador de los elementos de la lista.", "Select the menu type.": "Seleccione el tipo de menú.", "Select the nav style.": "Seleccione el estilo de navegación.", "Select the navbar style.": "Seleccione el estilo de la barra de navegación.", "Select the navigation type.": "Seleccionar el tipo de navegación.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Selecciona el estilo de navegación. Los estilos de pastilla y línea solo están disponibles para los <i>Subnavs</i> horizontales.", "Select the overlay or content position.": "Selecciona la posición de la capa o del contenido.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Seleccione la alineación de la ventana emergente con su marcador. Si el popover no cabe en su contenedor, se volteará automáticamente.", "Select the position of the navigation.": "Seleccionar posición de la navegación.", "Select the position of the slidenav.": "Seleccione la posición de la miniatura de navegación.", "Select the position that will display the search.": "Seleccione la posición que mostrará la búsqueda.", "Select the position that will display the social icons.": "Seleccione la posición que mostrará los íconos sociales.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Seleccione la posición que mostrará los iconos sociales. Asegúrese de agregar sus vínculos de perfil social o no se mostraran los iconos.", "Select the search style.": "Seleccione el estilo de búsqueda.", "Select the slideshow box shadow size.": "Seleccione el tamaño de sombra del cuadro de presentación de diapositivas.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Seleccione el estilo para el resaltado de sintaxis de código. Utilice GitHub para luz y Monokai para fondos oscuros.", "Select the style for the overlay.": "Selecciona el estilo de la capa.", "Select the subnav style.": "Seleccione el estilo de submenú de navegación.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Seleccione el color SVG. Solo se aplicará a los elementos admitidos definidos en el SVG.", "Select the table style.": "Seleccione estilo de tabla.", "Select the text color.": "Seleccione el color del texto.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Seleccione el color del texto. Si se selecciona la opción de fondo, los estilos que no aplican una imagen de fondo utilizarán el color primario en su lugar.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Seleccione el color del texto. Si se selecciona la opción de fondo, los estilos que no aplican una imagen de fondo utilizarán el color primario en su lugar.", "Select the title style and add an optional colon at the end of the title.": "Seleccione el estilo del título y añada opcionalmente dos puntos al final del mismo.", "Select the transformation origin for the Ken Burns animation.": "Seleccione el origen de transformación para la animación de Ken Burns (ampliación).", "Select the transition between two slides.": "Seleccione la transición entre dos diapositivas.", "Select the video box decoration style.": "Seleccione el estilo de decoración de la caja de video.", "Select the video box shadow size.": "Seleccione el tamaño de la sombra del cuadro del video.", "Select whether a button or a clickable icon inside the email input is shown.": "Seleccione si se muestra un botón o un icono en el que se puede hacer clic dentro de la entrada de correo electrónico.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Seleccione si se mostrará un mensaje o se redireccionará el sitio luego de hacer clic en el botón de suscripción.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Seleccione si el módulo de búsqueda y el elemento constructor utilizan la búsqueda predeterminada o la búsqueda inteligente.", "Select whether the modules should be aligned side by side or stacked above each other.": "Seleccione si los módulos deben alinearse uno al lado del otro o apilarse uno sobre otro.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Seleccione si los widgets deben alinearse uno al lado del otro o apilarse uno sobre otro.", "Select your <code>apple-touch-icon.png</code>. It appears when the website is added to the home screen on iOS devices. The recommended size is 180x180 pixels.": "Selecciona tu <code>apple-touch-icon.png</code>. Aparece cuando el sitio web se agrega a la pantalla de inicio en dispositivos iOS. El tamaño recomendado es 180x180 píxeles.", "Select your <code>favicon.png</code>. It appears in the browser's address bar, tab and bookmarks. The recommended size is 96x96 pixels.": "Selecciona tu <code>favicon.png</code>. Aparece en la barra de direcciones, pestañas y marcadores del navegador. El tamaño recomendado es 96x96 píxeles.", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "Seleccione su logotipo. Opcionalmente, inyecte un logotipo SVG en el marcado para que adopte el color del texto automáticamente.", "Sentence": "Oración", "Separator": "Separador", "Serve AVIF images": "Servir imágenes AVIF", "Serve optimized image formats with better compression and quality than JPEG and PNG.": "Ofrezca formatos de imagen optimizados con mejor compresión y calidad que JPEG y PNG.", "Serve WebP images": "Sirva imágenes WebP", "Set a condition to display the element or its item depending on the content of a field.": "Establezca una condición para mostrar el elemento o su elemento según el contenido de un campo.", "Set a different link ARIA label for this item.": "Establezca una etiqueta ARIA de enlace diferente para este artículo.", "Set a different link text for this item.": "Establecer un texto de enlace diferente para este elemento.", "Set a different text color for this item.": "Estrablecer un color de texto diferente para este elemento.", "Set a fixed width.": "Establecer un ancho fijo.", "Set a focal point to adjust the image focus when cropping.": "Establezca un punto focal para ajustar el enfoque de la imagen al recortar.", "Set a higher stacking order.": "Establecer un orden de apilamiento superior.", "Set a large initial letter that drops below the first line of the first paragraph.": "Establezca una letra inicial grande que caiga debajo de la primera línea del primer párrafo.", "Set a parallax animation to move columns with different heights until they justify at the bottom. Mind that this disables the vertical alignment of elements in the columns.": "Configure una animación de parallax para mover columnas con diferentes alturas hasta que se justifiquen en la parte inferior. Tenga en cuenta que esto desactiva la alineación vertical de los elementos en las columnas.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Establezca un ancho de barra lateral en porcentaje y la columna de contenido se ajustará en consecuencia. El ancho no bajará por debajo del ancho mínimo de la barra lateral, que puede establecer en la sección Estilo.", "Set a thematic break between paragraphs or give it no semantic meaning.": "Establezca una ruptura temática entre párrafos o no le dé ningún significado semántico.", "Set an additional transparent overlay to soften the image or video.": "Establezca una superposición transparente adicional para suavizar la imagen del vídeo.", "Set an additional transparent overlay to soften the image.": "Establecer una superposición transparente adicional para suavizar la imagen.", "Set an optional content width which doesn't affect the image if there is just one column.": "Establezca un ancho de contenido opcional que no afecte a la imagen si solo hay una columna.", "Set an optional content width which doesn't affect the image.": "Establezca un ancho de contenido opcional que no afecte a la imagen.", "Set how the module should align when the container is larger than its max-width.": "Establezca cómo debe alinearse el módulo cuando el contenedor es mayor que su anchura máxima.", "Set how the widget should align when the container is larger than its max-width.": "Establezca cómo debe alinearse el widget cuando el contenedor es más grande que su ancho máximo.", "Set light or dark color if the navigation is below the slideshow.": "Ajuste el color claro u oscuro si la navegación está por debajo de la presentación de diapositivas.", "Set light or dark color if the slidenav is outside.": "Establezca el color claro u oscuro si el slidenav está fuera de la presentación.", "Set light or dark color mode for text, buttons and controls.": "Establece el modo de color claro u oscuro para texto, botones y controles.", "Set light or dark color mode.": "Establezca el modo de color claro u oscuro.", "Set percentage change in lightness (Between -100 and 100).": "Configure el cambio porcentual en claridad (entre -100 y 100).", "Set percentage change in saturation (Between -100 and 100).": "Configure el cambio porcentual en saturación (entre -100 y 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Configure el cambio porcentual en la cantidad de corrección gamma (entre 0.01 y 10.0, donde 1.0 no aplica corrección).", "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.": "Establece la relajación de la animación. El cero cambia a una velocidad uniforme, un valor negativo comienza rápidamente mientras que un valor positivo comienza lentamente.", "Set the autoplay interval in seconds.": "Establezca el intervalo de reproducción automática en segundos.", "Set the blog width.": "Establezca el ancho del blog.", "Set the breakpoint from which grid items will align side by side.": "Establezca el punto de interrupción desde el cual los elementos de la cuadrícula se alinearán uno al lado del otro.", "Set the breakpoint from which grid items will stack.": "Establezca el punto de interrupción desde el cual se superpondrán los elementos de la cuadrícula.", "Set the breakpoint from which the sidebar and content will stack.": "Establezca el punto de interrupción desde el cual la barra lateral y el contenido se apilarán.", "Set the button size.": "Ajuste el tamaño del botón.", "Set the button style.": "Establezca el estilo del botón.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Establezca el ancho de columna para cada punto de interrupción. Mezcle anchos de fracción o combine anchos fijos con el valor <i> Expandir </i> . Si no se selecciona ningún valor, se aplica el ancho de columna del siguiente tamaño de pantalla más pequeño. La combinación de anchos siempre debe tener el ancho completo.", "Set the content width.": "Establezca el ancho del contenido.", "Set the device width from which the list columns should apply.": "Establezca el ancho del dispositivo desde el que se deben aplicar las columnas de la lista.", "Set the device width from which the nav columns should apply.": "Establezca el ancho del dispositivo a partir del cual se deben aplicar las columnas de navegación.", "Set the device width from which the text columns should apply.": "Establezca el ancho del dispositivo desde el que se deben aplicar las columnas de texto.", "Set the dropbar width if it slides in from the left or right.": "Establezca el ancho de la barra desplegable si se desliza desde la izquierda o la derecha.", "Set the dropdown width in pixels (e.g. 600).": "Establezca el ancho del menú desplegable en píxeles (por ejemplo, 600).", "Set the duration for the Ken Burns effect in seconds.": "Establezca la duración del efecto Ken Burns (ampliación) en segundos.", "Set the height in pixels.": "Establezca la altura en píxeles.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Establezca la posición horizontal del borde inferior del elemento en píxeles \"px\". También se puede ingresar una unidad diferente como porcentaje \"% \" o \"vw\".", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Establezca la posición horizontal del borde izquierdo del elemento en píxeles \"px\". También se puede ingresar una unidad diferente como porcentaje \"%\" o \"vw\".", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Establezca la posición horizontal del borde derecho del elemento en píxeles \"px\". También se puede ingresar una unidad diferente como porcentaje \"%\" o \"vw\".", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Establezca la posición horizontal del borde superior del elemento en píxeles \"px\" También se puede ingresar una unidad diferente como porcentaje \"%\" o \"vw\".", "Set the hover style for a linked title.": "Establezca el estilo de superposición para un título vinculado.", "Set the hover transition for a linked image.": "Establezca el estilo de superposición para una imagen enlazada.", "Set the hue, e.g. <i>#ff0000</i>.": "Establezca el tono, por ejemplo, <i> # ff0000 </i> .", "Set the icon color.": "Establecer el color del icono.", "Set the icon width.": "Establezca el ancho del icono.", "Set the initial background position, relative to the page layer.": "Establezca la posición inicial del fondo, relativa a la capa de la página.", "Set the initial background position, relative to the section layer.": "Establezca la posición de fondo inicial, en relación con la capa de sección.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Defina la resolución inicial en la que se mostrará el mapa. 0 está completamente alejado y 18 tiene la resolución más alta ampliada.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Establecer el ancho del elemento para cada punto de interrupción. <i>Heredar</i> se refiere al ancho del elemento del siguiente tamaño de pantalla más pequeño.", "Set the level for the section heading or give it no semantic meaning.": "Establezca el nivel para el título de la sección o no le dé ningún significado semántico.", "Set the link style.": "Establecer el estilo de enlace.", "Set the logical operator for how the %post_type% relate to the author. Choose between matching at least one term, all terms or none of the terms.": "Establezca el operador lógico de cómo el %post_type% se relaciona con el autor. Elija entre hacer coincidir al menos un término, todos los términos o ninguno de los términos.", "Set the logical operators for how the %post_type% relate to %taxonomy_list% and author. Choose between matching at least one term, all terms or none of the terms.": "Establezca los operadores lógicos de cómo %post_type% se relaciona con %taxonomy_list% y autor. Elija entre hacer coincidir al menos un término, todos los términos o ninguno de los términos.", "Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.": "Establezca los operadores lógicos de cómo los artículos se relacionan con la categoría, las etiquetas y el autor. Elija entre hacer coincidir al menos un término, todos los términos o ninguno de los términos.", "Set the margin between the countdown and the label text.": "Establezca el margen entre la cuenta atrás y el texto de la etiqueta.", "Set the margin between the overlay and the slideshow container.": "Establezca el margen entre la superposición y el contenedor de presentación de diapositivas.", "Set the maximum content width.": "Establezca el ancho máximo del contenido.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Establezca el ancho máximo del contenido. Nota: La sección ya puede tener un ancho máximo, que no puede superar.", "Set the maximum header width.": "Establezca el ancho máximo del encabezado.", "Set the maximum height.": "Establezca la altura máxima.", "Set the maximum width.": "Establezca el ancho máximo.", "Set the number of columns for the cart cross-sell products.": "Establezca el número de columnas para los productos de venta cruzada del carrito.", "Set the number of columns for the gallery thumbnails.": "Establezca el número de columnas para las miniaturas de la galería.", "Set the number of grid columns for desktops and larger screens. On smaller viewports the columns will adapt automatically.": "Establezca el número de columnas de cuadrícula para escritorios y pantallas más grandes. En ventanas gráficas más pequeñas, las columnas se adaptarán automáticamente.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Configura el numero de columnas para cada punto de ruptura. <i>Heredar</i> utilizará el número de columnas del siguiente tamaño de pantalla más pequeño.", "Set the number of grid columns.": "Establece el número de columnas de la cuadrícula.", "Set the number of items after which the following items are pushed to the bottom.": "Establezca el número de elementos después de los cuales los siguientes elementos se empujan hacia abajo.", "Set the number of items after which the following items are pushed to the right.": "tablezca el número de elementos después de los cuales los siguientes elementos se empujan hacia la derecha.", "Set the number of list columns.": "Establezca el ancho del icono.", "Set the number of text columns.": "Establezca el número de columnas de texto.", "Set the offset from the top of the viewport where the column or its elements should become sticky, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height.": "Establezca el desplazamiento desde la parte superior de la ventana gráfica donde la columna o sus elementos deben volverse fijos, por ejemplo, <code>100px</code>, <code>50vh</code> o <code>50vh - 50%</code>. El porcentaje se relaciona con la altura de la columna.", "Set the offset to specify which file is loaded.": "Establezca el desplazamiento para especificar qué archivo se carga.", "Set the order direction.": "Establecer la dirección del pedido.", "Set the padding between sidebar and content.": "Establezca el espacio de relleno entre la barra lateral y el contenido.", "Set the padding between the card's edge and its content.": "Establezca el relleno entre el borde de la tarjeta y su contenido.", "Set the padding between the overlay and its content.": "Establezca el relleno entre la superposición y su contenido.", "Set the padding.": "Configura el relleno.", "Set the post width. The image and content can't expand beyond this width.": "Establezca el ancho del artículo. La imagen y el contenido no pueden expandirse más allá de este ancho.", "Set the product ordering.": "Establecer el orden de los productos.", "Set the search input size.": "Establezca el tamaño de entrada de búsqueda.", "Set the search input style.": "Establezca el estilo de entrada de búsqueda.", "Set the separator between fields.": "Establecer el separador entre campos.", "Set the separator between list items.": "Establezca el separador entre los elementos de la lista.", "Set the separator between tags.": "Establecer el separador entre etiquetas.", "Set the separator between terms.": "Establecer el separador entre términos.", "Set the separator between user groups.": "Establecer el separador entre grupos de usuarios.", "Set the separator between user roles.": "Establezca el separador entre roles de usuario.", "Set the size for the Gravatar image in pixels.": "Establezca el tamaño de la imagen de Gravatar en píxeles.", "Set the size of the column gap between multiple buttons.": "Establezca el tamaño del espacio entre columnas en torno a varios botones.", "Set the size of the column gap between the numbers.": "Establezca el tamaño del espacio entre columnas en torno a los números.", "Set the size of the gap between between the filter navigation and the content.": "Establezca el tamaño del espacio entre el filtro de navegación y el contenido.", "Set the size of the gap between the grid columns.": "Establezca el tamaño del espacio entre las columnas de la cuadrícula.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Establezca el tamaño del espacio entre las columnas de la cuadrícula. Defina el número de columnas en la <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\"> Configuración del diseño de blog/destacados </a> en Joomla.", "Set the size of the gap between the grid rows.": "Establezca el tamaño del espacio entre las filas de la cuadrícula.", "Set the size of the gap between the image and the content.": "Establezca el tamaño del espaciado entre la imagen y el contenido.", "Set the size of the gap between the navigation and the content.": "Establezca el tamaño del espaciado entre la navegación y el contenido.", "Set the size of the gap between the social icons.": "Establezca el tamaño del espacio entre los íconos sociales.", "Set the size of the gap between the title and the content.": "Establezca el tamaño del espaciado entre el título y el contenido.", "Set the size of the gap if the grid items stack.": "Establezca el tamaño del espaciado si los elementos de la cuadrícula se superponen.", "Set the size of the row gap between multiple buttons.": "Establezca el tamaño del espaciodo de fila en torno a varios botones.", "Set the size of the row gap between the numbers.": "Establezca el tamaño del espaciado entre filas en tornos a los números.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Establecer una relación. Se recomienda utilizar la misma proporción de la imagen de fondo. Solo use su ancho y alto, como <code>1600:900</code>.", "Set the starting point and limit the number of %post_type%.": "Establezca el punto de partida y limite el número de %post_type% .", "Set the starting point and limit the number of %post_types%.": "Establezca el punto de partida y limite el número de %post_types% .", "Set the starting point and limit the number of %taxonomies%.": "Establezca el punto de partida y limite el número de %taxonomies% .", "Set the starting point and limit the number of articles.": "Establezca el punto de partida y limite el número de artículos.", "Set the starting point and limit the number of categories.": "Establezca el punto de partida y limite el número de categorías.", "Set the starting point and limit the number of files.": "Establezca el punto de partida y limite el número de archivos.", "Set the starting point and limit the number of items.": "Establezca el punto de partida y limite el número de elementos.", "Set the starting point and limit the number of tagged items.": "Establezca el punto de partida y limite el número de elementos etiquetados.", "Set the starting point and limit the number of tags.": "Establezca el punto de partida y limite el número de etiquetas.", "Set the starting point and limit the number of users.": "Establezca el punto de partida y limite el número de usuarios.", "Set the starting point to specify which %post_type% is loaded.": "Establezca el punto de partida para especificar qué %post_type% se carga.", "Set the starting point to specify which article is loaded.": "Establezca el punto de partida para especificar qué artículo se carga.", "Set the top margin if the image is aligned between the title and the content.": "Establezca el margen superior si la imagen está alineada entre el título y el contenido.", "Set the top margin.": "Establezca el margen superior.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Establecer el margen superior. Tenga en cuenta que el margen solo se aplicará si el campo de contenido sigue inmediatamente a otro campo de contenido.", "Set the type of tagged items.": "Establezca el tipo de elementos etiquetados.", "Set the velocity in pixels per millisecond.": "Establezca la velocidad en píxeles por milisegundo.", "Set the vertical container padding to position the overlay.": "Ajuste el relleno del contenedor vertical para colocar la superposición.", "Set the vertical margin.": "Configura el margen vertical.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Establezca el margen vertical. Nota: El margen superior del primer elemento y el margen inferior del último elemento siempre se eliminan. En su lugar, defina los valores de la cuadrícula.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Establezca el margen vertical. Nota: El margen superior de la primera cuadrícula y el margen inferior de la última cuadrícula siempre se quitan. Defina los que están en la configuración de sección.", "Set the vertical padding.": "Ajuste el espaciado del relleno vertical.", "Set the video dimensions.": "Establezca las dimensiones del vídeo.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Establezca el ancho y alto para el contenido del lightbox, es decir, imagen, video o iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Establezca el ancho y la altura en píxeles (por ejemplo, 600). El ajuste de un solo valor conserva las proporciones originales. La imagen se redimensionará y recortará automáticamente.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Establezca el ancho y el alto en píxeles. Establecer un solo valor conserva las proporciones originales. La imagen cambiará de tamaño y se recortará automáticamente.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Establezca el ancho en píxeles. Si no se establece el ancho, el mapa tomará el ancho completo y mantendrá la altura. O use el ancho solo para definir el punto de interrupción desde el cual el mapa comienza a encogerse preservando la relación de aspecto.", "Set the width of the dropbar content.": "Establezca el ancho del contenido de la barra desplegable.", "Set whether it's an ordered or unordered list.": "Establezca si es una lista ordenada o desordenada.", "Sets": "Conjuntos", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Establecer solo un valor preserva las proporciones originales. La imagen se redimensionará y recortará automáticamente y, cuando sea posible, las imágenes de alta resolución se generarán automáticamente.", "Setting Menu Items": "Configuración de los elementos del menú", "Setting the Blog Content": "Configuración del contenido del blog", "Setting the Blog Image": "Configuración de la imagen del blog", "Setting the Blog Layout": "Configuración del diseño del blog", "Setting the Blog Navigation": "Configuración de la navegación del blog", "Setting the Dialog Layout": "Configuración del diseño del cuadro de diálogo", "Setting the Header Layout": "Configuración del diseño del encabezado", "Setting the Main Section Height": "Configuración de la altura de la sección principal", "Setting the Minimum Stability": "Establecer la estabilidad mínima", "Setting the Mobile Dialog Layout": "Configuración del diseño del cuadro de diálogo móvil", "Setting the Mobile Header Layout": "Configuración del diseño del encabezado móvil", "Setting the Mobile Navbar": "Configuración de la barra de navegación móvil", "Setting the Mobile Search": "Configuración de la búsqueda móvil", "Setting the Module Appearance Options": "Configuración de las opciones de apariencia del módulo", "Setting the Module Default Options": "Configuración de las opciones predeterminadas del módulo", "Setting the Module Grid Options": "Configuración de las opciones de cuadrícula del módulo", "Setting the Module List Options": "Configuración de las opciones de la lista de módulos", "Setting the Module Menu Options": "Configuración de las opciones del menú del módulo", "Setting the Navbar": "Configuración de la barra de navegación", "Setting the Page Layout": "Configuración de la barra de navegación", "Setting the Post Content": "Configuración del contenido de la publicación", "Setting the Post Image": "Configuración de la imagen de la publicación", "Setting the Post Layout": "Configuración del diseño de la publicación", "Setting the Post Navigation": "Configuración de la navegación de la publicación", "Setting the Sidebar Area": "Configuración del área de la barra lateral", "Setting the Sidebar Position": "Configuración de la posición de la barra lateral", "Setting the Source Order and Direction": "Configuración del orden y la dirección de la fuente", "Setting the Template Loading Priority": "Configuración de la prioridad de carga de la plantilla", "Setting the Template Status": "Configuración de la prioridad de carga de la plantilla", "Setting the Top and Bottom Areas": "Configuración de las áreas superior e inferior", "Setting the Top and Bottom Positions": "Configuración de las posiciones superior e inferior", "Setting the Widget Appearance Options": "Configuración de las opciones de apariencia del widget", "Setting the Widget Default Options": "Configuración de las opciones predeterminadas del widget", "Setting the Widget Grid Options": "Configuración de las opciones de cuadrícula de widgets", "Setting the Widget List Options": "Configuración de las opciones de la lista de widgets", "Setting the Widget Menu Options": "Configuración de las opciones del menú de widgets", "Setting the WooCommerce Layout Options": "Configuración de las opciones de diseño de WooCommerce", "Settings": "Ajustes", "Shop": "Comercio", "Shop and Search": "Compra y busca", "Short Description": "Breve descripción", "Show": "Mostrar", "Show %taxonomy%": "Mostrar %taxonomy%", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Muestre un banner para informar a sus visitantes de las cookies que utiliza su sitio web. Elija entre una simple notificación de que las cookies están cargadas o requiere un consentimiento obligatorio antes de cargarlas.", "Show a divider between grid columns.": "Mostrar un divisor entre las columnas de la cuadrícula.", "Show a divider between list columns.": "Muestre un divisor entre las columnas de la lista.", "Show a divider between text columns.": "Muestre un divisor entre columnas de texto.", "Show a separator between the numbers.": "Mostrar un separador entre los números.", "Show archive category title": "Mostrar el título de la categoría de archivo", "Show as disabled button": "Mostrar botón como deshabilitado", "Show author": "Mostrar autor", "Show below slideshow": "Mostrar bajo la presentación de diapositivas", "Show button": "Mostrar botón", "Show categories": "Mostrar categorías", "Show Category": "Mostrar Categoría", "Show close button": "Mostrar botón de cierre", "Show comment count": "Mostrar el contador de comentarios", "Show comments count": "Mostrar el contador de comentarios", "Show content": "Mostrar contenido", "Show Content": "Mostrar Contenido", "Show controls": "Mostrar controles", "Show current page": "Muestre un divisor entre columnas de texto", "Show date": "Mostrar fecha", "Show dividers": "Mostrar Divisores", "Show drop cap": "Mostrar \"Letra Capital\"", "Show filter control for all items": "Mostrar el control de filtro par todos los artículos", "Show headline": "Mostrar título", "Show home link": "Mostrar enlace de inicio", "Show hover effect if linked.": "Mostrar efecto al pasar el ratón por encima si está enlazado.", "Show intro text": "Mostrar texto de introducción", "Show Labels": "Mostrar Etiquetas", "Show link": "Mostrar el enlace", "Show lowest price": "Mostrar precio más bajo", "Show map controls": "Mostrar los controles del mapa", "Show message": "Mostrar mensaje", "Show name fields": "Mostrar campos de nombre", "Show navigation": "Mostrar navegador", "Show on hover only": "Mostrar solo al pasa el ratón por encima", "Show optional dividers between nav or subnav items.": "Muestra divisores opcionales entre elementos de navegación o subnav.", "Show or hide content fields without the need to delete the content itself.": "Mostrar u ocultar campos de contenido sin necesidad de eliminar el contenido en sí.", "Show or hide fields in the meta text.": "Mostrar u ocultar campos en el metatexto.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Muestre u oculte el elemento en el ancho de este dispositivo y más grande. Si todos los elementos están ocultos, las columnas, filas y secciones se ocultarán en consecuencia.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Muestre u oculte el enlace de inicio como primer elemento, así como la página actual como último elemento en la navegación de ruta de navegación.", "Show or hide the intro text.": "Muestra u oculta el texto de introducción.", "Show or hide the reviews link.": "Muestra u oculta el enlace de reseñas.", "Show or hide title.": "Mostrar u ocultar título.", "Show out of stock text as disabled button for simple products.": "Mostrar texto agotado como botón deshabilitado para productos simples.", "Show parent icon": "Mostrar icono de padre", "Show points of interest": "Mostrar puntos de interés", "Show popup on load": "Mostrar elemento emergente en carga", "Show rating": "Mostrar calificación", "Show result count": "Mostrar recuento de resultados", "Show result ordering": "Mostrar orden de resultados", "Show reviews link": "Mostrar enlace de reseñas", "Show Separators": "Mostrar Separadores", "Show space between links": "Mostrar espacio entre enlaces", "Show Start/End links": "Mostrar enlaces de Inicio/Final", "Show system fields for single posts. This option does not apply to the blog.": "Mostrar los campos del sistema para publicaciones individuales. Esta opción no se aplica al blog.", "Show system fields for the blog. This option does not apply to single posts.": "Mostrar campos del sistema para el blog. Esta opción no se aplica a las publicaciones individuales.", "Show tags": "Mostrar etiquetas", "Show Tags": "Mostrar etiquetas", "Show the content": "Mostrar el contenido", "Show the excerpt in the blog overview instead of the post text.": "Muestre el extracto en el resumen del blog en lugar del texto de la publicación.", "Show the image": "Mostrar la imagen", "Show the link": "Mostrar el enlace", "Show the lowest price instead of the price range.": "Muestra el precio más bajo en lugar del rango de precios.", "Show the menu text next to the icon": "Mostrar el texto del menú junto al icono", "Show the meta text": "Mostrar el meta texto", "Show the navigation label instead of title": "Mostrar la etiqueta de navegación en lugar del título", "Show the navigation thumbnail instead of the image": "Mostrar la miniatura de navegación en lugar de la imagen", "Show the sale price before or after the regular price.": "Muestra el precio de oferta antes o después del precio regular.", "Show the subtitle": "Mostrar el subtítulo", "Show the title": "Mostrar el título", "Show title": "Mostrar título", "Show Title": "Mostrar Título", "Shrink": "Encoger", "Sidebar": "Barra lateral", "Single %post_type%": "Solo %post_type%", "Single Article": "Artículo Solo", "Single Contact": "Contacto Solo", "Single Post": "Publicación Sola", "Single Post Pages": "Páginas de una Sola Publicación", "Site": "Sitio", "Site Title": "Título del Sitio", "Sixths": "Sextos", "Sixths 1-5": "Sextos 1-5", "Sixths 5-1": "Sextos 5-1", "Size": "Tamaño", "Slide": "Deslizar", "Slide %s": "Deslizar %s", "Slide all visible items at once": "Deslizar todos los elementos visibles a la vez", "Slide Bottom 100%": "Deslizar Abajo 100%", "Slide Bottom Medium": "Deslizar Abajo Mediano", "Slide Bottom Small": "Deslizar Abajo Corto", "Slide Left": "Deslizar Izquierda", "Slide Left 100%": "Deslizar Izquierda 100%", "Slide Left Medium": "Deslizar Izquierda Mediano", "Slide Left Small": "Deslizar Izquierda Corto", "Slide Right": "Deslizar Derecha", "Slide Right 100%": "Deslizar Derecha 100%", "Slide Right Medium": "Deslizar Derecha Mediano", "Slide Right Small": "Deslizar Derecha Corto", "Slide Top": "Deslizar Arriba", "Slide Top 100%": "Deslizar Arriba 100%", "Slide Top Medium": "Deslizar Arriba Mediano", "Slide Top Small": "Deslizar Arriba Corto", "Slidenav": "Diapositiva de navegación (slidenav)", "Slider": "Deslizador (slider)", "Slideshow": "Diapositivas (slideshow)", "Slug": "Slug", "Small": "Pequeño", "Small (Phone Landscape)": "Pequeño (Móvil Horizontal)", "Smart Search": "Busqueda Inteligente", "Smart Search Item": "Elemento de Búsqueda Inteligente", "Social": "Social", "Social Icons": "Iconos sociales", "Social Icons Gap": "Iconos sociales de Gap", "Social Icons Size": "Tamaño de los iconos sociales", "Soft-light": "Luz Suave", "Source": "Fuente", "Split Items": "Dividir Elementos", "Split the dropdown into columns.": "Divida la lista desplegable en columnas.", "Spread": "Propagación (spread)", "Square": "Cuadrado", "Stable": "Estable", "Stack columns on small devices or enable overflow scroll for the container.": "Apilar las columnas en dispositivos pequeños o habilite el desplazamiento de desbordamiento para el contenedor.", "Stacked": "apilado", "Stacked (Name fields as grid)": "Apilado (nombre de los campos como cuadrícula)", "Stacked Center A": "Centro Apilado A", "Stacked Center B": "Centro Apilado B", "Stacked Center C": "Centro apilado C", "Stacked Center Split A": "División central apilada A", "Stacked Center Split B": "División central apilada B", "Stacked Justify": "Justificación apilada", "Stacked Left": "Apilado a la izquierda", "Start": "Empezar", "Start with all items closed": "Empezar con todos los elementos cerrados", "Starts with": "Comienza con", "State or County": "Estado o condado", "Static": "Estático", "Status": "Estado", "Stick the navbar at the top of the viewport while scrolling or only when scrolling up.": "Coloque la barra de navegación en la parte superior de la ventana gráfica mientras se desplaza o solo cuando se desplaza hacia arriba.", "Sticky": "Pegajoso", "Sticky Effect": "Efecto pegajoso", "Sticky on scroll up": "Adhesivo al desplazarse hacia arriba", "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.": "La sección adhesiva quedará cubierta por la siguiente sección mientras se desplaza. Revelar sección por sección anterior.", "Stretch the dropdown to the width of the navbar or the navbar container.": "Estire el menú desplegable al ancho de la barra de navegación o el contenedor de la barra de navegación.", "Stretch the panel to match the height of the grid cell.": "Estire el panel para que coincida con la altura de la celda de la rejilla.", "Striped": "A rayas", "Style": "Estilo", "Sublayout": "Subdiseño", "Subnav": "Subnavegación", "Subnav (Nav)": "Subnav (navegación)", "Subnav Divider (Nav)": "Subdivisor de navegación (Nav)", "Subnav Pill (Nav)": "Píldora Subnav (Nav)", "Subtitle": "Subtítulo", "Success": "Éxito", "Support": "Soporte", "Support Center": "Centro de Soporte", "SVG Color": "Color SVG", "Switch prices": "Cambiar precios", "Switcher": "Conmutador", "Syntax Highlighting": "Resaltado de sintaxis", "System Assets": "Activos del Sistema", "System Check": "Comprobación del Sistema", "Tab": "Pestaña", "Table": "Tabla", "Table Head": "Encabezamiento de Tabla", "Tablet Landscape": "Tableta en Horizontal", "Tabs": "Pestañas", "Tag": "Etiqueta", "Tag Item": "Etiquetar artículo", "Tag Order": "Orden de Etiquetas", "Tagged Items": "Elementos Etiquetados", "Tags": "Etiquetas", "Tags are only loaded from the selected parent tag.": "Las etiquetas solo se cargan desde la etiqueta principal seleccionada.", "Tags Operator": "Operador de Etiquetas", "Target": "Objetivo", "Taxonomy Archive": "Archivo de taxonomía", "Teaser": "Teaser", "Telephone": "Teléfono", "Template": "Plantilla", "Templates": "Plantillas", "Term ID": "ID de Término", "Term Order": "Orden de Términos", "Tertiary": "Terciario", "Text": "Texto", "Text Alignment": "Alineación del texto", "Text Alignment Breakpoint": "Punto de ruptura de la alineación del texto", "Text Alignment Fallback": "Alineación de texto", "Text Bold": "Texto Negrilla", "Text Color": "Texto Color", "Text Large": "Texto Grande", "Text Lead": "Texto Líder", "Text Meta": "Texto Meta", "Text Muted": "Texto Opaco", "Text Small": "Texto Pequeño", "Text Style": "Estilo del Texto", "The Accordion Element": "El Elemento Acordeón", "The Alert Element": "El Elemento Alerta", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "La animación comienza y se detiene según la posición del elemento en la ventana gráfica. Alternativamente, use la posición de un contenedor principal.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.": "La animación comienza cuando el elemento ingresa a la ventana gráfica y finaliza cuando sale de la ventana gráfica. Opcionalmente, establezca un desplazamiento inicial y final, p. <code>100px</code>, <code>50vh</code> o <code>50vh + 50%</code>. El porcentaje se relaciona con la altura del elemento.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "La animación comienza cuando el elemento ingresa a la ventana gráfica y finaliza cuando sale de la ventana gráfica. Opcionalmente, establezca un desplazamiento inicial y final, p. <code>100px</code>, <code>50vh</code> o <code>50vh + 50%</code>. El porcentaje se relaciona con la altura del objetivo.", "The animation starts when the row enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the row's height.": "La animación comienza cuando la fila ingresa a la ventana gráfica y finaliza cuando sale de la ventana gráfica. Opcionalmente, establezca un desplazamiento inicial y final, p. <code>100px</code>, <code>50vh</code> o <code>50vh + 50%</code>. El porcentaje se relaciona con la altura de la fila.", "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.": "El módulo de Apache <code>mod_pagespeed</code> puede provocar problemas de visualización en el elemento del mapa con OpenStreetMap.", "The Area Element": "El elemento de área", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "La barra en la parte superior empuja el contenido hacia abajo, mientras que la barra en la parte inferior está fija por encima del contenido.", "The Breadcrumbs Element": "El Elemento de Ruta de Navegación", "The builder is not available on this page. It can only be used on pages, posts and categories.": "El constructor no está disponible en esta página. Solo se puede usar en páginas, publicaciones y categorías.", "The Button Element": "El Elemento Botón", "The changes you made will be lost if you navigate away from this page.": "Los cambios realizados se perderán si navega fuera de esta página.", "The Code Element": "El Elemento de Codigo", "The Countdown Element": "El Elemento de Cuenta Regresiva", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "El orden predeterminado seguirá el orden establecido por los corchetes o recurrirá al orden de archivos predeterminado establecido por el sistema.", "The Description List Element": "El Elemento de la Lista de Descripción", "The Divider Element": "El Elemento Divisor", "The Gallery Element": "El Elemento de Galería", "The Grid Element": "El Elemento de Cuadrícula", "The Headline Element": "El Elemento del Título", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "La altura se puede adaptar a la altura de la ventana gráfica. <br> <br> Nota: asegúrese de que no se establezca ninguna altura en la configuración de la sección cuando utilice una de las opciones de la ventana gráfica.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "La altura se adaptará automáticamente en función de su contenido. Alternativamente, la altura puede adaptarse a la altura de la \"ventana gráfica visible\" (viewport). <br><br> Nota: asegúrese de que no se haya establecido una altura en la configuración de la sección al utilizar una de las opciones de la ventana gráfica.", "The Icon Element": "El Elemento Icono", "The Image Element": "El Elemento de Imagen", "The List Element": "El Elemento de Lista", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "El logo se coloca automáticamente entre los artículos. Opcionalmente, establezca el número de elementos después del cual se dividen.", "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.": "Se utilizará el texto del logotipo, si no se ha elegido ninguna imagen del logotipo. Si se ha seleccionado una imagen, se utilizará como atributo de etiqueta aria en el enlace.", "The Map Element": "El Elemento del Mapa", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "El efecto de mampostería crea un diseño libre de espacios, incluso si los elementos de la cuadrícula tienen diferentes alturas. ", "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.": "La estabilidad mínima de las actualizaciones del tema. Se recomienda estable para sitios web de producción, Beta es solo para probar nuevas funciones e informar problemas.", "The Module Element": "El elemento del módulo", "The module maximum width.": "Anchura máxima del módulo.", "The Nav Element": "El Elemento de Navegación", "The Newsletter Element": "El elemento del boletín", "The Overlay Element": "Elemento de superposición", "The Overlay Slider Element": "Elemento deslizante de superposición", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "La página ha sido actualizada por %modifiedBy%. ¿Desechar sus cambios y volver a cargar la página?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "La página que está editando actualmente ha sido actualizada por %modified_by%. Al guardar sus cambios se sobrescribirán los cambios anteriores. ¿Desea guardar de todos modos o descartar sus cambios y volver a cargar la página?", "The Pagination Element": "Elemento de paginación", "The Panel Element": "Elemento de panel", "The Panel Slider Element": "Elemento de panel deslizante", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels.": "La animación de parallax mueve columnas individuales de la cuadrícula a diferentes velocidades mientras se desplaza. Defina el desplazamiento del parallax vertical en píxeles.", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.": "La animación de parallax mueve columnas individuales de la cuadrícula a diferentes velocidades mientras se desplaza. Defina el desplazamiento del parallax vertical en píxeles. Alternativamente, mueva columnas con diferentes alturas hasta que se justifiquen en la parte inferior.", "The Popover Element": "Elemento emergente", "The Position Element": "El elemento de posición", "The Quotation Element": "El Elemento de Comentario", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "El complemento RSFirewall corrompe el contenido del generador. Deshabilite la función <em>Convertir direcciones de correo electrónico de texto sin formato a imágenes</em> en la<a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\"> Configuración de RSFirewall </a>.", "The Search Element": "Elemento de búsqueda", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "El complemento SEBLOD hace que el generador no esté disponible. Deshabilite la función <em>Ocultar el icono de edición</em> en la<a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\"> la configuración de SEBLOD </a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "La presentación de diapositivas siempre ocupa todo el ancho, y la altura se adaptará automáticamente en función de la proporción definida. Alternativamente, la altura puede adaptarse a la altura de la \"ventana gráfica visible\" (viewport). <br><br> Nota: asegúrese de que no se haya establecido una altura en la configuración de la sección al utilizar una de las opciones de la ventana gráfica visible.", "The Slideshow Element": "Elemento de presentación de diapositivas", "The Social Element": "Elemento social", "The Sublayout Element": "El Elemento de Subdiseño", "The Subnav Element": "El Elemento Subnav", "The Switcher Element": "Elemento conmutador", "The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.": "El modo de depuración del sistema genera demasiados datos de sesión que pueden provocar un comportamiento inesperado. Deshabilitar el modo de depuración.", "The Table Element": "El Elemento Tabla", "The template is only assigned to %taxonomies% if the selected terms are set in the URL. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "La plantilla solo se asigna a %taxonomies% si los términos seleccionados están establecidos en la URL. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varios términos.", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "La plantilla solo se asigna a artículos con las etiquetas seleccionadas. Utilice la tecla <kbd> shift </kbd> o <kbd> ctrl/cmd </kbd> para seleccionar varias etiquetas.", "The template is only assigned to categories if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "La plantilla solo se asigna a categorías si las etiquetas seleccionadas están configuradas en el elemento del menú. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varias etiquetas.", "The template is only assigned to contacts with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "La plantilla solo se asigna a contactos con las etiquetas seleccionadas. Utilice la tecla <kbd> shift </kbd> o <kbd> ctrl/cmd </kbd> para seleccionar varias etiquetas.", "The template is only assigned to the selected pages.": "La plantilla solo se asigna a las páginas seleccionadas.", "The Text Element": "Elemento de texto", "The Totop Element": "Elemento hacia arriba", "The Video Element": "Elemento de vídeo", "The Widget Element": "El elemento widget", "The widget maximum width.": "El ancho máximo del widget.", "The width of the grid column that contains the module.": "El ancho de la columna de cuadrícula que contiene el módulo.", "The width of the grid column that contains the widget.": "El ancho de la columna de cuadrícula que contiene el widget.", "The YOOtheme API key, which enables <span class=\"uk-text-nowrap\">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Falta la clave API de YOOtheme, que permite <span class=\"uk-text-nowrap\"> 1 clic </span> actualizaciones y acceso a la biblioteca de diseño. Cree una clave de API en la <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\"> configuración de la cuenta </a> .", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "La carpeta de temas de YOOtheme Pro fue renombrada rompiendo su funcionalidad esencial. Vuelva a cambiar el nombre de la carpeta de temas a <code>yootheme</code>.", "Theme Settings": "Ajustes de tema", "Thirds": "Tercios", "Thirds 1-2": "Tercios 1-2", "Thirds 2-1": "Tercios 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Esta carpeta almacena las imágenes que se descargaron al utilizar los diseños de la librería de YOOtheme Pro. Esta situada dentro de la carpeta de imágenes de Joomla.", "This is only used, if the thumbnail navigation is set.": "Esto solo se usa si se establece la navegación en miniatura.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Este diseño incluye una imagen que debe ser descargada en la biblioteca multimedia de su sitio web. |||| Este diseño incluye %smart_count% imágenes que deben ser descargadas en la biblioteca multimedia de su sitio web.", "This option doesn't apply unless a URL has been added to the item.": "Esta opción no se aplica a menos que se haya agregado una URL al artículo.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Esta opción no se aplica a menos que se haya agregado una URL al artículo. Solo el contenido del elemento estará vinculado.", "This option is only used if the thumbnail navigation is set.": "Esto solo se usa si se establece la navegación en miniatura.", "Thumbnail": "Miniatura", "Thumbnail Inline SVG": "Miniatura en línea SVG", "Thumbnail SVG Color": "Color miniatura SVG", "Thumbnail Width/Height": "Ancho / Altura de la miniatura", "Thumbnail Wrap": "Envoltura de miniatura", "Thumbnails": "Miniaturas", "Thumbnav": "Navegación en miniatura", "Thumbnav Inline SVG": "Miniatura de navegación en línea SVG", "Thumbnav SVG Color": "Color de Miniatura de navegación SVG", "Thumbnav Wrap": "Envoltura de Miniatura de navegación SVG", "Tile Checked": "Mosaico marcado", "Tile Default": "Mosaico predeterminado", "Tile Muted": "Mosaico apagado", "Tile Primary": "Mosaico primario", "Tile Secondary": "Mosaico Secundario", "Time Archive": "Archivo de tiempo", "Title": "Título", "title": "título", "Title Decoration": "Decoración del Título", "Title Margin": "Margen del Título", "Title Parallax": "Título del paralelaje", "Title Style": "Estilo del título", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Los estilos de título difieren en tamaño de fuente, pero también pueden tener un color, tamaño y fuente predefinidos.", "Title Width": "Ancho del título", "Title, Image, Meta, Content, Link": "Título, Imagen, Meta, Contenido, Enlace", "Title, Meta, Content, Link, Image": "Título, Meta, Contenido, Enlace, Imagen", "To left": "A la izquierda", "To right": "A derecha", "To Top": "Ir arriba", "Toolbar": "Barra de herramientas", "Toolbar Left End": "Final izquierdo de la barra de herramientas", "Toolbar Left Start": "Inicio izquierdo de la barra de herramientas", "Toolbar Right End": "Final derecho de la barra de herramientas", "Toolbar Right Start": "Inicio derecho de la barra de herramientas", "Top": "Arriba", "Top Center": "Centro Superior", "Top Left": "Arriba a la izquierda", "Top Right": "Arriba Derecha", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Las imágenes alineadas en la parte superior, inferior, izquierda o derecha se pueden adjuntar al borde de la tarjeta. Si la imagen está alineada hacia la izquierda o hacia la derecha, también se extenderá para cubrir todo el espacio.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Las imágenes alineadas en la parte superior, izquierda o derecha pueden fijarse al borde de la tarjeta. Si la imagen está alineada a la izquierda o a la derecha, también se extenderá para cubrir todo el espacio.", "Total Views": "Vistas Totales", "Touch Icon": "Icono Tactil", "Transform": "Transformar", "Transform Origin": "Transformar Origen", "Transform the element into another element while keeping its content and settings. Unused content and settings are removed. Transforming into a preset only keeps the content but adopts all preset settings.": "Transforma el elemento en otro elemento manteniendo su contenido y configuración. Se eliminan el contenido y la configuración no utilizados. La transformación en un ajuste preestablecido solo conserva el contenido pero adopta todas las configuraciones preestablecidas.", "Transition": "Transición", "Translate X": "Mover en X", "Translate Y": "Mover en Y", "Transparent Header": "Cabecera transparente", "Tuesday, Aug 06 (l, M d)": "Tuesday, Aug 06 (l, M d)", "Type": "Tipo", "ul": "ul", "Understanding Status Icons": "Comprensión de los iconos de estado", "Understanding the Layout Structure": "Comprensión de la estructura de diseño", "Unknown %type%": "%type% Desconocido", "Unpublished": "No Publicado", "Updating YOOtheme Pro": "Actualización de YOOtheme Pro", "Upload": "Subir", "Upload a background image.": "Cargar una imagen de fondo.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Cargue una imagen de fondo opcional que cubra la página. La imagen se ajustará mientras se desplaza.", "Upload Layout": "Cargar diseño", "Upload Preset": "Cargar preajuste", "Upload Style": "Cargar estilo", "Upsell Products": "Productos mejorados", "Url": "URL", "URL Protocol": "Protocolo URL", "Use a numeric pagination or previous/next links to move between blog pages.": "Usar una paginación numérica o enlaces anteriores/siguientes para moverse entre las páginas del blog.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Use una altura mínima opcional para evitar que las imágenes se vuelvan más pequeñas que el contenido en dispositivos pequeños.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Use una altura mínima opcional para evitar que el control deslizante se vuelva más pequeño que su contenido en dispositivos pequeños.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Use una altura mínima opcional para evitar que la presentación de diapositivas se vuelva más pequeña que su contenido en dispositivos pequeños.", "Use as breakpoint only": "Utilizar solo como punto de ruptura", "Use double opt-in.": "Utilizar doble opt-in.", "Use excerpt": "Utilizar extracto", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Use el color de fondo en combinación con los modos de fusión, una imagen transparente o para llenar el área si la imagen no cubre toda la página.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Utilice el color de fondo en combinación con los modos de mezcla, o una imagen transparente para rellenar el área, si la imagen no cubre toda la sección.", "Use the background color in combination with blend modes.": "Usar el color de fondo en combinación con los modos de fusión.", "User": "Usuario", "User Group": "Grupo de usuario", "User Groups": "Grupos de Usuarios", "Username": "Nombre de usuario", "Users": "Usuarios", "Users are only loaded from the selected roles. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple roles.": "Los usuarios solo se cargan desde los roles seleccionados. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varios roles.", "Users are only loaded from the selected user groups. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple user groups.": "Los usuarios solo se cargan desde los grupos de usuarios seleccionados. Utilice la tecla <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> para seleccionar varios grupos de usuarios.", "Using Advanced Custom Fields": "Uso de campos personalizados avanzados", "Using Content Fields": "Usar campos de contenido", "Using Content Sources": "Usar fuentes de contenido", "Using Custom Fields": "Usar campos personalizados", "Using Custom Post Type UI": "Uso de la interfaz de usuario de tipo de publicación personalizada", "Using Custom Post Types": "Uso de tipos de publicaciones personalizadas", "Using Custom Sources": "Usar fuentes personalizadas", "Using Dynamic Conditions": "Usar condiciones dinámicas", "Using Dynamic Multiplication": "Usando la Multiplicación Dinámica", "Using Elements": "Usando elementos", "Using External Sources": "Usar Fuentes Externas", "Using Images": "Usando imágenes", "Using Links": "Uso de enlaces", "Using Menu Location Options": "Usando Opciones de Ubicación del Menú", "Using Menu Locations": "Uso de ubicaciones de menús", "Using Menu Position Options": "Usando Opciones de Posición del Menú", "Using Menu Positions": "Uso de posiciones de menú", "Using Module Positions": "Uso de posiciones de módulo", "Using My Layouts": "Uso de mis diseños", "Using My Presets": "Uso de mis ajustes preestablecidos", "Using Page Sources": "Usar fuentes de página", "Using Parent Sources": "Usando Fuentes de Padre", "Using Powerful Posts Per Page": "Uso de publicaciones poderosas (powerful) por página", "Using Pro Layouts": "Uso de publicaciones poderosas por página", "Using Pro Presets": "Usando Ajustes Profesionales", "Using Related Sources": "Uso de fuentes relacionadas", "Using Site Sources": "Usando Fuentes del Sitio", "Using the Before and After Field Options": "Uso de las opciones de campo Antes y Después", "Using the Builder Module": "Usando el módulo Constructor (Builder)", "Using the Builder Widget": "Uso del widget de constructor", "Using the Categories and Tags Field Options": "Uso de las opciones de campo de categorías y etiquetas", "Using the Content Field Options": "Uso de las opciones del campo de contenido", "Using the Content Length Field Option": "Uso de la opción de campo de longitud de contenido", "Using the Contextual Help": "Uso de la ayuda contextual", "Using the Date Format Field Option": "Uso de la opción de campo de formato de fecha", "Using the Device Preview Buttons": "Uso de los botones de vista previa del dispositivo", "Using the Dropdown Menu": "Uso de la animación del menú desplegable", "Using the Element Finder": "Usando el Buscador de Elementos", "Using the Footer Builder": "Uso del generador de pie de página", "Using the Media Manager": "Uso del Administrador de medios", "Using the Mega Menu Builder": "Usando el Editor de Mega Menús", "Using the Menu Module": "Uso del módulo de menú", "Using the Menu Widget": "Uso del widget de menú", "Using the Meta Field Options": "Uso de las opciones de metacampo", "Using the Page Builder": "Usando el Creador de páginas", "Using the Search and Replace Field Options": "Uso de las opciones de campo de búsqueda y reemplazo", "Using the Sidebar": "Usando la barra lateral", "Using the Tags Field Options": "Uso de las opciones de campo de etiquetas", "Using the Teaser Field Options": "Uso de las opciones de campo de avance", "Using the Toolbar": "Usando la barra de herramientas", "Using the Unsplash Library": "Uso de la biblioteca Unsplash", "Using the WooCommerce Builder Elements": "Usando el Editor de Elementos de WooCommerce", "Using the WooCommerce Page Builder": "Usando el Editor de Páginas de WooCommerce", "Using the WooCommerce Pages Element": "Usando el Elemento de Páginas de WooCommerce", "Using the WooCommerce Product Stock Element": "Usando el Elemento de Inventario de Productos WooCommerce", "Using the WooCommerce Products Element": "Usando el Elemento de Productos WooCommerce", "Using the WooCommerce Related and Upsell Products Elements": "Usando los Elementos de Productos Relacionados y de Venta Adicional de WooCommerce", "Using the WooCommerce Style Customizer": "Usando el Personalizador de Estilo de WooCommerce", "Using the WooCommerce Template Builder": "Usando el Editor de Plantillas de WooCommerce", "Using Toolset": "Usando el conjunto de herramientas", "Using Widget Areas": "Usar áreas de widgets", "Using WooCommerce Dynamic Content": "Usando Contenido Dinámico de WooCommerce", "Using WordPress Category Order and Taxonomy Terms Order": "Uso de orden de categoría de WordPress y orden de términos de taxonomía", "Using WordPress Popular Posts": "Uso de publicaciones populares de WordPress", "Using WordPress Post Types Order": "Uso del orden de tipos de publicaciones de WordPress", "Value": "Valor", "Values": "Valores", "Variable Product": "Producto Variable", "Velocity": "Velocidad", "Version %version%": "Versión %version%", "Vertical": "Vertical", "Vertical Alignment": "Alineación Vertical", "Vertical navigation": "Navegación vertical", "Vertically align the elements in the column.": "Alinear verticalmente los elementos en la columna.", "Vertically center grid items.": "Centrar verticalmente los elementos de la cuadrícula.", "Vertically center table cells.": "Centrar verticalmente las celdas de la tabla.", "Vertically center the image.": "Centrar verticalmente la imagen.", "Vertically center the navigation and content.": "Centrado vertical de la navegación y el contenido.", "Video": "Vídeo", "Videos": "Videos", "View Photos": "Ver Fotografías", "Viewport": "Ventana gráfica disponible (viewport)", "Viewport Height": "Altura de la ventana gráfica", "Visibility": "Visibilidad", "Visible Large (Desktop)": "Visible Grande (Escritorio)", "Visible Medium (Tablet Landscape)": "Visible Medio (Tableta Horizontal)", "Visible on this page": "Visible en esta página", "Visible Small (Phone Landscape)": "Visible Pequeño (Teléfono Horizontal)", "Visible X-Large (Large Screens)": "Visible XL (Pantallas Grandes)", "Visual": "Visual", "Votes": "Votos", "Warning": "Advertencia", "Website": "Página web", "Website Url": "URL del sitio web", "What's New": "Qué hay de nuevo", "When using cover mode, you need to set the text color manually.": "Al usar el modo de portada, debe establecer el color del texto manualmente.", "Whole": "Todo", "Widget": "Widget", "Widget Area": "Ärea del Widget", "Width": "Ancho", "Width 100%": "Ancho 100%", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "El ancho y la altura se invertirán en consecuencia, si la imagen está en formato vertical u horizontal.", "Width/Height": "Ancho / Altura", "With mandatory consent": "Con consentimiento obligatorio", "Woo Notices": "Avisos de Woo", "Woo Pages": "Páginas de Woo", "WooCommerce": "WooCommerce", "Working with Multiple Authors": "Trabajar con varios autores", "X": "X", "X-Large": "extragrande", "X-Large (Large Screens)": "X-Large (Pantallas Grandes)", "X-Small": "Extra-pequeño", "Y": "Y", "Year Archive": "Archivo del año", "YOOtheme API Key": "Clave API de YOOtheme", "YOOtheme Help": "Ayuda de Yootheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro está completamente operativo y listo para funcionar.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro no está operativo. Es necesario solucionar todos los errores críticos.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro está operativo, pero hay problemas que deben solucionarse para desbloquear funciones y mejorar el rendimiento.", "Z Index": "Índice Z", "Zoom": "Aumentar" }theme/languages/ja.json000064400000755557151666572140011146 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- 選択 -", "- Select Module -": "- モジュールの選択 -", "- Select Position -": "- ポジションの選択 -", "- Select Widget -": "- ウィジェットの選択 -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" は既にライブラリに存在します。保存時に上書きされます。", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% 要素", "%email% is already a list member.": "%s はすでにリストのメンバーです。", "%email% was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s は完全に削除されたため、再インポートできません。リストに戻るには、連絡先を再登録する必要があります。", "%label% - %group%": "%label% - %group%", "%label% (%depth%)": "%label% (%depth%)", "%label% Location": "%label% Location", "%label% Position": "%label% ポジション", "%name% already exists. Do you really want to rename?": "%name% もう存在しています。本当に名前を変更しますか?", "%name% Copy": "%name% コピー", "%name% Copy %index%": "%name% コピー %index%", "%post_type% Archive": "%post_type% アーカイブ", "%s is already a list member.": "%s はすでにリストのメンバーです。", "%s of %s": "%s of %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s は完全に削除されたため、再インポートできません。リストに戻るには、連絡先を再登録する必要があります。", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% コレクション |||| %smart_count% コレクション", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% 要素 |||| %smart_count% 要素", "%smart_count% File |||| %smart_count% Files": "%smart_count% ファイル |||| %smart_count% ファイル", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% ファイルが選択されました |||| %smart_count% ファイルが選択されました", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% アイコン |||| %smart_count% アイコン", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% レイアウト |||| %smart_count% レイアウト", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% メディア ファイルのダウンロードに失敗しました: |||| %smart_count% メディア ファイルのダウンロードに失敗しました:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% 画像 |||| %smart_count% 画像", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% プリセット |||| %smart_count% プリセット", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% スタイル |||| %smart_count% スタイル", "%smart_count% User |||| %smart_count% Users": "%smart_count% ユーザー |||| %smart_count% ユーザー", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% は、選択した親 %taxonomy% からのみロードされます。", "%title% %index%": "%title% %index%", "%type% Presets": "%type% プリセット", "<code>json_encode()</code> must be available. Install and enable the <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> extension.": "<code>json_encode()</code> が使用可能である必要があります。 <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> 拡張機能をインストールして有効にします。", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 列", "1 Column Content Width": "1 列のコンテンツ幅", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Column Grid": "2 列グリッド", "2 Column Grid (Meta only)": "2 列グリッド (メタのみ)", "2 Columns": "2 列", "20%": "20%", "25%": "25%", "2X-Large": "2X-大", "3 Columns": "3 列", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3rd Party Integration": "サードパーティ統合", "3X-Large": "3X- 大", "4 Columns": "4 列", "40%": "40%", "5 Columns": "5 列", "50%": "50%", "6 Aug, 1999 (j M, Y)": "1999年8月6日 (Y, M, D)", "6 Columns": "6 列", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": " ", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "メモリ制限を高くすることをお勧めします。 <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP 設定</a>で <code>memory_limit</code> を 128M に設定します。", "A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "アップロード制限を高くすることをお勧めします。 <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP 設定</a>で <code>post_max_size</code> を 8M に設定します。", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "アップロード制限を高くすることをお勧めします。 <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP 設定</a>で <code>upload_max_filesize</code> を 8M に設定します。", "About": "YOOthemeについて", "Above Content": "上記の内容", "Above Title": "上記のタイトル", "Absolute": "アブソリュート", "Accessed": "アクセス", "Accessed Date": "アクセス日", "Accordion": "アコーディオン", "Active": "有効", "Active Filters": "アクティブフィルター", "Active Filters Count": "アクティブフィルター数", "Active item": "有効なアイテム", "Add": "追加", "Add a colon": "列を追加", "Add a comma-separated list of font weights to load, e.g. 300, 400, 600. Look up available variants at <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.": "読み込むフォント ウェイトのコンマ区切りリストを追加します (例: 300、400、600)。使用可能なバリアントについては、<a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a> を参照してください。", "Add a leader": "リーダーを追加", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "スクロール中にパララックス効果を追加するか、ビューポートに関する背景を修正します。", "Add a parallax effect.": "視差効果を追加", "Add a stepless parallax animation based on the scroll position.": "スクロール位置に応じた無段階視差アニメーションを追加します。", "Add animation stop": "アニメーションストップを追加", "Add bottom margin": "下マージンの追加", "Add clipping offset": "クリッピングオフセットを追加", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "カスタム CSS または Less をサイトに追加します。すべての Less テーマ変数と mixin が利用可能です。<code><style></code> タグは必要ありません。", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "カスタム JavaScript をサイトに追加します。 <code><script></code> タグは必要ありません。", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Cookie を設定するカスタム JavaScript を追加します。同意が得られた後に読み込まれます。 <code><script></code> タグは必要ありません。", "Add Element": "要素の追加", "Add extra margin to the button.": "ボタンにマージンを追加します。", "Add Folder": "フォルダーを追加", "Add hover style": "ホバースタイルを追加", "Add Item": "アイテムを追加", "Add margin between": "間にマージンを追加", "Add Media": "メディアを追加", "Add Menu Item": "メニュー項目を追加", "Add Module": "モジュールの追加", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "複数のストップを追加して、アニメーション シーケンスに沿って開始色、中間色、および終了色を定義します。必要に応じて、パーセンテージを指定して、アニメーション シーケンスに沿ってストップを配置します。", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "アニメーションシーケンスに沿って、開始、中間、終了の不透明度を定義するために複数のストップを追加します。オプションで、アニメーションシーケンスに沿ってストップを配置するパーセンテージを指定します。", "Add Row": "行を追加する", "Add Section": "セクションを追加", "Add text after the content field.": "コンテンツ フィールドの後にテキストを追加します。", "Add text before the content field.": "コンテンツ フィールドの前にテキストを追加します。", "Add to Cart": "カートに追加", "Add to Cart Link": "カートリンクに追加", "Add to Cart Text": "カートテキストに追加", "Add top margin": "上に余白を追加", "Adding a New Page": "新しいページの追加", "Adding the Logo": "ロゴの追加", "Adding the Search": "検索の追加", "Adding the Social Icons": "ソーシャル アイコンの追加", "Additional Information": "追加情報", "Address": "アドレス", "Advanced": "高度な設定", "Advanced WooCommerce Integration": "高度な WooCommerce 統合", "After": "後", "After 1 Item": "1 アイテム後", "After 10 Items": "10 アイテム後", "After 2 Items": "2 アイテム後", "After 3 Items": "3 アイテム後", "After 4 Items": "4 アイテム後", "After 5 Items": "5 アイテム後", "After 6 Items": "6 アイテム後", "After 7 Items": "7 アイテム後", "After 8 Items": "8 アイテム後", "After 9 Items": "9 アイテム後", "After Display Content": "表示コンテンツ後", "After Display Title": "表示タイトル後", "After Submit": "送信後", "Alert": "アラート", "Alias": "通称", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "ドロップダウンをメニュー項目またはナビゲーション バーに合わせます。必要に応じて、ドロップバーと呼ばれる全幅のセクションにそれらを表示し、ドロップダウンを示すアイコンを表示し、ホバーではなくクリックでテキスト項目を開くことができます。", "Align image without padding": "パディングなしで画像を整列する", "Align the filter controls.": "フィルターコントロールを整列させます", "Align the image to the left or right.": "画像を左または右に整列させます。", "Align the image to the top or place it between the title and the content.": "画像を上に揃えるか、タイトルとコンテンツの間に配置します。", "Align the image to the top, left, right or place it between the title and the content.": "画像を上、左、右に整列させるか、タイトルとコンテンツの間に配置します。", "Align the meta text.": "メタ テキストを揃えます。", "Align the navigation items.": "ナビゲーション項目を揃えます。", "Align the section content vertically, if the section height is larger than the content itself.": "セクションの高さがコンテンツ自体よりも大きい場合は、セクションのコンテンツを垂直に揃えます。", "Align the title and meta text as well as the continue reading button.": "タイトルとメタテキスト、およびリンクボタンを揃えます。", "Align the title and meta text.": "タイトルとメタ テキストを揃えます。", "Align the title to the top or left in regards to the content.": "タイトルは、コンテンツに対して上または左に揃えます。", "Align to filter bar": "フィルターバーに合わせる", "Align to navbar": "ナビゲーションバーに揃えます。", "Alignment": "整列", "Alignment Breakpoint": "整列のブレークポイント", "Alignment Fallback": "整列のフォールバック", "All %filter%": "全%filter%", "All %label%": "全%label%", "All backgrounds": "全ての背景", "All colors": "全ての色", "All except first page": "最初のページを除く全て", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "すべての画像は <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> の下でライセンスされています。許可を求めることなく、商用目的を含む無料の画像。", "All Items": "全てのアイテム", "All layouts": "全てのレイアウト", "All pages": "全てのページ", "All presets": "全てのプリセット", "All styles": "全てのスタイル", "All topics": "全てのトピック", "All types": "全てのタイプ", "All websites": "全てのウェブサイト", "All-time": "オールタイム", "Allow mixed image orientations": "画像の向きの混在を許可", "Allow multiple open items": "複数の開いているアイテムを許可", "Alphabetical": "アルファベット順", "Alphanumeric Ordering": "英数字順", "Alt": "Alt", "Alternate": "交互", "Always": "常に", "Animate background only": "背景のみアニメーション化", "Animate items": "アニメーションアイテム", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "プロパティを特定の値にアニメーション化します。複数のストップを追加して、各プロパティのアニメーション シーケンスに沿って開始値、中間値、および終了値を定義します。必要に応じて、パーセンテージを指定して、アニメーション シーケンスに沿ってストップを配置します。 Translate と scale には、オプションの <code>%</code>, <code>vw</code>、および <code>vh</code> 単位を使用できます。", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "プロパティを特定の値にアニメーション化します。複数のストップを追加して、アニメーション シーケンスに沿って開始値、中間値、および終了値を定義します。必要に応じて、パーセンテージを指定して、アニメーション シーケンスに沿ってストップを配置します。Translate には、オプションの<code>%</code>、<code>vw</code> 、および<code>vh</code>ユニットを含めることができます。", "Animate strokes": "アニメートストローク", "Animation": "アニメーション", "Animation Delay": "アニメーションの遅延", "Animations": "アニメーション", "Any": "どんなものでも", "Any Joomla module can be displayed in your custom layout.": "任意の Joomla モジュールをカスタム レイアウトで表示できます。", "Any WordPress widget can be displayed in your custom layout.": "任意の WordPress ウィジェットもカスタム レイアウトで表示できます。", "API Key": "API キー", "Apply a margin between the navigation and the slideshow container.": "ナビゲーションとスライドショー コンテナーの間にマージンを適用します。", "Apply a margin between the overlay and the image container.": "オーバーレイと画像コンテナの間にマージンを適用します。", "Apply a margin between the slidenav and the slider container.": "スライドナビとスライダー コンテナーの間にマージンを適用します。", "Apply a margin between the slidenav and the slideshow container.": "スライドナビとスライドショー コンテナの間にマージンを適用します。", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "要素がビューポートに入ったら、要素にアニメーションを適用します。スライド アニメーションは、固定オフセットまたは要素サイズの 100% で有効になります。", "Archive": "アーカイブ", "Are you sure?": "本当によろしいですか?", "ARIA Label": "ARIAラベル", "Article": "記事", "Article Count": "記事数", "Article Order": "記事の順序", "Articles": "記事", "As notification only ": "通知のみ ", "As superscript": "上付き文字として", "Ascending": "上方向へ", "Assigning Modules to Specific Pages": "モジュールを特定のページに割り当てる", "Assigning Templates to Pages": "テンプレートをページに割り当てる", "Assigning Widgets to Specific Pages": "特定のページへのウィジェットの割り当てる", "Attach the image to the drop's edge.": "画像をドロップの端に貼り付けます。", "Attention! Page has been updated.": "注意!ページが更新されました。", "Attribute Slug": "属性スラッグ", "Attribute Terms": "属性ターム", "Attribute Terms Operator": "属性条件オペレータ", "Attributes": "属性", "Aug 6, 1999 (M j, Y)": "1999年8月6日(YYYY,MM,JJ)", "August 06, 1999 (F d, Y)": "1999年8月6日(F d, Y)", "Author": "著者", "Author Archive": "著者アーカイブ", "Author Link": "著者リンク", "Auto": "自動", "Auto-calculated": "自動計算", "Autoplay": "自動再生", "Autoplay Interval": "自動再生間隔", "Avatar": "アバター", "Average Daily Views": "1日の平均視聴数", "b": "b", "Back": "戻る", "Back to top": "トップに戻る", "Background": "背景", "Background Color": "背景色", "Background Image": "背景画像", "Badge": "バッジ", "Bar": "バー", "Base Style": "基本スタイル", "Basename": "ベースネーム", "Before": "前", "Before Display Content": "表示コンテンツの前", "Behavior": "行動", "Below Content": "コンテンツの下", "Below Title": "タイトルの下", "Beta": "ベータ", "Between": "間", "Blank": "空欄", "Blend": "ブレンド", "Blend Mode": "ブレンドモード", "Blend the element with the page content.": "要素をページ・コンテンツとブレンドする。", "Blend with image": "画像とブレンドする", "Blend with page content": "ページコンテンツとブレンドする", "Block Alignment": "整列ブロック", "Block Alignment Breakpoint": "整列ブロックブレークポイント", "Block Alignment Fallback": "整列ブロックフォールバック", "Blog": "ブログ", "Blur": "ブラー", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrapは、デフォルトのJoomlaテンプレートファイルがロードされる場合にのみ必要です。jQuery JavaScriptライブラリに基づいてカスタムコードを記述するためにjQueryをロードします。", "Border": "ボーダー", "Bottom Center": "ボトムセンター", "Bottom Left": "左下", "Bottom Right": "右下", "Box Decoration": "ボックスデコレーション", "Box Shadow": "ボックスシャドウ", "Boxed": "ボックス入り", "Brackets": "ブラケット", "Breadcrumb": "パンくず", "Breadcrumbs": "ブレッドクラム", "Breadcrumbs Home Text": "ブレッドクラム ホームテキスト", "Breakpoint": "ブレークポイント", "Builder": "ビルダー", "Builder Module": "ビルダーモジュール", "Builder Widget": "ビルダーウィジェット", "Bullet": "バレット", "Button": "ボタン", "Button Danger": "ボタン警告", "Button Default": "デフォルトボタン", "Button Margin": "ボタンマージン", "Button Primary": "ボタン プライマリー", "Button Secondary": "ボタン セカンダリー", "Button Size": "ボタンサイズ", "Button Text": "ボタンテキスト", "Buttons": "ボタン", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "デフォルトでは、単一の項目を持つ関連ソースのフィールドがマッピングに使用できます。複数の項目を持つ関連ソースを選択して、そのフィールドをマッピングします。", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "デフォルトでは、画像は遅延ロードされます。初期ビューポートの画像のために熱心なローディングを有効にします。", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "デフォルトでは、カテゴライズされていない記事のみがページとして参照されます。あるいは、特定のカテゴリの記事をページとして定義します。", "By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.": "デフォルトでは、カテゴライズされていない記事のみがページとして参照されます。詳細設定でカテゴリを変更してください。", "Cache": "キャッシュ", "Campaign Monitor API Token": "キャンペーンモニターAPIトークン", "Cancel": "キャンセル", "Caption": "キャプション", "Card Default": "カードデフォルト", "Card Hover": "カードホバー", "Card Primary": "カードプライマリー", "Card Secondary": "カードセカンダリー", "Cart": "カート", "Cart Cross-sells Columns": "カートのクロスセル・コラム", "Cart Quantity": "カートの数量", "Categories": "カテゴリー", "Categories are only loaded from the selected parent category.": "カテゴリは、選択した親カテゴリからのみロードされます。", "Categories Operator": "カテゴリ演算子", "Category": "カテゴリー", "Category Blog": "カテゴリー ブログ", "Category Order": "カテゴリの順序", "Center": "中央", "Center Center": "中央 中央", "Center columns": "中央の列", "Center grid columns horizontally and rows vertically.": "グリッドの列を水平方向に、行を垂直方向に中央揃えします。", "Center horizontally": "水平方向に中央揃え", "Center Left": "中央 左", "Center Right": "中央 右", "Center rows": "中央の列", "Center the active slide": "アクティブなスライドを中央に配置", "Center the content": "コンテンツを中央に配置する", "Center the module": "モジュールを中央に配置する", "Center the title and meta text": "タイトルとメタテキストを中央揃えにする", "Center the title, meta text and button": "タイトル、メタテキスト、ボタンを中央揃えにする", "Center the widget": "ウィジェットを中央に配置する", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "中央、左、右の配置はブレークポイントに依存する場合があり、フォールバックが必要になります。", "Changed": "変更", "Changed Date": "変更日", "Changelog": "変更履歴", "Checkout": "チェックアウト", "Checkout Page": "チェックアウトページ", "Child %taxonomies%": "子 %taxonomies%", "Child %type%": "サブ%type%", "Child Categories": "子カテゴリー", "Child Menu Items": "子メニュー項目", "Child Tags": "子タグ", "Child Theme": "子テーマ", "Choose a divider style.": "仕切りのスタイルを選択します。", "Choose a map type.": "マップの種類を選択します。", "Choose between a navigation that shows filter controls separately in single dropdowns or a toggle button that shows all filters in a dropdown or an offcanvas dialog.": "フィルター コントロールを単一のドロップダウンに個別に表示するナビゲーションか、ドロップダウンまたはオフキャンバス ダイアログにすべてのフィルターを表示するトグル ボタンのどちらかを選択します。", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "スクロール位置に応じて視差を選択するか、スライドがアクティブになると適用されるアニメーションを選択します。", "Choose between a vertical or horizontal list.": "垂直リストまたは水平リストのいずれかを選択します。", "Choose between an attached bar or a notification.": "付属のバーまたは通知のいずれかを選択します。", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "前/次または数値ページネーションのいずれかを選択します。数値ページネーションは、単一の記事では使用できません。", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "前/次または数値ページネーションのいずれかを選択します。数値ページネーションは単一の投稿では使用できません。", "Choose Font": "フォントの選択", "Choose products of the current page or query custom products.": "現在のページの製品を選択するか、カスタム製品をクエリします。", "Choose the icon position.": "アイコンの位置を選択します。", "Choose the page to which the template is assigned.": "テンプレートが割り当てられているページを選択します。", "Circle": "丸", "City or Suburb": "都市または郊外", "Class": "クラス", "Classes": "クラス", "Clear Cache": "キャッシュの消去", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "キャッシュされた画像とアセットをクリアします。リサイズが必要な画像は、テーマのキャッシュフォルダに保存されます。同じ名前の画像を再アップロードしたら、キャッシュをクリアする必要があります。", "Click": "クリック", "Click on the pencil to pick an icon from the icon library.": "鉛筆をクリックして、アイコンライブラリからアイコンを選ぶ。", "Close": "閉じる", "Close Icon": "閉じるアイコン", "Close on background click": "バックグラウンドクリックで閉じる", "Cluster Icon (< 10 Markers)": "クラスターアイコン(10個未満)", "Cluster Icon (< 100 Markers)": "クラスターアイコン(100個未満)", "Cluster Icon (100+ Markers)": "クラスターアイコン(100個以上)", "Clustering": "クラスタリング", "Code": "コード", "Collapsing Layouts": "折りたたみレイアウト", "Collections": "コレクション", "Color": "色", "Color navbar parts separately": "ナビバーの部分別に色をつける", "Color-burn": "カラーバーン", "Color-dodge": "色かぶり", "Column": "列", "Column 1": "列 1", "Column 2": "列 2", "Column 3": "列 3", "Column 4": "列 4", "Column 5": "列 5", "Column 6": "列 6", "Column Gap": "列のギャップ", "Column Height": "列の高さ", "Column Layout": "列のレイアウト", "Column Parallax": "列のパララックス", "Column within Row": "行内の列", "Column within Section": "セクション内の列", "Columns": "列", "Columns Breakpoint": "列のブレークポイント", "Comment Count": "コメント数", "Comments": "コメント", "Components": "コンポーネント", "Condition": "コンディション", "Consent Button Style": "同意ボタンのスタイル", "Consent Button Text": "同意ボタンテキスト", "Contact": "コンタクト", "Contacts Position": "コンタクトポジション", "Contain": "コンテイン", "Container": "コンテナ", "Container Default": "コンテナ デフォルト", "Container Large": "コンテナ 大", "Container Padding": "コンテナ・パディング", "Container Small": "コンテナ 小", "Container Width": "コンテナ 幅", "Container X-Large": "コンテナ X-大", "Contains": "コンテイン", "Contains %element% Element": "%element% 要素が含まれています", "Contains %title%": "%title% が含まれています", "Content": "コンテンツ", "content": "内容", "Content Alignment": "コンテンツの調整", "Content Length": "コンテンツの長さ", "Content Margin": "コンテンツマージン", "Content Parallax": "コンテンツパララックス", "Content Type Title": "コンテンツタイプのタイトル", "Content Width": "コンテンツの幅", "Controls": "コントロール", "Convert": "変換", "Convert to title-case": "タイトルケースに変換", "Cookie Banner": "クッキーバナー", "Cookie Scripts": "クッキースクリプト", "Coordinates": "座標", "Copy": "コピー", "Countdown": "カウントダウン", "Country": "国", "Cover": "カバー", "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.": "グリッドアイテムの高さが異なる場合は、隙間のない石組みレイアウトを作成する。最も余裕のあるカラムにアイテムを詰め込むか、自然な順序で表示します。オプションで、パララックス・アニメーションを使用して、スクロール中に列を移動させ、一番下にちょうど収まるようにします。", "Create a general layout for the live search results. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "ライブ検索結果のレイアウトを作成します。新しいレイアウトを作成し、すぐに使える要素のコレクションから選択するか、レイアウトライブラリを参照して、あらかじめ構築されたレイアウトのいずれかから開始します。", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "このページタイプの一般的なレイアウトを作成します。新しいレイアウトから開始して、すぐに使用できる要素のコレクションから選択するか、レイアウト ライブラリを参照して、事前に構築されたレイアウトの1つから開始します。", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "すべてのページのフッターセクションのレイアウトを作成します。新しいレイアウトから開始して、すぐに使用できる要素のコレクションから選択するか、レイアウト ライブラリを参照して、事前に構築されたレイアウトの1つから開始します。", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "メニュー項目ドロップダウンのレイアウトを作成します。新しいレイアウトから開始して、すぐに使用できる要素のコレクションから選択するか、レイアウト ライブラリを参照して、事前に構築されたレイアウトの1つから開始します。", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "このモジュールのレイアウトを作成し、上部または下部の位置に公開します。新しいレイアウトから開始して、すぐに使用できる要素のコレクションから選択するか、レイアウト ライブラリを参照して、事前に構築されたレイアウトの1つから開始します。", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "このウィジェットのレイアウトを作成し、上部または下部の領域に公開します。新しいレイアウトから開始して、すぐに使用できる要素のコレクションから選択するか、レイアウト ライブラリを参照して、事前に構築されたレイアウトの1つから開始します。", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "レイアウトを作成します。新しいレイアウトから開始して、すぐに使用できる要素のコレクションから選択するか、レイアウト ライブラリを参照して、事前に構築されたレイアウトの1つから開始します。", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "現在のページに個別のレイアウトを作成します。新しいレイアウトから開始して、すぐに使用できる要素のコレクションから選択するか、レイアウト ライブラリを参照して、事前に構築されたレイアウトの1つから開始します。", "Create site-wide templates for pages and load their content dynamically into the layout.": "ページ用のサイト全体のテンプレートを作成し、そのコンテンツを動的にレイアウトに読み込みます。", "Created": "作成した", "Created Date": "作成日", "Creating a New Module": "新しいモジュールの作成", "Creating a New Widget": "新しいウィジェットの作成", "Creating Accordion Menus": "アコーディオンメニューの作成", "Creating Advanced Module Layouts": "高度なモジュールレイアウトの作成", "Creating Advanced Widget Layouts": "高度なウィジェット レイアウトの作成", "Creating Advanced WooCommerce Layouts": "高度な WooCommerce レイアウトの作成", "Creating Individual Post Layout": "個別ポストのレイアウト作成", "Creating Individual Post Layouts": "個別ポストのレイアウト作成", "Creating Menu Dividers": "メニュー区切り線の作成", "Creating Menu Heading": "メニュー見出しの作成", "Creating Menu Headings": "メニュー見出しの作成", "Creating Menu Text Items": "メニューテキスト項目の作成", "Creating Navbar Text Items": "ナビバーテキスト項目の作成", "Creating Parallax Effects": "パララックス効果の作成", "Creating Sticky Parallax Effects": "スティッキーパララックス効果の作成", "Critical Issues": "重要な問題", "Critical issues detected.": "重大な問題が検出されました。", "Cross-Sell Products": "クロスセル製品", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "<a href>%user%</a>によってキュレーションされました", "Current Layout": "現在のレイアウト", "Current Style": "現在のスタイル", "Current User": "現在の使用者", "Custom": "カスタム", "Custom %post_type%": "カスタム %post_type%", "Custom %post_types%": "カスタム %post_types%", "Custom %taxonomies%": "カスタム %taxonomies%", "Custom %taxonomy%": "カスタム %taxonomy%", "Custom Article": "カスタム記事", "Custom Articles": "カスタム記事", "Custom Categories": "カスタムカテゴリ", "Custom Category": "カスタムカテゴリ", "Custom Code": "カスタムコード", "Custom Fields": "カスタムフィールド", "Custom Menu Item": "カスタムメニュー", "Custom Menu Items": "カスタムメニュー項目", "Custom Product category": "カスタム製品カテゴリ", "Custom Product tag": "カスタム製品タグ", "Custom Query": "カスタムクエリ", "Custom Tag": "カスタムタグ", "Custom Tags": "カスタムタグ", "Custom User": "カスタムユーザー", "Custom Users": "カスタムユーザー", "Customization": "カスタマイズ", "Customization Name": "カスタマイズ名", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "選択したレイアウトのカラム幅をカスタマイズし、カラムの順序を設定します。レイアウトを変更すると、すべてのカスタマイズがリセットされます。", "Customizer": "カスタマイザー", "Danger": "警告", "Dark": "ダーク", "Dark Text": "ダークテキスト", "Darken": "暗くする", "Date": "日付", "Date Archive": "日付アーカイブ", "Date Format": "日付フォーマット", "Day Archive": "日アーカイブ", "Decimal": "十進数", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "見出しには、仕切りや箇条書き、あるいは見出しの縦中央に線を引いて装飾する。", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "タイトルは、仕切り、箇条書き、または見出しに垂直に中央に置かれた線で飾る。", "Decoration": "デコレーション", "Default": "デフォルト", "Default Link": "デフォルトリンク", "Define a background style or an image of a column and set the vertical alignment for its content.": "列の背景スタイルや画像を定義し、コンテンツの垂直アライメントを設定します。", "Define a custom background color or a color parallax animation instead of using a predefined style.": "定義済みのスタイルを使用する代わりに、カスタム背景色またはカラー視差アニメーションを定義します。", "Define a name to easily identify the template.": "テンプレートを簡単に識別できるように名前を定義します。", "Define a name to easily identify this element inside the builder.": "ビルダー内でこの要素を簡単に識別できる名前を定義します。", "Define a navigation menu or give it no semantic meaning.": "ナビゲーションメニューを定義するか、または意味的な意味を与えない。", "Define a unique identifier for the element.": "要素に1つのID名を定義します。", "Define an alignment fallback for device widths below the breakpoint.": "ブレークポイント以下のデバイス幅に対するアライメントフォールバックを定義する。", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "要素の1つ以上の属性を定義します。属性名と値を <code>=</code> 文字で区切ります。 1 行に1つの属性。", "Define one or more class names for the element. Separate multiple classes with spaces.": "要素に1つのクラス名を定義します。複数のクラスはスペースで区切ります。", "Define the alignment in case the container exceeds the element max-width.": "コンテナが要素の最大幅を超える場合の整列を定義します。", "Define the alignment of the last table column.": "テーブルの最後の列のアライメントを定義する。", "Define the device width from which the alignment will apply.": "アライメントを適用するデバイス幅を定義する。", "Define the device width from which the dropnav will be shown.": "ドロップナビゲーションが表示されるデバイスの幅を設定します。", "Define the device width from which the max-width will apply.": "最大幅を適用するデバイス幅を定義する。", "Define the filter fallback mode for device widths below the breakpoint.": "ブレークポイントより下のデバイス幅のフィルター フォールバック モードを設定します。", "Define the image quality in percent for generated JPG images and when converting JPEG and PNG to next-gen image formats.<br><br>Mind that setting the image quality too high will have a negative impact on page loading times.<br><br>Press the Clear Cache button in the advanced settings after changing the image quality.": "生成される JPG 画像、および JPEG と PNG を次世代画像形式に変換するときの画質をパーセント単位で定義します。<br><br>画質を高く設定しすぎると、ページの読み込み時間に悪影響を及ぼすことに注意してください。<br> <br>画質を変更した後、詳細設定のキャッシュクリアボタンを押してください。", "Define the layout of the form.": "フォームのレイアウトを定義する。", "Define the layout of the title, meta and content.": "タイトル、メタ、コンテンツのレイアウトを定義する。", "Define the order of the table cells.": "表のセルの順序を定義する。", "Define the origin of the element's transformation when scaling or rotating the element.": "要素を拡大縮小または回転させる際の、要素の変換の原点を定義します。", "Define the padding between items.": "項目間のパディングを定義する。", "Define the padding between table rows.": "テーブル行間のパディングを定義する。", "Define the purpose and structure of the content or give it no semantic meaning.": "コンテンツの目的と構造を定義するか、あるいは意味的な意味を与えない。", "Define the title position within the section.": "セクション内でのタイトルの位置を定義する。", "Define the width of the content cell.": "コンテンツセルの幅を定義する。", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "フィルターナビゲーションの幅を定義します。パーセント幅と固定幅を選択するか、列をコンテンツの幅に拡大します。", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "グリッド内の画像の幅を定義します。パーセント幅と固定幅を選択するか、列をコンテンツの幅に拡大します。", "Define the width of the meta cell.": "メタのセルの幅を定義する。", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "ナビゲーションの幅を定義します。パーセント幅と固定幅を選択するか、列をコンテンツの幅に拡大します。", "Define the width of the title cell.": "タイトルのセルの幅を定義する。", "Define the width of the title within the grid.": "グリッド内のタイトルの幅を定義します。", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "グリッド内のタイトルの幅を定義します。パーセンテージ幅と固定幅を選択するか、列をコンテンツの幅に拡大します。", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "スライダーアイテムの幅を固定するか、コンテンツの幅によって自動的に拡張するかを定義します。", "Define whether thumbnails wrap into multiple lines if the container is too small.": "コンテナが小さすぎる場合、サムネイルを複数行に折り返すかどうかを定義します。", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "要素のアニメーションをミリ秒単位で遅らせます。例:<code>200</code>", "Delayed Fade": "ディレイド・フェード", "Delete": "削除", "Delete animation stop": "アニメーションの停止を削除する", "Descending": "下り", "description": "説明", "Description": "説明", "Description List": "説明リスト", "Desktop": "デスクトップ", "Determine how the image or video will blend with the background color.": "画像や動画を背景色とどのように調和させるかを決めます。", "Determine how the image will blend with the background color.": "画像を背景色とどのように調和させるかを決めます。", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "画像をクリッピングするか、空白部分を背景色で塗りつぶすかによって、画像がページ寸法に収まるかどうかを判断する。", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "画像をクリッピングするか、空白部分を背景色で塗りつぶすかによって、画像がセクションの寸法に収まるかどうかを判断する。", "Dialog": "ダイアログ", "Dialog Dropbar": "ダイアログドロップバー", "Dialog End": "ダイアログ終了", "Dialog Layout": "ダイアログのレイアウト", "Dialog Logo (Optional)": "ダイアログロゴ(オプション)", "Dialog Modal": "ダイアログモーダル", "Dialog Offcanvas": "オフキャンバスダイアログ", "Dialog Push Items": "ダイアログ・プッシュ項目", "Dialog Start": "ダイアログ開始", "Difference": "違い", "Direction": "違い", "Dirname": "ディレ名", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "自動再生を無効にし、すぐに、またはビデオがビューポートに入るとすぐに自動再生を開始します。", "Disable element": "要素を無効にする", "Disable Emojis": "絵文字を無効にする", "Disable infinite scrolling": "無限スクロールを無効にする", "Disable item": "アイテムを無効にする", "Disable row": "行を無効にする", "Disable section": "セクションを無効にする", "Disable template": "テンプレートを無効にする", "Disable the <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filter for the_content and the_excerpt and disable conversion of Emoji characters to images.": "the_content および the_excerpt の <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> フィルタを無効にし、絵文字文字の画像への変換を無効にします。", "Disable the element and publish it later.": "要素を無効にして、後で公開します。", "Disable the item and publish it later.": "アイテムを無効にして、後で公開します。", "Disable the row and publish it later.": "行を無効にして、後で公開します。", "Disable the section and publish it later.": "セクションを無効にして、後で公開します。", "Disable the template and publish it later.": "テンプレートを無効にして、後で公開します。", "Disable wpautop": "wpautop を無効にする", "Disabled": "無効", "Disc": "ディスク", "Discard": "破棄する", "Display": "表示", "Display a divider between sidebar and content": "サイドバーとコンテンツの間に仕切りを表示する", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "メニューを表示する位置を選択して表示します。例えば、メインメニューをナバーポジションに、代替メニューをモバイルポジションに表示します。", "Display a search icon on the left or right of the input field. The icon on the right can be clicked to submit the search.": "入力フィールドの左側または右側に検索アイコンを表示します。右側のアイコンをクリックすると、検索が送信されます。", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "左または右に検索アイコンを表示します。右側のアイコンをクリックすると、検索結果を送信できます。", "Display header outside the container": "ヘッダーをコンテナ外に表示", "Display icons as buttons": "アイコンをボタンとして表示", "Display on the right": "右側に表示", "Display overlay on hover": "ホバー時にオーバーレイを表示する", "Display products based on visibility.": "視認性に基づいて製品を表示します。", "Display the breadcrumb navigation": "ブレッドクラムナビゲーションを表示する", "Display the cart quantity in brackets or as a badge.": "カートの数量を括弧内またはバッジで表示します。", "Display the content inside the overlay, as the lightbox caption or both.": "コンテンツをオーバーレイ内に表示するか、ライトボックスのキャプションとして表示するか、またはその両方を表示します。", "Display the content inside the panel, as the lightbox caption or both.": "パネル内、ライトボックスのキャプション、またはその両方にコンテンツを表示します。", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "内容があれば抜粋フィールドを表示し、なければ内容を表示します。抜粋フィールドを使用するには、抜粋という名前のカスタムフィールドを作成します。", "Display the excerpt field if it has content, otherwise the intro text.": "内容があれば抜粋フィールドを表示し、なければイントロテキストを表示する。", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "内容があれば抜粋フィールドを表示し、なければイントロテキストを表示する。抜粋フィールドを使用するには、excerptという名前のカスタムフィールドを作成します。", "Display the first letter of the paragraph as a large initial.": "段落の頭文字を大きく表示する。", "Display the image only on this device width and larger.": "この幅以上のデバイスにのみ画像を表示する。", "Display the image or video only on this device width and larger.": "このデバイス幅以上のサイズでのみ画像またはビデオを表示します。", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "マップコントロールを表示し、マウスのホイールまたはタッチを使用してマップをズー ムまたはドラッグできるかどうかを定義します。", "Display the meta text in a sentence or a horizontal list.": "メタテキストを文章または横書きリストで表示する。", "Display the module only from this device width and larger.": "このデバイス幅以上のモジュールのみを表示する。", "Display the navigation only on this device width and larger.": "このデバイス幅以上でナビゲーションを表示します。", "Display the parallax effect only on this device width and larger.": "このデバイス幅以上でのみパララックス効果を表示する。", "Display the popover on click or hover.": "クリックまたはホバー時にポップオーバーを表示します。", "Display the section title on the defined screen size and larger.": "定義された画面サイズ以上にセクションタイトルを表示する。", "Display the short or long description.": "短いまたは長い説明を表示します。", "Display the slidenav only on this device width and larger.": "この幅以上のデバイスにのみスライドナビを表示します。", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "このデバイス幅以上の場合のみスライドナビを外側に表示する。それ以外の場合は内側に表示します。", "Display the title in the same line as the content.": "コンテンツと同じ行にタイトルを表示する。", "Display the title inside the overlay, as the lightbox caption or both.": "タイトルをオーバーレイ内に表示するか、ライトボックスのキャプションとして表示するか、またはその両方を表示します。", "Display the title inside the panel, as the lightbox caption or both.": "タイトルをパネル内、ライトボックスのキャプション、またはその両方に表示する。", "Display the widget only from this device width and larger.": "このデバイス幅以上からのみウィジェットを表示する。", "Display together with filters": "フィルターと一緒に表示", "Displaying the Breadcrumbs": "ブレッドクラムの表示", "Displaying the Excerpt": "抜粋の表示", "Displaying the Mobile Header": "モバイルヘッダーの表示", "div": "div", "Divider": "ディバイダー", "Do you really want to replace the current layout?": "本当に現在のレイアウトを変更したいのですか?", "Do you really want to replace the current style?": "本当に現在のスタイルに置き換えたいのですか?", "Documentation": "ドキュメンテーション", "Does not contain": "を含まない", "Does not end with": "で終わらない", "Does not start with": "で始まらない", "Don't collapse column": "列を折りたたまない", "Don't collapse the column if dynamically loaded content is empty.": "動的に読み込まれたコンテンツが空の場合は、カラムを折りたたまない。", "Don't expand": "拡大しない", "Don't match (NOR)": "一致しない(NOR)", "Don't match %taxonomies% (NOR)": "%taxonomies%に一致しない (NOR)", "Don't match author (NOR)": "作者と一致しない(NOR)", "Don't match category (NOR)": "カテゴリーに一致しない(NOR)", "Don't match tags (NOR)": "タグが一致しない(NOR)", "Don't wrap into multiple lines": "複数行に折り返さない", "Dotnav": "ドットナビ", "Double opt-in": "ダブルオプトイン", "Download": "ダウンロード", "Download All": "全てダウンロード", "Download Less": "ダウンロード・レス", "Draft new page": "新しいページの下書き", "Drop Cap": "ドロップキャップ", "Dropbar Animation": "ドロップバーアニメーション", "Dropbar Center": "ドロップバーセンター", "Dropbar Content Width": "ドロップバーのコンテンツ幅", "Dropbar Top": "ドロップバー・トップ", "Dropbar Width": "ドロップバー幅", "Dropdown": "ドロップダウン", "Dropdown Alignment": "ドロップダウンの整列", "Dropdown Columns": "ドロップダウン列", "Dropdown Nav Style": "ドロップダウンナビのスタイル", "Dropdown Padding": "ドロップダウンのパディング", "Dropdown Stretch": "ドロップダウン ストレッチ", "Dropdown Width": "ドロップダウン幅", "Dropnav": "ドロップナビ", "Dynamic": "ダイナミック", "Dynamic Condition": "ダイナミックコンディション", "Dynamic Content": "ダイナミックコンテンツ", "Dynamic Content (Parent Source)": "ダイナミックコンテンツ(親ソース)", "Dynamic Content Field Options": "動的コンテンツ フィールド オプション", "Dynamic Multiplication": "ダイナミック乗算", "Dynamic Multiplication (Parent Source)": "ダイナミック乗算(親ソース)", "Easing": "イージング", "Edit": "編集する", "Edit %title% %index%": "%title% %index% を編集", "Edit Article": "記事を編集する", "Edit Dropbar": "ドロップバーを編集", "Edit Dropdown": "ドロップダウンを編集", "Edit Image Quality": "画質を編集する", "Edit Item": "項目を編集する", "Edit Items": "項目を編集する", "Edit Layout": "レイアウトを編集する", "Edit Menu Item": "メニュー項目を編集する", "Edit Modal": "モーダルを編集", "Edit Module": "モジュールを編集する", "Edit Offcanvas": "オフキャンバスを編集", "Edit Parallax": "パララックスを編集する", "Edit Settings": "設定を編集する", "Edit Template": "テンプレートを編集する", "Element": "要素", "Element Library": "要素ライブラリ", "Element presets uploaded successfully.": "要素プリセットが正常にアップロードされました。", "elements": "要素", "Elements within Column": "列内の要素", "Email": "Eメール", "Emphasis": "強調", "Empty Dynamic Content": "ダイナミック・コンテンツを空にする", "Enable a navigation to move to the previous or next post.": "前後の記事に移動するナビゲーションを有効にする。", "Enable active state": "アクティブ状態を有効にする", "Enable autoplay": "自動再生を有効にする", "Enable autoplay or play a muted inline video without controls.": "自動再生を有効にするか、コントロールなしでミュートされたインライン ビデオを再生します。", "Enable click mode": "クリックモードを有効にする", "Enable click mode on text items": "テキスト項目のクリックモードを有効にする", "Enable drop cap": "ドロップキャップを有効にする", "Enable dropbar": "ドロップバーを有効にする", "Enable filter navigation": "フィルターナビゲーションを有効にする", "Enable lightbox gallery": "ライトボックスギャラリーを有効にする", "Enable map dragging": "地図ドラッグを有効にする", "Enable map zooming": "地図のズームを有効にする", "Enable marker clustering": "マーカークラスタを有効にする", "Enable masonry effect": "メイソンリー効果を有効にする", "Enable parallax effect": "パララックス効果を有効にする", "Enable the pagination.": "パジネーションを有効にします.", "End": "終わり", "Ends with": "で終わる", "Enter %s% preview mode": "%s% プレビューモードを入力してください", "Enter %size% preview mode": "プレビューモード%s% サイズを入力", "Enter a comma-separated list of tags to manually order the filter navigation.": "コンマで区切られたタグのリストを入力して、フィルターナビゲーションを手動で並べ替えます。", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "タグのコンマ区切りリスト(例:<code>青、白、黒</code>)を入力します.", "Enter a date for the countdown to expire.": "カウントダウンが期限切れになる日付を入力してください.", "Enter a decorative section title which is aligned to the section edge.": "セクションの端に揃えて装飾セクション タイトルを入力します。", "Enter a descriptive text label to make it accessible if the link has no visible text.": "リンクが表示されていないテキストがない場合、リンクがアクセスできるように、記述テキストラベルを入力します.", "Enter a subtitle that will be displayed beneath the nav item.": "Nav項目の下に表示されるサブタイトルを入力してください.", "Enter a table header text for the content column.": "コンテンツの列にテーブルヘッダテキストを入力します.", "Enter a table header text for the image column.": "画像列にテーブルヘッダーテキストを入力します.", "Enter a table header text for the link column.": "リンク列のテーブルヘッダーテキストを入力します。", "Enter a table header text for the meta column.": "メタ列のテーブルヘッダーテキストを入力します。", "Enter a table header text for the title column.": "タイトル列のテーブルヘッダーテキストを入力する。", "Enter a width for the popover in pixels.": "ポップオーバーの幅をピクセル単位で入力します。", "Enter an optional footer text.": "オプションのフッターテキストを入力します。", "Enter an optional text for the title attribute of the link, which will appear on hover.": "ホバー時に表示されるリンクのタイトル属性に任意のテキストを入力します。", "Enter labels for the countdown time.": "カウントダウン時間のラベルを入力する。", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "ソーシャル プロフィールへのリンクを入力します。 対応する <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit ブランド アイコン</a>が利用可能な場合は、自動的に表示されます。 mailto:info@example.com や tel:+491570156 などの電子メール アドレスや電話番号へのリンクもサポートされています。", "Enter or pick a link, an image or a video file.": "リンク、画像、またはビデオ ファイルを入力または選択します。", "Enter the API key in Settings > External Services.": "[設定 > 外部サービス]でAPIキーを入力します。", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "API キーを入力すると、YOOtheme Pro の 1 クリック更新が有効になり、レイアウト ライブラリと Unsplash 画像ライブラリにアクセスできるようになります。 このウェブサイトの API キーは、<a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">アカウント設定</a>で作成できます。", "Enter the author name.": "著者名を入力する。", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "クッキーの同意メッセージを入力します。デフォルトのテキストはイメージです。あなたの国のクッキーに関する法律に従って調整してください。", "Enter the horizontal position of the marker in percent.": "マーカーの水平ポジションをパーセントで入力する。", "Enter the image alt attribute.": "画像のalt属性を入力します。", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "参照を含む可能性のある置換文字列を入力します。空文字列の場合、検索マッチは削除されます。", "Enter the text for the button.": "ボタンのテキストを入力します.", "Enter the text for the home link.": "ホームリンクのテキストを入力します。", "Enter the text for the link.": "リンクのテキストを入力します。", "Enter the vertical position of the marker in percent.": "マーカーの垂直ポジションをパーセントで入力する。", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "追跡を有効にするには、<a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google アナリティクス</a> ID を入力します。 <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP の匿名化</a>により、追跡の精度が低下する可能性があります。", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "OpenStreetMap の代わりに Google マップを使用するには、<a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google マップ</a> API キーを入力します。 また、マップの色のスタイルを設定するための追加オプションも有効になります。", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "<a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">キャンペーン モニター</a> API キーをニュースレター要素で使用するために入力します。", "Enter your <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> API key for using it with the Newsletter element.": "<a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> API キーをニュースレター要素で使用するために入力します。", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "独自のカスタム CSS を入力します。 この要素には次のセレクターが自動的にプレフィックスとして付加されます: <code>.el-element</code>、<code>.el-image</code>、<code>.el-title</code>、<code> .el-meta</code>、<code>.el-content</code>、<code>.el-link</code>、<code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的にプレフィックスとして付けられます: <code>.el-element</code>、<code>.el-item</code>、<code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "独自のカスタムCSSを入力してください。この要素には、以下のセレクターが自動的にプレフィックスとして付加されます: <code>.el-element</code>、<code>.el-item</code>、<code>.el-nav</code>、<code>.el-slidenav</code>、<code>.el-title</code>、<code>.el-meta</code>、<code>.el-content</code>、<code>.el-image</code>、<code>.el-link</code>、<code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "独自のカスタム CSS を入力します。 この要素には次のセレクターが自動的にプレフィックスとして付加されます: <code>.el-element</code>、<code>.el-nav</code>、<code>.el-item</code>、<code> .el-slidenav</code>、<code>.el-image</code>、<code>.el-title</code>、<code>.el-meta</code>、<code>.el -content</code>、<code>.el-link</code>、<code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "独自のカスタムCSSを入力してください。この要素には、以下のセレクターが自動的にプレフィックスとして付加されます: <code>.el-element</code>、<code>.el-nav</code>、<code>.el-item</code>、<code>.el-title</code>、<code>.el-meta</code>、<code>.el-content</code>、<code>.el-image</code>、<code>.el-link</code>、<code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "独自のカスタムCSSを入力してください。この要素には、以下のセレクターが自動的にプレフィックスとして付加されます: <code>.el-element</code>、<code>.el-title</code>、<code>.el-meta</code>、<code>.el-content</code>、<code>.el-image</code>、<code>.el-link</code>、<code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "独自のカスタム CSS を入力します。この要素には、次のセレクターが自動的に前に付けられます: <code>.el-section</code>", "Error": "エラー", "Error 404": "エラー404", "Error creating folder.": "フォルダ作成エラー。", "Error deleting item.": "項目の削除でエラーが発生しました。", "Error renaming item.": "項目名の変更でエラーが発生しました。", "Error: %error%": "エラー:%error%", "Events": "イベント", "Excerpt": "抜粋", "Exclude child %taxonomies%": "サブ %taxonomies% を除外する", "Exclude child categories": "サブカテゴリーを除外する", "Exclude child tags": "サブタグを除外する", "Exclude cross sell products": "クロスセル製品を除く", "Exclude upsell products": "アップセル製品を除く", "Exclusion": "除外", "Expand": "拡大する", "Expand columns equally to always fill remaining space within the row, center them or align them to the left.": "列を均等に拡張して、常に行内の残りのスペースを埋めるか、中央に配置するか、左に揃える。", "Expand Content": "コンテンツの拡大", "Expand content": "コンテンツを拡張", "Expand height": "高さを拡大する", "Expand image": "画像を拡大", "Expand input width": "入力幅を拡大", "Expand One Side": "片側を拡大", "Expand Page to Viewport": "ページをビューポートに拡大", "Expand the height of the content to fill the available space in the overlay and push the link to the bottom.": "コンテンツの高さを拡張してオーバーレイ内の使用可能なスペースを埋め、リンクを下部に押し出します。", "Expand the height of the content to fill the available space in the panel and push the link to the bottom.": "パネルの利用可能なスペースを埋めるためにコンテンツの高さを拡大し、リンクを一番下に押します。", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The image will cover the element's content box.": "列の利用可能なスペースを埋めるために要素の高さを拡大するか、1つのビューポートに高さを強制します。画像は要素のコンテンツボックスを覆います。", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The video will cover the element's content box.": "列の利用可能なスペースを埋めるために要素の高さを拡大するか、1つのビューポートに高さを強制します。動画は要素のコンテンツボックスを覆います。", "Expand the height of the element to fill the available space in the column.": "要素の高さを拡張して、列の利用可能なスペースを埋める。", "Expand the height of the image to fill the available space in the item.": "アイテム内の使用可能なスペースを埋めるために画像の高さを拡大します。", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "片側の幅を左または右に広げ、反対側は最大幅の制約内に保ちます。", "Expand width to table cell": "テーブルのセル幅を拡大する", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "すべてのテーマ設定をエクスポートし、別のインストールにインポートします。これには、レイアウト、スタイル、要素ライブラリ、テンプレートビルダーのコンテンツは含まれません。", "Export Settings": "設定をエクスポートする", "Extend all content items to the same height.": "すべてのコンテンツ項目を同じ高さに拡張する。", "Extension": "エクステンション", "External": "外部", "External Services": "外部サービス", "Extra Margin": "追加の余白", "Fade": "フェイド", "Failed loading map": "マップの読み込みに失敗しました", "Fall back to content": "コンテンツにフォールバックする", "Fallback": "フォールバック", "Favicon": "ファビコン", "Favicon PNG": "ファビコンPNG", "Favicon SVG": "ファビコンSVG", "Fax": "ファックス", "Featured": "おすすめ記事", "Featured Articles": "注目記事", "Featured Articles Order": "注目記事順", "Featured Image": "特集画像", "Fields": "フィールド", "Fifths": "五列", "Fifths 1-1-1-2": "五列: 1-1-1-2", "Fifths 1-1-3": "五列:1-1-3", "Fifths 1-3-1": "五列:1-3-1", "Fifths 1-4": "五列:1-4", "Fifths 2-1-1-1": "五列:2-1-1-1", "Fifths 2-3": "五列:2-3", "Fifths 3-1-1": "五列:3-1-1", "Fifths 3-2": "五列:3-2", "Fifths 4-1": "五列:4-1", "File": "ファイル", "Files": "ファイル", "Fill the available column space": "利用可能な列スペースを埋める", "Filter": "フィルター", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "著者による %post_types% をフィルタリングします。 <kbd>shift</kbd>または<kbd>ctrl/cmd</kbd>キーを使用して、複数の著者を選択します。 論理演算子を設定して、選択した著者と一致したり一致したりしません.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "%post_types% を用語でフィルタリングします。 複数の用語を選択するには、<kbd>shift</kbd> または <kbd>ctrl/cmd</kbd> キーを使用します。 少なくとも 1 つの用語に一致するか、どの用語にも一致しないか、またはすべての用語に一致するように論理演算子を設定します。", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "著者ごとに記事をフィルタリングします。 複数の作成者を選択するには、<kbd>shift</kbd> または <kbd>ctrl/cmd</kbd> キーを使用します。 選択した著者と一致するか一致しないように論理演算子を設定します。", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "カテゴリー別に記事をフィルタリングします。 <kbd>shift</kbd>または<kbd>ctrl/cmd</kbd>キーを使用して、複数のカテゴリを選択します。 論理演算子を設定して、選択したカテゴリに一致または一致しません.", "Filter articles by featured status. Load all articles, featured articles only, or articles which are not featured.": "注目のステータスで記事をフィルタリングします。 すべての記事をロードする, 特集記事のみ, または特集されていない記事.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "タグで記事をフィルタリングします。 <kbd>shift</kbd>または<kbd>ctrl/cmd</kbd>キーを使用して、複数のタグを選択します。 論理演算子をタグの少なくとも1つ、タグのどれか、すべてのタグと一致させます.", "Filter by Authors": "著者によるフィルタ", "Filter by Categories": "カテゴリー別フィルター", "Filter by Featured Articles": "注目記事によるフィルタ", "Filter by Post Types": "投稿タイプでフィルタリング", "Filter by Root Categories": "ルートカテゴリでフィルタリング", "Filter by Tags": "タグ別フィルター", "Filter by Term": "用語別フィルター", "Filter by Terms": "用語別フィルター", "Filter items visually by the selected post types.": "選択した投稿タイプごとにアイテムを視覚的にフィルタリングします。", "Filter items visually by the selected root categories.": "選択したルート カテゴリ別にアイテムを視覚的にフィルターします。", "Filter products by attribute using the attribute slug.": "スラッグ属性で商品をフィルタリングします。", "Filter products by categories using a comma-separated list of category slugs.": "カテゴリのコンマ区切りリストを使用してカテゴリ別に製品をフィルタリング.", "Filter products by tags using a comma-separated list of tag slugs.": "タグ slugs のコンマ区切りリストを使用してタグで製品をフィルタリングします.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "選択した属性の用語で、属性用語のコンマ区切りリストを使用して製品をフィルタリングします.", "Filter products using a comma-separated list of IDs.": "IDのコンマ区切りリストを使用して製品をフィルタリングします.", "Filter products using a comma-separated list of SKUs.": "IDのコンマ区切りリストを使用して製品をフィルタリングします.", "Filter Title": "タイトルをフィルター", "Filter Toggle": "トグルをフィルター", "Filters": "フィルター", "Finite": "有限", "First Item": "最初の項目", "First name": "お名前(名)", "First page": "最初のページ", "Fit markers": "フィットマーカー", "Fix the background with regard to the viewport.": "ビューポートに関して背景を修正します.", "Fixed": "固定", "Fixed-Inner": "固定インナー", "Fixed-Left": "左固定", "Fixed-Outer": "固定式アウター", "Fixed-Right": "右固定", "Floating Shadow": "浮かぶ影", "Focal Point": "フォーカルポイント", "Folder created.": "フォルダが作成された。", "Folder Name": "フォルダ名", "Font Family": "フォントファミリー", "Footer": "フッター", "Footer Builder": "フッタービルダー", "Force a light or dark color for text, buttons and controls on the image or video background.": "画像またはビデオの背景のテキスト、ボタン、およびコントロールに「明るい色」または「暗い色」を適用します。", "Force left alignment": "強制的な左アライメント", "Force viewport height": "ビューポートの高さを強制する", "Form": "フォーム", "Format": "フォーマット", "Full": "全", "Full Article Image": "記事全画像", "Full Article Image Alt": "記事全画像 Alt", "Full Article Image Caption": "記事全画像キャプション", "Full Width": "全幅", "Full width button": "全幅ボタン", "g": "g", "Gallery": "ギャラリー", "Gallery Thumbnail Columns": "ギャラリーサムネイル列", "Gamma": "ガンマ", "Gap": "ギャップ", "General": "インフォメーション", "GitHub (Light)": "GitHub(ライト)", "Global": "グローバル", "Google Analytics": "Googleアナリティクス", "Google Fonts": "Googleフォント", "Google Maps": "Googleマップ", "Gradient": "グラデーション", "Greater than": "より大きい", "Grid": "グリッド", "Grid Breakpoint": "グリッドブレイクポイント", "Grid Column Gap": "グリッド列ギャップ", "Grid Row Gap": "グリッド行ギャップ", "Grid Width": "グリッド幅", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "アイテムをセットにグループ化します。 セット内の項目の数は、定義された項目の幅によって異なります。 <i>33%</i> は、各セットに 3 つのアイテムが含まれていることを意味します。", "Grouped Products": "グループ化された製品", "Guest User": "ゲストユーザー", "h": "h", "H1": "H1", "h1": "h1", "H2": "H2", "h2": "h2", "H3": "H3", "h3": "h3", "H4": "H4", "h4": "h4", "H5": "H5", "h5": "h5", "H6": "H6", "h6": "h6", "Halves": "ハルフ", "Hard-light": "ハードライト", "Header": "ヘッダー", "Header End": "ヘッダーエンド", "Header Start": "ヘッダーの開始", "Header Text Color": "ヘッダーのテキスト色", "Heading": "見出し", "Heading 2X-Large": "見出し 2X-大", "Heading 3X-Large": "見出し 3X-大", "Heading H1": "見出し H1", "Heading H2": "見出し H2", "Heading H3": "見出し H3", "Heading H4": "見出し H4", "Heading H5": "見出し H5", "Heading H6": "見出し H6", "Heading Large": "見出し 大", "Heading Link": "見出しリンク", "Heading Medium": "見出し 中", "Heading Small": "見出し 小", "Heading X-Large": "見出し X-大", "Headline": "見出し", "Headline styles differ in font size and font family.": "フォントサイズとフォントファミリーの見出しスタイルは異なります.", "Height": "高さ", "Height 100%": "高さ 100%", "Help": "ヘルプ", "hex / keyword": "hex/キーワード", "Hidden": "隠し", "Hidden Large (Desktop)": "隠し:大(デスクトップ)", "Hidden Medium (Tablet Landscape)": "隠し:中(タブレットの横画面)", "Hidden Small (Phone Landscape)": "隠し:小(スマートフォン横画面)", "Hidden X-Large (Large Screens)": "隠し:X-大 (大型スクリーン)", "Hide": "隠す", "Hide and Adjust the Sidebar": "サイドバーを隠して調整する", "Hide marker": "マーカーを隠す", "Hide Sidebar": "サイドバーを隠す", "Hide Term List": "用語集を隠す", "Hide title": "タイトルを隠す", "Highlight the hovered row": "ホバーされた行をハイライトする", "Highlight the item as the active item.": "項目をアクティブ項目として強調表示します.", "Hits": "ヒット", "Home": "ホーム", "Home Text": "ホーム テキスト", "Horizontal": "水平方向", "Horizontal Center": "水平センター", "Horizontal Center Logo": "水平センターロゴ", "Horizontal Justify": "水平方向の整列", "Horizontal Left": "左水平", "Horizontal Right": "右水平", "Host": "ホスト", "Hover": "ホバー", "Hover Box Shadow": "ホバーボックスシャドウ", "Hover Image": "ホバー画像", "Hover Style": "ホバー・スタイル", "Hover Transition": "ホバー・トランジション", "Hover Video": "ホバー・ビデオ", "hr": "hr", "Html": "Html", "HTML Element": "HTML要素", "Hue": "色合い", "Hyphen": "ハイフン", "Hyphen and Underscore": "ハイフェンとアンダースコア", "Icon": "アイコン", "Icon Alignment": "アイコンの配置", "Icon Button": "アイコンボタン", "Icon Color": "アイコンの色", "Icon Link": "アイコンリンク", "Icon Width": "アイコンの幅", "Iconnav": "アイコンナビ", "icons": "アイコン", "ID": "ID", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "セクションまたは行の幅が最大で、片側が左または右に拡大する場合、デフォルトのパディングを拡大する側から取り除くことができます。", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "同じビューに複数のテンプレートが割り当てられている場合、最初に表示されたテンプレートが適用されます。ドラッグ&ドロップで順番を変更できます。", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "多言語サイトを作成している場合、ここで特定のメニューを選択しないでください。代わりに、Joomlaのモジュールマネージャを使用して、現在の言語に応じて適切なメニューを発行します。", "If you are using WPML, you can not select a menu here. Instead, use the WordPress menu manager to assign menus to locations for a language.": "WPMLを使用している場合、ここでメニューを選択することはできません。代わりに、WordPressのメニューマネージャーを使用して、言語用の場所にメニューを割り当ててください。", "Ignore %taxonomy%": "%taxonomy% を無視する", "Ignore author": "著者を無視する", "Ignore category": "カテゴリーを無視する", "Ignore tags": "タグを無視する", "Image": "画像", "Image Align": "画像整列", "Image Alignment": "画像の位置合わせ", "Image Alt": "画像のAlt", "Image and Content": "画像とコンテンツ", "Image and Title": "画像とタイトル", "Image Attachment": "画像添付ファイル", "Image Box Shadow": "画像のボックス・シャドウ", "Image Bullet": "画像のバレット", "Image Effect": "画像効果", "Image Field": "画像のフィールド", "Image Focal Point": "画像の焦点位置", "Image Height": "画像の高さ", "Image Margin": "画像の余白", "Image Orientation": "画像の向き", "Image Position": "画像ポジション", "Image Quality": "画質", "Image Size": "画像サイズ", "Image Width": "画像の幅", "Image Width/Height": "画像の幅/高さ", "Image, Title, Content, Meta, Link": "画像、タイトル、コンテンツ、メタ、リンク", "Image, Title, Meta, Content, Link": "画像、タイトル、メタ、コンテンツ、リンク", "Image/Video": "画像/ビデオ", "Images and Links": "画像とリンク", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "画像はキャッシュできません。 <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\"><code>キャッシュ</code> の権限を変更する</a> <code>yootheme</code> テーマ ディレクトリ内のフォルダーを作成し、Web サーバーがそこに書き込むことができるようにします。", "Import Settings": "設定をインポートする。", "In parenthesis": "括弧内", "Include %post_types% from child %taxonomies%": "子要素 %taxonomies% から %post_types% を含めます", "Include articles from child categories": "サブカテゴリーの記事を含める", "Include child %taxonomies%": "サブ %taxonomies% を含める", "Include child categories": "サブカテゴリーを含む", "Include child tags": "サブタグを含む", "Include heading itself": "見出しそのものを含む", "Include items from child tags": "サブタグの項目を含める", "Include query string": "クエリー文字列を含む", "Info": "情報", "Inherit": "継承する", "Inherit transparency from header": "ヘッダーからの透明性の継承", "Inject SVG images into the markup so they adopt the text color automatically.": "SVG画像をマークアップに注入し、文字色を自動的に採用する。", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "SVG画像をページのマークアップに注入し、CSSで簡単にスタイル設定できるようにする。", "Inline": "インライン", "Inline SVG": "インライン SVG", "Inline SVG logo": "インラインSVGロゴ", "Inline title": "インラインタイトル", "Input": "インプット", "Input Dropbar": "ドロップバーを入力", "Input Dropdown": "ドロップダウンを入力", "Insert at the bottom": "下部に挿入", "Insert at the top": "上部に挿入", "Inset": "挿入", "Instead of opening a link, display an alternative content in a modal or an offcanvas sidebar.": "リンクを開く代わりに、モーダルまたはオフキャンバス サイドバーに代替コンテンツを表示します。", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "カスタム イメージを使用する代わりに、鉛筆をクリックしてアイコン ライブラリからアイコンを選択できます。", "Intro Image": "イントロ画像", "Intro Image Alt": "イントロ画像 Alt", "Intro Image Caption": "イントロ画像のキャプション", "Intro Text": "イントロテキスト", "Invalid Field Mapped": "無効なフィールドがマッピングされた", "Invalid Source": "無効なソース", "Inverse Logo (Optional)": "ロゴの反転(オプション)", "Inverse on hover or when active": "ホバー時またはアクティブ時に反転", "Inverse style": "スタイルの反転", "Inverse text color on hover or when active": "ホバー時またはアクティブ時のテキスト色の反転", "Inverse the text color on hover": "ホバー時のテキスト色の反転", "Invert lightness": "明るさの反転", "IP Anonymization": "IP匿名化", "Is empty": "空である", "Is equal to": "に等しい", "Is not empty": "空ではない", "Is not equal to": "とは等しくない", "Issues and Improvements": "課題と改善点", "Item": "項目", "Item (%post_type% fields)": "アイテム(%post_type% フィールド)", "Item Count": "項目 カウント", "Item deleted.": "項目は削除された。", "Item Index": "項目インデックス", "Item Max Width": "項目の最大幅", "Item renamed.": "項目名が変更されました。", "Item uploaded.": "項目がアップロードされた。", "Item Width": "項目の幅", "Item Width Mode": "項目 幅モード", "Items": "項目", "Items (%post_type% fields)": "アイテム(%post_type% フィールド)", "Items per Page": "ページあたりのアイテム数", "JPEG": "JPEG", "JPEG to AVIF": "JPEGからAVIFへ", "JPEG to WebP": "JPEGからWebPへ", "Justify": "整列する", "Justify columns at the bottom": "下部の列を整列させる", "Keep existing": "既存のものを維持する", "Ken Burns Duration": "ケン・バーンズ 持続時間", "Ken Burns Effect": "ケン・バーンズ効果", "l": "l", "Label": "ラベル", "Label Margin": "ラベルの余白", "Labels": "ラベル", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "横長および縦長の画像は、グリッドセル内の中央に配置されます。画像のサイズを変更すると、幅と高さが反転します。", "Large": "大", "Large (Desktop)": "大(デスクトップ)", "Large padding": "大きなパディング", "Large Screen": "大型スクリーン", "Large Screens": "大型スクリーン", "Larger padding": "大きめのパディング", "Larger style": "大きなスタイル", "Last 24 hours": "直近24時間", "Last 30 days": "直近30日間", "Last 7 days": "直近7日間", "Last Column Alignment": "最後の列の整列", "Last Item": "最後の項目", "Last Modified": "最後の編集", "Last name": "お名前(名)", "Last visit date": "最終閲覧日", "Last Visit Date": "最終アクセス日", "Layout": "レイアウト", "Layout Library": "レイアウトライブラリ", "Layout Media Files": "レイアウト・メディア・ファイル", "Layouts uploaded successfully.": "レイアウトが正常にアップロードされました。", "Lazy load video": "レイジーロードビデオ", "Lead": "リード", "Learning Layout Techniques": "レイアウト・テクニックの習得", "Left": "左", "Left (Not Clickable)": "左(クリックできません)", "Left Bottom": "左底", "Left Center": "左センター", "Left Top": "左上", "Less than": "未満", "Library": "ライブラリー", "Light": "ライト", "Light Text": "ライトテキスト", "Lightbox": "ライトボックス", "Lightbox only": "ライトボックスのみ", "Lighten": "明るくする", "Lightness": "ライトネス", "Limit": "リミット", "Limit by %taxonomies%": "%taxonomies% による制限", "Limit by Categories": "カテゴリー別の制限", "Limit by Date Archive Type": "日付アーカイブタイプで制限", "Limit by Language": "言語別で制限", "Limit by Menu Heading": "メニューの見出しによる制限", "Limit by Page Number": "ページ番号別で制限", "Limit by Products on sale": "販売中の製品による制限", "Limit by Tags": "タグ別で制限", "Limit by Terms": "条件による制限", "Limit the content length to a number of characters. All HTML elements will be stripped.": "コンテンツの長さを文字数に制限します。 すべてのHTML要素が除去されます.", "Limit the number of products.": "制品数を制限します。", "Line": "ライン", "Link": "リンク", "link": "リンク", "Link ARIA Label": "リンク ARIA ラベル", "Link card": "リンクカード", "Link image": "リンク画像", "Link Muted": "リンク ミューテッド", "Link overlay": "リンクオーバーレイ", "Link panel": "リンクパネル", "Link Parallax": "リンク パララックス", "Link Reset": "リンクリセット", "Link Style": "リンクスタイル", "Link Target": "リンクターゲット", "Link Text": "リンクテキスト", "Link the image if a link exists.": "リンクが存在する場合は画像をリンクします。", "Link the title if a link exists.": "リンクが存在する場合はタイトルをリンクします。", "Link the whole card if a link exists.": "リンクが存在する場合は、カード全体をリンクします。", "Link the whole overlay if a link exists.": "リンクが存在する場合は、オーバーレイ全体をリンクします。", "Link the whole panel if a link exists.": "リンクが存在する場合は、パネル全体をリンクします。", "Link the whole panel if a link exists. Optionally, add a hover style.": "リンクが存在する場合はパネル全体をリンクします。オプションでホバースタイルを追加します。", "Link the whole slideshow instead of linking items separately.": "アイテムを個別にリンクするのではなく、スライドショー全体をリンクします。", "Link title": "リンクタイトル", "Link Title": "リンクタイトル", "Link to redirect to after submit.": "送信後にリダイレクトするリンク。", "List": "リスト", "List All Tags": "すべてのタグをリストする", "List Item": "リスト項目", "List Style": "リストスタイル", "Live Search": "ライブ検索", "Load Bootstrap": "ブートストラップをロードする", "Load Font Awesome": "Font Awesomeをロードする", "Load image eagerly": "画像のEagerローディングする", "Load jQuery": "jQueryをロードする", "Load jQuery to write custom code based on the jQuery JavaScript library.": "JQuery をロードし、jQuery JavaScript ライブラリに基づいてカスタムコードを書くことができます.", "Load product on sale only": "販売中の製品のみをロードする", "Load products on sale only": "販売中の製品のみをロードする", "Loading": "ローディング", "Loading Layouts": "ローディングレイアウト", "Location": "アクセス", "Login Page": "ログインページ", "Logo End": "ロゴの端", "Logo Image": "ロゴ画像", "Logo Text": "ロゴテキスト", "Loop video": "ループビデオ", "Lost Password Confirmation Page": "パスワード紛失確認ページ", "Lost Password Page": "パスワード紛失ページ", "Luminosity": "光度", "Mailchimp API Token": "Mailchimp APIトークン", "Main Section Height": "主要なセクション高さ", "Main styles": "主要スタイル", "Make header transparent": "ヘッダーを透明にする", "Make only first item active": "最初の項目だけをアクティブにする", "Make SVG stylable with CSS": "CSSでSVGをスタイリング可能にする", "Make the column or its elements sticky only from this device width and larger.": "列またはその要素を、このデバイス幅以上でのみスティッキーにする。", "Make the header transparent and overlay this section if it directly follows the header.": "ヘッダーを透明にし、このセクションがヘッダーに直接続く場合はオーバーレイする。", "Make the header transparent even when it's sticky.": "スティッキーな場合でもヘッダーを透明にします。", "Managing Menus": "メニューの管理", "Managing Modules": "モジュールの管理", "Managing Pages": "ページを管理する", "Managing Sections, Rows and Elements": "セクション、列、要素の管理", "Managing Templates": "テンプレートの管理", "Managing Widgets": "ウィジェットの管理", "Manual": "マニュアル", "Manual Order": "マニュアル順", "Map": "マップ", "Mapping Fields": "マッピングフィールド", "Margin": "余白", "Margin Top": "余白トップ", "Marker": "マーカー", "Marker Color": "マーカー色", "Marker Icon": "マーカーアイコン", "Mask": "マスク", "Masonry": "メイソンリー", "Match (OR)": "マッチ(OR)", "Match all (AND)": "すべて一致(AND)", "Match all %taxonomies% (AND)": "すべての %taxonomies% に一致 (AND)", "Match all tags (AND)": "すべてのタグに一致(AND)", "Match author (OR)": "作成者を一致(OR)", "Match category (OR)": "カテゴリーを一致(OR)", "Match content height": "コンテンツの高さに合わせる", "Match height": "高さに合わせる", "Match Height": "高さに合わせる", "Match one (OR)": "一つを一致 (OR)", "Match one %taxonomy% (OR)": "1 つの %taxonomy% に一致する (OR)", "Match one tag (OR)": "1つのタグに一致(OR)", "Match panel heights": "パネルの高さに合わせる", "Match the height of all modules which are styled as a card.": "カードとしてスタイリングされているすべてのモジュールの高さを合わせる。", "Match the height of all widgets which are styled as a card.": "カードとしてスタイルされるすべてのウィジェットの高さを合わせる。", "Matches a RegExp": "RegExpに一致する", "Max Height": "最大高さ", "Max Width": "最大幅", "Max Width (Alignment)": "最大幅(整列)", "Max Width Breakpoint": "最大幅 ブレークポイント", "Maximum Zoom": "最大ズーム", "Maximum zoom level of the map.": "地図の最大ズームレベル。", "Media": "メディア", "Media Folder": "メディアフォルダ", "Medium": "中", "Medium (Tablet Landscape)": "中(タブレット横画面)", "Menu": "メニュー", "Menu Divider": "メニュー ディバイダー", "Menu Icon Width": "メニューアイコンの幅", "Menu Image Align": "メニュー画像の整列", "Menu Image and Title": "メニュー画像とタイトル", "Menu Image Height": "メニュー画像高さ", "Menu Image Width": "メニュー画像幅", "Menu Inline SVG": "メニュー インライン SVG", "Menu Item": "メニュー項目", "Menu Items": "メニュー項目", "Menu items are only loaded from the selected parent item.": "メニュー項目は、選択された親項目からのみ読み込まれる。", "Menu Primary Size": "メニュー プライマリーサイズ", "Menu Style": "メニュースタイル", "Menu Type": "メニュータイプ", "Menus": "メニュー", "Message": "メッセージ", "Message shown to the user after submit.": "送信後にユーザーに表示されるメッセージ。", "Meta": "メタ", "Meta Alignment": "メタ・アラインメント", "Meta Margin": "メタの余白", "Meta Parallax": "メタパララックス", "Meta Style": "メタスタイル", "Meta Width": "メタの幅", "Meta, Image, Title, Content, Link": "メタ、画像、タイトル、コンテンツ、リンク", "Meta, Title, Content, Link, Image": "メタ、タイトル、コンテンツ、リンク、画像", "Method": "方法", "Middle": "中", "Mimetype": "ミメタイプ", "Min Height": "最低高さ", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "一般的なレイアウトのテンプレートが現在のページに割り当てられていることに注意してください。テンプレートを編集してレイアウトを更新してください。", "Minimum Stability": "最小安定性", "Minimum Zoom": "最小ズーム", "Minimum zoom level of the map.": "地図の最小ズームレベル。", "Miscellaneous Information": "その他の情報", "Mobile": "モバイル", "Mobile Inverse Logo (Optional)": "モバイル・インバースのロゴ(オプション)", "Mobile Logo (Optional)": "モバイルロゴ(オプション)", "Modal": "モーダル", "Modal Center": "モーダルセンター", "Modal Focal Point": "モーダル焦点ポイント", "Modal Image Focal Point": "モーダル画像フォーカル・ポイント", "Modal Top": "モーダルトップ", "Modal Width": "モーダル幅", "Modal Width/Height": "モーダル幅/高さ", "Mode": "モード", "Modified": "編集済み", "Modified Date": "更新日", "Module": "モジュール", "Module Position": "モジュールの位置", "Module Theme Options": "モジュールテンプレートオプション", "Modules": "モジュール", "Modules and Positions": "モジュールとポジション", "Monokai (Dark)": "モノカイ(ダーク)", "Month Archive": "月アーカイブ", "Move the sidebar to the left of the content": "サイドバーをコンテンツの左に移動する。", "Multibyte encoded strings such as UTF-8 can't be processed. Install and enable the <a href=\"https://php.net/manual/en/book.mbstring.php\" target=\"_blank\">Multibyte String extension</a>.": "UTF-8 などのマルチバイトでエンコードされた文字列は処理できません。<a href=\"https://php.net/manual/en/book.mbstring.php\" target=\"_blank\">マルチバイト文字列拡張機能</a>をインストールして有効にしてください。", "Multiple Items Source": "複数項目ソース", "Multiply": "乗算する", "Mute video": "ビデオをミュートする", "Muted": "ミュートされた", "My Account": "マイアカウント", "My Account Page": "マイアカウントページ", "my layouts": "マイレイアウト", "my presets": "マイプリセット", "my styles": "マイスタイル", "Name": "名前", "Names": "名前", "Nav": "ナビ", "Navbar": "ナビバー", "Navbar Container": "ナビバーコンテナ", "Navbar Dropdown": "ナビバードロップダウン", "Navbar End": "ナビバー端", "Navbar Start": "ナビバー開始", "Navbar Style": "ナビバースタイル", "Navigation": "ナビゲーション", "Navigation Label": "ナビゲーションラベル", "Navigation Order": "ナビゲーションの順序", "Navigation Thumbnail": "ナビゲーションサムネイル", "New Article": "新しい記事", "New Layout": "新しいレイアウト", "New Menu Item": "新しいメニュー項目", "New Module": "新しいモジュール", "New Page": "新しいページ", "New Template": "新しいテンプレート", "New Window": "新しいウィンドウ", "Newsletter": "ニュースレター", "Next": "次", "Next %post_type%": "次の%post_type%", "Next Article": "次の記事", "Next page": "次のページ", "Next Section": "次のセクション", "Next slide": "次のスライド", "Next-Gen Images": "次世代画像", "Nicename": "ニックネーム", "Nickname": "ニックネーム", "No %item% found.": "%item% が見つかりません。", "No articles found.": "記事が見つかりません。", "No Clear all button": "すべてクリアボタンはありません", "No critical issues found.": "重要な問題が見つかりません。", "No element found.": "要素が見つかりません。", "No element presets found.": "要素プリセットが見つかりません。", "No Field Mapped": "マッピングされたフィールドはありません。", "No files found.": "ファイルが見つかりません。", "No font found. Press enter if you are adding a custom font.": "フォントが見つかりません。カスタムフォントを追加する場合はEnterキーを押してください。", "No icons found.": "アイコンが見つかりません。", "No image library is available to process images. Install and enable the <a href=\"https://php.net/manual/en/book.image.php\" target=\"_blank\">GD</a> extension.": "画像を処理するための画像ライブラリがありません。<a href=\"https://php.net/manual/en/book.image.php\" target=\"_blank\">GD</a> 拡張機能をインストールして有効にしてください。", "No items yet.": "項目はまだありません。", "No layout found.": "レイアウトが見つかりません。", "No limit": "無制限", "No list selected.": "リストが選択されていません。", "No pages found.": "ページが見つかりません。", "No Results": "結果なし", "No results.": "結果なし", "No source mapping found.": "ソースマッピングが見つかりません。", "No style found.": "スタイルが見つかりません。", "None": "なし", "None (Fade if hover image)": "なし(ホバー画像の場合はフェード)", "Normal": "通常", "Not assigned": "指定なし", "Notification": "通知", "Numeric": "数値", "Off": "オフ", "Offcanvas": "オフキャンバス", "Offcanvas Center": "オフカンバスセンター", "Offcanvas Mode": "オフキャンバスモード", "Offcanvas Top": "オフキャンバストップ", "Offset": "オフセット", "Ok": "OK", "ol": "ol", "On": "オン", "On (If inview)": "オン(表示されている場合)", "On Sale Product": "販売中の製品", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "短いページでは、メインセクションをビューポートいっぱいに拡大することができます。これはページビルダーで構築されていないページにのみ適用されます。", "Only available for Google Maps.": "グーグルマップでのみ利用可能。", "Only Clear all button": "すべてクリアボタンのみ", "Only display modules that are published and visible on this page.": "このページで公開され、表示されているモジュールだけを表示します。", "Only display widgets that are published and visible on this page.": "このページで公開され、表示されているウィジェットのみを表示します。", "Only include child %taxonomies%": "サブ %taxonomies% のみを含む", "Only include child categories": "サブ・カテゴリーのみを含む", "Only include child tags": "サブタグのみを含む", "Only load menu items from the selected menu heading.": "選択されたメニュー見出しのメニュー項目のみを読み込む。", "Only post types with an archive can be redirected to the archive page.": "アーカイブのある投稿タイプのみをアーカイブ ページにリダイレクトできます。", "Only search the selected post types.": "選択した投稿タイプのみを検索します。", "Only show the image or icon.": "画像またはアイコンのみを表示", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "単一ページと投稿だけが個別のレイアウトを持つことができます。このページタイプに一般的なレイアウトを適用するにはテンプレートを使用してください。", "Opacity": "不透明度", "Open": "開く", "Open dropdowns on click instead of hover and align dropdowns to the filter bar instead of their item.": "ドロップダウンをホバーではなくクリックで開き、ドロップダウンをその項目ではなくフィルター バーに揃えます。", "Open in a new window": "新しいウィンドウで開く", "Open menu": "メニューを開く", "Open Templates": "テンプレートを開く", "Open the link in a new window": "新しいウィンドウでリンクを開く", "Opening the Changelog": "チェンジログを開く", "Options": "オプション", "Order": "順", "Order Direction": "方向の順序", "Order First": "オーダー・ファースト", "Order Received Page": "注文受付ページ", "Order the filter navigation alphabetically or by defining the order manually.": "フィルタのナビゲーションをアルファベット順、または手動で順序を定義します。", "Order Tracking": "注文の追跡", "Ordering": "順序付ける", "Ordering Sections, Rows and Elements": "セクション、行、要素を順序する。", "Out of Stock": "在庫切れ", "Outside": "外部", "Outside Breakpoint": "外部ブレイクポイント", "Outside Color": "外の色", "Overlap the following section": "次のセクションを重ねる", "Overlay": "オーバーレイ", "Overlay + Lightbox": "オーバーレイ+ライトボックス", "Overlay Color": "オーバーレイ色", "Overlay Default": "オーバーレイ デフォルト", "Overlay only": "オーバーレイのみ", "Overlay Parallax": "オーバーレイパララックス", "Overlay Primary": "オーバーレイ プライマリ", "Overlay Slider": "オーバーレイスライダー", "Overlay the site": "サイトをオーバーレイする。", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "セクションのアニメーション設定を上書きする。このセクションでアニメーションが有効になっていなければ、このオプションは効果を持たない。", "Pack": "パック", "Padding": "パディング", "Page": "ページ", "Page Category": "ページカテゴリ", "Page Locale": "ロケールページ", "Page Title": "ページタイトル", "Page URL": "ページURL", "Pages": "ページ", "Pagination": "ページネーション", "Panel": "パネル", "Panel + Lightbox": "パネル+ライトボックス", "Panel only": "パネルのみ", "Panel Slider": "パネルのスライダー", "Panels": "パネル", "Parallax": "パララックス", "Parallax Breakpoint": "パララックス・ブレイクポイント", "Parallax Easing": "パララックス・イーシング", "Parallax Start/End": "パララックススタート/終了", "Parallax Target": "パララックスターゲット", "Parent": "親", "Parent (%label%)": "親 (%label%)", "Parent %taxonomy%": "親 %taxonomy%", "Parent %type%": "親 %type%", "Parent Category": "親カテゴリ", "Parent Menu Item": "親メニュー項目", "Parent Tag": "親タグ", "Path": "パス", "Path Pattern": "パスパターン", "Pause autoplay on hover": "ホバー時に自動再生を一時停止", "Phone Landscape": "スマートフォン横画面", "Phone Portrait": "スマートフォン縦画面", "Photos": "画像", "Pick": "選択する", "Pick %type%": "選択 %type%", "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.": "手動で %post_type% を選ぶか、フィルターオプションを使って動的に読み込む %post_type% を指定します。", "Pick an alternative icon from the icon library.": "アイコンライブラリから代替アイコンを選ぶ。", "Pick an alternative SVG image from the media manager.": "メディアマネージャーから代替のSVG画像を選ぶ。", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "手動で記事を選ぶか、フィルターオプションを使って動的に読み込む記事を指定します。", "Pick an optional icon from the icon library.": "アイコンライブラリからオプションのアイコンを選ぶ。", "Pick file": "ファイルを選択", "Pick icon": "アイコンを選択", "Pick link": "リンクを選択", "Pick media": "メディアを選ぶ", "Pick video": "ビデオを選択", "Pill": "ピール", "Pixels": "ピクセル", "Placeholder Image": "プレースホルダー画像", "Placeholder Video": "プレースホルダービデオ", "Play inline on mobile devices": "モバイルデバイスでインライン再生", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "この機能を有効にするには、<a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">インストーラー プラグイン</a>をインストール/有効にしてください。", "Please provide a valid email address.": "有効なEメールアドレスをご記入ください。", "PNG to AVIF": "PNGからAVIFへの変換", "PNG to WebP": "PNGからWebPへの変換", "Popover": "ポップオーバー", "Popular %post_type%": "人気%post_type%", "Popup": "ポップアップ", "Port": "ポート", "Position": "ポジション", "Position Absolute": "絶対位置", "Position Sticky": "ポジションスティッキー", "Position Sticky Breakpoint": "ポジションスティッキーブレイクポイント", "Position Sticky Offset": "ポジション スティッキー オフセット", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "要素を他の要素の上または下に配置します。それらが同じスタックレベルを持つ場合、位置はレイアウト内の順序に依存します。", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "要素を通常のコンテンツ フロー内に配置するか、通常のフロー内に要素自体に対してオフセットを付けて配置するか、フローから要素を削除して、それを含む列を基準にして配置します。", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "フィルターナビゲーションを上部、左側、または右側に配置します。より大きなスタイルを左右のナビゲーションに適用できます。", "Position the meta text above or below the title.": "メタテキストをタイトルの上か下に配置する。", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "ナビゲーションを上下左右に配置します。より大きなスタイルを左右のナビゲーションに適用できます。", "Post": "投稿", "Post Order": "投稿順", "Post Type Archive": "投稿タイプアーカイブ", "Post Type Archive page": "投稿タイプアーカイブ", "Postal/ZIP Code": "郵便番号", "Poster Frame": "ポスター フレーム", "Poster Frame Focal Point": "ポスター フレーム焦点ポイント", "Posts per Page": "ページあたりの投稿数", "Prefer excerpt over intro text": "イントロテキストよりも抜粋を優先", "Prefer excerpt over regular text": "通常のテキストよりも抜粋を優先", "Preserve text color": "テキストの色を保持", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "カードを使用する場合など、テキストの色を保持します。セクションのオーバーラップはすべてのスタイルでサポートされているわけではなく、視覚効果がない場合があります。", "Preserve words": "単語を保持する", "Prevent form submit if live search is used": "ライブ検索が使用されている場合はフォームの送信を禁止する", "Preview all UI components": "すべての UI コンポーネントをプレビュー", "Previous %post_type%": "前の%post_type%", "Previous Article": "前の記事", "Previous page": "前のページ", "Previous slide": "前のスライド", "Previous/Next": "前へ/次へ", "Price": "販売価格", "Primary": "プライマリー", "Primary navigation": "プライマリナビゲーション", "Primary Size": "プライマリーサイズ", "pro layouts": "プロレイアウト", "pro presets": "プロプリセット", "Product Category Archive": "製品カテゴリアーカイブ", "Product Description": "製品説明", "Product Gallery": "製品ギャラリー", "Product IDs": "製品ID", "Product Images": "製品画像", "Product Information": "製品情報", "Product Meta": "製品メタ", "Product Ordering": "製品の整理", "Product Price": "製品価格", "Product Rating": "製品評価", "Product SKUs": "製品SKU", "Product Stock": "製品在庫", "Product Tabs": "製品タブ", "Product Tag Archive": "製品タグアーカイブ", "Product Title": "製品名", "Products": "製品", "Products Filter": "製品フィルター", "Property": "プロパティ", "Provider": "プロバイダー", "Published": "公開", "Published Date": "公開日", "Pull": "引っ張る", "Pull content behind header": "ヘッダーの後ろにコンテンツを引っ張る", "Purchases": "購入品", "Push": "プッシュ", "Push Items": "プッシュ項目", "Quantity": "数量", "Quarters": "四列", "Quarters 1-1-2": "四列: 1-1-2", "Quarters 1-2-1": "四列 :1-2-1", "Quarters 1-3": "四列 :1-3", "Quarters 2-1-1": "四列: 2-1-1", "Quarters 3-1": "四列:3-1", "Query": "クエリ", "Query String": "クエリ文字列", "Quotation": "引用", "r": "r", "Random": "ランダム", "Rating": "評価", "Ratio": "比率", "Read More": "続きを読む", "Recompile style": "スタイルを再コンパイルする", "Redirect": "リダイレクト", "Register date": "登録日", "Registered": "登録済み", "Registered Date": "登録日", "Reject Button Style": "リジェクトボタンのスタイル", "Reject Button Text": "リジェクトボタンテキスト", "Related %post_type%": "関連%post_type%", "Related Articles": "関連記事", "Related Products": "関連製品", "Relationship": "関係", "Relationships": "関係", "Relative": "相対的", "Reload Page": "ページのリロード", "Remove bottom margin": "下の余白を削除", "Remove bottom padding": "底のパッドを削除", "Remove horizontal padding": "水平パディングを削除", "Remove left and right padding": "左右のパディングを削除", "Remove left logo padding": "左ロゴのパディングを削除", "Remove left or right padding": "左右のパディングを削除", "Remove Media Files": "メディアファイルを削除", "Remove top margin": "上の余白を削除", "Remove top padding": "トップパディングを削除", "Remove vertical padding": "縦のパディングを削除", "Rename": "名前を変更", "Rename %type%": "名前変更%type%", "Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text.": "「続きを読む」タグが存在する場合は、イントロテキストをレンダリングします。そうでない場合は、コンテンツ全体を表示します。オプションで、イントロテキストよりも抜粋フィールドを優先することもできます。", "Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text. To use an excerpt field, create a custom field with the name excerpt.": "「続きを読む」タグが存在する場合は、導入テキストを表示します。存在しない場合は、コンテンツ全体を表示します。オプションで、導入テキストよりも抜粋フィールドを優先することもできます。抜粋フィールドを使用するには、「excerpt」という名前のカスタムフィールドを作成してください。", "Replace": "置換", "Replace layout": "レイアウトの置換", "Request": "リクエスト", "Reset": "リセット", "Reset Link Sent Page": "リンク送信ページのリセット", "Reset to defaults": "デフォルトへのリセット", "Resize Preview": "プレビューのサイズを変更する", "Responsive": "レスポンシブ", "Result Count": "結果数", "Reveal": "リベアル", "Reverse order": "逆順", "Right": "右", "Right (Clickable)": "右(クリック可)", "Right Bottom": "右下", "Right Center": "右センター", "Right Top": "右上", "Roadmap": "ロードマップ", "Roles": "ロール", "Root": "ルート", "Rotate": "回転させる", "Rotate the title 90 degrees clockwise or counterclockwise.": "タイトルを時計回りまたは反時計回りに90度回転させる。", "Rotation": "回転", "Rounded": "丸みを帯びた", "Row": "行", "Row Gap": "行のギャップ", "Rows": "行", "Run Time": "実行時間", "s": "s", "Same Window": "同じウィンドウ", "Satellite": "サテライト", "Saturation": "彩度", "Save": "保存する", "Save %type%": "保存%type%", "Save in Library": "ライブラリに保存", "Save Layout": "レイアウトを保存", "Save Module": "モジュールを保存", "Save Style": "スタイルを保存", "Save Template": "テンプレートを保存", "Save Widget": "ウィジェットを保存", "Scale": "スケール", "Scale Down": "スケールダウン", "Scale Up": "スケールアップ", "Scheme": "スキーム", "Screen": "スクリーン", "Script": "スクリプト", "Scroll into view": "スクロールして表示", "Scroll overflow": "スクロールオーバーフロー", "Search": "検索", "Search articles": "記事を検索", "Search Component": "コンポーネントの検索", "Search Dropbar": "検索ドロップバー", "Search Dropdown": "検索ドロップダウン", "Search Filter": "検索フィルター", "Search Icon": "アイコンを検索", "Search Item": "検索項目", "Search Layout": "レイアウトを検索", "Search Modal": "モーダルを検索", "Search Page": "ページを検索", "Search pages and post types": "ページと投稿タイプの検索", "Search Redirect": "リダイレクトを検索", "Search Style": "検索スタイル", "Search Word": "単語を検索", "Secondary": "セカンダリー", "Section": "セクション", "Section Animation": "セクションアニメーション", "Section Height": "セクション高さ", "Section Image and Video": "セクションの画像とビデオ", "Section Padding": "セクションパディング", "Section Style": "セクション スタイル", "Section Title": "セクションタイトル", "Section Width": "セクション幅", "Section/Row": "セクション/行", "Sections": "セクション", "Select": "選択する", "Select %item%": "%item%を選択", "Select %type%": "%type%を選択", "Select a card style.": "カードスタイルを選択する。", "Select a child theme. Note that different template files will be loaded, and theme settings will be updated respectively. To create a child theme, add a new folder <code>yootheme_NAME</code> in the templates directory, for example <code>yootheme_mytheme</code>.": "サブテーマを選択します。異なるテンプレート ファイルが読み込まれ、テーマ設定がそれぞれ更新されることに注意してください。子テーマを作成するには、テンプレート ディレクトリに新しいフォルダー <code>yootheme_NAME</code> を追加します (例: <code>yootheme_mytheme</code>)。", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "コンテンツ ソースを選択して、そのフィールドをマッピングできるようにします。現在のページのソースから選択するか、カスタム ソースをクエリします。", "Select a different position for this item.": "この項目の別の位置を選択する。", "Select a grid layout": "グリッドレイアウトを選択", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "すべての公開モジュールをレンダリングするJoomlaのモジュール位置を選択します。テーマによって他の場所にレンダリングされないbuilder-1から-6の位置を使用することをお勧めします。", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "特定のヘッダーレイアウトのオフキャンバスやモーダルダイアログに表示されるロゴを選択します。", "Select a panel style.": "カードスタイルを選択する。", "Select a predefined date format or enter a custom format.": "定義済みの日付書式を選択するか、カスタム書式を入力します。", "Select a predefined meta text style, including color, size and font-family.": "色、サイズ、フォントファミリーを含む、定義済みのメタ・テキスト・スタイルを選択します。", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "定義済みの検索パターンを選択するか、検索するカスタム文字列または正規表現を入力します。正規表現はスラッシュで囲む必要があります。たとえば、`my-string` または `/ab+c/` です。", "Select a predefined text style, including color, size and font-family.": "色、サイズ、フォントファミリーを含む、定義済みのテキストスタイルを選択します。", "Select a style for the continue reading button.": "続きを読むボタンのスタイルを選択します。", "Select a style for the overlay.": "オーバーレイのスタイルを選択する。", "Select a taxonomy to only load posts from the same term.": "タクソノミーを選択して、同じタームからの投稿のみを読み込む。", "Select a taxonomy to only navigate between posts from the same term.": "タクソノミーを選択すると、同じタームからの投稿のみをナビゲートします。", "Select a transition for the content when the overlay appears on hover or when active.": "オーバーレイがホバー時またはアクティブ時に表示されるコンテンツのトランジションを選択します。", "Select a transition for the content when the overlay appears on hover.": "ホバー時にオーバーレイが表示されるときのコンテンツのトランジションを選択します。", "Select a transition for the link when the overlay appears on hover or when active.": "オーバーレイがホバー時またはアクティブ時に表示されるリンクのトランジションを選択します。", "Select a transition for the link when the overlay appears on hover.": "ホバー時にオーバーレイが表示されるときのリンクのトランジションを選択します。", "Select a transition for the meta text when the overlay appears on hover or when active.": "ホバー時またはアクティブ時にオーバーレイが表示されるときのメタテキストのトランジションを選択します。", "Select a transition for the meta text when the overlay appears on hover.": "ホバー時にオーバーレイが表示されるときのメタテキストのトランジションを選択します。", "Select a transition for the overlay when it appears on hover or when active.": "ホバー時またはアクティブ時に表示されるオーバーレイのトランジションを選択します。", "Select a transition for the overlay when it appears on hover.": "ホバー時に表示されるオーバーレイのトランジションを選択します。", "Select a transition for the title when the overlay appears on hover or when active.": "ホバー時またはアクティブ時にオーバーレイが表示されるときのタイトルのトランジションを選択します。", "Select a transition for the title when the overlay appears on hover.": "ホバー時にオーバーレイが表示されるときのタイトルのトランジションを選択します。", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "ビデオ ファイルを選択するか、 <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> または <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a> のリンクを入力してください。", "Select a WooCommerce page.": "WooCommerceページを選択します。", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "すべての公開ウィジェットをレンダリングするWordPressウィジェットエリアを選択します。テーマによって他の場所にレンダリングされない builder-1 から -6 のウィジェットエリアを使用することをお勧めします。", "Select an alternative font family. Mind that not all styles have different font families.": "別のフォントファミリーを選択します。すべてのスタイルに異なるフォントファミリーがあるわけではないことに注意してください。", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "暗い背景でも見やすいように、白などの反転した色の代替ロゴを選択してください。必要に応じて自動的に表示されます。", "Select an alternative logo, which will be used on small devices.": "小さなデバイスで使用される代替ロゴを選択します。", "Select an animation that will be applied to the content items when filtering between them.": "コンテンツアイテム間のフィルタリング時に適用されるアニメーションを選択します。", "Select an animation that will be applied to the content items when toggling between them.": "コンテンツアイテムを切り替えるときに適用されるアニメーションを選択します。", "Select an image transition.": "画像トランジションを選択します。", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "画像のトランジションを選択します。 ホバー画像が設定されている場合、2 つの画像の間でトランジションが発生します。 <i>なし</i> を選択すると、ホバー画像がフェードインします。", "Select an optional <code>favicon.svg</code>. Modern browsers will use it instead of the PNG image. Use CSS to toggle the SVG color scheme for light/dark mode.": "オプションの <code>favicon.svg</code> を選択します。最新のブラウザでは、PNG 画像の代わりにこれを使用します。CSS を使用して、ライト/ダーク モードの SVG カラー スキームを切り替えます。", "Select an optional image that appears on hover.": "ホバー時に表示される任意の画像を選択します。", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "動画が再生されるまで表示される任意の画像を選択します。選択しない場合は、最初のビデオフレームがポスターフレームとして表示されます。", "Select an optional video that appears on hover.": "ホバー時に表示されるオプションのビデオを選択します。", "Select Color": "色を選択", "Select dialog layout": "ダイアログレイアウトの選択", "Select Element": "要素を選択", "Select Gradient": "グラデーションを選択", "Select header layout": "ヘッダーレイアウトを選択", "Select Image": "画像を選択", "Select Manually": "手動で選択", "Select menu item.": "メニュー項目を選択する", "Select menu items manually. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple menu items.": "メニュー項目を手動で選択します。複数のメニュー項目を選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "Select mobile dialog layout": "モバイル ダイアログ レイアウトを選択", "Select mobile header layout": "モバイルヘッダーのレイアウトを選択", "Select mobile search layout": "モバイル検索レイアウトを選択", "Select one of the boxed card or tile styles or a blank panel.": "ボックス・カード、タイル・スタイル、ブランク・パネルのいずれかを選択する。", "Select search layout": "検索レイアウトを選択", "Select the animation on how the dropbar appears below the navbar.": "ナビバーの下にドロップバーを表示するアニメーションを選択します。", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "列が他の列の前に表示され始めるブレークポイントを選択します。小さい画面サイズでは、列は自然な順序で表示されます。", "Select the color of the list markers.": "リストのマーカーの色を選択します。", "Select the content position.": "コンテンツの位置を選択します。", "Select the device size where the default header will be replaced by the mobile header.": "デフォルトのヘッダーをモバイルヘッダーに置き換えるデバイスサイズを選択します。", "Select the filter navigation style.": "フィルター ナビゲーション スタイルを選択します。", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "フィルターナビゲーションスタイルを選択します。ピルスタイルとディバイダースタイルは水平サブナビゲーションでのみ使用できます。", "Select the form size.": "フォームサイズを選択します。", "Select the form style.": "フォームのスタイルを選択します。", "Select the icon color.": "アイコンの色を選択します。", "Select the image border style.": "画像のボーダースタイルを選択します。", "Select the image box decoration style.": "画像ボックスの装飾スタイルを選択します。", "Select the image box shadow size on hover.": "ホバー時の画像ボックスのシャドウサイズを選択します。", "Select the image box shadow size.": "画像ボックスのシャドウサイズを選択します。", "Select the item type.": "項目の種類を選択します。", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "<code>dialog-mobile</code> 位置のレイアウトを選択します。その位置のプッシュされた項目は省略記号として表示されます。", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "<code>ダイアログ</code> の位置のレイアウトを選択します。プッシュできる項目は省略記号で表示されます。", "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.": "<code>logo-mobile</code>、<code>navbar-mobile</code>、<code>header-mobile</code> の位置のレイアウトを選択します。", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "<code>logo</code>、<code>navbar</code>、<code>header</code> の位置のレイアウトを選択します。レイアウトによっては、省略記号として表示される位置の項目を分割またはプッシュできます。", "Select the link style.": "リンクスタイルを選択します。", "Select the list style.": "リストのスタイルを選択します。", "Select the list to subscribe to.": "購読するリストを選択します。", "Select the logical operator for the attribute term comparison. Match at least one of the terms, none of the terms or all terms.": "属性項の比較に使用する論理演算子を選択します。少なくとも1つの項、いずれかの項、またはすべての項に一致します。", "Select the logical operator for the category comparison. Match at least one of the categories, none of the categories or all categories.": "カテゴリ比較の論理演算子を選択します。カテゴリの少なくとも1つ、カテゴリのどれにも一致しない、またはすべてのカテゴリに一致します。", "Select the logical operator for the tag comparison. Match at least one of the tags, none of the tags or all tags.": "タグ比較の論理演算子を選択します。タグの少なくとも1つ、タグのどれにも一致しない、またはすべてのタグに一致します。", "Select the marker of the list items.": "リスト項目のマーカーを選択します。", "Select the menu type.": "メニューの種類を選択します。", "Select the nav style.": "ナビスタイルを選択します。", "Select the navbar style.": "ナビバーのスタイルを選択します。", "Select the navigation type.": "ナビゲーションのタイプを選択します。", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "ナビゲーションのタイプを選択します。 ピルとディバイダーのスタイルは水平サブナビゲーションでのみ使用できます。", "Select the overlay or content position.": "オーバーレイまたはコンテンツの位置を選択します。", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "マーカーに合わせてポップオーバーを選択します。ポップオーバーがコンテナに収まらない場合は、自動的に反転します。", "Select the position of the navigation.": "ナビゲーションの位置を選択します。", "Select the position of the slidenav.": "スライドナビの位置を選択します。", "Select the position that will display the search.": "検索を表示する位置を選択します。", "Select the position that will display the social icons.": "ソーシャルアイコンを表示する位置を選択します。", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "ソーシャルアイコンを表示する位置を選択します。ソーシャル・プロフィールのリンクを必ず追加してください。", "Select the primary nav size.": "プライマリーナビのサイズを選択する。", "Select the search style.": "検索スタイルを選択します。", "Select the slideshow box shadow size.": "スライドショーボックスのシャドウサイズを選択します。", "Select the smart search filter.": "スマート検索フィルターを選択します。", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "コードのシンタックスハイライトのスタイルを選択します。明るい背景にはGitHubを、暗い背景にはMonokaiを使用してください。", "Select the style for the overlay.": "オーバーレイのスタイルを選択します。", "Select the subnav style.": "サブナビのスタイルを選択します。", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "SVGの色を選択する。SVGで定義されたサポートされている要素にのみ適用されます。", "Select the table style.": "表のスタイルを選択します。", "Select the text color.": "テキストの色を選択します。", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "テキストの色を選択します。背景]オプションを選択した場合、背景画像を適用しないスタイルでは、代わりに原色が使用されます。", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "テキストの色を選択します。背景オプションが選択されている場合、背景画像を適用しないスタイルでは、代わりに原色が使用されます。", "Select the title style and add an optional colon at the end of the title.": "タイトルのスタイルを選択し、オプションでタイトルの最後にコロンを追加する。", "Select the title style.": "タイトルのスタイルを選択します。", "Select the transformation origin for the Ken Burns animation.": "ケン・バーンズ・アニメーションの変換ポイントを選択します。", "Select the transition between two slides.": "2つのスライド間のトランジションを選択します。", "Select the video box decoration style.": "ビデオボックスの装飾スタイルを選択します。", "Select the video box shadow size.": "ビデオボックスのシャドウサイズを選択します。", "Select Video": "ビデオを選択", "Select whether a button or a clickable icon inside the email input is shown.": "Eメール入力内にボタンまたはクリック可能なアイコンを表示するかどうかを選択します。", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "購読ボタンをクリックした後、メッセージを表示するか、サイトをリダイレクトするかを選択します。", "Select whether the default Search or Smart Search is used by the search module and builder element.": "検索モジュールとビルダー要素で、デフォルトの検索とスマート検索のどちらを使用するかを選択します。", "Select whether the modules should be aligned side by side or stacked above each other.": "モジュールを横に並べるか、上に重ねるかを選択します。", "Select whether the widgets should be aligned side by side or stacked above each other.": "ウィジェットを横に並べるか、上に重ねるかを選択します。", "Select your <code>apple-touch-icon.png</code>. It appears when the website is added to the home screen on iOS devices. The recommended size is 180x180 pixels.": "<code>apple-touch-icon.png</code> を選択します。これは、Web サイトが iOS デバイスのホーム画面に追加されたときに表示されます。推奨サイズは 180 x 180 ピクセルです。", "Select your <code>favicon.png</code>. It appears in the browser's address bar, tab and bookmarks. The recommended size is 96x96 pixels.": "<code>favicon.png</code> を選択します。ブラウザのアドレスバー、タブ、ブックマークに表示されます。推奨サイズは 96 x 96 ピクセルです。", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "ロゴを選択する。オプションで、マークアップにSVGロゴを挿入し、自動的にテキストカラーを採用します。", "Sentence": "文章", "Separator": "セパレーター", "Serve AVIF images": "AVIF画像を使用する。", "Serve optimized image formats with better compression and quality than JPEG and PNG.": "JPEGやPNGよりも圧縮率が高く、品質の高い最適化された画像フォーマットを使用する。", "Serve WebP images": "WebP画像を使用する。", "Set %color% background": "%color%の背景を設定する", "Set a condition to display the element or its item depending on the content of a field.": "フィールドの内容に応じて、要素またはその項目を表示する条件を設定します。", "Set a different link ARIA label for this item.": "この項目に別のリンクARIAラベルを設定します。", "Set a different link text for this item.": "この項目に別のリンクテキストを設定します。", "Set a different text color for this item.": "この項目に別の文字色を設定します。", "Set a fixed height for all columns. They will keep their height when stacking. Optionally, subtract the header height to fill the first visible viewport.": "すべての列に固定の高さを設定します。積み重ねても高さは変わりません。オプションで、最初に表示されるビューポートを埋めるためにヘッダーの高さを差し引きます。", "Set a fixed height, and optionally subtract the header height to fill the first visible viewport. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.": "固定の高さを設定し、オプションでヘッダーの高さを引いて、最初に見えるビューポートを埋めます。あるいは、次のセクションもビューポートに収まるように高さを拡大するか、小さいページではビューポートを埋めるようにします。", "Set a fixed height. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.": "高さを固定します。あるいは、次のセクションもビューポートに収まるように高さを拡大するか、小さいページではビューポートを埋めるようにします。", "Set a fixed width.": "固定幅を設定する。", "Set a focal point to adjust the image focus when cropping.": "トリミング時に画像のフォーカスを調整するためのフォーカスポイントを設定します。", "Set a higher stacking order.": "より高い積み重ね順を設定する。", "Set a large initial letter that drops below the first line of the first paragraph.": "最初の段落の1行目より下に落ちるような大きな頭文字を設定する。", "Set a larger dropdown padding, show dropdowns in a full-width section called dropbar and display an icon to indicate dropdowns.": "ドロップダウンのパディングを大きく設定し、ドロップバーと呼ばれる全幅のセクションにドロップダウンを表示し、ドロップダウンを示すアイコンを表示します。", "Set a parallax animation to move columns with different heights until they justify at the bottom. Mind that this disables the vertical alignment of elements in the columns.": "パララックス・アニメーションを設定して、高さの異なるカラムを底辺で揃うまで移動させる。これはカラム内の要素の垂直方向の整列を無効にすることに注意してください。", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "サイドバーの幅をパーセントで設定すると、コンテンツカラムはそれに応じて調整されます。幅は、スタイルセクションで設定できるサイドバーの最小幅を下回ることはありません。", "Set a thematic break between paragraphs or give it no semantic meaning.": "段落と段落の間にテーマ的な区切りを設けるか、あるいは意味的な意味を与えない。", "Set an additional transparent overlay to soften the image or video.": "画像やビデオを柔らかくするために、透明なオーバーレイを追加設定します。", "Set an additional transparent overlay to soften the image.": "さらに透明なオーバーレイを設定し、画像を柔らかくする。", "Set an optional content width which doesn't affect the image if there is just one column.": "列が1つだけの場合、画像に影響を与えないオプションの内容幅を設定する。", "Set an optional content width which doesn't affect the image.": "画像に影響を与えない任意のコンテンツ幅を設定する。", "Set how the module should align when the container is larger than its max-width.": "コンテナが最大幅より大きい場合に、モジュールがどのように整列するかを設定する。", "Set how the widget should align when the container is larger than its max-width.": "コンテナが最大幅より大きい場合に、ウィジェットがどのように整列するかを設定します。", "Set light or dark color if the navigation is below the slideshow.": "ナビゲーションがスライドショーの下にある場合、色の明暗を設定します。", "Set light or dark color if the slidenav is outside.": "スライドナビが外側にある場合、色の明暗を設定します。", "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.": "スティッキーな透明ナビバーが上に表示されている場合、テキスト、ボタン、コントロールのライトまたはダークカラーモードを設定します。", "Set light or dark color mode for text, buttons and controls.": "テキスト、ボタン、コントロールのカラーモードの明暗を設定します。", "Set light or dark color mode.": "カラーモードの明暗を設定する。", "Set percentage change in lightness (Between -100 and 100).": "明るさの変化率を設定します(-100~100)。", "Set percentage change in saturation (Between -100 and 100).": "彩度の変化率を設定する(-100から100の間)。", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "ガンマ補正量の変化率を設定します(0.01~10.0の間、1.0は補正なし)。", "Set the alignment.": "配置を設定します。", "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.": "アニメーションのイージングを設定します。ゼロは均等な速度で遷移し、負の値は素早く開始し、正の値はゆっくりと開始します。", "Set the autoplay interval in seconds.": "自動再生間隔を秒単位で設定します。", "Set the blog width.": "ブログの幅を設定します。", "Set the breakpoint from which grid items will align side by side.": "グリッド項目を横に並べるブレークポイントを設定する。", "Set the breakpoint from which grid items will stack.": "グリッド項目をスタックするブレークポイントを設定する。", "Set the breakpoint from which the sidebar and content will stack.": "サイドバーとコンテンツがスタックするブレークポイントを設定する。", "Set the button size.": "ボタンサイズを設定します。", "Set the button style.": "ボタンスタイルを設定します。", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "各ブレークポイントの列幅を設定します。小数幅を混ぜたり、<i>Expand</i> 値と固定幅を組み合わせたりします。値を選択しない場合は、次に小さい画面サイズの列幅が適用されます。幅の組み合わせは常に全幅になります。", "Set the content width.": "コンテンツの幅を設定します。", "Set the device width from which the list columns should apply.": "リストの列を適用するデバイスの幅を設定する。", "Set the device width from which the nav columns should apply.": "ナビの列を適用するデバイスの幅を設定します。", "Set the device width from which the text columns should apply.": "テキストの列を適用するデバイスの幅を設定します。", "Set the dropbar width if it slides in from the left or right.": "ドロップバーが左右にスライドする場合の幅を設定します。", "Set the dropdown width in pixels (e.g. 600).": "ドロップダウンの幅をピクセル単位で設定します(例:600)。", "Set the duration for the Ken Burns effect in seconds.": "ケン・バーンズ効果の継続時間を秒単位で設定します。", "Set the filter toggle style.": "フィルターの切り替えスタイルを設定します。", "Set the height in pixels.": "高さをピクセル単位で設定する。", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "要素の下端の水平位置をピクセル単位で設定します。% や vw などの別の単位を入力することもできます。", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "要素の左端の水平位置をピクセル単位で設定します。% や vw などの別の単位を入力することもできます。", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "要素の右端の水平位置をピクセル単位で設定します。% や vw などの別の単位を入力することもできます。", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "要素の上端の水平位置をピクセル単位で設定します。% や vw などの別の単位を入力することもできます。", "Set the hover style for a linked title.": "リンクされたタイトルのホバースタイルを設定します。", "Set the hover transition for a linked image.": "リンク画像のホバー遷移を設定します。", "Set the hover transition for a linked image. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "リンクされた画像のホバートランジションを設定します。ホバー画像を設定すると、2つの画像間でトランジションが行われます。<i>なし</i>を選択した場合は、ホバー画像がフェードインします。", "Set the hue, e.g. <i>#ff0000</i>.": "色相を設定します(例:<i>#ff0000</i>)。", "Set the icon color.": "アイコンの色を設定します。", "Set the icon width.": "アイコンの幅を設定します。", "Set the initial background position, relative to the page layer.": "ページレイヤーからの相対的な背景の初期位置を設定する。", "Set the initial background position, relative to the section layer.": "セクションレイヤーからの相対的な背景の初期位置を設定する。", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "地図を表示する初期解像度を設定します。0は完全にズームアウトされ、18はズームインされた最高解像度です。", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in. Alternatively, set the viewport to contain the given markers.": "マップを表示する初期解像度を設定します。0 は完全にズームアウトされ、18 は最高解像度でズームインされます。または、指定されたマーカーが含まれるようにビューポートを設定します。", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "各ブレークポイントの項目の幅を設定します。<i>継承</i> は、次に小さい画面サイズの項目の幅を参照します。", "Set the level for the section heading or give it no semantic meaning.": "セクション見出しのレベルを設定するか、意味的な意味を持たせない。", "Set the link style.": "リンクスタイルを設定します。", "Set the logical operator for how the %post_type% relate to the author. Choose between matching at least one term, all terms or none of the terms.": "%post_type% が著者とどのように関係するかを示す論理演算子を設定します。少なくとも 1 つの用語に一致するか、すべての用語に一致するか、どの用語にも一致しないかを選択します。", "Set the logical operators for how the %post_type% relate to %taxonomy_list% and author. Choose between matching at least one term, all terms or none of the terms.": "%post_type% が %taxonomy_list% および作成者とどのように関係するかを示す論理演算子を設定します。少なくとも 1 つの用語に一致するか、すべての用語に一致するか、どの用語にも一致しないかを選択します。", "Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.": "記事がカテゴリー、タグ、著者とどのように関連しているかの論理演算子を設定する。少なくとも1つの用語にマッチするか、すべての用語にマッチするか、どの用語にもマッチしないかを選択します。", "Set the margin between the countdown and the label text.": "カウントダウンとラベルテキストの間のマージンを設定します。", "Set the margin between the overlay and the slideshow container.": "オーバーレイとスライドショーコンテナの間の余白を設定します。", "Set the maximum content width.": "コンテンツの最大幅を設定します。", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "コンテンツの最大幅を設定します。注: セクションには既に最大幅が設定されている場合があり、これを超えることはできません。", "Set the maximum header width.": "ヘッダーの最大幅を設定する。", "Set the maximum height.": "最大高さを設定する。", "Set the maximum width.": "最大幅を設定する。", "Set the number of columns for the cart cross-sell products.": "カートの販売商品の列数を設定します。", "Set the number of columns for the gallery thumbnails.": "ギャラリーのサムネイルの列数を設定する。", "Set the number of grid columns for desktops and larger screens. On smaller viewports the columns will adapt automatically.": "デスクトップや大きなスクリーン用にグリッドの列数を設定します。小さなビューポートでは、列は自動的に適応されます。", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "各ブレークポイントのグリッド列の数を設定します。<i>継承</i> は、次に小さい画面サイズの列の数を参照します。<i>自動</i> は、列を項目の幅に拡張し、それに応じて行を埋めます。", "Set the number of grid columns for the filters in a single dropdown.": "1 つのドロップダウンでフィルターのグリッド列の数を設定します。", "Set the number of grid columns.": "グリッドの列数を設定する。", "Set the number of items after which the following items are pushed to the bottom.": "次の項目が一番下に押し出されるまでの項目数を設定する。", "Set the number of items after which the following items are pushed to the right.": "次の項目が右に押されるまでの項目数を設定する。", "Set the number of items per page.": "ページあたりの項目数を設定します。", "Set the number of list columns.": "リストの列数を設定する。", "Set the number of posts per page.": "ページあたりの投稿数を設定します。", "Set the number of text columns.": "テキストの列数を設定する。", "Set the offset from the top of the viewport where the column or its elements should become sticky, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height.": "列またはその要素が固定されるビューポートの上部からのオフセットを設定します。例: <code>100px</code>、<code>50vh</code>、または <code>50vh - 50%</code>。パーセントは列の高さに関連します。", "Set the offset to specify which file is loaded.": "どのファイルを読み込むかを指定するオフセットを設定する。", "Set the order direction.": "順方向を設定する。", "Set the padding between sidebar and content.": "サイドバーとコンテンツの間のパディングを設定します。", "Set the padding between the card's edge and its content.": "カードの端と中身の間のパディングを設定する。", "Set the padding between the overlay and its content.": "オーバーレイとそのコンテンツの間のパディングを設定します。", "Set the padding.": "パディングを設定する。", "Set the post width. The image and content can't expand beyond this width.": "投稿幅を設定します。この幅を超えると、画像やコンテンツは拡大できません。", "Set the product ordering style.": "商品の整理スタイルを設定します。", "Set the product ordering.": "製品の順序を設定します。", "Set the search input size.": "検索入力サイズを設定する。", "Set the search input style.": "検索入力スタイルを設定します。", "Set the separator between fields.": "フィールド間のセパレータを設定します。", "Set the separator between list items.": "リスト項目間のセパレータを設定します。", "Set the separator between tags.": "タグ間のセパレータを設定する。", "Set the separator between terms.": "用語間の区切り文字を設定する。", "Set the separator between user groups.": "ユーザーグループ間のセパレータを設定します。", "Set the separator between user roles.": "ユーザ・ロール間の区切り文字を設定します。", "Set the size for the Gravatar image in pixels.": "Gravatar 画像のサイズをピクセル単位で設定します。", "Set the size of the column gap between multiple buttons.": "複数のボタン間の列のギャップの大きさを設定する。", "Set the size of the column gap between the numbers.": "数字と数字の間の列のギャップの大きさを設定する。", "Set the size of the gap between between the filter navigation and the content.": "フィルターナビゲーションとコンテンツの間のギャップの大きさを設定します。", "Set the size of the gap between the grid columns.": "グリッド列間のギャップの大きさを設定する。", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "グリッド列間のギャップのサイズを設定します。Joomla の <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">ブログ/おすすめレイアウト</a> 設定で列の数を定義します。\nGuriddo retsu-kan no gyappu no s", "Set the size of the gap between the grid rows.": "グリッド行間のギャップの大きさを設定する。", "Set the size of the gap between the image and the content.": "画像とコンテンツの間のギャップの大きさを設定します。", "Set the size of the gap between the navigation and the content.": "ナビゲーションとコンテンツの間のギャップのサイズを設定します。", "Set the size of the gap between the social icons.": "ソーシャルアイコン間のギャップの大きさを設定します。", "Set the size of the gap between the title and the content.": "タイトルとコンテンツの間のギャップの大きさを設定します。", "Set the size of the gap if the grid items stack.": "グリッド項目がスタックする場合のギャップのサイズを設定する。", "Set the size of the row gap between multiple buttons.": "複数のボタン間の行間ギャップの大きさを設定する。", "Set the size of the row gap between the numbers.": "数字と数字の間の行間ギャップの大きさを設定する。", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "スライドショーの比率を設定します。画像またはビデオ ファイルと同じ比率を使用することをお勧めします。幅と高さを使用します (例: <code>1600:900</code>)。", "Set the starting point and limit the number of %post_type%.": "開始点を設定し、%post_type%の数を制限する。", "Set the starting point and limit the number of %post_types%.": "開始点を設定し、%post_types% の数を制限する。", "Set the starting point and limit the number of %taxonomies%.": "開始点を設定し、%taxonomies% の数を制限する。", "Set the starting point and limit the number of articles.": "スタートポイントを設定し、記事数を制限する。", "Set the starting point and limit the number of categories.": "開始点を設定し、カテゴリー数を制限する。", "Set the starting point and limit the number of files.": "開始点を設定し、ファイル数を制限する。", "Set the starting point and limit the number of items.": "開始点を設定し、項目数を制限する。", "Set the starting point and limit the number of tagged items.": "開始点を設定し、タグ付けされた項目の数を制限する。", "Set the starting point and limit the number of tags.": "開始点を設定し、タグの数を制限する。", "Set the starting point and limit the number of users.": "開始点を設定し、ユーザー数を制限する。", "Set the starting point to specify which %post_type% is loaded.": "どの %post_type% を読み込むかを指定する開始点を設定する。", "Set the starting point to specify which article is loaded.": "どの記事が読み込まれるかを指定するために、開始点を設定する。", "Set the top margin if the image is aligned between the title and the content.": "画像をタイトルとコンテンツの間に配置する場合は、上余白を設定します。", "Set the top margin.": "上余白を設定する。", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "上余白を設定する。 余白は、コンテンツ・フィールドが他のコンテンツ・フィールドの直後にある場合にのみ適用されることに注意してください。", "Set the type of tagged items.": "タグ付けされた項目の種類を設定する。", "Set the velocity in pixels per millisecond.": "速度をミリ秒あたりのピクセル数で設定する。", "Set the vertical container padding to position the overlay.": "垂直コンテナのパディングを設定し、オーバーレイを配置する。", "Set the vertical margin.": "垂直余白を設定する。", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "垂直余白を設定する。 注意:最初の要素の上余白と最後の要素の下余白は常に削除されます。グリッドの設定で定義してください。", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "垂直余白を設定する。 注:最初のグリッドの上余白と最後のグリッドの下余白は常に削除されます。代わりにセクション設定で定義してください。", "Set the vertical padding.": "垂直パディングを設定します。", "Set the video dimensions.": "動画の寸法を設定する。", "Set the width and height for the content the link is linking to, i.e. image, video or iframe.": "リンク先のコンテンツ (画像、ビデオ、iframe など) の幅と高さを設定します。", "Set the width and height for the modal content, i.e. image, video or iframe.": "モーダル コンテンツ(画像、動画、iframe など)の幅と高さを設定します。", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "幅と高さをピクセル単位で設定します(例:600)。1つの値だけを設定すると、元の比率が維持されます。画像は自動的にリサイズされ、トリミングされます。", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "幅と高さをピクセル単位で設定します。1つの値だけを設定すると、元の比率が維持されます。画像は自動的にリサイズされ、トリミングされます。", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "幅をピクセル単位で設定する。幅が設定されていない場合、マップは幅いっぱいに表示されます。widthとheightの両方が設定された場合、マップは画像のように反応する。さらに、幅はブレークポイントとして使用できます。マップは幅いっぱいに表示されますが、ブレークポイントより下は縦横比を保ったまま縮小し始めます。", "Set the width of the dropbar content.": "ドロップバーのコンテンツの幅を設定します。", "Set whether it's an ordered or unordered list.": "順序付きリストか順序なしリストかを設定する。", "Sets": "セット", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "値を1つだけ設定すると、元の比率が維持されます。画像は自動的にサイズ変更およびトリミングされ、可能な場合は高解像度の画像が自動生成されます。", "Setting Menu Items": "メニュー項目の設定", "Setting the Blog Content": "ブログコンテンツの設定", "Setting the Blog Image": "ブログ画像の設定", "Setting the Blog Layout": "ブログのレイアウトを設定する", "Setting the Blog Navigation": "ブログのナビゲーションを設定する", "Setting the Dialog Layout": "ダイアログのレイアウトを設定する", "Setting the Header Layout": "ダイアログのレイアウトを設定する", "Setting the Main Section Height": "主要なセクション高さの設定", "Setting the Minimum Stability": "最小安定性の設定", "Setting the Mobile Dialog Layout": "ダイアログのレイアウトを設定する", "Setting the Mobile Header Layout": "モバイルヘッダレイアウトの設定", "Setting the Mobile Navbar": "モバイルナビバーの設定", "Setting the Mobile Search": "モバイル検索の設定", "Setting the Module Appearance Options": "モジュール外観オプションの設定", "Setting the Module Default Options": "モジュールデフォルトオプションの設定", "Setting the Module Grid Options": "モジュールグリッドオプションの設定", "Setting the Module List Options": "モジュールリストオプションの設定", "Setting the Module Menu Options": "モジュールメニューオプションの設定", "Setting the Navbar": "ナビバーの設定", "Setting the Page Layout": "ページレイアウトの設定", "Setting the Post Content": "投稿コンテンツの設定", "Setting the Post Image": "投稿画像の設定", "Setting the Post Layout": "投稿レイアウトの設定", "Setting the Post Navigation": "投稿ナビゲーションの設定", "Setting the Sidebar Area": "サイドバーエリアの設定", "Setting the Sidebar Position": "サイドバーの位置の設定", "Setting the Source Order and Direction": "ソースの順番と方向を設定する", "Setting the Template Loading Priority": "テンプレートの読み込み優先順位の設定", "Setting the Template Status": "テンプレートステータスの設定", "Setting the Top and Bottom Areas": "トップエリアとボトムエリアの設定", "Setting the Top and Bottom Positions": "トップポジションとボトムポジションの設定", "Setting the Widget Appearance Options": "ウィジェット外観オプションの設定", "Setting the Widget Default Options": "ウィジェットのデフォルトオプションを設定する", "Setting the Widget Grid Options": "ウィジェットのグリッドオプションの設定", "Setting the Widget List Options": "ウィジェットリストオプションの設定", "Setting the Widget Menu Options": "ウィジェットメニューオプションの設定", "Setting the WooCommerce Layout Options": "WooCommerceレイアウトオプションの設定", "Settings": "設定", "Shop": "ショッピング", "Shop and Search": "ショッピングと検索", "Short Description": "概要", "Show": "表示", "Show %taxonomy%": "%taxonomy%を表示", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "ウェブサイトが使用しているクッキーを訪問者に知らせるバナーを表示します。Cookieが読み込まれていることをシンプルに通知するか、Cookieを読み込む前に必須の同意を求めるかを選択できます。", "Show a clear all filters button and display the active filters together with the filters in the dropdown or offcanvas.": "すべてのフィルターをクリアするボタンを表示し、ドロップダウンまたはオフキャンバス内のフィルターとともにアクティブなフィルターを表示します。", "Show a divider between grid columns.": "グリッドの列の間に仕切りを表示する。", "Show a divider between list columns.": "リストの列の間に仕切りを表示する。", "Show a divider between text columns.": "テキスト列の間に仕切りを表示する。", "Show a separator between the numbers.": "数字の間にセパレーターを表示する。", "Show active filters": "アクティブなフィルターを表示", "Show an input field or an icon to open the search in a dropdown, dropbar or modal. To show live search results, assign a template in the Templates panel.": "入力フィールドまたはアイコンを表示して、ドロップダウン、ドロップバー、またはモーダルで検索を開きます。検索結果をリアルタイムで表示するには、テンプレートパネルでテンプレートを割り当てます。", "Show archive category title": "アーカイブ・カテゴリーのタイトルを表示する", "Show as disabled button": "無効なボタンとして表示", "Show attribute filters": "属性フィルターを表示", "Show author": "著者を表示する", "Show below": "下記に表示", "Show below slider": "下のスライダーを表示", "Show below slideshow": "スライドショーの下に表示", "Show button": "ボタンを表示", "Show categories": "カテゴリーを表示", "Show Category": "カテゴリーを表示", "Show close button": "閉じるボタンを表示する", "Show close icon": "「アイコンを閉じる」を表示", "Show comment count": "コメントのカウントを表示", "Show comments count": "コメントのカウントを表示", "Show content": "コンテンツを表示する", "Show Content": "コンテンツを表示する", "Show controls": "コントロールを表示", "Show controls always": "コントロールを常に表示", "Show counter": "カウンターを表示", "Show current page": "現在のページを表示", "Show date": "日付を表示", "Show dividers": "ディバイダーを表示", "Show drop cap": "ドロップキャップを表示", "Show element only if dynamic content is empty": "動的コンテンツが空の場合にのみ要素を表示する", "Show filter control for all items": "すべての項目にフィルターコントロールを表示する", "Show headline": "ヘッドラインを表示する", "Show home link": "ホームリンクを表示", "Show hover effect if linked.": "リンクされている場合、ホバー効果を表示します。", "Show intro text": "イントロテキストを表示する", "Show Labels": "ラベルを表示", "Show link": "リンクを表示", "Show lowest price": "最低価格を表示", "Show map controls": "地図設定を表示する", "Show message": "メッセージを表示する", "Show name fields": "フィールド名を表示する", "Show navigation": "ナビゲーションを表示する", "Show on hover only": "ホバー時のみ表示", "Show optional dividers between nav or subnav items.": "ナビやサブナビの項目間にオプションの仕切りを表示します。", "Show or hide content fields without the need to delete the content itself.": "コンテンツ自体を削除することなく、コンテンツフィールドを表示または非表示にすることができます。", "Show or hide fields in the meta text.": "メタテキストにフィールドを表示または非表示にする。", "Show or hide quantity.": "数量を表示または非表示にします。", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "このデバイス幅以上で要素を表示または非表示にします。すべての要素が非表示の場合、列、行、セクションもそれに応じて非表示になります。", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "パンくずナビゲーションの最初の項目としてホームリンクを、最後の項目として現在のページを表示または非表示にします。", "Show or hide the intro text.": "イントロテキストを表示または非表示にします。", "Show or hide the reviews link.": "レビューリンクを表示または非表示にする。", "Show or hide title.": "タイトルを表示または非表示にします.", "Show out of stock text as disabled button for simple products.": "シンプルな商品の無効化されたボタンとして、在庫切れのテキストを表示します。", "Show parent icon": "親アイコンを表示する", "Show points of interest": "注目ポイントを表示", "Show popup on load": "ロード時にポップアップを表示する", "Show price filter": "価格フィルターを表示", "Show product ordering": "製品の整理を表示", "Show quantity": "数量を表示", "Show rating": "評価を表示", "Show rating filter": "評価フィルターを表示", "Show result count": "結果カウントの表示", "Show result ordering": "結果の順序を表示", "Show reviews link": "レビューリンクを表示", "Show Separators": "セパレーターを表示", "Show space between links": "リンク間のスペースを表示", "Show Start/End links": "開始/終了リンクを表示", "Show system fields for single posts. This option does not apply to the blog.": "単一投稿にシステムフィールドを表示する。このオプションはブログには適用されません。", "Show system fields for the blog. This option does not apply to single posts.": "ブログのシステムフィールドを表示する。このオプションは単一記事には適用されません。", "Show tags": "タグを表示", "Show Tags": "タグを表示", "Show the active filter count in parenthesis or as superscript.": "アクティブなフィルターの数を括弧内または上付き文字で表示します。", "Show the content": "コンテンツを表示", "Show the excerpt in the blog overview instead of the post text.": "記事のテキストではなく、ブログの概要に抜粋を表示", "Show the hover image": "ホバー画像を表示する", "Show the hover video": "ホバー・ビデオを表示する", "Show the image": "画像を表示", "Show the link": "リンクを表示", "Show the lowest price instead of the price range.": "価格帯ではなく最安値を表示", "Show the menu text next to the icon": "アイコンの横にメニュー テキストを表示", "Show the meta text": "メタテキストを表示", "Show the navigation label instead of title": "タイトルの代わりにナビゲーション ラベルを表示", "Show the navigation thumbnail instead of the image": "画像の代わりにナビゲーション サムネイルを表示", "Show the overlay only on hover or when the slide becomes active.": "ホバー時またはスライドがアクティブになった時のみオーバーレイを表示する。", "Show the sale price before or after the regular price.": "通常価格の前後にセール価格を表示", "Show the subtitle": "サブタイトルを表示", "Show the title": "タイトルを表示", "Show the video": "ビデオを表示", "Show title": "タイトルを表示", "Show Title": "タイトルを表示", "Show Variations": "バリエーションを表示", "Shrink": "収縮", "Sidebar": "サイドバー", "Single %post_type%": "単一の%post_type%", "Single Article": "単一記事", "Single Contact": "単一連絡先", "Single Post": "単一投稿", "Single Post Pages": "単一投稿ページ", "Site": "サイト", "Site Title": "サイトタイトル", "Sixths": "6列", "Sixths 1-5": "6列:1-5", "Sixths 5-1": "6列:5-1", "Size": "サイズ", "Slide": "スライド", "Slide %s": "スライド %s", "Slide all visible items at once": "表示されているすべてのアイテムを一度にスライド", "Slide Bottom 100%": "スライドボトム 100%", "Slide Bottom Medium": "スライドボトム 中", "Slide Bottom Small": "スライドボトム 小", "Slide Left": "スライド左", "Slide Left 100%": "スライド左100%", "Slide Left Medium": "スライド左 中", "Slide Left Small": "スライド左 小", "Slide Right": "スライド右", "Slide Right 100%": "スライド右100%", "Slide Right Medium": "スライド右 中", "Slide Right Small": "スライド右 小", "Slide Top": "スライドトップ", "Slide Top 100%": "スライドトップ100%", "Slide Top Medium": "スライドトップ中", "Slide Top Small": "スライドトップ小", "Slidenav": "スライドナビ", "Slider": "スライダー", "Slideshow": "スライドショー", "Slug": "スラグ", "Small": "小", "Small (Phone Landscape)": "小(スマートフォン横画面)", "Smart Search": "スマート検索", "Smart Search Item": "スマート検索項目", "Social": "ソーシャル(SNS)", "Social Icons": "ソーシャルアイコン", "Social Icons Gap": "ソーシャルアイコンギャップ", "Social Icons Size": "ソーシャル・アイコン サイズ", "Soft-light": "ソフトライト", "Source": "ソース", "Split Items": "アイテム分割する", "Split the dropdown into columns.": "ドロップダウンを列に分割する。", "Spread": "拡大する", "Square": "スクエア", "Stable": "安定", "Stack columns on small devices or enable overflow scroll for the container.": "小さなデバイスでカラムをスタックするか、コンテナのオーバーフロースクロールを有効にする。", "Stacked": "積み重ね", "Stacked (Name fields as grid)": "スタック(フィールドにグリッド名を付ける)", "Stacked Center A": "スタックセンター A", "Stacked Center B": "スタックセンター B", "Stacked Center C": "スタックセンター C", "Stacked Center Split A": "スタックドセンタースプリットA", "Stacked Center Split B": "スタックドセンタースプリットB", "Stacked Justify": "スタック・ジャスティファイ", "Stacked Left": "左積み重ね", "Start": "スタート", "Start with all items closed": "すべてのアイテムを閉じた状態から始める。", "Starts with": "で始まる", "State or County": "州・県", "Static": "静的", "Status": "ステータス", "Stick the column or its elements to the top of the viewport while scrolling down. They will stop being sticky when they reach the bottom of the containing column, row or section. Optionally, blend all elements with the page content.": "下にスクロールしている間、列またはその要素をビューポートの上部に貼り付けます。それらが含まれる列、行、セクションの下部に達すると、粘着性はなくなります。オプションで、すべての要素をページコンテンツとブレンドします。", "Stick the navbar at the top of the viewport while scrolling or only when scrolling up.": "スクロール中、または上にスクロールするときだけ、ビューポートの上部にナビバーを貼り付ける。", "Sticky": "スティッキー", "Sticky Effect": "スティッキー効果", "Sticky on scroll up": "スクロールアップで粘着", "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.": "スティッキー セクションは、「カバー」はスクロール中に次のクションでカバーされます。「リベアル」は前のセクションによって表示されます。", "Stretch the dropdown to the width of the navbar or the navbar container.": "ドロップダウンをナビバーまたはナビバー・コンテナの幅に伸ばします。", "Stretch the modal to the width of the navbar or the navbar container, or show a full modal window.": "モーダルをナビゲーション バーまたはナビゲーション バー コンテナーの幅まで拡大するか、完全なモーダル ウィンドウを表示します。", "Stretch the panel to match the height of the grid cell.": "グリッドセルの高さに合わせてパネルをストレッチする。", "Striped": "ストライプ", "Style": "スタイル", "styles": "スタイル", "Sublayout": "サブレイアウト", "Subnav": "サブナビ", "Subnav (Nav)": "サブナビ(ナビ)", "Subnav Divider (Nav)": "サブナビディバイダー(ナビ)", "Subnav Pill (Nav)": "サブナビピル(ナビ)", "Subtitle": "サブタイトル", "Subtract height above": "上の高さを引く", "Subtract height above row": "行の上の高さを引く", "Subtract height above section": "セクションの上の高さを引く", "Success": "成功", "Support": "サポート", "Support Center": "サポートセンター", "SVG Color": "SVG 色", "Switch prices": "値段を変える", "Switcher": "スイッチャ", "Syntax Highlighting": "構文強調表示", "System Assets": "システム・アセット", "System Check": "システムチェック", "Tab": "タブ", "Table": "表", "Table Head": "表の先頭", "Tablet Landscape": "タブレット横向き", "Tabs": "タブ", "Tag": "タグ", "Tag Item": "アイテムにタグを付ける", "Tag Order": "注文にタグを付ける", "Tagged Items": "タグ付けされた項目", "Tags": "タグ", "Tags are only loaded from the selected parent tag.": "タグは選択された親タグからのみ読み込まれます。", "Tags Operator": "タグ オペレーター", "Target": "ターゲット", "Taxonomy Archive": "分類アーカイブ", "Teaser": "ティーザー", "Telephone": "電話番号", "Template": "テンプレート", "Templates": "テンプレート", "Term ID": "用語ID", "Term Order": "用語集", "Tertiary": "テレティタリー", "Text": "テキスト", "Text Alignment": "テキスト整列", "Text Alignment Breakpoint": "テキスト整列ブレークポイント", "Text Alignment Fallback": "テキスト整列フォールバック", "Text Bold": "テキスト太字", "Text Color": "テキスト色", "Text Large": "テキスト大", "Text Lead": "テキスト・リード", "Text Meta": "テキストメタ", "Text Muted": "ミュートされたテキスト", "Text Small": "テキスト小", "Text Style": "テキストスタイル", "The Accordion Element": "アコーディオン要素", "The Alert Element": "警告要素", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "アニメーションの開始と停止は、ビューポート内の要素の位置に依存します。または、親コンテナの位置を使用します。", "The animation starts and stops depending on the section position in the viewport. Alternatively, for example for sticky sections, use the position of next section.": "アニメーションの開始と停止は、ビューポート内のセクションの位置に依存します。スティッキーセクションの場合は、次のセクションの位置を使用することもできます。", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.": "アニメーションは、要素がビューポートに入ったときに開始し、ビューポートから出たときに終了します。オプションで、開始オフセットと終了オフセットを設定します (例: <code>100px</code>、<code>50vh</code>、または <code>50vh + 50%</code>)。パーセントは要素の高さに関連します。", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "アニメーションは、要素がビューポートに入ったときに開始し、ビューポートから出たときに終了します。オプションで、開始オフセットと終了オフセットを設定します (例: <code>100px</code>、<code>50vh</code>、または <code>50vh + 50%</code>)。パーセントはターゲットの高さに関連します。", "The animation starts when the row enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the row's height.": "アニメーションは、行がビューポートに入ったときに開始し、ビューポートから出たときに終了します。オプションで、開始オフセットと終了オフセットを設定します (例: <code>100px</code>、<code>50vh</code>、または <code>50vh + 50%</code>)。パーセントは行の高さに関連します。", "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.": "Apache モジュール <code>mod_pagespeed</code> により、OpenStreetMap のマップ要素の表示に問題が発生する可能性があります。", "The Area Element": "エリア要素", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "上部のバーはコンテンツを押し下げ、下部のバーはコンテンツの上に固定される。", "The Breadcrumbs Element": "パンくず要素", "The builder is not available on this page. It can only be used on pages, posts and categories.": "このページではビルダーは使用できません。ページ、投稿、カテゴリにのみ使用できます。", "The Button Element": "ボタン要素", "The changes you made will be lost if you navigate away from this page.": "このページから離れると、変更した内容は失われます。", "The Code Element": "コード要素", "The Countdown Element": "カウントダウン要素", "The current PHP version %version% is outdated. Upgrade the installation, preferably to the <a href=\"https://php.net\" target=\"_blank\">latest PHP version</a>.": "現在の PHP バージョン %version% は古くなっています。インストールをアップグレードしてください。できれば <a href=\"https://php.net\" target=\"_blank\">最新の PHP バージョン</a> にアップグレードしてください。", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "デフォルトの順序は、括弧によって設定された順序に従うか、システムによって設定されたデフォルトのファイル順序にフォールバックします。", "The Description List Element": "説明リスト要素", "The Divider Element": "ダイダー要素", "The Gallery Element": "ギャラリー要素", "The Grid Element": "グリッド要素", "The Headline Element": "見出し要素", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "高さはビューポートの高さに合わせて調整できます。<br><br>注: ビューポート オプションのいずれかを使用する場合は、セクション設定で高さが設定されていないことを確認してください。", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "高さはコンテンツに基づいて自動的に調整されます。または、高さをビューポートの高さに調整することもできます。<br><br>注: ビューポート オプションのいずれかを使用する場合は、セクション設定で高さが設定されていないことを確認してください。", "The Icon Element": "アイコン要素", "The Image Element": "画像要素", "The List Element": "リスト要素", "The list shows pages and is limited to 50. Use the search to find a specific page or search for a post of any post type to give it an individual layout.": "リストにはページが表示され、その数は50に制限されています。検索を使って特定のページを探したり、任意の投稿タイプの投稿を検索して個別のレイアウトを与えることができます。", "The list shows uncategorized articles and is limited to 50. Use the search to find a specific article or an article from another category to give it an individual layout.": "リストは未分類の記事を表示し、50件に制限されています。検索を使って特定の記事や他のカテゴリーの記事を探し、個別のレイアウトにすることができます。", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "ロゴはアイテムの間に自動的に配置されます。オプションで、アイテムが分割されるアイテム数を設定します。", "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.": "ロゴ画像が選択されていない場合、ロゴテキストが使用されます。画像が選択された場合、それはリンクのaria-label属性として使用されます。", "The Map Element": "地図要素", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "石積み効果は、グリッドアイテムの高さが異なっていても、隙間のないレイアウトを作り出します。 ", "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.": "テーマアップデートの最小安定性。ベータ版は新機能のテストや問題の報告のみにご利用ください。", "The Module Element": "モジュール要素", "The module maximum width.": "モジュールの最大幅", "The Nav Element": "ナビ要素", "The Newsletter Element": "ニュースレター要素", "The Overlay Element": "オーバーレイ要素", "The Overlay Slider Element": "オーバーレイスライダー要素", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "ページは %modifiedBy% によって更新されました。変更を破棄して再読み込みしますか?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "現在編集中のページは%modified_by%によって更新されました。変更を保存すると、以前の変更が上書きされます。とにかく保存しますか、それとも変更を破棄してページを再読み込みしますか?", "The Pagination Element": "パジネーション要素", "The Panel Element": "パネル要素", "The Panel Slider Element": "パネルスライダー要素", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels.": "パララックスアニメーションは、スクロール中に単一のグリッド列を異なる速度で動かします。垂直方向の視差オフセットをピクセル単位で定義します。", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.": "パララックスアニメーションは、スクロール中に単一のグリッド列を異なる速度で動かします。垂直方向の視差オフセットをピクセル単位で定義します。あるいは、異なる高さのカラムを底辺に揃うまで移動させます。", "The Popover Element": "ポップアップ要素", "The Position Element": "ポジション要素", "The Quotation Element": "引用要素", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "RSFirewall プラグインはビルダーのコンテンツを破損します。<a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall 構成</a> で、<em>電子メール アドレスをプレーン テキストから画像に変換する</em> 機能を無効にします。", "The Search Element": "検索要素", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=「index.php?option=com_config&view=component&component=com_cck」 target=「_blank」>SEBLOD configuration</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport or to fill the available space in the column.<br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "スライドショーは常に全幅に表示され、高さは定義された比率に基づいて自動的に調整されます。また、ビューポートの高さに合わせて調整したり、列の空きスペースに合わせて調整することもできます。<br><br>注: ビューポートオプションのいずれかを使用する場合は、セクション設定で高さが設定されていないことを確認してください。", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "スライドショーは常に全幅を占め、高さは定義された比率に基づいて自動的に調整されます。または、高さをビューポートの高さに調整することもできます。<br><br>注: ビューポート オプションのいずれかを使用する場合は、セクション設定で高さが設定されていないことを確認してください。", "The Slideshow Element": "スライドショー要素", "The Social Element": "ソーシャル(SNS)要素", "The Sublayout Element": "サブレイアウト要素", "The Subnav Element": "サブナビゲーション要素", "The Switcher Element": "スイッチャ要素", "The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.": "システム デバッグ モードで生成されるセッション データが多すぎるため、予期しない動作が発生する可能性があります。デバッグ モードを無効にします。", "The Table Element": "表の要素", "The template is only assigned to %post_types_lower% with the selected terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "テンプレートは、選択された用語を含む %post_types_lower% にのみ割り当てられます。複数の用語を選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to %taxonomies% if the selected terms are set in the URL. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "選択した用語が URL に設定されている場合にのみ、テンプレートは %taxonomies% に割り当てられます。複数の用語を選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to articles from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "テンプレートは、選択したカテゴリの記事にのみ割り当てられます。複数のカテゴリを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "テンプレートは、選択したタグを持つ記事にのみ割り当てられます。複数のタグを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to categories if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "選択したタグがメニュー項目に設定されている場合にのみ、テンプレートはカテゴリに割り当てられます。複数のタグを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to contacts from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "テンプレートは、選択したカテゴリの連絡先にのみ割り当てられます。複数のカテゴリを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to contacts with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "テンプレートは、選択したタグを持つ連絡先にのみ割り当てられます。複数のタグを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to the selected %taxonomies%. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple %taxonomies%.": "テンプレートは、選択した %taxonomies% にのみ割り当てられます。複数の %taxonomies% を選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "テンプレートは選択したカテゴリにのみ割り当てられます。複数のカテゴリを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The template is only assigned to the selected languages.": "テンプレートは選択した言語にのみ割り当てられます。", "The template is only assigned to the selected pages.": "テンプレートは選択されたページにのみ割り当てられます。", "The template is only assigned to the view if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "選択したタグがメニュー項目に設定されている場合にのみ、テンプレートがビューに割り当てられます。複数のタグを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "The Text Element": "テキスト要素", "The Totop Element": "トップへ要素", "The Video Element": "ビデオ要素", "The Widget Element": "ウィジェット要素", "The widget maximum width.": "ウィジェットの最大幅.", "The width of the grid column that contains the module.": "モジュールを含むグリッドの列の幅。", "The width of the grid column that contains the widget.": "ウィジェットを含むグリッド列の幅。", "The YOOtheme API key, which enables <span class=\"uk-text-nowrap\">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "YOOtheme API キーがありません。このキーにより、<span class=\"uk-text-nowrap\">1 クリック</span> 更新とレイアウト ライブラリへのアクセスが可能になります。<a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">アカウント設定</a>で API キーを作成してください。", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "YOOtheme Pro テーマ フォルダーの名前が変更されたため、重要な機能が失われました。テーマ フォルダーの名前を <code>yootheme</code> に戻してください。", "Theme Settings": "テーマ設定", "Thirds": "3列", "Thirds 1-2": "3列:1-2", "Thirds 2-1": "3列:2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "このフォルダはYOOtheme Proライブラリからレイアウトを使用する際にダウンロードした画像を保存します。Joomlaのimagesフォルダの中にあります。", "This is only used, if the thumbnail navigation is set.": "サムネイルナビゲーションが設定されている場合のみ使用されます。", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "このレイアウトには、Web サイトのメディア ライブラリにダウンロードする必要があるメディア ファイルが含まれています。 |||| このレイアウトには、Web サイトのメディア ライブラリにダウンロードする必要がある %smart_count% 個のメディア ファイルが含まれています。", "This option doesn't apply unless a URL has been added to the item.": "アイテムにURLが追加されていない限り、このオプションは適用されません。", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "アイテムにURLが追加されていない限り、このオプションは適用されません。アイテムのコンテンツだけがリンクされます。", "This option is only used if the thumbnail navigation is set.": "このオプションは、サムネイルナビゲーションが設定されている場合にのみ使用されます。", "Thumbnail": "サムネイル", "Thumbnail Inline SVG": "サムネイルインラインSVG", "Thumbnail SVG Color": "サムネイルSVG色", "Thumbnail Width/Height": "サムネイル幅/高さ", "Thumbnail Wrap": "サムネイルラップ", "Thumbnails": "サムネイル", "Thumbnav": "サムナビ", "Thumbnav Inline SVG": "サムナビインラインSVG", "Thumbnav SVG Color": "サムナビSVG色", "Thumbnav Wrap": "サム・ナビ・ラップ", "Tile Checked": "タイルチェック済み", "Tile Default": "タイル デフォルト", "Tile Muted": "ミュートされたタイル", "Tile Primary": "タイル・プライマリー", "Tile Secondary": "タイル・セカンダリー", "Time Archive": "タイムアーカイブ", "Title": "タイトル", "title": "タイトル", "Title Decoration": "タイトルデコレーション", "Title Margin": "タイトル余白", "Title Parallax": "タイトル パララックス", "Title Style": "タイトルスタイル", "Title styles differ in font-size but may also come with a predefined color, size and font.": "タイトル・スタイルはフォント・サイズが異なりますが、あらかじめ定義された色、サイズ、フォントが付属している場合もあります。", "Title Width": "タイトルの幅", "Title, Image, Meta, Content, Link": "タイトル、画像、メタ、コンテンツ、リンク", "Title, Meta, Content, Link, Image": "タイトル、メタ、コンテンツ、リンク、画像", "To left": "左へ", "To right": "右へ", "To Top": "トップへ", "Toggle Dropbar": "ドロップバーを切り替える", "Toggle Dropdown": "ドロップダウンを切り替える", "Toggle Modal": "モーダルを切り替える", "Toolbar": "ツールバー", "Toolbar Left End": "ツールバー左端", "Toolbar Left Start": "ツールバー左スタート", "Toolbar Right End": "ツールバー右端", "Toolbar Right Start": "ツールバー右スタート", "Top": "トップ", "Top and Bottom": "上と下", "Top Center": "トップセンター", "Top Left": "左上", "Top Right": "右上", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "パネルの端に上下左右に配置した画像を貼り付けることができます。画像が左または右に配置されている場合、画像はスペース全体をカバーするように拡張されます。", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "上、左、右揃えの画像をパネルの端に貼り付けることができます。画像が左または右に配置されている場合、画像はスペース全体をカバーするように拡張されます。", "Total Views": "総閲覧数", "Touch Icon": "タッチアイコン", "Transform": "変換", "Transform Origin": "変換の原点", "Transform the element into another element while keeping its content and settings. Unused content and settings are removed. Transforming into a preset only keeps the content but adopts all preset settings.": "要素の内容と設定を保持したまま、要素を別の要素に変換します。未使用のコンテンツと設定は削除されます。プリセットへの変換は、内容のみを保持し、すべてのプリセット設定を採用します。", "Transition": "トランジション", "Translate X": "平行移動 X", "Translate Y": "平行移動 Y", "Transparent Background": "透明なバックグラウンド", "Transparent Header": "透明ヘッダー", "Tuesday, Aug 06 (l, M d)": "火曜日, 8月6日 (曜日, 月,日)", "Type": "タイプ", "ul": "ul", "Understanding Status Icons": "ステータスアイコンの理解", "Understanding the Layout Structure": "レイアウト構造を理解", "Unknown %type%": "未知 %type%", "Unknown error.": "不明なエラーです。", "Unpublished": "未公開", "Updating YOOtheme Pro": "YOOtheme Proのアップデート中", "Upload": "アップロード", "Upload a background image.": "背景画像をアップロードする。", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "ページを覆うオプションの背景画像をアップロードします。スクロール中に修正されます。", "Upload Layout": "レイアウトをアップロードする", "Upload Preset": "プリセットをアップロードする", "Upload Style": "スタイルをアップロードする", "Upsell Products": "商品のアップセル", "Url": "URL", "URL": "URL", "URL Protocol": "URLプロトコル", "Use a numeric pagination or previous/next links to move between blog pages.": "ブログのページ間を移動するには、数値ページ区切りまたは前/次のリンクを使用します。", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "小さなデバイスで画像がコンテンツより小さくなるのを防ぐために、オプションで最小の高さを使用します。", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "オプションの最小高さを使用して、小さなデバイスでスライダーがコンテンツより小さくなるのを防ぎます。", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "オプションの最小高さを使用して、小さなデバイスでスライドショーがコンテンツより小さくなるのを防ぎます。", "Use as breakpoint only": "ブレークポイントとしてのみ使用する", "Use double opt-in.": "ダブルオプトインを利用する。", "Use excerpt": "抜粋を使用する", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "背景色をブレンド モード、透明な画像と組み合わせて使用するか、画像がページ全体をカバーしていない場合は領域を埋めるために使用します。", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "背景色をブレンド モード、透明な画像と組み合わせて使用するか、画像がセクション全体をカバーしていない場合は領域を埋めるために使用します。", "Use the background color in combination with blend modes.": "ブレンドモードと組み合わせて背景色を使う。", "User": "ユーザー", "User Group": "ユーザーグループ", "User Groups": "ユーザーグループ", "Username": "ユーザ名", "Users": "ユーザー", "Users are only loaded from the selected roles. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple roles.": "ユーザーは選択されたロールからのみ読み込まれます。複数のロールを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "Users are only loaded from the selected user groups. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple user groups.": "ユーザーは、選択したユーザー グループからのみ読み込まれます。複数のユーザー グループを選択するには、<kbd>shift</kbd> キーまたは <kbd>ctrl/cmd</kbd> キーを使用します。", "Using Advanced Custom Fields": "高度なカスタムフィールドを使用する", "Using Content Fields": "コンテンツ・フィールドの使用", "Using Content Sources": "コンテンツ・ソースの使用", "Using Custom Fields": "カスタムフィールドの使用", "Using Custom Post Type UI": "カスタム投稿タイプUIの使用", "Using Custom Post Types": "カスタム投稿タイプの使用", "Using Custom Sources": "カスタムソースの使用", "Using Dynamic Conditions": "動的条件の使用", "Using Dynamic Multiplication": "動的乗算の使用", "Using Elements": "要素の使用", "Using External Sources": "外部ソースの使用", "Using Images": "画像の利用", "Using Links": "リンクの利用", "Using Menu Location Options": "メニューロケーションオプションの使用", "Using Menu Locations": "メニューロケーションの使用", "Using Menu Position Options": "メニューポジションオプションの使用", "Using Menu Positions": "メニューポジションの使用", "Using Module Positions": "モジュール・ポジションの使用", "Using My Layouts": "マイレイアウトの使用", "Using My Presets": "マイプリセットの使用", "Using Page Sources": "ページソースの使用", "Using Parent Sources": "親ソースの利用", "Using Powerful Posts Per Page": "ページごとに強力な投稿を使う", "Using Pro Layouts": "プロ・レイアウトの使用", "Using Pro Presets": "プロプリセットの使用", "Using Related Sources": "関連ソースの使用", "Using Site Sources": "サイトソースの使用", "Using the Before and After Field Options": "ビフォー・アフター・フィールド・オプションの使用", "Using the Builder Module": "ビルダーモジュールの使用", "Using the Builder Widget": "ビルダー・ウィジェットの使用", "Using the Categories and Tags Field Options": "カテゴリーとタグのフィールド・オプションの使用", "Using the Content Field Options": "コンテンツフィールドオプションの使用", "Using the Content Length Field Option": "コンテンツの長さフィールド・オプションの使用", "Using the Contextual Help": "コンテキストヘルプの使用", "Using the Date Format Field Option": "日付フォーマットフィールドオプションの使用", "Using the Device Preview Buttons": "デバイスプレビューボタンの使用", "Using the Dropdown Menu": "ドロップダウンメニューの使用", "Using the Element Finder": "要素ファインダーの使用", "Using the Footer Builder": "フッタービルダーの使用", "Using the Media Manager": "メディアマネージャーの使用", "Using the Mega Menu Builder": "メガメニュービルダーの使用", "Using the Menu Module": "メニューモジュールの使用", "Using the Menu Widget": "メニューウィジェットの使用", "Using the Meta Field Options": "メタフィールドオプションの使用", "Using the Page Builder": "ページビルダーの使用", "Using the Search and Replace Field Options": "検索と置換のフィールド・オプションの使用", "Using the Sidebar": "サイドバーの使用", "Using the Tags Field Options": "タグフィールドオプションの使用", "Using the Teaser Field Options": "ティーザー・フィールド・オプションの使用", "Using the Toolbar": "ツールバーの使用", "Using the Unsplash Library": "Unsplashライブラリの使用", "Using the WooCommerce Builder Elements": "WooCommerceビルダー要素の使用", "Using the WooCommerce Page Builder": "WooCommerceページビルダーの使用", "Using the WooCommerce Pages Element": "WooCommerceページ要素の使用", "Using the WooCommerce Product Stock Element": "WooCommerce商品在庫要素の使用", "Using the WooCommerce Products Element": "WooCommerce商品要素の使用", "Using the WooCommerce Related and Upsell Products Elements": "WooCommerceの関連商品とアップセル商品の要素の使用", "Using the WooCommerce Style Customizer": "WooCommerceスタイルカスタマイザーの使用", "Using the WooCommerce Template Builder": "WooCommerceテンプレートビルダーの使用", "Using Toolset": "ツールセットの使用", "Using Widget Areas": "ウィジェット・エリアの使用", "Using WooCommerce Dynamic Content": "WooCommerceダイナミックコンテンツの使用", "Using WordPress Category Order and Taxonomy Terms Order": "WordPressのカテゴリー順とタクソノミーの用語順の使用", "Using WordPress Popular Posts": "WordPressの人気投稿の利用", "Using WordPress Post Types Order": "WordPressの投稿タイプの順序の使用", "Value": "値", "Values": "値", "Variable Product": "可変製品", "Velocity": "速度", "Version %version%": "バージョン%version%", "Vertical": "垂直方向", "Vertical Alignment": "垂直整列", "Vertical navigation": "垂直方向のナビゲーション", "Vertically align the elements in the column.": "列の要素を垂直方向に揃える。", "Vertically center grid items.": "グリッドアイテムを垂直方向に中央に配置する。", "Vertically center table cells.": "表のセルを垂直方向に中央揃えする。", "Vertically center the image.": "画像を垂直方向にセンタリングする。", "Vertically center the navigation and content.": "ナビゲーションとコンテンツを縦中央に配置する。", "Video": "ビデオ", "Video Autoplay": "ビデオの自動再生", "Video Title": "ビデオタイトル", "Videos": "ビデオ", "View Photos": "写真を見る", "Viewport": "ビューポート", "Viewport (Subtract Next Section)": "ビューポート(次のセクションを引く)", "Viewport Height": "ビューポートの高さ", "Visibility": "可視性", "Visible Large (Desktop)": "可視:大(デスクトップ)", "Visible Medium (Tablet Landscape)": "可視:中(タブレット横画面)", "Visible on this page": "このページに表示", "Visible Small (Phone Landscape)": "可視:小(スマートフォン横画面)", "Visible X-Large (Large Screens)": "可視:X 大 (大画面)", "Visual": "ビジュアル", "Votes": "投票", "Warning": "警告", "WebP image format isn't supported. Enable WebP support in the <a href=\"https://php.net/manual/en/image.installation.php\" target=\"_blank\">GD extension</a>.": "WebP 画像形式はサポートされていません。<a href=\"https://php.net/manual/en/image.installation.php\" target=\"_blank\">GD 拡張機能</a> で WebP サポートを有効にしてください。", "Website": "ウェブサイト", "Website Url": "ウェブサイトのURL", "What's New": "新着情報", "When using cover mode, you need to set the text color manually.": "表紙モードを使用する場合は、文字の色を手動で設定する必要があります。", "White": "白", "Whole": "全", "Widget": "ウィジェット", "Widget Area": "ウィジェットエリア", "Widget Theme Settings": "ウィジェットテーマ設定", "Widgets": "ウィジェット", "Widgets and Areas": "ウィジェットとエリア", "Width": "幅", "Width 100%": "幅100%", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "画像が縦長または横長の場合、幅と高さはそれに応じて反転します。", "Width/Height": "幅/高さ", "With Clear all button": "すべてクリアボタン付き", "With mandatory consent": "強制的な同意", "Woo Notices": "Wooの通知", "Woo Pages": "Woo ページ", "WooCommerce": "WooCommerce", "Working with Multiple Authors": "複数の著者との共同作業", "Wrap with nav element": "nav要素でラップする", "X": "X", "X-Large": "X-大", "X-Large (Large Screens)": "X-大(大画面)", "X-Small": "X-小", "Y": "Y", "Year Archive": "年アーカイブ", "YOOtheme": "YOOtheme", "YOOtheme API Key": "YOOtheme APIキー", "YOOtheme Help": "YOOthemeヘルプ", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Proは完全稼動し、準備ができています。", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Proが動作しません。すべての重要な問題を修正する必要があります。", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Proは動作可能ですが、機能をアンロックし、パフォーマンスを向上させるために修正する必要がある問題があります。", "Z Index": "Zインデックス", "Zoom": "ズーム" }theme/languages/ru_RU.json000064400001175170151666572140011574 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Выберите -", "- Select Module -": "- Выберите модуль -", "- Select Position -": "- Выберите позицию -", "- Select Widget -": "- Выберите виджет -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" уже существует в библиотеке и будет перезаписан при сохранении.", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% Элемент", "%email% is already a list member.": "%email% уже в списке участников.", "%email% was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%email% был окончательно удален и не может быть повторно импортирован. Контакт должен повторно подписаться, чтобы вернуться в список.", "%group% (Category)": "%group% (Категория)", "%group% (User)": "%group% (Пользователь)", "%label% - %group%": "%label% - %group%", "%label% (%depth%)": "%label% (%depth%)", "%label% Location": "%label% Локации", "%label% Position": "%label% позиция", "%name% already exists. Do you really want to rename?": "%name% уже существует. Вы действительно хотите переименовать?", "%name% Copy": "%name% Копировать", "%name% Copy %index%": "%name% Копировать %index%", "%post_type% Archive": "%post_type% Архив", "%s is already a list member.": "%s уже является участником списка.", "%s of %s": "%s из %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s был безвозвратно удален и не может быть повторно импортирован. Контакт должен повторно подписаться, чтобы вернуться в список.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% коллекция |||| %smart_count% коллекции", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% элемент |||| %smart_count% элементов", "%smart_count% File |||| %smart_count% Files": "%smart_count% файл |||| %smart_count% файлы", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% выбранный файл |||| %smart_count% выбранные файлы", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% иконка |||| %smart_count% иконок", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% макет |||| %smart_count% макетов", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% файл не загружен: |||| %smart_count% файлы не загружены:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Фото|||| %smart_count% Фото", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Примера | | | / %smart_count% Примеров", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% стиль |||| %smart_count% стилей", "%smart_count% User |||| %smart_count% Users": "%smart_count% пользователь |||| %smart_count% пользователи", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% загружаются только из выбранной родительской %taxonomy%.", "%title% (Referencing me)": "%title% (Ссылаются на меня)", "%title% %index%": "%title% %index%", "%type% Presets": "%type% Примеры", "<code>json_encode()</code> must be available. Install and enable the <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> extension.": "Требуется функция <code>json_encode()</code> . Установите и включите расширение <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a>.", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 колонка", "1 Column Content Width": "Ширина содержимого колонки", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "1999-09-06 15:00:00": "1999-09-06 15:00:00", "2 Column Grid": "Сетка из 2 колонок", "2 Column Grid (Meta only)": "Сетка из 2 колонок (только для Мета описания)", "2 Columns": "2 колонки", "20%": "20%", "25%": "25%", "2X-Large": "2X-Large", "3 Columns": "3 колонки", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3rd Party Integration": "Сторонняя интеграция", "3X-Large": "3X-Large", "4 Columns": "4 колонки", "40%": "40%", "5 Columns": "5 колонок", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 Aug, 1999 (j M, Y)", "6 Columns": "6 Колонок", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рекомендуется более высокий лимит памяти. Установите для <code>memory_limit</code> значение 512 МБ в <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">конфигурации PHP</a>.", "A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рекомендуется более высокий лимит загрузки. Установите для <code>post_max_size</code> значение 32M в <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">конфигурации PHP</a>.", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рекомендуется более высокий лимит загрузки. Установите для <code>upload_max_filesize</code> значение 32M в <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">конфигурации PHP</a>.", "About": "О шаблоне", "Above Content": "Над содержимом", "Above Title": "Над заголовком", "Absolute": "Absolute", "Accessed": "Доступный", "Accessed Date": "Дата доступа", "Accordion": "Аккордеон", "Active": "Активный", "Active Filters": "Активные фильтры", "Active Filters Count": "Количество активных фильтров", "Active item": "Активный элемент", "Active language as parent item": "Активный язык как родительский пункт", "Add": "Добавить", "Add a colon": "Добавить двоеточие", "Add a comma-separated list of font weights to load, e.g. 300, 400, 600. Look up available variants at <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.": "Добавьте список начертаний шрифтов для загрузки, разделенных запятыми, например, 300, 400, 600. Найдите доступные варианты на сайте <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.", "Add a leader": "Добавить точки", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Добавить эффект параллакса или зафиксировать фон в области просмотра при прокрутке.", "Add a parallax effect.": "Добавить эффект параллакса.", "Add a stepless parallax animation based on the scroll position.": "Добавьте плавную анимацию параллакса в зависимости от положения прокрутки.", "Add animation stop": "Добавить остановку анимации", "Add bottom margin": "Добавить границу снизу", "Add clipping offset": "Исправить подрезку тени", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. Don't use any <code><style></code> tag.": "Добавьте свой CSS или LESS код на ваш сайт. Все LESS переменные темы, миксины и расширения классов доступны. Не используйте никаких <code><style></code> тегов.", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Здесь можно добавить свой CSS или LESS код стилей. Доступны все LESS переменные темы. Тег <code><style></code> не нужен.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Здесь можно добавить свой JavaScript. Тег <code><script></code> не требуется.", "Add custom JavaScript to your site. The <code><script></code> tag is optional.": "Добавьте свой JavaScript код на сайт. Тег <code><script></code> не обязателен.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Добавьте пользовательский JavaScript, который устанавливает файлы cookie. Он будет загружен после получения согласия. <code><script></code> тег не нужен.", "Add Element": "Добавить элемент", "Add extra margin to the button.": "Добавить внешний отступ к кнопке.", "Add Folder": "Добавить папку", "Add hover style": "Добавить стиль при наведении", "Add Item": "Добавить элемент", "Add JavaScript to the corresponding cookie category. If cookies require consent for multiple categories, add them to the <code>functional</code> group and use the data-category attribute with a space-separated list, for example <code><script data-category=\"statistics marketing\"></code>.": "Добавьте JavaScript в соответствующую категорию cookie. Если файлы cookie требуют согласия для нескольких категорий, добавьте их в группу <code> function </code> и используйте атрибут data-category со списком через пробелы, например, <code> <script data-category = \"Статистика Маркетинга\"> </code>.", "Add margin between": "Добавить отступ между", "Add Media": "Добавить медиафайл", "Add Menu Item": "Добавить пункт меню", "Add Module": "Добавить модуль", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Добавьте несколько остановок, чтобы определить начальный, промежуточный и конечный цвета последовательности анимации. При необходимости укажите процент для размещения остановок вдоль последовательности анимации.", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Добавьте несколько точек остановки, чтобы определить начальную, промежуточную и конечную прозрачность последовательности анимации. При необходимости укажите процент для размещения точек остановок в последовательности анимации.", "Add Row": "Добавить строку", "Add Section": "Добавить секцию", "Add text after the content field.": "Добавьте текст после поля содержимого.", "Add text before the content field.": "Добавьте текст перед полем содержимого.", "Add to Cart": "Добавить в корзину", "Add to Cart Link": "Добавить в корзину Ссылку", "Add to Cart Text": "Добавить в корзину Текст", "Add top margin": "Добавить отступ сверху", "Adding a New Page": "Добавить новую страницу", "Adding the Logo": "Добавление Лого", "Adding the Search": "Добавить поиск", "Adding the Social Icons": "Добавление социальных иконок", "Additional Information": "Дополнительная информация", "Address": "Адрес", "Advanced": "Еще", "Advanced WooCommerce Integration": "Расширенная интеграция с WooCommerce", "After": "После", "After 1 Item": "После 1 элемента", "After 10 Items": "После 10 элементов", "After 2 Items": "После 2 элементов", "After 3 Items": "После 3 элементов", "After 4 Items": "После 4 элементов", "After 5 Items": "После 5 элементов", "After 6 Items": "После 6 элементов", "After 7 Items": "После 7 элементов", "After 8 Items": "После 8 элементов", "After 9 Items": "После 9 элементов", "After Display Content": "После отображения содержимого", "After Display Title": "После заголовка", "After Submit": "После отправки", "Alert": "Alert", "Alias": "Алиас", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Выровняйте раскрывающиеся списки с их пунктом меню или панелью навигации. При желании покажите их в разделе полной ширины, называемом Dropbar панель, отобразите значок для обозначения раскрывающихся списков и разрешите текстовым элементам открываться по щелчку, а не по наведению.", "Align image without padding": "Выровнять изображение без отступов", "Align the filter controls.": "Выравнивание элементов фильтра.", "Align the image to the left or right.": "Выровнять изображение по левой или правой стороне контейнера.", "Align the image to the top or place it between the title and the content.": "Выровнять изображение вверху или в между заголовком и содержанием.", "Align the image to the top, left, right or place it between the title and the content.": "Выровнять изображение по верхней, левой, правой стороне контейнера или поместить его между заголовком и содержанием.", "Align the meta text.": "Выравнять мета текст.", "Align the navigation items.": "Выравнивание элементов навигации.", "Align the section content vertically, if the section height is larger than the content itself.": "Выровняйте содержимое раздела по вертикали, если высота раздела больше, чем само содержимое.", "Align the title and meta text as well as the continue reading button.": "Выровнять по середине заголовок, мета-текст, а также кнопку продолжить чтение.", "Align the title and meta text.": "Выровнять заголовок и мета-данные.", "Align the title to the top or left in regards to the content.": "Выравнять заголовок вверх или влево по отношению к контенту.", "Align to filter bar": "Выровнять по панели фильтра", "Align to navbar": "Выровнять по панели навигации", "Alignment": "Выравнивание", "Alignment Breakpoint": "Контрольная точка выравнивания", "Alignment Fallback": "Fallback выравнивания", "All %filter%": "Все %filter%", "All %label%": "Все %label%", "All backgrounds": "Все фоны", "All colors": "Все цвета", "All except first page": "Все, кроме первой страницы", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Все изображения, распространяемые на условиях лицензии <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, а это значит, что вы можете копировать, изменять, распространять и использовать изображения бесплатно, в том числе в коммерческих целях, не спрашивая разрешения.", "All Items": "Все элементы", "All layouts": "Все макеты", "All pages": "Все страницы", "All presets": "Все примеры", "All styles": "Все стили", "All topics": "Все темы", "All types": "Все типы", "All websites": "Все сайты", "All-time": "все время", "Allow mixed image orientations": "Разрешить смешанные ориентации изображения", "Allow multiple open items": "Разрешить одновременное открытие нескольких элементов", "Alphabetical": "По алфавиту", "Alphanumeric Ordering": "Буквенно-Цифровой Порядок", "Alt": "Alt", "Alternate": "Alternate", "Always": "Всегда", "Animate background only": "Анимация только фона", "Animate items": "Анимация элементов", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Анимация свойств для определенных значений. Добавьте несколько остановок, чтобы определить начальные, промежуточные и конечные значения последовательности анимации для каждого свойства. При необходимости укажите процентное соотношение для размещения остановок вдоль последовательности анимации. Перевести и масштабировать можно по желанию. <code>%</code>, <code>vw</code> а также <code>vh</code> единицы.", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Анимируйте свойства в соответствии с определенными значениями. Добавьте несколько остановок для определения начальных, промежуточных и конечных значений в последовательности анимации. При необходимости укажите процентное соотношение для расположения остановок вдоль последовательности анимации. Перевод может иметь необязательный <code>%</code>, <code>vw</code> и <code>vh</code> единицы.", "Animate strokes": "Анимировать линии", "Animation": "Анимация", "Animation Delay": "Задержка анимации", "Animations": "Анимации", "Any": "Любой", "Any Joomla module can be displayed in your custom layout.": "Любой модуль Joomla может отображаться в вашем произвольном макете.", "Any WordPress widget can be displayed in your custom layout.": "Любой виджет WordPress может отображаться в вашем произвольном (custom) макете.", "API Key": "API ключ", "Apply a margin between the banner and the browser window.": "Применить отступ между баннером и окном браузера.", "Apply a margin between the navigation and the slideshow container.": "Примените отступ между навигацией и контейнером слайд-шоу.", "Apply a margin between the overlay and the image container.": "Применить отступ между наложением и изображением.", "Apply a margin between the slidenav and the slider container.": "Примените отступ между управлением слайдами и контейнером слайдов.", "Apply a margin between the slidenav and the slideshow container.": "Примените отступ между управлением слайдами и контейнером слайд-шоу.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Применить анимацию к элементам, как только они попадут в окно просмотра. Анимация слайдов может вступить в силу с фиксированным смещением или на 100% от собственного размера элемента.", "Archive": "Архив", "Are you sure?": "Вы уверены?", "ARIA Label": "ARIA метка", "Article": "Материал", "Article Count": "Счетчик материалов", "Article Order": "Порядок материалов", "Articles": "Статьи", "As notification only ": "Только как уведомление ", "As superscript": "Как superscript", "Ascending": "По возрастанию", "Assigning Modules to Specific Pages": "Модули назначенные для данной страницы", "Assigning Templates to Pages": "Назначить страницам шаблон", "Assigning Widgets to Specific Pages": "Назначить указанным страницам виджет", "Attach the image to the drop's edge.": "Прикрепить изображение к краю.", "Attention! Page has been updated.": "Внимание! Страница была обновлена.", "Attribute Filters": "Фильтры Атрибутов", "Attribute Slug": "Атрибут Slug", "Attribute Terms": "Условия атрибута", "Attribute Terms Operator": "Оператор Терминов атрибутов", "Attributes": "Атрибуты", "Aug 6, 1999 (M j, Y)": "Aug 6, 1999 (M j, Y)", "August 06, 1999 (F d, Y)": "August 06, 1999 (F d, Y)", "Author": "Автор", "Author Archive": "Архив автора", "Author Link": "Ссылка на автора", "Auto": "Auto", "Auto Grow": "Автоматическое увеличение", "Auto-calculated": "Автоматически рассчитывается", "Autoplay": "Автовоспроизведение", "Autoplay Interval": "Интервал автовоспроизведения", "Avatar": "Аватар", "Average Daily Views": "В среднем просмотров за день", "b": "b", "Back": "Назад", "Back to top": "Наверх", "Background": "Background", "Background Color": "Цвет фона", "Background Image": "Фоновое изображение", "Badge": "Значок", "Banner Margin": "Баннер Margin", "Banner Position": "Позиция Баннера", "Banner Type": "Тип Баннера", "Banner Width": "Ширина Баннера", "Bar": "Bar", "Base Item": "Базовый элемент", "Base Style": "Базовый Стиль", "Basename": "Basename", "Before": "До", "Before Display Content": "До показа содержимого", "Behavior": "Поведение", "Below Content": "Под содержимым", "Below Title": "Под заголовком", "Beta": "Бета", "Between": "Между", "Blank": "Blank", "Blend": "Blend", "Blend Mode": "Режим наложения", "Blend the element with the page content.": "Менять цвет элемента по цвету контента страницы.", "Blend with image": "Менять цвет с картинкой", "Blend with page content": "Менять цвет с контентом страницы", "Block Alignment": "Выравнивание блока", "Block Alignment Breakpoint": "Точка выравнивания блока", "Block Alignment Fallback": "Альтернативное выравнивание блоков", "Blog": "Блог", "Blur": "Размытие", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrap требуется только при загрузке файлов шаблонов Joomla по умолчанию, например, для редактирования статей с фронта Joomla. Загрузите jQuery, чтобы написать собственный код на основе библиотеки JavaScript jQuery.", "Border": "Граница", "Bottom": "Bottom", "Bottom Center": "Bottom Center", "Bottom Left": "Bottom Left", "Bottom Offset": "Нижний отступ", "Bottom Right": "Bottom Right", "Box Decoration": "Декорация объекта", "Box Shadow": "Тень объекта", "Boxed": "В рамке", "Brackets": "В скобках", "Breadcrumb": "Хлебные крошки", "Breadcrumbs": "Навигатор сайта", "Breadcrumbs Home Text": "Текст для первого раздела навигатора сайта", "Break into multiple columns": "Разбить на несколько колонок", "Breakpoint": "Контрольная точка", "Builder": "Конструктор", "Builder Module": "Builder модуль", "Builder Widget": "Builder виджет", "Bullet": "Bullet", "Button": "Кнопка", "Button Accept Style": "Стиль кнопки Согласия", "Button Danger": "Button Danger", "Button Default": "Button Default", "Button Link": "Ссылка Кнопки", "Button Margin": "Отступ кнопки", "Button Primary": "Button Primary", "Button Reject Style": "Стиль кнопки Отклонить", "Button Secondary": "Button Secondary", "Button Settings Style": "Стиль Кнопки Настройки", "Button Size": "Размер кнопки", "Button Text": "Button Text", "Button Width": "Ширина Кнопки", "Buttons": "Кнопки", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "По умолчанию для сопоставления доступны поля связанных источников с отдельными элементами. Выберите связанный источник, содержащий несколько элементов, для сопоставления его полей.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "По умолчанию изображения загружаются лениво. Включите активную загрузку изображений в начальном окне просмотра.", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "По умолчанию страницами называются только статьи без категорий. Альтернативно, определите статьи из определенной категории как страницы.", "By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.": "По умолчанию страницами называются только статьи без категории. Измените категорию в дополнительных настройках.", "By default, the menu is based on the current menu item. Alternatively, select a base item to always show the same menu.": "По умолчанию меню строится на основе текущего пункта меню. В качестве альтернативы выберите базовый пункт, чтобы всегда отображать одно и то же меню.", "By default, the navigation is based on the current menu item. Alternatively, select a base item to always show the same menu.": "По умолчанию навигация строится на основе текущего пункта меню. В качестве альтернативы выберите базовый пункт, чтобы всегда отображать одно и то же меню.", "Cache": "Кэш", "Calendar Months": "Календарные месяцы", "Calendar Weeks": "Календарные недели", "Calendar Years": "Календарные года", "Campaign Monitor API Token": "API токен веб-сервиса Campaign Monitor", "Cancel": "Отмена", "Caption": "Caption", "Card": "Card", "Card Default": "Card Default", "Card Hover": "Card Hover", "Card Overlay": "Card Overlay", "Card Primary": "Card Primary", "Card Secondary": "Card Secondary", "Card Style": "Стиль Card", "Cart": "Корзина", "Cart Cross-sells Columns": "Столбцы перекрестных продаж корзины", "Cart Quantity": "Количество в корзине", "Cart Quantity Style": "Стиль количества товаров в корзине", "Categories": "Категории", "Categories are only loaded from the selected parent category.": "Категории загружаются только из выбранной родительской категории.", "Categories Operator": "Оператор категорий", "Category": "Категория", "Category Blog": "Блог Категории", "Category Order": "Порядок категории", "Center": "Center", "Center Center": "Center Center", "Center columns": "Центрировать колонки", "Center content": "Центровать контент", "Center grid columns horizontally and rows vertically.": "Центрировать в сетке колонки по горизонтали и строки по вертикали.", "Center grid rows vertically.": "Центрировать строки сетки по вертикали.", "Center horizontally": "Отцентровать по горизонтали", "Center Left": "По центру слева", "Center Right": "По центру справа", "Center rows": "Центрировать строки", "Center the active slide": "Центрировать активный слайд", "Center the content": "Центрировать контент", "Center the module": "Центрировать модуль", "Center the title and meta text": "Центрировать заголовок и мета-текст", "Center the title, meta text and button": "Центрировать заголовок, мета-текст и кнопку", "Center the widget": "По центру виджета", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Выравнивание по центру, правой или левой стороне контейнера может зависеть от контрольной точки по выбранному гаджету и потребовать отступов.", "Changed": "Изменено", "Changed Date": "Дата изменения", "Changelog": "История изменений", "Checkout": "Проверка", "Checkout Page": "Страница оформления заказа", "Child %taxonomies%": "Дочерние %taxonomies%", "Child %type%": "Дочарний %type%", "Child Categories": "Дочерние категории", "Child Menu Items": "Пункты дочернего меню", "Child Tags": "Дочерние теги", "Child Theme": "Дочерняя Тема", "Choose a divider style.": "Выбрать стиль разделителя.", "Choose a map type.": "Выбрать тип карты.", "Choose between a boxed card, a notification or a full-width section.": "Выберите между карточкой в рамке, уведомлением или секцией на всю ширину.", "Choose between a navigation that shows filter controls separately in single dropdowns or a toggle button that shows all filters in a dropdown or an offcanvas dialog.": "Выберите между навигацией, которая отображает элементы управления фильтрами по отдельности в отдельных раскрывающихся списках, или кнопкой-переключателем, которая отображает все фильтры в раскрывающемся списке или диалоговом окне Offcanvas.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Выберите параллакс в зависимости от положения прокрутки или анимации, которая применяется после того, как слайд активен.", "Choose between a vertical or horizontal list.": "Выберите вертикальный или горизонтальный список.", "Choose between an attached bar or a notification.": "Выберите между полоской внизу и уведомлением.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Выберите между предыдущей/следующей или числовой нумерацией страниц. Числовая нумерация страниц недоступна для отдельных статей.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Выберите между предыдущей/следующей или числовой нумерацией страниц. Числовая нумерация страниц недоступна для отдельных статей.", "Choose Font": "Выбрать шрифт", "Choose products of the current page or query custom products.": "Выберите продукты на текущей странице или запросите пользовательские продукты.", "Choose the icon position.": "Выбрать позицию иконки.", "Choose the page to which the template is assigned.": "Выберите страницу, которой назначен шаблон.", "Circle": "Circle", "City or Suburb": "Город или пригород", "Class": "CSS класс", "Classes": "Классы", "Clear Cache": "Очистить кэш", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Очистить кэшированные изображения и файлы. Изображения, размеры которых нуждаются в изменении хранятся в папке кэша шаблона. Если вы загрузите изображения с таким же наименованием, вам необходимо очистить кэш. Кнопка ОЧИСТИТЬ КЭШ не имеет обратной связи, если вы нажали ее, значит кэш точно очищен.", "Click": "Щелчок", "Click on the pencil to pick an icon from the icon library.": "Нажмите на карандаш, чтобы выбрать значок из библиотеки значков.", "Close": "Закрыть", "Close Icon": "Close Icon", "Close on background click": "Закрыть при клике по фону", "Cluster Icon (< 10 Markers)": "Иконка кластера (< 10 Маркеров)", "Cluster Icon (< 100 Markers)": "Иконка кластера (< 100 Маркеров)", "Cluster Icon (100+ Markers)": "Иконка кластера (< 100+ Маркеров)", "Clustering": "Кластеризация", "Code": "Код", "Collapsing Layouts": "Сворачивание макетов", "Collections": "Коллекции", "Color": "Цвет", "Color navbar parts separately": "Цвет частей панели навигации отдельно", "Color-burn": "Затемнение цвета", "Color-dodge": "Осветление основы", "Column": "Колонка", "Column 1": "Колонка 1", "Column 2": "Колонка 2", "Column 3": "Колонка 3", "Column 4": "Колонка 4", "Column 5": "Колонка 5", "Column 6": "Column 6", "Column Gap": "Разрыв Столбца", "Column Height": "Высота столбца", "Column Layout": "Настройки колонок макета", "Column Parallax": "Параллакс колонки", "Column within Row": "Колонка со строкой", "Column within Section": "Колонка с выбором", "Columns": "Колонки", "Columns Breakpoint": "Breakpoint для колонок", "Comment Count": "Счетчик комментариев", "Comments": "Комментарии", "Compliance Type": "Тип соответствия", "Components": "Компоненты", "Condition": "Условие", "Consent Button Style": "Стиль кнопки согласия", "Consent Button Text": "Текст кнопки согласия", "Consent Manager": "Менеджер согласия", "Contact": "Контакт", "Contacts Position": "Позиция для контактов", "Contain": "Contain", "Container": "Контейнер", "Container Default": "Контейнер по умолчанию", "Container Large": "Контейнер Large", "Container Padding": "Внутренний отступ контейнера", "Container Small": "Контейнер малый", "Container Width": "Ширина контейнера", "Container X-Large": "Контейнер X-Large", "Contains": "Содержат", "Contains %element% Element": "Содержат %element% Элемент", "Contains %title%": "Содержат %title%", "Content": "Контент", "content": "контент", "Content Alignment": "Выравнивание содержимого", "Content Length": "Длина содержимого", "Content Margin": "Отступ содержимого", "Content Parallax": "Параллакс контента", "Content Type Title": "Заголовок типа контента", "Content Width": "Ширина контента", "Controls": "Элементы управления", "Convert": "Конвертировать", "Convert to title-case": "Преобразовать в регистр заголовка", "Cookie Banner": "Баннер Cookie", "Cookie Groups": "Группы Cookie", "Cookie Scripts": "Куки скрипты", "Coordinates": "Координаты", "Copy": "Копировать", "Countdown": "Счетчик обратного отсчета", "Country": "Страна", "Cover": "Cover", "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.": "Создайте макет в виде плитки без зазоров, если элементы сетки имеют разную высоту. Расположите элементы в столбцы с наибольшим пространством или покажите их в естественном порядке. При желании можно использовать анимацию параллакса для перемещения столбцов при прокрутке до тех пор, пока они не выровняются по нижнему краю.", "Create a general layout for the live search results. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Создайте общий макет для результатов поиска в реальном времени. Начните с нового макета и выберите из коллекции готовых к использованию элементов или просмотрите библиотеку макетов и начните с одного из готовых макетов.", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Создайте общий макет для этого типа страниц. Начните с нового макета и выберите из коллекции готовых к использованию элементов или просмотрите библиотеку макетов и начните с одного из готовых макетов.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Создайте макет для футера всех страниц. Начните с нового макета и выберите из коллекции готовых к использованию элементов или просмотрите библиотеку макетов и начните с одного из готовых макетов.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Создайте макет для раскрывающегося списка пунктов меню. Начните с нового макета и выберите из коллекции готовых к использованию элементов или просмотрите библиотеку макетов и начните с одного из готовых макетов.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Создайте макет для этого модуля и опубликуйте его в верхней или нижней позиции. Начните с нового макета и выберите из коллекции готовых к использованию элементов или просмотрите библиотеку макетов и начните с одного из готовых макетов.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Создайте макет для этого виджета и опубликуйте его в верхней или нижней позиции. Начните с нового макета и выберите из коллекции готовых к использованию элементов или просмотрите библиотеку макетов и начните с одного из готовых макетов.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Создайте макет. Начните с нового макета и выберите из коллекции готовых к использованию элементов или просмотрите библиотеку макетов и начните с одного из готовых макетов.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Создайте общий макет для этого типа страниц. Начните с нового макета и выберите из коллекции готовых к использованию элементов или просмотрите библиотеку макетов и начните с одного из готовых макетов.", "Create site-wide templates for pages and load their content dynamically into the layout.": "Создавайте шаблоны для страниц всего сайта и динамически загружайте их содержимое в макет.", "Created": "Создано", "Created Date": "Дата создания", "Creating a New Module": "Создать новый модуль", "Creating a New Widget": "Создать новый виджет", "Creating Accordion Menus": "Создание меню Аккордеона", "Creating Advanced Module Layouts": "Создание расширенных макетов Модулей", "Creating Advanced Widget Layouts": "Создание расширенных макетов для Виджетов", "Creating Advanced WooCommerce Layouts": "Создание продвинутых макетов WooCommerce", "Creating Individual Post Layout": "Создание индивидуального макета поста", "Creating Individual Post Layouts": "Создание индивидуальных макетов постов", "Creating Menu Dividers": "Создать разделитель меню", "Creating Menu Heading": "Создание заголовков Меню", "Creating Menu Headings": "Создание заголовков Меню", "Creating Menu Text Items": "Создание текстовых элементов меню", "Creating Navbar Text Items": "Создание текстовых элементов навигационной панели", "Creating Parallax Effects": "Создание эффектов параллакса", "Creating Sticky Parallax Effects": "Создание sticky эффектов параллакса", "Critical Issues": "Критические проблемы", "Critical issues detected.": "Обнаружены критические проблемы.", "Cross-Sell Products": "Продукты для перекрестных продаж", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "Курированный пользователем <a href>%user%</a>", "Current Layout": "Текущий макет", "Current Style": "Текущий стиль", "Current User": "Текущий пользователь", "Custom": "Custom", "Custom %post_type%": "Выборочная %post_type%", "Custom %post_types%": "Выборочные %post_types%", "Custom %taxonomies%": "Выборочные %taxonomies%", "Custom %taxonomy%": "Выборочная %taxonomy%", "Custom Article": "Выбранный материал", "Custom Articles": "Выбранные материалы", "Custom Categories": "Выбранные категории", "Custom Category": "Выбранная категория", "Custom Code": "Пользовательский код", "Custom Fields": "Настраиваемые поля", "Custom Format Range": "Диапазон пользовательского формата", "Custom Menu Item": "Пользовательский пункт меню", "Custom Menu Items": "Пользовательские пункты меню", "Custom Product category": "Выбранная категория продуктов", "Custom Product tag": "Выбранный тег продукта", "Custom Query": "Выбранный запрос", "Custom Tag": "Выбранный тег", "Custom Tags": "Выбранные теги", "Custom User": "Выбранный пользователь", "Custom Users": "Выбранные пользователи", "Customization": "Кастомизация", "Customization Name": "Имя кастомизации", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Настройте ширину столбцов выбранного макета и установите порядок столбцов. Изменение макета приведет к сбросу всех настроек.", "Customizer": "Кастомизатор", "Danger": "Danger", "Dark": "Темный", "Dark Text": "Темный текст", "Darken": "Затемнить", "Date": "Дата", "Date Archive": "Архив данных", "Date Format": "Формат даты", "Date Range": "Диапазон дат", "Day": "День", "Day Archive": "Дневной архив", "Days": "Дней", "Decimal": "Decimal", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Добавить декоративные элементы вертикаль, подчеркивание или линии по бокам в заголовок.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Центрирование заголовка с подчеркиванием, вертикалью или линией.", "Decoration": "Оформление", "Default": "По умолчанию", "Default Icon": "Иконка по умолчанию", "Default Link": "Ссылка по умолчанию", "Define a background style or an image of a column and set the vertical alignment for its content.": "Определите стиль фона или изображение столбца и установите вертикальное выравнивание для его содержимого.", "Define a custom background color or a color parallax animation instead of using a predefined style.": "Определите собственный цвет фона или анимацию цветового параллакса вместо использования предопределенного стиля.", "Define a name to easily identify the template.": "Определите имя, чтобы легко идентифицировать шаблон.", "Define a name to easily identify this element inside the builder.": "Выберите имя, чтобы легче отличать элемент от других в билдере.", "Define a navigation menu or give it no semantic meaning.": "Определите меню или не придавайте ему семантического значения.", "Define a unique identifier for the element.": "Создайте уникальный идентификатор (ID) для элемента. Значение для атрибута ID должно быть уникальным в рамках одной страницы (не повторятся на ней), начинаться либо с латинской буквы любого регистра, либо со знака подчёркивания, но не с цифры. В его составе могут присутствовать латинские буквы, цифры, дефисы, подчёркивания, двоеточия и точки. Не допускается использование пробелов.", "Define an alignment fallback for device widths below the breakpoint.": "Определить запасной вариант выравнивания для устройства, шириной ниже контрольной точки.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Определите один или несколько атрибутов для элемента. Разделите имя и значение атрибута символом <code>=</code>. Один атрибут на строку.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Укажите один или несколько CSS-классов для элемента. Можно добавить несколько классов, разделенных пробелами.", "Define the alignment in case the container exceeds the element max-width.": "Определить выравнивание в случае, если контейнер превышает максимальную ширину элемента.", "Define the alignment of the last table column.": "Определить выравнивание в последнем столбце таблицы.", "Define the device width from which the alignment will apply.": "Определить ширину устройства, в отношении которого будет применяться выравнивание.", "Define the device width from which the dropnav will be shown.": "Определите ширину устройства, с которой будет отображаться Dropnav.", "Define the device width from which the max-width will apply.": "Определите ширину устройства, с которой будет применяться максимальная ширина содержимого.", "Define the filter fallback mode for device widths below the breakpoint.": "Определите режим возврата фильтра для устройств шириной ниже контрольной точки.", "Define the image quality in percent for generated JPG images and when converting JPEG and PNG to next-gen image formats.<br><br>Mind that setting the image quality too high will have a negative impact on page loading times.<br><br>Press the Clear Cache button in the advanced settings after changing the image quality.": "Установите качество изображения в процентах для сгенерированных изображений JPG и при преобразовании JPEG и PNG в форматы изображений следующего поколения.<br><br>Учтите, что слишком высокое качество изображения отрицательно скажется на времени загрузки страницы.<br> <br>Нажмите кнопку Очистить кэш в дополнительных настройках после изменения качества изображения.", "Define the layout of the form.": "Определить макет формы.", "Define the layout of the title, meta and content.": "Определить макет заголовка, описания и содержания.", "Define the order of the table cells.": "Определить последовательность столбцов таблицы.", "Define the origin of the element's transformation when scaling or rotating the element.": "Определите источник преобразования элемента при масштабировании или вращении элемента.", "Define the padding between items.": "Определите отступы между элементами.", "Define the padding between table rows.": "Определить отступ между строками в таблице.", "Define the purpose and structure of the content or give it no semantic meaning.": "Установите семантический тег, исходя из структуры контента.", "Define the title position within the section.": "Определите позицию заголовка в разделе.", "Define the width of the content cell.": "Задать ширину ячейки для контента.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Определите ширину содержимого фильтрации. Выберите процентное значение или фиксированную ширину или расширьте столбцы по ширине их содержимого.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Определить ширину изображения внутри сетки. Выбрать между шириной в процентах или фиксированной шириной или адаптировать колонки к ширине контента.", "Define the width of the meta cell.": "Задать ширину ячейки описания.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Определить ширину навигации. Выбрать между шириной в процентах или фиксированной шириной или адаптировать колонки к ширине контента.", "Define the width of the title cell.": "Задать ширину ячейки для заголовка.", "Define the width of the title within the grid.": "Задать ширину названия в сетке.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Определите ширину заголовка внутри сетки. Выберите между фиксированной и процентной шириной или расширением столбцов до ширины их содержимого.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Определите, является ли ширина элементов слайдера фиксированной или автоматически расширена по ширине содержимого.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Определите, переносятся ли миниатюры на несколько строк или нет, если контейнер слишком мал.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Задержка анимации элементов в миллисекундах, например: <code>200</code>.", "Delayed Fade": "Отложенное исчезновение", "Delete": "Удалить", "Delete animation stop": "Удалить остановку анимации", "Descending": "По убыванию", "description": "описание", "Description": "Описание", "Description List": "Перечень c описанием", "Desktop": "Настольный компьютер", "Determine how the image or video will blend with the background color.": "Определить, как изображение или видео будет смешиваться с цветом фона.", "Determine how the image will blend with the background color.": "Выберите каким образом изображение будет смешиваться с фоновым цветом.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Выберите каким образом изображение должно вписываться в размеры страницы - путем обрезки или заполнения пустых областей фоновым цветом.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Определите, будет ли изображение автоматически подгоняться под размер раздела или пустые участки будут заполнены цветом фона.", "Dialog": "Dialog", "Dialog Dropbar": "Dialog Dropbar", "Dialog End": "Dialog End", "Dialog Layout": "Макет диалога", "Dialog Logo (Optional)": "Логотип диалогового окна (необязательно)", "Dialog Modal": "Dialog Modal", "Dialog Offcanvas": "Dialog Offcanvas", "Dialog Push Items": "Элементы диалогового окна Push", "Dialog Start": "Dialog Start", "Dialog Toggle": "Переключение диалога", "Difference": "Разница", "Direction": "Направление", "Dirname": "Имя папки", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Отключить автозапуск, включить автозапуск сразу или как только видео попадает в область видимости.", "Disable element": "Отключить элемент", "Disable Emojis": "Отключить эмодзи", "Disable infinite scrolling": "Отключить бесконечную прокрутку", "Disable item": "Отключить элемент", "Disable row": "Отключить строку", "Disable section": "Отключить раздел", "Disable template": "Отключить шаблон", "Disable the <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filter for the_content and the_excerpt and disable conversion of Emoji characters to images.": "Отключите фильтр <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> для the_content и the_excerpt и отключите преобразование символов Emoji в изображения.", "Disable the element and publish it later.": "Отключите элемент и опубликуйте его позже.", "Disable the item and publish it later.": "Отключите элемент и опубликуйте его позже.", "Disable the row and publish it later.": "Отключите строку и опубликуйте ее позже.", "Disable the section and publish it later.": "Отключите раздел и опубликуйте его позже.", "Disable the template and publish it later.": "Отключите шаблон и опубликуйте его позже.", "Disable wpautop": "Выключить wpautop", "Disabled": "Отключен", "Disc": "Disc", "Discard": "Отменить", "Display": "Отображение", "Display a cookie banner on your site. To allow visitors to change cookie preferences, add a link with the URL <code>#consent-settings</code> to open the consent manager.": "Показать баннер cookie на вашем сайте. Чтобы посетители могли изменить настройки cookie, добавьте ссылку с URL <code>#consent-settings</code> для открытия менеджера согласия.", "Display a divider between sidebar and content": "Отобразить разделитель между позицией Sidebar и контентом", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Отобразить меню, выбрав позицию, в которой оно должно появиться. Например опубликуйте главное меню в позиции Navbar и любое меню в позициb Mobile.", "Display a search icon on the left or right of the input field. The icon on the right can be clicked to submit the search.": "Отобразить значок поиска слева или справа от поля ввода. Значок справа можно нажать, чтобы отправить поиск.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Отобразите значок поиска слева или справа. Значок справа можно щелкнуть, чтобы отправить поиск.", "Display Condition": "Показать условие", "Display header outside the container": "Показывать шапку за пределами контейнера", "Display icons as buttons": "Отобразить иконки в виде кнопок", "Display large icon": "Показать большую иконку", "Display on the right": "Отобразить справа", "Display outside": "Показать снаружи", "Display overlay on hover": "Отображение наложения при наведении", "Display products based on visibility.": "Отображать товары на основе видимости.", "Display the breadcrumb navigation": "Отобразить навигатор сайта", "Display the cart quantity in brackets or as a badge.": "Отображать количество в корзине в скобках или в виде значка.", "Display the content inside the overlay, as the lightbox caption or both.": "Показать содержимое внутри наложения, как лайтбокс и название, или то и другое.", "Display the content inside the panel, as the lightbox caption or both.": "Показать содержимое внутри панели, как лайтбокс и название, или то и другое.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Отображать поле выдержки, если оно имеет содержимое, в противном случае — содержимое. Чтобы использовать поле выдержки, создайте настраиваемое поле с именем выдержка.", "Display the excerpt field if it has content, otherwise the intro text.": "Отображать поле выдержки, если в нем есть содержимое, в противном случае вводный текст.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Отображать поле выдержки, если в нем есть содержимое, в противном случае вводный текст. Чтобы использовать поле выдержки, создайте пользовательское поле с именем выдержка.", "Display the first letter of the paragraph as a large initial.": "Отобразить первую букву абзаца в буковицы.", "Display the image only on this device width and larger.": "Показывать изображение только на устройстве выбранного размера или большего.", "Display the image or video only on this device width and larger.": "Показывать изображение только на устройстве выбранного размера или большего.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Показать элементы управления картой и определить, может ли карта менять масштаб и быть передвинута с помощью мыши или прикосновением пальцев .", "Display the meta text in a sentence or a horizontal list.": "Отобразите метатекст в виде предложения или горизонтального списка.", "Display the module only from this device width and larger.": "Показывать модуль только на устройстве выбранного размера или большего.", "Display the navigation only on this device width and larger.": "Отображение навигации только на девайсе с данной шириной или более.", "Display the parallax effect only on this device width and larger.": "Показывать эффект Параллакс только на устройстве выбранного размера или большего.", "Display the popover on click or hover.": "Отображение всплывающего окна на клик или наведение курсора.", "Display the section title on the defined screen size and larger.": "Отображать заголовок раздела на экране определенного размера и больше.", "Display the short or long description.": "Отображать краткое или длинное описание.", "Display the slidenav only on this device width and larger.": "Отобразить управление слайдами на девайсах этой ширины или большей.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Отобразить управление слайдами на девайсах этой ширины или большей вне контейнера слайдов. В противном случае - внутри контейнера.", "Display the title in the same line as the content.": "Отображать заголовок в той же строке, что и содержимое.", "Display the title inside the overlay, as the lightbox caption or both.": "Показать название внутри оверлея, как лайтбокс и название или и то, и другое.", "Display the title inside the panel, as the lightbox caption or both.": "Показать название внутри панели, как лайтбокс и название или и то, и другое.", "Display the widget only from this device width and larger.": "Отображать виджет только с этой ширины устройства и больше.", "Display together with filters": "Отображать вместе с фильтрами", "Displaying the Breadcrumbs": "Отображение хлебных крошек", "Displaying the Excerpt": "Отображение Excerpt", "Displaying the Mobile Header": "Отображение Шапки в мобильной версии", "div": "div", "Divider": "Разделитель", "Do you really want to replace the current layout?": "Вы действительно хотите заменить текущий макет?", "Do you really want to replace the current style?": "Вы действительно хотите заменить текущий стиль?", "Documentation": "Документация", "Does not contain": "Не содержат", "Does not end with": "Не заканчивается на", "Does not start with": "Не начинается с", "Don't collapse column": "Не сворачивать столбец", "Don't collapse the column if dynamically loaded content is empty.": "Не сворачивайте столбец, если динамически загружаемое содержимое пусто.", "Don't expand": "Не расширять", "Don't match (NOR)": "Не совпадают (NOR)", "Don't match %taxonomies% (NOR)": "Не совпадают %taxonomies% (NOR)", "Don't match author (NOR)": "Не совпадает автор (NOR)", "Don't match category (NOR)": "Не соответствует категории (NOR)", "Don't match tags (NOR)": "Не соответствует тегу (NOR)", "Don't wrap into multiple lines": "Не охватывать в несколько строк", "Dotnav": "Dotnav", "Double opt-in": "Double opt-in", "Download": "Скачать", "Download All": "Скачать Все", "Download Less": "Скачать Less", "Draft new page": "Сохранить черновик", "Drop Cap": "Буквица", "Dropbar Animation": "Анимация Dropbar панели", "Dropbar Center": "Dropbar по центру", "Dropbar Content Width": "Ширина содержимого Dropbar панели", "Dropbar Padding": "Внутренний отступ Dropbar", "Dropbar Top": "Верхняя часть Dropbar панели", "Dropbar Width": "Ширина Dropbar панели", "Dropdown": "Выпадающее меню", "Dropdown Alignment": "Раскрывающееся выравнивание", "Dropdown Columns": "Выпадающие столбцы", "Dropdown Icon Width": "Ширина иконки выпадающего списка", "Dropdown Nav Style": "Dropdown Nav Style", "Dropdown Padding": "Выпадающее заполнение", "Dropdown Stretch": "Выпадающее растяжение", "Dropdown Width": "Ширина раскрывающегося списка", "Dropnav": "Dropnav", "Dynamic": "Dynamic", "Dynamic Condition": "Динамическое условие", "Dynamic Content": "Динамический Контент", "Dynamic Content (Parent Source)": "Dynamic Content (Parent Source)", "Dynamic Content Field Options": "Опции поля динамического контента", "Dynamic Multiplication": "Динамическое умножение", "Dynamic Multiplication (Parent Source)": "Dynamic Multiplication (Parent Source)", "Eager": "Загружать сразу", "Easing": "Easing", "Edit": "Редактировать", "Edit %title% %index%": "Редактировать %title%%index%", "Edit Article": "Редактировать статью", "Edit Dropbar": "Рекдактировать Dropbar", "Edit Dropdown": "Редактировать Dropdown", "Edit Image Quality": "Изменить качество изображения", "Edit Item": "Редактировать элемент", "Edit Items": "Редактировать записи", "Edit Layout": "Изменить макет", "Edit Menu Item": "Редактировать пункт меню", "Edit Modal": "Редактировать Modal", "Edit Module": "Редактировать модуль", "Edit Offcanvas": "Редактировать Offcanvas", "Edit Parallax": "Редактирование параллакса", "Edit Settings": "Изменить настройки", "Edit Template": "Изменить шаблон", "Element": "Элемент", "Element Library": "Библиотека элементов", "Element presets uploaded successfully.": "Элемент успешно загружен.", "elements": "элементы", "Elements within Column": "Элементы внутри столбца", "Email": "Электронная почта", "Emphasis": "Emphasis", "Empty Dynamic Content": "Пустой динамический контент", "Enable a navigation to move to the previous or next post.": "Включите навигацию для перехода к предыдущей или следующей публикации.", "Enable active state": "Включить активное состояние", "Enable autoplay": "Включить автозапуск", "Enable autoplay immediately, start as soon as the video enters the viewport or only on hover.": "Включить автовоспроизведение немедленно, начать воспроизведение, как только видео попадёт в область просмотра, или только при наведении.", "Enable autoplay or play a muted inline video without controls.": "Включите автовоспроизведение или воспроизводите встроенное видео без звука и без элементов управления.", "Enable click mode": "Включить режим по клику", "Enable click mode on text items": "Включить режим щелчка по текстовым элементам", "Enable drop cap": "Включить буквицу", "Enable dropbar": "Включить Dropbar", "Enable filter navigation": "Включить навигационный фильтр", "Enable lightbox gallery": "Включить лайтбокс галереи", "Enable map dragging": "Включить перетаскивание карты", "Enable map zooming": "Включить масштабирование карты", "Enable marker clustering": "Включить групировку маркеров", "Enable masonry effect": "Включить эффект динамической сетки", "Enable parallax effect": "Включить параллакс эффект", "Enable the pagination.": "Включить пагинацию.", "End": "Конец", "End Date": "Дата конца", "End Level": "Последний уровень", "Ends with": "Заканчивается на", "Enter %s% preview mode": "Войдите в режим предварительного просмотра %s%", "Enter %size% preview mode": "Войти в режим предварительного просмотра %size%", "Enter a comma-separated list of tags to manually order the filter navigation.": "Введите разделенный запятыми список тегов, чтобы вручную упорядочить навигацию по фильтру.", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Введите список тегов, разделенных запятыми. Например, <code>blue, white, black</code>.", "Enter a date for the countdown to expire.": "Введите дату окончания обратного отсчета.", "Enter a decorative section title which is aligned to the section edge.": "Введите декоративный заголовок раздела, выровненный по краю раздела.", "Enter a descriptive text label to make it accessible if the link has no visible text.": "Введите описательную текстовую метку, чтобы сделать ее доступной, если ссылка не имеет видимого текста.", "Enter a subtitle that will be displayed beneath the nav item.": "Введите подзаголовок, который будет отображаться под названием пункта меню.", "Enter a table header text for the content column.": "Введите текст заголовка таблицы для столбца содержимого.", "Enter a table header text for the image column.": "Введите текст заголовка таблицы для столбца изображения.", "Enter a table header text for the link column.": "Введите текст заголовка таблицы для столбца ссылки.", "Enter a table header text for the meta column.": "Введите текст заголовка таблицы для мета столбца.", "Enter a table header text for the title column.": "Введите текст заголовка таблицы для колонки названия.", "Enter a width for the popover in pixels.": "Введите ширину всплывающего окна в пикселях.", "Enter an optional footer text.": "Введите дополнительный текст для позиции Footer.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Введите дополнительный текст для атрибута ссылки, который будет отображаться при наведении указателя мыши.", "Enter labels for the countdown time.": "Введите метки для обратного отсчета времени.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Введите до 5 ссылок на ваши аккаунты в социальных сетях. Соответствующий <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">Значок бренда Uikit</a> будет отображаться автоматически, если он доступен. Ссылки на адреса электронной почты и номер телефона, как mailto:info@example.com или tel:+491570156, также поддерживаются.", "Enter or pick a link, an image or a video file.": "Введите или укажите ссылку, изображение или видео файл.", "Enter the API key in Settings > External Services.": "Введите ключ API в Настройки > API ключ.", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Введите ключ API, чтобы активировать обновления в один клик для YOOtheme Pro и получить доступ к библиотеке макетов, а также к библиотеке изображений Unsplash. Вы можете создать ключ API для этого веб-сайта в своих <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Настройках учетной записи</a>.", "Enter the author name.": "Введите имя автора.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Введите сообщение о согласии на сохранение cookie-файла. Текст по умолчанию используется только в качестве примера. Пожалуйста, настройте его в соответствии с законами вашей страны о cookie-файлах.", "Enter the horizontal position of the marker in percent.": "Введите горизонтальное положение маркера в процентах.", "Enter the image alt attribute.": "Введите атрибут alt изображения.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Введите строку замены, которая может содержать ссылки. Если оставить поле пустым, поисковые совпадения будут удалены.", "Enter the text for the button.": "Введите текст для кнопки.", "Enter the text for the home link.": "Введите текст для главной ссылки.", "Enter the text for the link.": "Введите текст ссылки.", "Enter the vertical position of the marker in percent.": "Введите вертикальное положение маркера в процентах.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Введите ваш ID <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> чтобы включить отслеживание. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP-анонимизации</a> может уменьшить точность отслеживания.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Введите ваш API ключ от <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a>, чтобы использовать Карты Google вместо OpenStreetMap. Это также дает дополнительные возможности для создания цветового стиля вашей карты.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Введите ваш API ключ <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Сервиса Campaign Monitor</a> для использования с элементом рассылки.", "Enter your <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> API key for using it with the Newsletter element.": "Введите свой ключ API <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a>, чтобы использовать его с элементом Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этого элемента:<code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этого элемента: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Введите свой собственный CSS. Следующие селекторы будут автоматически добавляться к этому элементу: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов:<code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов:<code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>": "Введите свой собственный CSS. Следующие селекторы будут автоматически добавлены к этому элементу: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Введите собственный CSS код. Следующие селекторы будут автоматически добавлены к этому элементу в качестве префикса: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы можно использовать для этих элементов: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Введите свой собственный CSS. Следующие селекторы будут автоматически иметь префикс для этого элемента: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Введите свой собственный CSS. Следующие селекторы будут автоматически добавляться к этому элементу: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой собственный CSS. Следующие селекторы будут автоматически иметь префикс для этого элемента: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Введите собственный CSS код. Следующие селекторы будут автоматически добавлены к этому элементу в качестве префикса: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этих элементов: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Введите собственный CSS код. Следующие селекторы будут автоматически добавлены к этому элементу в качестве префикса: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Введите свой собственный CSS. Следующие селекторы будут автоматически иметь префикс для этого элемента: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Введите свой CSS код. Следующие селекторы будут автоматически добавлены для этого элемента: <code>.el-section</code>", "Equal": "Равно", "Error": "Ошибка", "Error 404": "Ошибка 404", "Error creating folder.": "Ошибка при создании папки.", "Error deleting item.": "Ошибка при удалении элемента.", "Error renaming item.": "Ошибка при переименовании элемента.", "Error: %error%": "Ошибка: %error%", "Events": "События", "Excerpt": "Excerpt", "Exclude child %taxonomies%": "Исключая дочерние %taxonomies%", "Exclude child categories": "Исключая дочерние категории", "Exclude child tags": "Исключая дочерние теги", "Exclude cross sell products": "Исключить перекрестные продажи продуктов", "Exclude upsell products": "Исключите продукты с повышенными ценами", "Exclusion": "Исключение", "Expand": "Expand", "Expand columns equally to always fill remaining space within the row, center them or align them to the left.": "Разверните столбцы равномерно, чтобы всегда заполнять оставшееся пространство внутри строки, отцентрируйте их или выровняйте по левому краю.", "Expand Content": "Развернуть Контент", "Expand content": "Развернуть область контента", "Expand height": "Расширить высоту", "Expand image": "Развернуть области картинки", "Expand input width": "Развернуть ширину input", "Expand One Side": "Развернуть одну сторону", "Expand Page to Viewport": "Развернуть страницу до области просмотра (Viewport)", "Expand the height of the content to fill the available space in the overlay and push the link to the bottom.": "Развернуть высоту контента, чтобы заполнить доступное пространство в наложении и опустить ссылку вниз.", "Expand the height of the content to fill the available space in the panel and push the link to the bottom.": "Выровнять ссылку по нижней границе за счет увеличения высоты контента.", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The image will cover the element's content box.": "Увеличить высоту элемента, чтобы заполнить доступное пространство в столбце, или установить высоту на одну область просмотра. Изображение закроет поле содержимого элемента.", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The video will cover the element's content box.": "Увеличить высоту элемента, чтобы заполнить доступное пространство в столбце, или установить высоту на одну область просмотра. Видео будет охватывать поле содержимого элемента.", "Expand the height of the element to fill the available space in the column.": "Увеличьте высоту элемента, чтобы заполнить доступное пространство в столбце.", "Expand the height of the element to fill the available space in the column. Alternatively, the height can adapt to the height of the viewport, and optionally subtract the header height to fill the first visible viewport": "Растянуть высоту элемента, чтобы заполнить доступное пространство в колонке. В качестве альтернативы высота может адаптироваться под высоту области просмотра и, при необходимости, вычитать высоту шапки, чтобы заполнить первую видимую область просмотра", "Expand the height of the image to fill the available space in the item.": "Разверните высоту изображения, чтобы заполнить доступное пространство в элементе.", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Увеличить ширину одной стороны влево или вправо, в то время как другая сторона останется в пределах максимальной ширины.", "Expand width to table cell": "Развернуть ширину ячейки таблицы", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Экспортируйте все настройки темы и импортируйте их в другую установку. Сюда не входит содержимое библиотек макетов, стилей и элементов или конструктора шаблонов.", "Export Settings": "Экспорт настроек", "Extend all content items to the same height.": "Продлить все элементы контента на ту же высоту.", "Extension": "Расширение", "External": "Внешний", "External Services": "Внешние сервисы", "Extra Margin": "Дополнительный отступ", "Fade": "Fade", "Failed loading map": "Ошибка загрузки карты", "Fall back to content": "Вернуться к контенту", "Fallback": "Fallback", "Favicon": "Favicon", "Favicon PNG": "Favicon PNG", "Favicon SVG": "Favicon SVG", "Fax": "Факс", "Featured": "Избранное", "Featured Articles": "Избранные статьи", "Featured Articles Order": "Порядок избранных материалов", "Featured Image": "Избранное изображение", "Fields": "Поля", "Fifths": "5 колонок (1-1-1-2)", "Fifths 1-1-1-2": "5 колонок 1-1-1-2", "Fifths 1-1-3": "Fifths 1-1-3", "Fifths 1-3-1": "Fifths 1-3-1", "Fifths 1-4": "Fifths 1-4", "Fifths 2-1-1-1": "Fifths 2-1-1-1", "Fifths 2-3": "Fifths 2-3", "Fifths 3-1-1": "Fifths 3-1-1", "Fifths 3-2": "Fifths 3-2", "Fifths 4-1": "Fifths 4-1", "File": "Файл", "Files": "Файлы", "Fill the available column space": "Заполните доступное пространство столбца", "Filter": "Фильтр", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Фильтровать %post_types% по авторам. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd>, чтобы выбрать нескольких авторов. Установите логический оператор для соответствия или несоответствия выбранным авторам.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Отфильтруйте %post_types% по терминам. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких терминов. Установите логический оператор таким образом, чтобы он соответствовал хотя бы одному из терминов, ни одному из терминов или всем терминам.", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Фильтровать статьи по авторам. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd>, чтобы выбрать нескольких авторов. Установите логический оператор для соответствия или несоответствия выбранным авторам.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Фильтруйте статьи по категориям. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких категорий. Установите логический оператор таким образом, чтобы он соответствовал или не соответствовал выбранным категориям.", "Filter articles by featured status. Load all articles, featured articles only, or articles which are not featured.": "Фильтровать статьи по избранному статусу. Загружать все статьи, только рекомендуемые статьи или статьи, которые не являются избранными.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Фильтруйте статьи по тегам. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких тегов. Установите логический оператор таким образом, чтобы он соответствовал хотя бы одному из тегов, ни одному из тегов или всем тегам.", "Filter by Authors": "Фильтр по авторам", "Filter by Categories": "Фильтр по категориям", "Filter by Date": "Фильтровать по дате", "Filter by Featured Articles": "Фильтровать по избранным статьям", "Filter by Post Types": "Фильтровать по типам записей", "Filter by Root Categories": "Фильтровать по корневым категориям", "Filter by Tags": "Фильтр по тегам", "Filter by Term": "Фильтр по термину", "Filter by Terms": "Фильтр по терминам", "Filter items visually by the selected post types.": "Отфильтруйте элементы визуально выбранными типами поста.", "Filter items visually by the selected root categories.": "Отфильтруйте элементы визуально из выбранной корневой категории.", "Filter products by attribute using the attribute slug.": "Фильтруйте товары по атрибутам с помощью атрибута разделителя.", "Filter products by categories using a comma-separated list of category slugs.": "Фильтруйте товары по категориям, используя список категорий, разделенных запятыми.", "Filter products by tags using a comma-separated list of tag slugs.": "Фильтруйте товары по тегам, используя список тегов, разделенных запятыми.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "Фильтруйте товары по терминам выбранного атрибута, используя разделенный запятыми список слагаемых терминов атрибута.", "Filter products using a comma-separated list of IDs.": "Фильтруйте товары, используя список идентификаторов, разделенных запятыми.", "Filter products using a comma-separated list of SKUs.": "Фильтруйте товары, используя список артикулов, разделенных запятыми.", "Filter Title": "Заголовок фильтра", "Filter Toggle": "Переключатель фильтра", "Filters": "Filters", "Finite": "Ограничение", "First Item": "Первый элемент", "First name": "Имя", "First page": "Первая страница", "Fit markers": "Подходящие маркеры", "Fix the background with regard to the viewport.": "Зафиксировать фон в окне браузера.", "Fixed": "Фиксированный", "Fixed Range": "Фиксированный диапазон", "Fixed-Inner": "Фиксированный внутри", "Fixed-Left": "Фиксированный слева", "Fixed-Outer": "Фиксированный снаружи", "Fixed-Right": "Фиксированный справа", "Floating Shadow": "Плавающая тень", "Focal Point": "Фокусная точка", "Folder created.": "Папка создана.", "Folder Name": "Название папки", "Font Family": "Семейство шрифтов", "Footer": "Позиция Footer", "Footer Builder": "Конструктор Footer", "Force a light or dark color for text, buttons and controls on the image or video background.": "Принудительно используйте светлый или темный цвет для текста, кнопок и элементов управления на фоне изображения или видео.", "Force left alignment": "Принудительное выравнивание по левому краю", "Force viewport height": "Принудительная высота окна просмотра", "Form": "Форма", "Format": "Формат", "Full": "Full", "Full Article Image": "Полное Изображение статьи", "Full Article Image Alt": "Полное Изображение Статьи с атрибутом Alt", "Full Article Image Caption": "Full Article Image Caption", "Full Width": "Полная ширина", "Full width button": "Кнопка на всю ширину", "Functional": "Функциональные", "g": "g", "Gallery": "Галерея", "Gallery Thumbnail Columns": "Столбцы миниатюр галереи", "Gamma": "Гамма", "Gap": "Разрыв", "General": "Общие", "GitHub (Light)": "GitHub (светлый)", "Global": "Global", "Google Analytics": "Google Analytics", "Google Fonts": "Шрифты Google", "Google Maps": "Карты Google", "Gradient": "Градиент", "Greater than": "Более чем", "Grid": "Сетка", "Grid Breakpoint": "Контрольная точка сетки", "Grid Column Gap": "Отступ сетки столбца", "Grid Row Gap": "Отступ сетки строки", "Grid Width": "Ширина сетки", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Группировка элементов в наборы. Количество элементов в наборе зависит от заданной ширины элемента, например, <i>33%</i> означает, что каждый набор содержит 3 элемента.", "Grouped Products": "Сгруппированные продукты", "Guest User": "Гостевой пользователь", "h": "h", "H1": "H1", "h1": "h1", "H2": "H2", "h2": "h2", "H3": "H3", "h3": "h3", "H4": "H4", "h4": "h4", "H5": "H5", "h5": "h5", "H6": "H6", "h6": "h6", "Halves": "2 колонки (пополам )", "Hard-light": "Жесткий свет", "Header": "Позиция Header", "Header End": "Header End", "Header Start": "Header Start", "Header Text Color": "Цвет текста Header", "Heading": "Заголовок", "Heading 2X-Large": "Heading 2X-Large", "Heading 3X-Large": "Heading 3X-Large", "Heading H1": "Заголовок Н1", "Heading H2": "Заголовок Н2", "Heading H3": "Заголовок Н3", "Heading H4": "Заголовок Н4", "Heading H5": "Заголовок Н5", "Heading H6": "Заголовок Н6", "Heading Large": "Heading Large", "Heading Link": "Heading Link", "Heading Medium": "Heading Medium", "Heading Small": "Heading Small", "Heading X-Large": "Heading X-Large", "Headline": "Заголовок", "Headline styles differ in font size and font family.": "Стили заголовков могут различаются по размеру, также иметь собственный цвет, размер и шрифт.", "Height": "Высота", "Height 100%": "Высота 100%", "Height Viewport": "Высота Viewport", "Help": "Помощь", "hex / keyword": "hex / keyword", "Hidden": "Hidden", "Hidden Large (Desktop)": "Hidden Large (Desktop)", "Hidden Medium (Tablet Landscape)": "Hidden Medium (Tablet Landscape)", "Hidden Small (Phone Landscape)": "Hidden Small (Phone Landscape)", "Hidden X-Large (Large Screens)": "Hidden X-Large (Large Screens)", "Hide": "Скрыть", "Hide and Adjust the Sidebar": "Скрыть и настроить боковую панель", "Hide marker": "Скрыть маркер", "Hide Sidebar": "Скрыть боковую панель", "Hide Term List": "Скрыть список", "Hide title": "Скрыть заголовок", "Highlight the hovered row": "Выделение строк при наведении мышкой", "Highlight the item as the active item.": "Выделите элемент как активный элемент.", "Hits": "Просмотры", "Home": "Главная", "Home Text": "Текст Начала", "Horizontal": "Горизонтальный", "Horizontal Center": "По горизонтали в центре", "Horizontal Center Logo": "Horizontal Center Logo", "Horizontal Justify": "Горизонтальное выравнивание", "Horizontal Left": "По горизонтали слева", "Horizontal Right": "По горизонтали справа", "Host": "Host", "Hover": "Hover", "Hover Box Shadow": "Тень объекта при наведении", "Hover Image": "Изображение при наведении", "Hover Style": "Стиль при наведения", "Hover Transition": "Эффект При Наведении", "Hover Video": "Видео при наведении", "hr": "hr", "Html": "Html", "HTML Element": "HTML элемент", "Hue": "Цветовая палитра", "Hyphen": "Hyphen", "Hyphen and Underscore": "Дефис и подчеркивание", "Icon": "Иконка", "Icon Alignment": "Выравнивание иконки", "Icon Button": "Icon Button", "Icon Color": "Цвет иконки", "Icon Link": "Icon Link", "Icon Width": "Ширина Иконки", "Icon/SVG Color": "Icon/SVG Color", "Iconnav": "Iconnav", "icons": "icons", "ID": "ID", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Если раздел или строка имеют максимальную ширину, а одна сторона расширяется влево или вправо, отступ по умолчанию можно удалить с расширяющейся стороны.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Если несколько шаблонов назначены одному и тому же представлению, применяется шаблон, который появляется первым. Измените порядок с помощью перетаскивания.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Если вы создаете мультиязычный сайт, не используйте здесь определенное меню. Вместо этого используйте менеджер модулей для публикации меню в зависимости от текущего языка.", "If you are using WPML, you can not select a menu here. Instead, use the WordPress menu manager to assign menus to locations for a language.": "Если вы используете WPML, вы не можете выбрать здесь меню. Вместо этого используйте менеджер меню WordPress, чтобы назначить меню для вывода языка.", "Ignore %taxonomy%": "Игнорировать %taxonomy%", "Ignore author": "Игнорировать автора", "Ignore category": "Игнорировать категорию", "Ignore tags": "Игнорировать теги", "Image": "Изображение", "Image Align": "Выравнивание изображения", "Image Alignment": "Выравнивание изображения", "Image Alt": "Атрибут ALT изображения", "Image and Content": "Картинка и Контент", "Image and Title": "Изображение и название", "Image Attachment": "Прикрепление изображения", "Image Box Shadow": "Тень контейнера изображения", "Image Bullet": "Image Bullet", "Image Effect": "Эффект изображения", "Image Field": "Поле картинки", "Image Focal Point": "Фокус изображения", "Image Height": "Высота изображения", "Image Margin": "Отступ изображения", "Image Orientation": "Ориентация изображения", "Image Position": "Позиция изображения", "Image Quality": "Качество изображения", "Image Size": "Размер изображения", "Image Width": "Ширина изображения", "Image Width/Height": "Ширина/Высота изображения", "Image, Title, Content, Meta, Link": "Изображение, Заголовок, Контент, Мета, Ссылка", "Image, Title, Meta, Content, Link": "Изображение, Заголовок, Мета, Контент, Ссылка", "Image/Video": "Изображение/Видео", "Images and Links": "Изображения и Ссылки", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Изображения не удается кэшировать. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Измените права доступа</a> папки <code>cache</code> в папке <code>yootheme</code>, Чтобы сервер мог туда записывать файлы.", "Import Settings": "Импорт Настроек", "In parenthesis": "В скобках", "Include %post_types% from child %taxonomies%": "Включить %post_types% из дочерних %taxonomies%", "Include articles from child categories": "Включить статьи из дочерних категорий", "Include child %taxonomies%": "Включая дочерние %taxonomies%", "Include child categories": "Включая дочерние категории", "Include child tags": "Включая дочерние теги", "Include heading itself": "Включить сам заголовок", "Include items from child tags": "Включить элементы из дочерних тегов", "Include posts from child %taxonomies%": "Включать посты из дочерних %taxonomies%", "Include query string": "Включить строку запроса", "Info": "Инфо", "Inherit": "Inherit", "Inherit transparency from header": "Наследовать прозрачность от шапки", "Inject SVG images into the markup so they adopt the text color automatically.": "Вставьте изображения SVG в разметку, чтобы они автоматически принимали цвет текста.", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Вставлять SVG изображения в разметку страницы, чтобы было проще их стилизовать с помощью CSS.", "Inline": "Inline", "Inline SVG": "Inline SVG", "Inline SVG logo": "Inline SVG logo", "Inline title": "Встроенный заголовок", "Input": "Ввод", "Input Dropbar": "Input Dropbar", "Input Dropdown": "Input Dropdown", "Insert at the bottom": "Вставить снизу", "Insert at the top": "Вставить сверху", "Inset": "Вставка", "Instead of opening a link, display an alternative content in a modal or an offcanvas sidebar.": "Вместо того, чтобы открывать ссылку, показать альтернативный контент в модальном окне или на боковой панели OffCanvas.", "Instead of using a custom image, set an icon for the language switcher parent item.": "Вместо использования пользовательского изображения установите значок для родительского элемента переключателя языка.", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Нажмите на значок карандаша, чтобы выбрать из коллекции иконок изображение вместо существующего.", "Intro Image": "Вступительное изображение", "Intro Image Alt": "Alt вступительного изображения", "Intro Image Caption": "Intro Image Caption", "Intro Text": "Вступительный текст", "Invalid Argument Mapped": "Сопоставлен недопустимый аргумент", "Invalid Field Mapped": "Неверная привязка полей", "Invalid Source": "Неверный источник данных", "Inverse Logo (Optional)": "Инвертированный логотип (Опционально)", "Inverse on hover or when active": "Инверсия при наведении или когда активный", "Inverse style": "Инвертировать стиль", "Inverse text color on hover or when active": "Инвертировать цвет текста при наведении или когда он активен", "Inverse the text color on hover": "Инвертированный цвет текста при наведении", "Invert lightness": "Инвертировать яркость", "Inview": "При появлении в области просмотра", "IP Anonymization": "IP анонимизация", "Is empty": "Пустой", "Is equal to": "Равно", "Is in the last": "Находится последним", "Is in the next": "Находится следующим", "Is in this": "Находится в этом", "Is not empty": "не пустой", "Is not equal to": "не равно", "Issues and Improvements": "Проблемы и улучшения", "Item": "Элемент", "Item (%post_type% fields)": "Item (%post_type% fields)", "Item Count": "Количество товаров", "Item deleted.": "Пункт удален.", "Item Index": "Индекс предмета", "Item Max Width": "Item Max Width", "Item renamed.": "Пункт переименован.", "Item uploaded.": "Файл загружен.", "Item Width": "Ширина элемента", "Item Width Mode": "Режим установки ширины элемента", "Items": "Элементы", "Items (%post_type% fields)": "Элементы (поля %post_type%)", "Items per Page": "Элементов на строку", "JPEG": "JPEG", "JPEG to AVIF": "JPEG в AVIF", "JPEG to WebP": "JPEG в WebP", "Justify": "Равномерно", "Justify columns at the bottom": "Выравнивание столбцов внизу", "Keep existing": "Keep existing", "Ken Burns Duration": "Продолжительность эффекта Ken Burns", "Ken Burns Effect": "Эффект Ken Burns", "l": "|", "Label": "Label", "Label Margin": "Отступ между метками", "Labels": "Метки", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Альбомный и портретный вариант изображения сосредоточены в пределах ячейки сетки. Ширина и высота будут переворачиваться при соответствующем повороте изображения.", "Language Dropdown": "Language Dropdown", "Language Dropdown Icon Width": "Ширина иконки Language Dropdown", "Language Switcher": "Переключатель языка", "Large": "Large", "Large (Desktop)": "Large (Desktop)", "Large padding": "Большой отступ", "Large Screen": "Большие экраны", "Large Screens": "Большие экраны", "Larger padding": "Большие внутренние отступы", "Larger style": "Больший стиль", "Last 24 hours": "Последние 24 часа", "Last 30 days": "Последние 30 дней", "Last 7 days": "Последние 7 дней", "Last Column Alignment": "Выравнивание в последнем столбце", "Last Item": "Последний элемент", "Last Modified": "Последнее изменение", "Last name": "Фамилия", "Last visit date": "Дата последнего посещения", "Last Visit Date": "Дата последнего визита", "Layout": "Макет", "Layout Library": "Библиотека Макетов", "Layout Media Files": "Медиафайлы макета", "Layouts uploaded successfully.": "Макеты загружены успешно.", "Lazy": "Ленивая загрузка", "Lazy load video": "Отложенная загрузка видео", "Lead": "Lead", "Learning Layout Techniques": "Изучение методов компоновки", "Left": "Left", "Left (Not Clickable)": "Left (Not Clickable)", "Left Bottom": "Левый Нижний", "Left Center": "Левый центр", "Left Top": "Левый Верхний", "Less than": "Меньше чем", "Library": "Библиотека", "Light": "Светлый", "Light Text": "Светлый текст", "Lightbox": "Лайтбокс", "Lightbox only": "Только лайтбокс", "Lighten": "Осветлить", "Lightness": "Яркость", "Limit": "Ограничение", "Limit by %taxonomies%": "Ограничение по %taxonomies%", "Limit by Categories": "Ограничение по категориям", "Limit by Date Archive Type": "Ограничение по дате Типу архива", "Limit by Language": "Ограничение по языку", "Limit by Menu Heading": "Ограничение по заголовку меню", "Limit by Page Number": "Ограничение по номеру страницы", "Limit by Products on sale": "Ограничение по продуктам в продаже", "Limit by Tags": "Ограничение по тегам", "Limit by Terms": "Ограничение по срокам", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Ограничьте длину содержимого. Все HTML элементы будут удалены.", "Limit the number of products.": "Ограничьте количество продуктов.", "Line": "Линия", "Link": "Ссылка", "link": "ссылка", "Link %letter%": "Ссылка %letter%", "Link %letter% Text": "Ссылка %letter% Текст", "Link ARIA Label": "Ссылка на ярлык ARIA", "Link card": "Карточка как ссылка", "Link image": "Изображение как ссылка", "Link Muted": "Link Muted", "Link overlay": "Наложение как ссылка", "Link panel": "Панель как ссылка", "Link Parallax": "Parallax как ссылка", "Link Reset": "Link Reset", "Link Style": "Стиль ссылки", "Link Target": "Цель ссылки", "Link Text": "Link Text", "Link the image if a link exists.": "Ссылка на изображение, если ссылка существует.", "Link the title if a link exists.": "Ссылка на заголовок, если ссылка существует.", "Link the whole card if a link exists.": "Связать всю карту, если ссылка существует.", "Link the whole overlay if a link exists.": "Свяжите все наложение целиком, если ссылка существует.", "Link the whole panel if a link exists.": "Свяжите всю панель, если ссылка существует.", "Link the whole panel if a link exists. Optionally, add a hover style.": "Сделать панель кликабельной, если установлена ссылка. Опционально можно добавить стиль при наведении.", "Link the whole slideshow instead of linking items separately.": "Установить ссылку на все слайд-шоу вместо отдельных слайдов.", "Link title": "Заголовок как ссылка", "Link Title": "Заголовок как ссылка", "Link to redirect to after submit.": "Ссылка для перенаправления после отправки.", "Links ABC": "Ссылки ABC", "List": "Список", "List All Tags": "Список всех тегов", "List Item": "Элемент списка", "List Style": "Стиль списка", "Live Search": "Поиск в реальном времени", "Load Bootstrap": "Загрузить Bootstrap", "Load Font Awesome": "Загрузить Font Awesome", "Load image eagerly": "Загрузить изображение сразу", "Load jQuery": "Загрузить jQuery", "Load jQuery to write custom code based on the jQuery JavaScript library.": "Загрузите jQuery, чтобы написать собственный код на основе библиотеки JavaScript jQuery.", "Load product on sale only": "Загружать только товары со скидкой", "Load products on sale only": "Загружайте только товары со скидкой", "Load the video eagerly, lazily when it enters the viewport, or only after the play button is clicked. Loading YouTube and Vimeo videos on click is GDPR-compliant. No external requests are sent, and no JavaScript is loaded until the video is played.": "Загружать видео немедленно, отложенно при попадании в область просмотра или только после нажатия кнопки воспроизведения. Загрузка видео с YouTube и Vimeo по клику соответствует требованиям GDPR. Внешние запросы не отправляются, и JavaScript не загружается до момента воспроизведения видео.", "Loading": "Загрузка", "Loading Layouts": "Загрузка макетов", "Location": "Расположение", "Login Page": "Страница входа в систему", "Logo End": "Logo End", "Logo Image": "Изображение логотипа", "Logo Text": "Текст логотипа", "Loop video": "Циклическое воспроизведение видео", "Lost Password Confirmation Page": "Страница подтверждения утерянного пароля", "Lost Password Page": "Страница с потерянным паролем", "Lowercase": "В нижнем регистре", "Luminosity": "Светимость", "Mailchimp API Token": "API токен веб-сервиса Mailchimp", "Main Section Height": "Высота основной секции", "Main styles": "Основные стили", "Make header transparent": "Сделать Header прозрачным", "Make only first item active": "Сделать только первый пункт активным", "Make SVG stylable with CSS": "Сделать SVG стилизуемым с помощью CSS", "Make the column or its elements sticky only from this device width and larger.": "Делайте колонку или ее элементы липкими только от этой ширины устройства и больше.", "Make the header transparent and overlay this section if it directly follows the header.": "Сделайте заголовок прозрачным и наложите его на этот раздел, если он следует непосредственно за заголовком.", "Make the header transparent even when it's sticky.": "Сделать Header прозрачным даже если он липкий.", "Managing Menus": "Управление меню", "Managing Modules": "Управление Модулями", "Managing Pages": "Управление страницами", "Managing Sections, Rows and Elements": "Управление разделами, Строками и элементами", "Managing Templates": "Управление Шаблонами", "Managing Widgets": "Управление виджетами", "Manual": "Задан вручную", "Manual Order": "Ручная сортировка", "Map": "Карта", "Mapping Fields": "Отображение полей", "Margin": "Внешний отступ", "Margin Bottom": "Нижний внешний отступ", "Margin Top": "Верхняя граница", "Marker": "Маркер", "Marker Color": "Цвет маркера", "Marker Icon": "Иконка маркера", "Marketing": "Маркетинг", "Mask": "Маска", "Masonry": "Динамическая", "Match (OR)": "Совпадение (ИЛИ)", "Match all (AND)": "Сопоставить всё (AND)", "Match all %taxonomies% (AND)": "Сопоставить все %taxonomies% (AND)", "Match all tags (AND)": "Сопоставить все теги (AND)", "Match author (OR)": "Сравнить автора (OR)", "Match category (OR)": "Сравнить категорию (OR)", "Match content height": "Отрегулируйте высоту содержимого", "Match height": "Регулировка высоты", "Match Height": "Регулирование высоты", "Match one (OR)": "Соответствует одному (OR)", "Match one %taxonomy% (OR)": "Соответствует одной %taxonomy% (OR)", "Match one tag (OR)": "Соответствует одному тегу (OR)", "Match panel heights": "Соответствие высоте панели", "Match the height of all modules which are styled as a card.": "Соответствует высоте всех модулей, стилизованных под карточку.", "Match the height of all widgets which are styled as a card.": "Соответствует высоте всех виджетов, которые оформлены в виде карточки.", "Matches a RegExp": "Соответствует RegExp", "Max Height": "Максимальная высота", "Max Width": "Максимальная ширина", "Max Width (Alignment)": "Максимальная ширина (Выравнивание)", "Max Width Breakpoint": "Максимальная ширина контрольной точки", "Maximum Zoom": "Максимальное увеличение", "Maximum zoom level of the map.": "Максимальный уровень масштабирования карты.", "Media": "Media", "Media Folder": "Медиа папка", "Medium": "Medium", "Medium (Tablet Landscape)": "Medium (Tablet Landscape)", "Menu": "Меню", "Menu Divider": "Разделитель меню", "Menu Icon Width": "Ширина значка меню", "Menu Image Align": "Выравнивание изображения меню", "Menu Image and Title": "Изображение и название меню", "Menu Image Height": "Высота изображения меню", "Menu Image Width": "Ширина изображения меню", "Menu Inline SVG": "Меню Встроенный SVG", "Menu Item": "Пункт меню", "Menu Items": "Пункты меню", "Menu items are only loaded from the selected parent item.": "Элементы меню загружаются только из выбранного родительского элемента.", "Menu Primary Size": "Размер Primary меню", "Menu Style": "Стиль меню", "Menu Type": "Тип меню", "Menus": "Меню", "Message": "Сообщение", "Message shown to the user after submit.": "Сообщение, показанное пользователю после отправки.", "Meta": "Мета", "Meta Alignment": "Мета выравнивание", "Meta Margin": "Мета отступ", "Meta Parallax": "Мета Parallax", "Meta Style": "Мета стиль", "Meta Width": "Мета ширина", "Meta, Image, Title, Content, Link": "Мета, Изображение, Заголовок, Контент, Ссылка", "Meta, Title, Content, Link, Image": "Мета, Заголовок, Контент, Ссылка, Изображение", "Method": "Метод", "Middle": "Middle", "Mimetype": "MIME-тип", "Min Height": "Минимальная высота", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Имейте в виду, что шаблон с общим макетом назначен текущей странице. Отредактируйте шаблон, чтобы обновить его макет.", "Minimum Stability": "Минимальная стабильность", "Minimum Zoom": "Минимальное увеличение", "Minimum zoom level of the map.": "Минимальный уровень масштабирования карты.", "Miscellaneous Information": "Прочая информация", "Mobile": "Позиция Mobile", "Mobile Inverse Logo (Optional)": "Мобильный логотип с инверсией (опционально)", "Mobile Logo (Optional)": "Логотип для мобильного устройства (опционально)", "Modal": "В модальном окне", "Modal Center": "Модальное окно по центру", "Modal Focal Point": "Модальная точка фокусировки", "Modal Image Focal Point": "Модальная точка фокусировки изображения", "Modal Top": "Модальное окно сверху", "Modal Width": "Модальная ширина", "Modal Width/Height": "Размеры окна", "Mode": "Режим", "Modified": "Измененный", "Modified Date": "Дата модификации", "Module": "Модуль", "Module Position": "Позиция модуля", "Module Theme Options": "Module Theme Options", "Modules": "Модули", "Modules and Positions": "Модули и Позиции", "Monokai (Dark)": "Monokai (Dark)", "Month": "Месяц", "Month Archive": "Архив за месяц", "Months": "Месяцы", "Move the sidebar to the left of the content": "Отображение позиции Sidebar слева от содержимого", "Multibyte encoded strings such as UTF-8 can't be processed. Install and enable the <a href=\"https://php.net/manual/en/book.mbstring.php\" target=\"_blank\">Multibyte String extension</a>.": "Строки в многобайтовой кодировке, такие как UTF-8, не могут быть обработаны. Установите и включите <a href=\"https://php.net/manual/en/book.mbstring.php\" target=\"_blank\">Multibyte String extension</a>.", "Multiple Items Source": "Источник нескольких элементов", "Multiply": "Умножать", "Mute video": "Отключить звук видео", "Muted": "Muted", "My Account": "Мой аккаунт", "My Account Page": "Страница моей учетной записи", "my layouts": "мои макеты", "my presets": "мои пресеты", "my styles": "мои стили", "Name": "Имя", "Names": "Имена", "Nav": "Навигация", "Nav Primary Size": "Размер Nav Primary", "Nav Style": "Стиль Nav", "Nav/Subnav Divider": "Разделитель Nav/Subnav", "Navbar": "Панель навигации", "Navbar Container": "Navbar Container", "Navbar Dropdown": "Navbar Dropdown", "Navbar End": "Navbar End", "Navbar Start": "Navbar Start", "Navbar Style": "Navbar стиль", "Navigation": "Навигация", "Navigation Label": "Метка навигационная", "Navigation Order": "Порядок навигации", "Navigation Thumbnail": "Миниатюра навигации", "New Article": "Новая статья", "New Layout": "Новый макет", "New Menu Item": "Новый пункт меню", "New Module": "Новый модуль", "New Page": "Новая страница", "New Template": "Новый Шаблон", "New Window": "Новое окно", "Newsletter": "Рассылка", "Next": "Дальше", "Next %post_type%": "Следующий %post_type%", "Next Article": "Следующая статья", "Next page": "Следующая страница", "Next Section": "Следующая секция", "Next slide": "Следующий слайд", "Next-Gen Images": "Изображения нового поколения", "Nicename": "Красивое имя", "Nickname": "Прозвище", "No %item% found.": "%item% не найден.", "No articles found.": "Статьи не найдены.", "No Clear all button": "Без кнопки Очистить все", "No critical issues found.": "Критические проблемы не найдены.", "No element found.": "Элементы не найдены.", "No element presets found.": "Элементы пресетов не найдены.", "No Field Mapped": "Поля не связаны", "No files found.": "Файлы не найдены.", "No font found. Press enter if you are adding a custom font.": "Шрифт не найден. Впишите название и нажмите клавишу Enter, если вы добавляете свой шрифт.", "No icons found.": "Иконки не найдены.", "No image library is available to process images. Install and enable the <a href=\"https://php.net/manual/en/book.image.php\" target=\"_blank\">GD</a> extension.": "Библиотека для обработки изображений недоступна. Установите и включите расширение <a href=\"https://php.net/manual/en/book.image.php\" target=\"_blank\">GD</a>.", "No items yet.": "Пока ничего нет.", "No layout found.": "Макет не найден.", "No limit": "Без ограничений", "No list selected.": "Список не выбран.", "No pages found.": "Страницы не найдены.", "No Results": "Нет результатов", "No results.": "Нет результатов.", "No source mapping found.": "Сопоставление источника не найдено.", "No style found.": "Стиль не найден.", "None": "None", "None (Fade if hover image)": "Нет (исчезает при наведении на изображение)", "Normal": "Normal", "Not assigned": "Не назначенный", "Notification": "Уведомление", "Notification Style": "Стиль уведомления", "Numeric": "Числовой", "Off": "Выключено", "Offcanvas": "Offcanvas", "Offcanvas Center": "Offcanvas центр", "Offcanvas Mode": "Режим выдвигающегося меню", "Offcanvas Top": "Топ Offcanvas", "Offset": "Смещение", "Ok": "Хорошо", "ol": "ol", "On": "Включено", "On (If inview)": "Включено (если просмотрено)", "On Click": "По клику", "On Sale Product": "Товар в продаже", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "На коротких страницах основной раздел можно расширить, чтобы заполнить всю область просмотра. Это относится только к страницам, которые не создаются с помощью компоновщика страниц.", "Only available for Google Maps.": "Доступно только для карт Google Maps.", "Only Clear all button": "Только кнопка Очистить все", "Only display modules that are published and visible on this page.": "Отображать только те модули, которые опубликованы и видны на этой странице.", "Only display widgets that are published and visible on this page.": "Отображать только виджеты, которые опубликованы и видны на этой странице.", "Only include child %taxonomies%": "Включите только дочерние %taxonomies%", "Only include child categories": "Включите только дочерние категории", "Only include child tags": "Включите только дочерние теги", "Only load menu items from the selected menu heading.": "Загружать пункты меню только из выбранного заголовка меню.", "Only post types with an archive can be redirected to the archive page.": "Только типы публикаций с архивом могут быть перенаправлены на страницу архива.", "Only search the selected post types.": "Поиск только выбранных типов публикаций.", "Only show the image or icon.": "Показывать только изображение или значок.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Только отдельные страницы и сообщения могут иметь индивидуальные макеты. Используйте шаблон, чтобы применить общий макет к этому типу страницы. Если вы получаете это сообщение в результате ошибки, то это не проблема шаблона, а лишь следствие ошибок в других расширениях сайта. Прежде всего стоит проверить работу плагинов. Включите показ всех ошибок и режим отладки в конфигурации, изучите ошибки в консоли браузера. Если ничего не понятно, обратитесь за помощью в службу поддержки или спросите совета у сообщества пользователей Yootheme Pro.", "Opacity": "Непрозрачность", "Open": "Открыть", "Open dropdowns on click instead of hover and align dropdowns to the filter bar instead of their item.": "Открыть список по клику вместо наведения и выровнять по панели фильтра вместо элемента.", "Open in a new window": "Открыть в новом окне", "Open menu": "Открыть меню", "Open Templates": "Открыть шаблоны", "Open the link in a new window": "Открыть ссылку в новом окне", "Opening the Changelog": "Открытие списка изменений", "Opt-in (GDPR)": "Согласие (GDPR)", "Opt-out (CCPA)": "Отказ (CCPA)", "Options": "Опции", "Order": "Сортировка", "Order Direction": "Направление сортировки", "Order First": "Ставить первым", "Order Received Page": "Страница получения заказа", "Order the filter navigation alphabetically or by defining the order manually.": "Упорядочите навигацию по фильтру в алфавитном порядке или задайте порядок вручную.", "Order Tracking": "Отслеживание заказа", "Ordering": "Порядок", "Ordering Sections, Rows and Elements": "Упорядочивание разделов, Строк и элементов", "Out of Stock": "Нет в наличии", "Outline text": "Текст с обводкой", "Outside": "Снаружи", "Outside Breakpoint": "Вне контрольной точки", "Outside Color": "Внешний цвет", "Overlap the following section": "Перекрытие следующего раздела", "Overlay": "Наложение", "Overlay + Lightbox": "Оверлей + лайтбокс", "Overlay Color": "Цвет наложения", "Overlay Default": "Overlay Default", "Overlay only": "Только наложение", "Overlay Parallax": "Параллакс наложения", "Overlay Primary": "Overlay Primary", "Overlay Slider": "Overlay Slider", "Overlay the site": "Наложение на сайт", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Переопределить настройки анимации секции. Эта опция работает только, если включена анимация в секции.", "Pack": "Pack", "Padding": "Внутренний отступ", "Padding Bottom": "Нижний внутренний отступ", "Padding Top": "Верхний внутренний отступ", "Page": "Страница", "Page Category": "Категория страницы", "Page Locale": "Язык страницы", "Page Title": "Заголовок страницы", "Page URL": "URL-адрес страницы", "Pages": "Страницы", "Pagination": "Пагинация", "Panel": "Панель", "Panel + Lightbox": "Панель + лайтбокс", "Panel only": "Только панель", "Panel Slider": "Слайдер панели", "Panels": "Панели", "Parallax": "Параллакс", "Parallax Breakpoint": "Контрольная точка для эффекта Параллакс", "Parallax Easing": "Настройка паралакс", "Parallax Start/End": "Параллакс Начало/Конец", "Parallax Target": "Parallax цель", "Parent": "Родитель", "Parent (%label%)": "Родитель (%label%)", "Parent %taxonomy%": "Родительская %taxonomy%", "Parent %type%": "Родительский %type%", "Parent Category": "Родительская категория", "Parent Menu Item": "Пункт родительского меню", "Parent Tag": "Родительский тег", "Parenthesis": "Скобки", "Path": "Путь", "Path Pattern": "Шаблон пути", "Pause autoplay on hover": "Приостановка автопроигрывания при наведении", "Phone Landscape": "Смартфон в альбомном режиме", "Phone Portrait": "Смартфон в портретном режиме", "Photos": "Фото", "Pick": "Выберите", "Pick %type%": "Выберите %type%", "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.": "Выберите %post_type% вручную или используйте параметры фильтра, чтобы указать, какой %post_type% должен загружаться динамически.", "Pick an alternative icon from the icon library.": "Выберите альтернативную иконку из библиотеки иконок.", "Pick an alternative SVG image from the media manager.": "Выберите альтернативное изображение SVG в медиаменеджере.", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "Выберите статью вручную или используйте параметры фильтра, чтобы указать, какая статья должна загружаться динамически.", "Pick an optional icon from the icon library.": "Выберите дополнительную иконку из библиотеки иконок.", "Pick file": "Выберите файл", "Pick icon": "Выберите иконку", "Pick link": "Выберите ссылку", "Pick media": "Выберите медиа", "Pick the link to the Privacy Policy.": "Выберите ссылку на Политику конфиденциальности.", "Pick video": "Выберите видео", "Pill": "Pill", "Pixels": "Пиксели", "Placeholder Image": "Заполнитель изображения", "Placeholder Video": "Placeholder Video", "Play Icon ": "Иконка воспроизведения ", "Play inline on mobile devices": "Встроенное воспроизведение на мобильных устройствах", "Play video inline": "Воспроизводить видео встроенно", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Пожалуйста, установите или включите <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> для включения этой функции.", "Please provide a valid email address.": "Пожалуйста, укажите действительный адрес электронной почты.", "PNG to AVIF": "PNG в AVIF", "PNG to WebP": "PNG в WebP", "Popover": "Всплывающее окно", "Popular %post_type%": "Популярный %post_type%", "Popup": "Всплывающий", "Port": "Port", "Position": "Позиция", "Position Absolute": "Position Absolute", "Position Sticky": "Position Sticky", "Position Sticky Breakpoint": "Позиция липкой точки останова", "Position Sticky Offset": "Положение Sticky Смещения", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Расположите элемент выше или ниже других элементов. Если они имеют одинаковый уровень стека, позиция зависит от порядка в макете.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Расположите элемент в обычном потоке содержимого или в обычном потоке, но со смещением относительно самого себя, или удалите его из потока и расположите относительно содержащего столбца.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Расположите меню фильтра вверху, слева или справа.", "Position the meta text above or below the title.": "Позиционировать мета текст сверху или снизу заголовка.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Местоположение элементов навигации в верхней, нижней, левой или правой части. Большинство стилей может быть применен к левому и правому размещению элементов навигации.", "Post": "Публикация", "Post Order": "По порядку записей", "Post Type Archive": "Тип сообщения Архив", "Post Type Archive page": "Страница Post Type Archive", "Postal/ZIP Code": "Почтовый индекс", "Poster ": "Постер ", "Poster Frame": "Первый кадр", "Poster Frame Focal Point": "Фокусная точка рамки плаката", "Posts from Child %taxonomies%": "Посты из дочерних %taxonomies%", "Posts per Page": "Posts per Page", "Prefer excerpt over intro text": "Отдавать предпочтение отрывку, а не вступительному тексту", "Prefer excerpt over regular text": "Предпочитать отрывок обычному тексту", "Preferences": "Настройки", "Preserve text color": "Сохранить цвет текста", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Сохраняйте цвет текста, например, при использовании карточек. Перекрытие разделов поддерживается не всеми стилями и может не иметь визуального эффекта.", "Preserve words": "Сохранять слова", "Prevent form submit if live search is used": "Отключить отправку формы, если используется живой поиск", "Preview all UI components": "Предпросмотр всех компонентов пользовательского интерфейса", "Previous %post_type%": "Предыдущая %post_type%", "Previous Article": "Предыдущая статья", "Previous page": "Предыдущая страница", "Previous slide": "Предыдущий слайд", "Previous/Next": "Предыдущий / Следующий", "Price": "Цена", "Primary": "Primary", "Primary navigation": "Основная навигация", "Primary Size": "Primary размер", "Privacy Policy Link": "Ссылка на Политику конфиденциальности", "pro layouts": "pro макеты", "pro presets": "pro пресеты", "Product Category Archive": "Архив категорий продукта", "Product Description": "Описание товара", "Product Gallery": "Галерея товаров", "Product IDs": "ID продуктов", "Product Image": "Изображение продукта", "Product Images": "Изображения продуктов", "Product Information": "Информация о продукте", "Product Meta": "Meta описание продукта", "Product Ordering": "Сортировка Продукта", "Product Price": "Цена продукта", "Product Rating": "Рейтинг продукта", "Product SKUs": "Артикулы товаров", "Product Stock": "Товарный запас", "Product Tabs": "Вкладки продукта", "Product Tag Archive": "Архив тегов продукта", "Product Title": "Название продукта", "Products": "Продукты", "Products Filter": "Фильтр Продуктов", "Property": "Имущество", "Provider": "Сервис рассылок", "Published": "Опубликовано", "Published Date": "Дата Публикации", "Pull": "Pull", "Pull content behind header": "Переместить контент за заголовок", "Purchases": "Покупки", "Push": "Push", "Push Items": "Сдвинуть элементы", "Quantity": "Количество", "Quarters": "4 колонки (по четвертям)", "Quarters 1-1-2": "Четверт-четверть-половина", "Quarters 1-2-1": "Четверть-половина-четверть", "Quarters 1-3": "Четверть Три-Четвертых", "Quarters 2-1-1": "Колонки 2-1-1", "Quarters 3-1": "Колонки 3-1", "Query": "Query", "Query String": "Строка запроса", "Quotation": "Цитата", "r": "r", "Random": "Случайный", "Rating": "Рейтинг", "Ratio": "Соотношение сторон", "Read More": "Подробнее", "Recompile style": "Перекомпилировать стиль", "Redirect": "Перенаправлять", "Register date": "Дата регистрации", "Registered": "Зарегистрированный", "Registered Date": "Дата Регистрации", "Reject Button Style": "Стиль кнопки 'Отклонить'", "Reject Button Text": "Текст кнопки 'Отклонить'", "Related %post_type%": "Связанный %post_type%", "Related Articles": "Статьи по теме (исключая текущий)", "Related Products": "Сопутствующие товары", "Relationship": "Отношение", "Relationships": "Отношения", "Relative": "Relative", "Relative Range": "Относительный диапазон", "Reload": "Перезагрузка", "Reload Page": "Перезагрузить страницу", "Reload page when expired": "Перезагружать страницу по истечении срока действия", "Reload the page after the countdown expires.": "Перезагрузить страницу после окончания обратного отсчёта.", "Remove": "Удалить", "Remove bottom margin": "Убрать внешний нижний отступ", "Remove bottom padding": "Убрать внутренний нижний отступ", "Remove horizontal padding": "Удалить горизонтальный padding", "Remove left and right padding": "Убрать левый и правый отступы", "Remove left logo padding": "Убрать внутренний левый отступ логотипа", "Remove left or right padding": "Убрать левый или правый отступ", "Remove Media Files": "Удалить медиафайлы", "Remove top margin": "Убрать внешний верхний отступ", "Remove top padding": "Убрать внутренний верхний отступ", "Remove vertical padding": "Удалить вертикальный отступ", "Rename": "Переименовать", "Rename %type%": "Переименовать %type%", "Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text.": "Показать вступительный текст, если тег Подробнее присутствует. В противном случае будет показан полный контент. Опционально можно использовать поле excerpt вместо вступительного текста.", "Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Показать вступительный текст, если тег Подробнее присутствует. В противном случае будет показан полный контент. Опционально можно использовать поле excerpt вместо вступительного текста. Для использования поля excerpt, создайте поле с таким именем.", "Replace": "Заменить", "Replace layout": "Заменить макет", "Request": "Запрос", "Reset": "Сброс", "Reset Link Sent Page": "Сбросить отправленную ссылку на страницу", "Reset to defaults": "Сброс в состояние по умолчанию", "Resize Preview": "Изменить размер предварительного просмотра", "Responsive": "Адаптивность", "Restart from beginning": "Начать с начала", "Result Count": "Количество результатов", "Reveal": "Reveal", "Reverse order": "Обратный порядок", "Reverse Results": "Обратить результаты", "Right": "Right", "Right (Clickable)": "Справа (Кликабельно)", "Right Bottom": "Справа Внизу", "Right Center": "Правый центр", "Right Top": "Right Top", "Roadmap": "Дорожная карта", "Roles": "Роли", "Root": "Корень", "Rotate": "Повернуть", "Rotate the title 90 degrees clockwise or counterclockwise.": "Повернуть заголовок на 90 градусов по часовой стрелке или против часовой стрелки.", "Rotation": "Вращение", "Round corners": "Скруглить углы", "Rounded": "Rounded", "Row": "Строка", "Row Gap": "Зазор между рядами", "Rows": "Строки", "Run Time": "Длительность", "s": "s", "Same as top": "Также как сверху", "Same Window": "То же самое окно", "Satellite": "Спутник", "Saturation": "Насыщенность", "Save": "Сохранить", "Save %type%": "Сохранить %type%", "Save in Library": "Сохранить в библиотеке", "Save Layout": "Сохранить макет", "Save Module": "Сохранить модуль", "Save Style": "Сохранить Стиль", "Save Template": "Сохранить шаблон", "Save Widget": "Сохранить виджет", "Scale": "Scale", "Scale Down": "Scale Down", "Scale Up": "Scale Up", "Scheme": "Схема", "Screen": "Экран", "Script": "Скрипт", "Scripts Body": "Скрипты Body", "Scripts Head": "Скрипты Head", "Scroll into view": "Прокрутите в область просмотра", "Scroll overflow": "Прокрутка при переполнении", "Search": "Поиск", "Search articles": "Поиск статей", "Search Component": "Компонент поиска", "Search Dropbar": "Search Dropbar", "Search Dropdown": "Search Dropdown", "Search Filter": "Фильтр поиска", "Search Icon": "Иконка поиска", "Search Item": "Элемент поиска", "Search Layout": "Макет Поиска", "Search Modal": "Search Modal", "Search Ordering": "Сортировка поиска", "Search Page": "Страница Поиска", "Search pages and post types": "Искать страницы и посты", "Search Redirect": "Перенаправление Поиска", "Search Style": "Стиль поиска", "Search Word": "Поисковое слово", "Secondary": "Secondary", "Section": "Секция", "Section Animation": "Раздел Анимация", "Section Grid": "Section Grid", "Section Grid Breakpoint": "Section Grid Breakpoint", "Section Height": "Высота секции", "Section Image and Video": "Секция Изображения и видео", "Section Padding": "Заполнение секций", "Section Position": "Позиция Секции", "Section Style": "Стиль секции", "Section Title": "Название секции", "Section Width": "Ширина секции", "Section/Row": "Секция/Ряд", "Sections": "Секции", "Select": "Выберите", "Select %item%": "Выберите %item%", "Select %type%": "Выберите %type%", "Select a card style.": "Выберите стиль карточки.", "Select a child theme. Note that different template files will be loaded, and theme settings will be updated respectively. To create a child theme, add a new folder <code>yootheme_NAME</code> in the templates directory, for example <code>yootheme_mytheme</code>.": "Выберите дочернюю тему. Обратите внимание, что будут загружены разные файлы шаблонов, и соответственно будут обновлены настройки темы. Чтобы создать дочернюю тему, добавьте новую папку <code>yootheme_NAME</code> в каталог шаблонов, например: <code>yootheme_mytheme</code>.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Выберите источник контента, чтобы сделать его поля доступными для сопоставления. Выберите один из источников текущей страницы или укажите пользовательский источник.", "Select a different position for this item.": "Выбрать другую позицию для этого элемента.", "Select a grid layout": "Выберите макет сетки", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Выберите позицию модуля Joomla, которая будет отображать все опубликованные модули. Рекомендуется использовать от builder-1 до builder-6, которые больше нигде в теме не используются.", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "Выберите логотип, который будет отображаться вне холста и в модальных диалогах определенных макетов заголовков.", "Select a menu or a taxonomy that will be rendered as menu.": "Выберите меню или таксономию, которая будет отображаться как меню.", "Select a panel style.": "Выбор стиля панели.", "Select a predefined date format or enter a custom format.": "Выберите предопределенный формат даты или введите пользовательский формат.", "Select a predefined meta text style, including color, size and font-family.": "Выберите определенный стиль мета текста, включающий цвет, размер и шрифт.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Выберите предопределенный шаблон поиска или введите пользовательскую строку или регулярное выражение для поиска. Регулярное выражение должно быть заключено между косыми чертами. Например, `my-string или `/ab+c/`.", "Select a predefined text style, including color, size and font-family.": "Выберите определенный стиль текста контента, включающий цвет, размер и шрифт.", "Select a predefined transform pattern": "Выберите готовый шаблон трансформации", "Select a style for the continue reading button.": "Выберите стиль для кнопки продолжения чтения.", "Select a style for the overlay.": "Выберите стиль для наложения.", "Select a taxonomy to only load posts from the same term.": "Выберите таксономию, чтобы загружать сообщения только из одного и того же термина.", "Select a taxonomy to only navigate between posts from the same term.": "Выберите таксономию, чтобы перемещаться только между публикациями одного и того же термина.", "Select a transition for the content when the overlay appears on hover or when active.": "Выберите переход для контента, когда наложение появляется при наведении или когда оно активно.", "Select a transition for the content when the overlay appears on hover.": "Выберите переход для содержимого, когда наложение появляется при наведении курсора.", "Select a transition for the link when the overlay appears on hover or when active.": "Выберите переход для ссылки, когда наложение появляется при наведении или когда оно активно.", "Select a transition for the link when the overlay appears on hover.": "Выберите переход для содержимого, когда наложение появляется при наведении курсора.", "Select a transition for the meta text when the overlay appears on hover or when active.": "Выберите переход для Мета текста, когда наложение появляется при наведении или когда оно активно.", "Select a transition for the meta text when the overlay appears on hover.": "Выберите переход для содержимого, когда наложение появляется при наведении курсора.", "Select a transition for the overlay when it appears on hover or when active.": "Выберите переход для наложения, когда оно появляется при наведении или когда оно активно.", "Select a transition for the overlay when it appears on hover.": "Выберите переход для содержимого, когда наложение появляется при наведении курсора.", "Select a transition for the title when the overlay appears on hover or when active.": "Выберите переход для заголовка, когда наложение появляется при наведении или когда оно активно.", "Select a transition for the title when the overlay appears on hover.": "Выберите переход для содержимого, когда наложение появляется при наведении курсора.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Выберите видео файл, или вставьте ссылку на <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> или <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WooCommerce page.": "Выберите страницу WooCommerce.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Выберите позицию модуля Joomla, которая будет отображать все опубликованные модули. Рекомендуется использовать от builder-1 до builder-6, которые больше нигде в теме не используются.", "Select an alternative font family. Mind that not all styles have different font families.": "Выберите альтернативное семейство шрифтов. Имейте в виду, что не все стили имеют разные семейства шрифтов.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Выберите альтернативный логотип с инвертированными цветами, например белый, для лучшей видимости на темном фоне. Он будет автоматически появляться в зависимости от цвета фона.", "Select an alternative logo, which will be used on small devices.": "Выбрать альтернативный логотип, который будет использоваться на мобильных устройствах.", "Select an animation that will be applied to the content items when filtering between them.": "Выберите вид анимации, который будет применен к содержимому элементов при переключении между ними.", "Select an animation that will be applied to the content items when toggling between them.": "Выберите вид анимации, который будет применен к содержимому элементов при переключении между ними.", "Select an image transition.": "Выберите переход изображения.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Выберите переход изображения. Если при наведении курсора он установлен, то переход происходит между двумя изображениями. Если <i>Нет</i> в установлен, то при наведении курсора постепенно исчезает.", "Select an optional <code>favicon.svg</code>. Modern browsers will use it instead of the PNG image. Use CSS to toggle the SVG color scheme for light/dark mode.": "Выберите необязательный значок <code>favicon.svg</code>. Современные браузеры будут использовать его вместо изображения в формате PNG. Используйте CSS для переключения цветовой схемы SVG для светлого / темного режима.", "Select an optional image that appears on hover.": "Выберите второе изображение, которое появляется при наведении.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Выберите дополнительное изображение, которое отображается до воспроизведения видео. Если не выбрано, отображается первый кадр из видео.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown.": "Выберите опциональное изображение, которое будет отображаться до начала воспроизведения видео. Если изображение не выбрано, будет показан первый кадр видео.", "Select an optional play icon which shows up if the video has to be clicked before it's loaded.": "Выберите опциональную иконку воспроизведения, которая будет отображаться, если перед загрузкой видео необходимо по нему кликнуть.", "Select an optional video that appears on hover.": "Выберите дополнительное видео, которое будет появляться при наведении.", "Select Color": "Выберите цвет", "Select dialog layout": "Выберите макет диалога", "Select Element": "Выберите элемент", "Select Gradient": "Выберите градиент", "Select header layout": "Выберите макет позиции Header", "Select Image": "Выберите изображение", "Select Manually": "Выберите Вручную", "Select menu item.": "Выберите пункт меню.", "Select menu items manually. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple menu items.": "Выберите пункты меню вручную. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких пунктов меню.", "Select mobile dialog layout": "Выберите макет мобильного диалога", "Select mobile header layout": "Выберите макет мобильного заголовка", "Select mobile search layout": "Выберите макет мобильного поиска", "Select one of the boxed card or tile styles or a blank panel.": "Выберите один из стилей карточек или плиток в штучной упаковке или пустую панель.", "Select post ordering.": "Выберите порядок сортировки записей.", "Select search layout": "Выберите макет поиска", "Select the animation on how the dropbar appears below the navbar.": "Выберите анимацию того, как Dropbar панель отображается под панелью навигации.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Выберите точку останова, с которой столбец начнет отображаться перед другими столбцами. На экранах меньшего размера столбцы будут отображаться в естественном порядке.", "Select the color of the list markers.": "Выберите цвет маркеров списка.", "Select the content position.": "Выбрать позицию содержимого.", "Select the device size where the default header will be replaced by the mobile header.": "Выберите размер устройства, при котором заголовок по умолчанию будет заменен мобильным заголовком.", "Select the filter navigation style.": "Выберите стиль фильтра навигации.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Выберите стиль навигационного фильтра. Кружки и разделители доступны только для горизонтальных подменю.", "Select the form size.": "Выберите размер формы.", "Select the form style.": "Выберите стиль формы.", "Select the icon color.": "Выберите цвет иконок.", "Select the image border style.": "Выберите стиль границы изображения.", "Select the image box decoration style.": "Выберите стиль оформления изображения.", "Select the image box shadow size on hover.": "Выберите размер отбрасываемой тени наложения.", "Select the image box shadow size.": "Выберите размер отбрасываемой тени для изображения.", "Select the item type.": "Выберите тип элемента.", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "Выберите макет для позиции <code>dialog-mobile</code> Нажатые элементы позиции показаны многоточием.", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "Выберите макет для позиции <code>dialog</code> Элементы, которые можно нажать, показаны многоточием.", "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.": "Выберите макет для позиций <code>logo-mobile</code>, <code>navbar-mobile</code> и <code>header-mobile</code>.", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "Выберите макет для позиций <code>logo</code>, <code>navbar</code> и <code>header</code> Некоторые макеты могут разделять или перемещать элементы позиции, которые отображаются в виде многоточия.", "Select the link style.": "Выберите стиль ссылки.", "Select the list style.": "Выберите стиль списка.", "Select the list to subscribe to.": "Выберите список для отправки.", "Select the logical operator for the attribute term comparison. Match at least one of the terms, none of the terms or all terms.": "Выберите логический оператор для сравнения терминов атрибута. Соответствует хотя бы одному из условий, ни одному из условий или всем условиям.", "Select the logical operator for the category comparison. Match at least one of the categories, none of the categories or all categories.": "Выберите логический оператор для сравнения категорий. Соответствует хотя бы одной из категорий, ни одной из категорий или всем категориям.", "Select the logical operator for the tag comparison. Match at least one of the tags, none of the tags or all tags.": "Выберите логический оператор для сравнения тегов. Соответствует хотя бы одному из тегов, ни одному из тегов или всем тегам.", "Select the marker of the list items.": "Выберите маркер элементов списка.", "Select the menu type.": "Выберите тип меню.", "Select the nav style.": "Выберите стиль навигации.", "Select the navbar style.": "Выберите стиль навигационной панели.", "Select the navigation type.": "Выбрать тип навигации.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Выберите стиль навигации. Кружки и разделители доступны только для горизонтального подменю.", "Select the overlay or content position.": "Выбрать расположение наложения на контент.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Выберите выравнивание всплывающего окна для своего маркера. Если содержимое в окне не помещается, то оно будет автоматически выходить за границы окна и будет появляться прокрутка.", "Select the position of the navigation.": "Выбрать положение элементов слайд-шоу.", "Select the position of the slidenav.": "Выберите положение slidenav.", "Select the position that will display the search.": "Выберите позицию поиска.", "Select the position that will display the social icons.": "Выберите положение, в котором будут отображаться значки социальных сетей.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Выберите позицию для отображения иконок социальных сетей. Вы должны ввести ссылки на свой профиль в социальных сетях, иначе иконки не будут отображаться.", "Select the primary nav size.": "Выберите размер основной навигации.", "Select the search style.": "Выберите стиль поиска.", "Select the slideshow border style.": "Выберите стиль границы слайд-шоу.", "Select the slideshow box shadow size.": "Выберите размер тени окна слайд-шоу.", "Select the smart search filter.": "Выберите фильтр умного поиска.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Выберите стиль подсветки кода. GitHub стиль лучше всего на светлом и Monokai на темном фоне.", "Select the style for the overlay.": "Выберите стиль наложения.", "Select the subnav style.": "Выберите стиль подменю.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Выберите цвет SVG. Он будет применяться только к поддерживаемым элементам, определенным в SVG.", "Select the table style.": "Выберите стиль таблицы.", "Select the text color.": "Выберите цвет текста.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Выберите цвет текста. Если опция фона выбрана, стили, которые не применяют фоновое изображение, будут использоваться вместо основного цвета.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Выберите цвет текста. Если опция фона выбрана, стили, которые не применяют фоновое изображение, будут использоваться вместо основного цвета.", "Select the title style and add an optional colon at the end of the title.": "Выберите стиль заголовка и добавить двоеточие в конце заголовка.", "Select the title style.": "Выберите стиль заголовка.", "Select the transformation origin for the Ken Burns animation.": "Выбрать вид трансформации для анимации Ken Burns.", "Select the transition between two slides.": "Выберите переход между двумя слайдами.", "Select the video border style.": "Выберите стиль границы видео.", "Select the video box decoration style.": "Выберите стиль оформления изображения.", "Select the video box shadow size on hover.": "Выберите размер тени видео при наведении.", "Select the video box shadow size.": "Выберите размер тени рамки видео.", "Select Video": "Выбрать видео", "Select whether a button or a clickable icon inside the email input is shown.": "Выберите или кнопку, или кликабельную иконку внутри поля ввода адреса электронной почты.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Выберите или сообщение, которое будет выведено, или сайт, на который будет перенаправление после нажатия на кнопку Отправить.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Выберите, используется ли обычный Поиск или Умный поиск в качестве модуля поиска в теме и элемента конструктора.", "Select whether the modules should be aligned side by side or stacked above each other.": "Выберите, должны ли модули быть расположены рядом друг с другом или сложены друг над другом.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Выберите, должны ли виджеты выравниваться бок о бок или располагаться друг над другом.", "Select your <code>apple-touch-icon.png</code>. It appears when the website is added to the home screen on iOS devices. The recommended size is 180x180 pixels.": "Выберите свой <code>apple-touch-icon.png</code>. Он появляется, когда веб-сайт добавляется на главный экран на устройствах iOS. Рекомендуемый размер - 180x180 пикселей.", "Select your <code>favicon.png</code>. It appears in the browser's address bar, tab and bookmarks. The recommended size is 96x96 pixels.": "Выберите свой <code>favicon.png</code>. Он отображается в адресной строке браузера, на вкладке и в закладках. Рекомендуемый размер - 96x96 пикселей.", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "Выберите свой логотип. При необходимости добавьте логотип SVG в разметку, чтобы он автоматически принимал цвет текста.", "Sentence": "Предложение", "Separator": "Разделитель", "Serve AVIF images": "Использовать изображения AVIF", "Serve optimized image formats with better compression and quality than JPEG and PNG.": "Используйте оптимизированные форматы изображений с лучшим сжатием и качеством, чем JPEG и PNG. Для генерации AVIF требуется поддержка PHP 8.1+ в которой библиотека GD скомпилирована с зависимостью от libavif.", "Serve WebP images": "Использовать WebP изображения", "Set %color% background": "Установите %color% фона", "Set a condition to display the element or its item depending on the content of a field.": "Установите условие для отображения элемента или его записей в зависимости от содержимого поля.", "Set a different link ARIA label for this item.": "Установите для этого элемента другую метку ARIA ссылки.", "Set a different link text for this item.": "Установите другой текст ссылки для этого элемента.", "Set a different text color for this item.": "Задать другой цвет текста для этого элемента.", "Set a fixed height for all columns. They will keep their height when stacking. Optionally, subtract the header height to fill the first visible viewport.": "Установите фиксированную высоту для всех столбцов. Они сохранят свою высоту при сложении в столбик. При желании вычтите высоту заголовка, чтобы заполнить первую видимую область просмотра.", "Set a fixed height, and optionally subtract the header height to fill the first visible viewport. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.": "Установите фиксированную высоту и при необходимости вычтите высоту заголовка, чтобы заполнить первую видимую область просмотра. Либо увеличьте высоту, чтобы следующий раздел также помещался в область просмотра, или на страницах меньшего размера, чтобы заполнить область просмотра.", "Set a fixed height, and optionally subtract the header height to fill the first visible viewport. Alternatively, expand the height so the next section also fits the viewport.": "Установите фиксированную высоту и, при необходимости, вычтите высоту заголовка, чтобы заполнить первую видимую область просмотра. Или же увеличьте высоту, чтобы следующая секция также помещалась в область просмотра.", "Set a fixed height. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.": "Установите фиксированную высоту. Либо увеличьте высоту, чтобы следующий раздел также помещался в область просмотра, или на страницах меньшего размера, чтобы заполнить область просмотра.", "Set a fixed width.": "Установить фиксированную ширину.", "Set a focal point to adjust the image focus when cropping.": "Установите точку фокусировки, чтобы настроить фокус изображения при кадрировании.", "Set a focal point to control cropping.": "Установите точку фокуса для управления обрезкой.", "Set a higher stacking order.": "Установите более высокий порядок наложения.", "Set a large initial letter that drops below the first line of the first paragraph.": "Установить большую заглавную букву которая появляется перед первой линией первого абзаца.", "Set a larger dropdown padding, show dropdowns in a full-width section called dropbar and display an icon to indicate dropdowns.": "Установить большой отступ для dropdown, показывать выпадающие списки на всю ширину, вызванные Dropbar и показать родительский значок для обозначения выпадающего списка.", "Set a parallax animation to move columns with different heights until they justify at the bottom. Mind that this disables the vertical alignment of elements in the columns.": "Установите анимацию параллакса для перемещения столбцов разной высоты до тех пор, пока они не выровняются по нижнему краю. Имейте в виду, что это отключает вертикальное выравнивание элементов в столбцах.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Определите ширину позиции Sidebar в процентах, контент адаптируется соответственно. Минимальную ширину позиции Sidebar можно настроить в разделе Стиль.", "Set a thematic break between paragraphs or give it no semantic meaning.": "Установите разрыв между абзацами или не придавайте ему смыслового значения.", "Set an additional transparent overlay to soften the image or video.": "Установить дополнительный полупрозрачный верхний слой, чтобы размыть изображение или видео.", "Set an additional transparent overlay to soften the image.": "Установить дополнительный прозрачный слой для смягчения изображения.", "Set an alternative description for the category, for example, to list all cookies.": "Установите альтернативное описание для категории, например, чтобы перечислить все файлы cookie.", "Set an optional content width which doesn't affect the image if there is just one column.": "Установите необязательную ширину содержимого, которая не влияет на изображение, если имеется только один столбец.", "Set an optional content width which doesn't affect the image.": "Установите необязательную ширину содержимого, которая не влияет на изображение.", "Set how the module should align when the container is larger than its max-width.": "Установить выравнивание модуля, когда ширина контейнера больше, чем ширина модуля.", "Set how the widget should align when the container is larger than its max-width.": "Установите, как виджет должен выравниваться, когда контейнер больше его максимальной ширины.", "Set light or dark color if the navigation is below the slideshow.": "Установите светлый или темный цвет, если навигация находится под слайд-шоу.", "Set light or dark color if the slidenav is outside.": "Установите светлый или темный цвет, если slidenav находится за пределами слайд-шоу.", "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.": "Установите светлый или темный цветовой режим для текста, кнопок и элементов управления, если над ними отображается липкая прозрачная панель навигации.", "Set light or dark color mode for text, buttons and controls.": "Установить режим светлого или темного цвета для текста, кнопок и элементов управления.", "Set light or dark color mode.": "Установите светлый или темный цвет.", "Set percentage change in lightness (Between -100 and 100).": "Установите процентное изменение в lightness (от -100 до 100).", "Set percentage change in saturation (Between -100 and 100).": "Установите процентное изменение насыщенности (от -100 до 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Установите процентное изменение в размере гамма-коррекции (между 0.01 и 10.0, где 1.0 не применяет коррекцию).", "Set the alignment.": "Установите выравнивание.", "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.": "Установите ослабление анимации. Ноль переходит с равномерной скоростью, отрицательное значение начинается быстро, в то время как положительное значение начинается медленно.", "Set the autoplay interval in seconds.": "Установите длительность автопроигрывания слайда в секундах.", "Set the banner position.": "Установите позицию баннера.", "Set the banner width in pixels.": "Установите ширину баннера в пикселях.", "Set the blog width.": "Установите ширину блога.", "Set the bottom margin.": "Установите нижний отступ.", "Set the bottom padding.": "Установите нижний внутренний отступ.", "Set the breakpoint from which grid items will align side by side.": "Установите точку останова, начиная с которой элементы сетки будут выравниваться бок о бок.", "Set the breakpoint from which grid items will stack.": "Установить контрольную точку при которой ячейки сетки будут располагаться друг над другом.", "Set the breakpoint from which the sidebar and content will stack.": "Установить контрольную точку, при которой позиция Sidebar и контент будут располагаться друг над другом.", "Set the button size.": "Выбрать размер кнопки.", "Set the button style.": "Выбрать стиль кнопки.", "Set the cart quantity style.": "Установите стиль количества товаров в корзине.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Установите ширину столбца для каждой точки останова. Смешайте дробную ширину или комбинируйте фиксированную ширину со значением <i>Развернуть</i>. Если значение не выбрано, применяется ширина столбца следующего меньшего размера экрана. Комбинация ширины всегда должна занимать полную ширину.", "Set the content width.": "Установить ширину контента.", "Set the device width from which the list columns should apply.": "Установите ширину устройства, с которой должны применяться столбцы списка.", "Set the device width from which the nav columns should apply.": "Установите ширину устройства, с которой должны применяться навигационные столбцы.", "Set the device width from which the text columns should apply.": "Установите ширину устройства, с которой должны применяться текстовые столбцы.", "Set the dropbar width if it slides in from the left or right.": "Установите ширину Dropbar панели, если она скользит слева или справа.", "Set the dropdown width in pixels (e.g. 600).": "Установите ширину раскрывающегося списка в пикселях (например, 600).", "Set the duration for the Ken Burns effect in seconds.": "Установите продолжительность действия эффекта Ken Burns в секундах.", "Set the filter toggle style.": "Установите стиль переключателя фильтра.", "Set the height in pixels.": "Установить высоту в пикселях.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Установите горизонтальное положение нижнего края элемента в пикселях. Также можно ввести другую единицу измерения, например % или vw.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Установите горизонтальное положение левого края элемента в пикселях. Также можно ввести другую единицу измерения, например % или vw.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Установите горизонтальное положение правого края элемента в пикселях. Также можно ввести другую единицу измерения, например % или vw.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Установите горизонтальное положение верхнего края элемента в пикселях. Также можно ввести другую единицу измерения, например % или vw.", "Set the hover style for a linked title.": "Установите стиль наведения для связанного заголовка.", "Set the hover transition for a linked image.": "Эффект при наведении курсора на изображение.", "Set the hover transition for a linked image. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Установите Hover переход для связанного изображения. Если Hover изображение установлено, переход происходит между двумя изображениями. Если выбрано <i> None </i>, Hover изображение просто исчезает.", "Set the hue, e.g. <i>#ff0000</i>.": "Установите оттенок, например: <i>#ff0000</i>.", "Set the icon color.": "Установить цвет иконки.", "Set the icon width.": "Установите ширину значка.", "Set the initial background position, relative to the page layer.": "Установите исходное положение фона относительно слоя страницы.", "Set the initial background position, relative to the section layer.": "Установить начальное положение фона, по отношению к слою раздела.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Задать исходное разрешение, при котором отображается карта. Значение 0 означает минимальное и 18 максимальное увеличение.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in. Alternatively, set the viewport to contain the given markers.": "Установите начальное разрешение для отображения карты. 0 полностью уменьшено, а 18 находится в самом высоком разрешении.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Задайте ширину элемента для каждого режима размера экрана. <i>Inherit</i> относится к ширине элемента следующего меньшего размера экрана.", "Set the level for the section heading or give it no semantic meaning.": "Установите уровень для заголовка раздела или не придавайте ему смыслового значения.", "Set the link style.": "Установить стиль ссылки.", "Set the logical operator for how the %post_type% relate to the author. Choose between matching at least one term, all terms or none of the terms.": "Установите логический оператор для того, как %post_type% относится к автору. Выберите между соответствием хотя бы одному термину, всем терминам или ни одному из терминов.", "Set the logical operators for how the %post_type% relate to %taxonomy_list% and author. Choose between matching at least one term, all terms or none of the terms.": "Установите логические операторы для того, как %post_type% соотносится с %taxonomy_list% и автором. Выберите между соответствием хотя бы одному термину, всем терминам или ни одному из терминов.", "Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.": "Установите логические операторы для того, как статьи соотносятся с категорией, тегами и автором. Выберите между соответствием хотя бы одному термину, всем терминам или ни одному из терминов.", "Set the margin between the countdown and the label text.": "Установить интервал меду счетчиком обратного отсчета и текстом метки.", "Set the margin between the image and the content.": "Установите отступ между изображением и контентом.", "Set the margin between the overlay and the slideshow container.": "Установите внешний отступ между наложением и контейнером слайд-шоу.", "Set the maximum content width.": "Установить максимальную ширину контента.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Установить максимальную ширину контента. Примечание: Раздел может уже иметь максимальную ширину, которую вы не можете превысить.", "Set the maximum header width.": "Максимальная ширина заголовка.", "Set the maximum height.": "Установите максимальную высоту.", "Set the maximum width.": "Установите максимальную ширину.", "Set the number of columns for the cart cross-sell products.": "Установите количество столбцов для продуктов перекрестной продажи в корзине.", "Set the number of columns for the gallery thumbnails.": "Установите количество столбцов для миниатюр галереи.", "Set the number of grid columns for desktops and larger screens. On smaller viewports the columns will adapt automatically.": "Установите количество столбцов сетки для настольных компьютеров и больших экранов. На небольших видовых экранах столбцы будут автоматически адаптироваться.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Установите количество столбцов сетки для каждой точки останова. <i>Inherit</i> относится к количеству столбцов на экране следующего меньшего размера. <i>Auto</i> расширяет столбцы до ширины их элементов, заполняя строки соответствующим образом.", "Set the number of grid columns for the filters in a single dropdown.": "Установите количество столбцов сетки для фильтров на один выпадающий список.", "Set the number of grid columns.": "Установите количество столбцов сетки.", "Set the number of items after which the following items are pushed to the bottom.": "Установите количество элементов, после которого следующие элементы перемещаются вниз.", "Set the number of items after which the following items are pushed to the right.": "Установите количество элементов, после которого следующие элементы сдвигаются вправо.", "Set the number of items per page.": "Set the number of items per page.", "Set the number of list columns.": "Установите количество столбцов списка.", "Set the number of posts per page.": "Set the number of posts per page.", "Set the number of text columns.": "Установите количество текстовых столбцов.", "Set the offset from the top of the viewport where the column or its elements should become sticky, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height.": "Установите смещение от верхней части области просмотра, где столбец или его элементы должны стать липкими, например: <code>100px</code>, <code>50vh</code> или <code>50vh - 50%</code>. Процент относится к высоте столбца.", "Set the offset to specify which file is loaded.": "Установите смещение, чтобы указать, какой файл загружается.", "Set the order direction.": "Установите направление сортировки.", "Set the padding between sidebar and content.": "Выбрать внутренний отступ между позицией Sidebar и контентом.", "Set the padding between the card's edge and its content.": "Установите отступ между краем карты и ее содержимым.", "Set the padding between the overlay and its content.": "Установить внутренний отступ между наложением и его контентом.", "Set the padding.": "Задать внутренний отступ.", "Set the post width. The image and content can't expand beyond this width.": "Установите ширину столба. Изображение и содержимое не может выйти за пределы этой ширины.", "Set the product ordering style.": "Установите стиль сортировки продуктов.", "Set the product ordering.": "Установите порядок сортировки товара.", "Set the search input size.": "Установите размер ввода для поиска.", "Set the search input style.": "Установите стиль ввода для поиска.", "Set the separator between fields.": "Установите разделитель между полями.", "Set the separator between list items.": "Установите разделитель между элементами списка.", "Set the separator between tags.": "Установите разделитель между тегами.", "Set the separator between terms.": "Установите разделитель между терминами.", "Set the separator between user groups.": "Установите разделитель между группами пользователей.", "Set the separator between user roles.": "Установите разделитель между ролями пользователей.", "Set the size for the Gravatar image in pixels.": "Установите размер изображения Gravatar в пикселях.", "Set the size of the column gap between multiple buttons.": "Установите размер промежутка в колонке между несколькими кнопками.", "Set the size of the column gap between the numbers.": "Размер интервала столбца между числами.", "Set the size of the gap between between the filter navigation and the content.": "Размер промежутка между навигацией фильтра и содержимым.", "Set the size of the gap between the grid columns.": "Размер промежутка между столбцами сетки.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Установите количество столбцов перейдя в настройки <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\"> Блог / Избранные</a> в Joomla.", "Set the size of the gap between the grid rows.": "Размер промежутка между рядами сетки.", "Set the size of the gap between the image and the content.": "Размер промежутка между изображением и содержимым.", "Set the size of the gap between the navigation and the content.": "Выберите расстояние между навигацией и элементами контента.", "Set the size of the gap between the social icons.": "Установите размер промежутка между иконками социальных сетей.", "Set the size of the gap between the title and the content.": "Размер промежутка между заголовком и содержанием.", "Set the size of the gap if the grid items stack.": "Установите размер промежутка, если элементы сетки складываются в стопку.", "Set the size of the row gap between multiple buttons.": "Установите размер промежутка в строке между несколькими кнопками.", "Set the size of the row gap between the numbers.": "Размер интервала столбца между числами.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Установите пропорцию. Рекомендуется использовать такое же соотношение фонового изображения. Просто используйте его ширину и высоту, как <code>1600:900</code>.", "Set the starting point and limit the number of %post_type%.": "Установите начальную точку и ограничьте количество %post_type%.", "Set the starting point and limit the number of %post_types%.": "Установите начальную точку и ограничьте количество типов %post_types%.", "Set the starting point and limit the number of %taxonomies%.": "Установите начальную точку и ограничьте количество %taxonomies%.", "Set the starting point and limit the number of articles.": "Установите отправную точку и ограничьте количество статей.", "Set the starting point and limit the number of categories.": "Установите начальную точку и ограничьте количество категорий.", "Set the starting point and limit the number of files.": "Установите начальную точку и ограничьте количество файлов.", "Set the starting point and limit the number of items.": "Установите начальную точку и ограничьте количество элементов.", "Set the starting point and limit the number of tagged items.": "Установите начальную точку и ограничьте количество помеченных элементов.", "Set the starting point and limit the number of tags.": "Установите начальную точку и ограничьте количество тегов.", "Set the starting point and limit the number of users.": "Установите начальную точку и ограничьте количество пользователей.", "Set the starting point to specify which %post_type% is loaded.": "Установите начальную точку, чтобы указать, какой %post_type% загружается.", "Set the starting point to specify which article is loaded.": "Установите начальную точку, чтобы указать, какая статья загружается.", "Set the sticky top offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height. Set a bottom offset if the sticky content is larger than the viewport.": "Установите верхнее смещение для липкого элемента, например <code>100px</code>, <code>50vh</code> или <code>50vh - 50%</code>. Проценты рассчитываются от высоты колонки. Установите нижнее смещение, если липкий контент превышает высоту области просмотра.", "Set the top margin if the image is aligned between the title and the content.": "Установите верхнее поле, если изображение выровнено между заголовком и содержанием.", "Set the top margin.": "Установите верхний внешний отступ.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Установить верхнее поле. Обратите внимание, что поле будет применяться только в том случае, если блок контента следует сразу за другим блоком.", "Set the top padding.": "Установите верхний внутренний отступ.", "Set the type of tagged items.": "Установите тип отмеченных элементов.", "Set the velocity in pixels per millisecond.": "Задайте смену пикселей в миллисекунду.", "Set the vertical container padding to position the overlay.": "Установите вертикальное заполнение контейнера в позиции наложения.", "Set the vertical margin.": "Установить вертикальный внешний отступ.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Установить вертикальный внешний отступ. Примечание: верхний внешний отступ первого элемента и нижний внешний отступ последнего элемента всегда удаляются. Это определено в настройках сетки.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Установить вертикальный внешний отступ. Примечание: верхний отступ первой сетки и нижний отступ последней сетки всегда удаляются. Это определено в настройках раздела.", "Set the vertical padding.": "Установка вертикальных внутренних отступов.", "Set the video dimensions.": "Установить размер видео.", "Set the width and height for the content the link is linking to, i.e. image, video or iframe.": "Установите ширину и высоту для контента, на который ссылается ссылка, то есть изображение, видео или iframe.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Установите ширину и высоту для содержимого лайтбокса, т. е. изображения, видео или iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Установить ширину и высоту в пикселях (например, 600). Установка только одного значение сохраняет первоначальные пропорции. Изображение будет изменено и обрезано автоматически.", "Set the width and height in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Установите ширину и высоту в пикселях. Если ширина не задана, карта занимает всю доступную ширину. Если заданы и ширина, и высота, карта становится адаптивной, как изображение. Кроме того, ширину можно использовать как контрольную точку. Карта занимает всю ширину, но ниже контрольной точки она начнет уменьшаться, сохраняя пропорции.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Установить ширину и высоту в пикселях. Установка только одного значение сохраняет первоначальные пропорции. Изображение будет изменено и обрезано автоматически.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Задайте ширину в пикселях. Если ширина не задана, карта примет полную ширину и сохранит высоту. Или используйте ширину только для определения точки, с которой карта начинает уменьшаться с сохранением соотношения сторон.", "Set the width of the banner content.": "Установите ширину содержимого баннера.", "Set the width of the dropbar content.": "Установите ширину содержимого Dropbar панели.", "Set viewport height": "Установите высоту области просмотра", "Set whether filter items are forced into one line or can wrap into multiple lines.": "Установите, должны ли элементы фильтра принудительно размещаться в одну строку или могут переноситься на несколько строк.", "Set whether it's an ordered or unordered list.": "Установите, является ли это упорядоченным или неупорядоченным списком.", "Set whether navigation items are forced into one line or can wrap into multiple lines.": "Установите, должны ли элементы навигации принудительно размещаться в одну строку или могут переноситься на несколько строк.", "Set whether subnav items are forced into one line or can wrap into multiple lines.": "Установите, должны ли элементы подменю принудительно размещаться в одну строку или могут переноситься на несколько строк.", "Sets": "Наборы", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Установка только одного значения сохраняет оригинальные пропорции. Изображение будет изменено и обрезано автоматически и, где это возможно, изображения с высоким разрешением будут сформированы автоматически.", "Setting Menu Items": "Настройка пунктов меню", "Setting the Blog Content": "Настройка содержимого блога", "Setting the Blog Image": "Настройка изображения блога", "Setting the Blog Layout": "Настройка макета блога", "Setting the Blog Navigation": "Настройка навигации по блогу", "Setting the Dialog Layout": "Настройка макета диалогового окна", "Setting the Header Layout": "Настройка макета заголовка", "Setting the Main Section Height": "Настройка высоты основной секции", "Setting the Minimum Stability": "Установка минимальной стабильности", "Setting the Mobile Dialog Layout": "Настройка макета мобильного диалогового окна", "Setting the Mobile Header Layout": "Настройка макета мобильной шапки", "Setting the Mobile Navbar": "Настройка мобильного меню", "Setting the Mobile Search": "Настройка мобильного поиска", "Setting the Module Appearance Options": "Настройка параметров внешнего вида модуля", "Setting the Module Default Options": "Настройка параметров модуля по умолчанию", "Setting the Module Grid Options": "Настройка параметров сетки модулей", "Setting the Module List Options": "Настройка параметров списка модулей", "Setting the Module Menu Options": "Настройка параметров меню модуля", "Setting the Navbar": "Настройка навигационной панели", "Setting the Page Layout": "Настройка макета страницы", "Setting the Post Content": "Настройка содержимого публикации", "Setting the Post Image": "Настройка изображения публикации", "Setting the Post Layout": "Настройка макета публикации", "Setting the Post Navigation": "Настройка навигации по посту", "Setting the Sidebar Area": "Настройка области боковой панели", "Setting the Sidebar Position": "Установка положения боковой панели", "Setting the Source Order and Direction": "Установка порядка и направления источника", "Setting the Template Loading Priority": "Установка приоритета загрузки шаблона", "Setting the Template Status": "Установка статуса шаблона", "Setting the Top and Bottom Areas": "Настройка верхней и нижней областей", "Setting the Top and Bottom Positions": "Установка верхнего и нижнего положений", "Setting the Widget Appearance Options": "Настройка параметров внешнего вида виджета", "Setting the Widget Default Options": "Настройка параметров виджета по умолчанию", "Setting the Widget Grid Options": "Настройка параметров сетки виджетов", "Setting the Widget List Options": "Настройка параметров списка виджетов", "Setting the Widget Menu Options": "Настройка параметров меню виджета", "Setting the WooCommerce Layout Options": "Настройка параметров макета WooCommerce", "Settings": "Настройки", "Shop": "Магазин", "Shop and Search": "Магазин и поиск", "Short Description": "Краткое описание", "Show": "Показывать", "Show %taxonomy%": "Показывать %taxonomy%", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Показывать баннер для информирования посетителей вашего сайта о cookie-файлах, используемых вашим сайтом. Выберите между простым уведомлением о том, что файлы cookie загружены, и обязательным согласием перед загрузкой файлов cookie.", "Show a clear all filters button and display the active filters together with the filters in the dropdown or offcanvas.": "Показать кнопку Очистить Все Фильтры и отобразить активные фильтры вместе с фильтрами в раскрывающемся списке или offcanvas.", "Show a divider between grid columns.": "Показать разделитель между колонками текста.", "Show a divider between list columns.": "Показать разделитель между столбцами списка.", "Show a divider between text columns.": "Показать разделитель между столбцами текста.", "Show a general icon instead of a specific flag icon.": "Показывать общую иконку вместо конкретной иконки флага.", "Show a separator between the numbers.": "Покажите разделитель между числами.", "Show active filters": "Показать активные фильтры", "Show active language in language list": "Показывать активный язык в списке языков", "Show all submenu items": "Показывать все элементы подменю", "Show an input field or an icon to open the search in a dropdown, dropbar or modal. To show live search results, assign a template in the Templates panel.": "Показывать поле ввода или иконку для открытия поиска в выпадающем списке, выпадающей панели или модальном окне. Для показа результатов поиска в реальном времени назначьте шаблон в панели шаблонов.", "Show archive category title": "Показать архивный заголовок категории", "Show as disabled button": "Показывать как отключенную кнопку", "Show attribute filters": "Показывать фильтры атрибутов", "Show author": "Показать автора", "Show below": "Показать ниже", "Show below slider": "Показать ниже слайдера", "Show below slideshow": "Показать ниже слайд-шоу", "Show brands filter": "Показать фильтр по брендам", "Show button": "Показать кнопку", "Show categories": "Показать категории", "Show Category": "Показать категорию", "Show close button": "Показать кнопку закрытия", "Show close icon": "Показать иконку закрытия", "Show comment count": "Показать количество комментариев", "Show comments count": "Показать количество комментариев", "Show content": "Показать содержимое", "Show Content": "Показать контент", "Show controls": "Показать элементы управления", "Show controls always": "Всегда показывать элементы управления", "Show counter": "Показать счетчик", "Show current page": "Показывать текущую страницу", "Show date": "Показать дату", "Show dividers": "Показать разделители", "Show drop cap": "Показать буквицу", "Show element only if dynamic content is empty": "Показать элемент только если динамический контент пустой", "Show filter control for all items": "Показать элемент управления фильтра ВСЕ", "Show full language names": "Показывать полные названия языков", "Show headline": "Показать заголовок", "Show home link": "Показывать главную", "Show hover effect if linked.": "Показать эффект наведения, если присутствует ссылка.", "Show intro text": "Показать вводный текст", "Show Labels": "Показать метки", "Show language icon": "Показывать иконку языка", "Show link": "Показать ссылку", "Show lowest price": "Показать самую низкую цену", "Show map controls": "Показать элементы управления картой", "Show message": "Показать сообщение", "Show name fields": "Показывать поля имени", "Show navigation": "Показать навигацию", "Show on hover only": "Показывать при наведении", "Show optional dividers between nav or subnav items.": "Показать необязательные разделители между элементами навигации или поднавигации.", "Show or hide content fields without the need to delete the content itself.": "Показать или скрыть содержимое полей без удаления содержимого.", "Show or hide fields in the meta text.": "Показывать или скрывать поля в метатексте.", "Show or hide quantity.": "Показать или скрыть количество.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Показывать или скрывать элемент на этом устройстве с текущей шириной и больше. Если все элементы скрыты, столбцы, строки и разделы будут соответственно скрыты.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Показывать или скрывать домашнюю ссылку в качестве первого элемента, а также текущую страницу в качестве последнего элемента в навигации по хлебным крошкам.", "Show or hide the intro text.": "Показать или скрыть вводный текст.", "Show or hide the item depending on the content of a field.": "Показывать или скрывать элемент в зависимости от содержимого поля.", "Show or hide the reviews link.": "Показать или скрыть ссылку на отзывы.", "Show or hide title.": "Показать или скрыть заголовок.", "Show out of stock text as disabled button for simple products.": "Показывать текст \"Нет в наличии\" как отключенную кнопку для простых продуктов.", "Show parent icon": "Показать родительский значок", "Show points of interest": "Показать достопримечательности", "Show popup on load": "Показать всплывающее окно при загрузке страницы", "Show price filter": "Показать фильтр по цене", "Show product ordering": "Показать сортировку продуктов", "Show quantity": "Показать количество", "Show rating": "Показать рейтинг", "Show rating filter": "Показывать фильтр по рейтингу", "Show result count": "Показать количество результатов", "Show result ordering": "Показать сортировку результатов", "Show reviews link": "Показать ссылку на отзывы", "Show Separators": "Показать разделители", "Show space between links": "Показывать пробелы между ссылками", "Show Start/End links": "Показать ссылки Начала/Конец", "Show system fields for single posts. This option does not apply to the blog.": "Показать системные поля для одиночных публикаций. Эта опция не применяется к блогу.", "Show system fields for the blog. This option does not apply to single posts.": "Показать системные поля для блога. Эта опция не применяется к одиночным публикациям.", "Show tags": "Показать теги", "Show Tags": "Показать теги", "Show the active filter count in parenthesis or as superscript.": "Показывать количество активных фильтров в скобках или в виде верхнего индекса.", "Show the active language as parent item and list all languages as its submenu items in a dropdown. Alternatively, show all languages as sibling items.": "Показывать активный язык как родительский элемент и отображать все языки как пункты его подменю в выпадающем списке. Или же показывать все языки как элементы одного уровня.", "Show the content": "Показать контент", "Show the excerpt in the blog overview instead of the post text.": "Показывать выдержки из обзора блога вместо текста сообщения.", "Show the hover image": "Показать изображение при наведении", "Show the hover video": "Показать видео при наведении", "Show the image": "Показать изображение", "Show the link": "Показать ссылку", "Show the lowest price instead of the price range.": "Показывать самую низкую цену вместо ценового диапазона.", "Show the menu text next to the icon": "Показать текст Menu рядом со значком", "Show the meta text": "Показать мета текст", "Show the navigation label instead of title": "Показать метку навигации вместо названия", "Show the navigation thumbnail instead of the image": "Показать превьюшку навигации вместо изображения", "Show the overlay only on hover or when the slide becomes active.": "Показывать наложение только при наведении курсора или когда слайд становится активным.", "Show the sale price before or after the regular price.": "Покажите цену продажи до или после обычной цены.", "Show the subtitle": "Показать подзаголовки", "Show the title": "Показать заголовок", "Show the video": "Показать видео", "Show title": "Показать заголовок", "Show Title": "Показать название", "Show Variations": "Показать варианты", "Shrink": "Shrink", "Shrink thumbnails": "Уменьшить миниатюры", "Shrink thumbnails if the container is too small.": "Уменьшать миниатюры, если контейнер слишком мал.", "Sidebar": "Позиция Sidebar", "Single %post_type%": "Одниночная %post_type%", "Single Article": "Отдельная статья", "Single Contact": "Страница Контакта", "Single Post": "Одиночный пост", "Single Post Pages": "Отдельные Страницы Сообщений", "Site": "Сайт", "Site Title": "Название сайта", "Sixths": "6 колонок", "Sixths 1-5": "Sixths 1-5", "Sixths 5-1": "Sixths 5-1", "Size": "Размер", "Slide": "Slide", "Slide %s": "Слайд %s", "Slide all visible items at once": "Показать все слайды сразу", "Slide Bottom 100%": "Slide Bottom 100%", "Slide Bottom Medium": "Slide Bottom Medium", "Slide Bottom Small": "Slide Bottom Small", "Slide Left": "Slide Left", "Slide Left 100%": "Slide Left 100%", "Slide Left Medium": "Slide Left Medium", "Slide Left Small": "Slide Left Small", "Slide Right": "Слайд вправо", "Slide Right 100%": "Slide Right 100%", "Slide Right Medium": "Slide Right Medium", "Slide Right Small": "Slide Right Small", "Slide Top": "Slide Top", "Slide Top 100%": "Slide Top 100%", "Slide Top Medium": "Slide Top Medium", "Slide Top Small": "Slide Top Small", "Slidenav": "Slidenav", "Slider": "Слайдер", "Slideshow": "Слайд-шоу", "Slug": "Slug", "Small": "Small", "Small (Phone Landscape)": "Small (Phone Landscape)", "Small padding": "Small padding", "Smart Search": "Умный поиск", "Smart Search Item": "Элемент Интеллектуального Поиска", "Social": "Социальные Сети", "Social Icons": "Социальные иконки", "Social Icons Gap": "Разрыв в социальных иконках", "Social Icons Size": "Размер социальных иконок", "Soft-light": "Мягкий-легкий", "Source": "Источник", "Split Items": "Разделить элементы", "Split the dropdown into columns.": "Разделить раскрывающееся меню на колонки.", "Spread": "Расширить", "Square": "Square", "Stable": "Стабильный", "Stack columns on small devices or enable overflow scroll for the container.": "Колонки одна ниже другой или включить прокрутку при сохранении столбцов на своих местах на мобильных девайсах.", "Stacked": "Сложить в 1 колонку", "Stacked (Name fields as grid)": "Сложенный (поля имен в виде сетки)", "Stacked Center A": "Stacked Center A", "Stacked Center B": "Расположение по центру B", "Stacked Center C": "Stacked Center C", "Stacked Center Split A": "Stacked Center Split A", "Stacked Center Split B": "Stacked Center Split B", "Stacked Justify": "Сложенное выравнивание", "Stacked Left": "Сложены слева", "Start": "Старт", "Start Date": "Дата начала", "Start Level": "Начальный уровень", "Start today": "Начинается сегодня", "Start with all items closed": "Закрыть все пункты по умолчанию", "Starts with": "Начинается с", "State or County": "Регион или страна", "Static": "Static", "Statistics": "Статистические", "Status": "Статус", "Stick the column or its elements to the top of the viewport while scrolling down. They will stop being sticky when they reach the bottom of the containing column, row or section. Optionally, blend all elements with the page content.": "Привяжите колонку или ее элементы к верхней части области просмотра при прокрутке вниз. Они перестанут быть липкими, когда достигнут нижней части колонки, строки или раздела. В качестве опции можно смешать все элементы с содержимым страницы.", "Stick the navbar at the top of the viewport while scrolling or only when scrolling up.": "Прикрепите панель навигации в верхней части области просмотра при прокрутке или только при прокрутке вверх.", "Sticky": "Sticky", "Sticky Effect": "Sticky Effect", "Sticky on scroll up": "Sticky on scroll up", "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.": "Прикрепленный раздел будет перекрыт следующим разделом при прокрутке. Показать раздел за предыдущим разделом.", "Stretch the dropdown to the width of the navbar or the navbar container.": "Растяните выпадающий список до ширины панели навигации или контейнера панели навигации.", "Stretch the modal to the width of the navbar or the navbar container, or show a full modal window.": "Растянуть модальное окно до ширины Navbar или контейнера Navbar или покажите полноэкранное модальное окно.", "Stretch the panel to match the height of the grid cell.": "Растянуть панель в соответствии с высотой ячейки сетки.", "Striped": "В полоску", "Style": "Стиль", "styles": "стили", "Subgrid Breakpoint": "Subgrid Breakpoint", "Sublayout": "Подмакет", "Subnav": "Субнавигация", "Subnav (Nav)": "Субнавигатор (Nav)", "Subnav Divider (Nav)": "Разделитель субнавигации (Nav)", "Subnav Pill (Nav)": "Subnav Pill (Nav)", "Subtitle": "Подзаголовок", "Subtract height above": "Вычесть высоту выше", "Subtract height above row": "Вычесть высоту над строкой", "Subtract height above section": "Вычесть высоту над разделом", "Success": "Success", "Superscript": "Надстрочный знак", "Support": "Поддержка", "Support Center": "Центр поддержки", "SVG Color": "Цвет SVG", "Switch prices": "Переключатель цены", "Switcher": "Переключатель", "Syntax Highlighting": "Подсветка синтаксиса", "System Assets": "Системные активы", "System Check": "Проверка системы", "System Events": "Системные события", "Tab": "Tab", "Table": "Таблица", "Table Head": "Шапка Таблицы", "Tablet Landscape": "Планшет (Альбомной ориентации)", "Tabs": "Tabs", "Tag": "Тег", "Tag Item": "Элемент Тега", "Tag Order": "Порядок тега", "Tagged Items": "Элементы с тегами", "Tags": "Теги", "Tags are only loaded from the selected parent tag.": "Теги загружаются только из выбранного родительского тега.", "Tags Operator": "Оператор тегов", "Target": "Цель", "Taxonomy Archive": "Taxonomy Archive", "Teaser": "Тизер", "Telephone": "Телефон", "Template": "Шаблон", "Templates": "Шаблоны", "Term ID": "ID термина", "Term Order": "Порядок Term", "Tertiary": "Третичный", "Text": "Текст", "Text Alignment": "Выравнивание", "Text Alignment Breakpoint": "Девайс, с которого начинается выравнивание", "Text Alignment Fallback": "Альтернативное выравнивание", "Text Bold": "Text Bold", "Text Color": "Цвет текста", "Text Large": "Текст Large", "Text Lead": "Text Lead", "Text Meta": "Text Meta", "Text Muted": "Text Muted", "Text Small": "Text Small", "Text Style": "Стиль текста", "The <code><script></code> tag is mandatory.": "Тег <code><script></code> является обязательным.", "The Accordion Element": "Элемент Аккордеона", "The Alert Element": "Элемент Оповещения", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "Анимация запускается и останавливается в зависимости от положения элемента в окне просмотра. В качестве альтернативы используйте позицию родительского контейнера.", "The animation starts and stops depending on the section position in the viewport. Alternatively, for example for sticky sections, use the position of next section.": "Анимация запускается и останавливается в зависимости от положения секции в окне просмотра. В качестве альтернативы, например, для липких (sticky) разделов, используйте позицию следующего раздела.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.": "Анимация начинается, когда элемент попадает в область просмотра, и заканчивается, когда он покидает область просмотра. При необходимости установите начальное и конечное смещение, например. <code>100px</code>, <code>50vh</code> или <code>50vh + 50%</code>. Процент относится к высоте элемента.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "Анимация начинается, когда элемент входит в область просмотра, и заканчивается, когда он покидает область просмотра. При желании установите начальное и конечное смещение, например. <code>100px</code>, <code>50vh</code> или <code>50vh + 50%</code>. Процент относится к высоте цели.", "The animation starts when the row enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the row's height.": "Анимация начинается, когда строка попадает в область просмотра, и заканчивается, когда она покидает область просмотра. При необходимости установите начальное и конечное смещение, например. <code>100px</code>, <code>50vh</code> или <code>50vh + 50%</code>. Процент относится к высоте строки.", "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.": "Модуль Apache <code>mod_pagespeed</code> может привести к проблемам с отображением элемента карты в OpenStreetMap.", "The Area Element": "Элемент Области", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "Панель в верхней части сдвигает содержимое вниз, в то время как панель в нижней части закреплена над содержимым.", "The Breadcrumbs Element": "Элемент хлебных крошек", "The builder is not available on this page. It can only be used on pages, posts and categories.": "Конструктор недоступен на этой странице. Его можно использовать только на страницах, публикациях и категориях.", "The Button Element": "Элемент Кнопки", "The changes you made will be lost if you navigate away from this page.": "Внесенные изменения будут потеряны, если вы уйдете с этой страницы.", "The Code Element": "Элемент Кода", "The Countdown Element": "Элемент Обратного отсчета", "The current PHP version %version% is outdated. Upgrade the installation, preferably to the <a href=\"https://php.net\" target=\"_blank\">latest PHP version</a>.": "Текущая версия PHP %version% устарела. Обновите установку, желательно до <a href=\"https://php.net\" target=\"_blank\">последней версии PHP</a>.", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "Порядок по умолчанию будет соответствовать порядку, указанному в скобках, или вернется к порядку файлов по умолчанию, установленному системой.", "The Description List Element": "Элемент Списка Описания", "The Divider Element": "Элемент Разделитель", "The functional cookie group includes cookies that are often referred to as essential or necessary by site visitors.": "В функциональную группу файлов cookie входят те, которые посетители сайта часто называют обязательными или необходимыми.", "The Gallery Element": "Элемент Галереи", "The Grid Element": "Элемент Сетки", "The Headline Element": "Элемент Заголовка", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Высота может адаптироваться к высоте окна просмотра. <br><br>Примечание: При использовании одного из параметров окна просмотра убедитесь, что в настройках раздела не задана высота.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Высота адаптируется автоматически по отношению к основному контенту. Кроме того, высота может адаптироваться к высоте экрана девайса.<br><br> Примечание: убедитесь, что высота не задана в настройках раздела при использовании одного из параметров размера экрана девайса.", "The Icon Element": "Элемент Иконки", "The Image Element": "Элемент Изображения", "The List Element": "Элемент Списка", "The list shows pages and is limited to 50. Use the search to find a specific page or search for a post of any post type to give it an individual layout.": "В списке показано только 50 страниц. Используйте поиск, чтобы найти конкретную страницу, или найдите сообщение любого типа, чтобы сделать ему индивидуальный макет.", "The list shows uncategorized articles and is limited to 50. Use the search to find a specific article or an article from another category to give it an individual layout.": "В списке отображаются только 50 статей без категорий. Используйте поиск, чтобы найти конкретную статью или статью из другой категории, чтобы сделать индивидуальный макет.", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "Логотип размещается автоматически между элементами. При необходимости установите количество элементов, после которого элементы будут разделены.", "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.": "Текст логотипа будет использоваться, если изображение логотипа не было выбрано. Если изображение было выбрано, оно будет использоваться в качестве атрибута aria-label в ссылке.", "The Map Element": "Элемент Карты", "The marketing cookie group includes cookies that are often referred to as targeting or advertising by site visitors.": "В маркетинговую группу файлов cookie входят те, которые посетители сайта часто называют таргетированными или рекламными.", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "Эффект динамической сетки создает расположение элементов лишенное промежутков даже если элементы имеют разную высоту. ", "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.": "Минимальная стабильность обновлений темы. Стабильная версия рекомендуется для рабочих веб-сайтов, бета-версия предназначена только для тестирования новых функций и сообщений о проблемах.", "The Module Element": "Элемент Модуль", "The module maximum width.": "Максимальная ширина модуля.", "The Nav Element": "Навигационный элемент", "The Newsletter Element": "Элемент Рассылки", "The Overlay Element": "Элемент Наложения", "The Overlay Slider Element": "Элемент наложения со слайдером", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "Страница была обновлена %modifiedBy%. Отменить изменения и перезагрузить?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "Страница, которую вы в настоящее время редактируете, была обновлена %modified_by%. Сохранение внесенных изменений перезапишет предыдущие изменения. Вы все равно хотите сохранить изменения или отменить и перезагрузить страницу?", "The Pagination Element": "Элемент Разбиения на страницы", "The Panel Element": "Элемент Панели", "The Panel Slider Element": "Элемент Слайдера Панели", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels.": "Анимация параллакса перемещает отдельные столбцы сетки с разной скоростью при прокрутке. Определите вертикальное смещение параллакса в пикселях.", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.": "Анимация параллакса перемещает отдельные столбцы сетки с разной скоростью при прокрутке. Определите вертикальное смещение параллакса в пикселях. Альтернативно, перемещайте столбцы разной высоты до тех пор, пока они не совпадут с нижней частью.", "The Popover Element": "Всплывающий элемент", "The Position Element": "Элемент Положения", "The preferences cookie group includes cookies that are often referred to as functional by site visitors.": "В эту группу файлов cookie входят те, которые посетители сайта часто называют функциональными.", "The Quotation Element": "Элемент Цитаты", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "Плагин RSFirewall повреждает содержимое билдера. Отключите функцию <em>Конвертирование адресов электронной почты из обычного текста в изображения</em> в разделе <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.", "The Search Element": "Элемент Поиска", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "Плагин SEBLOD делает билдер недоступным. Отключите функцию <em>Скрыть значок редактирования</em> в <a href=\"index.php?option=com_config&view=com_com_cck\" целевой=\"_blank\">SEBLOD configuration</a>.", "The section at the top pushes the content down while the section at the bottom is sticky above the content.": "Верхняя секция отталкивает контент вниз, а нижняя секция закрепляется поверх контента.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport or to fill the available space in the column.<br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Слайд -шоу всегда занимает полную ширину, высота будет автоматически адаптироваться на основе определенного соотношения. В качестве альтернативы, высота может адаптироваться к высоте рабочей области или заполнять доступное пространства в столбце.<br><br>Примечание: Убедитесь, что в настройках Секции не установлена высота при использовании одного из Viewport вариантов.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Слайд-шоу всегда занимает полную ширину, и высота будет автоматически адаптироваться на основе определенного соотношения. Кроме того, высота может адаптироваться к высоте экрана девайса.<br><br> Примечание: убедитесь, что высота не задана в настройках раздела при использовании одного из параметров размера экрана девайса.", "The Slideshow Element": "Элемент Слайд-шоу", "The Social Element": "Социальный Элемент", "The statistics cookie group includes cookies that are often referred to as analytics or performance by site visitors.": "В статистическую группу файлов cookie входят те, которые посетители сайта часто называют аналитическими или для анализа производительности.", "The Sublayout Element": "Элемент подмакета", "The Subnav Element": "Элемент Подменю", "The Switcher Element": "Элемент Переключателя", "The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.": "Режим отладки системы генерирует слишком много данных сеанса, что может привести к непредвиденному поведению. Отключить режим отладки.", "The Table Element": "Элемент Таблицы", "The template is only assigned to %post_types_lower% with the selected terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "Шаблон будет назначен %post_types_lower% только с выбранными термами. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd>, чтобы выбрать несколько термов.", "The template is only assigned to %taxonomies% if the selected terms are set in the URL. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "Шаблон назначается %taxonomies% только в том случае, если выбранные термины установлены в URL-адресе. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd>, чтобы выбрать несколько терминов.", "The template is only assigned to articles from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "Шаблон назначается только для статей из выбранных категорий. Используйте клавишу<kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких категорий.", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Шаблон присваивается только статьям с выбранными тегами. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких тегов.", "The template is only assigned to categories if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Шаблон назначается категориям только в том случае, если выбранные теги установлены в пункте меню. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd>, чтобы выбрать несколько тегов.", "The template is only assigned to contacts from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "Шаблон назначается только для контактов из выбранных категорий. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких категорий.", "The template is only assigned to contacts with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Шаблон назначается только контактам с выбранными тегами. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd>, чтобы выбрать несколько тегов.", "The template is only assigned to the selected %taxonomies%. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple %taxonomies%.": "Шаблон назначается только для выбранных %taxonomies%. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких %taxonomies%.", "The template is only assigned to the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "Шаблон назначается только для выбранных категорий. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> для выбора нескольких категорий.", "The template is only assigned to the selected languages.": "Шаблон присваивается только выбранным языкам.", "The template is only assigned to the selected pages.": "Шаблон присваивается только выбранным страницам.", "The template is only assigned to the view if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Шаблон будет показан только в том случае, если выбранные теги установлены в пункте меню. Используйте клавишу <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd>, чтобы выбрать несколько тегов.", "The Text Element": "Элемент Текст", "The Totop Element": "Элемент Сверху", "The Video Element": "Видеоэлемент", "The Widget Element": "Элемент Виджета", "The widget maximum width.": "Максимальная ширина виджета.", "The width of the grid column that contains the module.": "Ширина колонки сетки, содержащей модуль.", "The width of the grid column that contains the widget.": "Ширина столбца сетки, содержащего виджет.", "The YOOtheme API key, which enables <span class=\"uk-text-nowrap\">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Ключ API YOOtheme, который позволяет обновлять в <span class=\"uk-text-nowrap\">1 клик</span> и получать доступ к библиотеке макетов, отсутствует. Создайте ключ API в Ваших <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Настройках аккаунта</a>.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "Папка шаблона YOOtheme Pro была переименована, что привело к нарушению работы. Переименуйте папку шаблона обратно в <code>yootheme</code>.", "Theme Settings": "Настройки темы", "Thirds": "3 Колонки", "Thirds 1-2": "Колонки 1-2", "Thirds 2-1": "Колонки 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Эта папка сохраняет изображения, которые Вы загрузили, используя макеты из библиотеки YOOtheme Pro. Она размещена внутри папки изображений Joomla.", "This is only used, if the thumbnail navigation is set.": "Это используется только тогда, когда установлена навигация превьюшками.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Этот макет включает медиафайлы, которые необходимо скачать в медиа библиотеку твоей вебстраницы. |||| Этот макет включает %smart_count% медиафайлов, которые необходимо скачать в медиа библиотеку твоей вебстраницы.", "This option doesn't apply unless a URL has been added to the item.": "Этот параметр не применяется, если URL-адрес был добавлен к элементу.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Этот параметр не применяется, если URL-адрес был добавлен к элементу. Будет линковано только содержимое элемента.", "This option is only used if the thumbnail navigation is set.": "Этот параметр используется только в том случае, если задана Навигация по превьюшкам.", "Thumbnail": "Миниатюра", "Thumbnail Inline SVG": "Интерактивная миниатюра SVG", "Thumbnail SVG Color": "Цвет миниатюры SVG", "Thumbnail Width/Height": "Ширина/Высота превьюшек", "Thumbnail Wrap": "Охват миниатюры", "Thumbnails": "Миниатюры", "Thumbnav": "Эскиз", "Thumbnav Inline SVG": "Цвет миниатюры SVG", "Thumbnav SVG Color": "Цвет миниатюры SVG", "Thumbnav Wrap": "Обертывание миниатюр", "Tile Checked": "Tile Checked", "Tile Default": "Tile Default", "Tile Muted": "Tile Muted", "Tile Primary": "Tile Primary", "Tile Secondary": "Tile Secondary", "Time Archive": "Временной Архив", "Title": "Заголовок", "title": "заголовок", "Title Case": "С Заглавными Буквами", "Title Decoration": "Оформление заголовка", "Title Margin": "Отступ Заголовка", "Title Parallax": "Параллакс Заголовка", "Title Reverse": "Обратный Порядок Слов", "Title Style": "Стиль заголовка", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Стили для заголовка отличаются размером шрифта, но также могут быть представлены с заранее определенным цветом, размером и шрифтом.", "Title Width": "Ширина Заголовка", "Title, Image, Meta, Content, Link": "Заголовок, Изображение, Мета, Контент, Ссылка", "Title, Meta, Content, Link, Image": "Заголовок, Мета, Контент, Ссылка, Изображение", "To left": "Налево", "To right": "Направо", "To Top": "Вверх", "Toggle Dropbar": "Toggle Dropbar", "Toggle Dropdown": "Toggle Dropdown", "Toggle Modal": "Toggle Modal", "Toolbar": "Позиция Toolbar", "Toolbar Left End": "Toolbar Left End", "Toolbar Left Start": "Toolbar Left Start", "Toolbar Right End": "Toolbar Right End", "Toolbar Right Start": "Toolbar Right Start", "Top": "Top", "Top and Bottom": "Top and Bottom", "Top Center": "По центру сверху", "Top Left": "Top Left", "Top Offset": "Top Offset", "Top Right": "Top Right", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "К краю карточки можно прикрепить выровненные изображения сверху, снизу, слева или справа. Если изображение выровнять влево или вправо, оно также будет расширено, чтобы охватить все пространство.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Верхний, левый или правый края выровненного изображения могут прикрепляться к краю карточки. Если изображение выравнивается влево или вправо, оно будет также распространяться и на все пространство.", "Total Views": "Количество просмотров", "Touch Icon": "Иконка для мобильных девайсов Apple", "Transform": "Преобразовать", "Transform Origin": "Преобразование происхождения", "Transform Text": "Преобразовать текст", "Transform the element into another element while keeping its content and settings. Unused content and settings are removed. Transforming into a preset only keeps the content but adopts all preset settings.": "Преобразуйте элемент в другой элемент, сохранив его содержимое и настройки. Неиспользуемый контент и настройки удаляются. Преобразование в предустановку сохраняет только содержимое, но принимает все предустановленные настройки.", "Transition": "Анимация наложения", "Translate X": "Translate X", "Translate Y": "Translate Y", "Transparent Background": "Прозрачный фон", "Transparent Header": "Прозрачность позиции Header", "Tuesday, Aug 06 (l, M d)": "Вторник, Авг 06 (l, M d)", "Type": "Тип", "ul": "ul", "Understanding Status Icons": "Понимание иконок состояния", "Understanding the Layout Structure": "Понимание структуры макета", "Unknown %type%": "Неизвестный %type%", "Unknown error.": "Невядомая памылка.", "Unpublished": "Неопубликовано", "Unpublished Date": "Дата снятия с публикации", "Updating YOOtheme Pro": "Обновление YOOtheme Pro", "Upload": "Загрузить", "Upload a background image.": "Загрузить фоновое изображение.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Загрузите любое фоновое изображение для страницы. Изображение будет фиксировано во время прокрутки.", "Upload Layout": "Загрузить Макет", "Upload Preset": "Загрузить Пресет", "Upload Style": "Загрузить Стиль", "Uppercase": "ВЕРХНИЙ РЕГИСТР", "Upsell Products": "Товары для увеличения продаж", "Url": "URL", "URL": "URL", "URL Protocol": "Протокол URL-адреса", "Use a numeric pagination or previous/next links to move between blog pages.": "Для перемещения между страницами блога используйте числовую нумерацию страниц или ссылки предыдущее/следующее.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Используйте необязательную минимальную высоту, чтобы изображения не становились меньше содержимого на небольших устройствах.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Используйте дополнительную минимальную высоту, чтобы слайдер не становился меньше, чем его содержимое на небольших устройствах.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Используйте дополнительную минимальную высоту, чтобы слайд-шоу не становилось меньше, чем его содержимое на небольших устройствах.", "Use as breakpoint only": "Использовать только в качестве точки останова", "Use double opt-in.": "Используй double opt-in.", "Use excerpt": "Использовать отрывок", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Используйте цвет фона в сочетании с режимами наложения, прозрачным изображением или для заполнения области, если изображение не покрывает всю страницу.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Используйте цвет фона в сочетании с режимами наложения, прозрачным изображением или для заполнения области, если изображение не покрывает весь раздел.", "Use the background color in combination with blend modes.": "Используйте цвет фона в сочетании с режимами наложения.", "Use width as breakpoint only": "Использовать ширину только как контрольную точку", "User": "Пользователь", "User Group": "Группа пользователей", "User Groups": "Группы пользователей", "Username": "Имя пользователя", "Users": "Пользователи", "Users are only loaded from the selected roles. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple roles.": "Пользователи загружаются только из выбранных ролей. Используйте <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> клавишу для выбора нескольких ролей.", "Users are only loaded from the selected user groups. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple user groups.": "Пользователи загружаются только из выбранных групп пользователей. Используйте <kbd>shift</kbd> или <kbd>ctrl/cmd</kbd> клавишу для выбора нескольких групп пользователей.", "Using Advanced Custom Fields": "Использование расширенных Настраиваемых Полей", "Using Content Fields": "Использование полей Содержимого", "Using Content Sources": "Использование источников Контента", "Using Custom Fields": "Использование Настраиваемых Полей", "Using Custom Post Type UI": "Использование пользовательского интерфейса типа записи (UI)", "Using Custom Post Types": "Использование Пользовательских Типов Записей", "Using Custom Sources": "Использование Пользовательских источников", "Using Dynamic Conditions": "Использование Динамических условий", "Using Dynamic Multiplication": "Использовать Dynamic Multiplication", "Using Elements": "Использование Элементов", "Using External Sources": "Использование внешних источников", "Using Images": "Использование Изображений", "Using Links": "Использование Ссылок", "Using Menu Location Options": "Использование опций расположения меню", "Using Menu Locations": "Использование Положений меню", "Using Menu Position Options": "Использование опций положения меню", "Using Menu Positions": "Использование Позиций меню", "Using Module Positions": "Использование Позиций модулей", "Using My Layouts": "Использование моих макетов", "Using My Presets": "Использование моих пресетов", "Using Page Sources": "Использование источников Страниц", "Using Parent Sources": "Использовать Parent Sources", "Using Powerful Posts Per Page": "Использование Мощных Сообщений На Странице", "Using Pro Layouts": "Использование Pro макетов", "Using Pro Presets": "Использование Pro пресетов", "Using Related Sources": "Использование Связанных Источников", "Using Site Sources": "Использование источников сайта", "Using the Before and After Field Options": "Использование параметров полей \"До\" и \"После\"", "Using the Builder Module": "Использование модуля Builder", "Using the Builder Widget": "Использование виджета Builder", "Using the Categories and Tags Field Options": "Использование параметров полей категорий и тегов", "Using the Content Field Options": "Использование параметров поля содержимого", "Using the Content Length Field Option": "Использование параметра поля Длина содержимого", "Using the Contextual Help": "Использование контекстной справки", "Using the Date Format Field Option": "Использование опции поля Формат даты", "Using the Device Preview Buttons": "Использование кнопок предварительного просмотра устройства", "Using the Dropdown Menu": "Использование выпадающего меню", "Using the Element Finder": "Использование средства поиска элементов", "Using the Footer Builder": "Использование конструктора нижнего колонтитула (Footer)", "Using the Media Manager": "Использование Медиа менеджера", "Using the Mega Menu Builder": "Использование билдера Мега меню", "Using the Menu Module": "Использование модуля меню", "Using the Menu Widget": "Использование виджета меню", "Using the Meta Field Options": "Использование параметров Мета-поля", "Using the Page Builder": "Использование конструктора страниц", "Using the Search and Replace Field Options": "Использование параметров поиска и замены полей", "Using the Sidebar": "Использование боковой панели", "Using the Tags Field Options": "Использование параметров поля Теги", "Using the Teaser Field Options": "Использование параметров поля тизера", "Using the Toolbar": "Использование панели инструментов", "Using the Unsplash Library": "Использование библиотеки Unsplash", "Using the WooCommerce Builder Elements": "Использование элементов конструктора WooCommerce", "Using the WooCommerce Page Builder": "Использование конструктора страниц WooCommerce", "Using the WooCommerce Pages Element": "Использование элемента Страницы WooCommerce", "Using the WooCommerce Product Stock Element": "Использование элемента товарного запаса WooCommerce", "Using the WooCommerce Products Element": "Использование элемента Продуктов WooCommerce", "Using the WooCommerce Related and Upsell Products Elements": "Использование элементов, связанных с WooCommerce и продуктами для повышения продаж", "Using the WooCommerce Style Customizer": "Использование средства настройки стиля WooCommerce", "Using the WooCommerce Template Builder": "Использование конструктора шаблонов WooCommerce", "Using Toolset": "Использование набора инструментов", "Using Widget Areas": "Использование областей виджетов", "Using WooCommerce Dynamic Content": "Использование динамического контента WooCommerce", "Using WordPress Category Order and Taxonomy Terms Order": "Использование сортировки категорий WordPress и сортировки терминов таксономии", "Using WordPress Popular Posts": "Использование популярных постов WordPress", "Using WordPress Post Types Order": "Сортировка использования типов сообщений WordPress", "Value": "Значение", "Values": "Значения", "Variable Product": "Переменный продукт", "Velocity": "Скорость смены слайдов", "Version %version%": "Версия %version%", "Vertical": "Вертикальный", "Vertical Alignment": "Вертикальное выравнивание", "Vertical navigation": "Вертикальная навигация", "Vertically align the elements in the column.": "Выровнять по вертикали элементы в столбце.", "Vertically center grid items.": "Центрировать по вертикали ячейки сетки.", "Vertically center table cells.": "Вертикально по центру ячеек таблицы.", "Vertically center the image.": "Вертикально выровнить изображение.", "Vertically center the navigation and content.": "Центрировать по вертикали навигацию и контент.", "Video": "Видео", "Video Autoplay": "Автовоспроизведение видео", "Video Title": "Заголовок видео", "Videos": "Видео", "View Photos": "Просмотр фотографий", "Viewport": "Viewport", "Viewport (Subtract Next Section)": "Viewport (за вычетом следующего раздела)", "Viewport Height": "Высота видимого экрана", "Visibility": "Видимость", "Visible Large (Desktop)": "Visible Large (Desktop)", "Visible Medium (Tablet Landscape)": "Visible Medium (Tablet Landscape)", "Visible on this page": "Видимые на этой странице", "Visible Small (Phone Landscape)": "Visible Small (Phone Landscape)", "Visible X-Large (Large Screens)": "Visible X-Large (Large Screens)", "Visual": "Визуально", "Votes": "Голос", "Warning": "Warning", "WebP image format isn't supported. Enable WebP support in the <a href=\"https://php.net/manual/en/image.installation.php\" target=\"_blank\">GD extension</a>.": "Формат изображения WebP не поддерживается. Попросите хостера включить поддержку WebP в <a href=\"https://php.net/manual/en/image.installation.php\" target=\"_blank\">библиотеке GD</a>.", "Website": "Веб-сайт", "Website Url": "URL веб-сайта", "Week": "Неделя", "Weeks": "Недели", "What's New": "Что нового?", "When using cover mode, you need to set the text color manually.": "При использовании режима COVER, вы должны вручную установить цвет текста.", "White": "Белый", "Whole": "Полностью", "Widget": "Виджет", "Widget Area": "Область виджета", "Widget Theme Settings": "Настройки виджетов темы", "Widgets": "Виджеты", "Widgets and Areas": "Виджеты и Области", "Width": "Ширина", "Width 100%": "Ширина 100%", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Ширина и высота будут перевернуты соответственно нахождению изображения в портретном или альбомном формате.", "Width/Height": "Ширина/Высота", "With Clear all button": "С кнопкой Очистить всё", "With mandatory consent": "С обязательным согласием", "Woo Notices": "Woo Уведомления", "Woo Pages": "Woo Страницы", "WooCommerce": "WooCommerce", "Working with Multiple Authors": "Работа с несколькими авторами", "WPML": "WPML", "Wrap": "Переносить", "Wrap with nav element": "Обернуть элементом навигации", "X": "X", "X-Large": "X-Large", "X-Large (Large Screens)": "X-Large (Large Screens)", "X-Small": "X-Small", "Y": "Y", "Year": "Год", "Year Archive": "Год Архива", "Years": "Годы", "YOOtheme": "YOOtheme", "YOOtheme API Key": "YOOtheme API ключ", "YOOtheme Help": "Справочный центр YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro полностью работоспособен и готов к старту.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro не работает. Все критические проблемы должны быть исправлены.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro работает, но есть проблемы, которые необходимо исправить, чтобы разблокировать функции и повысить производительность.", "Z Index": "Z Index", "Zoom": "Масштаб" }theme/languages/be_BY.json000064400001020476151666572140011516 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Выберыце -", "- Select Module -": "- Выберыце Модуль -", "- Select Position -": "- Выберыце Пазіцыю -", "- Select Widget -": "- Выберыце Віджэт -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" ужо існуе ў бібліятэцы, ён будзе перазапісаны пры захаванні.", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% Элемент", "%email% is already a list member.": "%email% ужо з'яўляецца ўдзельнікам спісу.", "%email% was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%email% быў назаўсёды выдалены і не можа быць паўторна імпартаваны. Каб вярнуцца ў спіс, кантакт павінен зноў падпісацца.", "%label% - %group%": "%label% - %group%", "%label% (%depth%)": "%label% (%depth%)", "%label% Location": "%label% Месцазнаходжанне", "%label% Position": "%label% Пазіцыя", "%name% already exists. Do you really want to rename?": "%name% ужо існуе. Вы сапраўды хочаце перайменаваць?", "%name% Copy": "%name% Копіяваць", "%name% Copy %index%": "%name% Копіяваць %index%", "%post_type% Archive": "%post_type% Архіў", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Калекцыя |||| %smart_count% Калекцыі", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Элемент |||| Элементаў: %smart_count%", "%smart_count% File |||| %smart_count% Files": "%smart_count% Файл |||| Файлаў: %smart_count%", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% выбраны файл |||| выбрана файлаў: %smart_count%", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Значок |||| Значкоў: %smart_count%", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Макет |||| Макетаў: %smart_count%", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% памылка загрузкі медыяфайла: |||| %smart_count% памылка загрузкі медыяфайлаў:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Фота |||| Фатаграфій: %smart_count%", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Прэсет |||| Прэсетаў: %smart_count%", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Стыль |||| Стыляў: %smart_count%", "%smart_count% User |||| %smart_count% Users": "%smart_count% Карыстальнік |||| %smart_count% Карыстальнікаў", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% загружаюцца толькі з выбранай бацькоўскай %taxonomy%.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% Прэсеты", "<code>json_encode()</code> must be available. Install and enable the <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> extension.": "<code>json_encode()</code> павінен быць даступны. Усталюйце і ўключыце <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> пашырэнне.", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 Слупок", "1 Column Content Width": "Шырыня змесціва 1 слупок", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Column Grid": "Сетка з 2 слупкоў", "2 Column Grid (Meta only)": "Сетка з 2 слупкоў (Толькі для Мета апісання)", "2 Columns": "2 Слупкі", "20%": "20%", "25%": "25%", "2X-Large": "2X-Large", "3 Columns": "3 Слупкі", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3rd Party Integration": "Інтэграцыя 3rd Party", "3X-Large": "3X-Large", "4 Columns": "4 Слупкі", "40%": "40%", "5 Columns": "5 Слупкоў", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 жні, 1999 (j M, Y)", "6 Columns": "6 Слупкоў", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рэкамендуецца большы ліміт памяці. Усталюйце <code>memory_limit</code> на 128M у <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">канфігурацыі PHP</a>.", "A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рэкамендуецца большы ліміт загрузкі. Усталюйце <code>post_max_size</code> на 8M у <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">канфігурацыі PHP</a>.", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Рэкамендуецца большы ліміт загрузкі. Усталюйце <code>upload_max_filesize</code> на 8M у <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">канфігурацыі PHP</a>.", "About": "Аб шаблоне", "Above Content": "Над змесцівам", "Above Title": "Над загалоўкам", "Absolute": "Абсалютны", "Accessed Date": "Дата доступу", "Accordion": "Акардыён", "Active": "Актыўны", "Active Filters": "Актыўныя фільтры", "Active Filters Count": "Колькасць актыўных фільтраў", "Active item": "Актыўны элемент", "Add": "Дадаць", "Add a colon": "Дадаць двукроп'е", "Add a comma-separated list of font weights to load, e.g. 300, 400, 600. Look up available variants at <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.": "Падайце спіс таўшчыняў шрыфтоў (<code>font weight</code>) для загрузкі, падзяляючы іх коскамі, напрыклад, 300,400,600. Даведайцеся пра магчымыя варыянты на <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>. Калі вы хочаце дадаць атрыбут <code>&display=swap</code>, і ў вас на старонцы загружаецца некалькі варыянтаў шрыфтоў, каб параметр спрацаваў, то дадаваць трэба для апошняга шрыфта - <code>400,500,700&display=swap</code>.", "Add a leader": "Дадаць кропкі", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Дадаць эфект паралакса або зафіксаваць фон ў вобласці прагляду падчас пракруткі.", "Add a parallax effect.": "Дадаць эфект паралакса.", "Add a stepless parallax animation based on the scroll position.": "Дадайце безступенчатую анімацыю паралакса, у залежнасці ад пазіцыі пракруткі.", "Add animation stop": "Дадаць кропку спынення анімацыі", "Add bottom margin": "Дадаць мяжу знізу (bottom margin)", "Add clipping offset": "Дадаць зрушэнне абрэзкі", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Тут можна дадаць свой CSS або LESS код стыляў для сайта. Даступныя ўсе LESS зменныя тэмы, напрыклад <code>сolor:@text-success-color!important;</code>, а таксама міксіны і пашырэнні класаў: <code>.greenBtn {&:extend(.uk-button, .uk-button-primary);} </code>. Тэг <code><style></code> не патрэбны.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Тут можна дадаць свой JavaScript у <code><head></code> дакумента. Тэг <code><script></code> не патрэбны, але калі абгарнуць код альбо выкарыстоўваць пустую пару тэгаў <code><script> </script></code>, то пасля (!) яго можна ўставіць любы мета-тэг і/або код лічыльніка, напрыклад: <code>< meta name=\"yandex-verification\" content=\"xxxxxxxxxxx\" / ></code>. Не выкарыстоўвайце <code>< !-- HTML каментар -- ></code> у пачатку блока.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Дадаць уласны JavaScript, які ўсталёўвае кукі. Ён будзе загружаны пасля таго, як будзе атрыманы дазвол. Тэг <code><script></code> не патрэбны.", "Add Element": "Дадаць элемент", "Add extra margin to the button.": "Дадаць знешні водступ да кнопкі.", "Add Folder": "Дадаць папку", "Add hover style": "Дадаць hover стыль (пры навядзенні)", "Add Item": "Дадаць элемент", "Add margin between": "Дадаць margin between", "Add Media": "Дадаць медыяфайл", "Add Menu Item": "Дадаць пункт меню", "Add Module": "Дадаць модуль", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Дадайце некалькі кропак, каб задаць пачатковы, прамежкавы і канчатковы колеры па ўсёй паслядоўнасці анімацыі. Па жаданні ўкажыце працэнт, каб размясціць кропкі ўздоўж паслядоўнасці анімацыі.", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Дадайце некалькі кропак, каб задаць пачатковую, прамежкавую і канчатковую празрыстасць па ўсёй паслядоўнасці анімацыі. Па жаданні ўкажыце працэнт, каб размясціць кропкі ўздоўж паслядоўнасці анімацыі.", "Add Row": "Дадаць радок", "Add Section": "Дадаць секцыю", "Add text after the content field.": "Дадаць тэкст пасля поля змесціва.", "Add text before the content field.": "Дадаць тэкст перад полем змесціва.", "Add to Cart": "Дадаць у Кошык", "Add to Cart Link": "Дадаць у Кошык Спасылка", "Add to Cart Text": "Дадаць у Кошык Тэкст", "Add top margin": "Дадаць top margin", "Adding a New Page": "Дадаць новую старонку", "Adding the Logo": "Даданне лагатыпа", "Adding the Search": "Дадаць Пошук", "Adding the Social Icons": "Дадаць сацыяльныя значкі", "Additional Information": "Дадатковая інфармацыя", "Address": "Адрас", "Advanced": "Яшчэ", "Advanced WooCommerce Integration": "Пашыраная інтэграцыя з WooCommerce", "After": "Пасля", "After 1 Item": "Пасля 1 элемента", "After 10 Items": "Пасля 10 элементаў", "After 2 Items": "Пасля 2 элементаў", "After 3 Items": "Пасля 3 элементаў", "After 4 Items": "Пасля 4 элементаў", "After 5 Items": "Пасля 5 элементаў", "After 6 Items": "Пасля 6 элементаў", "After 7 Items": "Пасля 7 элементаў", "After 8 Items": "Пасля 8 элементаў", "After 9 Items": "Пасля 9 элементаў", "After Display Content": "Пасля адлюстравання змесціва", "After Display Title": "Пасля адлюстравання загалоўка", "After Submit": "Пасля адпраўкі", "Alert": "Абвестка", "Alias": "Alias", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Выраўняць выпадальныя спісы (dropdowns) адносна пункта меню або навігацыйнай панэлі. Па жаданні паказаць іх у секцыі на ўсю шырыню пад назвай dropbar, адлюстраваць значок для выпадальных меню і дазволіць адкрываць тэкставыя элементы па кліку, а не пры навядзенні.", "Align image without padding": "Выраўняць выяву без адступаў (padding)", "Align the filter controls.": "Выраўняць элементы кіравання фільтрамі.", "Align the image to the left or right.": "Выраўняць выяву па левым або правым краі кантэнера.", "Align the image to the top or place it between the title and the content.": "Выраўнаваць выяву ўверсе або размясціць яе паміж загалоўкам і змесцівам.", "Align the image to the top, left, right or place it between the title and the content.": "Выраўнаваць выяву уверсе, злева, справа або размясціць яе паміж загалоўкам і змесцівам.", "Align the meta text.": "Выраўнаваць метатэкст.", "Align the navigation items.": "Выраўнаваць элементы навігацыі.", "Align the section content vertically, if the section height is larger than the content itself.": "Выраўнаваць змесціва секцыі па вертыкалі, калі вышыня секцыі перавышае само змесціва.", "Align the title and meta text as well as the continue reading button.": "Выраўнаваць пасярэдзіне загаловак і метатэкст, а таксама кнопку працягнуць чытанне.", "Align the title and meta text.": "Выраўнаваць загаловак і мета-тэкст.", "Align the title to the top or left in regards to the content.": "Выраўнаваць загаловак уверх або злева адносна змесціва.", "Align to filter bar": "Выраўноўванне па панэлі фільтра", "Align to navbar": "Выраўноўванне па панэлі навігацыі", "Alignment": "Выраўноўванне", "Alignment Breakpoint": "Кантрольная кнопка для выраўноўвання", "Alignment Fallback": "Alignment Fallback", "All %filter%": "Усе %filter%", "All %label%": "Усе %label%", "All backgrounds": "Усе фоны", "All colors": "Усе колеры", "All except first page": "Усе, акрамя першай старонкі", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Усе выявы ліцэнзаваны па <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, што азначае, што вы можаце капіраваць, мадыфікаваць, распаўсюджваць і выкарыстоўваць выявы бясплатна, у тым ліку для камерцыйных мэт, без папярэдняга дазволу.", "All Items": "Усе элементы", "All layouts": "Усе макеты", "All pages": "Усе старонкі", "All presets": "Усе прэсеты", "All styles": "Усе стылі", "All topics": "Усе тэмы", "All types": "Усе тыпы", "All websites": "Усе сайты", "All-time": "увесь час", "Allow mixed image orientations": "Дазволіць змешаныя арыентацыі выяваў", "Allow multiple open items": "Дазволіць адначасова адкрываць некалькі элементаў", "Alphabetical": "Па алфавіту", "Alphanumeric Ordering": "Літара-лічбавы парадак", "Alt": "Alt", "Alternate": "Альтэрнатыўны", "Always": "Заўсёды", "Animate background only": "Анімацыя толькі фона", "Animate items": "Анімацыя элементаў", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Аніміруйце ўласцівасці да пэўных значэнняў. Дадайце некалькі кропак, каб вызначыць пачатковыя, прамежкавыя і канчатковыя значэнні на працягу анімацыйнай паслядоўнасці для кожнай уласцівасці. Па жаданні, пазначце працэнт для размяшчэння кропак на паслядоўнасці анімацыі. Translate і scale могуць мець неабавязковыя адзінкі <code>%</code>, <code>vw</code> і <code>vh</code>.", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Аніміруйце ўласцівасці да пэўных значэнняў. Дадайце некалькі кропак, каб вызначыць пачатковыя, прамежкавыя і канчатковыя значэнні на працягу анімацыйнай паслядоўнасці. Па жаданні, пазначце працэнт для размяшчэння кропак на паслядоўнасці анімацыі. Translate можа мець неабавязковыя адзінкі <code>%</code>, <code>vw</code> і <code>vh</code>.", "Animate strokes": "Анімацыя ліній", "Animation": "Анімацыя", "Animation Delay": "Затрымка анімацыі", "Animations": "Анімацыі", "Any": "Любы", "Any Joomla module can be displayed in your custom layout.": "Любы модуль Joomla можна адлюстраваць у вашым карыстальніцкім макеце.", "Any WordPress widget can be displayed in your custom layout.": "Любы віджэт WordPress можна адлюстраваць у вашым карыстальніцкім макеце.", "API Key": "API ключ", "Apply a margin between the navigation and the slideshow container.": "Дадайце margin паміж навігацыяй і кантэйнерам слайд-шоў.", "Apply a margin between the overlay and the image container.": "Дадайце margin паміж накладкай і кантэйнерам выявы.", "Apply a margin between the slidenav and the slider container.": "Дадайце margin паміж навігацыяй слайдэра і кантэйнерам слайдэра.", "Apply a margin between the slidenav and the slideshow container.": "Дадайце margin паміж навігацыяй слайдэра і кантэйнерам слайд-шоў.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Дадайце анімацыю да элементаў, калі яны трапляюць у вобласць прагляду. Анімацыя слайдаў можа спрацоўваць з фіксаваным зрухам або пры 100% памеру элемента.", "Archive": "Архіў", "Are you sure?": "Вы ўпэўнены?", "ARIA Label": "ARIA Label", "Article": "Арты́кул", "Article Count": "Колькасць артыкулаў", "Article Order": "Парадак артыкулаў", "Articles": "Арты́кулы", "As notification only ": "Толькі як паведамленне ", "As superscript": "Як superscript", "Ascending": "Па ўзрастанні", "Assigning Modules to Specific Pages": "Прызначэнне модуляў да канкрэтных старонак", "Assigning Templates to Pages": "Прызначэнне шаблонаў да старонак", "Assigning Widgets to Specific Pages": "Прызначэнне віджэтаў да канкрэтных старонак", "Attach the image to the drop's edge.": "Прымацаваць выяву да краю.", "Attention! Page has been updated.": "Увага! Старонка была абноўлена.", "Attribute Filters": "Фільтры атрыбутаў", "Attribute Slug": "Атрыбут Slug", "Attribute Terms": "Attribute Terms", "Attribute Terms Operator": "Апэратар тэрмінаў атрыбутаў", "Attributes": "Атрыбуты", "Aug 6, 1999 (M j, Y)": "Жні 6, 1999 (M j, Y)", "August 06, 1999 (F d, Y)": "Жнівень 06, 1999 (F d, Y)", "Author": "Аўтар", "Author Archive": "Архіў аўтара", "Author Link": "Аўтар як спасылка", "Auto": "Auto", "Auto Grow": "Аўтаматычнае павелічэнне", "Auto-calculated": "Аўтаматычна разлічваецца", "Autoplay": "Аўтапрайграванне", "Autoplay Interval": "Інтэрвал аўтапрайгравання", "Avatar": "Аватар", "Average Daily Views": "У сярэднім праглядаў за дзень", "b": "b", "Back": "Назад", "Background": "Фон", "Background Color": "Колер фона", "Background Image": "Фонавая выява", "Badge": "Badge", "Bar": "Bar", "Base Style": "Базавы Стыль", "Basename": "Basename", "Before": "Перад", "Before Display Content": "Перад паказам змесціва", "Behavior": "Паводзіны", "Below Content": "Пад змесцівам", "Below Title": "Пад загалоўкам", "Beta": "Beta", "Between": "Паміж", "Blank": "Blank", "Blend": "Blend", "Blend Mode": "Рэжым накладання", "Blend the element with the page content.": "Мяняць колер элемента па колеру змесціва старонкі.", "Blend with image": "Мяняць колер з выявай", "Blend with page content": "Мяняць колер са змесцівам старонкі", "Block Alignment": "Выраўноўванне блока", "Block Alignment Breakpoint": "Breakpoint выраўноўвання блока", "Block Alignment Fallback": "Альтэрнатыўнае выраўноўванне блока", "Blog": "Блог", "Blur": "Размытасць", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrap патрабуецца толькі тады, калі загружаюцца файлы Joomla шаблона па змаўчанні, напрыклад, для рэдагавання фронтэнда Joomla. Загрузіце jQuery, каб пісаць карыстальніцкі код на базе бібліятэкі JavaScript jQuery.", "Border": "Border", "Bottom": "Bottom", "Bottom Center": "Bottom Center", "Bottom Left": "Bottom Left", "Bottom Offset": "Ніжні водступ", "Bottom Right": "Bottom Right", "Box Decoration": "Box Decoration", "Box Shadow": "Box Shadow", "Boxed": "Boxed", "Brackets": "Brackets", "Breadcrumb": "Навігатар па сайту (Breadcrumb)", "Breadcrumbs": "Breadcrumbs", "Breadcrumbs Home Text": "Breadcrumbs Home Text", "Break into multiple columns": "Разбіць на некалькі слупкоў", "Breakpoint": "Breakpoint", "Builder": "Канструктар", "Builder Module": "Builder модуль", "Builder Widget": "Builder віджэт", "Bullet": "Bullet", "Button": "Кнопка", "Button Danger": "Button Danger", "Button Default": "Button Default", "Button Margin": "Button Margin", "Button Primary": "Button Primary", "Button Secondary": "Button Secondary", "Button Size": "Button Size", "Button Text": "Button Text", "Buttons": "Кнопкі", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Па змаўчанні для супастаўлення даступныя палі звязаных крыніц з адзіночнымі элементамі. Абярыце звязаную крыніцу, якая ўтрымлівае некалькі элементаў, каб супаставіць палі.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "Па змаўчанні выявы загружаюцца з затрымкай (lazy loading). Уключыце загадзя загружаныя выявы (eager loading) для першапачатковай вобласці прагляду.", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "Па змаўчанні старонкамі лічацца толькі артыкулы без катэгорыі. Альтэрнатыўна можна вызначыць артыкулы з пэўнай катэгорыі як старонкі.", "By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.": "Па змаўчанні старонкамі лічацца толькі артыкулы без катэгорыі. Змяніце катэгорыю ў пашыраных наладах.", "Cache": "Кэш", "Campaign Monitor API Token": "Campaign Monitor API Token", "Cancel": "Скасаваць", "Caption": "Caption", "Card Default": "Card Default", "Card Hover": "Card Hover", "Card Primary": "Card Primary", "Card Secondary": "Card Secondary", "Cart": "Кошык", "Cart Cross-sells Columns": "Cart Cross-sells Columns", "Cart Quantity": "Колькасць у кошыку", "Cart Quantity Style": "Стыль колькасці тавараў у кошыку", "Categories": "Катэгорыі", "Categories are only loaded from the selected parent category.": "Categories are only loaded from the selected parent category.", "Categories Operator": "Categories Operator", "Category": "Катэгорыя", "Category Blog": "Блог катэгорыі", "Category Order": "Паслядоўнасць катэгорый", "Center": "Center", "Center Center": "Center Center", "Center columns": "Center columns", "Center grid columns horizontally and rows vertically.": "Center grid columns horizontally and rows vertically.", "Center horizontally": "Center horizontally", "Center Left": "Center Left", "Center Right": "Center Right", "Center rows": "Center rows", "Center the active slide": "Актыўны слайд па цэтру", "Center the content": "Center the content", "Center the module": "Center the module", "Center the title and meta text": "Выраўняць загаловак і мета-тэкст па цэнтру", "Center the title, meta text and button": "Выраўняць загаловак , мэта-тэкст і кнопку па цэнтру", "Center the widget": "Віджэт па цэнтру", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Center, left and right alignment may depend on a breakpoint and require a fallback.", "Changed Date": "Дата змены", "Changelog": "Гісторыя зменаў", "Checkout": "Checkout", "Checkout Page": "Checkout Page", "Child %taxonomies%": "Даччыныя %taxonomies%", "Child %type%": "Даччыныя %type%", "Child Categories": "Даччыныя Катэгорыі", "Child Menu Items": "Даччыныя Пункты меню", "Child Tags": "Даччыныя Тэгі", "Child Theme": "Даччыная тэма", "Choose a divider style.": "Выбраць стыль раздзяляльніка.", "Choose a map type.": "Выберыце тып карты.", "Choose between a navigation that shows filter controls separately in single dropdowns or a toggle button that shows all filters in a dropdown or an offcanvas dialog.": "Выберыце паміж навігацыяй, якая паказвае элементы кіравання фільтрамі асобна ў выпадаючых спісах, або кнопкай-пераключальнікам, якая паказвае ўсе фільтры ў выпадаючым спісе ці ў дыялогу offcanvas.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Выберыце паміж паралаксам у залежнасці ад пазіцыі пракруткі або анімацыяй, якая прымяняецца, калі слайд становіцца актыўным.", "Choose between a vertical or horizontal list.": "Выберыце паміж вертыкальным або гарызантальным спісам.", "Choose between an attached bar or a notification.": "Выберыце паміж прымацаванай панэллю ўнізе або апавяшчэннем.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Выберыце паміж кнопкамі «папярэдні/наступны» або лічбавай пагінацыяй. Лічбавая пагінацыя недаступная для асобных артыкулаў.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Выберыце паміж кнопкамі «папярэдні/наступны» або лічбавай пагінацыяй. Лічбавая пагінацыя недаступная для асобных допісаў.", "Choose Font": "Выберыце шрыфт", "Choose products of the current page or query custom products.": "Выберыце тавары з бягучай старонкі або задайце ўласны запыт тавараў.", "Choose the icon position.": "Выберыце размяшчэнне значка.", "Choose the page to which the template is assigned.": "Выберыце старонку, да якой прызначаны шаблон.", "Circle": "Circle", "City or Suburb": "Горад або прыгарад", "Class": "CSS клас", "Classes": "Класы", "Clear Cache": "Ачысціць кэш", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Ачысціце кэшаваныя выявы і рэсурсы. Выявы, якія патрабуюць змянення памеру, захоўваюцца ў папцы кэшу тэмы. Пасля паўторнай загрузкі выявы з той жа назвай неабходна ачысціць кэш.", "Click": "Пстрыкніце", "Click on the pencil to pick an icon from the icon library.": "Пстрыкніце на алоўку, каб выбраць значок з бібліятэкі значкоў.", "Close": "Закрыць", "Close Icon": "Значок закрыцця", "Close on background click": "Закрыць падчас кліку па фону", "Cluster Icon (< 10 Markers)": "Значок кластэра (< 10 маркераў)", "Cluster Icon (< 100 Markers)": "Значок кластэра (< 100 маркераў)", "Cluster Icon (100+ Markers)": "Значок кластэра (100+ маркераў)", "Clustering": "Кластэрызацыя", "Code": "Код", "Collapsing Layouts": "Згортванне макетаў", "Collections": "Калекцыі", "Color": "Колер", "Color navbar parts separately": "Колер частак панэлі навігацыі асобна", "Color-burn": "Зацямненне колеру", "Color-dodge": "Асвятленне асновы", "Column": "Слупок", "Column 1": "Слупок 1", "Column 2": "Слупок 2", "Column 3": "Слупок 3", "Column 4": "Слупок 4", "Column 5": "Слупок 5", "Column 6": "Слупок 6", "Column Gap": "Інтэрвал паміж слупкамі", "Column Height": "Вышыня слупка", "Column Layout": "Налады слупкоў макету", "Column Parallax": "Паралакс слупка", "Column within Row": "Слупок у радку", "Column within Section": "Слупок у секцыі", "Columns": "Слупкі", "Columns Breakpoint": "Breakpoint слупкоў", "Comment Count": "Колькасць каментароў", "Comments": "Каментары", "Components": "Кампаненты", "Condition": "Умова", "Consent Button Style": "Стыль кнопкі згоды", "Consent Button Text": "Тэкст кнопкі згоды", "Contact": "Кантакт", "Contacts Position": "Пазіцыя для кантактаў", "Contain": "Утрымлівае", "Container": "Container", "Container Default": "Container Default", "Container Large": "Container Large", "Container Padding": "Container Padding", "Container Small": "Container Small", "Container Width": "Container Width", "Container X-Large": "Container X-Large", "Contains": "Contains", "Contains %element% Element": "Contains %element% Element", "Contains %title%": "Contains %title%", "Content": "Змесціва", "content": "змесціва", "Content Alignment": "Content Alignment", "Content Length": "Даўжыня змесціва", "Content Margin": "Водступ змесціва", "Content Parallax": "Паралакс змесціва", "Content Type Title": "Загаловак тыпу змесціва", "Content Width": "Шырыня змесціва", "Controls": "Элементы кіравання", "Convert": "Канвертаваць", "Convert to title-case": "Convert to title-case", "Cookie Banner": "Банэр Cookie", "Cookie Scripts": "Скрыпты Cookie", "Coordinates": "Coordinates", "Copy": "Капіяваць", "Countdown": "Countdown", "Country": "Краіна", "Cover": "Cover", "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.": "Стварыце макет у стылі плітак без прагалаў, калі элементы сеткі маюць розную вышыню. Размяшчайце элементы ў слупках з найбольшай вольнай прасторай або ў натуральным парадку. Пры жаданні выкарыстоўвайце паралакс-анімацыю для перамяшчэння слупкоў падчас пракруткі да тае пары, пакуль яны не выраўняюцца ўнізе.", "Create a general layout for the live search results. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Стварыце агульны макет для вынікаў жывога пошуку - пошуку ў рэальным часе. Пачніце з новага макета і выберыце з калекцыі гатовых элементаў або праглядзіце бібліятэку макетаў і абярыце адзін з гатовых варыянтаў.", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Стварыце агульны макет для гэтага тыпу старонак. Пачніце з новага макета і выберыце з калекцыі гатовых элементаў або праглядзіце бібліятэку макетаў і абярыце адзін з гатовых варыянтаў.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Стварыце макет для ніжняга калантытула (footer) ўсіх старонак. Пачніце з новага макета і выберыце з калекцыі гатовых элементаў або праглядзіце бібліятэку макетаў і абярыце адзін з гатовых варыянтаў.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Стварыце макет для выпадаючага спісу пункта меню. Пачніце з новага макета і выберыце з калекцыі гатовых элементаў або праглядзіце бібліятэку макетаў і абярыце адзін з гатовых варыянтаў.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Стварыце макет для гэтага модуля і апублікуйце яго ў верхняй або ніжняй пазіцыі. Пачніце з новага макета і выберыце з калекцыі гатовых элементаў або праглядзіце бібліятэку макетаў і абярыце адзін з гатовых варыянтаў.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Стварыце макет для гэтага віджэта і апублікуйце яго ў верхняй або ніжняй пазіцыі. Пачніце з новага макета і выберыце з калекцыі гатовых элементаў або праглядзіце бібліятэку макетаў і абярыце адзін з гатовых варыянтаў.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Стварыце макет. Пачніце з новага макета і выберыце з калекцыі гатовых элементаў або праглядзіце бібліятэку макетаў і абярыце адзін з гатовых варыянтаў.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Стварыце індывідуальны макет для бягучай старонкі. Пачніце з новага макета і выберыце з калекцыі гатовых элементаў або праглядзіце бібліятэку макетаў і абярыце адзін з гатовых варыянтаў.", "Create site-wide templates for pages and load their content dynamically into the layout.": "Стварыце глабальныя шаблоны для старонак і дынамічна загружайце іх змесціва ў макет.", "Created": "Створана", "Created Date": "Дата стварэння", "Creating a New Module": "Стварыць новы модуль", "Creating a New Widget": "Стварыць новага віджэта", "Creating Accordion Menus": "Стварыць меню тыпу Акардыён", "Creating Advanced Module Layouts": "Стварэнне пашыраных макетаў Модуляў", "Creating Advanced Widget Layouts": "Стварэнне пашыраных макетаў для Віджэтаў", "Creating Advanced WooCommerce Layouts": "Стварэнне пашыраных макетаў WooCommerce", "Creating Individual Post Layout": "Стварэнне індывідуальнага макета паведамлення", "Creating Individual Post Layouts": "Стварэнне індывідуальных макетаў паведамленняў", "Creating Menu Dividers": "Стварыць раздзяляльнік меню", "Creating Menu Heading": "Стварэнне загалоўка меню", "Creating Menu Headings": "Стварэнне загалоўкаў меню", "Creating Menu Text Items": "Стварэнне тэкставых элементаў меню", "Creating Navbar Text Items": "Стварэнне тэкставых элементаў навігацыйнай панэлі", "Creating Parallax Effects": "Стварэнне эфектаў паралакса", "Creating Sticky Parallax Effects": "Стварэнне прыліпальных (sticky) эфектаў паралакса", "Critical Issues": "Critical Issues", "Critical issues detected.": "Выяўлены крытычныя праблемы.", "Cross-Sell Products": "Cross-Sell Products", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "Curated by <a href>%user%</a>", "Current Layout": "Бягучы макет", "Current Style": "Бягучы стыль", "Current User": "Бягучы карыстальнік", "Custom": "Карыстальніцкі", "Custom %post_type%": "Карыстальніцкі %post_type%", "Custom %post_types%": "Карыстальніцкія %post_types%", "Custom %taxonomies%": "Карыстальніцкія %taxonomies%", "Custom %taxonomy%": "Карыстальніцкі %taxonomy%", "Custom Article": "Карыстальніцкі Артыкул", "Custom Articles": "Карыстальніцкія Артыкулы", "Custom Categories": "Карыстальніцкія Катэгорыі", "Custom Category": "Карыстальніцкая Катэгорыя", "Custom Code": "Карыстальніцкі код", "Custom Fields": "Карыстальніцкія Палі", "Custom Menu Item": "Карыстальніцкі Пункт меню", "Custom Menu Items": "Карыстальніцкія Пункты меню", "Custom Product category": "Custom Product category", "Custom Product tag": "Custom Product tag", "Custom Query": "Карыстальніцкі Запыт", "Custom Tag": "Карыстальніцкі Тэг", "Custom Tags": "Карыстальніцкія Тэгі", "Custom User": "Custom User", "Custom Users": "Custom Users", "Customization": "Customization", "Customization Name": "Customization Name", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.", "Customizer": "Customizer", "Danger": "Danger", "Dark": "Dark", "Dark Text": "Dark Text", "Darken": "Darken", "Date": "Дата", "Date Archive": "Date Archive", "Date Format": "Фармат даты", "Day Archive": "Day Archive", "Decimal": "Decimal", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "Decoration": "Decoration", "Default": "Па-змаўчанні", "Default Link": "Спасылка па-змаўчанні", "Define a background style or an image of a column and set the vertical alignment for its content.": "Define a background style or an image of a column and set the vertical alignment for its content.", "Define a custom background color or a color parallax animation instead of using a predefined style.": "Вызначце ўласны колер фону альбо анімацыю колеравага паралакса замест выкарыстання перадустаноўленага стылю.", "Define a name to easily identify the template.": "Вызначце імя для лёгкай ідэнтыфікацыі шаблону.", "Define a name to easily identify this element inside the builder.": "Define a name to easily identify this element inside the builder.", "Define a navigation menu or give it no semantic meaning.": "Вызначце меню навігацыі або не надавайце яму семантычнага значэння.", "Define a unique identifier for the element.": "Define a unique identifier for the element.", "Define an alignment fallback for device widths below the breakpoint.": "Define an alignment fallback for device widths below the breakpoint.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Define one or more class names for the element. Separate multiple classes with spaces.", "Define the alignment in case the container exceeds the element max-width.": "Define the alignment in case the container exceeds the element max-width.", "Define the alignment of the last table column.": "Define the alignment of the last table column.", "Define the device width from which the alignment will apply.": "Define the device width from which the alignment will apply.", "Define the device width from which the dropnav will be shown.": "Define the device width from which the dropnav will be shown.", "Define the device width from which the max-width will apply.": "Define the device width from which the max-width will apply.", "Define the filter fallback mode for device widths below the breakpoint.": "Define the filter fallback mode for device widths below the breakpoint.", "Define the image quality in percent for generated JPG images and when converting JPEG and PNG to next-gen image formats.<br><br>Mind that setting the image quality too high will have a negative impact on page loading times.<br><br>Press the Clear Cache button in the advanced settings after changing the image quality.": "Вызначце якасць выявы ў працэнтах для ствараемых JPG-файлаў і пры пераўтварэнні JPEG і PNG у фарматы новага пакалення.<br><br>Майце на ўвазе, што занадта высокая якасць можа негатыўна паўплываць на хуткасць загрузкі старонкі.<br><br>Пасля змены якасці выявы націсніце кнопку «Ачысціць кэш» у пашыраных наладах.", "Define the layout of the form.": "Define the layout of the form.", "Define the layout of the title, meta and content.": "Define the layout of the title, meta and content.", "Define the order of the table cells.": "Define the order of the table cells.", "Define the origin of the element's transformation when scaling or rotating the element.": "Define the origin of the element's transformation when scaling or rotating the element.", "Define the padding between items.": "Define the padding between items.", "Define the padding between table rows.": "Define the padding between table rows.", "Define the purpose and structure of the content or give it no semantic meaning.": "Define the purpose and structure of the content or give it no semantic meaning.", "Define the title position within the section.": "Define the title position within the section.", "Define the width of the content cell.": "Define the width of the content cell.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.", "Define the width of the meta cell.": "Define the width of the meta cell.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.", "Define the width of the title cell.": "Define the width of the title cell.", "Define the width of the title within the grid.": "Define the width of the title within the grid.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Define whether the width of the slider items is fixed or automatically expanded by its content widths.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Define whether thumbnails wrap into multiple lines if the container is too small.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Delay the element animations in milliseconds, e.g. <code>200</code>.", "Delayed Fade": "Затрыманае знікненне", "Delete": "Выдаліць", "Delete animation stop": "Delete animation stop", "Descending": "Па змяншэнні", "description": "апісанне", "Description": "Апісанне", "Description List": "Description List", "Desktop": "Настольны кампутар", "Determine how the image or video will blend with the background color.": "Determine how the image or video will blend with the background color.", "Determine how the image will blend with the background color.": "Determine how the image will blend with the background color.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Вызначце, ці будзе выява адпавядаць памерам старонкі — абразаючы яе або запаўняючы пустыя вобласці колерам фону.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Вызначце, ці будзе выява адпавядаць памерам секцыі — абразаючы яе або запаўняючы пустыя вобласці колерам фону.", "Dialog": "Dialog", "Dialog Dropbar": "Dialog Dropbar", "Dialog End": "Dialog End", "Dialog Layout": "Dialog Layout", "Dialog Logo (Optional)": "Dialog Logo (Optional)", "Dialog Modal": "Dialog Modal", "Dialog Offcanvas": "Dialog Offcanvas", "Dialog Push Items": "Dialog Push Items", "Dialog Start": "Dialog Start", "Dialog Toggle": "Пераключэнне дыялогу", "Difference": "Difference", "Direction": "Direction", "Dirname": "Назва каталогу", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.", "Disable element": "Адключыць элемент", "Disable Emojis": "Адключыць Эмодзі", "Disable infinite scrolling": "Адключыць бясконцую пракрутку", "Disable item": "Адключыць элемент", "Disable row": "Disable row", "Disable section": "Адключыць секцыю (section)", "Disable template": "Адключыць шаблон", "Disable the <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filter for the_content and the_excerpt and disable conversion of Emoji characters to images.": "Адключыць фільтр <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> для the_content і the_excerpt і адключыце пераўтварэнне Эмодзі сімвалаў у выявы.", "Disable the element and publish it later.": "Адключыць элемент і апублікаваць яго пазней.", "Disable the item and publish it later.": "Адключыць элемент і апублікаваць яго пазней.", "Disable the row and publish it later.": "Адключыць радок і апублікаваць яго пазней.", "Disable the section and publish it later.": "Адключыць секцыю і апублікаваць яе пазней.", "Disable the template and publish it later.": "Адключыць шаблон і апублікаваць яго пазней.", "Disable wpautop": "Выключыць wpautop", "Disabled": "Адключаны", "Disc": "Disc", "Discard": "Скасаваць", "Display": "Паказаць", "Display a divider between sidebar and content": "Паказаць раздзяляльнік паміж пазіцыяй Sidebar і змесцівам", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Паказаць меню, выбраўшы пазіцыю, у якой яно павінна з'явіцца. Напрыклад, апублікуйце галоўнае меню ў пазіцыі Navbar і альтэрнатыўнае меню ў пазіцыі Mobile.", "Display a search icon on the left or right of the input field. The icon on the right can be clicked to submit the search.": "Display a search icon on the left or right of the input field. The icon on the right can be clicked to submit the search.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Паказаць значок пошуку злева ці справа. Значок справа можна націснуць, каб адпраўляць пошук.", "Display header outside the container": "Паказаць шапку па-за межамі кантэйнера", "Display icons as buttons": "Паказаць значкі як кнопкі", "Display large icon": "Паказаць вялікі значок", "Display on the right": "Паказаць справа", "Display outside": "Паказаць звонку", "Display overlay on hover": "Паказаць накладку (overlay) пры навядзенні", "Display products based on visibility.": "Паказаць прадукты ў залежнасці ад бачнасці.", "Display the breadcrumb navigation": "Паказаць навігацыю сайта (breadcrumb)", "Display the cart quantity in brackets or as a badge.": "Паказаць колькасць у кошыку ў дужках або як значок.", "Display the content inside the overlay, as the lightbox caption or both.": "Паказаць змесціва ўнутры накладкі, як подпіс у lightbox ці абодва варыянты.", "Display the content inside the panel, as the lightbox caption or both.": "Паказаць змесціва ўнутры панэлі, як подпіс у lightbox ці абодва варыянты.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Паказаць поле excerpt, калі яно мае змесціва, інакш паказаць асноўнае змесціва. Каб выкарыстоўваць поле excerpt, стварыце карыстальніцкае поле з назвай excerpt.", "Display the first letter of the paragraph as a large initial.": "Паказаць першую літару абзаца як вялікую (ініцыял).", "Display the image only on this device width and larger.": "Паказаць выяву толькі на прыладзе выбранага памеру ці большага.", "Display the image or video only on this device width and larger.": "Паказаць малюнак ці відэа толькі на прыладзе выбранага памеру ці большага.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Паказаць элементы кіравання картай і вызначыць, ці можа карта змяняць маштаб і быць перацягнута з выкарыстаннем мышы або дотыкам пальцаў.", "Display the meta text in a sentence or a horizontal list.": "Паказаць мета-тэкст у сказе або ў гарызантальным спісе.", "Display the module only from this device width and larger.": "Паказаць модуль толькі на прыладзе выбранага памеру ці большага.", "Display the navigation only on this device width and larger.": "Паказаць навігацыю толькі на прыладзе выбранага памеру ці большага.", "Display the parallax effect only on this device width and larger.": "Паказаць эфект паралакса толькі на прыладзе выбранага памеру ці большага.", "Display the popover on click or hover.": "Паказваць усплываючае акно па кліку ці пры навядзенні курсора.", "Display the section title on the defined screen size and larger.": "Display the section title on the defined screen size and larger.", "Display the short or long description.": "Display the short or long description.", "Display the slidenav only on this device width and larger.": "Display the slidenav only on this device width and larger.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Паказаць кіраванне слайдамі толькі на прыладзе выбранага памеру ці большага па-па кантэйнерам слайдаў. Інакш паказаць яе ўнутры кантэйнера.", "Display the title in the same line as the content.": "Паказаць загаловак у тым жа радку, што і змесціва.", "Display the title inside the overlay, as the lightbox caption or both.": "Паказаць загаловак унутры накладкі, як lightbox і загаловак, ці абодва варыянты.", "Display the title inside the panel, as the lightbox caption or both.": "Паказаць загаловак унутры панэлі, як lightbox і загаловак, ці абодва варыянты.", "Display the widget only from this device width and larger.": "Паказаць віджэт толькі на прыладзе выбранага памеру ці большага.", "Display together with filters": "Display together with filters", "Displaying the Breadcrumbs": "Адлюстраванне хлебных крошак (Breadcrumbs)", "Displaying the Excerpt": "Адлюстраванне Excerpt", "Displaying the Mobile Header": "Адлюстраванне загалоўка мабільнай прылады", "div": "div", "Divider": "Падзеляльнік", "Do you really want to replace the current layout?": "Вы сапраўды хочаце замяніць бягучы макет?", "Do you really want to replace the current style?": "Вы напэўна хочаце замяніць бягучы стыль?", "Documentation": "Дакументацыя", "Does not contain": "Не ўтрымлівае", "Does not end with": "Не сканчаецца на", "Does not start with": "Не пачынаецца з", "Don't collapse column": "Don't collapse column", "Don't collapse the column if dynamically loaded content is empty.": "Don't collapse the column if dynamically loaded content is empty.", "Don't expand": "Don't expand", "Don't match (NOR)": "Don't match (NOR)", "Don't match %taxonomies% (NOR)": "Не супадаюць %taxonomies% (NOR)", "Don't match author (NOR)": "Не супадае аўтар (NOR)", "Don't match category (NOR)": "Не адпавядае катэгорыя (NOR)", "Don't match tags (NOR)": "Не адпавядае тэгам (NOR)", "Don't wrap into multiple lines": "Don't wrap into multiple lines", "Dotnav": "Dotnav", "Double opt-in": "Double opt-in", "Download": "Спампаваць", "Download All": "Спампаваць Усё", "Download Less": "Спампаваць Less", "Draft new page": "Захаваць чарнавік новай старонкі", "Drop Cap": "Вялікая першая літара Drop Cap", "Dropbar Animation": "Анімацыя Dropbar панэлі", "Dropbar Center": "Dropbar па цэнтры", "Dropbar Content Width": "Dropbar Content Width", "Dropbar Padding": "Унутраны водступ (Padding) Dropbar", "Dropbar Top": "Dropbar Top", "Dropbar Width": "Dropbar Width", "Dropdown": "Dropdown", "Dropdown Alignment": "Dropdown Alignment", "Dropdown Columns": "Dropdown Columns", "Dropdown Nav Style": "Dropdown Nav Стыль", "Dropdown Padding": "Dropdown Padding", "Dropdown Stretch": "Dropdown Stretch", "Dropdown Width": "Dropdown Width", "Dropnav": "Dropnav", "Dynamic": "Дынамічны", "Dynamic Condition": "Дынамічныя ўмовы", "Dynamic Content": "Дынамічнае змесціва", "Dynamic Content (Parent Source)": "Дынамічнае змесціва (Parent Source)", "Dynamic Content Field Options": "Дынамічнае змесціва Field Options", "Dynamic Multiplication": "Dynamic Multiplication", "Dynamic Multiplication (Parent Source)": "Dynamic Multiplication (Parent Source)", "Easing": "Easing", "Edit": "Рэдагаваць", "Edit %title% %index%": "Рэдагаваць %title% %index%", "Edit Article": "Рэдагаваць артыкул", "Edit Dropbar": "Рэдагаваць Dropbar", "Edit Dropdown": "Рэдагаваць Dropdown", "Edit Image Quality": "Рэдагаваць якасць відарысаў", "Edit Item": "Рэдагаваць элемент", "Edit Items": "Рэдагаваць элементы", "Edit Layout": "Рэдагаваць макет", "Edit Menu Item": "Рэдагаваць пункт меню", "Edit Modal": "Рэдагаваць Modal", "Edit Module": "Рэдагаваць модуль", "Edit Offcanvas": "Рэдагаваць Offcanvas", "Edit Parallax": "Рэдагаваць Parallax", "Edit Settings": "Рэдагаваць налады", "Edit Template": "Рэдагаваць шаблон", "Element": "Элемент", "Element Library": "Бібліятэка элементаў", "Element presets uploaded successfully.": "Element presets uploaded successfully.", "elements": "элементы", "Elements within Column": "Elements within Column", "Email": "Электронная пошта", "Emphasis": "Emphasis", "Empty Dynamic Content": "Пустое дынамічнае змесціва", "Enable a navigation to move to the previous or next post.": "Уключыць навігацыю для пераходу да папярэдняга або наступнага допісу.", "Enable active state": "Уключыць актыўны стан", "Enable autoplay": "Уключыць аўтапрайграванне", "Enable autoplay or play a muted inline video without controls.": "Уключыць аўтапрайграванне або прайграваць убудаванае відэа без гуку і элементаў кіравання.", "Enable click mode": "Уключыць рэжым кліку", "Enable click mode on text items": "Уключыць рэжым кліку для тэкставых элементаў", "Enable drop cap": "Уключыць буйную першую літару", "Enable dropbar": "Уключыць выплыўную панэль (dropbar)", "Enable filter navigation": "Уключыць навігацыю з фільтрамі", "Enable lightbox gallery": "Уключыць галерэю Lightbox", "Enable map dragging": "Уключыць перацягванне карты", "Enable map zooming": "Уключыць маштабаванне карты", "Enable marker clustering": "Уключыць групаванне маркераў", "Enable masonry effect": "Уключыць эфект Masonry", "Enable parallax effect": "Уключыць паралакс-эфект", "Enable the pagination.": "Уключыць пагінацыю.", "End": "Канец", "Ends with": "Заканчваецца на", "Enter %size% preview mode": "Увайсці ў рэжым папярэдняга прагляду %size%", "Enter a comma-separated list of tags to manually order the filter navigation.": "Увядзіце спіс тэгаў, раздзяляючы коскамі, каб упарадкаваць навігацыю фільтраў уручную.", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Увядзіце спіс тэгаў, раздзяляючы коскамі, напрыклад, <code>blue, white, black</code>.", "Enter a date for the countdown to expire.": "Увядзіце дату заканчэння адліку часу.", "Enter a decorative section title which is aligned to the section edge.": "Увядзіце дэкаратыўны загаловак секцыі, выраўнаваны па краі секцыі.", "Enter a descriptive text label to make it accessible if the link has no visible text.": "Увядзіце апісальны тэкставы ярлык, каб зрабіць спасылку даступнай, калі ў яе няма бачнага тэксту.", "Enter a subtitle that will be displayed beneath the nav item.": "Увядзіце падзагаловак, які будзе адлюстроўвацца пад элементам навігацыі.", "Enter a table header text for the content column.": "Увядзіце тэкст загалоўка табліцы для калонкі змесціва.", "Enter a table header text for the image column.": "Увядзіце тэкст загалоўка табліцы для калонкі выявы.", "Enter a table header text for the link column.": "Увядзіце тэкст загалоўка табліцы для калонкі спасылак.", "Enter a table header text for the meta column.": "Увядзіце тэкст загалоўка табліцы для калонкі мета-даных.", "Enter a table header text for the title column.": "Увядзіце тэкст загалоўка табліцы для калонкі загалоўка.", "Enter a width for the popover in pixels.": "Увядзіце шырыню popover у пікселях.", "Enter an optional footer text.": "Увядзіце неабавязковы тэкст для пазіцыі footer.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Увядзіце неабавязковы тэкст для атрыбута title спасылкі, які будзе паказвацца пры навядзенні.", "Enter labels for the countdown time.": "Увядзіце пазнакі для зваротнага адліку часу.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Увядзіце спасылку на ваш сацыяльны профіль. Адпаведны <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit значок брэнда</a> будзе адлюстраваны аўтаматычна, калі ён даступны. Падтрымліваюцца таксама спасылкі на электронную пошту і тэлефонныя нумары, напрыклад, mailto:info@example.com або tel:+375292863705.", "Enter or pick a link, an image or a video file.": "Увядзіце або абярыце спасылку, выяву або відэафайл.", "Enter the API key in Settings > External Services.": "Увядзіце ключ API у раздзеле Налады > Знешнія сэрвісы.", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Увядзіце ключ API, каб уключыць абнаўленні ў 1 клік для YOOtheme Pro і атрымаць доступ да бібліятэкі макетаў, а таксама да бібліятэкі выяваў Unsplash. Вы можаце стварыць ключ API для гэтага сайта ў вашых <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Наладах акаўнта</a>.", "Enter the author name.": "Увядзіце імя аўтара.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Увядзіце паведамленне аб згодзе на захаванне cookie-файлаў. Тэкст па змаўчанні выкарыстоўваецца толькі як прыклад. Калі ласка, прыстасуйце яго ў адпаведнасці з законамі вашай краіны аб cookie-файлах.", "Enter the horizontal position of the marker in percent.": "Увядзіце гарызантальную пазіцыю маркера ў працэнтах.", "Enter the image alt attribute.": "Увядзіце атрыбут alt для выявы.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Увядзіце радок замены, які можа ўключаць спасылкі. Калі пакінуць пустым, супадзенні ў пошуку будуць выдалены.", "Enter the text for the button.": "Увядзіце тэкст для кнопкі.", "Enter the text for the home link.": "Увядзіце тэкст для спасылкі на галоўную старонку.", "Enter the text for the link.": "Увядзіце тэкст для спасылкі.", "Enter the vertical position of the marker in percent.": "Увядзіце вертыкальную пазіцыю маркера ў працэнтах.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Увядзіце ваш ID <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> каб уключыць адсочванне. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">Ананімізацыя IP </a> можа зменшыць дакладнасць адсочвання.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Увядзіце сюды ваш API key ад <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a>, каб выкарыстоўваць Google Maps замест OpenStreetMap. Гэта таксама дае дадатковыя магчымасці для стварэння колернага стылю вашай карты.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Увядзіце сюды ваш ключ API сэрвісу <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a>, каб выкарыстоўваць яго з элементам Newsletter.", "Enter your <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> API key for using it with the Newsletter element.": "Увядзіце сюды ваш ключ API сэрвісу <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a>, каб выкарыстоўваць яго з элементам Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Увядзіце свой CSS код. Для гэтага элемента будуць аўтаматычна дадавацца наступныя селектары: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя селектары: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя выбаршчыкі: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя выбаршчыкі: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя выбаршчыкі: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя выбаршчыкі: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя выбаршчыкі: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Увядзіце ўласны CSS. Для гэтага элемента аўтаматычна дададуцца наступныя выбаршчыкі: <code>.el-section</code>", "Error": "Памылка", "Error 404": "Памылка 404", "Error creating folder.": "Памылка стварэння папкі.", "Error deleting item.": "Памылка падчас выдалення элемента.", "Error renaming item.": "Памылка падчас змены назвы элемента.", "Error: %error%": "Памылка: %error%", "Events": "Падзеі", "Excerpt": "Excerpt", "Exclude child %taxonomies%": "Выключыць даччыныя %taxonomies%", "Exclude child categories": "Выключыць даччыныя катэгорыі", "Exclude child tags": "Выключыць даччыныя тэгі", "Exclude cross sell products": "Exclude cross sell products", "Exclude upsell products": "Exclude upsell products", "Exclusion": "Выключэнне", "Expand": "Expand", "Expand columns equally to always fill remaining space within the row, center them or align them to the left.": "Expand columns equally to always fill remaining space within the row, center them or align them to the left.", "Expand content": "Разгарнуць змесціва", "Expand Content": "Разгарнуць Змесціва", "Expand height": "Разгарнуць вышыню", "Expand image": "Разгарнуць вобласць выявы", "Expand input width": "Разгарнуць шырыню input", "Expand One Side": "Разгарнуць адзін бок", "Expand Page to Viewport": "Разгарнуць старонку да вобласці прагляду (Viewport)", "Expand the height of the content to fill the available space in the overlay and push the link to the bottom.": "Expand the height of the content to fill the available space in the overlay and push the link to the bottom.", "Expand the height of the content to fill the available space in the panel and push the link to the bottom.": "Expand the height of the content to fill the available space in the panel and push the link to the bottom.", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The image will cover the element's content box.": "Expand the height of the element to fill the available space in the column or force the height to one viewport. The image will cover the element's content box.", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The video will cover the element's content box.": "Expand the height of the element to fill the available space in the column or force the height to one viewport. The video will cover the element's content box.", "Expand the height of the element to fill the available space in the column.": "Expand the height of the element to fill the available space in the column.", "Expand the height of the image to fill the available space in the item.": "Expand the height of the image to fill the available space in the item.", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.", "Expand width to table cell": "Expand width to table cell", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.", "Export Settings": "Экспарт наладаў", "Extend all content items to the same height.": "Зрабіць усе элементы змесціва аднолькавай вышыні.", "Extension": "Extension", "External": "Знешні", "External Services": "Знешнія сэрвісы", "Extra Margin": "Extra Margin", "Fade": "Fade", "Failed loading map": "Памылка загрузкі мапы", "Fall back to content": "Вярнуцца да змесціва", "Fallback": "Fallback", "Favicon": "Favicon", "Favicon PNG": "Favicon PNG", "Favicon SVG": "Favicon SVG", "Fax": "Факс", "Featured": "Абраныя", "Featured Articles": "Абраныя артыкулы", "Featured Articles Order": "Парадак абраных артыкулаў", "Featured Image": "Абраная выява", "Fields": "Палі", "Fifths": "5 слупкоў (1-1-1-2)", "Fifths 1-1-1-2": "5 слупкоў 1-1-1-2", "Fifths 1-1-3": "5 слупкоў 1-1-3", "Fifths 1-3-1": "5 слупкоў 1-3-1", "Fifths 1-4": "5 слупкоў 1-4", "Fifths 2-1-1-1": "5 слупкоў 2-1-1-1", "Fifths 2-3": "5 слупкоў 2-3", "Fifths 3-1-1": "5 слупкоў 3-1-1", "Fifths 3-2": "5 слупкоў 3-2", "Fifths 4-1": "5 слупкоў 4-1", "File": "Файл", "Files": "Files", "Fill the available column space": "Fill the available column space", "Filter": "Filter", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Фільтруйце артыкулы па аўтарах. Выкарыстоўвайце клавішу <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі аўтараў. Вызначце лагічны аператар, каб супаставіць або не супаставіць выбраных аўтараў.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Фільтруйце артыкулы па катэгорыях. Выкарыстоўвайце клавішу <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі катэгорый. Вызначце лагічны аператар, каб супаставіць або не супаставіць выбраныя катэгорыі.", "Filter articles by featured status. Load all articles, featured articles only, or articles which are not featured.": "Фільтруйце артыкулы па статусе абранага. Загрузіце ўсе артыкулы, толькі абраныя або толькі неабраныя артыкулы.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Фільтруйце артыкулы па цэтліках. Выкарыстоўвайце клавішу <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі цэтлікаў. Вызначце лагічны аператар: адпавядаць хаця б аднаму цэтліку, ніводнаму або ўсім цэтлікам.", "Filter by Authors": "Фільтр па аўтарах", "Filter by Categories": "Фільтр па Катэгорыях", "Filter by Featured Articles": "Фільтр па Абраных Артыкулах", "Filter by Post Types": "Фільтр па Post Types", "Filter by Root Categories": "Фільтр па Root Categories", "Filter by Tags": "Фільтр па Тэгах", "Filter by Term": "Filter by Term", "Filter by Terms": "Filter by Terms", "Filter items visually by the selected post types.": "Візуальна фільтруйце элементы паводле выбраных тыпаў запісаў.", "Filter items visually by the selected root categories.": "Візуальна фільтруйце элементы паводле выбраных каранёвых катэгорый.", "Filter products by attribute using the attribute slug.": "Filter products by attribute using the attribute slug.", "Filter products by categories using a comma-separated list of category slugs.": "Filter products by categories using a comma-separated list of category slugs.", "Filter products by tags using a comma-separated list of tag slugs.": "Фільтруйце прадукты па цэтліках, выкарыстоўваючы спіс іх слэгаў, падзеленых коскамі.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "Фільтруйце прадукты па значэннях выбранага атрыбута, выкарыстоўваючы спіс іх слэгаў, падзеленых коскамі.", "Filter products using a comma-separated list of IDs.": "Фільтруйце прадукты, выкарыстоўваючы спіс ідэнтыфікатараў ID, падзеленых коскамі.", "Filter products using a comma-separated list of SKUs.": "Filter products using a comma-separated list of SKUs.", "Filter Title": "Загаловак фільтра", "Filter Toggle": "Пераключальнік фільтра", "Filters": "Фільтры", "Finite": "Finite", "First Item": "First Item", "First name": "Імя", "First page": "Першая старонка", "Fit markers": "Fit markers", "Fix the background with regard to the viewport.": "Fix the background with regard to the viewport.", "Fixed": "Fixed", "Fixed-Inner": "Fixed-Inner", "Fixed-Left": "Fixed-Left", "Fixed-Outer": "Fixed-Outer", "Fixed-Right": "Fixed-Right", "Floating Shadow": "Floating Shadow", "Focal Point": "Фокусная кропка", "Folder created.": "Папка створаная.", "Folder Name": "Назва папкі", "Font Family": "Font Family", "Footer": "Пазіцыя Footer", "Footer Builder": "Канструктар для пазіцыі Footer", "Force a light or dark color for text, buttons and controls on the image or video background.": "Force a light or dark color for text, buttons and controls on the image or video background.", "Force left alignment": "Force left alignment", "Force viewport height": "Force viewport height", "Form": "Form", "Format": "Format", "Full": "Full", "Full Article Image": "Выява для ўсяго артыкула", "Full Article Image Alt": "Alt-атрыбут для Выявы ўсяго артыкула", "Full Article Image Caption": "Full Article Image Caption", "Full Width": "Поўная шырыня", "Full width button": "Кнопка на ўсю шырыню", "g": "g", "Gallery": "Галерэя", "Gallery Thumbnail Columns": "Слупкі мініяцюр галерэі", "Gamma": "Gamma", "Gap": "Зазор (Gap)", "General": "Агульныя", "GitHub (Light)": "GitHub (Light)", "Global": "Global", "Gradient": "Градыент", "Greater than": "Больш, чым", "Grid": "Сетка", "Grid Breakpoint": "Grid Breakpoint", "Grid Column Gap": "Grid Column Gap", "Grid Row Gap": "Grid Row Gap", "Grid Width": "Grid Width", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Аб’ядноўвайце элементы ў наборы. Колькасць элементаў у наборы залежыць ад зададзенай шырыні элемента, напрыклад, <i>33%</i> азначае, што ў кожным наборы будзе 3 элементы.", "Grouped Products": "Аб’яднаныя прадукты", "Guest User": "Карыстальнік без уваходу (Госць)", "h": "h", "H1": "H1", "h1": "h1", "H2": "H2", "h2": "h2", "H3": "H3", "h3": "h3", "H4": "H4", "h4": "h4", "h5": "h5", "H5": "H5", "H6": "H6", "h6": "h6", "Halves": "2 слупкі (напалову)", "Hard-light": "Hard-light", "Header": "Пазіцыя Header", "Header End": "Header End", "Header Start": "Header Start", "Header Text Color": "Колер тэксту Header", "Heading": "Heading", "Heading 2X-Large": "Heading 2X-Large", "Heading 3X-Large": "Heading 3X-Large", "Heading H1": "Загаловак H1", "Heading H2": "Загаловак H2", "Heading H3": "Загаловак H3", "Heading H4": "Загаловак H4", "Heading H5": "Загаловак H5", "Heading H6": "Загаловак H6", "Heading Large": "Heading Large", "Heading Link": "Heading Link", "Heading Medium": "Heading Medium", "Heading Small": "Heading Small", "Heading X-Large": "Heading X-Large", "Headline": "Headline", "Headline styles differ in font size and font family.": "Стылі загалоўкаў могуць адрознівацца па памеру, а таксама мець уласны колер, памер і шрыфт.", "Height": "Вышыня", "Height 100%": "Вышыня 100%", "Help": "Дапамога", "hex / keyword": "hex / keyword", "Hidden": "Hidden", "Hidden Large (Desktop)": "Hidden Large (Desktop)", "Hidden Medium (Tablet Landscape)": "Hidden Medium (Tablet Landscape)", "Hidden Small (Phone Landscape)": "Hidden Small (Phone Landscape)", "Hidden X-Large (Large Screens)": "Hidden X-Large (Large Screens)", "Hide": "Hide", "Hide and Adjust the Sidebar": "Схаваць і наладзіць бакавую панэль", "Hide marker": "Схаваць маркер", "Hide Sidebar": "Схаваць бакавую панэль", "Hide Term List": "Схаваць спіс тэрмінаў", "Hide title": "Схаваць загаловак", "Highlight the hovered row": "Highlight the hovered row", "Highlight the item as the active item.": "Highlight the item as the active item.", "Hits": "Hits", "Home": "Home", "Home Text": "Home Text", "Horizontal": "Horizontal", "Horizontal Center": "Horizontal Center", "Horizontal Center Logo": "Horizontal Center Logo", "Horizontal Justify": "Horizontal Justify", "Horizontal Left": "Horizontal Left", "Horizontal Right": "Horizontal Right", "Host": "Host", "Hover": "Hover", "Hover Box Shadow": "Hover Box Shadow", "Hover Image": "Hover Image", "Hover Style": "Hover Style", "Hover Transition": "Hover Transition", "Hover Video": "Hover Video", "hr": "hr", "Html": "Html", "HTML Element": "HTML Элемент", "Hue": "Адценне", "Hyphen": "Hyphen", "Hyphen and Underscore": "Hyphen and Underscore", "Icon": "Значок", "Icon Alignment": "Выраўноўванне значка", "Icon Button": "Кнопка са значком", "Icon Color": "Колер значка", "Icon Link": "Спасылка са значком", "Icon Width": "Шырыня значка", "Iconnav": "Iconnav", "icons": "значкі", "ID": "ID", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Калі секцыя або радок маюць максімальную шырыню, і адзін бок расцягваецца ўлева ці ўправа, водступ па-змаўчанні можна выдаліць з таго боку што расцягваецца.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Калі некалькі шаблонаў прызначаны аднаму і таму ж прадстаўленню, прымяняецца той шаблон, які з’яўляецца першым ў спісе. Змяніце парадак з дапамогай перацягвання.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Калі вы ствараеце шматмоўны сайт, не выбірайце тут канкрэтнае меню. Замест гэтага выкарыстоўвайце менеджар модуляў Joomla для публікацыі адпаведнага меню ў залежнасці ад бягучай мовы.", "If you are using WPML, you can not select a menu here. Instead, use the WordPress menu manager to assign menus to locations for a language.": "Калі вы выкарыстоўваеце WPML, вы не можаце выбраць меню тут. Замест гэтага скарыстайцеся менэджарам меню WordPress, каб прызначыць меню для пэўнай мовы.", "Ignore %taxonomy%": "Ігнараваць %taxonomy%", "Ignore author": "Ігнараваць аўтара", "Ignore category": "Ігнараваць катэгорыю", "Ignore tags": "Ігнараваць тэгі", "Image": "Выява", "Image Align": "Выраўнаваць выяву", "Image Alignment": "Выраўноўванне выявы", "Image Alt": "Атрыбут Alt выявы", "Image and Content": "Выява і змесціва", "Image and Title": "Выява і загаловак", "Image Attachment": "Image Attachment", "Image Box Shadow": "Image Box Shadow", "Image Bullet": "Image Bullet", "Image Effect": "Image Effect", "Image Field": "Image Field", "Image Focal Point": "Image Focal Point", "Image Height": "Вышыня выявы", "Image Margin": "Вонкавы адступ (Margin) выявы", "Image Orientation": "Арыентацыя выявы", "Image Position": "Пазіцыя выявы", "Image Quality": "Якасць выявы", "Image Size": "Памер выявы", "Image Width": "Шырыня выявы", "Image Width/Height": "Шырыня/вышыня выявы", "Image, Title, Content, Meta, Link": "Выява, Загаловак, Змесціва, Meta, Спасылка", "Image, Title, Meta, Content, Link": "Выява, Загаловак, Змесціва, Meta, Спасылка", "Image/Video": "Выява/Відэа", "Images and Links": "Выявы і спасылкі", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Немагчыма кэшаваць выявы. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Змяніце правы доступу</a> да папкі <code>cache</code> у каталогу тэмы <code>yootheme</code>, каб вэб-сервер мог запісваць у яе.", "Import Settings": "Імпарт налад", "In parenthesis": "У дужках", "Include %post_types% from child %taxonomies%": "Уключыць %post_types% з даччыных %taxonomies%", "Include articles from child categories": "Уключыць артыкулы з даччыных катэгорый", "Include child %taxonomies%": "Уключыць даччыныя %taxonomies%", "Include child categories": "Уключыць даччыныя катэгорыі", "Include child tags": "Уключыць даччыныя тэгі", "Include heading itself": "Уключыць сам загаловак", "Include items from child tags": "Уключыць элементы з даччыных тэгаў", "Include query string": "Уключыць радок запыту", "Info": "Інфармацыя", "Inherit": "Inherit", "Inherit transparency from header": "Успадкоўваць празрыстасць ад шапкі", "Inject SVG images into the markup so they adopt the text color automatically.": "Убудаваць SVG-выявы ў разметку, каб яны аўтаматычна прымалі колер тэксту.", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Убудаваць SVG-выявы ў разметку старонкі, каб іх можна было лёгка афармляць праз CSS.", "Inline": "Inline", "Inline SVG": "Убудаваны SVG", "Inline SVG logo": "Убудаваны SVG-лагатып", "Inline title": "Убудаваны загаловак", "Input": "Input", "Input Dropbar": "Input Dropbar", "Input Dropdown": "Input Dropdown", "Insert at the bottom": "Уставіць знізу", "Insert at the top": "Уставіць зверху", "Inset": "Inset", "Instead of opening a link, display an alternative content in a modal or an offcanvas sidebar.": "Замест адкрыцця спасылкі адлюстроўвайце альтэрнатыўны змест у мадальным акне або ў бакавой панэлі offcanvas.", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Замест уласнага малюнка можна націснуць на аловак, каб выбраць значок з бібліятэкі іконак.", "Intro Image": "Уступная выява", "Intro Image Alt": "Alt Уступнай выявы", "Intro Image Caption": "Intro Image Caption", "Intro Text": "Уступны тэкст", "Invalid Argument Mapped": "Супастаўлены недапушчальны аргумент", "Invalid Field Mapped": "Invalid Field Mapped", "Invalid Source": "Няправільная крыніца", "Inverse Logo (Optional)": "Інверсійны лагатып (неабавязкова)", "Inverse on hover or when active": "Інверсія пры навядзенні або актывацыі", "Inverse style": "Інверсійны стыль", "Inverse the text color on hover": "Інвертаваць колер тэксту пры навядзенні", "Invert lightness": "Інвертаваць lightness", "IP Anonymization": "Ананімізацыя IP", "Is empty": "Пусты", "Is equal to": "Роўна", "Is not empty": "Не пусты", "Is not equal to": "Не роўна", "Issues and Improvements": "Праблемы і паляпшэнні", "Item": "Элемент", "Item (%post_type% fields)": "Элемент (%post_type% fields)", "Item Count": "Колькасць элементаў", "Item deleted.": "Элемент выдалены.", "Item Index": "Індэкс элемента", "Item Max Width": "Максімальная шырыня элемента", "Item renamed.": "Элемент перайменаваны.", "Item uploaded.": "Файл запампаваны.", "Item Width": "Шырыня элемента", "Item Width Mode": "Item Width Mode", "Items": "Элементы", "Items (%post_type% fields)": "Элементаў (%post_type% fields)", "Items per Page": "Элементаў на Старонку", "JPEG": "JPEG", "JPEG to AVIF": "JPEG ў AVIF", "JPEG to WebP": "JPEG ў WebP", "Justify": "Justify", "Justify columns at the bottom": "Выраўнуйце слупкі ўнізе", "Keep existing": "Пакінуць існуючае", "Ken Burns Duration": "Працягласць эфекта Ken Burns", "Ken Burns Effect": "Эфект Ken Burns", "l": "l", "Label": "Label", "Label Margin": "Label Margin", "Labels": "Labels", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.", "Large": "Large", "Large (Desktop)": "Large (Desktop)", "Large padding": "Вялікі унутраны адступ padding", "Large Screen": "Вялікі экран", "Large Screens": "Вялікія экраны", "Larger padding": "Larger padding", "Larger style": "Larger style", "Last 24 hours": "Апошнія 24 гадзіны", "Last 30 days": "Апошнія 30 дзен", "Last 7 days": "Апошнія 7 дзен", "Last Column Alignment": "Last Column Alignment", "Last Item": "Апошні элемент", "Last Modified": "Апошняе рэдагаванне", "Last name": "Прозвішча", "Last Visit Date": "Last Visit Date", "Last visit date": "Last visit date", "Layout": "Макет", "Layout Library": "Бібліятэка макетаў", "Layout Media Files": "Layout Media Files", "Layouts uploaded successfully.": "Layouts uploaded successfully.", "Lazy load video": "Адкладзеная загрузка відэа", "Lead": "Lead", "Learning Layout Techniques": "Вывучэнне тэхнік макетавання", "Left": "Left", "Left (Not Clickable)": "Left (Not Clickable)", "Left Bottom": "Левы ніжні", "Left Center": "Левы цэнтр", "Left Top": "Левы Верхні", "Less than": "Менш чым", "Library": "Бібліятэка", "Light": "Ясны", "Light Text": "Ясны тэкст", "Lightbox": "Лайтбокс", "Lightbox only": "Толькі лайтбокс", "Lighten": "Lighten", "Lightness": "Lightness", "Limit": "Limit", "Limit by %taxonomies%": "Абмежаваць па %taxonomies%", "Limit by Categories": "Абмежаванні па катэгорыях", "Limit by Date Archive Type": "Абмежаваць па Date Archive Type", "Limit by Language": "Абмежаванне па мове", "Limit by Menu Heading": "Абмежаванне па загалоўку меню", "Limit by Page Number": "Абмежаванне па нумару старонкі", "Limit by Products on sale": "Абмежаваць па Products on sale", "Limit by Tags": "Абмежаванне па цэтліках", "Limit by Terms": "Limit by Terms", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Limit the content length to a number of characters. All HTML elements will be stripped.", "Limit the number of products.": "Limit the number of products.", "Line": "Line", "Link": "Спасылка", "link": "спасылка", "Link ARIA Label": "Link ARIA Label", "Link card": "Link card", "Link image": "Link image", "Link Muted": "Link Muted", "Link overlay": "Link overlay", "Link panel": "Link panel", "Link Parallax": "Link Parallax", "Link Reset": "Link Reset", "Link Style": "Стыль спасылкі", "Link Target": "Мэта спасылкі", "Link Text": "Тэкст спасылкі", "Link the image if a link exists.": "Выява як спасылка, калі існуе спасылка.", "Link the title if a link exists.": "Тэкст як спасылка, калі існуе спасылка.", "Link the whole card if a link exists.": "Уся картка як спасылка, калі існуе спасылка.", "Link the whole overlay if a link exists.": "Прывязаць увесь наклад, калі існуе спасылка.", "Link the whole panel if a link exists. Optionally, add a hover style.": "Зрабіце ўсю панэль спасылкай, калі яна існуе. Пры жаданні дадайце стыль пры навядзенні.", "Link the whole slideshow instead of linking items separately.": "Зрабіце спасылкай усё слайдшоў замест асобных элементаў.", "Link title": "Загаловак спасылкі", "Link Title": "Загаловак спасылкі", "Link to redirect to after submit.": "Спасылка для перанакіравання пасля адпраўкі.", "List": "Спіс", "List All Tags": "Спіс усіх тэгаў", "List Item": "Элемент спісу", "List Style": "Стыль спісу", "Live Search": "Жывы пошук", "Load Bootstrap": "Загружаць Bootstrap", "Load Font Awesome": "Загружаць Font Awesome", "Load image eagerly": "Загружаць выяву адразу", "Load jQuery": "Загружаць jQuery", "Load jQuery to write custom code based on the jQuery JavaScript library.": "Загружаць jQuery, каб пісаць уласны код на аснове бібліятэкі JavaScript jQuery.", "Load product on sale only": "Загружаць толькі тавар са зніжкай", "Load products on sale only": "Загружаць толькі тавары са зніжкай", "Loading": "Загрузка", "Loading Layouts": "Загрузка макетаў", "Location": "Месцазнаходжанне", "Login Page": "Login Page", "Logo End": "Logo End", "Logo Image": "Logo Image", "Logo Text": "Logo Text", "Loop video": "Loop video", "Lost Password Confirmation Page": "Lost Password Confirmation Page", "Lost Password Page": "Lost Password Page", "Luminosity": "Luminosity", "Mailchimp API Token": "Mailchimp API Token", "Main Section Height": "Вышыня асноўнай секцыі", "Main styles": "Асноўныя стылі", "Make header transparent": "Зрабіць Header празрыстым", "Make only first item active": "Make only first item active", "Make SVG stylable with CSS": "Make SVG stylable with CSS", "Make the column or its elements sticky only from this device width and larger.": "Make the column or its elements sticky only from this device width and larger.", "Make the header transparent and overlay this section if it directly follows the header.": "Make the header transparent and overlay this section if it directly follows the header.", "Make the header transparent even when it's sticky.": "Make the header transparent even when it's sticky.", "Managing Menus": "Кіраванне меню", "Managing Modules": "Кіраванне модулямі", "Managing Pages": "Кіраванне старонкамі", "Managing Sections, Rows and Elements": "Кіраванне Секцыямі, Радкамі і Элементамі", "Managing Templates": "Кіраванне Шаблонамі", "Managing Widgets": "Кіраванне Віджэтамі", "Manual": "Зададзена ўручную", "Manual Order": "Manual Order", "Map": "Map", "Mapping Fields": "Mapping Fields", "Margin": "Знешні водступ (Margin)", "Margin Top": "Margin Top", "Marker": "Маркер", "Marker Color": "Колер маркера", "Marker Icon": "Значок маркера", "Mask": "Маска", "Masonry": "Дынамічная (Masonry)", "Match (OR)": "Супадзенне (ЦІ)", "Match all (AND)": "Супаставіць усё (І)", "Match all %taxonomies% (AND)": "Супаставіць усе %taxonomies% (І)", "Match all tags (AND)": "Match all tags (AND)", "Match author (OR)": "Match author (OR)", "Match category (OR)": "Match category (OR)", "Match content height": "Match content height", "Match height": "Match height", "Match Height": "Match Height", "Match one (OR)": "Match one (OR)", "Match one %taxonomy% (OR)": "Match one %taxonomy% (OR)", "Match one tag (OR)": "Match one tag (OR)", "Match panel heights": "Match panel heights", "Match the height of all modules which are styled as a card.": "Match the height of all modules which are styled as a card.", "Match the height of all widgets which are styled as a card.": "Match the height of all widgets which are styled as a card.", "Matches a RegExp": "Matches a RegExp", "Max Height": "Максімальная Вышыня", "Max Width": "Максімальная Шырыня", "Max Width (Alignment)": "Max Width (Alignment)", "Max Width Breakpoint": "Max Width Breakpoint", "Maximum Zoom": "Максімальны Zoom", "Maximum zoom level of the map.": "Максімальны ўзровень павелічэння (zoom) на мапе.", "Media": "Media", "Media Folder": "Каталог медыятэкі", "Medium": "Medium", "Medium (Tablet Landscape)": "Medium (Tablet Landscape)", "Menu": "Меню", "Menu Divider": "Menu Divider", "Menu Icon Width": "Menu Icon Width", "Menu Image Align": "Menu Image Align", "Menu Image and Title": "Menu Image and Title", "Menu Image Height": "Menu Image Height", "Menu Image Width": "Menu Image Width", "Menu Inline SVG": "Menu Inline SVG", "Menu Item": "Пункт меню", "Menu Items": "Пункты меню", "Menu items are only loaded from the selected parent item.": "Menu items are only loaded from the selected parent item.", "Menu Primary Size": "Menu Primary Size", "Menu Style": "Стыль меню", "Menu Type": "Тып меню", "Menus": "Меню", "Message": "Паведамленне", "Message shown to the user after submit.": "Message shown to the user after submit.", "Meta": "Meta", "Meta Alignment": "Meta Alignment", "Meta Margin": "Meta Margin", "Meta Parallax": "Meta Parallax", "Meta Style": "Meta Стыль", "Meta Width": "Meta Шырыня", "Meta, Image, Title, Content, Link": "Meta, Image, Title, Content, Link", "Meta, Title, Content, Link, Image": "Meta, Title, Content, Link, Image", "Method": "Method", "Middle": "Middle", "Mimetype": "Mimetype", "Min Height": "Мінімальная Вышыня", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.", "Minimum Stability": "Мінімальная Стабільнасць", "Minimum Zoom": "Мінімальнае павелічэнне", "Minimum zoom level of the map.": "Мінімальны ўзровень zoom на мапе.", "Miscellaneous Information": "Miscellaneous Information", "Mobile": "Пазіцыя Mobile", "Mobile Inverse Logo (Optional)": "Мабільны лагатып з інверсіяй (Optional)", "Mobile Logo (Optional)": "Лагатып для мабільнага дэвайса (Optional)", "Modal": "У мадальнам акне", "Modal Center": "Мадальнае акно па цэнтры", "Modal Image Focal Point": "Modal Image Focal Point", "Modal Top": "Мадальнае акно Зверху", "Modal Width": "Шырыня Мадальнага акна", "Modal Width/Height": "Modal Width/Height", "Mode": "Рэжым", "Modified": "Зменена", "Modified Date": "Modified Date", "Module": "Модуль", "Module Position": "Module Position", "Module Theme Options": "Module Theme Options", "Modules": "Модулі", "Modules and Positions": "Модулі і пазіцыі", "Monokai (Dark)": "Monokai (Dark)", "Month Archive": "Архіў за месяц", "Move the sidebar to the left of the content": "Move the sidebar to the left of the content", "Multibyte encoded strings such as UTF-8 can't be processed. Install and enable the <a href=\"https://php.net/manual/en/book.mbstring.php\" target=\"_blank\">Multibyte String extension</a>.": "Multibyte encoded strings such as UTF-8 can't be processed. Install and enable the <a href=\"https://php.net/manual/en/book.mbstring.php\" target=\"_blank\">Multibyte String extension</a>.", "Multiple Items Source": "Крыніца некалькіх элементаў", "Multiply": "Multiply", "Mute video": "Адключыць гук у відэа", "Muted": "Muted", "My Account": "Мой уліковы запіс", "My Account Page": "Старонка майго уліковага запісу", "my layouts": "мае макеты", "my presets": "мае прэсэты", "my styles": "мае стылі", "Name": "Назва", "Names": "імёны", "Nav": "Nav", "Navbar": "Navbar", "Navbar Container": "Navbar Container", "Navbar Dropdown": "Navbar Dropdown", "Navbar End": "Navbar End", "Navbar Start": "Navbar Start", "Navbar Style": "Navbar Style", "Navigation": "Навігацыя", "Navigation Label": "Navigation Label", "Navigation Order": "Navigation Order", "Navigation Thumbnail": "Navigation Thumbnail", "New Article": "Новы артыкул", "New Layout": "Новы макет", "New Menu Item": "Новы пункт меню", "New Module": "Новы модуль", "New Page": "Новая старонка", "New Template": "Новы шаблон", "New Window": "Новае акно", "Newsletter": "Newsletter", "Next": "Далей", "Next %post_type%": "Наступны %post_type%", "Next Article": "Наступны артыкул", "Next Section": "Next Section", "Next-Gen Images": "Выявы новага пакалення", "Nicename": "Nicename", "Nickname": "Nickname", "No %item% found.": "No %item% found.", "No articles found.": "Артыкулы не знойдзены.", "No Clear all button": "No Clear all button", "No critical issues found.": "Крытычных праблем не выяўлена.", "No element found.": "Элементы не знойдзены.", "No element presets found.": "No element presets found.", "No Field Mapped": "Палі не звязаныя", "No files found.": "Файлы не знойдзены.", "No font found. Press enter if you are adding a custom font.": "No font found. Press enter if you are adding a custom font.", "No icons found.": "Значкі не знойдзены.", "No image library is available to process images. Install and enable the <a href=\"https://php.net/manual/en/book.image.php\" target=\"_blank\">GD</a> extension.": "No image library is available to process images. Install and enable the <a href=\"https://php.net/manual/en/book.image.php\" target=\"_blank\">GD</a> extension.", "No items yet.": "No items yet.", "No layout found.": "No layout found.", "No limit": "Без абмежаванняў", "No list selected.": "No list selected.", "No pages found.": "Старонкі не знойдзены.", "No Results": "Няма вынікаў", "No results.": "Няма вынікаў.", "No source mapping found.": "No source mapping found.", "No style found.": "Стыль не знойдзены.", "None": "None", "None (Fade if hover image)": "None (Fade if hover image)", "Normal": "Normal", "Not assigned": "Не прызначаныя", "Notification": "Апавяшчэнне", "Numeric": "Лічбавы", "Off": "Адключаны", "Offcanvas": "Offcanvas", "Offcanvas Center": "Offcanvas Center", "Offcanvas Mode": "Offcanvas Mode", "Offcanvas Top": "Offcanvas Top", "Offset": "Offset", "Ok": "Ok", "ol": "ol", "On": "Уключаны", "On (If inview)": "Уключана (калі прагледжана)", "On Sale Product": "On Sale Product", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "На кароткіх старонках асноўны раздзел можна пашырыць, каб запоўніць усю вобласць прагляду (viewport). Гэта дзейнічае толькі для старонак, якія не былі створаны з дапамогай канструктара старонак.", "Only available for Google Maps.": "Даступна толькі для Google Maps.", "Only Clear all button": "Only Clear all button", "Only display modules that are published and visible on this page.": "Адлюстроўваць толькі тыя модулі, якія апублікаваныя і бачныя на гэтай старонцы.", "Only display widgets that are published and visible on this page.": "Адлюстроўваць толькі тыя віджэты, якія апублікаваныя і бачныя на гэтай старонцы.", "Only include child %taxonomies%": "Only include child %taxonomies%", "Only include child categories": "Only include child categories", "Only include child tags": "Only include child tags", "Only load menu items from the selected menu heading.": "Загружаць пункты меню толькі з выбранага загалоўка меню.", "Only post types with an archive can be redirected to the archive page.": "Only post types with an archive can be redirected to the archive page.", "Only search the selected post types.": "Only search the selected post types.", "Only show the image or icon.": "Only show the image or icon.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Толькі асобныя старонкі і паведамленні могуць мець індывідуальныя макеты. Выкарыстоўвайце шаблон, каб прымяніць агульны макет да гэтага тыпу старонкі. Калі вы атрымліваеце гэтае паведамленне з-за памылкі, то гэта не праблема шаблону, а толькі вынік памылак у іншых пашырэннях сайта. Перш за ўсё, варта праверыць працу сістэмных плагінаў. Уключыце паказ усіх памылак і рэжым адладкі ў канфігурацыі Joomla, вывучыце памылкі ў кансолі браўзера. Калі ўсё роўна вам нічога не зразумела, звярніцеся за дапамогай у службу падтрымкі або пацікаўцеся ў супольнасці карыстальнікаў Yootheme Pro.", "Opacity": "Непразрыстасць", "Open dropdowns on click instead of hover and align dropdowns to the filter bar instead of their item.": "Open dropdowns on click instead of hover and align dropdowns to the filter bar instead of their item.", "Open in a new window": "Адчыніць у новым вакне", "Open Templates": "Адкрыць шаблоны", "Open the link in a new window": "Адкрыць спасылку ў новым вакне", "Opening the Changelog": "Адкрыць спіс зменаў", "Options": "Опцыі", "Order": "Сартаванне", "Order Direction": "Напрамак сартавання", "Order First": "Ставіць першым", "Order Received Page": "Order Received Page", "Order the filter navigation alphabetically or by defining the order manually.": "Order the filter navigation alphabetically or by defining the order manually.", "Order Tracking": "Order Tracking", "Ordering": "Ordering", "Ordering Sections, Rows and Elements": "Ordering Sections, Rows and Elements", "Out of Stock": "Няма ў наяўнасці", "Outside": "Звонку", "Outside Breakpoint": "Outside Breakpoint", "Overlap the following section": "Overlap the following section", "Overlay": "Overlay", "Overlay + Lightbox": "Overlay + Lightbox", "Overlay Color": "Колер накладання", "Overlay Default": "Накладанне па змаўчанні", "Overlay only": "Толькі накладанне", "Overlay Parallax": "Паралакс накладанняx", "Overlay Primary": "Overlay Primary", "Overlay Slider": "Overlay Slider", "Overlay the site": "Overlay the site", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.", "Pack": "Pack", "Padding": "Унутраны водступ (Padding)", "Page": "Старонка", "Page Category": "Катэгорыя старонкі", "Page Locale": "Мова старонкі", "Page Title": "Загаловак старонкі", "Page URL": "URL-адрас старонкі", "Pages": "Старонкі", "Pagination": "Разбіццё на старонкі", "Panel": "Панэль", "Panel + Lightbox": "Панэль + Лайтбокс", "Panel only": "Толькі панэль", "Panel Slider": "Panel Slider", "Panels": "Панэлі", "Parallax": "Паралакс", "Parallax Breakpoint": "Parallax Breakpoint", "Parallax Easing": "Parallax Easing", "Parallax Start/End": "Паралакс Start/End", "Parallax Target": "Parallax Target", "Parent": "Parent", "Parent (%label%)": "Бацькоўскі (%label%)", "Parent %taxonomy%": "Бацькоўскі %taxonomy%", "Parent %type%": "Parent %type%", "Parent Category": "Бацькоўская Катэгорыя", "Parent Menu Item": "Бацькоўскі пункт меню", "Parent Tag": "Бацькоўскі цэтлік", "Parenthesis": "Дужкі", "Path": "Path", "Path Pattern": "Path Pattern", "Pause autoplay on hover": "Pause autoplay on hover", "Phone Landscape": "Phone Landscape", "Phone Portrait": "Phone Portrait", "Photos": "Фатаграфіі", "Pick": "Pick", "Pick %type%": "Pick %type%", "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.": "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.", "Pick an alternative icon from the icon library.": "Pick an alternative icon from the icon library.", "Pick an alternative SVG image from the media manager.": "Pick an alternative SVG image from the media manager.", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "Pick an article manually or use filter options to specify which article should be loaded dynamically.", "Pick an optional icon from the icon library.": "Pick an optional icon from the icon library.", "Pick file": "Pick file", "Pick icon": "Pick icon", "Pick link": "Pick link", "Pick media": "Pick media", "Pill": "Pill", "Pixels": "Pixels", "Placeholder Image": "Placeholder Image", "Placeholder Video": "Placeholder Video", "Play inline on mobile devices": "Play inline on mobile devices", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Калі ласка ўсталюйце/уключыце <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> каб уключыць гэтую наладу.", "Please provide a valid email address.": "Please provide a valid email address.", "PNG to AVIF": "PNG ў AVIF", "PNG to WebP": "PNG ў WebP", "Popover": "Popover", "Popular %post_type%": "Popular %post_type%", "Popup": "Popup", "Port": "Port", "Position": "Пазіцыя", "Position Absolute": "Пазіцыя Absolute", "Position Sticky": "Пазіцыя Sticky", "Position Sticky Breakpoint": "Пазіцыя Sticky Breakpoint", "Position Sticky Offset": "Пазіцыя Sticky Offset", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Размясціце элемент НАД або ПАД іншымі элементамі. Калі ў іх адзін і той жа ўзровень стэкавання, пазіцыя залежыць ад парадку ў макеце.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Размясціце элемент у звычайным патоку змесціва, альбо ў звычайным патоку, але са змяшчэннем адносна самога сябе або выдаліце яго з патоку і размясціце адносна ўтрымліваючага слупка.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Размясціце навігацыю фільтра зверху, злева або справа. Для левай і правай навігацыі можна прымяніць большы стыль.", "Position the meta text above or below the title.": "Размясціце мета-тэкст НАД або ПАД загалоўкам.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Размясціце навігацыю зверху, знізу, злева або справа. Для левай і правай навігацыі можна прымяніць большы стыль.", "Post": "Публікацыя", "Post Order": "Парадак публікацый", "Post Type Archive": "Post Type Archive", "Post Type Archive page": "Post Type Archive page", "Postal/ZIP Code": "Postal/ZIP Code", "Poster Frame": "Poster Frame", "Poster Frame Focal Point": "Poster Frame Focal Point", "Posts per Page": "Posts per Page", "Prefer excerpt over intro text": "Prefer excerpt over intro text", "Prefer excerpt over regular text": "Prefer excerpt over regular text", "Preserve text color": "Preserve text color", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.", "Preserve words": "Preserve words", "Prevent form submit if live search is used": "Prevent form submit if live search is used", "Preview all UI components": "Перадпрагляд усіх кампанентаў для карыстальніка інтэрфейсу", "Previous %post_type%": "Previous %post_type%", "Previous Article": "Папярэдні артыкул", "Previous/Next": "Папярэдні/Наступны", "Price": "Цана", "Primary": "Primary", "Primary navigation": "Primary navigation", "Primary Size": "Primary Size", "pro layouts": "pro макеты", "pro presets": "pro прэсэты", "Product Category Archive": "Product Category Archive", "Product Description": "Product Description", "Product Gallery": "Product Gallery", "Product IDs": "Product IDs", "Product Image": "Выява прадукта", "Product Images": "Product Images", "Product Information": "Product Information", "Product Meta": "Product Meta", "Product Ordering": "Product Ordering", "Product Price": "Product Price", "Product Rating": "Product Rating", "Product SKUs": "Product SKUs", "Product Stock": "Product Stock", "Product Tabs": "Product Tabs", "Product Tag Archive": "Product Tag Archive", "Product Title": "Product Title", "Products": "Products", "Products Filter": "Products Filter", "Property": "Маёмасць", "Provider": "Provider", "Published": "Апублікавана", "Published Date": "Published Date", "Pull": "Pull", "Pull content behind header": "Pull content behind header", "Purchases": "Purchases", "Push": "Push", "Push Items": "Push Items", "Quantity": "Колькасць", "Quarters": "Quarters", "Quarters 1-1-2": "Quarters 1-1-2", "Quarters 1-2-1": "Quarters 1-2-1", "Quarters 1-3": "Quarters 1-3", "Quarters 2-1-1": "Quarters 2-1-1", "Quarters 3-1": "Quarters 3-1", "Query": "Query", "Query String": "Query String", "Quotation": "Цытата", "r": "r", "Random": "Выпадкова", "Rating": "Рэйтынг", "Ratio": "Суадносіны бакоў", "Read More": "Падрабязней", "Recompile style": "Перакампіляваць стыль", "Redirect": "Перанакіраваць", "Register date": "Дата рэгістрацыі", "Registered Date": "Registered Date", "Reject Button Style": "Стыль кнопкі 'Адмова'", "Reject Button Text": "Тэкст кнопкі 'Адмова'", "Related %post_type%": "Related %post_type%", "Related Articles": "Артыкулы па тэме", "Related Products": "Звязаныя прадукты", "Relationship": "Сувязь", "Relationships": "Сувязі", "Relative": "Relative", "Reload Page": "Аднавіць старонку", "Remove bottom margin": "Выдаліць знешні ніжні водступ (margin)", "Remove bottom padding": "Выдаліць унутраны ніжні водступ (padding)", "Remove horizontal padding": "Выдаліць гарызантальны padding", "Remove left and right padding": "Выдаліць левы і правы padding", "Remove left logo padding": "Выдаліць левы padding лагатыпа", "Remove left or right padding": "Выдаліць левы або правы водступ", "Remove Media Files": "Выдаліць медыяфайлы", "Remove top margin": "Выдаліць знешні верхні водступ", "Remove top padding": "Выдаліць унутраны верхні водступ", "Remove vertical padding": "Выдаліць вертыкальны водступ", "Rename": "Перайменаваць", "Rename %type%": "Перайменаваць %type%", "Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text.": "Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text.", "Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Render the intro text if the read more tag is present. Otherwise, fall back to the full content. Optionally, prefer the excerpt field over the intro text. To use an excerpt field, create a custom field with the name excerpt.", "Replace": "Замяніць", "Replace layout": "Замяніць макет", "Request": "Request", "Reset": "Скінуць", "Reset Link Sent Page": "Reset Link Sent Page", "Reset to defaults": "Скінуць у стан па змаўчанні", "Resize Preview": "Resize Preview", "Responsive": "Адаптыўнасць", "Result Count": "Result Count", "Reveal": "Reveal", "Reverse order": "Зваротны парадак", "Right": "Right", "Right (Clickable)": "Справа (Clickable)", "Right Bottom": "Right Bottom", "Right Center": "Right Center", "Right Top": "Right Top", "Roadmap": "Roadmap", "Roles": "Roles", "Root": "Root", "Rotate": "Rotate", "Rotate the title 90 degrees clockwise or counterclockwise.": "Rotate the title 90 degrees clockwise or counterclockwise.", "Rotation": "Rotation", "Rounded": "Rounded", "Row": "Радок", "Row Gap": "Row Gap", "Rows": "Радкі", "Run Time": "Працягласць", "s": "s", "Same Window": "Same Window", "Satellite": "Satellite", "Saturation": "Saturation", "Save": "Захаваць", "Save %type%": "Захаваць %type%", "Save in Library": "Захаваць у бібліятэку", "Save Layout": "Захаваць макет", "Save Module": "Захаваць модуль", "Save Style": "Захаваць Стыль", "Save Template": "Захаваць шаблон", "Save Widget": "Захаваць Віджэт", "Scale": "Scale", "Scale Down": "Scale Down", "Scale Up": "Scale Up", "Scheme": "Scheme", "Screen": "Экран", "Script": "Скрыпт", "Scroll into view": "Scroll into view", "Scroll overflow": "Scroll overflow", "Search": "Пошук", "Search articles": "Пошук артыкулаў", "Search Component": "Кампанент пошуку", "Search Dropbar": "Search Dropbar", "Search Dropdown": "Search Dropdown", "Search Filter": "Фільтр пошуку", "Search Icon": "Значок пошуку", "Search Item": "Search Item", "Search Layout": "Макет пошуку", "Search Modal": "Search Modal", "Search Page": "Search Page", "Search pages and post types": "Search pages and post types", "Search Redirect": "Search Redirect", "Search Word": "Шуканае слова", "Secondary": "Secondary", "Section": "Секцыя", "Section Animation": "Анімацыя Секцыі", "Section Height": "Вышыня секцыі", "Section Image and Video": "Выява і відэа секцыі", "Section Padding": "Section Padding", "Section Style": "Стыль секцыі", "Section Title": "Назва секцыі", "Section Width": "Шырыня секцыі", "Section/Row": "Секцыя/Радок", "Sections": "Секцыі", "Select": "Выберыце", "Select %item%": "Выберыце %item%", "Select %type%": "Выберыце %type%", "Select a card style.": "Выберыце стыль карткі.", "Select a child theme. Note that different template files will be loaded, and theme settings will be updated respectively. To create a child theme, add a new folder <code>yootheme_NAME</code> in the templates directory, for example <code>yootheme_mytheme</code>.": "Абярыце даччыную тэму. Звярніце ўвагу, што будуць загружаныя іншыя файлы шаблона, а налады тэмы адпаведна абноўлены. Каб стварыць даччыную тэму, дадайце новую папку <code>yootheme_NAME</code> у каталог templates, напрыклад <code>yootheme_mytheme</code>.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Выберыце крыніцу змесціва, каб зрабіць яе палі даступнымі для адлюстравання. Выберыце паміж крыніцамі бягучай старонкі або запыту і карыстальніцкай крыніцай.", "Select a different position for this item.": "Абярыце іншую пазіцыю для гэтага элемента.", "Select a grid layout": "Выберыце макет сеткі", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "Абярыце лагатып, які будзе адлюстроўвацца ў offcanvas і мадальных акенцах у пэўных макетах загалоўка.", "Select a panel style.": "Абярыце стыль панэлі.", "Select a predefined date format or enter a custom format.": "Абярыце загадзя вызначаны фармат даты або ўвядзіце свой уласны.", "Select a predefined meta text style, including color, size and font-family.": "Абярыце загадзя вызначаны стыль мета-тэксту — уключаючы колер, памер і шрыфт.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.", "Select a predefined text style, including color, size and font-family.": "Абярыце загадзя вызначаны стыль тэксту — уключаючы колер, памер і шрыфт.", "Select a style for the continue reading button.": "Абярыце стыль кнопкі «Чытаць далей».", "Select a style for the overlay.": "Вызначце стыль для накладання.", "Select a taxonomy to only load posts from the same term.": "Абярыце таксанамію, каб загружаць толькі публікацыі з таго ж тэрміна.", "Select a taxonomy to only navigate between posts from the same term.": "Абярыце таксанамію, каб перамяшчацца толькі паміж публікацыямі з таго ж тэрміна.", "Select a transition for the content when the overlay appears on hover or when active.": "Абярыце пераход для змесціва, калі накладанне з’яўляецца пры навядзенні або актывацыі.", "Select a transition for the content when the overlay appears on hover.": "Абярыце пераход для змесціва, калі накладанне з’яўляецца пры навядзенні.", "Select a transition for the link when the overlay appears on hover or when active.": "Абярыце пераход для спасылкі, калі накладанне з’яўляецца пры навядзенні або актывацыі.", "Select a transition for the link when the overlay appears on hover.": "Абярыце пераход для спасылкі, калі накладанне з’яўляецца пры навядзенні.", "Select a transition for the meta text when the overlay appears on hover or when active.": "Абярыце пераход для мета-тэксту, калі накладанне з’яўляецца пры навядзенні або актывацыі.", "Select a transition for the meta text when the overlay appears on hover.": "Абярыце пераход для мета-тэксту, калі накладанне з’яўляецца пры навядзенні.", "Select a transition for the overlay when it appears on hover or when active.": "Абярыце пераход для накладання, калі яно з’яўляецца пры навядзенні або актывацыі.", "Select a transition for the overlay when it appears on hover.": "Абярыце пераход для накладання, калі яно з’яўляецца пры навядзенні.", "Select a transition for the title when the overlay appears on hover or when active.": "Абярыце пераход для загалоўка, калі накладанне з’яўляецца пры навядзенні або актывацыі.", "Select a transition for the title when the overlay appears on hover.": "Абярыце пераход для загалоўка, калі накладанне з’яўляецца пры навядзенні.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WooCommerce page.": "Выберыце старонку WooCommerce.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Абярыце вобласць віджэтаў WordPress, у якой будуць адлюстроўвацца ўсе апублікаваныя віджэты. Рэкамендуецца выкарыстоўваць вобласці builder-1 – builder-6, якія не выкарыстоўваюцца ў іншых частках тэмы.", "Select an alternative font family. Mind that not all styles have different font families.": "Абярыце альтэрнатыўнае сямейства шрыфтоў. Майце на ўвазе, што не ўсе стылі маюць розныя шрыфты.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.", "Select an alternative logo, which will be used on small devices.": "Выберыце альтэрнатыўны лагатып, які будзе выкарыстоўвацца на мабільных прыладах.", "Select an animation that will be applied to the content items when filtering between them.": "Абярыце анімацыю, якая будзе прымяняцца да элементаў змесціва пры фільтраванні паміж імі.", "Select an animation that will be applied to the content items when toggling between them.": "Абярыце анімацыю, якая будзе прымяняцца да элементаў змесціва пры пераключэнні паміж імі.", "Select an image transition.": "Абярыце пераход паміж выявамі.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Абярыце пераход паміж выявамі. Калі зададзена выява пры навядзенні, пераход будзе адбывацца паміж дзвюма выявамі. Калі абрана <i>None</i>, выява пры навядзенні проста паступова з’явіцца.", "Select an optional <code>favicon.svg</code>. Modern browsers will use it instead of the PNG image. Use CSS to toggle the SVG color scheme for light/dark mode.": "Абярыце неабавязковы файл <code>favicon.svg</code>. Сучасныя браўзеры будуць выкарыстоўваць яго замест выявы PNG. Вы можаце выкарыстоўваць CSS, каб пераключаць каляровую схему SVG для светлага або цёмнага рэжыму.", "Select an optional image that appears on hover.": "Выберыце другую выяву, якая будзе з'яўляцца пры навядзенні.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Абярыце неабавязковую выяву, якая будзе паказвацца, пакуль відэа не пачне прайгравацца. Калі выява не абрана, будзе выкарыстаны першы кадр відэа ў якасці плаката.", "Select an optional video that appears on hover.": "Выберыце дадатковае відэа, якое будзе з'яўляцца пры навядзенні.", "Select Color": "Выберыце колер", "Select dialog layout": "Выберыце макет пазіцыі dialog", "Select Element": "Выберыце Элемент", "Select Gradient": "Выберыце градыент", "Select header layout": "Выберыце макет пазіцыі Header", "Select Image": "Выберыце выяву", "Select Manually": "Выберыце уручную", "Select menu item.": "Выберыце пункт меню.", "Select menu items manually. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple menu items.": "Выберыце элементы меню ўручную. Скарыстайце клавішу <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі элементаў меню.", "Select mobile dialog layout": "Выберыце макет мабільнага дыялогу", "Select mobile header layout": "Выберыце макет мабільнага загалоўка", "Select mobile search layout": "Выберыце макет мабільнага пошуку", "Select one of the boxed card or tile styles or a blank panel.": "Выберыце адзін са стыляў — картачку, плітку або пустую панэль.", "Select search layout": "Выберыце макет пошуку", "Select the animation on how the dropbar appears below the navbar.": "Выберыце анімацыю, з дапамогай якой панэль dropbar з’явіцца пад навігацыйнай панэллю.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Выберыце пункт пералому, з якога слупок пачне адлюстроўвацца перад іншымі. На меншых экранах слупкі будуць паказвацца ў натуральным парадку.", "Select the color of the list markers.": "Выберыце колер маркераў спісу.", "Select the content position.": "Выберыце становішча змесціва.", "Select the device size where the default header will be replaced by the mobile header.": "Выберыце памер прылады, пры якім стандартны загаловак будзе заменены мабільным.", "Select the filter navigation style.": "Выберыце стыль фільтра навігацыі.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Выберыце стыль фільтра навігацыі. Стылі ў выглядзе кропкі і падзяляльніка даступныя толькі для гарызантальных падменю.", "Select the form size.": "Выберыце памер формы.", "Select the form style.": "Выберыце стыль формы.", "Select the icon color.": "Выберыце колер значкоў.", "Select the image border style.": "Выберыце стыль для мяжы выявы.", "Select the image box decoration style.": "Выберыце стыль упрыгожвання блока выявы.", "Select the image box shadow size on hover.": "Выберыце памер ценю блока выявы пры навядзенні курсора.", "Select the image box shadow size.": "Выберыце памер ценю блока выявы.", "Select the item type.": "Выберыце тып элемента.", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "Выберыце макет для пазіцыі <code>dialog-mobile</code>. Націснутыя элементы пазіцыі адлюстроўваюцца ў выглядзе шматкроп’я.", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "Выберыце макет для пазіцыі <code>dialog</code>. Націснутыя элементы пазіцыі адлюстроўваюцца ў выглядзе шматкроп’я.", "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.": "Выберыце макет для пазіцый <code>logo-mobile</code>, <code>navbar-mobile</code> і <code>header-mobile</code>.", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "Выберыце макет для пазіцый <code>logo</code>, <code>navbar</code> і <code>header</code>. Некаторыя макеты могуць падзяляць або перамяшчаць элементы пазіцыі, якія адлюстроўваюцца ў выглядзе шматкроп’я.", "Select the link style.": "Выберыце стыль спасылкі.", "Select the list style.": "Выберыце стыль спісу.", "Select the list to subscribe to.": "Выберыце спіс для падпіскі.", "Select the logical operator for the attribute term comparison. Match at least one of the terms, none of the terms or all terms.": "Выберыце лагічны аператар для параўнання тэрмінаў атрыбутаў. Супастаўце хаця б адзін з тэрмінаў, ніводзін або ўсе тэрміны.", "Select the logical operator for the category comparison. Match at least one of the categories, none of the categories or all categories.": "Выберыце лагічны аператар для параўнання катэгорый. Супастаўце хаця б адну катэгорыю, ніводную або ўсе катэгорыі.", "Select the logical operator for the tag comparison. Match at least one of the tags, none of the tags or all tags.": "Выберыце лагічны аператар для параўнання тэгаў. Супастаўце хаця б адзін тэг, ніводзін або ўсе тэгі.", "Select the marker of the list items.": "Выберыце маркер элементаў спісу.", "Select the menu type.": "Выберыце тып меню.", "Select the nav style.": "Выберыце стыль для nav.", "Select the navbar style.": "Выберыце стыль для navbar.", "Select the navigation type.": "Выберыце тып навігацыі.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Выберыце тып навігацыі. Стылі «кропка» і «падзяляльнік» даступныя толькі для гарызантальных падменю.", "Select the overlay or content position.": "Выберыце пазіцыю накладання на змесціва.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Выберыце выраўноўванне ўсплываючага акна адносна яго маркера. Калі змесціва ў акне не змяшчаецца ў кантэйнер, то яно будзе аўтаматычна выходзіць за межы акна і будзе з'яўляцца пракрутка.", "Select the position of the navigation.": "Выберыце размяшчэнне элементаў слайдшоў.", "Select the position of the slidenav.": "Выберыце размяшчэнне slidenav.", "Select the position that will display the search.": "Выберыце пазіцыю, у якой будзе адлюстроўвацца пошук.", "Select the position that will display the social icons.": "Выберыце пазіцыю, у якой будуць адлюстроўвацца значкі сацыяльных сетак.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Выберыце пазіцыю для адлюстравання сацыяльных значкоў. Пераканайцеся, што вы дадалі спасылкі на свае сацыяльныя профілі, інакш значкі не будуць паказаны.", "Select the primary nav size.": "Выберыце памер асноўнай навігацыі.", "Select the slideshow box shadow size.": "Выберыце памер ценю для слайд-шоу.", "Select the smart search filter.": "Выберыце фільтр разумнага пошуку.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Выберыце стыль падсветкі сінтаксісу кода. Выкарыстоўвайце GitHub для светлых фонаў і Monokai для цёмных.", "Select the style for the overlay.": "Выберыце стыль для накладання.", "Select the subnav style.": "Выберыце стыль падменю.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Выберыце колер SVG. Ён будзе прымяняцца толькі да падтрымліваемых элементаў, вызначаных у SVG.", "Select the table style.": "Выберыце стыль табліцы.", "Select the text color.": "Выберыце колер тэксту.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Выберыце колер тэксту. Калі выбрана опцыя Фон, то стылі, якія не ўжываюць фонавы малюнак, замест гэтага будуць выкарыстоўваць асноўны колер.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Выберыце колер тэксту. Калі выбрана опцыя Фон, то стылі, якія не ўжываюць фонавы малюнак, замест гэтага выкарыстоўваюць асноўны колер.", "Select the title style and add an optional colon at the end of the title.": "Выберыце стыль загалоўка і дадайце неабавязковае двукроп'е ў канцы загалоўка.", "Select the title style.": "Выберыце стыль загалоўка.", "Select the transformation origin for the Ken Burns animation.": "Выберыце від трансфармацыі для анімацыі Ken Burns.", "Select the transition between two slides.": "Выберыце пераход паміж двума слайдамі.", "Select the video box decoration style.": "Выберыце стыль афармлення відэа-блока.", "Select the video box shadow size.": "Выберыце памер ценю відэа-блока.", "Select Video": "Выберыце Відэа", "Select whether a button or a clickable icon inside the email input is shown.": "Выберыце, што паказваць у полі ўводу электроннай пошты: кнопку або клікабельны значок.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Выберыце, ці будзе паказана паведамленне, ці перанакіраванне на сайт пасля націскання кнопкі Адправіць.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Выберыце, ці выкарыстоўваць звычайны Пошук або Разумны пошук у модулі пошуку і элеменце канструктара.", "Select whether the modules should be aligned side by side or stacked above each other.": "Выберыце, ці павінны модулі размяшчацца побач або адзін над адным.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Выберыце, ці павінны віджэты размяшчацца побач або адзін над адным.", "Select your <code>apple-touch-icon.png</code>. It appears when the website is added to the home screen on iOS devices. The recommended size is 180x180 pixels.": "Абярыце сваю <code>apple-touch-icon.png</code>. Яна з’яўляецца, калі сайт дададзены на хатні экран прылад з iOS. Рэкамендаваны памер — 180×180 пікселяў.", "Select your <code>favicon.png</code>. It appears in the browser's address bar, tab and bookmarks. The recommended size is 96x96 pixels.": "Абярыце сваю <code>favicon.png</code>. Яна адлюстроўваецца ў адрасным радку браўзера, укладках і закладках. Рэкамендаваны памер — 96×96 пікселяў.", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "Выберыце свой лагатып. Пры жаданні можна ўставіць SVG-лагатып у разметку, каб ён аўтаматычна падстройваўся пад колер тэксту.", "Sentence": "Сказ", "Separator": "Падзяляльнік", "Serve AVIF images": "Выкарыстоўваць выявы AVIF", "Serve optimized image formats with better compression and quality than JPEG and PNG.": "Выкарыстоўвайце аптымізаваныя фарматы выявы з лепшай кампрэсіяй і якасцю, чым JPEG і PNG. Для генерацыі AVIF патрэбна падтрымка PHP 8.1+ у якой бібліятэка GD скампілявана з залежнасцю ад libavif.", "Serve WebP images": "Выкарыстоўваць выявы WebP", "Set %color% background": "Усталюйце %color% фону", "Set a condition to display the element or its item depending on the content of a field.": "Усталюйце ўмову для адлюстравання элемента або яго пункта ў залежнасці ад змесціва поля.", "Set a different link ARIA label for this item.": "Выберыце іншую ARIA-метку для гэтага элемента.", "Set a different link text for this item.": "Выберыце іншы тэкст спасылкі для гэтага элемента.", "Set a different text color for this item.": "Выберыце іншы колер тэксту для гэтага элемента.", "Set a fixed height for all columns. They will keep their height when stacking. Optionally, subtract the header height to fill the first visible viewport.": "Усталюйце фіксаваную вышыню для ўсіх слупкоў. Яны захаваюць сваю вышыню падчас складвання ў слупок. Па жаданні, адніміце вышыню загалоўка, каб запоўніць першую бачную вобласць прагляду (visible viewport).", "Set a fixed height, and optionally subtract the header height to fill the first visible viewport. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.": "Усталюйце фіксаваную вышыню і, па жаданні, адніміце вышыню загалоўка, каб запоўніць першую бачную вобласць прагляду (visible viewport). Або павялічце вышыню, каб наступная секцыя таксама падыходзіла пад экран (visible viewport), альбо на маленькіх старонках запаўняла воблаць прагляду.", "Set a fixed height. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.": "Усталюйце фіксаваную вышыню. Або павялічце вышыню, каб наступная секцыя таксама змяшчалася ў вобласці прагляду, альбо на маленькіх старонках запаўняла экран.", "Set a fixed width.": "Усталюйце фіксаваную шырыню.", "Set a focal point to adjust the image focus when cropping.": "Усталюйце фокусную кропку для карэкцыі фокусу выявы пры кадраванні.", "Set a higher stacking order.": "Усталюйце больш высокі парадак накладання.", "Set a large initial letter that drops below the first line of the first paragraph.": "Усталяваць вялікую першую літару, якая апускаецца ніжэй за першы радок першага абзаца.", "Set a larger dropdown padding, show dropdowns in a full-width section called dropbar and display an icon to indicate dropdowns.": "Усталяваць большы водступ (padding) для dropdown, адлюстроўваць выпадаючыя меню ў секцыі на ўсю шырыню пад назвай dropbar і паказваць значок для абазначэння dropdown меню.", "Set a parallax animation to move columns with different heights until they justify at the bottom. Mind that this disables the vertical alignment of elements in the columns.": "Усталюйце паралакс-анімацыю для руху слупкоў з рознай вышынёй пакуль яны не выраўнаюцца па ніжняму краю. Майце на ўвазе, што гэта адключае вертыкальнае выраўноўванне элементаў у слупках.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Усталяваць шырыню пазіцыі Sidebar панэлі ў працэнтах, і слупок са змесцівам будзе адаптавацца адпаведна. Шырыня не будзе менш за мінімальную шырыню бакавой панэлі Sidebar, якую можна задаць у раздзеле Стыль.", "Set a thematic break between paragraphs or give it no semantic meaning.": "Усталяваць thematic break паміж абзацамі або пакінуць без сэнсавага значэння.", "Set an additional transparent overlay to soften the image or video.": "Дадаць дадатковае празрыстае накладанне, каб змякчыць выяву або відэа.", "Set an additional transparent overlay to soften the image.": "Дадаць дадатковае празрыстае накладанне, каб змякчыць выяву.", "Set an optional content width which doesn't affect the image if there is just one column.": "Усталяваць неабавязковую шырыню змесціва, якая не ўплывае на выяву, калі ёсць толькі адзін слупок.", "Set an optional content width which doesn't affect the image.": "Усталяваць неабавязковую шырыню змесціва, якая не ўплывае на выяву.", "Set how the module should align when the container is larger than its max-width.": "Усталюйце, як модуль павінен выраўноўвацца, калі шырыня кантэйнера большая за максімальную шырыню модуля.", "Set how the widget should align when the container is larger than its max-width.": "Усталюйце, як віджэт павінен выраўноўвацца, калі кантэйнер шырэй за максімальную шырыню модуля.", "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.": "Усталюйце светлы або цёмны рэжым колеру для тэксту, кнопак і элементаў кіравання, калі зверху над імі паказваецца прылепленая празрыстая панэль навігацыі.", "Set light or dark color mode for text, buttons and controls.": "Усталюйце светлы або цёмны рэжым колеру для тэксту, кнопак і элементаў кіравання.", "Set light or dark color mode.": "Усталюйце светлы або цёмны рэжым колеру.", "Set percentage change in lightness (Between -100 and 100).": "Усталюйце працэнт змянення lightness (ад -100 да 100).", "Set percentage change in saturation (Between -100 and 100).": "Усталюйце працэнт змянення насычанасці (ад -100 да 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Усталюйце працэнт змянення гамма-карэкцыі (ад 0.01 да 10.0, дзе 1.0 азначае адсутнасць карэкцыі).", "Set the alignment.": "Усталяваць выраўноўванне.", "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.": "Усталюйце паскарэнне анімацыі. Нулявое значэнне пераходзіць з роўнай хуткасцю, адмоўнае - пачынаецца хутка, у той час як станоўчае значэнне пачынаецца павольна.", "Set the autoplay interval in seconds.": "Усталюйце інтэрвал аўтапрайгравання ў секундах.", "Set the blog width.": "Усталюйце шырыню блога.", "Set the breakpoint from which grid items will align side by side.": "Усталюйце breakpoint, пачынаючы з якой элементы сеткі будуць выраўноўвацца побач адзін з адным.", "Set the breakpoint from which grid items will stack.": "Усталюйце breakpoint, пачынаючы з якой элементы сеткі будуць укладвацца адзін над адным.", "Set the breakpoint from which the sidebar and content will stack.": "Усталюйце breakpoint, пачынаючы з якой бакавая панэль (sidebar) і змесціва будуць укладвацца адзін над адным.", "Set the button size.": "Выбраць памер кнопкі.", "Set the button style.": "Выбраць стыль кнопкі.", "Set the cart quantity style.": "Усталюце стыль колькасці тавараў у кошыку.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Усталюйце шырыню слупка для кожнай кропкі разрыву. Можна змешваць дробныя шырыні або спалучаць фіксаваныя шырыні са значэннем <i>Expand</i>. Калі значэнне не абрана, выкарыстоўваецца шырыня слупка для наступнага меншага памеру экрана. Сумарная шырыня павінна заўсёды займаць поўную шырыню.", "Set the content width.": "Усталюйце шырыню кантэнту.", "Set the device width from which the list columns should apply.": "Усталюйце шырыню прылады, ад якой павінны прымяняцца слупкі спісу.", "Set the device width from which the nav columns should apply.": "Усталюйце шырыню прылады, ад якой павінны прымяняцца слупкі навігацыі.", "Set the device width from which the text columns should apply.": "Усталюйце шырыню прылады, ад якой павінны прымяняцца тэкставыя слупкі.", "Set the dropbar width if it slides in from the left or right.": "Усталюйце шырыню Dropbar панэлі, калі яна выязджае злева ці справа.", "Set the dropdown width in pixels (e.g. 600).": "Усталюйце шырыню выпадальнага меню ў пікселях (напрыклад, 600).", "Set the duration for the Ken Burns effect in seconds.": "Усталюйце працягласць эфекту Ken Burns у секундах.", "Set the filter toggle style.": "Усталюйце стыль пераключальніка фільтра.", "Set the height in pixels.": "Усталюйце вышыню ў пікселях.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Задайце гарызантальнае становішча ніжняга краю элемента ў пікселях. Таксама можна ўвесці іншую адзінку, напрыклад %, або vw.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Задайце гарызантальнае становішча левага краю элемента ў пікселях. Таксама можна ўвесці іншую адзінку, напрыклад %, або vw.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Задайце гарызантальнае становішча правага краю элемента ў пікселях. Таксама можна ўвесці іншую адзінку, напрыклад %, або vw.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Задайце гарызантальнае становішча верхняга краю элемента ў пікселях. Таксама можна ўвесці іншую адзінку, напрыклад %, або vw.", "Set the hover style for a linked title.": "Задайце стыль пры навядзенні курсора для загалоўка са спасылкай.", "Set the hover transition for a linked image.": "Задайце эфект пры навядзенні курсора для выявы са спасылкай.", "Set the hover transition for a linked image. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Задайце эфект пры навядзенні курсора для выявы са спасылкай. Калі ўстаноўлена выява для навядзення, пераход адбываецца паміж дзвюма выявамі. Калі выбрана <i>Няма</i>, выява для навядзення з'яўляецца паступова.", "Set the hue, e.g. <i>#ff0000</i>.": "Усталюйце адценне, напрыклад <i>#ff0000</i>.", "Set the icon color.": "Усталюйце колер значка.", "Set the icon width.": "Усталюйце шырыню значка.", "Set the initial background position, relative to the page layer.": "Вызначце пачатковую пазіцыю фону адносна пласта старонкі.", "Set the initial background position, relative to the section layer.": "Вызначце пачатковую пазіцыю фону адносна пласта раздзела.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in. Alternatively, set the viewport to contain the given markers.": "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in. Alternatively, set the viewport to contain the given markers.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Вызначце шырыню элемента для кожнага пункта пералому (breakpoint). <i>Inherit</i> азначае выкарыстанне шырыні элемента для наступнага меншага экрана.", "Set the level for the section heading or give it no semantic meaning.": "Вызначце ўзровень загалоўка раздзела або не надавайце яму семантычнага значэння.", "Set the link style.": "Вызначце стыль спасылкі.", "Set the logical operator for how the %post_type% relate to the author. Choose between matching at least one term, all terms or none of the terms.": "Вызначце лагічны аператар, які паказвае, як %post_type% звязаны з аўтарам. Выберыце паміж супадзеннем з адным, усімі або ні з адным тэрмінам.", "Set the logical operators for how the %post_type% relate to %taxonomy_list% and author. Choose between matching at least one term, all terms or none of the terms.": "Вызначце лагічныя аператары, якія паказваюць, як %post_type% звязаны з %taxonomy_list% і аўтарам. Выберыце паміж супадзеннем з адным, усімі або ні з адным тэрмінам.", "Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.": "Вызначце лагічныя аператары, якія паказваюць, як артыкулы звязаны з катэгорыяй, цэтлікамі і аўтарам. Выберыце паміж супадзеннем з адным, усімі або ні з адным тэрмінам.", "Set the margin between the countdown and the label text.": "Вызначце вонкавы адступ (margin) паміж лічыльнікам і тэкстам меткі.", "Set the margin between the overlay and the slideshow container.": "Вызначце вонкавы адступ (margin) паміж накладаннем і кантэйнерам слайд-шоу.", "Set the maximum content width.": "Вызначце максімальную шырыню змесціва.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Вызначце максімальную шырыню змесціва. Заўвага: раздзел можа ўжо мець абмежаванне шырыні, якое нельга перавысіць.", "Set the maximum header width.": "Вызначце максімальную шырыню загалоўка.", "Set the maximum height.": "Задайце максімальную вышыню.", "Set the maximum width.": "Задайце максімальную шырыню.", "Set the number of columns for the cart cross-sell products.": "Вызначце колькасць слупкоў для тавараў, якія прадаюцца разам у кошыку.", "Set the number of columns for the gallery thumbnails.": "Set the number of columns for the gallery thumbnails.", "Set the number of grid columns for desktops and larger screens. On smaller viewports the columns will adapt automatically.": "Вызначце колькасць слупкоў сеткі для настольных і буйных экранаў. На меншых экранах слупкі будуць аўтаматычна прыстасоўвацца.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Вызначце колькасць слупкоў сеткі для кожнага пункта пералому. <i>Inherit</i> выкарыстоўвае колькасць слупкоў наступнага меншага экрана. <i>Auto</i> пашырае слупкі ў залежнасці ад шырыні іх змесціва, запаўняючы радкі адпаведным чынам.", "Set the number of grid columns for the filters in a single dropdown.": "Set the number of grid columns for the filters in a single dropdown.", "Set the number of grid columns.": "Вызначце колькасць слупкоў сеткі.", "Set the number of items after which the following items are pushed to the bottom.": "Вызначце колькасць элементаў, пасля якіх наступныя будуць перанесены ўніз.", "Set the number of items after which the following items are pushed to the right.": "Вызначце колькасць элементаў, пасля якіх наступныя будуць перанесены направа.", "Set the number of items per page.": "Set the number of items per page.", "Set the number of list columns.": "Вызначце колькасць слупкоў у спісе.", "Set the number of posts per page.": "Set the number of posts per page.", "Set the number of text columns.": "Set the number of text columns.", "Set the offset from the top of the viewport where the column or its elements should become sticky, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height.": "Set the offset from the top of the viewport where the column or its elements should become sticky, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height.", "Set the offset to specify which file is loaded.": "Вызначце зрух, каб паказаць, які файл загружаецца.", "Set the order direction.": "Вызначце напрамак сартавання.", "Set the padding between sidebar and content.": "Вызначце ўнутраны адступ (padding) паміж бакавой панэллю і змесцівам.", "Set the padding between the card's edge and its content.": "Вызначце ўнутраны адступ (padding) паміж краем карткі і яе змесцівам.", "Set the padding between the overlay and its content.": "Вызначце ўнутраны адступ (padding) паміж накладаннем і яго змесцівам.", "Set the padding.": "Вызначце ўнутраны адступ (padding).", "Set the post width. The image and content can't expand beyond this width.": "Set the post width. The image and content can't expand beyond this width.", "Set the product ordering style.": "Set the product ordering style.", "Set the product ordering.": "Вызначце парадак сартавання тавараў.", "Set the search input size.": "Set the search input size.", "Set the search input style.": "Вызначце стыль поля пошуку.", "Set the separator between fields.": "Выберыце раздзяляльнік паміж палямі.", "Set the separator between list items.": "Выберыце раздзяляльнік паміж элементамі спісу.", "Set the separator between tags.": "Выберыце раздзяляльнік паміж цэтлікамі.", "Set the separator between terms.": "Выберыце раздзяляльнік паміж тэрмінамі.", "Set the separator between user groups.": "Вызначце раздзяляльнік паміж групамі карыстальнікаў.", "Set the separator between user roles.": "Вызначце раздзяляльнік паміж ролямі карыстальнікаў.", "Set the size for the Gravatar image in pixels.": "Вызначце памер выявы Gravatar у пікселях.", "Set the size of the column gap between multiple buttons.": "Вызначце шырыню прамежку паміж некалькімі кнопкамі.", "Set the size of the column gap between the numbers.": "Вызначце шырыню прамежку паміж лічбамі.", "Set the size of the gap between between the filter navigation and the content.": "Вызначце памер прамежку паміж навігацыяй фільтра і змесцівам.", "Set the size of the gap between the grid columns.": "Вызначце шырыню прамежку паміж слупкамі сеткі.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Вызначце шырыню прамежку паміж слупкамі сеткі. Вызначце колькасць слупкоў у наладах <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Макета блога / выбраных матэрыялаў</a> у Joomla.", "Set the size of the gap between the grid rows.": "Вызначце памер прамежку паміж радкамі сеткі.", "Set the size of the gap between the image and the content.": "Вызначце памер прамежку паміж выявай і змесцівам.", "Set the size of the gap between the navigation and the content.": "Вызначце памер прамежку паміж навігацыяй і змесцівам.", "Set the size of the gap between the social icons.": "Вызначце памер прамежку паміж значкамі сацыяльных сетак.", "Set the size of the gap between the title and the content.": "Вызначце памер прамежку паміж загалоўкам і змесцівам.", "Set the size of the gap if the grid items stack.": "Set the size of the gap if the grid items stack.", "Set the size of the row gap between multiple buttons.": "Set the size of the row gap between multiple buttons.", "Set the size of the row gap between the numbers.": "Вызначце памер прамежку паміж лічбамі ў радку.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Вызначце суадносіны бакоў для слайдшоў. Рэкамендуецца выкарыстоўваць тыя ж суадносіны, што і ў выявы або відэа. Проста пазначце яго шырыню і вышыню, напрыклад <code>1600:900</code>.", "Set the starting point and limit the number of %post_type%.": "Set the starting point and limit the number of %post_type%.", "Set the starting point and limit the number of %post_types%.": "Вызначце пачатковы пункт і абмяжуйце колькасць %post_types%.", "Set the starting point and limit the number of %taxonomies%.": "Вызначце пачатковы пункт і абмяжуйце колькасць %taxonomies%.", "Set the starting point and limit the number of articles.": "Вызначце пачатковы пункт і абмяжуйце колькасць артыкулаў.", "Set the starting point and limit the number of categories.": "Вызначце пачатковы пункт і абмяжуйце колькасць катэгорый.", "Set the starting point and limit the number of files.": "Вызначце пачатковы пункт і абмяжуйце колькасць файлаў.", "Set the starting point and limit the number of items.": "Вызначце пачатковы пункт і абмяжуйце колькасць элементаў.", "Set the starting point and limit the number of tagged items.": "Вызначце пачатковы пункт і абмяжуйце колькасць элементаў з цэтлікамі.", "Set the starting point and limit the number of tags.": "Вызначце пачатковы пункт і абмяжуйце колькасць цэтлікаў.", "Set the starting point and limit the number of users.": "Вызначце пачатковы пункт і абмяжуйце колькасць карыстальнікаў.", "Set the starting point to specify which %post_type% is loaded.": "Вызначце пачатковы пункт, каб пазначыць, які %post_type% загружаецца.", "Set the starting point to specify which article is loaded.": "Вызначце пачатковы пункт, каб пазначыць, які артыкул загружаецца.", "Set the sticky top offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height. Set a bottom offset if the sticky content is larger than the viewport.": "Задайце зрух уверсе (offset) для фіксаванага (sticky) элемента, напрыклад <code>100px</code>, <code>50vh</code> або <code>50vh - 50%</code>. Працэнт вызначаецца адносна вышыні калонкі. Задайце зрух знізу, калі фіксаванае змесціва перавышае вышыню вобласці прагляду.", "Set the top margin if the image is aligned between the title and the content.": "Вызначце верхні вонкавы адступ(top margin), калі выява размяшчаецца паміж загалоўкам і змесцівам.", "Set the top margin.": "Вызначце верхні вонкавы адступ (top margin).", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Вызначце верхні вонкавы адступ (top margin). Звярніце ўвагу, што адступ будзе дзейнічаць толькі ў тым выпадку, калі поле змесціва ідзе адразу пасля іншага поля змесціва.", "Set the type of tagged items.": "Вызначце тып элементаў з цэтлікамі.", "Set the velocity in pixels per millisecond.": "Вызначце хуткасць у пікселях за мілісекунду.", "Set the vertical container padding to position the overlay.": "Вызначце ўнутраны вертыкальны адступ (padding) кантэйнера, каб пазіцыянаваць накладанне.", "Set the vertical margin.": "Вызначце вертыкальны вонкавы адступ (margin).", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Вызначце вертыкальны вонкавы адступ (margin). Звярніце ўвагу: верхні адступ першага элемента і ніжні адступ апошняга заўсёды выдаляюцца. Замест гэтага задайце іх у наладах сеткі.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Вызначце вертыкальны вонкавы адступ (margin). Звярніце ўвагу: верхні адступ першай сеткі і ніжні адступ апошняй заўсёды выдаляюцца. Замест гэтага задайце іх у наладах секцыі.", "Set the vertical padding.": "Вызначце вертыкальны ўнутраны адступ (padding).", "Set the video dimensions.": "Вызначце памеры відэа.", "Set the width and height for the content the link is linking to, i.e. image, video or iframe.": "Set the width and height for the content the link is linking to, i.e. image, video or iframe.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Вызначце шырыню і вышыню для змесціва ў мадальным акне (напрыклад, выявы, відэа або iframe).", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Вызначце шырыню і вышыню ў пікселях (напрыклад, 600). Калі задаць толькі адно значэнне, захаваюцца арыгінальныя прапорцыі. Выява будзе аўтаматычна змяншацца і абразацца.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.", "Set the width of the dropbar content.": "Вызначце шырыню змесціва выпадаючай панэлі.", "Set whether it's an ordered or unordered list.": "Вызначце, ці будзе спіс нумараваны ці маркіраваны.", "Sets": "Наборы", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Калі задаць толькі адно значэнне, захаваюцца арыгінальныя прапорцыі. Выява будзе аўтаматычна змяншацца і абразацца, а пры магчымасці — будзе створана версія з высокім раздзяленнем.", "Setting Menu Items": "Налада Пунктаў Меню", "Setting the Blog Content": "Налада Змесціва Блога", "Setting the Blog Image": "Налада выявы блога", "Setting the Blog Layout": "Налада макета блога", "Setting the Blog Navigation": "Налада навігацыі па блогу", "Setting the Dialog Layout": "Налада макета дыялогавага вакна", "Setting the Header Layout": "Налада макета загалоўка", "Setting the Main Section Height": "Налада вышыні асноўнай секцыі", "Setting the Minimum Stability": "Налада мінімальнай стабільнасці", "Setting the Mobile Dialog Layout": "Налада макета мабільнага дыялогавага вакна", "Setting the Mobile Header Layout": "Налада макета мабільнай шапкі", "Setting the Mobile Navbar": "Налада мабільнай навігацыйнай панэлі", "Setting the Mobile Search": "Налада мабільнага пошуку", "Setting the Module Appearance Options": "Налада параметраў знешняга выгляду модуля", "Setting the Module Default Options": "Налада параметраў модуля па змаўчанні", "Setting the Module Grid Options": "Налада параметраў сеткі модуляў", "Setting the Module List Options": "Налада параметраў спіса модуляў", "Setting the Module Menu Options": "Налада параметраў меню модуля", "Setting the Navbar": "Налада навігацыйнай панэлі", "Setting the Page Layout": "Налада макета старонкі", "Setting the Post Content": "Налада змесціва публікацыі", "Setting the Post Image": "Налада выявы публікацыі", "Setting the Post Layout": "Налада макета публікацыі", "Setting the Post Navigation": "Налада навігацыі па публікацыі", "Setting the Sidebar Area": "Налада вобласці бакавой панэлі", "Setting the Sidebar Position": "Налада пазіцыі бакавой панэлі", "Setting the Source Order and Direction": "Налада парадку і напрамку крыніцы", "Setting the Template Loading Priority": "Налада прыярытэту загрузкі шаблону", "Setting the Template Status": "Налада статусу шаблону", "Setting the Top and Bottom Areas": "Налада верхняй і ніжняй абласцей", "Setting the Top and Bottom Positions": "Налада верхніх і ніжніх пазіцый", "Setting the Widget Appearance Options": "Налада параметраў знешняга выгляду віджэта", "Setting the Widget Default Options": "Налада параметраў віджэта па змаўчанні", "Setting the Widget Grid Options": "Налада параметраў сеткі віджэтаў", "Setting the Widget List Options": "Налада параметраў спіса віджэтаў", "Setting the Widget Menu Options": "Налада параметраў меню віджэта", "Setting the WooCommerce Layout Options": "Налада параметраў макета WooCommerce", "Settings": "Налады", "Shop": "Крама", "Shop and Search": "Крама і пошук", "Short Description": "Кароткае апісанне", "Show": "Паказваць", "Show %taxonomy%": "Паказваць %taxonomy%", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Паказваць банер для інфармавання наведвальнікаў вашага сайта пра выкарыстанне файлаў cookie на вашым сайце. Абярыце паміж простым апавяшчэннем або абавязковай згодай перад загрузкай файлаў cookie.", "Show a clear all filters button and display the active filters together with the filters in the dropdown or offcanvas.": "Show a clear all filters button and display the active filters together with the filters in the dropdown or offcanvas.", "Show a divider between grid columns.": "Паказваць раздзяляльнік паміж слупкамі сеткі.", "Show a divider between list columns.": "Паказваць раздзяляльнік паміж слупкамі спіса.", "Show a divider between text columns.": "Паказваць раздзяляльнік паміж тэкставымі слупкамі.", "Show a separator between the numbers.": "Паказваць раздзяляльнік паміж лічбамі.", "Show active filters": "Паказваць актыўныя фільтры", "Show an input field or an icon to open the search in a dropdown, dropbar or modal. To show live search results, assign a template in the Templates panel.": "Паказваць поле ўводу або значок для адкрыцця пошуку ў выпадальным меню, панэлі або мадальным вакне. Каб паказваць вынікі жывога пошуку, прызначце шаблон у панэлі шаблонаў.", "Show archive category title": "Паказваць загаловак архіўнай катэгорыі", "Show as disabled button": "Паказваць як неактыўную кнопку", "Show attribute filters": "Паказваць фільтры атрыбутаў", "Show author": "Паказваць аўтара", "Show below": "Паказваць пад", "Show below slider": "Паказваць пад слайдарам", "Show below slideshow": "Паказваць пад слайдшоў", "Show button": "Паказваць кнопку", "Show categories": "Паказваць катэгорыі", "Show Category": "Паказваць Катэгорыю", "Show close button": "Паказваць кнопку закрыцця", "Show close icon": "Паказваць значок закрыцця", "Show comment count": "Паказваць колькасць каментароў", "Show comments count": "Паказваць колькасць каментарыяў", "Show content": "Паказваць змесціва", "Show Content": "Паказваць Змесціва", "Show controls": "Паказваць элементы кіравання", "Show controls always": "Show controls always", "Show counter": "Show counter", "Show current page": "Паказваць бягучую старонку", "Show date": "Паказваць дату", "Show dividers": "Паказваць раздзяляльнікі", "Show drop cap": "Паказваць вялікую першую літару", "Show element only if dynamic content is empty": "Паказваць элемент толькі тады, калі дынамічнае змесціва пустое", "Show filter control for all items": "Паказваць элемент кіравання фільтра УСЕ", "Show headline": "Паказваць загаловак", "Show home link": "Паказваць спасылку Галоўная", "Show hover effect if linked.": "Паказваць эфект навядзення пры наяўнасці спасылкі.", "Show intro text": "Паказваць уступны тэкст", "Show Labels": "Паказваць пазнакі", "Show link": "Паказваць спасылку", "Show lowest price": "Паказваць найніжэйшую цану", "Show map controls": "Паказваць элементы кіравання картай", "Show message": "Паказаць паведамленне", "Show name fields": "Паказваць палі імёнаў", "Show navigation": "Паказваць навігацыю", "Show on hover only": "Паказваць толькі пры навядзенні", "Show optional dividers between nav or subnav items.": "Паказваць неабавязковыя раздзяляльнікі паміж элементамі навігацыі або паднавiгацыi.", "Show or hide content fields without the need to delete the content itself.": "Паказваць або хаваць змесціва палёў без выдалення самога змесціва.", "Show or hide fields in the meta text.": "Паказваць або хаваць палі ў метатэксце.", "Show or hide quantity.": "Паказваць або хаваць колькасць.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Паказваць або хаваць элемент на гэтай шырыні прылады і больш. Калі ўсе элементы схаваныя, адпаведна схаваюцца і слупкі, радкі і секцыі.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Паказваць або хаваць спасылку на галоўную старонку як першы элемент і бягучую старонку як апошні элемент у навігацыі-хлебных крошках.", "Show or hide the intro text.": "Паказваць або хаваць уступны тэкст.", "Show or hide the reviews link.": "Паказваць або хаваць спасылку на водгукі.", "Show or hide title.": "Паказваць або хаваць загаловак.", "Show out of stock text as disabled button for simple products.": "Show out of stock text as disabled button for simple products.", "Show parent icon": "Show parent icon", "Show points of interest": "Show points of interest", "Show popup on load": "Show popup on load", "Show price filter": "Show price filter", "Show product ordering": "Show product ordering", "Show quantity": "Паказаць колькасць", "Show rating": "Паказаць рэйтынг", "Show rating filter": "Паказваць фільтр рэйтынгу", "Show result count": "Show result count", "Show result ordering": "Паказваць сартаванне вынікаў", "Show reviews link": "Show reviews link", "Show Separators": "Show Separators", "Show space between links": "Show space between links", "Show Start/End links": "Show Start/End links", "Show system fields for single posts. This option does not apply to the blog.": "Show system fields for single posts. This option does not apply to the blog.", "Show system fields for the blog. This option does not apply to single posts.": "Show system fields for the blog. This option does not apply to single posts.", "Show tags": "Паказваць тэгі", "Show Tags": "Паказваць Тэгі", "Show the active filter count in parenthesis or as superscript.": "Паказваць колькасць актыўных фільтраў у дужках або ўверхнім індэксе.", "Show the content": "Паказваць змесціва", "Show the excerpt in the blog overview instead of the post text.": "Show the excerpt in the blog overview instead of the post text.", "Show the hover image": "Паказаць выяву пры навядзенні", "Show the hover video": "Паказаць відэа пры навядзенні", "Show the image": "Паказваць выяву", "Show the link": "Паказваць спасылку", "Show the lowest price instead of the price range.": "Паказваць найменшую цану замест дыяпазону цэн.", "Show the menu text next to the icon": "Паказваць тэкст меню побач з значком", "Show the meta text": "Паказваць мета-тэкст", "Show the navigation label instead of title": "Паказваць метку навігацыі замест загалоўка", "Show the navigation thumbnail instead of the image": "Паказваць мініяцюру навігацыі замест выявы", "Show the overlay only on hover or when the slide becomes active.": "Паказваць накладку толькі пры навядзенні або калі слайд становіцца актыўным.", "Show the sale price before or after the regular price.": "Паказваць цану са зніжкай перад або пасля звычайнай цаны.", "Show the subtitle": "Паказаць падзагаловак", "Show the title": "Паказаць загаловак", "Show the video": "Паказваць відэа", "Show title": "Паказаць загаловак", "Show Title": "Паказаць Назву", "Show Variations": "Паказваць варыяцыі", "Shrink": "Shrink", "Sidebar": "Пазіцыя Sidebar", "Single %post_type%": "Адзінкавы %post_type%", "Single Article": "Асобны артыкул", "Single Contact": "Старонка кантакту", "Single Post": "Асобнае паведамленне", "Single Post Pages": "Асобныя старонкі Паведамленняў", "Site": "Сайт", "Site Title": "Назва сайта", "Sixths": "6 слупкоў", "Sixths 1-5": "Sixths 1-5", "Sixths 5-1": "Sixths 5-1", "Size": "Памер", "Slide": "Слайд", "Slide all visible items at once": "Паказаць усе слайды адразу", "Slide Bottom 100%": "Slide Bottom 100%", "Slide Bottom Medium": "Slide Bottom Medium", "Slide Bottom Small": "Slide Bottom Small", "Slide Left": "Slide Left", "Slide Left 100%": "Slide Left 100%", "Slide Left Medium": "Slide Left Medium", "Slide Left Small": "Slide Left Small", "Slide Right": "Slide Right", "Slide Right 100%": "Slide Right 100%", "Slide Right Medium": "Slide Right Medium", "Slide Right Small": "Slide Right Small", "Slide Top": "Slide Top", "Slide Top 100%": "Slide Top 100%", "Slide Top Medium": "Slide Top Medium", "Slide Top Small": "Slide Top Small", "Slidenav": "Slidenav", "Slider": "Слайдар", "Slideshow": "Слайд-шоў", "Slug": "Slug", "Small": "Small", "Small (Phone Landscape)": "Small (Phone Landscape)", "Smart Search": "Разумны пошук", "Smart Search Item": "Элемент Разумнага пошуку", "Social": "Сацыяльныя сеткі", "Social Icons": "Сацыяльныя значкі", "Social Icons Gap": "Social Icons Gap", "Social Icons Size": "Памер сацыяльных значкоў", "Soft-light": "Soft-light", "Source": "Крыніца", "Split Items": "Падзяліць элементы", "Split the dropdown into columns.": "Падзяліць выпадальны спіс на слупкі.", "Spread": "Spread", "Square": "Square", "Stable": "Stable", "Stack columns on small devices or enable overflow scroll for the container.": "Stack columns on small devices or enable overflow scroll for the container.", "Stacked": "Скласці ў 1 слупок", "Stacked (Name fields as grid)": "Stacked (Name fields as grid)", "Stacked Center A": "Stacked Center A", "Stacked Center B": "Stacked Center B", "Stacked Center C": "Stacked Center C", "Stacked Center Split A": "Stacked Center Split A", "Stacked Center Split B": "Stacked Center Split B", "Stacked Justify": "Stacked Justify", "Stacked Left": "Stacked Left", "Start": "Старт", "Start with all items closed": "Start with all items closed", "Starts with": "Пачынаецца з", "State or County": "Рэгіён альбо краіна", "Static": "Static", "Status": "Статус", "Stick the column or its elements to the top of the viewport while scrolling down. They will stop being sticky when they reach the bottom of the containing column, row or section. Optionally, blend all elements with the page content.": "Прыляпіце калонку або яе элементы да верху акна прагляду пры пракрутцы ўніз. Яны перастануць быць ліпкімі, калі дасягнуць нізу ўтрымліваючай калонкі, радка або секцыі. Па жаданні можна змяшаць усе элементы са змесцівам старонкі.", "Stick the navbar at the top of the viewport while scrolling or only when scrolling up.": "Прыляпіце навігацыйную панэль да верху акна прагляду падчас пракруткі або толькі пры пракрутцы ўверх.", "Sticky": "Ліпкі", "Sticky Effect": "Эфект фіксацыі. Sticky", "Sticky on scroll up": "Фіксацыя пры пракрутцы ўверх", "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.": "Фіксаваная секцыя будзе перакрыта наступнай секцыяй пры пракрутцы. Паказаць секцыю за папярэдняй секцыяй.", "Stretch the dropdown to the width of the navbar or the navbar container.": "Расцягніце выпадаючы спіс да шырыні навігацыйнай панэлі або яе кантэйнера.", "Stretch the modal to the width of the navbar or the navbar container, or show a full modal window.": "Расцягніце мадальнае акно да шырыні навігацыйнай панэлі або яе кантэйнера, або пакажыце поўнае мадальнае акно.", "Stretch the panel to match the height of the grid cell.": "Расцягніце панэль да вышыні ячэйкі сеткі.", "Striped": "У палоску", "Style": "Стыль", "styles": "стылі", "Subgrid Breakpoint": "Subgrid Breakpoint", "Sublayout": "Падмакет", "Subnav": "Субнавігацыя", "Subnav (Nav)": "Субнавігацыя (Nav)", "Subnav Divider (Nav)": "Subnav Divider (Nav)", "Subnav Pill (Nav)": "Subnav Pill (Nav)", "Subtitle": "Падзагаловак", "Subtract height above": "Subtract height above", "Subtract height above row": "Subtract height above row", "Subtract height above section": "Subtract height above section", "Success": "Success", "Superscript": "Надрадковы знак", "Support": "Падтрымка", "Support Center": "Цэнтр падтрымкі", "SVG Color": "Колер SVG", "Switch prices": "Пераключальнік цаны", "Switcher": "Switcher", "Syntax Highlighting": "Syntax Highlighting", "System Assets": "Сістэмныя актывы", "System Check": "Праверка сістэмы", "Tab": "Tab", "Table": "Табліца", "Table Head": "Шапка табліцы", "Tablet Landscape": "Tablet Landscape", "Tabs": "Tabs", "Tag": "Тэг", "Tag Item": "Элемент тэгу", "Tag Order": "Парадак тэгаў", "Tagged Items": "Элементы з тэгамі", "Tags": "Тэгі", "Tags are only loaded from the selected parent tag.": "Tags are only loaded from the selected parent tag.", "Tags Operator": "Аператар тэгаў", "Target": "Target", "Taxonomy Archive": "Taxonomy Archive", "Teaser": "Teaser", "Telephone": "Тэлефон", "Template": "Шаблон", "Templates": "Шаблоны", "Term ID": "Term ID", "Term Order": "Term Order", "Tertiary": "Tertiary", "Text": "Тэкст", "Text Alignment": "Выраўноўванне тэксту", "Text Alignment Breakpoint": "Text Alignment Breakpoint", "Text Alignment Fallback": "Text Alignment Fallback", "Text Bold": "Тэкст Bold", "Text Color": "Колер тэксту", "Text Large": "ТэкстLarge", "Text Lead": "Тэкст Lead", "Text Meta": "Тэкст Meta", "Text Muted": "Тэкст Muted", "Text Small": "Тэкст Small", "Text Style": "Стыль тэксту", "The Accordion Element": "Элемент Accordion", "The Alert Element": "Элемент Alert", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.", "The animation starts and stops depending on the section position in the viewport. Alternatively, for example for sticky sections, use the position of next section.": "The animation starts and stops depending on the section position in the viewport. Alternatively, for example for sticky sections, use the position of next section.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.": "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.", "The animation starts when the row enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the row's height.": "The animation starts when the row enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the row's height.", "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.": "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.", "The Area Element": "The Area Element", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.", "The Breadcrumbs Element": "The Breadcrumbs Element", "The builder is not available on this page. It can only be used on pages, posts and categories.": "The builder is not available on this page. It can only be used on pages, posts and categories.", "The Button Element": "The Button Element", "The changes you made will be lost if you navigate away from this page.": "The changes you made will be lost if you navigate away from this page.", "The Code Element": "The Code Element", "The Countdown Element": "The Countdown Element", "The current PHP version %version% is outdated. Upgrade the installation, preferably to the <a href=\"https://php.net\" target=\"_blank\">latest PHP version</a>.": "The current PHP version %version% is outdated. Upgrade the installation, preferably to the <a href=\"https://php.net\" target=\"_blank\">latest PHP version</a>.", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.", "The Description List Element": "The Description List Element", "The Divider Element": "The Divider Element", "The Gallery Element": "The Gallery Element", "The Grid Element": "The Grid Element", "The Headline Element": "The Headline Element", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.", "The Icon Element": "Элемент Значок", "The Image Element": "The Image Element", "The List Element": "The List Element", "The list shows pages and is limited to 50. Use the search to find a specific page or search for a post of any post type to give it an individual layout.": "The list shows pages and is limited to 50. Use the search to find a specific page or search for a post of any post type to give it an individual layout.", "The list shows uncategorized articles and is limited to 50. Use the search to find a specific article or an article from another category to give it an individual layout.": "Спіс паказвае некатэгарызаваныя артыкулы і абмежаваны 50 запісамі. Выкарыстоўвайце пошук, каб знайсці канкрэтны артыкул або артыкул з іншай катэгорыі, каб прысвоіць яму індывідуальнае афармленне.", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.", "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.": "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.", "The Map Element": "The Map Element", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "The masonry effect creates a layout free of gaps even if grid items have different heights. ", "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.": "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.", "The Module Element": "The Module Element", "The module maximum width.": "The module maximum width.", "The Nav Element": "The Nav Element", "The Newsletter Element": "The Newsletter Element", "The Overlay Element": "The Overlay Element", "The Overlay Slider Element": "The Overlay Slider Element", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "The page has been updated by %modifiedBy%. Discard your changes and reload?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?", "The Pagination Element": "The Pagination Element", "The Panel Element": "Элемент Панэлі", "The Panel Slider Element": "The Panel Slider Element", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels.": "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels.", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.": "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.", "The Popover Element": "The Popover Element", "The Position Element": "The Position Element", "The Quotation Element": "Элемент Цытаты", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.", "The Search Element": "Элемент Пошуку", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport or to fill the available space in the column.<br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport or to fill the available space in the column.<br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.", "The Slideshow Element": "The Slideshow Element", "The Social Element": "The Social Element", "The Sublayout Element": "The Sublayout Element", "The Subnav Element": "The Subnav Element", "The Switcher Element": "The Switcher Element", "The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.": "The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.", "The Table Element": "The Table Element", "The template is only assigned to %post_types_lower% with the selected terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "The template is only assigned to %post_types_lower% with the selected terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.", "The template is only assigned to %taxonomies% if the selected terms are set in the URL. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "The template is only assigned to %taxonomies% if the selected terms are set in the URL. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.", "The template is only assigned to articles from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "Шаблон прызначаецца толькі для артыкулаў з выбраных катэгорый. Выкарыстоўвайце клавішы <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі катэгорый.", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.", "The template is only assigned to categories if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Шаблон прызначаецца толькі для катэгорый, калі выбраныя тэгі (цэтлікі) выбраныя ў элеменце меню. Выкарыстоўвайце клавішы <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі тэгаў.", "The template is only assigned to contacts from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "The template is only assigned to contacts from the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.", "The template is only assigned to contacts with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "The template is only assigned to contacts with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.", "The template is only assigned to the selected %taxonomies%. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple %taxonomies%.": "The template is only assigned to the selected %taxonomies%. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple %taxonomies%.", "The template is only assigned to the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.": "The template is only assigned to the selected categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories.", "The template is only assigned to the selected languages.": "The template is only assigned to the selected languages.", "The template is only assigned to the selected pages.": "Шаблон прызначаецца толькі для выбраных старонак.", "The template is only assigned to the view if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Шаблон будзе паказаны толькі ў тым выпадку, калі выбраныя тэгі (цэтлікі) усталяваны ў элеменце меню. Выкарыстоўвайце клавішы <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі тэгаў.", "The Text Element": "Элемент Тэкст", "The Totop Element": "Элемент Уверх", "The Video Element": "Элемент Відэа", "The Widget Element": "Элемент Віджэт", "The widget maximum width.": "Максімальная шырыня віджэта.", "The width of the grid column that contains the module.": "The width of the grid column that contains the module.", "The width of the grid column that contains the widget.": "The width of the grid column that contains the widget.", "The YOOtheme API key, which enables <span class=\"uk-text-nowrap\">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "The YOOtheme API key, which enables <span class=\"uk-text-nowrap\">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.", "Theme Settings": "Налады тэмы", "Thirds": "Thirds", "Thirds 1-2": "Thirds 1-2", "Thirds 2-1": "Thirds 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Гэтая папка захоўвае выявы, загружаныя падчас выкарыстання макетаў з бібліятэкі YOOtheme Pro. Яна знаходзіцца ўнутры папкі 'images' Joomla.", "This is only used, if the thumbnail navigation is set.": "Ужываецца толькі калі ўключана навігацыя па мініяцюрах.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Гэты макет утрымлівае медыяфайл, які неабходна загрузіць у медыятэку сайта. |||| Гэты макет утрымлівае %smart_count% медыяфайлаў, якія неабходна загрузіць у медыятэку сайта.", "This option doesn't apply unless a URL has been added to the item.": "Гэтая опцыя дзейнічае толькі калі да элемента дададзены URL.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Гэтая опцыя дзейнічае толькі калі да элемента дададзены URL. Будзе звязаны толькі змесціва элемента.", "This option is only used if the thumbnail navigation is set.": "Гэтая опцыя выкарыстоўваецца толькі калі ўключана навігацыя па мініяцюрах.", "Thumbnail": "Мініяцюра", "Thumbnail Inline SVG": "Thumbnail Inline SVG", "Thumbnail SVG Color": "Колер мініяцюры SVG", "Thumbnail Width/Height": "Шырыня/Вышыня мініяцюры", "Thumbnail Wrap": "Thumbnail Wrap", "Thumbnails": "Thumbnails", "Thumbnav": "Thumbnav", "Thumbnav Inline SVG": "Thumbnav Inline SVG", "Thumbnav SVG Color": "Thumbnav SVG Color", "Thumbnav Wrap": "Thumbnav Wrap", "Tile Checked": "Tile Checked", "Tile Default": "Tile Default", "Tile Muted": "Tile Muted", "Tile Primary": "Tile Primary", "Tile Secondary": "Tile Secondary", "Time Archive": "Time Archive", "Title": "Загаловак", "title": "загаловак", "Title Decoration": "Title Decoration", "Title Margin": "Title Margin", "Title Parallax": "Title Parallax", "Title Style": "Стыль загалоўка", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Title styles differ in font-size but may also come with a predefined color, size and font.", "Title Width": "Title Width", "Title, Image, Meta, Content, Link": "Title, Image, Meta, Content, Link", "Title, Meta, Content, Link, Image": "Title, Meta, Content, Link, Image", "To left": "To left", "To right": "To right", "To Top": "Уверх", "Toggle Dropbar": "Toggle Dropbar", "Toggle Dropdown": "Toggle Dropdown", "Toggle Modal": "Toggle Modal", "Toolbar": "Toolbar", "Toolbar Left End": "Toolbar Left End", "Toolbar Left Start": "Toolbar Left Start", "Toolbar Right End": "Toolbar Right End", "Toolbar Right Start": "Toolbar Right Start", "Top": "Пазіцыя Top", "Top and Bottom": "Top and Bottom", "Top Center": "Top Center", "Top Left": "Top Left", "Top Offset": "Top Offset", "Top Right": "Top Right", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Выявы, выраўнаваныя зверху, знізу, злева або справа, могуць быць прымацаваны да краю панэлі. Калі выява выраўнаваная злева або справа, яна таксама пашырыцца, каб пакрыць увесь прастор.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Выявы, выраўнаваныя зверху, злева або справа, могуць быць прымацаваны да краю панэлі. Калі выява выраўнаваная злева або справа, яна таксама пашырыцца, каб пакрыць увесь прастор.", "Total Views": "Агульная колькасць праглядаў", "Touch Icon": "Значок для сэнсарных прылад Apple", "Transform": "Трансфармацыя", "Transform Origin": "Кропка трансфармацыі", "Transform the element into another element while keeping its content and settings. Unused content and settings are removed. Transforming into a preset only keeps the content but adopts all preset settings.": "Пераўтварыце элемент у іншы, захоўваючы яго змест і налады. Невыкарыстаны змест і налады будуць выдалены. Пераўтварэнне ў шаблон захоўвае толькі змест, але прымяняе ўсе налады шаблону.", "Transition": "Анімацыя пераходу", "Translate X": "Translate X", "Translate Y": "Translate Y", "Transparent Background": "Празрысты фон", "Transparent Header": "Празрыстая пазіцыя Header", "Tuesday, Aug 06 (l, M d)": "Аўторак, Жні 06 (l, M d)", "Type": "Тып", "ul": "ul", "Understanding Status Icons": "Understanding Status Icons", "Understanding the Layout Structure": "Understanding the Layout Structure", "Unknown %type%": "Невядомы %type%", "Unknown error.": "Невядомая памылка.", "Unpublished": "Неапублікавана", "Updating YOOtheme Pro": "Абнаўленне YOOtheme Pro", "Upload": "Запампаваць", "Upload a background image.": "Запампаваць фонавую выяву.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Upload an optional background image that covers the page. It will be fixed while scrolling.", "Upload Layout": "Запампаваць макет", "Upload Preset": "Запампаваць Прэсэт", "Upload Style": "Запампаваць Стыль", "Upsell Products": "Upsell Products", "URL": "URL", "Url": "Url", "URL Protocol": "URL Protocol", "Use a numeric pagination or previous/next links to move between blog pages.": "Выкарыстоўвайце лічбавую пагінацыю або спасылкі «папярэдняя/наступная» для пераходу паміж старонкамі блогу.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Выкарыстоўвайце неабавязковую мінімальную вышыню, каб прадухіліць змяншэнне выяваў у параўнанні са змесцівам на маленькіх прыладах.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Выкарыстоўвайце неабавязковую мінімальную вышыню, каб слайдэр не станавіўся меншым за свой змест на маленькіх прыладах.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Выкарыстоўвайце неабавязковую мінімальную вышыню, каб слайдшоў не станавілася меншым за свой змест на маленькіх прыладах.", "Use as breakpoint only": "Выкарыстоўваць толькі як пункт пералому (breakpoint)", "Use double opt-in.": "Use double opt-in.", "Use excerpt": "Use excerpt", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.", "Use the background color in combination with blend modes.": "Выкарыстоўвайце колер фону ў камбінацыі з рэжымамі змешвання.", "User": "Карыстальнік", "User Group": "Група карыстальнікаў", "User Groups": "Групы карыстальнікаў", "Username": "Імя карыстальніка", "Users": "Карыстальнікі", "Users are only loaded from the selected roles. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple roles.": "Карыстальнікі загружаюцца толькі з абраных роляў. Выкарыстоўвайце клавішу <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі роляў.", "Users are only loaded from the selected user groups. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple user groups.": "Карыстальнікі загружаюцца толькі з абраных груп карыстальнікаў. Выкарыстоўвайце клавішу <kbd>shift</kbd> або <kbd>ctrl/cmd</kbd>, каб выбраць некалькі груп.", "Using Advanced Custom Fields": "Выкарыстоўванне пашыраных Наладжваемых палёў", "Using Content Fields": "Выкарыстанне палёў змесціва", "Using Content Sources": "Выкарыстанне крыніц змесціва", "Using Custom Fields": "Выкарыстанне карыстальніцкіх палёў", "Using Custom Post Type UI": "Выкарыстанне карыстальніцкага інтэрфейсу тыпу запісу (UI)", "Using Custom Post Types": "Выкарыстанне карыстальніцкіх тыпаў запісаў", "Using Custom Sources": "Выкарыстанне карыстальніцкіх крыніц", "Using Dynamic Conditions": "Выкарыстанне дынамічных умоў", "Using Dynamic Multiplication": "Выкарыстанне Dynamic Multiplication", "Using Elements": "Выкарыстанне элементаў", "Using External Sources": "Выкарыстанне знешніх крыніц", "Using Images": "Выкарыстанне выяў", "Using Links": "Выкарыстанне спасылак", "Using Menu Location Options": "Выкарыстанне параметраў размяшчэння меню", "Using Menu Locations": "Выкарыстанне размяшчэнняў меню", "Using Menu Position Options": "Выкарыстанне параметраў пазіцыі меню", "Using Menu Positions": "Выкарыстанне пазіцый меню", "Using Module Positions": "Выкарыстанне пазіцый модуляў", "Using My Layouts": "Выкарыстанне маіх макетаў", "Using My Presets": "Выкарыстанне маіх прэсэтаў", "Using Page Sources": "Выкарыстанне крыніц Старонак", "Using Parent Sources": "Выкарыстанне Parent Sources", "Using Powerful Posts Per Page": "Выкарыстанне Магутных Паведамленняў на Старонцы", "Using Pro Layouts": "Выкарыстанне Pro-макетаў", "Using Pro Presets": "Выкарыстанне Pro-прэсэтаў", "Using Related Sources": "Выкарыстанне звязаных крыніц", "Using Site Sources": "Выкарыстанне крыніц сайта", "Using the Before and After Field Options": "Выкарыстанне параметраў палёў \"да\" і \"пасля\"", "Using the Builder Module": "Выкарыстанне модуля Builder", "Using the Builder Widget": "Выкарыстанне віджэта Builder", "Using the Categories and Tags Field Options": "Выкарыстанне параметраў палёў катэгорый і тэгаў", "Using the Content Field Options": "Выкарыстанне параметраў поля змесціва", "Using the Content Length Field Option": "Выкарыстанне параметру поля Даўжыні змесціва", "Using the Contextual Help": "Выкарыстанне кантэкстуальнай дапамогі", "Using the Date Format Field Option": "Выкарыстанне опцыі поля Фармат даты", "Using the Device Preview Buttons": "Выкарыстанне кнопак папярэдняга прагляду на прыладзе", "Using the Dropdown Menu": "Выкарыстанне выпадальнага меню", "Using the Element Finder": "Выкарыстанне сродку пошуку элементаў", "Using the Footer Builder": "Выкарыстанне канструктара ніжняга калантытула (Footer)", "Using the Media Manager": "Выкарыстанне мэнэджара медыяфайлаў", "Using the Mega Menu Builder": "Выкарыстанне канструктара Мега-меню", "Using the Menu Module": "Выкарыстанне модуля меню", "Using the Menu Widget": "Выкарыстанне віджэта меню", "Using the Meta Field Options": "Выкарыстанне параметраў мета-палёў", "Using the Page Builder": "Выкарыстанне канструктара старонак", "Using the Search and Replace Field Options": "Выкарыстанне параметраў пошуку і замены палёў", "Using the Sidebar": "Выкарыстанне бакавой панэлі Sidebar", "Using the Tags Field Options": "Выкарыстанне параметраў палёў тэгаў", "Using the Teaser Field Options": "Выкарыстанне параметраў поля Teaser", "Using the Toolbar": "Выкарыстанне панэлі інструментаў", "Using the Unsplash Library": "Выкарыстанне бібліятэкі Unsplash", "Using the WooCommerce Builder Elements": "Выкарыстанне элементаў канструктара WooCommerce", "Using the WooCommerce Page Builder": "Выкарыстанне канструктара старонак WooCommerce", "Using the WooCommerce Pages Element": "Выкарыстанне элемента старонак WooCommerce", "Using the WooCommerce Product Stock Element": "Выкарыстанне элемента таварнага запасу WooCommerce", "Using the WooCommerce Products Element": "Выкарыстанне элемента Прадуктаў WooCommerce", "Using the WooCommerce Related and Upsell Products Elements": "Выкарыстанне элементаў Звязаных і Дадатковых прадуктаў WooCommerce", "Using the WooCommerce Style Customizer": "Using the WooCommerce Style Customizer", "Using the WooCommerce Template Builder": "Выкарыстанне канструктара шаблонаў WooCommerce", "Using Toolset": "Выкарыстанне Toolset", "Using Widget Areas": "Выкарыстанне абласцей віджэтаў", "Using WooCommerce Dynamic Content": "Выкарыстанне дынамічнага змесціва WooCommerce", "Using WordPress Category Order and Taxonomy Terms Order": "Выкарыстанне сартавання катэгорый і тэрмінаў таксаноміі WordPress", "Using WordPress Popular Posts": "Выкарыстанне папулярных паведамленняў WordPress", "Using WordPress Post Types Order": "Выкарыстанне сартавання тыпаў паведамленняў WordPress", "Value": "Значэнне", "Values": "Значэнні", "Variable Product": "Пераменны прадукт", "Velocity": "Хуткасць змены слайдаў", "Version %version%": "Версія %version% | Версія перакладу на беларускую мову ад 08.11.2025 | @Joomlablr", "Vertical": "Вертыкальны", "Vertical Alignment": "Вертыкальнае выраўноўванне", "Vertical navigation": "Вертыкальная навігацыя", "Vertically align the elements in the column.": "Выраўнаваць па вертыкалі элементы ў слупку.", "Vertically center grid items.": "Vertically center grid items.", "Vertically center table cells.": "Вяртаць вёртэльна цэнтраваныя ячэйкі табліцы.", "Vertically center the image.": "Vertically center the image.", "Vertically center the navigation and content.": "Вяртаць вёртэльна цэнтраваныя навігацыю і змесціва.", "Video": "Відэа", "Video Autoplay": "Аўтаматычнае прайграванне відэа", "Video Title": "Загаловак відэа", "Videos": "Відэа", "View Photos": "Прагляд фатаграфій", "Viewport": "Viewport", "Viewport (Subtract Next Section)": "Viewport (Subtract Next Section)", "Viewport Height": "Viewport Height", "Visibility": "Бачнасць", "Visible Large (Desktop)": "Visible Large (Desktop)", "Visible Medium (Tablet Landscape)": "Visible Medium (Tablet Landscape)", "Visible on this page": "Бачныя на гэтай старонцы", "Visible Small (Phone Landscape)": "Visible Small (Phone Landscape)", "Visible X-Large (Large Screens)": "Visible X-Large (Large Screens)", "Visual": "Visual", "Votes": "Галасы", "Warning": "Warning", "WebP image format isn't supported. Enable WebP support in the <a href=\"https://php.net/manual/en/image.installation.php\" target=\"_blank\">GD extension</a>.": "Фармат выяваў WebP не падтрымліваецца. Папрасіце свайго хостэра ўключыць падтрымку WebP у <a href=\"https://php.net/manual/en/image.installation.php\" target=\"_blank\">бібліятэцы GD</a>.", "Website": "Вэб-сайт", "Website Url": "Url вэб-сайта", "What's New": "Што новага", "When using cover mode, you need to set the text color manually.": "When using cover mode, you need to set the text color manually.", "White": "Белы", "Whole": "Цалкам", "Widget": "Віджэт", "Widget Area": "Вобласць віджэта", "Widget Theme Settings": "Налады віджэтаў тэмы", "Widgets": "Віджэты", "Widgets and Areas": "Віджеты і Вобласці", "Width": "Шырыня", "Width 100%": "Шырыня 100%", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Width and height will be flipped accordingly, if the image is in portrait or landscape format.", "Width/Height": "Шырыня/Вышыня", "With Clear all button": "З кнопкай \"Ачысціць усё\"", "With mandatory consent": "З абавязковай згодай", "Working with Multiple Authors": "Праца з некалькімі аўтарамі", "Wrap with nav element": "Абгарнуць элементам навігацыі", "X": "X", "X-Large": "X-Large", "X-Large (Large Screens)": "X-Large (Вялікія экраны)", "X-Small": "X-Small", "Y": "Y", "Year Archive": "Год архіва", "YOOtheme API Key": "YOOtheme API ключ", "YOOtheme Help": "Дапаможны цэнтр YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro цалкам працаздольны і гатовы да старту.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro не працуе. Усе крытычныя праблемы павінны быць выпраўлены.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro працуе, але ёсць праблемы, якія неабходна выправіць каб разблакаваць функцыі і павысіць прадукцыйнасць.", "Z Index": "Z Index", "Zoom": "Маштаб" }theme/languages/it_IT.json000064400000462676151666572140011561 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Seleziona -", "- Select Module -": "- Seleziona modulo -", "- Select Position -": "- Seleziona Posizione -", "- Select Widget -": "- Seleziona Widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" è già presente nella libreria. L'elemento verrà sovrascritto al salvataggio.", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% Elemento", "%label% - %group%": "%label% - %group%", "%label% Location": "%label% Posizione", "%label% Position": "Posizione %label%", "%name% already exists. Do you really want to rename?": "%name% già esiste. Vuoi realmente rinominarlo?", "%post_type% Archive": "%post_type% Archivio", "%s is already a list member.": "%s è già un membro della lista.", "%s of %s": "%s di %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s è stato eliminato in modo permanente e non può essere reimportato. Il contatto deve iscriversi nuovamente per rientrare nella lista.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Collezione |||| %smart_count% Collezioni", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Elemento |||| %smart_count% Elementi", "%smart_count% File |||| %smart_count% Files": "%smart_count% File |||| %smart_count% File", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% File selezionato |||| %smart_count% Files selezionati", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Icona |||| %smart_count% Icone", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Layout |||| %smart_count% Layout", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% media file download fallito: |||| %smart_count% media file downloads falliti:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Foto |||| %smart_count% Foto", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Valore preimpostato |||| %smart_count% Valori preimpostati", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Stile |||| %smart_count% Stili", "%smart_count% User |||| %smart_count% Users": "%smart_count% Utente |||| %smart_count% Utenti", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% sono solo caricate dalla persona responsabile selezionata %taxonomy%.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% Preimpostati", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 Colonna", "1 Column Content Width": "1 Larghezza del contenuto della colonna", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Columns": "2 Colonne", "20%": "20%", "25%": "25%", "2X-Large": "2X-Largo", "3 Columns": "3 Colonne", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3X-Large": "3X-Largo", "4 Columns": "4 Colonne", "40%": "40%", "5 Columns": "5 Colonne", "50%": "50%", "6 Columns": "6 Colonne", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "È consigliato un limite di memoria più alto. Imposta il <code>memory_limit</code> a 128M nella <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">configurazione PHP</a>.", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "È consigliato un limite di upload maggiore. Imposta il <code>upload_max_filesize</code> a 8M nella <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">configurazione PHP</a>.", "About": "Informazioni", "Above Content": "Sopra il contenuto", "Absolute": "Assoluto", "Accessed": "Accesso", "Accordion": "Accordion", "Active": "Attivo", "Active item": "Elemento attivo", "Add": "Aggiungi", "Add a colon": "Aggiungi una colonna", "Add a leader": "Aggiungi leader", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Aggiungi un effetto di parallasse o aggiusta lo sfondo rispetto al viewport mentre si scorre la pagina.", "Add a parallax effect.": "Aggiungi un effetto parallasse.", "Add a stepless parallax animation based on the scroll position.": "Aggiungere un'animazione di parallasse continua in base alla posizione di scorrimento.", "Add animation stop": "Aggiungi stop animazione", "Add bottom margin": "Aggiungi margine inferiore", "Add clipping offset": "Aggiungi l'offset di taglio", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Aggiungi JavaScript personalizzato al tuo sito. Il tag <code><script></code> non è necessario.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Aggiungere un JavaScript personalizzato che imposta i cookie. Verrà caricato dopo aver dato il consenso. Il tag <code><script></code> non è necessario.", "Add Element": "Aggiungi elemento", "Add extra margin to the button.": "Aggiungi margine extra al pulsante.", "Add Folder": "Aggiungi cartella", "Add Item": "Aggiungi voce", "Add margin between": "Aggiungi margine tra", "Add Media": "Aggiungi Media", "Add Menu Item": "Aggiungi voce di menu", "Add Module": "Aggiungi modulo", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Aggiungere più stop per definire l'inizio, il mezzo e la fine della sequenza di animazione. È possibile specificare una percentuale per posizionare gli arresti lungo la sequenza di animazione.", "Add Row": "Aggiungi riga", "Add Section": "Aggiungi sezione", "Add text after the content field.": "Aggiungi testo dopo il contenuto.", "Add text before the content field.": "Aggiungi testo prima del contenuto.", "Add to Cart": "Aggiungi al carrello", "Add to Cart Link": "Aggiungi link al carrello", "Add to Cart Text": "Testo \"Aggiungi al carrello\"", "Add top margin": "Aggiungi margine superiore", "Adding a New Page": "Aggiungere una nuova pagina", "Adding the Logo": "Aggiungi il logo", "Adding the Search": "Aggiungi la Ricerca", "Adding the Social Icons": "Aggiungi le icone social", "Additional Information": "Informazioni aggiuntive", "Address": "Indirizzo", "Advanced": "Avanzate", "Advanced WooCommerce Integration": "Integrazione WooCommerce Avanzata", "After": "Dopo", "After 1 Item": "Dopo 1 oggetto", "After 10 Items": "Dopo 10 oggetti", "After 2 Items": "Dopo 2 oggetti", "After 3 Items": "Dopo 3 oggetti", "After 4 Items": "Dopo 4 oggetti", "After 5 Items": "Dopo 5 oggetti", "After 6 Items": "Dopo 6 oggetti", "After 7 Items": "Dopo 7 oggetti", "After 8 Items": "Dopo 8 oggetti", "After 9 Items": "Dopo 9 oggetti", "After Display Content": "Dopo la visualizzazione del contenuto", "After Display Title": "Dopo la visualizzazione del titolo", "After Submit": "Dopo l'invio", "Alert": "Avviso", "Alias": "Alias", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Allineare le tendine alla rispettiva voce di menu o alla barra di navigazione. È possibile mostrarle in una sezione a tutta larghezza chiamata dropbar, visualizzare un'icona per indicare le tendine e lasciare che le voci di testo si aprano con un clic e non con il passaggio del mouse.", "Align image without padding": "Allinea l'immagine senza spaziatura", "Align the filter controls.": "Allinea i controlli per i filtri.", "Align the image to the left or right.": "Allinea l'immagine a sinistra o a destra.", "Align the image to the top or place it between the title and the content.": "Allinea l'immagine in alto o posizionala tra il titolo e il contenuto.", "Align the image to the top, left, right or place it between the title and the content.": "Allinea l'immagine in alto, a sinistra, a destra oppure posizionala tra il titolo ed il contenuto.", "Align the meta text.": "Allinea il testo meta.", "Align the navigation items.": "Allinea gli elementi della navigazione.", "Align the section content vertically, if the section height is larger than the content itself.": "Allinea il contenuto di sezione verticalmente, se l'altezza della sezione è più larga del contenuto stesso.", "Align the title and meta text as well as the continue reading button.": "Allinea il titolo e il meta testo, nonché il pulsante di lettura continua.", "Align the title and meta text.": "Allinea il titolo e il meta testo.", "Align the title to the top or left in regards to the content.": "Allinea il titolo in alto o a sinistra rispetto al contenuto.", "Align to navbar": "Allinea alla navbar", "Alignment": "Allineamento", "Alignment Breakpoint": "Breakpoint dell'allineamento", "Alignment Fallback": "Fallback dell'allineamento", "All %filter%": "Tutti %filter%", "All %label%": "Tutti %label%", "All backgrounds": "Tutti gli sfondi", "All colors": "Tutti i colori", "All except first page": "Tutto ad eccezione della prima pagina", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Tutte le immagini sono concesse sotto licenza <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> che significa che puoi copiarle, modificarle, distribuirle ed utilizzarle gratuitamente, anche a fini commerciali, senza richiederne il permesso.", "All Items": "Tutti gli elementi", "All layouts": "Tutti i layout", "All pages": "Tutte le pagine", "All presets": "Tutte le preimpostazioni", "All styles": "Tutti gli stili", "All topics": "Tutti gli argomenti", "All types": "Tutti i tipi", "All websites": "Tutti i siti web", "All-time": "Tutto il tempo", "Allow mixed image orientations": "Permetti orientamento immagini misto", "Allow multiple open items": "Permetti l'apertura di elementi multipli", "Alphabetical": "Alfabetico", "Alphanumeric Ordering": "Ordinamento alfanumerico", "Alt": "Alt", "Alternate": "Alternato", "Always": "Sempre", "Animate background only": "Anima solo sfondo", "Animate items": "Anima gli elementi", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animare le proprietà a valori specifici. Aggiungere più stop per definire i valori di inizio, metà e fine lungo la sequenza di animazione. Eventualmente, specifica la percentuale per posizionare gli stop lungo la sequenza di animazione. Translate può avere unità <code>%</code>, <code>vw</code> e <code>vh</code> opzionali.", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animare le proprietà a valori specifici. Aggiungere più stop per definire i valori di inizio, metà e fine lungo la sequenza di animazione. Eventualmente, specifica la percentuale per posizionare gli stop lungo la sequenza di animazione. Translate può avere unità <code>%</code>, <code>vw</code> e <code>vh</code> opzionali.", "Animate strokes": "Anima tratti", "Animation": "Animazione", "Animation Delay": "Ritardo delle animazioni", "Animations": "Animazioni", "Any": "Qualsiasi", "Any Joomla module can be displayed in your custom layout.": "Qualunque modulo Joomla può essere visualizzato nel tuo layout personalizzato.", "Any WordPress widget can be displayed in your custom layout.": "Qualunque widget WordPress può essere visualizzato nel tuo layout personalizzato.", "API Key": "Chiave API", "Apply a margin between the navigation and the slideshow container.": "Applicare un margine tra la navigazione e il contenitore della slideshow.", "Apply a margin between the overlay and the image container.": "Applica un margine tra la sovrapposizione e il contenitore dell'immagine.", "Apply a margin between the slidenav and the slider container.": "Applica un margine tra la slidenav e il contenitore dello slider.", "Apply a margin between the slidenav and the slideshow container.": "Applica un margine tra la slidenav e il contenitore dello slideshow.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Applica un'animazione agli elementi una volta entrati nella finestra. Le animazioni della diapositiva possono attivarsi con un offset fisso o al raggiungimento del 100% delle dimensioni dell'elemento.", "Archive": "Archivio", "Are you sure?": "Sei sicuro?", "ARIA Label": "Etichetta ARIA", "Article": "Articolo", "Article Count": "Conteggio articoli", "Article Order": "Ordina articolo", "Articles": "Articoli", "As notification only ": "Solo come notifica ", "Ascending": "Ascenente", "Assigning Modules to Specific Pages": "Assegna un modulo alle pagine specificate", "Assigning Templates to Pages": "Assegna template alle pagine", "Assigning Widgets to Specific Pages": "Assegna Widget alle pagine", "Attach the image to the drop's edge.": "Allega l'immagine al bordo della tendina.", "Attention! Page has been updated.": "Attenzione! La pagina è stata aggiornata.", "Attribute Slug": "Attributo Slug", "Attribute Terms": "Attributo Terms", "Attribute Terms Operator": "Termini di attributo Operatore", "Attributes": "Attributi", "Aug 6, 1999 (M j, Y)": "Aug 6, 1999 (M j, Y)", "August 06, 1999 (F d, Y)": "August 06, 1999 (F d, Y)", "Author": "Autore", "Author Archive": "Archivio autore", "Author Link": "Collegamento autore", "Auto": "Auto", "Auto-calculated": "Auto-calcolato", "Autoplay": "Autoplay", "Autoplay Interval": "Autoplay Interval", "Avatar": "Avatar", "Average Daily Views": "Media delle visite giornaliere", "b": "b", "Back": "Indietro", "Back to top": "Torna all'inizio", "Background": "Background", "Background Color": "Colore di sfondo", "Background Image": "Immagine di sfondo", "Badge": "Distintivo", "Bar": "Bar", "Base Style": "Stile base", "Basename": "Nome di base", "Before": "Prima", "Before Display Content": "Prima di visualizzare il contenuto", "Behavior": "Comportamento", "Below Content": "Contenuto sotto", "Below Title": "Titolo sotto", "Beta": "Beta", "Between": "Tra", "Blank": "Vuoto", "Blend": "Unione", "Blend Mode": "Modalità unione", "Blend the element with the page content.": "Unisci l'elemento con il contenuto della pagina.", "Blend with image": "Unisci con l'immagine", "Blend with page content": "Unisci con il contenuto della pagina", "Block Alignment": "Allineamento a Blocco", "Block Alignment Breakpoint": "Breakpoint dell'allineamento dei blocchi", "Block Alignment Fallback": "Fallback dell'allineamento dei blocchi", "Blog": "Blog", "Blur": "Sfocatura", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrap è necessario solo quando vengono caricati i file di modello predefiniti di Joomla, ad esempio per fronteggiare la modifica di Joomla. Caricare jQuery per scrivere codice personalizzato basato sulla libreria JavaScript jQuery.", "Border": "Bordo", "Bottom Center": "Fondo centrale", "Bottom Left": "Fondo sinistro", "Bottom Right": "Fondo destro", "Box Decoration": "Decorazione Box", "Box Shadow": "Ombra esterna dell'immagine", "Boxed": "Boxed", "Brackets": "Parentesi quadre", "Breadcrumb": "Percorso di navigazione", "Breadcrumbs": "Percorsi di navigazione", "Breadcrumbs Home Text": "Testo della home del percorso di navigazione", "Breakpoint": "Punto di rottura", "Builder": "Builder", "Bullet": "Elenco puntato", "Button": "Bottone", "Button Danger": "Bottone del pericolo", "Button Default": "Bottone default", "Button Margin": "Margin Pulsante", "Button Primary": "Bottone primario", "Button Secondary": "Bottone secondario", "Button Size": "Dimensione bottone", "Button Text": "Testo del bottone", "Buttons": "Bottoni", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Per impostazione predefinita, i campi delle fonti correlate con elementi singoli sono disponibili per la mappatura. Seleziona una fonte correlata che ha più elementi per mappare i suoi campi.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "Di default, le immagini vengono caricate in modo graduale. Abilita il caricamento anticipato per le immagini nella viewport iniziale.", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "Per impostazione predefinita, solo gli articoli non categorizzati vengono definiti come pagine. In alternativa, definisci gli articoli di una categoria specifica come pagine.", "By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.": "Per impostazione predefinita, solo gli articoli non categorizzati vengono definiti come pagine. Cambia la categoria nelle impostazioni avanzate.", "Cache": "Cache", "Campaign Monitor API Token": "Token API di Campaign Monitor", "Cancel": "Annulla", "Caption": "Didascalia", "Card Default": "Carta default", "Card Hover": "Card hover", "Card Primary": "Card primaria", "Card Secondary": "Card secondaria", "Cart": "Carello", "Cart Cross-sells Columns": "Colonne di cross-selling del carrello", "Cart Quantity": "Quantità del carrello", "Categories": "Categorie", "Categories are only loaded from the selected parent category.": "Le categorie sono solo caricate dalle categorie selezionate dal parent.", "Categories Operator": "Categorie operatori", "Category": "Categoria", "Category Blog": "Categoria Blog", "Category Order": "Ordina categoria", "Center": "Allinea al centro", "Center Center": "Centro", "Center columns": "Centra colonne", "Center grid columns horizontally and rows vertically.": "Centra le colonne della griglia in orizzontale e le righe in verticale.", "Center horizontally": "Centra orizzontalmente", "Center Left": "Centro sinistro", "Center Right": "Centro destro", "Center rows": "Centra righe", "Center the active slide": "Centra la slide attiva", "Center the content": "Centra il contenuto", "Center the module": "Centra il modulo", "Center the title and meta text": "Centra il titolo e il testo meta", "Center the title, meta text and button": "Centra il titolo, il testo meta e pulsante", "Center the widget": "Centra il widget", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Gli allineamenti \"centrato\", \"sinistra\" e \"destra\" possono dipendere da breakpoint, e richiedono un'alternativa.", "Changed": "Cambiato", "Changelog": "Registro delle modifiche", "Checkout": "Checkout", "Checkout Page": "Pagina di Checkout", "Child %taxonomies%": "Child %taxonomies%", "Child Categories": "Sottocategorie", "Child Menu Items": "Oggetti del child menu", "Child Tags": "Tag figlio", "Child Theme": "Tema figlio", "Choose a divider style.": "Scegli lo stile del divisore.", "Choose a map type.": "Scegli il tipo di mappa.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Scegli tra una parallasse basato sulla posizione di scorrimento o un'animazione, che viene applicata una volta che la slide è attiva.", "Choose between a vertical or horizontal list.": "Scegli tra un elenco verticale o orizzontale.", "Choose between an attached bar or a notification.": "Scegli tra una barra o una notifica.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Scegli tra precedente/prossimo o la paginazione numerica. La paginazione numerica non è disponibile per i singoli articoli.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Scegli tra precedente/prossimo o la paginazione numerica. La paginazione numerica non è disponibile per i singoli post.", "Choose Font": "Scegli il carattere", "Choose products of the current page or query custom products.": "Seleziona prodotti della pagina attuale o i query custom products.", "Choose the icon position.": "Scegli la posizione dell'icona.", "Choose the page to which the template is assigned.": "Scegli la pagina dove è assegnato il template.", "Circle": "Cerchio", "City or Suburb": "Città o periferia", "Class": "Classe", "Classes": "Classi", "Clear Cache": "Pulisci cache", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Pulisci la cache di immagini e file statici. Le immagini che devono essere ridimensionate sono salvate nella cache del tema. Se ricarichi un'immagine con lo stesso nome, dovrai pulire la cache.", "Click": "Click", "Click on the pencil to pick an icon from the icon library.": "Clicca sulla matita per prendere un'icona dalla libreria delle icone.", "Close": "Chiudi", "Close Icon": "Chiudi icona", "Cluster Icon (< 10 Markers)": "Icona Cluster (< 10 marcatori)", "Cluster Icon (< 100 Markers)": "Icona Cluster (< 100 marcatori)", "Cluster Icon (100+ Markers)": "Icona Cluster ( 100+ marcatori)", "Clustering": "Raggruppamento di", "Code": "Codice", "Collapsing Layouts": "Collassare i layout", "Collections": "Collezioni", "Color": "Colore", "Color navbar parts separately": "Parti della navbar colorate separatamente", "Color-burn": "Color-burn", "Color-dodge": "Color-dodge", "Column": "Colonna", "Column 1": "Colonna 1", "Column 2": "Colonna 2", "Column 3": "Colonna 3", "Column 4": "Colonna 4", "Column 5": "Colonna 5", "Column 6": "Colonna 6", "Column Gap": "Spaziatura colonna", "Column Height": "Altezza della colonna", "Column Layout": "Layout colonna", "Column Parallax": "Paralasse della colonna", "Column within Row": "Colonna con dentro una riga", "Column within Section": "Colonna con dentro una sezione", "Columns": "Colonne", "Columns Breakpoint": "Breakpoint delle colonne", "Comment Count": "Conta commenti", "Comments": "Commenti", "Components": "Componenti", "Condition": "Condizione", "Consent Button Style": "Stile del pulsante di consenso", "Consent Button Text": "Testo del pulsante di consenso", "Contact": "Contatto", "Contacts Position": "Posizioni di contatto", "Contain": "Contiene", "Container Default": "Contenitore default", "Container Large": "Contenitore largo", "Container Padding": "Spaziatura del contenitore", "Container Small": "Contenitore piccolo", "Container Width": "Larghezza del contenitore", "Container X-Large": "Contenitore X-largo", "Contains": "Contiene", "Contains %element% Element": "Contiene %element% Elemento", "Contains %title%": "Contiene %title%", "Content": "Contenuto", "content": "contenuto", "Content Alignment": "Allineamento contenuto", "Content Length": "Lunghezza contenuto", "Content Margin": "Margine contenuto", "Content Parallax": "Contenuto Parallax", "Content Type Title": "Tipo di contenuto del titolo", "Content Width": "Larghezza contenuto", "Controls": "Controlli", "Convert": "Convertire", "Convert to title-case": "Convertire nel titolo della casella", "Cookie Banner": "Cookie banner", "Cookie Scripts": "Cookie scripts", "Coordinates": "Coordinate", "Copy": "Copia", "Countdown": "Conto alla rovescia", "Country": "Nazione", "Cover": "Cover", "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.": "Crea un layout senza spazi se gli elementi della griglia hanno altezze diverse. Posiziona gli elementi nelle colonne con più spazio disponibile oppure mostrali nel loro ordine naturale. Opzionalmente, utilizza un'animazione parallasse per spostare le colonne durante lo scorrimento fino a giustificarle in basso.", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crea un layout generale per questo tipo di pagina. Inizia con un layout nuovo e scegli un elemento dalla collezione o naviga nella libreria dei layout e scegline uno già pronto.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crea un layout per il footer presente in tutte le pagine. Inizia con un layout nuovo e scegli un elemento dalla collezione o naviga nella libreria dei layout e scegline uno già pronto.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crea un layout per questo modulo. Inizia con un layout nuovo e scegli un elemento dalla collezione o naviga nella libreria dei layout e scegline uno già pronto.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crea un layout per questo modulo e pubblicalo nella posizione top o bottom. Inizia con un layout nuovo e scegli un elemento dalla collezione o naviga nella libreria dei layout e scegline uno già pronto.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crea un layout per questo widget e pubblicalo nell'area top o bottom. Inizia con un layout nuovo e scegli un elemento dalla collezione o naviga nella libreria dei layout e scegline uno già pronto.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crea un layout. Inizia con un layout nuovo e scegli un elemento dalla collezione o naviga nella libreria dei layout e scegline uno già pronto.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crea un layout per questa pagina. Inizia con un layout nuovo e scegli un elemento dalla collezione o naviga nella libreria dei layout e scegline uno già pronto.", "Create site-wide templates for pages and load their content dynamically into the layout.": "Crea modelli per l'intero sito per le pagine e carica dinamicamente i loro contenuti nel layout.", "Created": "Creato", "Creating a New Module": "Crea un nuovo modulo", "Creating a New Widget": "Crea un nuovo widget", "Creating Accordion Menus": "Crea un menu accordion", "Creating Advanced Module Layouts": "Crea un layout avanzato per il modulo", "Creating Advanced Widget Layouts": "Crea un layout avanzato per il widget", "Creating Advanced WooCommerce Layouts": "Crea layout avanzati di WooCommerce", "Creating Individual Post Layout": "Crea un layout per un post individuale", "Creating Individual Post Layouts": "Crea layout per post individuali", "Creating Menu Dividers": "Crea divisori per il menu", "Creating Menu Heading": "Crea la testata del menu", "Creating Menu Headings": "Crea la testata del menu", "Creating Menu Text Items": "Creazione delle voci di testo del menu", "Creating Navbar Text Items": "Creare elementi di testo della barra di navigazione", "Creating Parallax Effects": "Creazione effetti di parallasse", "Creating Sticky Parallax Effects": "Crea sticky parallax effects", "Critical Issues": "Problemi critici", "Critical issues detected.": "Rilevati problemi critici.", "Cross-Sell Products": "Prodotti cross-sell", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "Curato da <a href>%user%</a>", "Current Layout": "Layout attuale", "Current Style": "Stile attuale", "Current User": "Utente corrente", "Custom": "Personalizzato", "Custom %post_type%": "Personalizzato %post_type%", "Custom %post_types%": "Personalizzato %post_types%", "Custom %taxonomies%": "Personalizzato %taxonomies%", "Custom %taxonomy%": "Personalizzato %taxonomy%", "Custom Article": "Articolo personalizzato", "Custom Articles": "Articoli personalizzati", "Custom Categories": "Categorie personalizzate", "Custom Category": "Categoria personalizzata", "Custom Code": "Codice personalizzato", "Custom Fields": "Campi personalizzati", "Custom Menu Item": "Menu item personalizzato", "Custom Menu Items": "Menu items personalizzato", "Custom Query": "Query personalizzato", "Custom Tag": "Tag personalizzato", "Custom Tags": "Tag personalizzati", "Custom User": "Utente personalizzato", "Custom Users": "Utenti personalizzato", "Customization": "Personalizzazione", "Customization Name": "Nome della personalizzazione", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Personalizza la larghezza delle colonne del layout selezionato e imposta l'ordine delle colonne. Cambiando il layout si resettano tutte le personalizzazioni.", "Danger": "Pericolo", "Dark": "Scuro", "Dark Text": "Testo scuro", "Darken": "Oscurare", "Date": "Data", "Date Archive": "Archivio della data", "Date Format": "Formato della data", "Day Archive": "Archivio del giorno", "Decimal": "Decimale", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Decorate il titolo con un divisore, un punto o una riga centrata verticalmente rispetto all'intestazione.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Decorare il titolo con un divisore, un punto o una linea centrata verticalmente rispetto all'intestazione.", "Decoration": "Decorazione", "Default": "Default", "Default Link": "Link default", "Define a background style or an image of a column and set the vertical alignment for its content.": "Definisci uno stile di sfondo o un'immagine di una colonna e imposta l'allineamento verticale per il suo contenuto.", "Define a custom background color or a color parallax animation instead of using a predefined style.": "Definisci un colore personalizzato dello sfondo un colore o un'animazione parallasse a colori invece di utilizzare uno stile predefinito.", "Define a name to easily identify the template.": "Definisci un nome per identificare facilmente il modello.", "Define a name to easily identify this element inside the builder.": "Definisci un nome per identificare facilmente questo elemento all'interno del builder.", "Define a navigation menu or give it no semantic meaning.": "Definisci un menu di navigazione o dagli alcun significato semantico o non attribuirgli alcun tipo di significato semantico.", "Define a unique identifier for the element.": "Imposta un identificatore univoco per questo elemento.", "Define an alignment fallback for device widths below the breakpoint.": "Definisci un'alternativa di allineamento quando la larghezza dello schermo dei dispositivi è inferiore al breakpoint.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Definisci uno o più attributi per l'elemento. Separa il nome dell'attributo e il valore con il carattere <code>=</code>. Un attributo per riga.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Definisci uno o più nomi per la classe dell'elemento. Separa con degli spazi eventuali classi multiple.", "Define the alignment in case the container exceeds the element max-width.": "Definisci l'allineamento nel caso in cui il contenitore sia più largo della massima larghezza dell'elemento.", "Define the alignment of the last table column.": "Definisci l'allineamento dell'ultima colonna della tabella.", "Define the device width from which the alignment will apply.": "Definisci la larghezza del dispositivo a partire da cui l'allineamento sarà efficace.", "Define the device width from which the max-width will apply.": "Definisci la larghezza del dispositivo per cui sarà applicata la larghezza massima del contenuto.", "Define the image quality in percent for generated JPG images and when converting JPEG and PNG to next-gen image formats.<br><br>Mind that setting the image quality too high will have a negative impact on page loading times.<br><br>Press the Clear Cache button in the advanced settings after changing the image quality.": "Definisci la qualità delle immagini in percentuale per immagini generate da JPG e quando converti JPEG and PNG nei formati delle immagini next-gen.<br><br>Attenzione che impostare troppo alta la qualità dell'immagine avrà un impatto negativo sui tempi di caricamento della pagina.<br><br>Premere il pulsante Cancella cache nelle impostazioni avanzate dopo aver modificato la qualità dell'immagine.", "Define the layout of the form.": "Definisci il layout del modulo.", "Define the layout of the title, meta and content.": "Definisci il layout di titolo, meta e contenuto.", "Define the order of the table cells.": "Definisci l'ordine delle celle della tabella.", "Define the origin of the element's transformation when scaling or rotating the element.": "Definisci l'origine della trasformazione degli elementi quando scali o ruoti l'elemento.", "Define the padding between items.": "Definisci lo spazio tra gli elementi.", "Define the padding between table rows.": "Definisci la spaziatura interna tra righe della tabella.", "Define the purpose and structure of the content or give it no semantic meaning.": "Definisci l'intento e la struttura del contenuto o non attribuire alcun significato semantico.", "Define the title position within the section.": "Definisci la posizione del titolo all'interno della sezione.", "Define the width of the content cell.": "Definisci la larghezza della cella del contenuto.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definire la larghezza della navigazione del filtro. Scegli tra percentuale e larghezza fissa o espandi colonne alla larghezza del loro contenuto.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definisci la larghezza dell'immagine all'interno della griglia. Scegli tra larghezze percentuali o fisse o espandi le colonne alla larghezza dei loro contenuti.", "Define the width of the meta cell.": "Definire la larghezza della meta cella.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definisci la larghezza della navigazione. Scegli tra larghezze percentuali o fisse o espandi le colonne alla larghezza dei loro contenuti.", "Define the width of the title cell.": "Definisci la larghezza della cella del titolo.", "Define the width of the title within the grid.": "Definisci la larghezza del titolo nella griglia.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definisci la larghezza del titolo all'interno della griglia. Scegli tra larghezze percentuali o fisse o espandi le colonne alla larghezza dei loro contenuti.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Definisci se la larghezza degli elementi dello slider è fissa o si espande automaticamente in base alla larghezza del contenuto.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Definire se le miniature si dispongono su più righe o meno se il contenitore è troppo piccolo.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Ritarda le animazioni degli elementi in millisecondi, ad es. <code>200</code>.", "Delayed Fade": "Dissolvenza rallentata", "Delete": "Cancella", "Delete animation stop": "Elimina il blocco dell'animazione", "Descending": "Discendente", "description": "descrizione", "Description": "Descrizione", "Description List": "Lista descrittiva", "Desktop": "Desktop", "Determine how the image or video will blend with the background color.": "Scegli come l'immagine o il video si integreranno con il colore di sfondo.", "Determine how the image will blend with the background color.": "Scegli come l'immagine si integrerà con il colore di sfondo.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Scegli se l'immagine riempirà la dimensione della pagina tagliando le parti extra o riempiendo le aree vuote con il colore di sfondo.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Determina se l'immagine si adatterà alle dimensioni della sezione ritagliandola o riempiendo le aree vuote con il colore di sfondo.", "Dialog End": "Fine del dialogo", "Dialog Layout": "Layout del dialogo", "Dialog Logo (Optional)": "Logo del dialogo (facoltativo)", "Dialog Push Items": "Dialogo push items", "Dialog Start": "Inizio dialogo", "Difference": "Differenza", "Direction": "Direzione", "Dirname": "Nome del destinatario", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Disabilita la riproduzione automatica, avvia automaticamente la riproduzione automatica o appena il video entra nella visualizzazione.", "Disable element": "Disabilita elemento", "Disable Emojis": "Disabilita Emojis", "Disable infinite scrolling": "Disabilita lo scrolling infinito", "Disable item": "Disattivare la voce", "Disable row": "Disabilita riga", "Disable section": "Disabilita sezione", "Disable template": "Disabilita template", "Disable the <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filter for the_content and the_excerpt and disable conversion of Emoji characters to images.": "Disabilita il <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filtro per the_content e the_excerpt e disabilita la conversione delle emoji in immagini.", "Disable the element and publish it later.": "Disabilita l'elemento e pubblicalo dopo.", "Disable the item and publish it later.": "Disabilita l'oggetto e pubblicalo dopo.", "Disable the row and publish it later.": "Disabilita la riga e pubblicala dopo.", "Disable the section and publish it later.": "Disabilita la sezione e pubblicala dopo.", "Disable the template and publish it later.": "Disabilita il template e pubblicalo dopo.", "Disable wpautop": "Disabilita wpautop", "Disabled": "Disabilitato", "Disc": "Disco", "Discard": "Abbandona", "Display": "Visualizza", "Display a divider between sidebar and content": "Mostra un divisore tra sidebar e contenuto", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Visualizza un menu selezionando la posizione in cui deve apparire. Ad esempio, pubblica il menu principale nella posizione della barra di navigazione e un menu alternativo nella posizione mobile.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Visualizza un'icona di ricerca a sinistra o a destra. L'icona a destra può essere cliccata per inviare la ricerca.", "Display header outside the container": "Mostra l'intestazione fuori dal container", "Display icons as buttons": "Mostra le icone come bottone", "Display on the right": "Mostra sulla destra", "Display overlay on hover": "Mostra sovrapposizione al passaggio del mouse", "Display products based on visibility.": "Mostra prodotti basati sulla visibilità.", "Display the breadcrumb navigation": "Mostra la navigazione", "Display the cart quantity in brackets or as a badge.": "Mostra la quantità del carrello tra parentesi o come distintivo.", "Display the content inside the overlay, as the lightbox caption or both.": "Mostra il contenuto all'interno della sovraimpressione, come la didascalia del lightbox o entrambe.", "Display the content inside the panel, as the lightbox caption or both.": "Mostra il contenuto all'interno del pannello, come la didascalia del lightbox o entrambe.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Mostra il campo estratto se contiene del testo, altrimenti mostra il contenuto. Per utilizzare un campo estratto, crea un campo personalizzato con il nome \"estratto\".", "Display the excerpt field if it has content, otherwise the intro text.": "Mostra il campo estratto se ha contenuto, altrimenti il testo iniziale.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Mostra il campo estratto se ha contenuto, altrimenti il testo iniziale. Per usare un campo estratto, creare un campo personalizzato con il nome di estratto.", "Display the first letter of the paragraph as a large initial.": "Ingrandisci la prima lettera del paragrafo.", "Display the image only on this device width and larger.": "Mostra l'immagine solo su dispositivi con queste dimensioni e superiori.", "Display the image or video only on this device width and larger.": "Visualizza l'immagine o il video solo su questa larghezza del dispositivo e più grande.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Mostra i controlli della mappa e definisce se la mappa può essere ingrandita o essere trascinata usando la rotellina del mouse o il touch.", "Display the meta text in a sentence or a horizontal list.": "Mostra il testo meta in una frase o in una lista orizzontale.", "Display the module only from this device width and larger.": "Visualizza il modulo solo a partire dalla larghezza del dispositivo.", "Display the navigation only on this device width and larger.": "Mostra la navigazione solo per dispositivi di questa larghezza e superiori.", "Display the parallax effect only on this device width and larger.": "Mostra l'effetto di parallasse solo su dispositivi con questa larghezza o più larghi.", "Display the popover on click or hover.": "Mostra il popover al click o al passaggio del mouse.", "Display the section title on the defined screen size and larger.": "Visualizza il titolo della sezione sulla dimensione dello schermo definita e più grande.", "Display the short or long description.": "Visualizza la descrizione breve o lunga.", "Display the slidenav only on this device width and larger.": "Mostra la slidenav solo su dispositivi di questa larghezza o superiore.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Visualizza lo slidenav all'esterno solo su larghezza maggiore o uguale a questa del dispositivo. Altrimenti, visualizzalo all'interno.", "Display the title in the same line as the content.": "Visualizza il titolo nella stessa riga del contenuto.", "Display the title inside the overlay, as the lightbox caption or both.": "Mostra il titolo nella sovraimpressione, come la didascalia del lightbox o entrambe.", "Display the title inside the panel, as the lightbox caption or both.": "Mostra il titolo all'interno del pannello, come la didascalia della lightbox o entrambi.", "Display the widget only from this device width and larger.": "Mostra il widget solo a partire dalla larghezza del dispositivo.", "Displaying the Breadcrumbs": "Visualizzazione delle briciole di pane", "Displaying the Excerpt": "Visualizzazione dell'estratto", "Displaying the Mobile Header": "Visualizzazione dell'intestazione mobile", "div": "div", "Divider": "Divisore", "Do you really want to replace the current layout?": "Vuoi realmente sostituire il layout corrente?", "Do you really want to replace the current style?": "Vuoi realmente sostituire lo stile corrente?", "Documentation": "Documentazione", "Does not contain": "Non contiene", "Does not end with": "Non finisce con", "Does not start with": "Non inizia con", "Don't collapse column": "Non chiudere la colonna", "Don't collapse the column if dynamically loaded content is empty.": "Non chiudere la colonna se il contenuto dinamicamente caricato è vuoto.", "Don't expand": "Non espandere", "Don't match (NOR)": "Non corrisponde (NOR)", "Don't match %taxonomies% (NOR)": "Non corrisponde %taxonomies% (NOR)", "Don't match author (NOR)": "Non corrisponde l'autore (NOR)", "Don't match category (NOR)": "Non corrisponde la categoria (NOR)", "Don't match tags (NOR)": "Non corrispondono i tag (NOR)", "Don't wrap into multiple lines": "Non disporre in più linee", "Dotnav": "Dotnav", "Double opt-in": "Doppio opt-in", "Download": "Scaricare", "Download All": "Scarica tutto", "Download Less": "Scarica Less", "Draft new page": "Bozza di una nuova pagina", "Drop Cap": "Capolettera", "Dropbar Animation": "Animazione dropbar", "Dropbar Center": "Centro dropbar", "Dropbar Content Width": "Larghezza del contenuto della dropbar", "Dropbar Top": "Top dropbar", "Dropbar Width": "Larghezza della dropbar", "Dropdown": "Tendina", "Dropdown Alignment": "Allineamento alla tendina", "Dropdown Columns": "Colonne della tendina", "Dropdown Nav Style": "Tendina a stile nav", "Dropdown Padding": "Dropdown Padding", "Dropdown Stretch": "Dropdown Stretch", "Dropdown Width": "Larghezza della tendina", "Dynamic": "Dinamico", "Dynamic Condition": "Condizione dinamica", "Dynamic Content": "Contenuto dinamico", "Dynamic Content (Parent Source)": "Contenuto dinamico (parent source)", "Dynamic Multiplication": "Moltiplicazione dinamica", "Dynamic Multiplication (Parent Source)": "Moltiplicazione dinamica (parent source)", "Easing": "Easing", "Edit": "Modifica", "Edit %title% %index%": "Modifica %title% %index%", "Edit Article": "Modifica articolo", "Edit Image Quality": "Modifica la qualità dell'immagine", "Edit Item": "Modifica l'oggetto", "Edit Items": "Modifica elementi", "Edit Layout": "Modifica layout", "Edit Menu Item": "Modifica voce di menù", "Edit Module": "Modifica modulo", "Edit Parallax": "Modifica il parallasse", "Edit Settings": "Modifica impostazioni", "Edit Template": "Modifica template", "Element": "Elemento", "Elements within Column": "Elementi all'interno della colonna", "Email": "Email", "Emphasis": "Emphasis", "Empty Dynamic Content": "Contenuto dinamico vuoto", "Enable a navigation to move to the previous or next post.": "Abilita una navigazione per passare al post precedente o successivo.", "Enable active state": "Abilita lo stato attivo", "Enable autoplay": "Abilita autoplay", "Enable click mode on text items": "Abilità la modalità click per gli elementi testuali", "Enable drop cap": "Abilita il capolettera", "Enable dropbar": "Abilita dropbar", "Enable filter navigation": "Abilita la navigazione dei filtri", "Enable lightbox gallery": "Abilita la galleria lightbox", "Enable map dragging": "Abilita lo spostamento della mappa", "Enable map zooming": "Abilita lo zoom della mappa", "Enable marker clustering": "Abilita il raggruppamento dei segnaposto", "Enable masonry effect": "Abilita l'effetto masonry", "Enable parallax effect": "Abilita l'effetto parallasse", "Enable the pagination.": "Abilita la paginazione.", "End": "Fine", "Ends with": "Termina con", "Enter %s% preview mode": "Inserire %s% modalità anteprima", "Enter a comma-separated list of tags to manually order the filter navigation.": "Inserire un elenco di tag separati da virgole per ordinare manualmente il filtro di navigazione.", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Inserisci un elenco di tag separati da virgole, ad esempio <code>blue, white, black</code>.", "Enter a date for the countdown to expire.": "Inserire una data di scadenza per il conto alla rovescia.", "Enter a decorative section title which is aligned to the section edge.": "Inserisci un titolo di sezione decorativo che sia allineato al bordo della sezione.", "Enter a descriptive text label to make it accessible if the link has no visible text.": "Inserire un'etichetta di testo descrittiva per renderlo accessibile se il link non ha testo visibile.", "Enter a subtitle that will be displayed beneath the nav item.": "Inserisci un sottotitolo da visualizzare sotto la voce di navigazione.", "Enter a table header text for the content column.": "Inserisci un testo di intestazione della tabella per la colonna del contenuto.", "Enter a table header text for the image column.": "Inserisci un testo di intestazione della tabella per la colonna immagine.", "Enter a table header text for the link column.": "Inserisci un testo di intestazione della tabella per la colonna link.", "Enter a table header text for the meta column.": "Inserisci un testo di intestazione della tabella per la colonna meta.", "Enter a table header text for the title column.": "Inserisci un testo di intestazione della tabella per la colonna titolo.", "Enter a width for the popover in pixels.": "Inserisci una larghezza in pixel per il popover.", "Enter an optional footer text.": "Inserisci un testo a piè di pagina opzionale.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Inserisci un testo opzionale per l'attributo titolo del link, che apparirà passando sopra all'elemento.", "Enter labels for the countdown time.": "Inserisci etichette per il conto alla rovescia.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Inserisci fino a 5 collegamenti ai tuoi profili social. Un <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> corrispondente sarà mostrato automaticamente, se disponibile. Sono anche supportati i collegamenti agli indirizzi email e ai numeri di telefono, come mailto:info@example.com o tel:+491570156, sono anche supportati.", "Enter or pick a link, an image or a video file.": "Inserisci o scegli un link, un immagine o un file video.", "Enter the API key in Settings > External Services.": "Inserire la chiave API nelle Impostazioni > Servizi Esterni.", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Inserire la chiave API per abilitare gli aggiornamenti con un click per YOOtheme Pro e per accedere alla libreria di layout e alla libreria di immagini di Unsplash. Puoi creare una chiave API per questo sito web <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">nelle impostazioni del tuo account</a>.", "Enter the author name.": "Inserisci il nome dell'autore.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Inserisci il messaggio per il consenso dei cookie. Il messaggio di default serve da esempio. Sistemalo in accordo con le leggi del tuo stato.", "Enter the horizontal position of the marker in percent.": "Inserisci la posizione orizzontale del segnaposto in percentuale.", "Enter the image alt attribute.": "Inserisci l'attributo alt dell'immagine.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Inserisci la stringa di sostituzione che può contenere riferimenti. Se lasciato vuoto, le corrispondenze di ricerca verranno rimosse.", "Enter the text for the button.": "Inserisci il testo per il bottone.", "Enter the text for the home link.": "Inserisci il testo per il collegamento alla home.", "Enter the text for the link.": "Inserisci un testo per il collegamento.", "Enter the vertical position of the marker in percent.": "Inserisci la posizione verticale del segnaposto in percentuale.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Inserisci il tuo ID <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> per abilitare il tracciamento. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">L'anonimizzazione dell'IP</a> può ridurre l'accuratezza del tracciamento.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Inserisci la tua API key di <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> per utilizzare Google Maps anziché OpenStreetMap. Ciò abiliterà anche opzioni addizionali per modificare i colori delle mappe.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Inserisci la tua chiave API di <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> per usarla con l'elemento Newsletter.", "Enter your <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> API key for using it with the Newsletter element.": "Inserire <a href=\"https://kb.mailchimp.com/integrations/api-integrations/about-api-keys\" target=\"_blank\">Mailchimp</a> la tua chiave API per l'utilizzo con l'elemento Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Inserisci il tuo CSSpersonalizzato. Il seguente selettore sarà prefissato automaticamente per questo elemento: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. Il seguente selettore sarà prefissato automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Inserisci il tuo CSS. I seguenti selettori saranno prefissati automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Inserisci il tuo CSS personalizzato. Il seguente selettore sarà prefissato automaticamente per questo elemento: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. Il seguente selettore sarà prefissato automaticamente per questo elemento: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I seguenti selettori avranno automaticamente il prefisso per questo elemento: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Inserisci il tuo CSS personalizzato. Il seguente selettore sarà prefissato automaticamente per questo elemento: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Inserisci il tuo CSS personalizzato. I selettori seguenti verranno anteposti automaticamente per questo elemento: <code>.el-section</code>", "Error": "Errore", "Error 404": "Errore 404", "Error creating folder.": "Errore nella creazione della cartella.", "Error deleting item.": "Errore nella rimozione di un elemento.", "Error renaming item.": "Errore nel rinominare un elemento.", "Error: %error%": "Errore: %error%", "Events": "Eventi", "Excerpt": "Estratto", "Exclude child %taxonomies%": "Escludi child %taxonomies%", "Exclude child categories": "Escludi categorie child", "Exclude child tags": "Escludi child tag", "Exclude cross sell products": "Escludi prodotti cross sell", "Exclude upsell products": "Escludi prodotti upsell", "Exclusion": "Esclusione", "Expand": "Espandi", "Expand columns equally to always fill remaining space within the row, center them or align them to the left.": "Espandi equamente le colonne per riempire sempre lo spazio rimanente all'interno della riga, centrarle o allinearle a sinistra.", "Expand Content": "Espandi contenuto", "Expand height": "Espandi altezza", "Expand One Side": "Espandi un lato", "Expand Page to Viewport": "Espandi la pagina in viewport", "Expand the height of the content to fill the available space in the panel and push the link to the bottom.": "Espandi l'altezza del contenuto per riempire lo spazio disponibile nel pannello e spingere il collegamento in basso.", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The image will cover the element's content box.": "Espandere l'altezza dell'elemento per riempire lo spazio disponibile nella colonna o forzare l'altezza a una viewport. L'immagine coprirà il riquadro del contenuto dell'elemento.", "Expand the height of the element to fill the available space in the column or force the height to one viewport. The video will cover the element's content box.": "Espandere l'altezza dell'elemento per riempire lo spazio disponibile nella colonna o forzare l'altezza a una viewport. Il video coprirà il riquadro del contenuto dell'elemento.", "Expand the height of the element to fill the available space in the column.": "Espandi l'altezza dell'elemento per riempire lo spazio nella colonna.", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Espandi la larghezza di un lato a sinistra o a destra, mentre l'altro lato mantiene i vincoli della larghezza massima.", "Expand width to table cell": "Espandi la larghezza di cella della tabella", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Esporta tutte le impostazioni del tema e importale in un'altra installazione. Questo non include il contenuto delle librerie di layout, stili ed elementi o il generatore di template.", "Export Settings": "Impostazioni di esportazione", "Extend all content items to the same height.": "Eleva tutti gli elementi di contenuto alla stessa altezza.", "Extension": "Estensione", "External": "Esterna", "External Services": "Servizi esterni", "Extra Margin": "Margine extra", "Fade": "Fade", "Favicon": "Favicon", "Favicon PNG": "Favicon PNG", "Favicon SVG": "Favicon SVG", "Fax": "Fax", "Featured": "Featured", "Featured Articles": "Articoli in evidenza", "Featured Articles Order": "Ordine degli articoli featured", "Featured Image": "Immagine in primo piano", "Fields": "Campi", "Fifths": "Quinti", "Fifths 1-1-1-2": "Quinti 1-1-1-2", "Fifths 1-1-3": "Quinti 1-1-3", "Fifths 1-3-1": "Quinti 1-3-1", "Fifths 1-4": "Quinti 1-4", "Fifths 2-1-1-1": "Quinti 2-1-1-1", "Fifths 2-3": "Quinti 2-3", "Fifths 3-1-1": "Quinti 3-1-1", "Fifths 3-2": "Quinti 3-2", "Fifths 4-1": "Quinti 4-1", "File": "File", "Files": "Files", "Fill the available column space": "Riempi lo spazio disponibile nella colonna", "Filter": "Filtra", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtra %post_types% degli autori. Utilizza la <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> chiave per selezionare più autori. Imposta l'operatore logico in modo che corrisponda o meno agli autori selezionati.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Filtra %post_types% dei termini. Utilizza la <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> chiave per selezionare più termini. Imposta l'operatore logico in modo che corrisponda o meno ai termini selezionati.", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtra gli articoli per autori. Utilizza il tasto <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> per selezionare più autori. Imposta l'operatore logico per corrispondere o non corrispondere agli autori selezionati.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Filtra gli articoli per categorie. Utilizza il tasto <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> per selezionare più categorie. Imposta l'operatore logico per corrispondere o non corrispondere alle categorie selezionati.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Filtra gli articoli per tag. Utilizza il tasto <kbd>shift</kbd> o <kbd>ctrl/cmd</kbd> per selezionare più tag. Imposta l'operatore logico per corrispondere ad almeno uno dei tag, nessuno dei tag o tutti i tag.", "Filter by Authors": "Filtra per autori", "Filter by Categories": "Filtra per categorie", "Filter by Featured Articles": "Filtrato per articoli featured", "Filter by Tags": "Filtra per tag", "Filter by Term": "Filtra per parola", "Filter by Terms": "Filtra per parole", "Filter products by attribute using the attribute slug.": "Filtra i prodotti per attributo utilizzando lo slug dell'attributo.", "Filter products by categories using a comma-separated list of category slugs.": "Filtra i prodotti per categorie utilizzando una lista di slug di categorie separati da virgole.", "Filter products by tags using a comma-separated list of tag slugs.": "Filtra i prodotti per tag utilizzando una lista di slug di categorie separati da virgole.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "Filtra i prodotti per termini dell'attributo scelto utilizzando una lista di slug di categorie separati da virgole.", "Filter products using a comma-separated list of IDs.": "Filtra in prodotti usando una lista di ID separati da virgole.", "Filter products using a comma-separated list of SKUs.": "Filtra prodotti una lista di SKUs separati da virgole.", "Finite": "Finito", "First Item": "Primo oggetto", "First name": "Nome di battesimo", "First page": "Prima pagina", "Fix the background with regard to the viewport.": "Correggi lo sfondo in base all'area visibile.", "Fixed": "Aggiustato", "Fixed-Inner": "Fisso Interno", "Fixed-Left": "Fisso-Sinistra", "Fixed-Outer": "Fisso Esterno", "Fixed-Right": "Fisso-Destra", "Floating Shadow": "Floating shadow", "Focal Point": "Punto focale", "Folder created.": "Cartella creata.", "Folder Name": "Nome della cartella", "Font Family": "Font family", "Footer": "Footer", "Force a light or dark color for text, buttons and controls on the image or video background.": "Forza un colore chiaro o scuro per testo, pulsanti e controlli sullo sfondo dell'immagine o del video.", "Force left alignment": "Forza allineamento a sinistra", "Force viewport height": "Force viewport height", "Form": "Modulo", "Format": "Formato", "Full Article Image": "Immagine dell'articolo completo", "Full Article Image Alt": "Testo alternativo immagine articolo esteso", "Full Article Image Caption": "Didascalia immagine articolo esteso", "Full Width": "A tutta larghezza", "Full width button": "Bottone a tutta larghezza", "g": "g", "Gallery": "Galleria", "Gallery Thumbnail Columns": "Gallery Thumbnail Columns", "Gamma": "Gamma", "Gap": "Spaziatura", "General": "Generale", "GitHub (Light)": "GitHub (Light)", "Google Analytics": "Google analytics", "Google Fonts": "Google fonts", "Google Maps": "Google maps", "Gradient": "Gradiente", "Greater than": "Maggiore di", "Grid": "Griglia", "Grid Breakpoint": "Punto di rottura della griglia", "Grid Column Gap": "Spaziatura della colonna della griglia", "Grid Row Gap": "Spaziatura della riga della griglia", "Grid Width": "Larghezza della griglia", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Raggruppa elementi in gruppi. Il numero di elementi all'interno di un set dipende dalla larghezza dell'oggetto definita, e.g. <i>33%</i> means that each set contains 3 items.", "Guest User": "Utente ospite", "h": "h", "H1": "H1", "h1": "h1", "H2": "H2", "h2": "h2", "H3": "H3", "h3": "h3", "h4": "h4", "H4": "H4", "H5": "H5", "h5": "h5", "H6": "H6", "h6": "h6", "Halves": "Metà", "Hard-light": "Hard-light", "Header": "Intestazione", "Header End": "Fine intestazione", "Header Start": "Inizio intestazione", "Header Text Color": "Colore del testo dell'intestazione", "Heading": "Intestazione", "Heading 2X-Large": "Intestazione 2X-Largo", "Heading 3X-Large": "Intestazione 3X-Largo", "Heading H1": "Intestazione H1", "Heading H2": "Intestazione H2", "Heading H3": "Intestazione H3", "Heading H4": "Intestazione H4", "Heading H5": "Intestazione H5", "Heading H6": "Intestazione H6", "Heading Large": "Intestazione larga", "Heading Link": "Link dell'intestazione", "Heading Medium": "Intestazione media", "Heading Small": "Intestazione piccola", "Heading X-Large": "Intestazione X-Larga", "Headline": "Intestazione", "Headline styles differ in font size and font family.": "Gli stili dei titoli si differenziano per la dimensione e il tipo dei caratteri.", "Height": "Altezza", "Height 100%": "Altezza 100%", "Help": "Aiuto", "hex / keyword": "hex / parola chiave", "Hidden": "Hidden", "Hidden Large (Desktop)": "Hidden Large (Desktop)", "Hidden Medium (Tablet Landscape)": "Hidden Medium (Tablet Landscape)", "Hidden Small (Phone Landscape)": "Hidden Small (Phone Landscape)", "Hidden X-Large (Large Screens)": "Hidden X-Large (Large Screens)", "Hide": "Nascondi", "Hide and Adjust the Sidebar": "Nascondi e regola la barra laterale", "Hide marker": "Nascondi marcatore", "Hide Sidebar": "Nascondi barra laterale", "Hide Term List": "Nascondi l'elenco dei termini", "Hide title": "Nascondi il titolo", "Highlight the hovered row": "Evidenzia la riga al passaggio del mouse", "Highlight the item as the active item.": "Evidenzia l'oggetto come oggetto attivo.", "Hits": "Visualizzazioni", "Home": "Home", "Home Text": "Testo Home", "Horizontal": "Orrizzontale", "Horizontal Center": "Centrato orizzontalmente", "Horizontal Center Logo": "Centra il logo orizzontalmente", "Horizontal Justify": "Giustifica orizzontalmente", "Horizontal Left": "Orizzontale sinistra", "Horizontal Right": "Orizzontale destra", "Hover": "Hover", "Hover Box Shadow": "Ombra esterna al passaggio del mouse", "Hover Image": "Immagine al passaggio del mouse", "Hover Style": "Stile al passaggio del mouse", "Hover Transition": "Transizione al passaggio del mouse", "Hover Video": "Video del passaggio del mouse", "hr": "hr", "Html": "Html", "HTML Element": "Elemento in HTML", "Hue": "Tinta", "Hyphen": "Hyphen", "Hyphen and Underscore": "Trattino e trattino basso", "Icon": "Icona", "Icon Button": "Bottone con icona", "Icon Color": "Colore dell'icona", "Icon Link": "Link con icona", "Icon Width": "Larghezza dell'icona", "Iconnav": "Iconnav", "ID": "ID", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Se una sezione o riga a una larghezza massima, e un lato si espande verso sinistra o destra, il padding di default può essere rimosso nel lato che si espande.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Se più modelli sono assegnati alla stessa vista, viene applicato il template che appare per primo. Modifica l'ordine trascinando la selezione.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Se stai creando un sito multilingua, non selezionare qui un menu specifico. Invece, usa la gestione moduli di Joomla per pubblicare il menu corretto in base alla lingua attivata.", "If you are using WPML, you can not select a menu here. Instead, use the WordPress menu manager to assign menus to locations for a language.": "Se stai utilizzando WPML, non puoi selezionare un menu qui. Invece, utilizza il gestore dei menu di WordPress per assegnare i menu alle posizioni per una lingua.", "Ignore %taxonomy%": "Ignora %taxonomy%", "Ignore author": "Ignora l'autore", "Ignore category": "Ignora la categoria", "Ignore tags": "Ignora i tag", "Image": "Immagine", "Image Align": "Allineamento immagine", "Image Alignment": "Allineamento immagine", "Image Alt": "Testo alternativo dell'immagine", "Image and Content": "Immagine e contenuto", "Image and Title": "Immagine e titolo", "Image Attachment": "Immagine allegata", "Image Box Shadow": "Ombreggiatura dell'immagine", "Image Bullet": "Punto immagine", "Image Effect": "Effetto Immagine", "Image Focal Point": "Punto focale dell'immagine", "Image Height": "Altezza Immagine", "Image Margin": "Margine immagine", "Image Orientation": "Orientamento immagine", "Image Position": "Posizione Immagine", "Image Quality": "Qualità dell'immagine", "Image Size": "Dimensioni dell'immagine", "Image Width": "Larghezza Immagine", "Image Width/Height": "Larghezza/altezza immagine", "Image, Title, Content, Meta, Link": "Immagine, titolo, contenuto, meta, link", "Image, Title, Meta, Content, Link": "Immagine, titolo, meta, contenuto, link", "Image/Video": "Immagine/Video", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Le immagini non possono essere memorizzate nella cache. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\"> Modifica le autorizzazioni </a> della cartella <code>cache</code> nella directory del tema <code>yootheme</code>, in modo che il server Web possa scrivere al suo interno.", "Import Settings": "Importa impostazioni", "Include %post_types% from child %taxonomies%": "Includi %post_types% da figlio %taxonomies%", "Include articles from child categories": "Includere articoli da categorie figlie", "Include child %taxonomies%": "Includi %taxonomies% figlio", "Include child categories": "Includi categorie figlie", "Include child tags": "Includi tag figli", "Include heading itself": "Includi l'intestazione stessa", "Include items from child tags": "Includere gli elementi dei tag figli", "Include query string": "Includere la stringa di query", "Info": "Info", "Inherit": "Eredita", "Inherit transparency from header": "Eredita trasparenza dall'intestazione", "Inject SVG images into the markup so they adopt the text color automatically.": "Inserire immagini SVG nel markup in modo che assumano automaticamente il colore del testo.", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Inserire le immagini SVG nel markup della pagina, in modo che possano essere facilmente modificate tramite CSS.", "Inline SVG": "SVG in linea", "Inline SVG logo": "Logo SVG in linea", "Inline title": "Titolo in linea", "Input": "Input", "Insert at the bottom": "Inserisci in fondo", "Insert at the top": "Inserisci sopra", "Inset": "Rientro", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Invece di utilizzare un'immagine personalizzata, puoi cliccare sulla matita per selezionare un'icona dalla libreria.", "Intro Image": "Immagine introduttiva", "Intro Image Alt": "Testo alternativo immagine introduttiva", "Intro Image Caption": "Didascalia immagine introduttiva", "Intro Text": "Testo introduttivo", "Invalid Field Mapped": "Campo mappato invalido", "Invalid Source": "Sorgente invalida", "Inverse Logo (Optional)": "Logo Inverso (Opzionale)", "Inverse style": "Stile inverso", "Inverse text color on hover or when active": "Cambia il colore del testo in negativo quando passi sopra con il cursore o quando è attivo", "Inverse the text color on hover": "Invertire il colore del testo al passaggio del mouse", "Invert lightness": "Inverti la luminosità", "IP Anonymization": "Anonimizzazione IP", "Is empty": "É vuoto", "Is equal to": "É uguale a", "Is not empty": "Non è vuoto", "Is not equal to": "Non è uguale a", "Issues and Improvements": "Problemi e miglioramenti", "Item": "Elemento", "Item Count": "Conto articoli", "Item deleted.": "Elemento eliminato.", "Item Index": "Indice degli oggetti", "Item Max Width": "Larghezza massima dell'oggetto", "Item renamed.": "Elemento rinominato.", "Item uploaded.": "Elemento caricato.", "Item Width": "Larghezza elemento", "Item Width Mode": "Modalità larghezza dell'elemento", "Items": "Elementi", "JPEG": "JPEG", "JPEG to AVIF": "Da JPEG a AVIF", "JPEG to WebP": "Da JPEG a WebP", "Justify": "Giustifica", "Justify columns at the bottom": "Giustifica le colonne in basso", "Keep existing": "Mantieni l'esistente", "Ken Burns Duration": "Durata Ken Burns", "Ken Burns Effect": "Effetto Ken Burns", "l": "l", "Label": "Etichetta", "Label Margin": "Margine dell'etichetta", "Labels": "Etichette", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Le immagini orizzontali e verticali sono centrate all'interno delle celle della griglia. La larghezza e altezza saranno capovolte quando le immagini vengono ridimensionate.", "Large": "Largo", "Large (Desktop)": "Largo (Desktop)", "Large padding": "Padding largo", "Large Screen": "Schermo grande", "Large Screens": "Schermi grandi", "Larger padding": "Padding maggiore", "Larger style": "Stile più grande", "Last 24 hours": "Ultime 24 ore", "Last 30 days": "Ultimi 30 giorni", "Last 7 days": "Ultimi 7 giorni", "Last Column Alignment": "Allineamento ultima colonna", "Last Item": "Ultimo oggetto", "Last Modified": "Ultima modifica", "Last name": "Cognome", "Last visit date": "Data dell'ultima visita", "Layout": "Layout", "Layout Media Files": "File multimediali di layout", "Lazy load video": "Lazy load per i video", "Lead": "Condurre", "Learning Layout Techniques": "Apprendimento tecniche di Layout", "Left": "Sinistra", "Left (Not Clickable)": "Sinistra (non cliccabile)", "Left Bottom": "Sinistra in basso", "Left Center": "Sinistra al centro", "Left Top": "Sinistra in alto", "Less than": "Meno di", "Library": "Libreria", "Light": "Chiaro", "Light Text": "Testo chiaro", "Lightbox": "Lightbox", "Lightbox only": "Solo lightbox", "Lighten": "Schiarire", "Lightness": "Luminosità", "Limit": "Limite", "Limit by %taxonomies%": "Limite per %taxonomies%", "Limit by Categories": "Limite per categorie", "Limit by Date Archive Type": "Limite per Date Archive Type", "Limit by Language": "Limite per lingua", "Limit by Menu Heading": "Limite per il menu dell'intestazione", "Limit by Page Number": "Limite per numero di pagine", "Limit by Products on sale": "Limite per prodotti in vendita", "Limit by Tags": "Limite per tag", "Limit by Terms": "Limite per termini", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Limita la lunghezza del contenuto a un numero di caratteri. Tutti gli elementi HTML verranno rimossi.", "Limit the number of products.": "Limita il numero di prodotti.", "Line": "Linea", "Link": "Collegamento", "link": "collegamento", "Link ARIA Label": "Etichetta link ARIA", "Link card": "Link della card", "Link image": "Link dell'immagine", "Link Muted": "Collegamento disattivato", "Link overlay": "Link della sovrapposizione", "Link panel": "Link del pannello", "Link Parallax": "Link parallasse", "Link Reset": "Reset del link", "Link Style": "Stile del collegamento", "Link Target": "Target Link", "Link Text": "Testo del link", "Link the image if a link exists.": "Crea il link all'immagine se il link esiste.", "Link the title if a link exists.": "Crea il link al titolo se il link esiste.", "Link the whole card if a link exists.": "Linka la card completa, se esiste un link.", "Link the whole overlay if a link exists.": "Crea il link sulla sovrapposizione se il link esiste.", "Link the whole panel if a link exists.": "Crea il link sul pannello se il link esiste.", "Link title": "Link titolo", "Link Title": "Titolo del collegamento", "Link to redirect to after submit.": "Link a cui reindirizzare dopo l'invio.", "List": "Lista", "List All Tags": "Elenca tutti i tag", "List Item": "Lista elemento", "List Style": "Stile del collegamento", "Load Bootstrap": "Carica Bootstrap", "Load Font Awesome": "Carica Font Awesome", "Load image eagerly": "Carica l'immagine in modo anticipato", "Load jQuery": "Carica jQuery", "Load jQuery to write custom code based on the jQuery JavaScript library.": "Carica jQuery per scrivere codice personalizzato basato sulla libreria di jQuery JavaScript.", "Load product on sale only": "Caricare solo il prodotto in vendita", "Load products on sale only": "Caricare solo i prodotti in vendita", "Loading": "Caricamento", "Loading Layouts": "Caricamento Layout", "Location": "Posizione", "Login Page": "Pagina di login", "Logo End": "Logo finale", "Logo Image": "Immagine del logo", "Logo Text": "Testo del logo", "Loop video": "Riproduzione continuata", "Lost Password Confirmation Page": "Pagina di conferma di perdita della password", "Lost Password Page": "Pagina di perdita della password", "Luminosity": "Luminosità", "Mailchimp API Token": "Token di Mailchimp API", "Main Section Height": "Altezza della sezione principale", "Main styles": "Stili principali", "Make header transparent": "Rendere l'intestazione trasparente", "Make only first item active": "Rendere solo il primo oggetto attivo", "Make SVG stylable with CSS": "Rendi gli SVG personalizzabili con i CSS", "Managing Menus": "Gestione menu", "Managing Modules": "Gestione moduli", "Managing Sections, Rows and Elements": "Gestione di sezioni, righe ed elementi", "Managing Templates": "Gestione templates", "Managing Widgets": "Gestione widgets", "Map": "Mappa", "Mapping Fields": "Mappatura campi", "Margin": "Margine", "Margin Top": "Margine superiore", "Marker": "Marcatore", "Marker Color": "Colore del marker", "Marker Icon": "Icona del marcatore", "Match content height": "Adegua l'altezza dei contenuti", "Match height": "Adegua l'altezza", "Match Height": "Adegua l'altezza", "Match the height of all modules which are styled as a card.": "Rendi uguale l'altezza di tutti i moduli che utilizzano lo stile Card.", "Match the height of all widgets which are styled as a card.": "Rendi uguale l'altezza di tutti i widgets che utilizzano lo stile Card.", "Max Height": "Altezza massima", "Max Width": "Larghezza massima", "Max Width (Alignment)": "Larghezza massima (allineamento)", "Max Width Breakpoint": "Larghezza massima del breakpoint", "Maximum Zoom": "Zoom massimo", "Maximum zoom level of the map.": "Livello massimo di zoom della mappa.", "Media Folder": "Cartella Media", "Medium (Tablet Landscape)": "Medio (Tablet in Landscape)", "Menu Divider": "Divisore del Menu", "Menu Style": "Stile Menu", "Menus": "Menu", "Message": "Messaggio", "Message shown to the user after submit.": "Messaggio mostrato all'utente dopo l'invio.", "Meta Alignment": "Allineamento Meta", "Meta Margin": "Margine Meta", "Meta Parallax": "Parallasse Meta", "Meta Style": "Stile Meta", "Meta Width": "Larghezza Meta", "Min Height": "Altezza minima", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Ricorda che un layout generico è assegnato a questa pagina. Modifica il template per aggiornare il suo layout.", "Minimum Stability": "Stabilità minima", "Minimum Zoom": "Zoom minimo", "Minimum zoom level of the map.": "Livello minimo di zoom della mappa.", "Mobile Logo (Optional)": "Logo Mobile (Opzionale)", "Modal Width/Height": "Larghezza/Altezza Modal", "Mode": "Modalità", "Module": "Modulo", "Module Position": "Posizione modulo", "Modules": "Moduli", "Move the sidebar to the left of the content": "Sposta la sidebar a sinistra del contenuto", "Multiple Items Source": "Origine di più elementi", "Mute video": "Silenzia video", "Name": "Nome", "Names": "Nomi", "Navbar Style": "Stile della Navbar", "Navigation": "Navigazione", "Navigation Label": "Etichetta Navigazione", "Navigation Thumbnail": "Miniatura Navigazione", "New Layout": "Nuovo Layout", "New Menu Item": "Nuovo Elemento Menu", "New Module": "Nuovo Modulo", "New Template": "Nuovo template", "Next %post_type%": "Prossimo %post_type%", "Next Article": "Prossimo articolo", "Next-Gen Images": "Immagini next-Gen", "No %item% found.": "Nessun %item% è stato trovato.", "No critical issues found.": "Non sono stati trovati problemi critici.", "No element found.": "Nessun elemento trovato.", "No element presets found.": "Nessun elemento predefinito trovato.", "No files found.": "Nessun file trovato.", "No font found. Press enter if you are adding a custom font.": "Nessun font trovato. Premi Invio se stai aggiungendo un font personalizzato.", "No icons found.": "Nessuna icona trovata.", "No items yet.": "Ancora nessun elemento.", "No layout found.": "Nessun layout trovato.", "No limit": "Nessun limite", "No list selected.": "Nessun elenco selezionato.", "No Results": "Nessun risultato", "No results.": "Nessun risultato.", "No source mapping found.": "Nessuna sorgente per la mappatura è stata trovata.", "No style found.": "Nessuno stile trovato.", "None": "Nessuno", "Not assigned": "Non assegnato", "Offcanvas Mode": "Modalità offcanvas", "Only available for Google Maps.": "Disponibile solo per Google Maps.", "Only display modules that are published and visible on this page.": "Visualizza solo i moduli pubblicati e visibili su questa pagina.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Solo le pagine e post singoli possono avere il proprio layout. Usa un template per applicare un layout generico a questo tipo di pagina.", "Opacity": "Opacità", "Open in a new window": "Apri in una nuova finestra", "Open Templates": "Apri Templates", "Open the link in a new window": "Apri il collegamento in una nuova finestra", "Opening the Changelog": "Apertura del registro delle modifiche", "Options": "Opzioni", "Order": "Ordine", "Order First": "Ordina Prima", "Order Received Page": "Pagina ordine ricevuto", "Ordering Sections, Rows and Elements": "Ordinamento di sezioni, righe ed elementi", "Out of Stock": "Esaurito", "Outside Breakpoint": "Punto di rottura esterno", "Outside Color": "Colore esterno", "Overlap the following section": "Sovrapponi la sezione successiva", "Overlay": "Sovrapposizione", "Overlay Color": "Colore sovrapposizione", "Overlay Parallax": "Parallasse sovraimpressione", "Overlay the site": "Sovrapponi il sito", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Sovrascrivi le impostazioni di animazione della sezione. Questa opzione non avrà effetto se le animazioni sono disabilitate per questa sezione.", "Page": "Pagina", "Page Title": "Titolo della pagina", "Pagination": "Paginazione", "Panel": "Pannello", "Panel Slider": "Pannello di scorrimento", "Panels": "Pannelli", "Parallax": "Paralasse", "Parallax Breakpoint": "Breakpoint parallasse", "Pause autoplay on hover": "Metti in pausa al passaggio del mouse", "Phone Landscape": "Telefono in Landscape", "Phone Portrait": "Telefono in Portrait", "Photos": "Fotografie", "Pick": "Scegli", "Pick %type%": "Scegli %type%", "Pick an alternative icon from the icon library.": "Scegli un'icona alternativa dalla libreria delle icone.", "Pick an alternative SVG image from the media manager.": "Scegli un'immagine SVG alternativa dal gestore dei media.", "Pick file": "Scegli un file", "Pick icon": "Scegli l'icona", "Pick link": "Scegli un link", "Pick media": "Scegli un media", "Pick video": "Scegli un video", "Placeholder Image": "Immagine di placeholder", "Play inline on mobile devices": "Riproduci inline sui dispositivi mobili", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Installa/Abilita l'<a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> per abilitare questa caratteristica.", "Please provide a valid email address.": "Per favore fornisci un indirizzo email valido.", "Position": "Posizione", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Posiziona l'elemento sopra o sotto gli altri elementi. Se hanno lo stesso livello, la posizione dipende dall'ordine nel layout.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Posizionare l'elemento nel flusso del contenuto o nel flusso normale ma con un offset rispetto a se stesso oppure rimuoverlo dal flusso e posizionarlo rispetto alla colonna di contenimento.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Posiziona la navigazione del filtro in alto, a sinistra oa destra. Uno stile più ampio può essere applicato alla navigazione sinistra e destra.", "Position the meta text above or below the title.": "Posiziona il testo meta sopra o sotto il titolo.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Posiziona la navigazione in alto, in basso, a sinistra o destra. Le navigazioni di destra e di sinistra possono avere uno stile più largo.", "Post": "Articolo", "Postal/ZIP Code": "Codice postale", "Poster Frame": "Cornice anteprima", "Preserve text color": "Mantieni il colore del testo", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Mantieni il colore del testo, per esempio quando usi le cards. La sovrapposizione della sezione non è supportata da tutti gli stili e può non aver nessuno effetto.", "Preview all UI components": "Visualizza l'anteprima di tutti i componenti dell'interfaccia utente", "Previous Article": "Articolo precedente", "Primary navigation": "Navigazione Principale", "Product Description": "Descrizione del prodotto", "Products": "Prodotti", "Property": "Proprietà", "Quantity": "Quantità", "Quarters": "Quarti", "Quarters 1-1-2": "Quarti 1-1-2", "Quarters 1-2-1": "Quarti 1-2-1", "Quarters 1-3": "Quarti 1-3", "Quarters 2-1-1": "Quarti 2-1-1", "Quarters 3-1": "Quarti 3-1", "Quotation": "Citazione", "Random": "Casuale", "Rating": "Valutazione", "Ratio": "Rapporto", "Recompile style": "Ricompila lo stile", "Register date": "Data di registrazione", "Registered": "Registrato", "Reject Button Style": "Stile del bottone per rifiutare", "Reject Button Text": "Testo del bottone per rifiutare", "Related Articles": "Articoli correlati", "Related Products": "Prodotti correlati", "Reload Page": "Ricarica pagina", "Remove bottom margin": "Rimuovi margine inferiore", "Remove bottom padding": "Rimuovi padding inferiore", "Remove horizontal padding": "Rimuovi il padding orizzontale", "Remove left and right padding": "Rimuovi la spaziatura destra e sinistra", "Remove left logo padding": "Rimuovo la spaziatura sinistra del logo", "Remove left or right padding": "Rimuovi la spaziatura destra e sinistra", "Remove Media Files": "Rimuovi i file multimediali", "Remove top margin": "Rimuovi margine superiore", "Remove top padding": "Rimuovi il padding superiore", "Rename": "Rinomina", "Rename %type%": "Rinomina %type%", "Replace": "Sostituisci", "Replace layout": "Sostituisci layout", "Reset to defaults": "Resetta alle impostazioni di default", "Reverse order": "Ordine inverso", "Right": "Destra", "Roles": "Ruoli", "Root": "root", "Rotate": "Rotazione", "Rotate the title 90 degrees clockwise or counterclockwise.": "Ruota il titolo di 90 gradi orario o antiorario.", "Rotation": "Rotazione", "Row": "Riga", "Row Gap": "Spaziatura riga", "Rows": "Righe", "Run Time": "Tempo di esecuzione", "Saturation": "Saturazione", "Save": "Salva", "Save %type%": "Salva %type%", "Save in Library": "Salva nella libreria", "Save Layout": "Salva layout", "Save Style": "Salva lo stile", "Save Template": "Salva il template", "Scale": "Scala", "Search": "Ricerca", "Search Component": "Componente di ricerca", "Search Item": "Ricerca elemento", "Search Style": "Stile della ricerca", "Search Word": "Ricerca parola", "Section": "Sezione", "Section Animation": "Animazione della sezione", "Section Height": "Altezza della sezione", "Section Image and Video": "Immagine e Video della sezione", "Section Padding": "Padding della sezione", "Section Style": "Stile della sezione", "Section Title": "Titolo della sezione", "Section Width": "Larghezza della sezione", "Section/Row": "Sezione/Riga", "Select": "Seleziona", "Select %item%": "Seleziona %item%", "Select %type%": "Seleziona %type%", "Select a card style.": "Seleziona uno stile per la scheda.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Seleziona una fonte di contenuto per rendere i suoi campi disponibili per la mappatura. Scegli tra le origini della pagina corrente o esegui una query su una fonte personalizzata.", "Select a different position for this item.": "Seleziona una posizione differente per questo elemento.", "Select a grid layout": "Seleziona un layout per la griglia", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Seleziona una posizione del modulo di Joomla che mostrerà tutti i moduli pubblicati. Si consiglia di utilizzare le posizioni da -1 a -6 del builder, che non sono rese altrove dal tema.", "Select a panel style.": "Seleziona uno stile del pannello.", "Select a predefined date format or enter a custom format.": "Seleziona un formato di data predefinito o inserisci un formato personalizzato.", "Select a predefined meta text style, including color, size and font-family.": "Seleziona lo stile predefinito per il testo \"meta\", incluso colore, dimensione e font.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Seleziona un modello di ricerca predefinito o inserisci una stringa personalizzata o un'espressione regolare da cercare. L'espressione regolare deve essere racchiusa tra le virgolette. Ad esempio \"mia-stringa\" o \"/ab+c/\".", "Select a predefined text style, including color, size and font-family.": "Selezione uno style predefinito per il testo, incluso colore, grandezza e font.", "Select a style for the continue reading button.": "Seleziona uno stile per il pulsante di lettura continua.", "Select a style for the overlay.": "Seleziona uno stile per la sovrapposizione.", "Select a transition for the content when the overlay appears on hover.": "Seleziona una transizione per il contenuto quando la sovrapposizione appare al passaggio del mouse.", "Select a transition for the link when the overlay appears on hover.": "Seleziona una transizione per il link quando la sovrapposizione appare al passaggio del mouse.", "Select a transition for the meta text when the overlay appears on hover.": "Seleziona una transizione per il testo meta quando la sovrapposizione appare al passaggio del mouse.", "Select a transition for the overlay when it appears on hover.": "Seleziona una transizione per la sovrapposizione quando appare al passaggio del mouse.", "Select a transition for the title when the overlay appears on hover.": "Seleziona una transizione per il titolo quando la sovrapposizione appare al passaggio del mouse.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Seleziona un file video o inserisci un link da <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> o <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WooCommerce page.": "Seleziona una pagina WooCommerce.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Seleziona un area WordPress widget che mostrerà tutti i moduli pubblicati. Si consiglia di utilizzare le posizioni da -1 a -6 del builder, che non sono rese altrove dal tema.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Seleziona un logo alternativo con colori invertiti, es.: bianco per una visibilità migliore su colori scuri. Sarà visualizzato automaticamente, se necessario.", "Select an alternative logo, which will be used on small devices.": "Seleziona un logo alternativo, sarà utilizzato sui dispositivi mobili (cellulari, tablet).", "Select an animation that will be applied to the content items when filtering between them.": "Selezionare un'animazione da applicare agli elementi del contenuto quando si filtra tra di essi.", "Select an animation that will be applied to the content items when toggling between them.": "Selezionare un'animazione da applicare agli elementi del contenuto quando si passa da uno all'altro.", "Select an image transition.": "Seleziona una transizione per l'immagine.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Scegli una transizione per l'immagine, se l'immagine al passaggio del mouse è impostata, la transizione si attiverà tra le due immagini. If <i>Nessuna</i> è selezionato, l'immagine al passaggio del mouse svanirà.", "Select an optional image that appears on hover.": "Seleziona un immagine opzionale che apparirà al passaggio del mouse.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Selezionare un'immagine opzionale che verrà visualizzata fino alla riproduzione del video. Se non viene selezionata, il primo fotogramma del video verrà visualizzato come poster.", "Select header layout": "Seleziona un layout per l'intestazione", "Select Image": "Seleziona Immagine", "Select one of the boxed card or tile styles or a blank panel.": "Selezionare uno degli stili tra Card, Tile o Blank Panel.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Seleziona il punto di interruzione da cui la colonna inizierà a comparire prima delle altre colonne. Su schermi di dimensioni inferiori, la colonna apparirà nell'ordine naturale.", "Select the color of the list markers.": "Seleziona il colore degli indicatori di elenco.", "Select the content position.": "Scegli la posizione del contenuto.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Seleziona lo stile di navigazione del filtro. Gli stili pillola e divisore sono disponibili solo per orizzontale Subnav.", "Select the form size.": "Seleziona la grandezza del form.", "Select the form style.": "Seleziona lo stile del form.", "Select the icon color.": "Seleziona il colore dell'icona.", "Select the image border style.": "Seleziona lo stile per il bordo dell'immagine.", "Select the image box decoration style.": "Seleziona lo stile di decorazione del box dell'immagine.", "Select the image box shadow size on hover.": "Seleziona la misura dell'ombra dell'immagine al passaggio del mouse.", "Select the link style.": "Seleziona lo stile per il link.", "Select the list style.": "Seleziona lo stile della lista.", "Select the list to subscribe to.": "Selezionare la lista a cui iscriversi.", "Select the marker of the list items.": "Seleziona il marcatore degli elementi dell'elenco.", "Select the nav style.": "Seleziona lo stile di navigazione.", "Select the navbar style.": "Seleziona lo stile della Navbar.", "Select the navigation type.": "Scegli il tipo di navigazione.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Seleziona lo stile di navigazione. Gli stili pillola e linea solo disponibili solo per i sottomenù orizzontali.", "Select the overlay or content position.": "Seleziona la posizione della sovrapposizione o del contenuto.", "Select the position of the navigation.": "Scegli la posizione della navigazione.", "Select the position of the slidenav.": "Seleziona la posizione per la slidenav.", "Select the position that will display the search.": "Selezionare la posizione in cui visualizzare la ricerca.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Seleziona la posizione per le icone social. Assicurati di aggiungere i link dei tuoi profili social o nessuna icona sarà visualizzata.", "Select the search style.": "Seleziona lo stile del modulo Cerca.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Seleziona lo stile per l'evidenziazione del codice. usa GitHub per lo sfondo chiaro e Monokai per sfondo scuro.", "Select the style for the overlay.": "Seleziona lo stile per la sovrapposizione.", "Select the subnav style.": "Seleziona lo stile per la Subnav.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Seleziona il colore dell'SVG. Si applicherà solo agli elementi supportati definiti nell'SVG.", "Select the table style.": "Seleziona lo stile per la tabella.", "Select the text color.": "Seleziona il colore del testo.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Seleziona il colore del testo. Se l'opzione sfondo è selezionata, gli stili che non applicano un'immagine di sfondo usano il colore primario.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Seleziona il colore del testo. Se l'opzione sfondo è selezionata, gli stili che non applicano un'immagine di sfondo usano il colore primario.", "Select the title style and add an optional colon at the end of the title.": "Seleziona lo stile del titolo e una punteggiatura opzionale alla fine del titolo.", "Select the transformation origin for the Ken Burns animation.": "Seleziona il punto di origine della trasformazione per l'animazione Ken Burns.", "Select the transition between two slides.": "Scegli la transizione tra due slide.", "Select the video box shadow size.": "Seleziona la grandezza dell'ombra del box video.", "Select whether a button or a clickable icon inside the email input is shown.": "Selezionare se viene visualizzato un pulsante o un'icona cliccabile all'interno dell'input email.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Selezionare se verrà visualizzato un messaggio o se il sito verrà reindirizzato dopo aver fatto clic sul pulsante di sottoscrizione.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Seleziona se la ricerca predefinita o la ricerca intelligente viene utilizzata dal modulo di ricerca e dall'elemento generatore.", "Select whether the modules should be aligned side by side or stacked above each other.": "Seleziona se i moduli devono essere allineati uno accanto all'altro o sovrapposti.", "Sentence": "Frase", "Separator": "Separatore", "Serve WebP images": "Fornisci immagini WebP", "Set a condition to display the element or its item depending on the content of a field.": "Imposta una condizione per visualizzare l'elemento o il suo sottoelemento a seconda del contenuto di un campo.", "Set a different link text for this item.": "Imposta un differente testo del link per questo elemento.", "Set a different text color for this item.": "Scegli un colore differente per il testo di questo elemento.", "Set a fixed width.": "Imposta una larghezza fissa.", "Set a higher stacking order.": "Imposta un ordine di sovrapposizione più alto.", "Set a large initial letter that drops below the first line of the first paragraph.": "Imposta una lettera iniziale di grandi dimensioni che scende sotto la prima riga del primo paragrafo.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Impostare una larghezza della sidebar in percentuale e il contenuto della colonna si regolerà di conseguenza. La larghezza non andrà al di sotto la min-width della sidebar, che è possibile impostare nella sezione Style.", "Set an additional transparent overlay to soften the image or video.": "Impostare un overlay trasparente aggiuntivo per ammorbidire l'immagine o il video.", "Set an additional transparent overlay to soften the image.": "Imposta una sovrapposizione trasparente aggiuntiva per ammorbidire l'immagine.", "Set an optional content width which doesn't affect the image if there is just one column.": "Imposta una larghezza opzionale del contenuto che non influisca sull'immagine se c'è solo una colonna.", "Set an optional content width which doesn't affect the image.": "Imposta una larghezza del contenuto opzionale che non influisca sull'immagine.", "Set how the module should align when the container is larger than its max-width.": "Impostare come il modulo si dovrebbe allineare quando il contenitore è più grande della sua massima larghezza.", "Set light or dark color if the navigation is below the slideshow.": "Imposta il colore chiaro o scuro se la navigazione è sotto lo slideshow.", "Set light or dark color if the slidenav is outside.": "Imposta il colore chiaro o scuro se la slidenav è al di fuori dello slideshow.", "Set light or dark color mode for text, buttons and controls.": "Imposta la modalità di colore chiara o scura per il testo, i bottoni e i controlli.", "Set light or dark color mode.": "Imposta la modalità colore chiara o scura.", "Set percentage change in lightness (Between -100 and 100).": "Imposta la percentuale di variazione della luminosità (tra -100 e 100).", "Set percentage change in saturation (Between -100 and 100).": "Imposta la percentuale di variazione della saturazione (tra -100 e 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Imposta la percentuale di variazione della correzione gamma (tra 0.01 e 10.0, dove 1.0 non applica correzioni).", "Set the autoplay interval in seconds.": "Imposta l'intervallo per l'autoplay in secondi.", "Set the blog width.": "Imposta la larghezza del blog.", "Set the breakpoint from which grid items will align side by side.": "Imposta il punto di interruzione da cui gli elementi della griglia verranno allineati uno accanto all'altro.", "Set the breakpoint from which grid items will stack.": "Scegli il breakpoint dal quale le celle della griglia andranno una sotto l'altra", "Set the breakpoint from which the sidebar and content will stack.": "Scegli il breakpoint dal quale la sidebar e il contenuto andranno una sotto l'altro.", "Set the button size.": "Imposta la grandezza del bottone.", "Set the button style.": "Imposta lo stile del bottone.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Imposta la larghezza della colonna per ogni punto di interruzione. Mescola larghezze in frazioni o combina larghezze fisse con il valore <i> Espandi </i>. Se non è selezionato alcun valore, viene applicata la larghezza della colonna della dimensione dello schermo immediatamente inferiore. La combinazione di larghezze dovrebbe sempre prendere l'intera larghezza.", "Set the device width from which the list columns should apply.": "Imposta la larghezza del dispositivo da cui devono essere applicate le colonne dell'elenco.", "Set the device width from which the text columns should apply.": "Imposta la larghezza del dispositivo da cui devono essere applicate le colonne di testo.", "Set the duration for the Ken Burns effect in seconds.": "Imposta la durata dell'effetto Ken Burns in secondi", "Set the height in pixels.": "Imposta l'altezza in pixel.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Imposta la posizione orizzontale del bordo inferiore dell'elemento in pixel. È possibile inserirla anche in % o vw.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Imposta la posizione orizzontale del bordo di sinistra dell'elemento in pixel. È possibile inserirla anche in % o vw.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Imposta la posizione orizzontale del bordo di destra dell'elemento in pixel. È possibile inserirla anche in % o vw.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Imposta la posizione orizzontale del bordo superiore dell'elemento in pixel. È possibile inserirla anche in % o vw.", "Set the hover style for a linked title.": "Imposta lo stile al passaggio del mouse del titolo linkato.", "Set the hover transition for a linked image.": "Imposta lo stile al passaggio del mouse dell'immagine linkata.", "Set the hue, e.g. <i>#ff0000</i>.": "Imposta la tonalità, ad es. <i>#ff0000</i>.", "Set the icon color.": "Imposta il colore dell'icona", "Set the icon width.": "Imposta la larghezza dell'icona.", "Set the initial background position, relative to the page layer.": "Inserisci la posizione iniziale dello sfondo, relativa al livello della pagina.", "Set the initial background position, relative to the section layer.": "Inserisci la posizione iniziale dello sfondo, relativa al livello della sezione", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Inserisci la risoluzione iniziale alla quale mostrare la mappa. 0 è completamente zoomata e 18 è la massima risoluzione possibile", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Imposta la larghezza dell'elemento per ogni punto di interruzione. <i>Ereditare</i> si riferisce alla larghezza dell'oggetto della successiva dimensione dello schermo più piccola.", "Set the link style.": "Imposta lo stile del collegamento.", "Set the margin between the countdown and the label text.": "Imposta il margine tra il countdown e l'etichetta di testo", "Set the margin between the overlay and the slideshow container.": "Imposta il margine tra l'overlay e il contenitore della presentazione.", "Set the maximum content width.": "Imposta la larghezza massima del contenuto.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Inserisci la larghezza massima del contenuto. Nota: La sezione potrebbe già avere una larghezza massima, che non puoi superare", "Set the maximum header width.": "Imposta la larghezza massima dell'intestazione.", "Set the maximum height.": "Imposta l'altezza massima", "Set the maximum width.": "Imposta la larghezza massima.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Impostare il numero di colonne della griglia per ogni punto di interruzione. <i>Inherit</i> si riferisce al numero di colonne della dimensione dello schermo immediatamente inferiore. <i>Auto</i> espande le colonne alla larghezza dei loro elementi, riempiendo le righe di conseguenza.", "Set the number of list columns.": "Imposta il numero di colonne dell'elenco.", "Set the number of text columns.": "Imposta il numero di colonne di testo.", "Set the padding between sidebar and content.": "Impostare il padding tra la sidebar e il contenuto.", "Set the padding between the overlay and its content.": "Configura il padding tra la sovrapposizione e il suo contenuto.", "Set the padding.": "Imposta il padding.", "Set the post width. The image and content can't expand beyond this width.": "Imposta la larghezza del'articolo. L'immagine e il contenuto non possono espandersi oltre questa larghezza.", "Set the search input size.": "Imposta la dimensione dell'input di ricerca.", "Set the search input style.": "Imposta lo stile dell'input di ricerca.", "Set the size of the column gap between multiple buttons.": "Imposta la spaziatura della colonna tra i bottoni.", "Set the size of the column gap between the numbers.": "Imposta la spaziatura della colonna tra i numeri.", "Set the size of the gap between between the filter navigation and the content.": "Imposta la spaziatura tra i filtri di navigazione e il contenuto.", "Set the size of the gap between the grid columns.": "Imposta la spaziatura tra le colonne della griglia.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Imposta la spaziatura tra le colonne della griglia. Definisci il numero delle colonne in <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Articoli in evidenza Layout</a> nelle impostazioni di Joomla", "Set the size of the gap between the grid rows.": "Imposta la spaziatura tra le righe della griglia.", "Set the size of the gap between the image and the content.": "Imposta la spaziatura tra l'immagine e il contenuto.", "Set the size of the gap between the navigation and the content.": "Imposta la spaziatura tra la navigazione il contenuto.", "Set the size of the gap between the social icons.": "Imposta la dimensione dello spazio tra le icone social.", "Set the size of the gap between the title and the content.": "Imposta la spaziatura tra il titolo e il contenuto.", "Set the size of the gap if the grid items stack.": "Imposta la spaziatura se gli elementi della griglia vanno uno sotto l'altro.", "Set the size of the row gap between multiple buttons.": "Imposta la spaziatura della riga tra i bottoni.", "Set the size of the row gap between the numbers.": "Imposta la spaziatura della riga tra i numeri.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Imposta un rapporto. Raccomandiamo di utilizzare lo stesso rapporto dell'immagine di sfondo. Puoi utilizzare semplicemente la sua larghezza e altezza, es: <code>1600:900</code>.", "Set the starting point and limit the number of items.": "Imposta il punto di partenza e limita il numero di elementi.", "Set the top margin if the image is aligned between the title and the content.": "Imposta il margine superiore se l'immagine è allineata tra il titolo e il contenuto.", "Set the top margin.": "Imposta il margine superiore.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Imposta il margine superiore. Il margine si applicherà solo se il campo del contenuto segue immediatamente un altro campo del contenuto.", "Set the velocity in pixels per millisecond.": "Imposta la velocità in pixels per millisecondi", "Set the vertical container padding to position the overlay.": "Imposta il padding del contenitore per posizionare l'overlay.", "Set the vertical margin.": "Impostare il margine verticale.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Seleziona i margini verticali. Nota: il margine superiore del primo elemento e il margine inferiore dell'ultimo elemento sono sempre rimossi. Definiscili nelle impostazioni della griglia.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Seleziona i margini verticali. Nota: il margine superiore della prima griglia e il margine inferiore dell'ultima griglia sono sempre rimossi. Definiscili nelle impostazioni della sezione.", "Set the vertical padding.": "Imposta il padding verticale.", "Set the video dimensions.": "Imposta le dimensioni del video.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Imposta l'altezza e la larghezza del contenuto della lightbox (es: immagine, video o iframe)", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Imposta larghezza e altezza in pixels (es. 600). Impostare solo un valore manterrà le proporzioni originali. L'immagine sarà ridimensionata e tagliata automaticamente.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Imposta larghezza e altezza in pixels. Impostare solo un valore manterrà le proporzioni originali. L'immagine sarà ridimensionata e tagliata automaticamente.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Imposta la larghezza in pixel. Se non viene impostata alcuna larghezza, la mappa prenderà l'intera larghezza e manterrà l'altezza. Oppure usa la larghezza solo per definire il punto di interruzione da cui la mappa inizia a ridursi preservando le proporzioni.", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Configurando solo un valore si preservano le proporzioni originali. L'immagine sarà ridimensionata e tagliata automaticamente e dove possibile, immagini ad alta risoluzione verranno generate automaticamente.", "Setting Menu Items": "Impostazione delle voci di menu", "Setting the Blog Content": "Impostazione del contenuto del blog", "Setting the Blog Image": "Impostazione dell'immagine del blog", "Setting the Blog Layout": "Impostazione del layout del blog", "Setting the Blog Navigation": "Impostazione della navigazione del blog", "Setting the Dialog Layout": "Impostazione di layout della finestra di dialogo", "Setting the Header Layout": "Impostazione del layout dell'intestazione", "Setting the Main Section Height": "Impostazione dell'altezza della sezione Main", "Setting the Minimum Stability": "Impostazione della stabilità minima", "Setting the Mobile Dialog Layout": "Impostazione del layout della finestra di dialogo Mobile", "Setting the Mobile Header Layout": "Impostazione del layout dell'intestazione Mobile", "Setting the Mobile Search": "Impostazione della ricerca Mobile", "Setting the Module Appearance Options": "Impostazione delle opzioni di aspetto del modulo", "Setting the Module Default Options": "Impostazione delle opzioni predefinite del modulo", "Setting the Module Grid Options": "Impostazione delle opzioni della griglia del modulo", "Setting the Module List Options": "Impostazione delle opzioni dell'elenco dei moduli", "Setting the Module Menu Options": "Impostazione delle opzioni del menu del modulo", "Setting the Navbar": "Impostazione della barra di navigazione", "Setting the Page Layout": "Impostazione del layout di pagina", "Setting the Post Content": "Impostazione del contenuto del post", "Setting the Post Image": "Impostazione dell'immagine del post", "Setting the Post Layout": "Impostazione del layout del post", "Setting the Post Navigation": "Impostazione della navigazione del post", "Setting the Sidebar Area": "Impostazione dell'area della barra laterale", "Setting the Sidebar Position": "Impostazione della posizione della barra laterale", "Setting the Source Order and Direction": "Impostazione dell'ordine e della direzione di origine", "Setting the Template Loading Priority": "Impostazione della priorità di caricamento del modello", "Setting the Template Status": "Impostazione dello stato del modello", "Setting the Top and Bottom Areas": "Impostazione delle aree superiore e inferiore", "Setting the Top and Bottom Positions": "Impostazione delle posizioni superiore e inferiore", "Setting the Widget Appearance Options": "Impostazione delle opzioni di aspetto del widget", "Setting the Widget Default Options": "Impostazione delle opzioni predefinite del widget", "Setting the Widget Grid Options": "Impostazione delle opzioni della griglia del widget", "Setting the Widget List Options": "Impostazione delle opzioni dell'elenco del widget", "Setting the Widget Menu Options": "Impostazione delle opzioni del menu del widget", "Settings": "Impostazioni", "Short Description": "Descrizione breve", "Show": "Mostra", "Show %taxonomy%": "Mostra %taxonomy%", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Mostra un banner per informare i tuoi visitatori dei cookie utilizzati dal tuo sito web. Scegli tra una semplice notifica oppure se richiede un consenso obbligatorio prima di caricare i cookie.", "Show a divider between grid columns.": "Mostra un divisore tra le colonne della griglia.", "Show a divider between list columns.": "Mostra un divisore tra le colonne dell'elenco.", "Show a divider between text columns.": "Mostra un divisore tra le colonne di testo.", "Show a separator between the numbers.": "Mostra un divisore tra i numeri.", "Show archive category title": "Mostra il titolo della categoria di archivio", "Show as disabled button": "Mostra come pulsante disabilitato", "Show author": "Mostra autore", "Show below slideshow": "Mostra sotto allo slideshow", "Show button": "Mostra pulsante", "Show categories": "Mostra categorie", "Show Category": "Mostra Categoria", "Show close button": "Mostra il pulsante di chiusura", "Show comment count": "Mostra conteggio commenti", "Show comments count": "Mostra conteggio commenti", "Show content": "Mostra il contenuto", "Show Content": "Mostra contenuto", "Show controls": "Mostra controlli", "Show current page": "Mostra la pagina corrente", "Show date": "Mostra data", "Show dividers": "Mostra divisori", "Show drop cap": "Mostra capolettera", "Show filter control for all items": "Mostra controllo filtri per tutti gli elementi", "Show headline": "Mostra titolo", "Show home link": "Mostra il link home", "Show hover effect if linked.": "Mostra effetto hover se linkato", "Show intro text": "Mostra testo introduttivo", "Show Labels": "Mostra etichette", "Show link": "Mostra link", "Show lowest price": "Mostra il minor prezzo", "Show map controls": "Mostra controlli della mappa", "Show name fields": "Mostra il nome dei campi", "Show navigation": "Mostra navigazione", "Show on hover only": "Mostra solo al passaggio del mouse", "Show or hide content fields without the need to delete the content itself.": "Mostra o nascondi campi del contenuto senza doverli cancellare dal contenuto stesso", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Mostra o nascondi l'elemento su dispositivi con questa larghezza o più grandi. Se tutti gli elementi sono nascosti, le colonne, le righe e le sezioni si nasconderanno di conseguenza.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Mostra o nascondi il link alla home come primo elemento e la pagina corrente come ultimo elemento nella breadcrumb.", "Show or hide the intro text.": "Mostra o nascondi il testo introduttivo.", "Show or hide title.": "Mostra o nascondi il titolo.", "Show popup on load": "Mostra popup al caricamento", "Show rating": "Mostra valutazione", "Show Separators": "Mostra Separatori", "Show space between links": "Mostra spazio tra i links", "Show Start/End links": "Mostra link di inizio / fine", "Show system fields for single posts. This option does not apply to the blog.": "Mostra i campi di sistema per i singoli articoli. Questa opzione non si applica al blog.", "Show system fields for the blog. This option does not apply to single posts.": "Mostra i campi di sistema per il blog. Questa opzione non si applica ai singoli articoli.", "Show tags": "Mostra tags", "Show Tags": "Mostra tags", "Show the content": "Mostra il contenuto", "Show the excerpt in the blog overview instead of the post text.": "Mostra l'estratto nella panoramica del blog invece che nel testo del post", "Show the image": "Mostra immagine", "Show the link": "Mostra link", "Show the menu text next to the icon": "Mostra il testo del menu dopo l'icona", "Show the meta text": "Mostra sottotitolo", "Show the navigation label instead of title": "Mostra l'etichetta di navigazione invece del titolo", "Show the navigation thumbnail instead of the image": "Mostra le miniatura di navigazione invece dell'immagine", "Show the subtitle": "Mostra il sottotitolo", "Show the title": "Mostra il titolo", "Show title": "Mostra titolo", "Show Title": "Mostra titolo", "Single Article": "Singolo articolo", "Site": "Sito", "Site Title": "Titolo del sito", "Size": "Dimensioni", "Slide all visible items at once": "Scorri tutti gli elementi visibili in una volta", "Small (Phone Landscape)": "Piccolo (Telefono in Landscape)", "Social Icons": "Icone dei social", "Social Icons Gap": "Spazio tra le icone social", "Social Icons Size": "Grandezza icone social", "Split the dropdown into columns.": "Dividi la tendina in due colonne", "Spread": "Espandi", "Stack columns on small devices or enable overflow scroll for the container.": "Impila le colonne su dispositivi piccoli o abilità lo scrolling in eccesso del contenitore", "Stacked Center A": "Incolonnato al centro A", "Stacked Center B": "Incolonnato al centro B", "Stacked Center C": "Incolonnato al centro C", "Start": "Inizio", "State or County": "Stato o nazione", "Stretch the panel to match the height of the grid cell.": "Ingrandisci il panel fino a farlo combaciare con l'altezza della cella della griglia", "Style": "Stile", "Subtitle": "Sottotitolo", "Support": "Supporto", "SVG Color": "Colore SVG", "Syntax Highlighting": "Evidenziazione sintassi", "System Check": "Controllo del sistema", "Table": "Tabella", "Table Head": "Testata della tabella", "Tablet Landscape": "Tablet in Landscape", "Tags": "Tag", "Telephone": "Telefono", "Text": "Testo", "Text Alignment": "Allineamento del testo", "Text Alignment Breakpoint": "Breakpoint dell'allineamento del testo", "Text Alignment Fallback": "Fallback dell'allineamento del testo", "Text Color": "Colore testo", "Text Style": "Stile del testo", "The Area Element": "Area dell'elemento", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "La barra in alto spinge il contenuto verso il basso mentre la barra in basso è fissata sopra il contenuto.", "The builder is not available on this page. It can only be used on pages, posts and categories.": "Il builder non è disponibile su questa pagina. Può solo essere usato su pagine, post e categorie.", "The changes you made will be lost if you navigate away from this page.": "Le modifiche apportate verranno perse se cambi pagina.", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "L'altezza può adattarsi all'altezza della finestra. <br><br>Nota: assicurati che non sia impostata alcuna altezza nelle impostazioni della sezione quando utilizzi una delle opzioni della finestra.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "L'altezza si adatterà automaticamente in base al suo contenuto. In alternativa, l'altezza può adattarsi all'altezza del viewport. <br><br>Nota: Accertati che non sia impostata un'altezza nelle impostazioni della sezione quando si utilizza una delle opzioni di visualizzazione.", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "L'effetto masonry crea un layout privo di spazi vuoti anche se le celle della griglia hanno altezze diverse. ", "The Module Element": "L'elemento modulo", "The module maximum width.": "Larghezza massima del modulo.", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "La pagina è stata modificata da %modifiedBy%. Annulla le tue modifiche e ricarica?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "La pagina che stai modificando è stata aggiornata da %modified_by%. Salvando le tue modifiche sovrascriverai i cambiamenti precedenti. Vuoi salvare lo stesso o annullare le tue modifiche e ricaricare la pagina?", "The Position Element": "Posizione dell'elemento", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "Il plugin RSFirewall corrompe il contenuto del builder. Disabilità l'impostazione <em>Converti gli indirizzi email da testo a immagine</em>nella <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">Configurazione di RSFirewall </a>.", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "Il plug-in SEBLOD rende il builder non disponibile. Disabilita l'impostazione <em>Nascondi icona modifica</em> nella <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">configurazione di SEBLOD</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Lo slideshow occupa sempre tutta la larghezza e l'altezza si adatterà automaticamente in base al rapporto definito. In alternativa, l'altezza può adattarsi all'altezza del viewport <br><br>Nota: Accertati che non sia impostata un'altezza nelle impostazioni della sezione quando si utilizza una delle opzioni di visualizzazione.", "The Widget Element": "L'elemento widget", "The width of the grid column that contains the module.": "La larghezza della colonna della griglia che contiene il modulo", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "La cartella del tema YOOtheme pro è stata rinominata creando problemi con le funzionalià esseziali. Rinomina la cartella in <code>yootheme</code>", "Theme Settings": "Impostazioni tema", "Thirds": "Tre colonne", "Thirds 1-2": "Tre 1-2", "Thirds 2-1": "Tre 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Questa cartella memorizza le immagini scaricate quando si utilizzano i layout dalla libreria YOOtheme Pro. Si trova all'interno della cartella delle immagini di Joomla.", "This is only used, if the thumbnail navigation is set.": "usato solo se è stata impostata la navigazione a miniature", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Questo layout include un file multimediale che deve essere scaricato nella libreria multimediale del tuo sito Web. |||| Questo layout include %smart_count% file multimediali che devono essere scaricati nella libreria multimediale del tuo sito Web.", "This option doesn't apply unless a URL has been added to the item.": "Questa opzione non sarà applicata finchè non sarà aggiunta una URL all'elemento.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Questa opzione non sarà applicata finchè non sarà aggiunta una URL all'elemento. Solo il contenuto dell' elemento sarà linkato.", "This option is only used if the thumbnail navigation is set.": "Questa opzione sarà applicata solo se la navigazione a miniature è abilitata", "Thumbnail": "Miniatura", "Thumbnail Inline SVG": "Inline SVG miniatura", "Thumbnail SVG Color": "SVG Color miniatura", "Thumbnail Width/Height": "Larghezza/Altezza delle miniatura", "Thumbnail Wrap": "Wrap Miniatura", "Thumbnails": "Miniature", "Thumbnav Inline SVG": "Inline SVG navigazione a miniatura", "Thumbnav SVG Color": "SVG Color navigazione a miniatura", "Thumbnav Wrap": "Wrap Miniatura", "Title": "Titolo", "title": "titolo", "Title Decoration": "Decorazione del titolo", "Title Margin": "Margine Titolo", "Title Parallax": "Parallasse titolo", "Title Style": "Stile del titolo", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Gli stili di intestazione si differenziano per la dimensione del font ma possono anche avere colori, dimensioni e font predefiniti.", "Title Width": "Larghezza titolo", "To Top": "Torna su", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Le immagini allineate in alto, in basso, a sinistra o a destra possono essere attaccate al bordo del pannello. Se l'immagine è allineata a sinistra o a destra, si estenderà fino a coprire l'intero spazio.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Le immagini allineate in alto, a sinistra o a destra possono essere attaccate al bordo del pannello. Se l'immagine è allineata a sinistra o a destra, si estenderà fino a coprire l'intero spazio.", "Total Views": "Visualizzazioni totali", "Touch Icon": "Icona touch", "Transition": "Transizione", "Transparent Header": "Intestazione trasparente", "Type": "Tipo", "Understanding Status Icons": "Comprensione delle icone di stato", "Understanding the Layout Structure": "Comprensione della struttura del layout", "Updating YOOtheme Pro": "Aggiornamento di YOOtheme Pro", "Upload": "Carica", "Upload a background image.": "Carica un'immagine di sfondo.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Carica un'immagine di sfondo opzionale che ricopre l'intera pagina. Rimarrà fissa mentre si scrolla", "Upload Layout": "Carica layout", "Upload Preset": "Carica preset", "Upload Style": "Carica stile", "Use a numeric pagination or previous/next links to move between blog pages.": "Utilizzare una paginazione numerica o collegamenti precedenti/successivi per spostarsi tra le pagine del blog.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Usa opzionalmente un'altezza minima per prevenire che le immagini diventino troppo piccole rispetto al contenuto sui dispositivi mobili", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Usa opzionalmente un'altezza minima per prevenire che lo slider diventi troppo piccolo rispetto al contenuto sui dispositivi mobili", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Usa opzionalmente un'altezza minima per prevenire che lo slideshow diventi troppo piccolo rispetto al contenuto sui dispositivi mobili", "Use as breakpoint only": "Usa solo come punto di rottura", "Use double opt-in.": "Usa opt-in doppio", "Use excerpt": "Usa estratto", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Usa il colore di background in combinazione ai metodi di fusione, un immagine trasparente o per riempire l'area, se l'immagine non copre tutta la sezione", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Usa il colore di background con i metodi di fusione, un immagine trasparente o per riempire l'area, se l'immagine non copre tutta la sezione.", "Use the background color in combination with blend modes.": "Usa il colore di background in combinazione ai metodi di fusione.", "User": "Utente", "Username": "Nome utente", "Users": "Utenti", "Using Advanced Custom Fields": "Utilizza i campi avanzati personalizzati", "Using Content Fields": "Utilizza i campi del contenuto", "Using Content Sources": "Utilizza la sorgente del contenuto", "Using Custom Fields": "Utilizza i campi personalizzati", "Using Custom Post Type UI": "Utilizzo di tipi di post personalizzati (UI)", "Using Custom Post Types": "Utilizzo di tipi di post personalizzati", "Using Custom Sources": "Utilizza sorgenti personalizzate", "Using Dynamic Conditions": "Utilizzo delle condizioni dinamiche", "Using Elements": "Utilizzo di elementi", "Using Images": "Utilizza immagini", "Using Links": "Utilizza links", "Using Menu Locations": "Utilizza posizioni menu", "Using Menu Positions": "Utilizza posizioni menu", "Using Module Positions": "Utilizza posizioni moduli", "Using My Layouts": "Utilizzo dei miei layout", "Using My Presets": "Utilizzo delle mie preimpostazioni", "Using Page Sources": "Utilizzo delle sorgenti di pagina", "Using Pro Layouts": "Utilizzo di layout professionali", "Using Related Sources": "Utilizzo di fonti correlate", "Using the Before and After Field Options": "Utilizzo delle opzioni del campo Prima e Dopo", "Using the Builder Module": "Utilizzo del modulo Builder", "Using the Builder Widget": "Utilizzo del widget Builder", "Using the Categories and Tags Field Options": "Utilizzo delle opzioni del campo Categorie e tag", "Using the Content Field Options": "Utilizzo delle opzioni del campo contenuto", "Using the Content Length Field Option": "Utilizzo dell'opzione del campo della lunghezza del contenuto", "Using the Contextual Help": "Utilizzo dell'aiuto contestuale", "Value": "Valore", "Values": "Valori", "Velocity": "Velocità", "Version %version%": "Versione %version%", "Vertical Alignment": "Allineamento verticale", "Vertical navigation": "Navigazione verticale", "Vertically align the elements in the column.": "Allinea verticalmente gli elementi della colonna", "Vertically center grid items.": "Elementi della griglia allineati verticalmente", "Vertically center table cells.": "Centra verticalmente le celle della tabella", "Vertically center the image.": "Centra verticalmente l'immagine", "Vertically center the navigation and content.": "Centra verticalmente la navigazione e il contenuto.", "Videos": "Video", "View Photos": "Guarda le foto", "Viewport": "Riquadro di visualizzazione", "Visibility": "Visibilità", "Visible on this page": "Visibile su questa pagina", "Visual": "Visuale", "Votes": "Voti", "Website": "Sito web", "Website Url": "Url sito web", "What's New": "Novità", "When using cover mode, you need to set the text color manually.": "Quando utilizzi la modalità cover, devi configurare il colore del testo manualmente.", "Whole": "Intero", "Widget Area": "Area Widget", "Width": "Larghezza", "Width 100%": "Larghezza 100%", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Larghezza e altezza saranno scambiate a seconda se l'immagine è orizzontale o verticale", "Width/Height": "Larghezza/Altezza", "With mandatory consent": "Con esplicito consenso", "X-Large (Large Screens)": "X-Large (Schermi grandi)", "YOOtheme API Key": "Chiave API YOOtheme", "YOOtheme Help": "Aiuto YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro è completamente operativo e pronto a decollare.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro non è completamente operativo. Tutti i problemi critici devono essere risolti", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro è operativo ma ci sono dei problemi che vanno risolti per sbloccare funzioni e migliorare le prestazioni" }theme/languages/cs_CZ.json000064400000122023151666572140011525 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Vybrat -", "- Select Module -": "- Vybrat modul -", "- Select Position -": "- Vybrat pozici -", "- Select Widget -": "- Vybrat widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" již v knihovně existuje, bude přepsán při ukládání.", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% Element", "%email% is already a list member.": "%email% je již uveden v seznamu.", "%email% was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%email% byl trvale smazán a nelze jej znovu importovat. Kontakt se musí znovu přihlásit, aby byl přidán do seznamu.", "%label% - %group%": "%label% - %group%", "%label% (%depth%)": "%label% (%depth%)", "%label% Location": "%label% Umístění", "%label% Position": "%label% Pozice", "%name% already exists. Do you really want to rename?": "%name% již existuje. Chcete ho přejmenovat?", "%name% Copy": "%name% Kopírovat", "%name% Copy %index%": "%name% Kopírovat %index%", "%post_type% Archive": "%post_type% v Archivu", "%s is already a list member.": "%s je již uveden v seznamu.", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s byl trvale smazán a nelze jej znovu importovat. Kontakt se musí znovu přihlásit, aby byl přidán do seznamu.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% kolekce |||| %smart_count% kolekcí", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Element |||| %smart_count% Elementů", "%smart_count% File |||| %smart_count% Files": "%smart_count% Soubor |||| %smart_count% Soubory", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% vybraný soubor |||| %smart_count% vybraných souborů", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Ikona |||| %smart_count% Ikon", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Layout |||| %smart_count% Layoutů", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% media soubor nebylo staženo: |||| %smart_count% media souborů nebylo staženo:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Fotka |||| %smart_count% Fotek", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Nastavení |||| %smart_count% Nastaveních", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Styl |||| %smart_count% Stylů", "%smart_count% User |||| %smart_count% Users": "%smart_count% Uživatel |||| %smart_count% Uživatelů", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% se načtou pouze ze zvolené nadřazené %taxonomy%.", "%title% %index%": "Upravit %title% %index%", "%type% Presets": "%type% Nastaveních", "<code>json_encode()</code> must be available. Install and enable the <a href=\"https://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> extension.": "<code>json_encode()</code> musí být dostupný. Nainstalujte a zapněte <a href=\"http://php.net/manual/en/book.json.php\" target=\"_blank\">JSON</a> rozšíření.", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08.06.1999 (m.d.Y)", "1 Column": "1 sloupec", "1 Column Content Width": "šířka obsahu 1 sloupce", "100%": "100%", "2 Column Grid": "2 sloupcová mřížka", "2 Column Grid (Meta only)": "2 sloupcová mřížka (pouze meta)", "2 Columns": "2 sloupce", "20%": "20%", "25%": "25%", "2X-Large": "2X-větší", "3 Columns": "3 sloupce", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3rd Party Integration": "Integrace třetí strany", "3X-Large": "3X-větší", "4 Columns": "4 sloupce", "40%": "40%", "5 Columns": "5 sloupců", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6. srpna 1999 (j M, Y)", "6 Columns": "6 sloupců", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Doporučuje se vyšší hodnota paměti. Nastavte hodnotu <code>memory_limit</code> v <a href=\"http://php.net/manual/en/ini.core.php\" target=\"_blank\">konfiguraci PHP</a> na 128 M.", "A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Doporučuje se vyšší hodnota pro nahrávání. Nastavte hodnotu <code>post_max_size</code> v <a href=\"http://php.net/manual/en/ini.core.php\" target=\"_blank\">konfiguraci PHP</a> na 8 M.", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Doporučuje se vyšší hodnota pro nahrávání. Nastavte <code>upload_max_filesize</code> v <a href=\"http://php.net/manual/en/ini.core.php\" target=\"_blank\">konfiguraci PHP</a> na 8 M.", "About": "O", "Above Content": "Nad obsahem", "Above Title": "Nad nadpisem", "Absolute": "Absolutní", "Accessed": "Přístupná", "Accessed Date": "Datum přístupu", "Accordion": "Accordion (skládací obsah)", "Active": "Aktivní", "Active Filters": "Aktivní filtry", "Active Filters Count": "Počet aktivních filtrů", "Active item": "Aktivní položka", "Add": "Přidat", "Add a colon": "Přidat dvojtečku", "Add a comma-separated list of font weights to load, e.g. 300, 400, 600. Look up available variants at <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.": "Přidejte čárkami oddělený seznam tlouštěk písem k načtení, např. 300, 400, 600. Dostupné varianty vyhledejte na <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.", "Add a leader": "Přidat úvodník", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Přidat efekt parallaxu nebo fixní pozadí s ohledem na viewport zařízení při skrolování.", "Add a parallax effect.": "Přidat efekt parallaxu.", "Add a stepless parallax animation based on the scroll position.": "Přidejte plynulou animaci paralaxy na základě polohy posouvání.", "Add animation stop": "Přidat zastavení animace", "Add bottom margin": "Přidat spodní okraj", "Add clipping offset": "Přidat odsazení oříznutí", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Přidejte na svůj web vlastní CSS nebo Less. K dispozici jsou všechny proměnné a mixiny motivů Less. Značka <code><style></code> není potřeba.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Přidejte na svůj web vlastní JavaScript. Značka <code><script></code> není potřeba.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Přidejte vlastní JavaScript, který nastavuje soubory cookie. Načte se po udělení souhlasu. Značka <code><script></code> není potřeba.", "Add Element": "Přidat element", "Add extra margin to the button.": "Přidat k tlačítku další okraj.", "Add Folder": "Přidat složku", "Add hover style": "Přidat styl hover", "Add Item": "Přidat položku", "Add margin between": "Přidání okraje mezi", "Add Media": "Přidat média", "Add Menu Item": "Přidat položku Menu", "Add Module": "Přidat modul", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Přidejte více zarážek a definujte počáteční, střední a koncové barvy podél animační sekvence. Volitelně zadejte procento pro umístění zarážek podél sekvence animace.", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Přidejte více zarážek a definujte počáteční, střední a koncové barvy podél animační sekvence. Volitelně zadejte procento pro umístění zarážek podél sekvence animace.", "Add Row": "Přidat řádek", "Add Section": "Přidat sekci", "Add text after the content field.": "Přidat text pod obsah.", "Add text before the content field.": "Přidat text před obsah.", "Add to Cart": "Vložit do košíku", "Add to Cart Link": "Přidat odkaz na košík", "Add to Cart Text": "Přidat název košíku", "Add top margin": "Přidat horní okraj", "Adding a New Page": "Přidání nové stránky", "Adding the Logo": "Přidat Logo", "Adding the Search": "Přidat Hledání", "Adding the Social Icons": "Přidat ikony sociálních sítí", "Additional Information": "Dodatečné infrormace", "Address": "Adresa", "Advanced": "Pokročilé", "Advanced WooCommerce Integration": "Pokročilá integrace WooCommerce", "After": "Po", "After 1 Item": "Po 1 položce", "After 10 Items": "Po 10 položkách", "After 2 Items": "Po 2 položkách", "After 3 Items": "Po 3 položkách", "After 4 Items": "Po 4 položkách", "After 5 Items": "Po 5 položkách", "After 6 Items": "Po 6 položkách", "After 7 Items": "Po 7 položkách", "After 8 Items": "Po 8 položkách", "After 9 Items": "Po 9 položkách", "After Display Content": "Po zobrazeném obsahu", "After Display Title": "Po zobrazeném nadpisu", "After Submit": "Po odeslání", "Alert": "Upozornění", "Alias": "Přezdívka", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Zarovnání rozevíracích nabídek k položce nabídky nebo k navigačnímu panelu. Volitelně je můžete zobrazit v sekci na celou šířku nazvané dropbar, zobrazit ikonu označující dropdowns a nechat textové položky otevřít kliknutím, nikoli najetím myší.", "Align image without padding": "Zarovnání obrázku bez odsazení", "Align the filter controls.": "Zarovnání ovládacích prvků filtru.", "Align the image to the left or right.": "Zarovnání obrázku doleva nebo doprava.", "Align the image to the top or place it between the title and the content.": "Zarovnání obrázku nahoru nebo mezi nadpis a obsah.", "Align the image to the top, left, right or place it between the title and the content.": "Zarovnání obrázku nahoru, vlevo, vpravo nebo mezi nadpis a obsah.", "Align the meta text.": "Zarovnání meta textu.", "Align the navigation items.": "Zarovnání položek navigace.", "Align the section content vertically, if the section height is larger than the content itself.": "Srovnejte obsah sekce vertikálně, pokud je výška sekce delší než vlastní obsah.", "Align the title and meta text as well as the continue reading button.": "Zarovnání nadpisu, meta textu a tlačítka Pokračovat ve čtení.", "Align the title and meta text.": "Zarovnání nadpisu a meta textu.", "Align the title to the top or left in regards to the content.": "Zarovnejte nadpis nahoru nebo vlevo vzhledem k obsahu.", "Align to filter bar": "Zarovnat do pruhu filtru", "Align to navbar": "Zarovnání k navigačnímu panelu", "Alignment": "Zarovnání", "Alignment Breakpoint": "Bod zlomu pro zarovnání", "Alignment Fallback": "Záložní zarovnání", "All %filter%": "Vše %filter%", "All %label%": "Vše %label%", "All backgrounds": "Všechna pozadí", "All colors": "Všechny barvy", "All except first page": "Všechny kromě první stránky", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Všechny obrázky jsou licencovány pod <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>. Obrázky můžete zdarma bez omezení kopírovat, upravovat, distribuovat a používat je i ke komerčním účelům bez povolení.", "All Items": "Všechny položky", "All layouts": "Všechny layouty", "All pages": "Všechny stránky", "All presets": "Všechna nastavení", "All styles": "Všechny styly", "All topics": "Všechny témata", "All types": "Všechny typy", "All websites": "Všechny weby", "All-time": "Neustále", "Allow mixed image orientations": "Povolit smíšenou orientaci obrázků", "Allow multiple open items": "Povolit více otevřených položek", "Alphabetical": "Abecedně", "Alphanumeric Ordering": "Alfanumerické pořadí", "Alt": "Alternativní", "Alternate": "Střídat", "Always": "Vždy", "Animate background only": "Animovat pouze pozadí", "Animate items": "Animovat položky", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animujte vlastnosti na konkrétní hodnoty. Přidejte více zastávek a definujte počáteční, střední a koncové hodnoty podél sekvence animace pro každou vlastnost. Volitelně zadejte procento pro umístění zarážek podél sekvence animace. Překladač a měřítko mohou mít volitelné jednotky <code>%</code>, <code>vw</code> a <code>vh</code>.", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animujte vlastnosti na konkrétní hodnoty. Přidejte více zastávek a definujte počáteční, střední a koncové hodnoty podél animační sekvence. Volitelně zadejte procento pro umístění zarážek podél sekvence animace. Překladač může mít volitelné jednotky <code>%</code>, <code>vw</code> a <code>vh</code>.", "Animate strokes": "Animovat tahy", "Animation": "Animace", "Animation Delay": "Zpoždění animace", "Animations": "Animace", "Any": "Jakýkoli", "Any Joomla module can be displayed in your custom layout.": "Jakýkoli modul Joomla může být zobrazen ve vašem vlastním rozložení.", "Any WordPress widget can be displayed in your custom layout.": "Ve vlastním rozvržení lze zobrazit libovolný widget WordPress.", "API Key": "Klíč API", "Apply a margin between the navigation and the slideshow container.": "Použijte okraj mezi navigací a kontejnerem prezentace.", "Apply a margin between the overlay and the image container.": "Použijte okraj mezi překryvnou vrstvou a kontejnerem s obrázkem.", "Apply a margin between the slidenav and the slider container.": "Použijte okraj mezi slidenav a posuvníkem.", "Apply a margin between the slidenav and the slideshow container.": "Použijte okraj mezi kontejnerem slidenav a slideshow.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Použít animaci na prvky, jakmile vstoupí na plochu zobrazení. Animace posuvníků se mohou spustit s pevným posunem nebo při 100 % velikosti prvku.", "Archive": "Archiv", "Are you sure?": "Jste si jistý?", "ARIA Label": "Značka ARIA", "Article": "Článek", "Article Count": "Počet článků", "Article Order": "Pořadí článků", "Articles": "Články", "As notification only ": "Pouze jako oznámení ", "Ascending": "Vzestupně", "Assigning Modules to Specific Pages": "Přiřazení modulů konkrétním stránkám", "Assigning Templates to Pages": "Přiřazení šablon ke stránkám", "Assigning Widgets to Specific Pages": "Přiřazení widgetů konkrétním stránkám", "Attach the image to the drop's edge.": "Připojte obrázek k okraji kapky.", "Attention! Page has been updated.": "Pozor! Stránka byla aktualizována.", "Attribute Terms": "Podmínky atributů", "Attribute Terms Operator": "Operátory podmínek atributů", "Attributes": "Atributy", "Aug 6, 1999 (M j, Y)": "6. srpna 1999 (M j, Y)", "August 06, 1999 (F d, Y)": "6. srpna 1999 (F d, Y)", "Author": "Autor", "Author Archive": "Archiv autora", "Author Link": "Odkaz na autora", "Auto": "Auto", "Auto-calculated": "Automaticky vypočítat", "Autoplay": "Automatické přehrávání", "Autoplay Interval": "Interval automatického přehrávání", "Avatar": "Avatar", "Average Daily Views": "Průměrná denní zobrazení", "Back": "Zpět", "Background": "Pozadí", "Background Color": "Barva pozadí", "Background Image": "Obrázek na pozadí", "Badge": "Odznak", "Base Style": "Základní styl", "Basename": "Základní název", "Before": "Před", "Before Display Content": "Před zobrazením obsahu", "Behavior": "Chování", "Blend Mode": "Režim prolnutí", "Block Alignment": "Zarovnání bloku", "Block Alignment Breakpoint": "Bod zlomu zarovnání bloku", "Blur": "Rozostření", "Border": "Okraj", "Bottom": "Spodní", "Box Decoration": "Dekorace boxu", "Box Shadow": "Stín boxu", "Breadcrumbs": "Drobečková navigace", "Breadcrumbs Home Text": "Text úvodní stránky v drobečkové navigaci", "Breakpoint": "Bod zlomu", "Builder": "Tvůrce", "Button": "Tlačítko", "Button Size": "Velikost tlačítka", "Buttons": "Tlačítka", "Cache": "Mezipaměť", "Cancel": "Zrušit", "Center": "Vycentrovat", "Center horizontally": "Vycentrovat horizontálně", "Center the active slide": "Vycentrovat aktivní snímek", "Center the module": "Vycentrovat modul", "Changelog": "Seznam změn", "Choose a divider style.": "Zvolit styl rozdělení.", "Choose a map type.": "Zvolit typ mapy.", "Choose Font": "Zvolit písmo", "Choose the icon position.": "Zvolit pozici ikony.", "Choose the page to which the template is assigned.": "Vyberte stránku, ke které je šablona přiřazena.", "Class": "Třída", "Clear Cache": "Vymazat mezipaměť", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Vymazat obrázky a položky uložené v mezipaměti. Obrázky, jejichž velikost je třeba změnit, jsou uloženy ve složce mezipaměti motivu. Po opětovném nahrání obrázku se stejným názvem budete muset vymazat mezipaměť.", "Click on the pencil to pick an icon from the icon library.": "Kliknutím na tužku vyberte ikonu z knihovny ikon.", "Close": "Zavřít", "Code": "Kód", "Color": "Barva", "Column": "Sloupec", "Column 1": "Sloupec 1", "Column 2": "Sloupec 2", "Column 3": "Sloupec 3", "Column 4": "Sloupec 4", "Column 5": "Sloupec 5", "Column Gap": "Mezera mezi sloupci", "Column Layout": "Rozložení sloupců", "Columns": "Sloupce", "Columns Breakpoint": "Bod zlomu pro sloupce", "Comment Count": "Počet komentářů", "Comments": "Komentáře", "Components": "Komponenty", "Condition": "Podmínka", "Consent Button Style": "Styl tlačítka souhlasu", "Consent Button Text": "Text tlačítka souhlasu", "Contact": "Kontakt", "Contacts Position": "Pozice kontaktů", "Container Padding": "Vnitřní odsazení kontejneru", "Container Width": "Šířka kontejneru", "Content": "Obsah", "content": "obsah", "Content Alignment": "Zarovnání obsahu", "Content Length": "Délka obsahu", "Content Margin": "Okraj obsahu", "Content Type Title": "Název typu obsahu", "Content Width": "Šířka obsahu", "Controls": "Ovládací prvky", "Convert": "Převést", "Convert to title-case": "Převést na velká písmena", "Copy": "Kopírovat", "Countdown": "Odpočet", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Vytvoření obecného rozvržení pro tento typ stránky. Začněte s novým rozvržením a vyberte si ze sbírky připravených prvků nebo projděte knihovnu rozvržení a začněte s jedním z předpřipravených rozvržení.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Vytvoření rozvržení části zápatí všech stránek. Začněte s novým rozvržením a vyberte si ze sbírky připravených prvků nebo projděte knihovnu rozvržení a začněte s jedním z předpřipravených rozvržení.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Vytvoření rozvržení rozbalovací nabídky. Začněte s novým rozvržením a vyberte si ze sbírky připravených prvků nebo projděte knihovnu rozvržení a začněte s jedním z předpřipravených rozvržení.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Vytvořte rozvržení tohoto modulu a publikujte jej v horní nebo dolní pozici. Začněte s novým rozvržením a vyberte si ze sbírky připravených prvků nebo projděte knihovnu rozvržení a začněte s jedním z předpřipravených rozvržení.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Vytvořte rozvržení tohoto widgetu a publikujte jej v horní nebo dolní oblasti. Začněte s novým rozvržením a vyberte si ze sbírky připravených prvků nebo projděte knihovnu rozvržení a začněte s jedním z předpřipravených rozvržení.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Vytvoření rozvržení. Začněte s novým rozvržením a vyberte si ze sbírky připravených prvků nebo projděte knihovnu rozvržení a začněte s jedním z předpřipravených rozvržení.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Vytvoření individuálního rozvržení pro aktuální stránku. Začněte s novým rozvržením a vyberte si ze sbírky připravených prvků nebo projděte knihovnu rozvržení a začněte s jedním z předpřipravených rozvržení.", "Creating a New Module": "Vytvořit nový modul", "Creating a New Widget": "Vytvořit nový Widget", "Creating Accordion Menus": "Vytvoření nabídek Accordion", "Creating Advanced Module Layouts": "Vytvoření pokročilého rozvržení modulů", "Creating Advanced Widget Layouts": "Vytvoření pokročilých rozvržení widgetů", "Custom Code": "Vlastní kód", "Date": "Datum", "Define the device width from which the alignment will apply.": "Definujte od jaké šířky zařízení bude zarovnání aplikováno.", "Define the layout of the form.": "Definujte rozložení formuláře.", "Define the layout of the title, meta and content.": "Definujte rozložení nadpisu, meta a obsahu.", "Delete": "Odstranit", "Dialog Layout": "Rozložení dialogového okna", "Dialog Logo (Optional)": "Logo dialogu (volitelné)", "Dialog Push Items": "Posunutí položek dialogu", "Dialog Toggle": "Přepínač dialogového okna", "Display": "Displej", "Display a divider between sidebar and content": "Zobrazit dělicí čáry mezi postranním pruhem a obsahem", "Display header outside the container": "Zobrazit hlavičku mimo kontejner", "Display icons as buttons": "Zobrazit ikony jako tlačítka", "Display on the right": "Zobrazit na pravé straně", "Display the breadcrumb navigation": "Zobrazit drobečkovou navigaci", "Display the first letter of the paragraph as a large initial.": "Zobrazit první písmeno tohoto odstavce jako velkou iniciálu.", "Divider": "Oddělovač", "Download": "Stažení", "Drop Cap": "Iniciála", "Dropdown": "Rozbalovací nabídka", "Edit": "Upravit", "Edit %title% %index%": "Upravit %title% %index%", "Edit Items": "Upravit položky", "Edit Menu Item": "Upravit položku Menu", "Edit Module": "Upravit modul", "Edit Settings": "Upravit nastavení", "Email": "E-mail", "Enable autoplay": "Povolit automatické přehrávání", "Enable click mode on text items": "Povolit režim kliknutí u textových položek", "Enable drop cap": "Zapnout Iniciálu", "Enable dropbar": "Povolit rozevírací panel", "Enable map dragging": "Povolit posouvání mapy", "Enable map zooming": "Povolit zvětšování mapy", "Enter an optional footer text.": "Zadejte volitelný text zápatí.", "Enter the text for the home link.": "Zadejte text odkazu na úvodní/domovskou stránku.", "Enter the text for the link.": "Zadejte text odkazu.", "Error: %error%": "Chyba: %error%", "Expand height": "Rozšířit výšku", "Extend all content items to the same height.": "Zvětšit všechny položky obsahu na stejnou výšku.", "External Services": "Externí služby", "Favicon": "Favicona", "Featured": "Doporučené", "First name": "Jméno", "Folder Name": "Název složky", "Footer": "Zápatí", "Form": "Formulář", "Full width button": "Tlačítko na plnou šířku", "Gallery": "Galerie", "General": "Všeobecné", "Google Fonts": "Google fonty", "Google Maps": "Google mapy", "Gradient": "Přechod", "Grid": "Mřížka", "Grid Breakpoint": "Bod zlomu pro mřížku", "Grid Width": "Šířka mřížky", "Halves": "Poloviny", "Header": "Hlavička", "Headline": "Titulek", "Height": "Výška", "Hide marker": "Skrýt značku", "Home": "Úvod", "Home Text": "Text úvodní stránky", "Horizontal Center": "Vycentrovat horizontálně", "Horizontal Left": "Horizontálně vlevo", "Horizontal Right": "Horizontálně vpravo", "Hue": "Odstín", "Icon": "Ikona", "Icon Color": "Barva ikony", "Image": "Obrázek", "Image Alt": "Alt atribut obrázku", "Image Box Shadow": "Stín obrázku", "Image Height": "Výška obrázku", "Image Position": "Pozice obrázku", "Image Size": "Rozměr obrázku", "Image Width": "Šířka obrázku", "Image Width/Height": "Šířka/výška obrázku", "Image/Video": "Obrázek/video", "Inherit transparency from header": "Zdědit průhlednost z hlavičky", "Inline SVG logo": "Vložit kód SVG loga do stránky", "Inverse Logo (Optional)": "Inverzní logo (volitelné)", "Invert lightness": "Invertovat světlost", "Item": "Položka", "Item Width": "Šířka položky", "Item Width Mode": "Režim šířky položky", "Items": "Položky", "Label Margin": "Odsazení popisku", "Labels": "Popisky", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Obrázky na šířku a na výšku jsou vycentrovány uvnitř buněk mřížky. Šířka a výška budou převráceny při změně velikosti obrázků.", "Large Screens": "Velké obrazovky", "Larger padding": "Větší odsazení", "Last name": "Přijmení", "Layout": "Rozložení", "Left": "Vlevo", "Library": "Knihovna", "Lightness": "Světlost", "Link": "Odkaz", "Link Style": "Styl odkazu", "Link Target": "Cíl odkazu", "Link Text": "Text odkazu", "Link Title": "Název odkazu", "List": "Seznam", "List Style": "Styl seznamu", "Location": "Pozice", "Logo Image": "Obrázek loga", "Logo Text": "Text loga", "Loop video": "Opakovat video", "Main Section Height": "Výška hlavní sekce", "Main styles": "Hlavní styly", "Map": "Mapa", "Margin": "Okraj", "Match content height": "Stejná výška obsahu", "Match height": "Stejná výška", "Match Height": "Stejná výška", "Max Height": "Maximální výška", "Max Width": "Maximální šířka", "Max Width (Alignment)": "Maximální šířka (Zarovnání)", "Max Width Breakpoint": "Maximální šířka pro bod zlomu", "Medium (Tablet Landscape)": "Střední (tablet na šířku)", "Menu Style": "Styl Menu", "Message": "Zpráva", "Min Height": "Minimální výška", "Mobile": "Mobil", "Mobile Inverse Logo (Optional)": "Mobilní inverzní logo (volitelné)", "Mobile Logo (Optional)": "Logo pro mobily (volitelné)", "Name": "Jméno", "Navbar": "Navigační lišta", "Navbar Style": "Styl navigační lišty", "New Menu Item": "Nová položka Menu", "New Module": "Nový modul", "No files found.": "Nebyly nalezeny žádné soubory.", "No font found. Press enter if you are adding a custom font.": "Písmo nenalezeno. Stiskněte klávesu Enter, pokud přidáváte vlastní písmo.", "No layout found.": "Rozvržení nebylo nalezeno.", "Offcanvas Mode": "Režim Offcanvas", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "Na krátkých stránkách lze hlavní oddíl rozšířit tak, aby vyplnil zobrazovací plochu. To platí pouze pro stránky, které nejsou vytvořeny pomocí nástroje pro tvorbu stránek.", "Open in a new window": "Otevřít v novém okně", "Options": "Možnosti", "Order": "Pořadí", "Overlap the following section": "Překrýt následující sekci", "Overlay": "Překrytí", "Overlay Color": "Barva překrytí", "Overlay the site": "Překrytí webu", "Padding": "Odsazení", "Panels": "Panely", "Phone Landscape": "Telefon na šířku", "Phone Portrait": "Telefon na výšku", "Play inline on mobile devices": "Přehrávat vložené na mobilních zařízeních", "Position": "Pozice", "Post": "Příspěvek", "Primary navigation": "Hlavní navigace", "Quarters": "Čtvrtiny", "Quarters 1-1-2": "Čtvrtiny 1-1-2", "Quarters 1-2-1": "Čtvrtiny 1-2-1", "Quarters 1-3": "Čtvrtiny 1-3", "Quarters 2-1-1": "Čtvrtiny 2-1-1", "Quarters 3-1": "Čtvrtiny 3-1", "Ratio": "Poměr", "Remove bottom margin": "Odstranit spodní okraj", "Remove bottom padding": "Odstranit spodní odsazení", "Remove left logo padding": "Odstranit levé odsazení loga", "Remove top margin": "Odstranit horní okraj", "Remove top padding": "Odstranit horní odsazení", "Reset to defaults": "Reset do výchozího nastavení", "Row": "Řádek", "Save": "Uložit", "Save %type%": "Uložit %type%", "Save Layout": "Uložit rozvržení", "Search": "Vyhledávání", "Search Style": "Styl vyhledávání", "Section": "Sekce", "Select": "Vyberte", "Select a grid layout": "Vybrat rozvržení mřížky", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "Vyberte logo, které se bude zobrazovat v offcanvas a modálních dialozích určitých rozvržení záhlaví.", "Select a predefined text style, including color, size and font-family.": "Vyberte předdefinovaný styl textu včetně barvy, velikosti a font-family.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Vyberte videosoubor nebo vložte odkaz z <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> nebo <a href=\"https://vimeo.com\" target=\"_blank\">Vimea</a>.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Zvolte alternativní logo s inverzní barvou, např. bílou, pro lepší viditelnost na tmavém pozadí. V případě potřeby se zobrazí automaticky.", "Select an alternative logo, which will be used on small devices.": "Vyberte alternativní logo, které bude použito na malých zařízeních.", "Select dialog layout": "Vybrat rozložení dialogového okna", "Select header layout": "Vybrat rozvržení hlavičky", "Select Image": "Vyberte obrázek", "Select mobile dialog layout": "Vybrat rozložení mobilního dialogu", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "Vyberte rozvržení pro pozici <code>dialog-mobile</code>. Položky, které lze posunout, jsou zobrazeny jako tři tečky.", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "Vyberte rozvržení pro pozici <code>dialog</code>. Položky, které lze posunout, jsou zobrazeny jako tři tečky.", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "Vyberte rozvržení <code>logo</code>, <code>navbar</code> a <code>header</code>. Některá rozložení mohou rozdělit nebo posunout položky pozice, které jsou zobrazeny jako tři tečky.", "Select the link style.": "Vyberte styl odkazu.", "Select the navbar style.": "Vyberte styl navigační lišty.", "Select the position that will display the search.": "Vyberte pozici, ve které se zobrazí vyhledávání.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Vyberte pozici, ve které se budou zobrazovat ikony sociálních sítí. Nezapomeňte přidat odkazy na své profily na sociálních sítích, jinak se nezobrazí žádné ikony.", "Select the search style.": "Vyberte styl vyhledávání.", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "Vyberte si logo. Volitelně můžete nechat vložit logo SVG do kódu stránky, aby automaticky převzalo barvu textu.", "Set the icon color.": "Nastavte barvu ikony.", "Set the link style.": "Nastavte styl odkazu.", "Set the maximum content width.": "Nastavte maximální šířku obsahu.", "Set the maximum header width.": "Nastavení maximální šířky hlavičky.", "Set the maximum height.": "Nastavte maximální výšku.", "Set the number of items after which the following items are pushed to the bottom.": "Nastavte počet položek, po kterých jsou následující položky posunuty dolů.", "Set the vertical padding.": "Nastavte vertikální odsazení.", "Set the video dimensions.": "Nastavení rozměrů videa.", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Nastavení pouze jedné hodnoty zachovává původní proporce. Velikost obrázku se automaticky změní a ořízne a pokud je to možné, automaticky se vygenerují obrázky s vysokým rozlišením.", "Settings": "Nastavení", "Show current page": "Zobrazit aktuální stránku", "Show home link": "Zobrazit odkaz na úvodní stránku", "Show map controls": "Zobrazit ovládání mapy", "Show or hide content fields without the need to delete the content itself.": "Zobrazí nebo skryje pole obsahu, aniž by bylo nutné odstranit samotný obsah.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Zobrazení nebo skrytí odkazu na úvodní stránku jako první položky a aktuální stránky jako poslední položky v drobečkové navigaci.", "Show parent icon": "Zobrazit ikonu nadřazené položky", "Show the content": "Zobrazit obsah", "Show the image": "Zobrazit obrázek", "Show the link": "Zobrazit odkaz", "Show the menu text next to the icon": "Zobrazit text navigace vedle ikony", "Show the title": "Zobrazit nadpis", "Show title": "Zobrazit nadpis", "Sidebar": "Postranní panel", "Site": "Stránky", "Size": "Velikost", "Small (Phone Landscape)": "Malý (telefon na šířku)", "Social Icons": "Ikony sociálních sítí", "Split Items": "Rozdělit položky", "Split the dropdown into columns.": "Rozdělit rozbalovací nabídku do sloupců.", "Style": "Styl", "Subtitle": "Podnadpis", "Switcher": "Přepínač", "Syntax Highlighting": "Zvýraznění syntaxe", "System Check": "Kontrola systému", "Table": "Tabulka", "Tablet Landscape": "Tablet na šířku", "Templates": "Šablony", "Text Alignment Breakpoint": "Bod zlomu pro zarovnání textu", "Text Color": "Barva textu", "Text Style": "Styl textu", "The changes you made will be lost if you navigate away from this page.": "Provedené změny budou ztraceny, pokud opustíte tuto stránku.", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "Logo se automaticky umístí mezi položky. Volitelně můžete nastavit počet položek, po jehož překročení se položky rozdělí.", "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.": "Pokud nebyl vybrán žádný obrázek loga, použije se text loga. Pokud byl obrázek vybrán, bude text použit jako atribut aria-label na odkazu.", "The module maximum width.": "Maximální šířka modulů.", "The width of the grid column that contains the module.": "Šířka sloupce mřížky, který obsahuje modul.", "Thirds": "Třetiny", "Thirds 1-2": "Třetiny 1-2", "Thirds 2-1": "Třetiny 2-1", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Toto uspořádání - layout zahrnuje obrázek, který je třeba stáhnout do knihovny médií svých webových stránek. |||| Toto uspořádání - layout zahrnuje %smart_count% obrázků, které je třeba stáhnout do knihovny médií svých webových stránek.", "Thumbnail Width/Height": "Šířka/výška miniatury", "Thumbnails": "Náhledy", "Title": "Název", "title": "název", "Title Decoration": "Dekorace nadpisu", "Title Style": "Styl názvu", "Title Width": "Šířka nadpisu", "To Top": "Nahoru", "Toolbar": "Panel nástrojů", "Top": "Horní", "Touch Icon": "Ikonka pro dotyk", "Transparent Header": "Transparentní hlavička", "Type": "Typ", "Upload": "Nahrát", "Upload a background image.": "Nahrát obrázek pro pozadí.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Nahrát na stránku volitelný obrázek na pozadí. Obrázek zůstane při posouvaní stát.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Použít barvu pozadí k vyplnění v kombinaci s režimy prolnutí, průhledný obrázek nebo prázdné mezery, pokud obrázek nepokrývá celou sekci.", "Version %version%": "Verze %version%", "Vertical Alignment": "Svislé zarovnání", "Vertically center table cells.": "Buňku tabulky vycentrovat vertikálně.", "Vertically center the navigation and content.": "Vycentrovat navigaci a obsah vertikálně.", "Visibility": "Viditelnost", "Visible on this page": "Viditelný na této stránce", "Whole": "Kompletní", "Width": "Šířka", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Šířka a výška budou odpovídajícím způsobem převráceny, pokud je obraz ve formátu na výšku nebo na šířku.", "Width/Height": "Šířka/výška", "X-Large (Large Screens)": "X-Velký (velkoplošné obrazovky)", "Zoom": "Zvětšení" }theme/languages/pt_BR.json000064400000441605151666572140011544 0ustar00{ "- Select -": "- Selecione -", "- Select Module -": "- Selecione o Módulo -", "- Select Position -": "- Selecione a posição -", "- Select Widget -": "- Selecione Widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" já existe na biblioteca e será sobrescrito quando salvo.", "%label% Position": "%label% Posição", "%name% already exists. Do you really want to rename?": "%name% já existe. Você quer mesmo renomear?", "%post_type% Archive": "%post_type% Arquivo", "%s is already a list member.": "%s já é uma lista de membros", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s foi permanentemente deletado e não pode ser re-importado. O contato precisa re-escrever para voltar a lista.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Coleção |||| %smart_count% Coleções", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Elemento |||| %smart_count% Elementos", "%smart_count% File |||| %smart_count% Files": "%smart_count% Arquivo |||| %smart_count% Arquivos", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Arquivo selecionado |||| %smart_count% Arquivos selecionados", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Icone |||| %smart_count% Ícones ", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% download do arquivo de mídia falhou: |||| %smart_count% downloads dos arquivos de mídias falharam:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Foto |||| %smart_count% Fotos", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Modelo |||| %smart_count% Modelos", "%smart_count% User |||| %smart_count% Users": "%smart_count% Usuário |||| %smart_count% Usuários", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% estão selecionadas apenas para a %taxonomy% pai selecionada.", "%type% Presets": "%type% Modelos", "1 Column Content Width": "Largura do conteúdo de 1 coluna", "About": "Sobre", "Accessed": "Acessado", "Active": "Ativo", "Active item": "Item ativo", "Add": "Adicione", "Add a colon": "Adicionar dois pontos", "Add a leader": "Adicione um líder", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Adicione um efeito de parallax ou corrija o fundo em relação à ao viewport enquanto rola a pagina.", "Add a parallax effect.": "Adicione o efeito parallax", "Add animation stop": "Adicionar pausa na animação", "Add bottom margin": "Adicionar margem inferior", "Add clipping offset": "Adicionar recorte", "Add Element": "Adicionar Elemento", "Add extra margin to the button.": "Adicione uma margem adicional ao botão", "Add Folder": "Adicionar Pasta", "Add Item": "Adicionar Item", "Add margin between": "Adicionar margem entre", "Add Media": "Adicionar mídia", "Add Menu Item": "Adicionar Item de Menu", "Add Module": "Adicionar Módulo", "Add Row": "Adicionar Linha", "Add Section": "Adicionar Seção", "Add text after the content field.": "Adicione texto após o campo de conteúdo.", "Add text before the content field.": "Adicione texto antes do campo de conteúdo.", "Add to Cart": "Adicionar ao carrinho", "Add to Cart Link": "Adicionar link ao carrinho", "Add to Cart Text": "Adicionar texto ao carrinho", "Add top margin": "Adicionar margem superior", "Adding the Logo": "Adicionando o logo", "Adding the Search": "Adicionando a pesquisa", "Adding the Social Icons": "Adicionando os ícones sociais", "Additional Information": "Informações adicionais", "Address": "Endereço", "Advanced": "Avançado", "Advanced WooCommerce Integration": "Integrações avançadas do Woocommerce", "After": "Depois de", "After Display Content": "Depois de mostrar o conteúdo", "After Display Title": "Depois de mostrar o titulo", "After Submit": "Após Enviar", "Alert": "Alerta", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Alinhe as listas suspensas ao item de menu ou à barra de navegação. Opcionalmente, mostre-os em uma seção de largura total chamada dropbar, exiba um ícone para indicar menus suspensos e deixe os itens de texto serem abertos com um clique e não com o foco.", "Align image without padding": "Alinhar imagem sem preenchimento", "Align the filter controls.": "Alinhe os controles do filtro.", "Align the image to the left or right.": "Alinhe a imagem à esquerda ou à direita.", "Align the image to the top or place it between the title and the content.": "Alinhe a imagem ao topo ou coloque-a entre o título e o conteúdo.", "Align the image to the top, left, right or place it between the title and the content.": "Alinhe a imagem ao topo, à esquerda, à direita ou coloque-a entre o título e o conteúdo.", "Align the meta text.": "Alinhar o texto meta", "Align the navigation items.": "Alinhe os itens de navegação", "Align the section content vertically, if the section height is larger than the content itself.": "Alinhe o conteúdo da seção verticalmente, se a altura da seção for maior do que o conteúdo em si.", "Align the title and meta text as well as the continue reading button.": "Alinhe o título e o texto meta, assim como o botão continuar lendo.", "Align the title and meta text.": "Alinhar o título e o texto meta.", "Align the title to the top or left in regards to the content.": "Alinhar o título no topo ou à esquerda em relação ao conteúdo.", "Align to navbar": "Alinhar a barra de navegação", "Alignment": "Alinhamento", "Alignment Breakpoint": "Alinhamento do Breakpoint", "Alignment Fallback": "Alinhamento do Recuo", "All backgrounds": "Todos os backgrounds", "All colors": "Todas as cores", "All except first page": "Todos exceto a primeira pagina", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Todas as images estão licenciadas sobre <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> significa que você pode copiar, modificar, distribuir e usar as images de graça, incluindo o uso comercial, sem pedir permissão.", "All Items": "Todos os Itens", "All layouts": "Todos os layouts", "All pages": "Todas as paginas", "All presets": "Todos os modelos", "All styles": "Todos os estilos", "All topics": "Todos os tópicos", "All types": "Todos os tipos", "All websites": "Todos os sites", "All-time": "Todo tempo", "Allow mixed image orientations": "Permitir orientações de imagens misturadas", "Allow multiple open items": "Permitir vários itens abertos", "Alphabetical": "Alfabético", "Alphanumeric Ordering": "Alfanumérico", "Animate background only": "Animar somente o background", "Animate items": "Itens animados", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animar propriedades para valores específicos. Adicione várias paradas para definir valores iniciais, intermediários e finais ao longo da sequência de animação para cada propriedade. Opcionalmente, especifique a porcentagem para posicionar as paradas ao longo da sequência de animação. Traduzir e dimensionar podem ter unidades opcionais <code>%</code>, <code>vw</code> e <code>vh</code>.", "Animate strokes": "Animar contorno", "Animation": "Animação", "Animation Delay": "Atraso da animação", "Any": "Qualquer", "Any Joomla module can be displayed in your custom layout.": "Qualquer módulo do Joomla pode ser exibido em seu layout personalizado.", "Any WordPress widget can be displayed in your custom layout.": "Qualquer widget do WordPress pode ser exibido em seu layout personalizado", "API Key": "Chave API", "Apply a margin between the navigation and the slideshow container.": "Aplique uma margem entre a navegação e o contêiner do Slideshow.", "Apply a margin between the overlay and the image container.": "Aplique uma margem entre a sobreposição e o contêiner da imagem.", "Apply a margin between the slidenav and the slider container.": "Aplique uma margem entre o Slidenav e o Contêiner de Slider.", "Apply a margin between the slidenav and the slideshow container.": "Aplique uma margem entre o Slidenav e o Contêiner de Slideshow.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Aplique uma animação aos elementos assim que eles entrarem na viewport. As animações podem entrar em ficar com um deslocamento fixo ou com 100% do tamanho do elemento.", "Are you sure?": "Tem certeza?", "Article": "Artigo", "Article Count": "Contagem dos artigos", "Article Order": "Ordem dos artigos", "Articles": "Artigos", "Ascending": "Acendente", "Assigning Modules to Specific Pages": "Atribuindo módulos a páginas específicas", "Assigning Templates to Pages": "Atribuindo modelos a páginas", "Assigning Widgets to Specific Pages": "Atribuindo widgets a páginas específicas", "Attach the image to the drop's edge.": "Anexe a imagem à borda da gota.", "Attention! Page has been updated.": "Atenção! A página foi atualizada.", "Attribute Slug": "Slug", "Attribute Terms": "Termos", "Attribute Terms Operator": "Operador de termos", "Attributes": "Atributos", "Author": "Autor", "Author Archive": "Autor do arquivos", "Author Link": "Link do Autor", "Auto-calculated": "Auto-calculado", "Autoplay": "Iniciar automaticamente", "Average Daily Views": "Média de visualizações diárias", "Back": "Voltar", "Background Color": "Cor de Fundo", "Base Style": "Estilo base", "Basename": "nome base", "Before": "Antes", "Before Display Content": "Antes de mostrar o conteúdo", "Behavior": "Comportamento", "Blend Mode": "Modo combinação", "Block Alignment": "Alinhamento de Bloco", "Block Alignment Breakpoint": "Ponto de interrupção do alinhamento de bloco", "Block Alignment Fallback": "Recuo do alinhamento do bloco", "Blur": "Desfoque", "Border": "Borda", "Bottom": "Inferior", "Box Decoration": "Decoração da caixa", "Box Shadow": "Sombra da caixa", "Breadcrumbs": "Rastros", "Breadcrumbs Home Text": "Rastro do texto inicial", "Breakpoint": "Ponto de Parada", "Builder": "Construtor", "Button": "Botão", "Button Margin": "Margem de botão", "Button Size": "Tamanho do botão", "Buttons": "Botões", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Por padrão, os campos de fontes relacionadas com itens únicos estão disponíveis para mapeamento. Selecione uma fonte relacionada que tenha vários itens para mapear seus campos.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "Por padrão, as imagens são carregadas com atraso. Habilite o carregamento antecipado para imagens na janela de visualização inicial.", "Campaign Monitor API Token": "Token da API do Monitor de campanha", "Cancel": "Cancelar", "Caption": "Legenda", "Cart Quantity": "Quantidade no carrinho", "Categories": "Categorias", "Categories are only loaded from the selected parent category.": "Categorias são carregadas apenas da categorias pai selecionada", "Categories Operator": "Operador de categorias", "Category": "Categoria", "Category Blog": "Categoria do blog", "Category Order": "Ordem das categorias", "Center": "Centro", "Center columns": "Colunas centrais", "Center grid columns horizontally and rows vertically.": "Centralize as colunas da grade horizontalmente e as linhas verticalmente.", "Center horizontally": "Centralizar horizontalmente", "Center rows": "Linhas centrais", "Center the active slide": "Centralizar o Slide ativo", "Center the content": "Centralizar o conteúdo", "Center the module": "Centro do módulo", "Center the title and meta text": "Centralize o título e o texto meta", "Center the title, meta text and button": "Centralize o título, o texto meta e o botão", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Centralizar, a esquerda e direita podem depender do breakpoint e requer um recuo.", "Changed": "Alterado", "Changelog": "Registro de mudança", "Child %taxonomies%": "Filho %taxonomies%", "Child Categories": "Categoria filho", "Child Tags": "Tags filho", "Child Theme": "Tema Filho", "Choose a divider style.": "Escolha um estilo de divisão.", "Choose a map type.": "Escolhe um tipo de mapa.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Escolha entre uma Parallax dependendo da posição de rolagem ou de uma animação, que é aplicada uma vez que o Slide está ativo.", "Choose between a vertical or horizontal list.": "Escolher entre uma lista vertical ou horizontal.", "Choose between an attached bar or a notification.": "Escolha entre uma barra anexada ou uma notificação.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Escolha entre a paginação anterior/seguinte ou numérica. A paginação numérica não está disponível para artigos únicos.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Escolha entre a paginação anterior/seguinte ou numérica. A paginação numérica não está disponível para postagens únicas.", "Choose Font": "Escolher fonte", "Choose products of the current page or query custom products.": "Escolha produtos da página atual ou consulte produtos personalizados.", "Choose the icon position.": "Escolhe a posição de ícone.", "Choose the page to which the template is assigned.": "Escolha a página à qual o modelo está atribuído.", "City or Suburb": "Cidade ou Bairro", "Clear Cache": "Limpar Cache", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Limpar as imagens e arquivos em cache. Imagens que precisem ser redimensionadas são salvas na pasta de cache do tema. Após refazer o upload de imagens com mesmo nome, você irá precisar limpar o cache para ver as mudanças.", "Click on the pencil to pick an icon from the icon library.": "Clique no lápis para escolher um ícone da biblioteca de ícones.", "Close": "Fechar", "Cluster Icon (< 10 Markers)": "Ícone de cluster (< 10 marcadores)", "Cluster Icon (< 100 Markers)": "Ícone de cluster (< 100 marcadores)", "Cluster Icon (100+ Markers)": "Ícone de cluster (mais de 100 marcadores)", "Clustering": "Agrupamento", "Code": "Código", "Collapsing Layouts": "Layouts recolhidos", "Collections": "Coleções", "Color": "Cor", "Column": "Coluna", "Column 1": "Coluna 1", "Column 2": "Coluna 2", "Column 3": "Coluna 3", "Column 4": "Coluna 4", "Column 5": "Coluna 5", "Column Gap": "Lacuna da coluna", "Column Layout": "Layout da coluna", "Columns": "Colunas", "Columns Breakpoint": "Breakpoint das colunas", "Comment Count": "Contagem de comentários", "Comments": "Comentários", "Components": "Componentes", "Condition": "Condição", "Consent Button Style": "Estilo do botão consentir", "Consent Button Text": "Texto do botão consentir", "Contact": "Contato", "Contacts Position": "Posição dos contatos", "Container Padding": "Preenchimento de Contêiner", "Container Width": "Largura do Contêiner", "Content": "Conteúdo", "content": "conteúdo", "Content Alignment": "Alinhamento de Conteúdo", "Content Length": "Comprimento do conteúdo", "Content Margin": "Margem de Conteúdo", "Content Parallax": "Conteúdo Parallax", "Content Type Title": "Título do tipo de conteúdo", "Content Width": "Largura do conteúdo", "Controls": "Controles", "Convert": "Converter", "Convert to title-case": "Converter para maiúsculas e minúsculas", "Cookie Banner": "Banner de Cookies", "Cookie Scripts": "Scripts de cookies", "Copy": "Cópia", "Countdown": "Contagem regressiva", "Country": "País", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um layout geral para este tipo de página. Comece com um novo layout e escolha entre uma coleção de elementos prontos para uso ou navegue na biblioteca de layouts e comece com um dos layouts pré-criados.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um layout para a seção de rodapé de todas as páginas. Comece com um novo layout e escolha entre uma coleção de elementos prontos para uso ou navegue na biblioteca de layouts e comece com um dos layouts pré-criados.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um layout para o menu suspenso do item de menu. Comece com um novo layout e escolha em uma coleção de elementos prontos para uso ou navegue na biblioteca de layouts e comece com um dos layouts pré-criados.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um layout para este módulo e publique-o na posição superior ou inferior. Comece com um novo layout e escolha entre uma coleção de elementos prontos para uso ou navegue na biblioteca de layouts e comece com um dos layouts pré-criados.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um layout para este widget e publique-o na área superior ou inferior. Comece com um novo layout e escolha entre uma coleção de elementos prontos para uso ou navegue na biblioteca de layouts e comece com um dos layouts pré-criados.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um layout. Comece com um novo layout e escolha em uma coleção de elementos prontos para uso ou navegue na biblioteca de layouts e comece com um dos layouts pré-criados.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um layout individual para a página atual. Comece com um novo layout e escolha entre uma coleção de elementos prontos para uso ou navegue na biblioteca de layouts e comece com um dos layouts pré-criados.", "Created": "Criado", "Creating a New Module": "Criando um novo módulo", "Creating a New Widget": "Criando um novo widget", "Creating Accordion Menus": "Criando menus Accordion", "Creating Advanced Module Layouts": "Criando layouts avançados de módulo", "Creating Advanced Widget Layouts": "Criando layouts avançados de widgets", "Creating Advanced WooCommerce Layouts": "Criando layouts avançados de WooCommerce", "Creating Menu Dividers": "Criando divisores de menu", "Creating Menu Heading": "Criando cabeçalho de menu", "Creating Menu Headings": "Criando títulos de menu", "Creating Navbar Text Items": "Criando itens de texto da barra de navegação", "Critical Issues": "Questões críticas", "Critical issues detected.": "Problemas críticos detectados.", "Cross-Sell Products": "Produtos de venda cruzada", "CSS/Less": "CSS/Menos", "Curated by <a href>%user%</a>": "Com curadoria de <a href>%user% </a>", "Current Layout": "Layout atual", "Current Style": "Estilo atual", "Current User": "Usuário atual", "Custom %post_type%": "%post_type% personalizado", "Custom %post_types%": "%post_types% personalizados", "Custom %taxonomies%": "Personalizadas %taxonomies%", "Custom %taxonomy%": "Personalizadas %taxonomy%", "Custom Article": "Artigo personalizado", "Custom Articles": "Artigos personalizados", "Custom Categories": "Categorias personalizadas", "Custom Category": "Categoria personalizada", "Custom Code": "Código Customizado", "Custom Menu Items": "Itens de menu personalizados", "Custom Query": "Consulta personalizada", "Custom Tag": "Etiqueta personalizada", "Custom Tags": "Etiquetas personalizadas", "Custom User": "Usuário personalizado", "Custom Users": "Usuários personalizados", "Customization": "Costumização", "Customization Name": "Nome da Personalização", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Personalize as larguras das colunas do layout selecionado e defina a ordem das colunas. Alterar o layout redefinirá todas as personalizações.", "Date": "Data", "Date Archive": "Arquivo de datas", "Date Format": "Formato de data", "Day Archive": "Arquivo do dia", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Decore o Titulo com um divisor, bullet ou uma linha que é centrada verticalmente para o título.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Marque o título com um divisor, bullet ou com uma linha que é centralizado verticalmente ao título.", "Decoration": "Decoração", "Default": "Padrão", "Define a background style or an image of a column and set the vertical alignment for its content.": "Defina um estilo de plano de fundo ou uma imagem de uma coluna e defina o alinhamento vertical para seu conteúdo.", "Define a name to easily identify the template.": "Defina um nome para identificar facilmente o modelo.", "Define a name to easily identify this element inside the builder.": "Defina um nome para identificar facilmente este elemento dentro do construtor.", "Define a unique identifier for the element.": "Defina um identificador exclusivo para o elemento.", "Define an alignment fallback for device widths below the breakpoint.": "Defina um retorno de alinhamento para largura do dispositivo abaixo do ponto de interrupção.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Defina um ou mais atributos para o elemento. Separe o nome e o valor do atributo por caractere <code>=</code>. Um atributo por linha.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Defina um ou mais nomes de classe para o elemento. Separe várias classes com espaços.", "Define the alignment in case the container exceeds the element max-width.": "Defina o alinhamento caso o contêiner exceda a largura máxima do elemento.", "Define the alignment of the last table column.": "Defina o alinhamento da última coluna da tabela.", "Define the device width from which the alignment will apply.": "Defina a largura do dispositivo a partir da qual o alinhamento será aplicado.", "Define the device width from which the max-width will apply.": "Defina a largura do dispositivo a partir do qual a largura máxima do conteúdo será aplicada.", "Define the layout of the form.": "Defina o layout do formulário.", "Define the layout of the title, meta and content.": "Defina o layout do título, meta e conteúdo.", "Define the order of the table cells.": "Defina a ordem das células da tabela.", "Define the padding between items.": "Defina o preenchimento entre os itens.", "Define the padding between table rows.": "Defina o preenchimento entre as linhas da tabela.", "Define the title position within the section.": "Defina a posição do título dentro da seção.", "Define the width of the content cell.": "Defina a largura da célula de conteúdo.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Defina a largura da navegação do filtro. Escolha entre as porcentagens e as larguras fixas ou expanda as colunas para a largura de seu conteúdo.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Defina a largura da imagem dentro da grade. Escolha entre por cento e larguras fixas ou expanda colunas à largura de seu conteúdo.", "Define the width of the meta cell.": "Defina a largura da meta-célula.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Defina a largura da navegação. Escolha entre por cento e larguras fixas ou expanda colunas à largura de seu conteúdo.", "Define the width of the title cell.": "Defina a largura da célula do título.", "Define the width of the title within the grid.": "Defina a largura do título dentro da grade.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Defina a largura da imagem dentro da grade. Escolha entre por cento e larguras fixas ou expanda colunas à largura de seu conteúdo.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Defina se a largura dos Itens do Slider é fixa ou expandida automaticamente por suas larguras de conteúdo.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Defina se as miniaturas serão agrupadas em várias linhas ou não, se o contêiner for muito pequeno.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Atrasar as animações do elemento em milissegundos, por exemplo. <code>200</code>.", "Delete": "Apagar", "Delete animation stop": "Excluir parada de animação", "Descending": "Descendente", "description": "descrição", "Description": "Descrição", "Description List": "Lista de Descrição", "Desktop": "Área de Trabalho", "Determine how the image or video will blend with the background color.": "Determine como a imagem ou o vídeo se misturarão com a cor de fundo.", "Determine how the image will blend with the background color.": "Determine como a imagem ou o vídeo se misturarão com a cor de fundo.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Determine se a imagem se encaixará nas dimensões da seção cortando-a ou preenchendo as áreas vazias com a cor de fundo.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Determine se a imagem se encaixará nas dimensões da seção cortando-a ou preenchendo as áreas vazias com a cor de fundo.", "Dialog Layout": "Layout da caixa de diálogo", "Dialog Logo (Optional)": "Logotipo da caixa de diálogo (opcional)", "Dialog Push Items": "Itens de envio de caixa de diálogo", "Dialog Toggle": "Alternar caixa de diálogo", "Direction": "Direção", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Desative a reprodução automática, inicie a reprodução automaticamente imediatamente ou assim que o vídeo entrar no viewport.", "Disable element": "Desativar elemento", "Disable Emojis": "Desativar Emojis", "Disable infinite scrolling": "Desativar rolagem infinita", "Disable item": "Desativar item", "Disable row": "Desativar linha", "Disable section": "Desativar sessão", "Disable template": "Desativar modelo", "Disable wpautop": "Desativar o wpautop", "Disabled": "Desativado", "Discard": "Descartar", "Display": "Mostrar", "Display a divider between sidebar and content": "Exibir um divisor entre barra lateral e conteúdo", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Exibir um menu selecionando a posição na qual ele deve aparecer. Por exemplo, publique o menu principal na posição navbar e um menu alternativo na posição mobile.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Exiba um ícone de pesquisa à esquerda ou à direita. O ícone à direita pode ser clicado para enviar a pesquisa.", "Display header outside the container": "Exibir cabeçalho fora do contêiner", "Display icons as buttons": "Exibir ícones como botões", "Display on the right": "Exibição à direita", "Display overlay on hover": "Mostrar sobreposição em suspensão", "Display products based on visibility.": "Exiba produtos com base na visibilidade.", "Display the breadcrumb navigation": "Exibir a navegação do breadcrumb", "Display the cart quantity in brackets or as a badge.": "Exiba a quantidade do carrinho entre colchetes ou como um crachá.", "Display the content inside the overlay, as the lightbox caption or both.": "Visualize o conteúdo dentro da sobreposição, como a lightbox ou ambas.", "Display the content inside the panel, as the lightbox caption or both.": "Exibir o conteúdo dentro do painel, como a legenda da caixa de luz ou ambos.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Exiba o campo de excerto se tiver conteúdo, caso contrário, o conteúdo. Para usar um campo de trecho, crie um campo personalizado com o nome trecho.", "Display the excerpt field if it has content, otherwise the intro text.": "Exiba o campo de excerto se tiver conteúdo, caso contrário, o texto de introdução.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Exiba o campo de excerto se tiver conteúdo, caso contrário, o texto de introdução. Para usar um campo de trecho, crie um campo personalizado com o nome trecho.", "Display the first letter of the paragraph as a large initial.": "Exibir a primeira letra do parágrafo como uma inicial grande.", "Display the image only on this device width and larger.": "Exibir a imagem somente nesta largura do dispositivo e maior.", "Display the image or video only on this device width and larger.": "Exibir a imagem somente nesta largura do dispositivo e maior.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Exibir os controles do mapa e definir se o mapa pode ser ampliado ou arrastado usando a roda do mouse ou toque.", "Display the meta text in a sentence or a horizontal list.": "Exibe o texto meta em uma frase ou lista horizontal.", "Display the module only from this device width and larger.": "Exibir somente o módulo desta largura do dispositivo e maior.", "Display the navigation only on this device width and larger.": "Visualize a navegação somente nesta largura do dispositivo e maior.", "Display the parallax effect only on this device width and larger.": "Exibe o efeito de parallax somente na largura desse dispositivo e maior.", "Display the popover on click or hover.": "Exibir o Popover no clique ou ao passar o mouse.", "Display the section title on the defined screen size and larger.": "O título da seção será exibido no tamanho da tela definido e maior.", "Display the short or long description.": "Exiba a descrição curta ou longa.", "Display the slidenav only on this device width and larger.": "Exibe o Slidenav somente na largura do dispositivo ou maior.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Exibe o slidenav somente fora nesta largura do dispositivo e maior. Caso contrário, será exibido no interior.", "Display the title in the same line as the content.": "Exiba o título na mesma linha do conteúdo.", "Display the title inside the overlay, as the lightbox caption or both.": "Mostre o título dentro da sobreposição, como a legenda do lightbox ou ambas.", "Display the title inside the panel, as the lightbox caption or both.": "Visualize o título dentro do painel, como a legenda do lightbox ou os ambas.", "Displaying the Breadcrumbs": "Exibindo os rastros", "Displaying the Excerpt": "Exibindo o trecho", "Displaying the Mobile Header": "Exibindo o cabeçalho móvel", "Divider": "Divisor", "Do you really want to replace the current layout?": "Você realmente quer substituir o layout atual?", "Do you really want to replace the current style?": "Você realmente quer substituir o estilo atual?", "Documentation": "Documentação", "Don't wrap into multiple lines": "Não envolva em várias linhas", "Double opt-in": "Dupla autorização", "Download": "Baixar", "Download All": "Baixar tudo", "Download Less": "Baixar menos", "Drop Cap": "Capitular", "Dropdown": "Menu Suspenso", "Dropdown Alignment": "Alinhamento suspenso", "Dropdown Columns": "Colunas suspensas", "Dropdown Padding": "Preenchimento suspenso", "Dropdown Width": "Largura da lista suspensa", "Dynamic": "Dinâmico", "Dynamic Condition": "Condição dinâmica", "Dynamic Content": "Conteúdo Dinâmico", "Easing": "Facilitando", "Edit": "Editar", "Edit %title% %index%": "Editar %title% %index%", "Edit Items": "Editar Itens", "Edit Layout": "Editar layout", "Edit Menu Item": "Editar item do menu", "Edit Module": "Editar Módulo", "Edit Settings": "Editar Configurações", "Edit Template": "Editar modelo", "Element": "Elemento", "Email": "E-mail", "Enable a navigation to move to the previous or next post.": "Ative uma navegação para ir para a postagem anterior ou seguinte.", "Enable autoplay": "Ativar autoplay", "Enable click mode on text items": "Ativar o modo de clique nos itens de texto", "Enable drop cap": "Ativar primeira letra maiúscula", "Enable dropbar": "Ativar barra suspensa", "Enable filter navigation": "Ativar filtro de navegação", "Enable lightbox gallery": "Ativar galeria em lightbox", "Enable map dragging": "Ativar \"arrastar\" do mapa.", "Enable map zooming": "Ativar \"zoom\" do mapa", "Enable marker clustering": "Ativar agrupamento de marcadores", "Enable masonry effect": "Ativar efeito Masonry", "End": "Fim", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Insira uma lista de tags separadas por vírgula, por exemplo, <code>blue, white, black</code>.", "Enter a decorative section title which is aligned to the section edge.": "Digite um título de seção decorativa que esteja alinhado à borda da seção.", "Enter a subtitle that will be displayed beneath the nav item.": "Insira a legenda que vai ser mostrada dentro do item de navegação.", "Enter a table header text for the content column.": "Digite um texto de cabeçalho da tabela para a coluna de conteúdo.", "Enter a table header text for the image column.": "Digite um texto de cabeçalho da tabela para a coluna da imagem.", "Enter a table header text for the link column.": "Digite um texto de cabeçalho da tabela para a coluna do link.", "Enter a table header text for the meta column.": "Digite um texto de cabeçalho da tabela para a coluna meta.", "Enter a table header text for the title column.": "Digite um texto de cabeçalho da tabela para a coluna do título.", "Enter a width for the popover in pixels.": "Digite uma largura para o popover em pixel.", "Enter an optional footer text.": "Digite um texto de rodapé opcional.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Digite um texto opcional para o atributo title do link, que será exibido em sobreposição.", "Enter labels for the countdown time.": "Insira as etiquetas para o tempo de contagem regressiva.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Insira o link para seu perfil social. Um <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\"> ícone de marca do UIkit </a> correspondente será exibido automaticamente, se disponível. Links para endereços de e-mail e números de telefone, como mailto: info@example.com ou tel: +491570156, também são suportados.", "Enter or pick a link, an image or a video file.": "Digite ou escolha um link, uma imagem ou um arquivo de vídeo.", "Enter the author name.": "Digite o nome do autor.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Digite a mensagem de consentimento do cookie. O texto padrão serve como uma ilustração. Por favor, ajuste de acordo com as leis de cookies do seu país.", "Enter the horizontal position of the marker in percent.": "Digite a posição horizontal do marcador em porcentagem.", "Enter the image alt attribute.": "Digite o atributo alt da imagem.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Digite a sequência de substituição que pode conter referências. Se deixado em branco, as correspondências da pesquisa serão removidas.", "Enter the text for the button.": "Digite o texto para o link.", "Enter the text for the home link.": "Digite o texto para o link inicial.", "Enter the text for the link.": "Digite o texto para o link.", "Enter the vertical position of the marker in percent.": "Digite a posição vertical do marcador em porcentagem.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Digite a sua <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID para habilitar o rastreamento. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">O anonimato de IP</a> pode reduzir a precisão de rastreamento.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Insira o seu <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> chave de API para usar o Google Maps ao invés do OpenStreetMap. isso também ativa opões adicionais sobre o estilo de cores do seu mapa", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Digite sua <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Chave da API do Monitor de Campanha</a> para usá-lo com o elemento Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Insira seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Digite seu próprio CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-section</code>", "Error": "Erro", "Error 404": "Erro 404", "Error creating folder.": "Erro ao criar pasta.", "Error deleting item.": "Erro ao excluir item.", "Error renaming item.": "Erro ao renomear o item.", "Error: %error%": "Erro: %error%", "Events": "Eventos", "Excerpt": "Resumo", "Exclude cross sell products": "Excluir produtos de venda cruzada", "Exclude upsell products": "Excluir produtos de upsell", "Expand height": "Expandir altura", "Expand One Side": "Expandir um lado", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Expanda a largura de um lado para a esquerda ou para a direita enquanto o outro lado mantém as restrições da largura máxima.", "Expand width to table cell": "Expandir largura para célula de tabela", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Exporte todas as configurações do tema e importe-as para outra instalação. Isso não inclui conteúdo das bibliotecas de layout, estilo e elemento ou do construtor de modelos.", "Export Settings": "Exportar configurações", "Extend all content items to the same height.": "Estenda todos os itens de conteúdo para a mesma altura.", "Extension": "Extensão", "External Services": "Serviços externos", "Extra Margin": "Margem Extra", "Featured Articles": "Artigos em Destaque", "Featured Articles Order": "Pedido de artigos em destaque", "Featured Image": "Imagem em destaque", "Fields": "Campos", "File": "Arquivo", "Files": "Arquivos", "Filter": "Filtro", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtre %post_types% por autores. Use a tecla <kbd>shift</kbd> ou <kbd>ctrl/cmd</kbd> para selecionar vários autores. Defina o operador lógico para corresponder ou não aos autores selecionados.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Filtre %post_types% por termos. Use a tecla <kbd>shift</kbd> ou <kbd>ctrl/cmd</kbd> para selecionar vários termos. Configure o operador lógico para corresponder a pelo menos um dos termos, nenhum dos termos ou todos os termos.", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtre artigos por autores. Use a tecla <kbd>shift</kbd> ou <kbd>ctrl/cmd</kbd> para selecionar vários autores. Defina o operador lógico para corresponder ou não aos autores selecionados.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Filtre artigos por categorias. Use a tecla <kbd>shift</kbd> ou <kbd>ctrl/cmd</kbd> para selecionar várias categorias. Configure o operador lógico para corresponder ou não às categorias selecionadas.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Filtre artigos por tags. Use a tecla <kbd>shift</kbd> ou <kbd>ctrl/cmd</kbd> para selecionar várias tags. Configure o operador lógico para corresponder a pelo menos uma das tags, nenhuma das tags ou todas as tags.", "Filter by Authors": "Filtrar por autores", "Filter by Categories": "Filtrar por categorias", "Filter by Tags": "Filtrar por Tags", "Filter by Term": "Filtrar por termo", "Filter by Terms": "Filtrar por termos", "Filter products by attribute using the attribute slug.": "Filtre produtos por atributo usando o slug de atributo.", "Filter products by categories using a comma-separated list of category slugs.": "Filtre produtos por categorias usando uma lista separada por vírgulas de slugs de categoria.", "Filter products by tags using a comma-separated list of tag slugs.": "Filtre produtos por tags usando uma lista separada por vírgulas de slugs de tags.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "Filtre produtos por termos do atributo escolhido usando uma lista separada por vírgulas de slugs de termos de atributo.", "Filter products using a comma-separated list of IDs.": "Filtre produtos usando uma lista de IDs separados por vírgulas.", "Filter products using a comma-separated list of SKUs.": "Filtre produtos usando uma lista de SKUs separada por vírgulas.", "Finite": "Finito", "First name": "Nome", "First page": "Primeira página", "Fix the background with regard to the viewport.": "Corrija o background em relação à viewport.", "Fixed-Inner": "Interior Fixo", "Fixed-Left": "Esquerda Fixa", "Fixed-Outer": "Fixo-exterior", "Fixed-Right": "Fixo-Direito", "Folder created.": "Pasta criada.", "Folder Name": "Nome da Pasta", "Font Family": "Família da Fonte", "Footer": "Rodapé", "Force a light or dark color for text, buttons and controls on the image or video background.": "Force uma cor clara ou escura para texto, botões e controles na imagem ou no fundo do vídeo.", "Force left alignment": "Forçar alinhamento esquerdo", "Form": "Fromulário", "Format": "Formato", "Full Article Image": "Imagem completa do artigo", "Full Article Image Alt": "Imagem do artigo completo Alt", "Full Article Image Caption": "Legenda completa da imagem do artigo", "Full width button": "Largura total do botão", "Gallery": "Galeria", "Gallery Thumbnail Columns": "Colunas de miniaturas da galeria", "Gamma": "Gama", "Gap": "Espaço", "General": "Geral", "Gradient": "Gradiente", "Grid Breakpoint": "Ponto de parada da grade", "Grid Column Gap": "Espaço na coluna da grade", "Grid Row Gap": "Espaço na linha da grade", "Grid Width": "Largura do Grid", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Agrupar itens em conjuntos. O número de itens dentro de um conjunto depende da largura do item definido, e.g. <i>33%</i> significa que cada conjunto contém 3 itens. ", "Guest User": "Usuário convidado", "Halves": "Metades", "Header": "Cabeçalho", "Headline": "Título", "Headline styles differ in font size and font family.": "Os estilos de título diferem em tamanho de fonte, mas também podem vir com uma cor, tamanho e fonte predefinidos.", "Height": "Altura", "hex / keyword": "hex / palavra-chave", "Hide and Adjust the Sidebar": "Ocultar e ajustar a barra lateral", "Hide marker": "Esconder o marcador", "Hide Term List": "Ocultar lista de termos", "Hide title": "Ocultar título", "Highlight the hovered row": "Destaque a linha suspensa", "Hits": "Exitos", "Home Text": "Texto Inicial", "Horizontal Center": "Centralizar Horizontalmente", "Horizontal Center Logo": "Logotipo do centro horizontal", "Horizontal Justify": "Justificar horizontal", "Horizontal Left": "Horizontal Esquerda", "Horizontal Right": "Horizontal Direita", "Hover Box Shadow": "Box Shadow ao passar o mouse", "Hover Image": "Imagem ao passar o mouse", "Hover Style": "Estilo suspenso", "Hover Transition": "Transição de hover", "HTML Element": "Elemento HTML", "Icon": "Ícone", "Icon Color": "Cor do ícone", "Icon Width": "Largura do ícone", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Se uma seção ou linha tiver uma largura máxima e um lado estiver expandindo para a esquerda ou para a direita, o preenchimento padrão poderá ser removido do lado de expansão.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Se vários modelos forem atribuídos à mesma exibição, o modelo que aparecer primeiro será aplicado. Mude a ordem com arrastar e soltar.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Se você estiver criando um site multi-idioma, não selecione um menu específico aqui. Em vez disso, use o gerenciador do módulo Joomla para publicar o menu direito dependendo do idioma atual.", "Ignore %taxonomy%": "Ignorar %taxonomy%", "Image": "Imagem", "Image Alignment": "Alinhamento de Imagem", "Image Alt": "Imagem Alt", "Image and Title": "Imagem e título", "Image Attachment": "Anexo de imagem", "Image Box Shadow": "Box Shadow da imagen", "Image Effect": "Efeito da Imagem", "Image Height": "Altura da Imagem", "Image Margin": "Margem de Imagem", "Image Orientation": "Orientação da Imagem", "Image Position": "Posição da Imagem", "Image Size": "Tamanho da Imagem", "Image Width": "Largura da Imagem", "Image Width/Height": "Largura/Altura da Imagem", "Image/Video": "Imagem/Vídeo", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "As imagens não podem ser armazenadas em cache. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Alterar as permissões</a> da pasta <code>cache</code> no diretório temático <code>yootheme</code>, para que o servidor web possa escrever nele.", "Import Settings": "Configurações de Importação", "Info": "informações", "Inherit transparency from header": "Herdar transparência do cabeçalho", "Inject SVG images into the markup so they adopt the text color automatically.": "Injete imagens SVG na marcação para que adotem a cor do texto automaticamente.", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Injete imagens SVG na marcação da página, para que elas possam ser facilmente estilizadas com CSS.", "Inline SVG": "SVG em linha", "Inline SVG logo": "Logo SVG embutido", "Inline title": "Título embutido", "Input": "Entrada", "Insert at the bottom": "Inserir na parte inferior", "Insert at the top": "Inserir no topo", "Inset": "Inserir", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Em vez de usar uma imagem personalizada, você pode clicar no lápis para escolher um ícone da biblioteca de ícones.", "Intro Image": "Imagem de introdução", "Intro Image Alt": "Imagem de introdução Alt", "Intro Image Caption": "Legenda da imagem de introdução", "Intro Text": "Texto de introdução", "Inverse Logo (Optional)": "Logo Inversa (Opcional)", "Inverse style": "Estilo inverso", "Inverse the text color on hover": "Inverter a cor do texto ao passar o mouse", "Invert lightness": "Inverter brilho", "IP Anonymization": "Anonimização do IP", "Issues and Improvements": "Problemas e melhorias", "Item Count": "Contagem de itens", "Item deleted.": "Item excluído.", "Item renamed.": "Item renomeado.", "Item uploaded.": "Item carregado.", "Item Width": "Largura do Item", "Item Width Mode": "Item Modo Largura ", "Items": "Itens", "Ken Burns Effect": "Efeito Ken Burns", "l": "l\n \n", "Label": "Etiqueta", "Label Margin": "Margem de etiqueta", "Labels": "Etiqueta", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "As imagens de paisagem e retrato estão centradas nas células da grade. Largura e altura serão invertidas quando as imagens forem redimensionadas.", "Large (Desktop)": "Grande (Desktop)", "Large padding": "Acolchoamento grande", "Large Screen": "Tela grande", "Large Screens": "Telas grandes", "Larger padding": "padding grande", "Larger style": "Estilo Grande", "Last 24 hours": "Últimas 24 horas", "Last 30 days": "Ultimos 30 dias", "Last 7 days": "Últimos 7 dias", "Last Column Alignment": "Último Alinhamento de Colunas", "Last Modified": "Última modificação", "Last name": "Sobrenome", "Last visit date": "Data da última visita", "Layout Media Files": "Arquivos de Mídia de Layout", "Lazy load video": "Vídeo de carregamento progressivo", "Learning Layout Techniques": "Técnicas de Layout de Aprendizagem", "Left": "Esquerda", "Library": "Biblioteca", "Lightness": "Brilho", "Limit": "Limite", "Limit by Categories": "Limite por categorias", "Limit by Date Archive Type": "Limitar por tipo de arquivo de data", "Limit by Language": "Limite por idioma", "Limit by Page Number": "Limite por número de página", "Limit by Products on sale": "Limite por produtos em promoção", "Limit by Tags": "Limitar por tags", "Limit by Terms": "Limite por Termos", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Limite o comprimento do conteúdo a vários caracteres. Todos os elementos HTML serão removidos.", "Limit the number of products.": "Limite o número de produtos.", "Link card": "Cartão de link", "Link image": "Imagem de link", "Link overlay": "Sobreposição de link", "Link panel": "Painel de link", "Link Style": "Estilo de Link", "Link Target": "Ancora do Link", "Link Text": "Texto do Link", "Link the image if a link exists.": "Vincule a imagem se houver um link.", "Link the title if a link exists.": "Vincule o título se existir um link.", "Link the whole card if a link exists.": "Vincule a carta inteira se houver um link.", "Link the whole overlay if a link exists.": "Vincule toda a sobreposição se houver um link.", "Link the whole panel if a link exists.": "Vincule todo o painel se houver um link.", "Link title": "Título de link", "Link Title": "Título do link", "Link to redirect to after submit.": "Link para redirecionar para depois de enviar.", "List": "Lista", "List All Tags": "Listar todas as tags", "List Item": "Item da lista", "List Style": "Estilo da lista", "Load Bootstrap": "Carregar Bootstrap", "Load image eagerly": "Carregar imagem ansiosamente", "Load jQuery": "Carregar jQuery", "Load product on sale only": "Carregar produto apenas em promoção", "Load products on sale only": "Carregar produto apenas em promoção", "Loading": "Carregando", "Loading Layouts": "Carregando layouts", "Location": "Localização", "Logo Image": "Imagem do logotipo", "Logo Text": "Texto do logotipo", "Loop video": "Repetir o Vídeo", "Mailchimp API Token": "Token da API do Mailchimp", "Main Section Height": "Altura da Seção Principal", "Main styles": "Estilos principais", "Make SVG stylable with CSS": "Torne o SVG estilizável com CSS", "Make the column or its elements sticky only from this device width and larger.": "Torne a coluna ou seus elementos aderentes apenas a partir desta largura do dispositivo e maior.", "Managing Menus": "Gerenciando menus", "Managing Modules": "Gerenciamento de Módulos", "Managing Sections, Rows and Elements": "Gerenciando seções, linhas e elementos", "Managing Templates": "Gerenciamento de modelos", "Managing Widgets": "Gerenciamento de Widgets", "Map": "Mapa", "Mapping Fields": "Mapeamento de Campos", "Margin": "Margem", "Margin Top": "Margem Superior", "Marker": "Marcador", "Marker Color": "Cor do marcador", "Marker Icon": "Ícone de marcador", "Match (OR)": "Corresponder (OU)", "Match content height": "Combinar Altura do Conteúdo", "Match height": "Combinar altura", "Match Height": "Combinar Altura", "Match the height of all modules which are styled as a card.": "Corresponda à altura de todos os módulos denominados como cartão.", "Match the height of all widgets which are styled as a card.": "Corresponda à altura de todos os widgets denominados como um cartão.", "Max Height": "Altura Máxima", "Max Width": "Largura Máxima", "Max Width (Alignment)": "Largura máxima (Alinhamento)", "Max Width Breakpoint": "Largura máxima do Breakpoint", "Maximum Zoom": "Zoom máximo", "Maximum zoom level of the map.": "Nível máximo de zoom do mapa.", "Media Folder": "Pasta de Mídia", "Medium (Tablet Landscape)": "Médio (Tablet Landscape)", "Menu Divider": "Divisor de menu", "Menu Item": "Item do menu", "Menu items are only loaded from the selected parent item.": "Os itens de menu são carregados apenas a partir do item pai selecionado.", "Menu Style": "Estilo do Menu", "Menu Type": "Tipo de menu", "Message": "Menssagem", "Message shown to the user after submit.": "Mensagem mostrada ao usuário após enviar.", "Meta Alignment": "Alinhamento Meta", "Meta Margin": "Meta Margem", "Meta Parallax": "Meta do Parallax", "Meta Style": "Meta Estilo", "Meta Width": "Largura da Meta", "Min Height": "Altura minina", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Lembre-se de que um modelo com um layout geral é atribuído à página atual. Edite o modelo para atualizar seu layout.", "Minimum Stability": "Estabilidade mínima", "Minimum Zoom": "Zoom mínimo", "Minimum zoom level of the map.": "Nível mínimo de zoom do mapa.", "Miscellaneous Information": "informações diversas", "Mobile Inverse Logo (Optional)": "Logotipo inverso para celular (opcional)", "Mobile Logo (Optional)": "Logo Mobile (Opcional)", "Modal Center": "Centro Modal", "Modal Top": "Topo Modal", "Modal Width": "Largura Modal", "Modal Width/Height": "Largura/Altura Modal", "Mode": "Modo", "Modified": "Modificado", "Module": "Módulo", "Module Position": "Posição do módulo", "Modules": "Módulos", "Month Archive": "Arquivo do mês", "Move the sidebar to the left of the content": "Mova a barra lateral à esquerda do conteúdo", "Multiple Items Source": "Origem de vários itens", "Mute video": "Vídeo Mudo", "Name": "Nome", "Names": "Nomes", "Navbar": "Barra de Navegação", "Navbar Style": "Estilo Navbar", "Navigation": "Navegação", "Navigation Label": "Etiqueta de Navegação", "Navigation Thumbnail": "Miniatura de Navegação", "New Layout": "Novo layout", "New Menu Item": "Novo Item de Menu", "New Module": "Novo Módulo", "New Template": "Novo Modelo", "Newsletter": "Boletim de Notícias", "Next %post_type%": "Próximo %post_type%", "Next Article": "Próximo Artigo ", "Next-Gen Images": "Próxima geração de imagem", "Nicename": "Nome legal", "Nickname": "Apelido", "No %item% found.": "Nenhum %item% encontrado.", "No critical issues found.": "Nenhum problema crítico encontrado.", "No element found.": "Nenhum elemento encontrado.", "No element presets found.": "Nenhuma predefinição de elemento encontrada.", "No files found.": "Nenhum arquivo encontrado.", "No font found. Press enter if you are adding a custom font.": "Nenhuma fonte encontrada. pressione enter se você esta adicionando uma fonte personalizada.", "No icons found.": "Nenhum ícone encontrado.", "No items yet.": "Nenhum item ainda.", "No layout found.": "Nenhum layout encontrado.", "No limit": "Sem limite", "No list selected.": "Nenhuma lista selecionada.", "No Results": "Sem resultados.", "No results.": "Sem resultados.", "No source mapping found.": "Nenhum mapeamento de origem foi encontrado.", "No style found.": "Nenhum estilo encontrado.", "None": "Nenhum", "Not assigned": "Não atribuído", "Offcanvas Center": "Centro Offcanvas", "Offcanvas Mode": "Modo Offcanvas", "Offcanvas Top": "Parte superior fora da tela", "Offset": "Desvio", "On Sale Product": "Produto à venda", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "Em páginas curtas, a seção principal pode ser expandida para preencher a janela de visualização. Isso se aplica apenas a páginas que não são criadas com o construtor de páginas.", "Only available for Google Maps.": "Apenas disponível para o Google Maps.", "Only display modules that are published and visible on this page.": "Apenas exiba os módulos publicados e visíveis nesta página.", "Only show the image or icon.": "Mostrar apenas a imagem ou ícone.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Apenas páginas e postagens individuais podem ter layouts individuais. Use um modelo para aplicar um layout geral a este tipo de página.", "Opacity": "Opacidade", "Open in a new window": "Abra em uma nova janela", "Open Templates": "Modelos abertos", "Open the link in a new window": "Abra o link em uma nova janela", "Opening the Changelog": "Abrindo o registro de alterações", "Options": "Opções", "Order": "Ordem", "Order Direction": "Direção do pedido", "Order First": "Primeiro faça o Pedido", "Ordering Sections, Rows and Elements": "Ordenando Seções, Linhas e Elementos", "Out of Stock": "Fora de estoque", "Outside Breakpoint": "Ponto de ruptura externo", "Outside Color": "Cor exterior", "Overlap the following section": "Sobreponha a seguinte seção", "Overlay": "Sobreposição", "Overlay Color": "Cor do Overlay", "Overlay Parallax": "Parallax do Overlay", "Overlay Slider": "Controle deslizante de sobreposição", "Overlay the site": "Overlay do site", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Substitua a configuração de animação de seções. Esta opção não terá qualquer efeito, a menos que as animações estejam ativadas para esta seção.", "Padding": "Preenchimento", "Page": "Página", "Page Title": "Título da página", "Pagination": "Paginação", "Panel": "Painel", "Panel Slider": "Controle deslizante do painel", "Panels": "Painéis", "Parallax Breakpoint": "Ponto de interrupção do Parallax", "Parallax Easing": "Atenuar o Parallax", "Parent %taxonomy%": "Pai %taxonomy%", "Parent Category": "Categoria Parental", "Parent Menu Item": "Item de menu pai", "Parent Tag": "Tag principal", "Path": "Caminho", "Path Pattern": "Padrão de caminho", "Pause autoplay on hover": "Pausar a Reprodução automática ao passar o mouse", "Phone Landscape": "Celular em Paisagem", "Phone Portrait": "Celular em Retrato", "Photos": "Fotos", "Pick": "Escolha", "Pick %type%": "Escolha o %type%", "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.": "Escolha um %post_type% manualmente ou use as opções de filtro para especificar qual %post_type% deve ser carregado dinamicamente.", "Pick an alternative icon from the icon library.": "Escolha um ícone alternativo da biblioteca de ícones.", "Pick an alternative SVG image from the media manager.": "Escolha uma imagem SVG alternativa no gerenciador de mídia.", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "Escolha um artigo manualmente ou use as opções de filtro para especificar qual artigo deve ser carregado dinamicamente.", "Pick an optional icon from the icon library.": "Escolha um ícone opcional da biblioteca de ícones.", "Pick file": "Escolha o arquivo", "Pick icon": "Escolha o ícone", "Pick link": "Escolha o link", "Pick media": "Escolha mídia", "Pick video": "Escolha o vídeo", "Placeholder Image": "Placeholder da imagem", "Play inline on mobile devices": "Play inline em dispositivos móveis", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Por favor instale/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">plug-in do instalador</a> para ativar esse recurso.", "Please provide a valid email address.": "Por favor, forneça um endereço de e-mail válido.", "Popup": "Aparecer", "Position": "Posicão", "Position Sticky": "Posição Fixa", "Position Sticky Breakpoint": "Ponto de interrupção fixo de posição", "Position Sticky Offset": "Deslocamento Fixo de Posição", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Posicione o elemento acima ou abaixo de outros elementos. Se eles tiverem o mesmo nível de pilha, a posição depende da ordem no layout.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Posicione o elemento no fluxo de conteúdo normal, ou em fluxo normal, mas com uma compensação em relação a si mesmo, ou remova-o do fluxo e posicione-o em relação à coluna de contenção.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Posicione a navegação do filtro na parte superior, esquerda ou direita. Um estilo maior pode ser aplicado à navegação esquerda e direita.", "Position the meta text above or below the title.": "Posicione o meta texto acima ou abaixo do título.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Posicione a navegação na parte superior, inferior, esquerda ou direita. Um estilo maior pode ser aplicado às navegações esquerda e direita.", "Post": "Postar", "Post Order": "Postar pedido", "Postal/ZIP Code": "Código postal", "Poster Frame": "Quadro do Frame", "Prefer excerpt over intro text": "Prefira o trecho ao texto de introdução", "Prefer excerpt over regular text": "Prefira o trecho ao texto normal", "Preserve text color": "Preservar a cor do texto", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Preserve a cor do texto, por exemplo, ao usar cartões. A sobreposição de seção não é compatível com todos os estilos e pode não ter efeito visual.", "Preview all UI components": "Visualize todos os componentes da UI", "Previous %post_type%": "anterior %post_type% ", "Previous Article": "Artigo anterior", "Primary navigation": "Navegação Primária", "Product Description": "Descrição do produto", "Product Gallery": "Descrição do produto", "Product IDs": "IDs de produtos", "Product Images": "Imagens do produto", "Product Information": "informação do produto", "Product Meta": "Meta do produto", "Product Price": "Preço do produto", "Product Rating": "Classificação do produto", "Product SKUs": "SKUs de produtos", "Product Stock": "Estoque de produtos", "Product Tabs": "Guias de produtos", "Product Title": "Título do produto", "Products": "Produtos", "Property": "Propriedade", "Provider": "Fornecedor", "Published": "Publicados", "Push Items": "Enviar itens", "Quantity": "Quantidade", "Quarters": "Quartos", "Quarters 1-1-2": "Quartos 1-1-2", "Quarters 1-2-1": "Quartos 1-2-1", "Quarters 1-3": "Quartos 2-1-1", "Quarters 2-1-1": "Quartos 2-1-1", "Quarters 3-1": "Quartos 3-1", "Quotation": "Cotação", "Random": "Aleatório", "Rating": "Avaliação", "Ratio": "Proporção", "Recompile style": "Recompilar estilo", "Register date": "Data de registo", "Registered": "Registrado", "Reject Button Style": "Rejeitar estilo de botão", "Reject Button Text": "Rejeitar texto do botão", "Related %post_type%": " Relacionado %post_type% ", "Related Articles": "Artigos relacionados", "Related Products": "produtos relacionados", "Relationship": "Relação", "Reload Page": "Atualizar página", "Remove bottom margin": "Remova a margem de baixo", "Remove bottom padding": "Remova o espaço de baixo", "Remove horizontal padding": "Remova o preenchimento horizontal", "Remove left and right padding": "Remova o espaço da esquerda e direita", "Remove left logo padding": "Remova o espaço da esquerda do logo", "Remove left or right padding": "Remova o preenchimento esquerdo ou direito", "Remove Media Files": "Remover arquivos de mídia", "Remove top margin": "Remova a margem de cima", "Remove top padding": "Remova o espaço de cima", "Remove vertical padding": "Remova o preenchimento vertical", "Rename": "Renomear", "Rename %type%": "Renomear %type%", "Replace": "Substituir", "Replace layout": "Substituir layout", "Reset": "Restaurar ", "Reset to defaults": "Reinicie para o padrão", "Responsive": "Responsivo", "Reverse order": "Ordem inversa", "Right": "Direita", "Roles": "Funções", "Root": "Raiz", "Rotate": "Girar", "Rotate the title 90 degrees clockwise or counterclockwise.": "Gire o título 90 graus no sentido horário ou anti-horário.", "Rotation": "Rotação", "Row": "Linha", "Rows": "Linhas", "Run Time": "Tempo de execução", "Saturation": "Saturação", "Save": "Salvar", "Save %type%": "Salvar %type%", "Save in Library": "Salvar na Biblioteca", "Save Layout": "Salvar Layout", "Save Style": "Salvar estilo", "Save Template": "Salvar modelo", "Scale": "Escala", "Search": "Buscar", "Search Component": "Componente de pesquisa", "Search Item": "Pesquisar item", "Search Style": "Buscar Estilo", "Search Word": "Pesquisar Palavra", "Section": "Seção", "Section Animation": "Animação da Seção", "Section Height": "Altura da Seção", "Section Image and Video": "Imagem e vídeo da seção", "Section Padding": "Preenchimento de seção", "Section Style": "Estilo de seção", "Section Title": "Título da seção", "Section Width": "Largura da secção", "Section/Row": "Seção/Linha", "Select": "Selecione", "Select %item%": "Selecionar %item%", "Select %type%": "Selecione %type%", "Select a card style.": "Selecione um cartão de estilo", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Selecione uma fonte de conteúdo para disponibilizar seus campos para mapeamento. Escolha entre as fontes da página atual ou consulte uma fonte personalizada.", "Select a different position for this item.": "Selecione uma posição diferente para esse item.", "Select a grid layout": "Selecione o layout do grid", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Selecione uma posição de módulo Joomla que renderizará todos os módulos publicados. Recomenda-se usar as posições builder-1 a -6, que não são renderizadas em outro lugar pelo tema.", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "Selecione um logotipo, que será mostrado no offcanvas e nas caixas de diálogo modais de determinados layouts de cabeçalho.", "Select a panel style.": "Selecione um estilo de painel.", "Select a predefined date format or enter a custom format.": "Selecione um formato de data predefinido ou insira um formato personalizado.", "Select a predefined meta text style, including color, size and font-family.": "Selecione um estilo de meta texto predefinido, incluindo cor, tamanho e fonte-família.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Selecione um padrão de pesquisa predefinido ou insira uma string personalizada ou expressão regular para pesquisar. A expressão regular deve ser colocada entre barras. Por exemplo `my-string` ou `/ab+c/`.", "Select a predefined text style, including color, size and font-family.": "Selecione um estilo de texto predefinido, incluindo cor, tamanho e família de fontes.", "Select a style for the continue reading button.": "Selecione um estilo para o botão continuar lendo.", "Select a style for the overlay.": "Selecione um estilo para o overlay.", "Select a taxonomy to only load posts from the same term.": "Selecione uma taxonomia para carregar apenas postagens do mesmo termo.", "Select a taxonomy to only navigate between posts from the same term.": "Selecione uma taxonomia para navegar apenas entre postagens do mesmo termo.", "Select a transition for the content when the overlay appears on hover.": "Selecione a transição ao passar o mouse para esse meta texto.", "Select a transition for the link when the overlay appears on hover.": "Selecione a transição ao passar o mouse para o overlay.", "Select a transition for the meta text when the overlay appears on hover.": "Selecione a transição ao passar o mouse para esse meta texto.", "Select a transition for the overlay when it appears on hover.": "Selecione a transição ao passar o mouse para o overlay.", "Select a transition for the title when the overlay appears on hover.": "Selecione a transição ao passar o mouse para o overlay.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Selecione um arquivo de vídeo ou insira um link da segmentação <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WooCommerce page.": "Selecione uma página WooCommerce.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Selecione uma área de widget do WordPress que renderize todos os widgets publicados. É recomendado usar as áreas do widget builder-1 a -6, que não são renderizadas em outro lugar pelo tema.", "Select an alternative font family. Mind that not all styles have different font families.": "Selecione uma família de fontes alternativa. Lembre-se de que nem todos os estilos têm famílias de fontes diferentes.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Selecione um logotipo alternativo com cor invertida, por exemplo, branco, para melhor visibilidade em fundos escuros. Será exibido automaticamente, se necessário.", "Select an alternative logo, which will be used on small devices.": "Selecione um logotipo alternativo, que será usado em dispositivos pequenos.", "Select an animation that will be applied to the content items when filtering between them.": "Selecione uma animação que será aplicada aos itens de conteúdo ao alternar entre eles.", "Select an animation that will be applied to the content items when toggling between them.": "Selecione uma animação que será aplicada aos itens de conteúdo ao alternar entre eles.", "Select an image transition.": "Selecione uma transição de imagem.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Selecione uma transição de imagem. Se a imagem em foco estiver definida, a transição ocorrerá entre as duas imagens. for <i>None</i> selecionado, a imagem flutuante será ativada.", "Select an optional image that appears on hover.": "Selecione uma imagem opcional que aparece em foco.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Selecione uma imagem opcional que aparece até o vídeo ser reproduzido. Se não for selecionado, o primeiro quadro de vídeo será exibido como o quadro do pôster.", "Select dialog layout": "Selecione o layout da caixa de diálogo", "Select header layout": "Selecione o layout do cabeçalho", "Select Image": "Selecione a Imagem", "Select Manually": "Selecionar manualmente", "Select mobile dialog layout": "Selecione o layout da caixa de diálogo móvel", "Select mobile header layout": "Selecione o layout do cabeçalho móvel", "Select one of the boxed card or tile styles or a blank panel.": "Selecione um dos estilos de cartão em caixa ou um painel em branco.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Selecione o ponto de interrupção a partir do qual a coluna começará a aparecer antes de outras colunas. Em tamanhos de tela menores, a coluna aparecerá na ordem natural.", "Select the color of the list markers.": "Selecione a cor dos marcadores de lista.", "Select the content position.": "Selecione a posição do conteúdo", "Select the device size where the default header will be replaced by the mobile header.": "Selecione o tamanho do dispositivo em que o cabeçalho padrão será substituído pelo cabeçalho móvel.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Selecione o estilo de navegação filtro. Os estilos pílula e divisão estão disponíveis para subnav horizontal.", "Select the form size.": "Selecione o tamanho do formulário.", "Select the form style.": "Selecione o estilo do formulário.", "Select the icon color.": "Selecione a cor do ícone's.", "Select the image border style.": "Selecione o estilo de borda da imagem's.", "Select the image box decoration style.": "Selecione o estilo de decoração da caixa de imagem.", "Select the image box shadow size on hover.": "Selecione o tamanho da sombra da caixa da imagem's ao passar o mouse.", "Select the image box shadow size.": "Selecione o tamanho da sombra da caixa da(s) imagem(s).", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "Selecione o layout para a posição <code>dialog-mobile</code>. Os itens empurrados da posição são mostrados como reticências.", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "Selecione o layout para a posição <code>dialog</code>. Os itens que podem ser empurrados são mostrados como reticências.", "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.": "Selecione o layout para as posições <code>logo-mobile</code>, <code>navbar-mobile</code> e <code>header-mobile</code>.", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "Selecione o layout para as posições <code>logo</code>, <code>navbar</code> e <code>header</code>. Alguns layouts podem dividir ou enviar itens de uma posição que são mostrados como reticências.", "Select the link style.": "Selecione o estilo do link.", "Select the list style.": "Selecione o estilo da lista.", "Select the list to subscribe to.": "Selecione a lista para se inscrever.", "Select the logical operator for the attribute term comparison. Match at least one of the terms, none of the terms or all terms.": "Selecione o operador lógico para a comparação de termos de atributo. Corresponder a pelo menos um dos termos, nenhum dos termos ou todos os termos.", "Select the logical operator for the category comparison. Match at least one of the categories, none of the categories or all categories.": "Selecione o operador lógico para a comparação de categorias. Corresponder a pelo menos uma das categorias, nenhuma das categorias ou todas as categorias.", "Select the logical operator for the tag comparison. Match at least one of the tags, none of the tags or all tags.": "Selecione o operador lógico para a comparação de tags. Corresponder a pelo menos uma das tags, nenhuma das tags ou todas as tags.", "Select the marker of the list items.": "Selecione o marcador dos itens da lista.", "Select the nav style.": "Selecione o estilo de navegação.", "Select the navbar style.": "Selecione o estilo da barra de navegação.", "Select the navigation type.": "Selecione o tipo de navegação.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Selecione o estilo de navegação. Os estilos de pílula e linha só estão disponíveis para Subnavs horizontais.", "Select the overlay or content position.": "Selecione a posição de overlay ou conteúdo.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Selecione o alinhamento do popover para o seu marcador. Se o popover não for adequado ao seu recipiente, ele irá virar automaticamente.", "Select the position of the navigation.": "Selecione a posição da navegação.", "Select the position of the slidenav.": "Selecione a posição do slidenav.", "Select the position that will display the search.": "Selecione a posição que exibirá a pesquisa.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Selecione a posição que exibirá os ícones sociais. Certifique-se de adicionar seus links de perfil social ou nenhum ícone pode ser exibido.", "Select the search style.": "Selecione o estilo da busca.", "Select the slideshow box shadow size.": "Selecione o tamanho da sombra da caixa de apresentação(s).", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Selecione o estilo para o destaque da sintaxe do código. Use o GitHub para modo claro e Monokai para backgrounds escuros.", "Select the style for the overlay.": "Selecione o estilo para o ovelay.", "Select the subnav style.": "Selecione o estilo do subnav.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Selecione a cor SVG. Ele se aplicará apenas aos elementos suportados definidos no SVG.", "Select the table style.": "Selecione o estilo da tabela.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Selecione a cor do texto. Se o Background opcional estiver selecionado, estilos que não aplicam uma imagem de fundo usam a cor primária.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Selecione a cor do texto. Se o Background opcional estiver selecionado, estilos que não aplicam uma imagem de fundo usam a cor primária.", "Select the title style and add an optional colon at the end of the title.": "Selecione o estilo do título e adicione um cólon opcional no final do título.", "Select the transformation origin for the Ken Burns animation.": "Selecione a origem da transformação para a animação Ken Burns.", "Select the transition between two slides.": "Selecione a transição entre dois slides.", "Select the video box decoration style.": "Selecione o estilo de decoração da caixa de vídeo.", "Select the video box shadow size.": "Selecione o tamanho da sombra da caixa de vídeo.", "Select whether a button or a clickable icon inside the email input is shown.": "Selecione se um botão ou um ícone clicável dentro da entrada de e-mail serão mostrados.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Selecione se uma mensagem será exibida ou o site será redirecionado depois de clicar no botão de inscrição.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Selecione se a Pesquisa padrão ou Pesquisa Inteligente é usada pelo módulo de pesquisa e pelo elemento do construtor.", "Select whether the modules should be aligned side by side or stacked above each other.": "Selecione se os widgets devem ser alinhados lado a lado ou empilhados acima uns dos outros", "Select whether the widgets should be aligned side by side or stacked above each other.": "Selecione se os widgets devem ser alinhados lado a lado ou empilhados acima uns dos outros", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "Selecione seu logotipo. Opcionalmente, injete um logotipo SVG na marcação para que adote a cor do texto automaticamente.", "Sentence": "Frase", "Separator": "Separador", "Serve WebP images": "Ativar imagens WebP", "Set a condition to display the element or its item depending on the content of a field.": "Defina uma condição para exibir o elemento ou seu item dependendo do conteúdo de um campo.", "Set a different link text for this item.": "Defina um texto de link diferente para este item.", "Set a different text color for this item.": "Defina uma cor de texto diferente para este item.", "Set a fixed width.": "Definir uma largura fixa.", "Set a higher stacking order.": "Defina uma ordem de empilhamento mais alta.", "Set a large initial letter that drops below the first line of the first paragraph.": "Defina uma letra inicial grande que caia abaixo da primeira linha do primeiro parágrafo.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Defina uma largura da barra lateral em porcentagem e a coluna de conteúdo se ajustará em conformidade. A largura não vai abaixo da largura mínima da barra lateral, que você pode definir na seção Estilo.", "Set an additional transparent overlay to soften the image or video.": "Defina um overlay transparente adicional para suavizar a imagem ou o vídeo.", "Set an additional transparent overlay to soften the image.": "Defina um overlay transparente adicional para suavizar a imagem.", "Set an optional content width which doesn't affect the image if there is just one column.": "Defina uma largura de conteúdo opcional que não afete a imagem se houver apenas uma coluna.", "Set an optional content width which doesn't affect the image.": "Defina uma largura de conteúdo opcional que não afete a imagem.", "Set how the module should align when the container is larger than its max-width.": "Defina como o módulo deve ser alinhado quando o recipiente for maior do que a largura máxima.", "Set light or dark color if the navigation is below the slideshow.": "Definir cor clara ou escura da navegação está abaixo da apresentação de slides.", "Set light or dark color if the slidenav is outside.": "Definir cor clara ou escura do slidenav está fora do slideshow.", "Set light or dark color mode for text, buttons and controls.": "Defina o modo de cor clara ou escura para texto, botões e controles.", "Set light or dark color mode.": "Definir o modo de cor clara ou escura.", "Set percentage change in lightness (Between -100 and 100).": "Ajuste a variação percentual na leveza (entre -100 e 100).", "Set percentage change in saturation (Between -100 and 100).": "Ajuste a variação percentual em saturação (entre -100 e 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Ajuste a variação percentual na quantidade de correção gama (entre 0.01 e 10.0, onde 1.0 não aplica correção).", "Set the autoplay interval in seconds.": "Defina o intervalo de reprodução automática em segundos.", "Set the blog width.": "Definir a largura do blog.", "Set the breakpoint from which grid items will align side by side.": "Defina o ponto de interrupção a partir do qual os itens da grade serão alinhados lado a lado.", "Set the breakpoint from which grid items will stack.": "Defina o breakpoint a partir do qual as células da grade serão empilhadas.", "Set the breakpoint from which the sidebar and content will stack.": "Defina o breakpoint a partir do qual a barra lateral e o conteúdo serão empilhados.", "Set the button size.": "Defina o tamanho do botão.", "Set the button style.": "Defina o estilo do botão.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Defina a largura da coluna para cada ponto de interrupção. Misture larguras fracionárias ou combine larguras fixas com o valor <i>Expandir</i>. Se nenhum valor for selecionado, a largura da coluna do próximo tamanho de tela menor será aplicada. A combinação de larguras deve sempre ocupar a largura total.", "Set the content width.": "Defina a largura do conteúdo.", "Set the device width from which the list columns should apply.": "Defina a largura do dispositivo a partir da qual as colunas da lista devem ser aplicadas.", "Set the device width from which the text columns should apply.": "Defina a largura do dispositivo a partir da qual as colunas de texto devem ser aplicadas.", "Set the dropdown width in pixels (e.g. 600).": "Defina a largura da lista suspensa em pixels (por exemplo, 600).", "Set the duration for the Ken Burns effect in seconds.": "Defina a duração do efeito Ken Burns em segundos.", "Set the height in pixels.": "Defina a altura em pixels.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Ajuste a posição horizontal da borda superior do elemento em pixels. Uma unidade diferente como % ou largura e altura também pode ser inserida.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Ajuste a posição horizontal da borda superior do elemento em pixels. Uma unidade diferente como % ou largura e altura também pode ser inserida.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Ajuste a posição horizontal da borda superior do elemento em pixels. Uma unidade diferente como % ou largura e altura também pode ser inserida.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Ajuste a posição horizontal da borda superior do elemento em pixels. Uma unidade diferente como % ou largura e altura também pode ser inserida.", "Set the hover style for a linked title.": "Defina o estilo de foco para um título vinculado.", "Set the hover transition for a linked image.": "Defina a transição instantânea para uma imagem vinculada.", "Set the hue, e.g. <i>#ff0000</i>.": "Definir o tom e.g. <i>#ff0000</i>.", "Set the icon color.": "Definir a cor do ícone.", "Set the icon width.": "Defina a largura do ícone.", "Set the initial background position, relative to the page layer.": "Defina a posição de fundo inicial, em relação à camada de página.", "Set the initial background position, relative to the section layer.": "Defina a posição do background inicial, em relação à camada de seção.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Defina a resolução inicial na qual exibir o mapa. 0 está totalmente com zoom e 18 está com a maior resolução ampliada.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Definir a largura do item para cada background. <i>herdar</i> refere-se à largura do item do próximo tamanho de tela menor.", "Set the link style.": "Defina o estilo do link.", "Set the logical operator for how the %post_type% relate to the author. Choose between matching at least one term, all terms or none of the terms.": "Defina o operador lógico de como o %post_type% se relaciona com o autor. Escolha entre corresponder pelo menos um termo, todos os termos ou nenhum dos termos.", "Set the logical operators for how the %post_type% relate to %taxonomy_list% and author. Choose between matching at least one term, all terms or none of the terms.": "Defina os operadores lógicos para como %post_type% se relaciona com %taxonomy_list% e autor. Escolha entre corresponder pelo menos um termo, todos os termos ou nenhum dos termos.", "Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.": "Defina os operadores lógicos de como os artigos se relacionam com a categoria, tags e autor. Escolha entre corresponder pelo menos um termo, todos os termos ou nenhum dos termos.", "Set the margin between the countdown and the label text.": "Defina a margem entre a contagem regressiva e o texto da etiqueta.", "Set the margin between the overlay and the slideshow container.": "Defina a margem entre o Overlay e o contêiner do Slideshow.", "Set the maximum content width.": "Defina a largura máxima do conteúdo.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Defina a largura máxima do conteúdo. Nota: A seção pode ter uma largura máxima, que você não pode exceder.", "Set the maximum header width.": "Defina a largura máxima do cabeçalho.", "Set the maximum height.": "Defina a altura máxima.", "Set the maximum width.": "Defina a largura máxima.", "Set the number of columns for the gallery thumbnails.": "Defina o número de colunas para as miniaturas da galeria.", "Set the number of grid columns for desktops and larger screens. On smaller viewports the columns will adapt automatically.": "Defina o número de colunas de grade para desktops e telas maiores. Em viewports menores, as colunas se adaptarão automaticamente.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Definir a largura do item para cada background. <i>herdar</i> refere-se à largura do item do próximo tamanho de tela menor.", "Set the number of items after which the following items are pushed to the bottom.": "Defina o número de itens após os quais os itens a seguir são empurrados para o fundo.", "Set the number of items after which the following items are pushed to the right.": "Defina o número de itens após os quais os itens a seguir são empurrados para a direita.", "Set the number of list columns.": "Defina o número de colunas de lista.", "Set the number of text columns.": "Defina o número de colunas de texto.", "Set the offset to specify which file is loaded.": "Defina o deslocamento para especificar qual arquivo é carregado.", "Set the order direction.": "Defina a direção do pedido.", "Set the padding between sidebar and content.": "Defina o preenchimento entre a barra lateral e o conteúdo.", "Set the padding between the card's edge and its content.": "Defina o preenchimento entre a borda do cartão e seu conteúdo.", "Set the padding between the overlay and its content.": "Defina o preenchimento entre o overlay e seu conteúdo.", "Set the padding.": "Definir o padding.", "Set the post width. The image and content can't expand beyond this width.": "Definir a largura do post. A imagem e o conteúdo não podem se expandir além dessa largura", "Set the product ordering.": "Defina o pedido do produto.", "Set the search input size.": "Defina o tamanho de entrada da pesquisa.", "Set the search input style.": "Defina o estilo de entrada de pesquisa.", "Set the separator between fields.": "Defina o separador entre os campos.", "Set the separator between list items.": "Defina o separador entre os itens da lista.", "Set the separator between tags.": "Defina o separador entre as tags.", "Set the separator between terms.": "Defina o separador entre os termos.", "Set the size of the column gap between multiple buttons.": "Defina o tamanho do espaço da coluna entre vários botões.", "Set the size of the column gap between the numbers.": "Defina o tamanho do espaço da coluna entre os números.", "Set the size of the gap between between the filter navigation and the content.": "Definir o tamanho do espaço entre o filtro de navegação e do conteúdo.", "Set the size of the gap between the grid columns.": "Defina o tamanho do espaço entre as colunas da grade.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Defina o número de colunas no <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> configurações no Joomla.", "Set the size of the gap between the grid rows.": "Defina o tamanho do espaço entre as linhas da grade.", "Set the size of the gap between the image and the content.": "Defina o tamanho do espaço entre a imagem e o conteúdo.", "Set the size of the gap between the navigation and the content.": "Selecione a largura do gutter entre os itens de navegação e conteúdo", "Set the size of the gap between the social icons.": "Defina o tamanho do espaço entre os ícones de mídias sociais.", "Set the size of the gap between the title and the content.": "Defina o tamanho do espaço entre o título e o conteúdo.", "Set the size of the gap if the grid items stack.": "Defina o tamanho do espaço se os itens da grade forem empilhados.", "Set the size of the row gap between multiple buttons.": "Defina o tamanho do espaço da linha entre vários botões.", "Set the size of the row gap between the numbers.": "Defina o tamanho do espaço da linha entre os números.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Defina uma proporção. Recomenda-se usar a mesma proporção da imagem de fundo. Apenas use sua largura e altura, como <code>1600:900</code>.", "Set the starting point and limit the number of %post_type%.": "Defina o ponto de partida e limite o número de %post_type%.", "Set the starting point and limit the number of %post_types%.": "Defina o ponto de partida e limite o número de %post_types%.", "Set the starting point and limit the number of %taxonomies%.": "Defina o ponto de partida e limite o número de %taxonomies%.", "Set the starting point and limit the number of articles.": "Defina o ponto de partida e limite o número de artigos.", "Set the starting point and limit the number of categories.": "Defina o ponto de partida e limite o número de categorias.", "Set the starting point and limit the number of files.": "Defina o ponto de partida e limite o número de arquivos.", "Set the starting point and limit the number of items.": "Defina o ponto inicial e limite o número de itens.", "Set the starting point and limit the number of tags.": "Defina o ponto de partida e limite o número de tags.", "Set the starting point and limit the number of users.": "Defina o ponto de partida e limite o número de usuários.", "Set the starting point to specify which %post_type% is loaded.": "Defina o ponto de partida para especificar qual %post_type% é carregado.", "Set the starting point to specify which article is loaded.": "Defina o ponto de partida para especificar qual artigo é carregado.", "Set the top margin if the image is aligned between the title and the content.": "Defina a margem superior se a imagem estiver alinhada entre o título e o conteúdo.", "Set the top margin.": "configurações no Joomla.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Defina a margem superior. Observe que a margem será aplicada apenas se o campo de conteúdo seguir imediatamente outro campo de conteúdo.", "Set the velocity in pixels per millisecond.": "Defina a velocidade em pixels por milissegundo.", "Set the vertical container padding to position the overlay.": "Defina o padding vertical do contêiner para posicionar a overlay.", "Set the vertical margin.": "Definir a margem vertical.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Definir a margem vertical. Nota: A margem superior do primeiro elemento e a margem inferior do último elemento são sempre removidas. Defina aqueles nas configurações do grid.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Definir a margem vertical. Nota: A primeira margem superior da grade e a última margem inferior do grid são sempre removidas. Defina aqueles nas configurações da seção.", "Set the vertical padding.": "Definir o padding vertical.", "Set the video dimensions.": "Defina as dimensões do vídeo.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Defina a largura e a altura do conteúdo do lightbox , por exemplo, imagem, vídeo ou iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Defina a largura e a altura em pixels (por exemplo, 600). Definir apenas um valor preserva as proporções originais. A imagem será redimensionada e recortada automaticamente.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Defina a largura e a altura em pixels. Definir apenas um valor preserva as proporções originais. A imagem será redimensionada e recortada automaticamente.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Definir a largura em pixels. Se não houver largura definida, o mapa ocupará toda a largura e manterá a altura. Ou use a largura apenas para definir o ponto de interrupção a partir do qual o mapa começa a diminuir, preservando a proporção.", "Sets": "Conjuntos", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Definir apenas um valor preserva as proporções originais. A imagem será redimensionada e recortada automaticamente e, quando possível, as imagens de alta resolução serão geradas automaticamente.", "Setting the Blog Content": "Definindo o conteúdo do blog", "Setting the Blog Image": "Definindo a imagem do blog", "Setting the Blog Layout": "Definindo o layout do blog", "Setting the Blog Navigation": "Definindo a navegação do blog", "Setting the Header Layout": "Definindo o layout do cabeçalho", "Setting the Minimum Stability": "Definir a estabilidade mínima", "Setting the Module Appearance Options": "Definindo as opções de aparência do módulo", "Setting the Module Default Options": "Definindo as opções padrão do módulo", "Setting the Module Grid Options": "Definindo as opções de grade do módulo", "Setting the Module List Options": "Definindo as opções da lista de módulos", "Setting the Module Menu Options": "Definindo as opções do menu do módulo", "Setting the Navbar": "Configurando a barra de navegação", "Setting the Page Layout": "Definindo o layout da página", "Setting the Post Content": "Definindo o conteúdo da postagem", "Setting the Post Image": "Definindo a imagem da postagem", "Setting the Post Layout": "Definindo o layout da postagem", "Setting the Post Navigation": "Configurando a navegação pós", "Setting the Sidebar Area": "Definindo a área da barra lateral", "Setting the Sidebar Position": "Definindo a posição da barra lateral", "Setting the Source Order and Direction": "Definindo a ordem e a direção da fonte", "Setting the Template Loading Priority": "Definindo a prioridade de carregamento do modelo", "Setting the Template Status": "Definindo o status do modelo", "Setting the Top and Bottom Areas": "Definindo as áreas superior e inferior", "Setting the Top and Bottom Positions": "Definindo as posições superior e inferior", "Setting the Widget Appearance Options": "Definindo as opções de aparência do widget", "Setting the Widget Default Options": "Definindo as opções padrão do widget", "Setting the Widget Grid Options": "Definindo as opções da grade do widget", "Setting the Widget List Options": "Definindo as opções da lista de widgets", "Setting the Widget Menu Options": "Configurando as opções do menu de widgets", "Setting the WooCommerce Layout Options": "Configurando as opções de layout do WooCommerce", "Settings": "Configurações", "Short Description": "Pequena descrição", "Show %taxonomy%": "Mostrar %taxonomy%", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Mostre um banner para informar seus visitantes sobre os cookies usados pelo seu site. Escolha entre uma simples notificação de que os cookies são carregados ou exija um consentimento obrigatório antes de carregar os cookies.", "Show a divider between grid columns.": "Mostrar divisores entre as colunas de texto", "Show a divider between list columns.": "Mostra um divisor entre as colunas da lista.", "Show a divider between text columns.": "Mostra um divisor entre as colunas de texto.", "Show a separator between the numbers.": "Mostre um separador entre os números.", "Show archive category title": "Mostrar título da categoria de arquivo", "Show as disabled button": "Botão Mostrar como desativado", "Show author": "Mostrar autor", "Show below slideshow": "Mostrar abaixo do slideshow", "Show button": "Mostrar botão", "Show categories": "Mostrar categorias", "Show Category": "Mostrar categoria", "Show close button": "Mostrar botão fechar", "Show comment count": "Mostrar contagem de comentários", "Show comments count": "Mostrar categorias", "Show content": "Mostrar conteúdo", "Show Content": "Mostrar conteúdo", "Show controls": "Mostrar controles", "Show current page": "Mostrar a página atual", "Show date": "Mostrar data", "Show dividers": "Mostrar divisores", "Show drop cap": "Mostrar capitular", "Show filter control for all items": "Mostrar controle de filtro para todos os itens", "Show headline": "Mostrar título", "Show home link": "Mostrar link inicial", "Show hover effect if linked.": "Mostrar efeito de foco quando vinculado.", "Show intro text": "Mostrar texto de introdução", "Show Labels": "Mostrar etiquetas", "Show link": "Mostrar link", "Show lowest price": "Mostrar preço mais baixo", "Show map controls": "Mostrar controles do mapa", "Show name fields": "Mostrar campos de nome", "Show navigation": "Mostrar navegação", "Show on hover only": "Mostrar somente ao passar o mouse", "Show optional dividers between nav or subnav items.": "Mostrar divisores opcionais entre itens de navegação ou subnav.", "Show or hide content fields without the need to delete the content itself.": "Mostrar ou ocultar campos de conteúdo sem a necessidade de excluir o conteúdo em si.", "Show or hide fields in the meta text.": "Mostre ou oculte campos no metatexto.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Mostre ou oculte o elemento nesta largura do dispositivo e maior. Se todos os elementos estiverem ocultos, colunas, linhas e seções serão ocultadas de acordo.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Mostre ou oculte o link inicial como primeiro item, bem como a página atual como último item na navegação de navegação.", "Show or hide the intro text.": "Mostre ou oculte o texto de introdução.", "Show or hide the reviews link.": "Mostre ou oculte o link de comentários.", "Show or hide title.": "Mostrar ou ocultar o título.", "Show out of stock text as disabled button for simple products.": "Mostrar texto esgotado como botão desativado para produtos simples.", "Show parent icon": "Mostrar ícone pai", "Show popup on load": "Mostrar o popup ao carregar", "Show rating": "Mostrar classificação", "Show result count": "Mostrar contagem de resultados", "Show result ordering": "Mostrar ordenação do resultado", "Show reviews link": "Mostrar link de avaliações", "Show Separators": "Mostrar separadores", "Show space between links": "Mostrar espaço entre links", "Show Start/End links": "Mostrar links de início / fim", "Show system fields for single posts. This option does not apply to the blog.": "Mostrar campos do sistema para postagens únicas. Esta opção não se aplica ao blog.", "Show system fields for the blog. This option does not apply to single posts.": "Mostrar campos do sistema para o blog. Esta opção não se aplica a mensagens únicas.", "Show tags": "Mostrar tags", "Show Tags": "Mostrar tags", "Show the content": "Mostrar o conteúdo", "Show the excerpt in the blog overview instead of the post text.": "Mostre o trecho na visão geral do blog em vez do texto do post.", "Show the image": "Mostre a imagem", "Show the link": "Mostra o link", "Show the lowest price instead of the price range.": "Mostre o preço mais baixo em vez da faixa de preço.", "Show the menu text next to the icon": "Mostra o texto do menu ao lado do ícone", "Show the meta text": "Mostrar o meta texto", "Show the navigation label instead of title": "Mostre a etiqueta de navegação em vez do título", "Show the navigation thumbnail instead of the image": "Mostra a miniatura de navegação em vez da imagem", "Show the sale price before or after the regular price.": "Mostre o preço de venda antes ou depois do preço normal.", "Show the subtitle": "Mostrar a legenda", "Show the title": "Mostre o título", "Show title": "Mostrar o título", "Show Title": "Mostrar título", "Sidebar": "Barra Lateral", "Single %post_type%": "Único %post_type%", "Single Article": "Artigo único", "Single Contact": "Contato único", "Single Post Pages": "Páginas de postagem única", "Site Title": "titulo do site", "Size": "Tamanho", "Slide all visible items at once": "Deslize todos os itens visíveis de uma só vez", "Small (Phone Landscape)": "Pequeno(Celular em Paisagem )", "Smart Search": "Busca inteligente", "Smart Search Item": "Item de pesquisa inteligente", "Social Icons": "Ícones Sociais", "Social Icons Gap": "Lacuna de ícones sociais", "Social Icons Size": "Tamanho dos ícones sociais", "Split Items": "Dividir itens", "Split the dropdown into columns.": "Divida o menu suspenso em colunas.", "Spread": "Espalhar", "Stack columns on small devices or enable overflow scroll for the container.": "Empilha colunas em pequenos dispositivos ou habilite o deslocamento para o recipiente.", "Stacked Center A": "Empilhar no Centro A", "Stacked Center B": "Empilhar no Centro B", "Stacked Center C": "Empilhar no Centro A", "Stacked Center Split A": "Divisão central empilhada A", "Stacked Center Split B": "Divisão central empilhada B", "Stacked Justify": "Justificar empilhado", "Stacked Left": "Empilhado à Esquerda", "Start": "Começar", "Start with all items closed": "Comece com todos os itens fechados", "State or County": "Estado ou País", "Sticky Effect": "Efeito pegajoso", "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.": "A seção fixa será coberta pela seção a seguir durante a rolagem. Revelar seção por seção anterior.", "Stretch the panel to match the height of the grid cell.": "Estique o painel para igualar a altura da célula do grid", "Style": "Estilo", "Subtitle": "Legenda", "Support": "Suporte", "SVG Color": "Cor SVG", "Switch prices": "Mudar preços", "Switcher": "Interruptor", "Syntax Highlighting": "Realce de Sintaxe", "System Check": "Checagem de sistema", "Table": "Tabela", "Table Head": "Cabeçalho da Tabela", "Tablet Landscape": "Tabela em Paisagem", "Tag": "Marcação", "Tag Item": "Marcar item", "Tagged Items": "Itens marcados", "Tags are only loaded from the selected parent tag.": "As tags são carregadas apenas da tag pai selecionada.", "Tags Operator": "Operador de tags", "Target": "Alvo", "Telephone": "Telefone", "Templates": "Modelos", "Term Order": "Ordem de Prazo", "Text": "Texto", "Text Alignment": "Alinhamento de texto", "Text Alignment Breakpoint": "Ponto de interrupção do alinhamento de texto", "Text Alignment Fallback": "Queda de Alinhamento de Texto", "Text Color": "Cor do texto", "Text Style": "Estilo de texto", "The Accordion Element": "O elemento acordeão", "The Alert Element": "O elemento de alerta", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "A animação começa e para dependendo da posição do elemento na viewport. Como alternativa, use a posição de um contêiner pai.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "A animação começa quando o elemento entra na viewport e termina quando sai da viewport. Opcionalmente, defina um deslocamento inicial e final, por exemplo. <code>100px</code>, <code>50vh</code> ou <code>50vh + 50%</code>. A porcentagem está relacionada à altura do alvo.", "The Area Element": "O elemento de área", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "A barra na parte superior empurra o conteúdo para baixo enquanto a barra na parte inferior é fixada acima do conteúdo.", "The Breadcrumbs Element": "O elemento do pão ralado", "The builder is not available on this page. It can only be used on pages, posts and categories.": "O construtor não está disponível nesta página. Ele só pode ser usado em páginas, posts e categorias.", "The Button Element": "O elemento botão", "The changes you made will be lost if you navigate away from this page.": "As alterações feitas serão perdidas se você sair dessa página.", "The Code Element": "O elemento de código", "The Countdown Element": "O elemento da contagem regressiva", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "A ordem padrão seguirá a ordem definida pelos colchetes ou retornará à ordem de arquivos padrão definida pelo sistema.", "The Description List Element": "O elemento da lista de descrição", "The Divider Element": "O elemento divisor", "The Gallery Element": "O elemento da galeria", "The Grid Element": "O elemento de grade", "The Headline Element": "O elemento do título", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "A altura pode se adaptar à altura da viewport. <br><br>Nota: Certifique-se de que nenhuma altura esteja definida nas configurações da seção ao usar uma das opções da janela de visualização.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "A altura se adaptará automaticamente com base em seu conteúdo. Em alternativa, a altura pode adaptar-se à altura da janela de visualização. <br> <br> Nota: Certifique-se de que nenhuma altura esteja definida nas configurações da seção ao usar uma das opções de viewport.", "The Icon Element": "O elemento ícone", "The Image Element": "O elemento de imagem", "The List Element": "O elemento da lista", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "O logotipo é colocado automaticamente entre os itens. Opcionalmente, defina o número de itens após o qual os itens são divididos.", "The Map Element": "O elemento do mapa", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "O efeito de alvenaria cria um layout livre de lacunas, mesmo se as células da grade tiverem alturas diferentes. ", "The Module Element": "O elemento do módulo", "The module maximum width.": "A largura máxima do módulo.", "The Nav Element": "O elemento de navegação", "The Newsletter Element": "O elemento do boletim informativo", "The Overlay Element": "O elemento de sobreposição", "The Overlay Slider Element": "O elemento deslizante de sobreposição", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "A página foi atualizada por %modifiedBy%. Descartar suas alterações e recarregar?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "A página que você está editando atualmente foi atualizada por %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?", "The Pagination Element": "O elemento de paginação", "The Panel Element": "O elemento do painel", "The Panel Slider Element": "O elemento deslizante do painel", "The Popover Element": "O elemento popover", "The Position Element": "O elemento de posição", "The Quotation Element": "O elemento de cotação", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "O plug-in RSFirewall corrompe o conteúdo do construtor. Desative o recurso <em>Converter endereços de e-mail de texto simples em imagens</em> na <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">configuração do RSFirewall</a>.", "The Search Element": "O elemento de pesquisa", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "O plugin SEBLOD faz com que o construtor fique indisponível. Desative o recurso <em>Ocultar ícone de edição</em> na <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">configuração do SEBLOD</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "A apresentação de slides sempre ocupa largura total e a altura se adaptará automaticamente com base na taxa definida. Em alternativa, a altura pode adaptar-se à altura da janela de visualização.<br><br>Nota: Certifique-se de que nenhuma altura esteja definida nas configurações da seção ao usar uma das opções de viewport.", "The Slideshow Element": "O elemento de apresentação de slides", "The Social Element": "O elemento social", "The Subnav Element": "O elemento de subnavegação", "The Switcher Element": "O elemento alternador", "The Table Element": "O elemento da tabela", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "O modelo é atribuído apenas a artigos com as tags selecionadas. Use a tecla <kbd>shift</kbd> ou <kbd>ctrl/cmd</kbd> para selecionar várias tags.", "The template is only assigned to the selected pages.": "O modelo é atribuído apenas às páginas selecionadas.", "The Text Element": "O elemento de texto", "The Totop Element": "O elemento superior", "The Video Element": "O elemento de vídeo", "The Widget Element": "O elemento widget", "The width of the grid column that contains the module.": "A largura da coluna do grid que contém o módulo.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "A pasta de temas do YOOtheme Pro foi renomeada para quebrar a funcionalidade essencial. Renomeie a pasta do tema de volta para <code>yootheme</code>.", "Theme Settings": "Configurações de tema", "Thirds": "Terços", "Thirds 1-2": "Terços 1-2", "Thirds 2-1": "Terços 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Esta pasta armazena imagens que você baixa ao usar layouts da biblioteca do YOOtheme Pro. Está localizado dentro da pasta de imagens do Joomla.", "This is only used, if the thumbnail navigation is set.": "Isso só é usado se a navegação de miniaturas estiver definida.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Esse layout inclui um arquivo de mídia que precisa ser baixado na biblioteca de mídia do seu site. |||| Esse layout inclui %smart_count% arquivos de mídia que precisam ser baixados na biblioteca de mídia do seu site.", "This option doesn't apply unless a URL has been added to the item.": "Esta opção não se aplica, a menos que um URL tenha sido adicionado ao item.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Esta opção não se aplica, a menos que um URL tenha sido adicionado ao item. Apenas o conteúdo do item será vinculado.", "This option is only used if the thumbnail navigation is set.": "Esta opção só é usada se a navegação de miniaturas estiver definida.", "Thumbnail": "Miniatura", "Thumbnail Inline SVG": "Miniatura SVG Inline", "Thumbnail SVG Color": "Cor SVG da miniatura", "Thumbnail Width/Height": "Largura/Altura da Miniatura", "Thumbnails": "Miniaturas", "Thumbnav Inline SVG": "Miniatura SVG Inline", "Thumbnav SVG Color": "Cor SVG Miniatura", "Time Archive": "Arquivo de tempo", "Title": "Título", "title": "título", "Title Decoration": "Decoração de títulos", "Title Margin": "Margem de título", "Title Parallax": "Título Parallax", "Title Style": "Estilo do título", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Os estilos de título diferem no tamanho da fonte, mas também podem vir com uma cor, um tamanho e uma fonte predefinidos.", "Title Width": "Largura do Título", "To Top": "Para o Topo", "Top": "Topo", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "As imagens alinhadas na parte superior, esquerda ou direita podem ser anexadas à borda do cartão. Se a imagem estiver alinhada à esquerda ou à direita, ela também se estenderá para cobrir todo o espaço.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "As imagens alinhadas na parte superior, esquerda ou direita podem ser anexadas à borda do cartão. Se a imagem estiver alinhada à esquerda ou à direita, ela também se estenderá para cobrir todo o espaço.", "Total Views": "Total de visualizações", "Touch Icon": "Toque no ícone", "Transform Origin": "Transformar Origem", "Transition": "Transição", "Translate X": "Traduzir X", "Translate Y": "Traduzir Y", "Transparent Header": "Cabeçalho Transparente", "Type": "Tipo", "Understanding Status Icons": "Entendendo os ícones de status", "Understanding the Layout Structure": "Entendendo a Estrutura do Layout", "Unknown %type%": "Desconhecido %type%", "Unpublished": "Não publicado", "Updating YOOtheme Pro": "Atualizando o YOOtheme Pro", "Upload": "Envio", "Upload a background image.": "Carregue uma imagem de fundo.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Faça o upload de um background opcional que cubra a página. Será corrigido durante a rolagem.", "Upload Layout": "Carregar esquema", "Upload Preset": "Carregar predefinição", "Upload Style": "Estilo de upload", "Upsell Products": "Produtos de upsell", "Use a numeric pagination or previous/next links to move between blog pages.": "Use uma paginação numérica ou links anteriores / próximos para mover entre as páginas do blog.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Use uma altura mínima opcional para evitar que as imagens fiquem menores do que o conteúdo em dispositivos pequenos.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Use uma altura mínima opcional para evitar que o controle deslizante fique menor que seu conteúdo em dispositivos pequenos.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Use uma altura mínima opcional para evitar que a apresentação de slides fique menor que seu conteúdo em dispositivos pequenos.", "Use as breakpoint only": "Use como ponto de interrupção apenas", "Use double opt-in.": "Use a opção dupla.", "Use excerpt": "Usar trecho", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Use a cor de fundo em combinação com os modos de mesclagem, uma imagem transparente ou para preencher a área, se a imagem não cobrir toda a seção.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Use a cor de fundo em combinação com os modos de mesclagem, uma imagem transparente ou para preencher a área, se a imagem não cobrir toda a seção.", "Use the background color in combination with blend modes.": "Use a cor de fundo em combinação com os modos de mesclagem.", "User": "Usuário ", "User Group": "Grupo de usuários", "Username": "Nome de usuário", "Users": "Usuários ", "Using Advanced Custom Fields": "Usando campos personalizados avançados", "Using Content Fields": "Usando campos de conteúdo", "Using Content Sources": "Usando fontes de conteúdo", "Using Custom Fields": "Usando campos personalizados", "Using Custom Post Type UI": "Como usar a IU de tipo de postagem personalizada", "Using Custom Post Types": "Usando tipos de postagem personalizados", "Using Custom Sources": "Como usar fontes personalizadas", "Using Elements": "Usando elementos", "Using Images": "Usando imagens", "Using Links": "Usando links", "Using Menu Locations": "Usando locais de menu", "Using Menu Positions": "Usando as posições do menu", "Using Module Positions": "Usando posições do módulo", "Using My Layouts": "Como usar meus layouts", "Using My Presets": "Usando minhas predefinições", "Using Page Sources": "Usando fontes de página", "Using Powerful Posts Per Page": "Usando postagens poderosas por página", "Using Pro Layouts": "Usando layouts profissionais", "Using Pro Presets": "Usando predefinições profissionais", "Using Related Sources": "Usando fontes relacionadas", "Using the Before and After Field Options": "Usando as opções de campo Antes e Depois", "Using the Builder Module": "Usando o Módulo Construtor", "Using the Builder Widget": "Usando o Módulo Construtor", "Using the Categories and Tags Field Options": "Usando as opções de campo Categorias e Tags", "Using the Content Field Options": "Usando as opções do campo de conteúdo", "Using the Content Length Field Option": "Usando a opção de campo Comprimento do conteúdo", "Using the Contextual Help": "Usando a Ajuda Contextual", "Using the Date Format Field Option": "Usando a opção de campo Formato da data", "Using the Device Preview Buttons": "Usando os botões de visualização do dispositivo", "Using the Dropdown Menu": "Usando o menu suspenso", "Using the Footer Builder": "Usando o construtor de rodapé", "Using the Media Manager": "Usando o Gerenciador de Mídia", "Using the Menu Module": "Usando o módulo de menu", "Using the Menu Widget": "Usando o widget de menu", "Using the Meta Field Options": "Usando as opções de campo meta", "Using the Page Builder": "Usando o Construtor de Páginas", "Using the Search and Replace Field Options": "Usando as opções de campo de pesquisa e substituição", "Using the Sidebar": "Usando a barra lateral", "Using the Tags Field Options": "Usando as opções do campo Tags", "Using the Teaser Field Options": "Usando as opções de campo de teaser", "Using the Toolbar": "Usando a barra de ferramentas", "Using the Unsplash Library": "Usando a biblioteca Unsplash", "Using the WooCommerce Builder Elements": "Usando os elementos do WooCommerce Builder", "Using the WooCommerce Page Builder": "Usando o Construtor de Páginas WooCommerce", "Using the WooCommerce Pages Element": "Usando o elemento WooCommerce Pages", "Using the WooCommerce Product Stock Element": "Usando o elemento de estoque de produtos WooCommerce", "Using the WooCommerce Products Element": "Usando o elemento de produtos WooCommerce", "Using the WooCommerce Related and Upsell Products Elements": "Usando os elementos de produtos relacionados e upsell do WooCommerce", "Using the WooCommerce Style Customizer": "Usando o personalizador de estilo WooCommerce", "Using the WooCommerce Template Builder": "Usando o Construtor de Modelos WooCommerce", "Using Toolset": "Usando o conjunto de ferramentas", "Using Widget Areas": "Usando Widget Areas", "Using WooCommerce Dynamic Content": "Usando o conteúdo dinâmico WooCommerce", "Using WordPress Category Order and Taxonomy Terms Order": "Usando a Ordem de Categorias do WordPress e Ordem de Termos de Taxonomia", "Using WordPress Popular Posts": "Usando postagens populares do WordPress", "Using WordPress Post Types Order": "Usando a ordem de tipos de postagem do WordPress", "Value": "Valor", "Values": "Valores", "Variable Product": "Produto Variável", "Velocity": "Velocidade", "Version %version%": "Versão %version%", "Vertical Alignment": "Alinhamento Vertical", "Vertical navigation": "Navegação vertical", "Vertically align the elements in the column.": "Alinhe verticalmente os elementos na coluna.", "Vertically center grid items.": "Centralizar verticalmente as células do grid.", "Vertically center table cells.": "Centralizar verticalmente as células da tabela.", "Vertically center the image.": "Centralize verticalmente a imagem.", "Vertically center the navigation and content.": "Centralizar verticalmente a navegação e o conteúdo.", "Video": "Vídeo", "View Photos": "Ver fotos", "Viewport": "Janela de exibição", "Viewport Height": "Altura da janela de visualização", "Visibility": "Visibilidade", "Visible on this page": "Visível nesta página", "Votes": "Votos", "Website Url": "URL do site", "What's New": "O que há de novo", "When using cover mode, you need to set the text color manually.": "Ao usar o modo de capa, você precisa definir a cor do texto manualmente.", "Whole": "Inteiro (Todo)", "Widget Area": "Área Widget", "Width": "Largura", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Largura e altura serão invertidas em conformidade, se a imagem estiver em formato retrato ou paisagem.", "Width/Height": "Largura/Altura", "Woo Notices": "Avisos Woo", "Woo Pages": "Páginas Woo", "Working with Multiple Authors": "Trabalhando com vários autores", "X-Large (Large Screens)": "Extra-Largo (Telas Grandes)", "Year Archive": "Arquivo do ano", "YOOtheme API Key": "Chave de API do YOOtheme", "YOOtheme Help": "Ajuda do YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "O YOOtheme Pro está totalmente operacional e pronto para decolar.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "O YOOtheme Pro não está operacional. Todos os problemas críticos precisam ser corrigidos.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "O YOOtheme Pro é operacional, mas há problemas que precisam ser corrigidos para desbloquear recursos e melhorar o desempenho.", "Z Index": "Índice Z" }theme/languages/pt_PT.json000064400000174005151666572140011561 0ustar00{ "- Select -": "- Selecione -", "- Select Module -": "- Selecione o Módulo -", "- Select Position -": "- Selecione a posição -", "- Select Widget -": "- Selecione o Widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" já existe na biblioteca, será substituído ao guardar.", "%label% Position": "Posição de %label%", "%name% already exists. Do you really want to rename?": "%name% já existe. Quer mesmo alterar o nome?", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Coleção |||| %smart_count% Coleções", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Elemento |||| %smart_count% Elementos", "%smart_count% File |||| %smart_count% Files": "%smart_count% Ficheiro |||| %smart_count% Ficheiros", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Ficheiro selecionado |||| %smart_count% Ficheiros selecionados", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Esquema |||| %smart_count% Esquemas", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "Falhou o download de %smart_count% ficheiro multimédia: |||| Falhou o download de %smart_count% ficheiros multimedia:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Foto |||| %smart_count% Fotos", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Predefinição |||| %smart_count% Predefinições", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Estilo |||| %smart_count% Estilos", "%smart_count% User |||| %smart_count% Users": "%smart_count% Utilizador |||| %smart_count% Utilizadores", "1 Column Content Width": "Largura de conteúdo 1 coluna", "About": "Sobre", "Accordion": "Acordeão", "Add": "Adicionar", "Add a colon": "Adicionar dois pontos", "Add a leader": "Adicionar um líder", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Adicionar um efeito parallax ou corrigir o pano de fundo em relação à janela de visualização enquanto rolam.", "Add a parallax effect.": "Adicionar efeito parallax.", "Add bottom margin": "Adicionar margem inferior", "Add Element": "Adicionar elemento", "Add extra margin to the button.": "Adicionar margem extra ao botão", "Add Folder": "Adicionar pasta", "Add Item": "Adicionar item", "Add Media": "Adicionar Multimédia", "Add Menu Item": "Adicionar Item de Menu", "Add Module": "Adicionar Módulo", "Add Row": "Adicionar Linha", "Add Section": "Adicionar Secção", "Add text after the content field.": "Adicionar texto depois de campo de conteúdo", "Add text before the content field.": "Adicionar texto antes de campo de conteúdo", "Add top margin": "Adicionar margem superior", "Adding the Logo": "Adicionar Logo", "Adding the Search": "Adicionar Pesquisa", "Adding the Social Icons": "Adicionar Icons de Redes Sociais", "Advanced": "Avançado", "After": "Depois", "After Submit": "Depois de enviar", "Alert": "Alerta", "Align image without padding": "Alinhar a imagem sem espaçamento", "Align the filter controls.": "Alinhar os controlos do filtro", "Align the image to the left or right.": "Alinhar a imagem à esquerda ou à direita.", "Align the image to the top or place it between the title and the content.": "Alinhar a imagem no topo ou colocar entre o título e o conteúdo.", "Align the image to the top, left, right or place it between the title and the content.": "Alinhar a imagem no topo, à esquerda, à direita ou colocar entre o título e o conteúdo.", "Align the meta text.": "Alinhar o meta texto.", "Align the section content vertically, if the section height is larger than the content itself.": "Alinhar verticalmente o conteúdo da secção, se a altura da secção for maior que o próprio conteúdo.", "Align the title and meta text as well as the continue reading button.": "Alinhe o título e o meta texto, assim como o botão continuar a ler.", "Align the title and meta text.": "Alinhar o título e o meta texto", "Align the title to the top or left in regards to the content.": "Alinhar o título no topo ou à esquerda em relação ao conteúdo.", "Alignment": "Alinhamento", "Alignment Breakpoint": "Ponto de quebra do Alinhamento", "Alignment Fallback": "Alinhamento de alternativo", "All backgrounds": "Todos os panos de fundo", "All colors": "Todas as cores", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Todas as imagens estão licenciadas sob a <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> o que significa que pode copiar, modificar, distribuir e usar as imagens gratuitamente, incluíndo uso comercial, sem pedir permissão.", "All Items": "Todos os itens", "All layouts": "Todos os esquemas", "All styles": "Todos os estilos", "All topics": "Todos os tópicos", "All types": "Todos os tipos", "All websites": "Todos os sítios web", "Allow mixed image orientations": "Permitir as orientações de imagem misturadas", "Allow multiple open items": "Permitir vários items abertos", "Animate background only": "Apenas pano de fundo animado", "Animate strokes": "Animar contorno", "Animation": "Animação", "Any Joomla module can be displayed in your custom layout.": "Qualquer módulo Joomla pode ser mostrado no seu esquema personalizado.", "Any WordPress widget can be displayed in your custom layout.": "Qualquer módulo Wordpress pode ser mostrado no seu esquema personalizado.", "API Key": "Chave API", "Apply a margin between the navigation and the slideshow container.": "Aplicar uma margem entre a navegação e o conteúdo do slideshow.", "Apply a margin between the overlay and the image container.": "Aplicar uma margem entre a sobreposição e o local da imagem.", "Apply a margin between the slidenav and the slider container.": "Aplicar uma margem entre a navegação do slide e o seu conteúdo.", "Apply a margin between the slidenav and the slideshow container.": "Aplicar uma margem entre a navegação do slide e o conteúdo do slideshow.", "Articles": "Artigos", "Attach the image to the drop's edge.": "Anexar a imagem à borda.", "Attention! Page has been updated.": "Atenção! A página foi atualizada", "Author": "Autor", "Author Link": "Hiperligação Autor", "Auto-calculated": "Cálculo Automático", "Autoplay": "Reprodução automática", "Back": "Retroceder", "Background Color": "Cor de Fundo", "Before": "Antes", "Behavior": "Comportamento", "Blend Mode": "Modo de Mistura", "Block Alignment": "Alinhamento do bloco", "Blur": "Esborratado", "Border": "Borda", "Bottom": "Rodapé", "Box Decoration": "Decoração da caixa", "Box Shadow": "Sombra da caixa", "Breadcrumbs": "Rasto", "Breakpoint": "Ponto de interrupção", "Builder": "Construtor", "Button": "Botão", "Button Margin": "Margem botão", "Button Size": "Tamanho do Botão", "Buttons": "Botões", "Campaign Monitor API Token": "Token da API do monitor da campanha", "Cancel": "Cancelar", "Center": "Centrar", "Center columns": "Centrar colunas", "Center horizontally": "Centrar horizontalmente", "Center rows": "Centrar linhas", "Center the active slide": "Centrar slide ativo", "Center the content": "Centrar o conteúdo", "Center the module": "Centrar o módulo", "Center the title and meta text": "Centrar o título e o meta texto", "Center the title, meta text and button": "Centrar o título, o meta texto e o botão", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "O alinhamento ao centro, esquerda e direita vai depender de um ponto de interrupção e requer um retorno.", "Changelog": "Registo de Alterações", "Choose a divider style.": "Escolha um estilo de divisão", "Choose a map type.": "Escolher um tipo de mapa", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Escolher entre um efeito parallax dependendo da posição da rodagem ou da animação, que é aplicada quando o slide está ativo.", "Choose Font": "Escolher Fonte", "Choose the icon position.": "Escolher a posição do icon", "Class": "Classe", "Clear Cache": "Limpar a Cache", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Limpar imagens e recursos armazenados em cache. As imagens que precisam de ser redimensionadas são armazenadas na pasta de cache do tema. Depois de voltar a carregar uma imagem com o mesmo nome, terá de limpar a cache.", "Close": "Fechar", "Code": "Código", "Collapsing Layouts": "Esquemas colapsáveis.", "Collections": "Coleções", "Color": "Cor", "Column": "Coluna", "Column 1": "Coluna 1", "Column 2": "Coluna 2", "Column 3": "Coluna 3", "Column 4": "Coluna 4", "Column 5": "Coluna 5", "Columns": "Colunas", "Columns Breakpoint": "Ponto de interrupção das colunas", "Components": "Componentes", "Container Padding": "Espaçamento do conteúdo", "Container Width": "Largura do conteúdo", "Content": "Conteúdo", "content": "conteúdo", "Content Alignment": "Alinhamento do conteúdo", "Content Margin": "Margem do conteúdo", "Content Parallax": "Parallax do conteúdo", "Content Width": "Largura do conteúdo", "Controls": "Controlos", "Cookie Banner": "Alerta de cookies", "Cookie Scripts": "Scripts de cookies", "Copy": "Copiar", "Countdown": "Contagem decrescente", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um esquema geral para este tipo de página. Comece com um novo esquema e escolha a partir de uma coleção de elementos prontos a usar ou pesquise a biblioteca de esquemas e comece com um esquema já pronto.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um esquema para o rodapé de todas as páginas. Comece com um novo esquema e escolha a partir de uma coleção de elementos prontos a usar ou pesquise a biblioteca de esquemas e comece com um esquema já pronto.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um esquema este módulo e publique na posição topo ou rodapé. Comece com um novo esquema e escolha a partir de uma coleção de elementos prontos a usar ou pesquise a biblioteca de esquemas e comece com um esquema já pronto.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um esquema este widget e publique na área de topo ou rodapé. Comece com um novo esquema e escolha a partir de uma coleção de elementos prontos a usar ou pesquise a biblioteca de esquemas e comece com um esquema já pronto.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Crie um esquema individual para a página atual. Comece com um novo esquema e escolha a partir de uma coleção de elementos prontos a usar ou pesquise a biblioteca de esquemas e comece com um esquema já pronto.", "Critical Issues": "Questões críticas", "Critical issues detected.": "Questões críticas detetadas", "Current Layout": "Esquema atual", "Custom Code": "Código personalizado", "Customization": "Customização", "Customization Name": "Nome da customização", "Date": "Data", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Decorar a manchete com um divisor, ponto ou uma linha que é centrada verticalmente para o título.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Decorar o título com um divisor, ponto ou uma linha que é centrada verticalmente para o título.", "Decoration": "Decoração", "Define a unique identifier for the element.": "Definir um único identificador para o elemento.", "Define an alignment fallback for device widths below the breakpoint.": "Definir um retorno de alinhamento para a largura do dispositivo abaixo do ponto de interrupção.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Definir um ou mais nome de classes para o elemento. Separe as várias classes com espaços.", "Define the alignment of the last table column.": "Definir o alinhamento da última coluna da tabela.", "Define the device width from which the alignment will apply.": "Definir a largura do dispositivo a partir da qual o alinhamento será aplicado.", "Define the device width from which the max-width will apply.": "Defina a largura do dispositivo a partir da qual a largura máxima do elemento será aplicada.", "Define the layout of the form.": "Definir um esquema para o formulário.", "Define the layout of the title, meta and content.": "Definir um esquema para o título, meta e conteúdo.", "Define the order of the table cells.": "Definir a ordem das células das tabela.", "Define the padding between table rows.": "Definir um espaçamento entre as linhas da tabela.", "Define the width of the content cell.": "Definir uma largura do conteúdo da célula.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Defina a largura da navegação do filtro. Escolha entre as percentagens e as larguras fixas ou as colunas expandidas para a largura de seu conteúdo.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definir uma largura da imagem dentro da grelha. Escolha entre percentagem e larguras fixas ou expanda as colunas até à largura do seu conteúdo.", "Define the width of the meta cell.": "Definir uma largura do meta da célula.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definir uma largura para a navegação. Escolha entre percentagem e larguras fixas ou expanda as colunas até à largura do seu conteúdo.", "Define the width of the title cell.": "Definir uma largura do título da célula.", "Define the width of the title within the grid.": "Definir uma largura do título dentro da grelha.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Defina se a largura dos itens do slider é fixa ou expandida automaticamente pelas larguras de conteúdo.", "Delete": "Apagar", "Description List": "Lista de descrição", "Desktop": "Área de trabalho", "Determine how the image or video will blend with the background color.": "Determinar como a imagem ou o vídeo se misturarão com a cor de fundo.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Determinar se a imagem se encaixará nas dimensões da secção, cortando-a ou preenchendo as áreas vazias com a cor de fundo.", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Desative a reprodução automática, inicie a reprodução automaticamente imediatamente ou assim que o vídeo entrar na janela de exibição.", "Disable element": "Desativar elemento", "Disable infinite scrolling": "Desativar rolagem infinita", "Disable row": "Desativar linha", "Disable section": "Desativar seção", "Disable wpautop": "Desativar wpautop", "Discard": "Descartar", "Display": "Mostrar", "Display a divider between sidebar and content": "Mostrar um divisor entre a barra lateral e o conteúdo.", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Mostrar um menu selecionando na posição onde ele deve aparecer. Por exemplo, publique o menu principal na posição navbar e um menu alternativo na posição móvel.", "Display header outside the container": "Mostar o cabeçalho fora do conteúdo", "Display icons as buttons": "Mostrar ícones como botões.", "Display on the right": "Mostrar à direita.", "Display overlay on hover": "Mostrar sobreposição ao passar", "Display the breadcrumb navigation": "Mostrar no rasto de navegação.", "Display the content inside the overlay, as the lightbox caption or both.": "Mostrar o conteúdo dentro da sobreposição, como a legenda da lightbox ou ambas.", "Display the content inside the panel, as the lightbox caption or both.": "Mostrar o conteúdo dentro do painel, como a legenda da lightbox ou ambas.", "Display the first letter of the paragraph as a large initial.": "Mostrar a primeira letra do parágrafo como uma inicial grande.", "Display the image only on this device width and larger.": "Mostrar a imagem somente nesta largura do dispositivo e maior.", "Display the meta text in a sentence or a horizontal list.": "Mostrar o meta texto numa frase ou numa lista horizontal", "Display the module only from this device width and larger.": "Mostrar o módulo somente nesta largura do dispositivo e maior.", "Display the navigation only on this device width and larger.": "Mostrar a imagem somente nesta largura do dispositivo e maior.", "Display the parallax effect only on this device width and larger.": "Mostrar o elemento somente nesta largura do dispositivo e maior.", "Display the popover on click or hover.": "Mostrar popover quando clicar ou passar.", "Display the slidenav only on this device width and larger.": "Mostrar a navegação do slide somente nesta largura do dispositivo e maior.", "Display the title inside the overlay, as the lightbox caption or both.": "Mostrar o título dentro da sobreposição, como a legenda da lightbox ou ambas.", "Display the title inside the panel, as the lightbox caption or both.": "Mostrar o título dentro do painel, como a legenda da lightbox ou ambas.", "Divider": "Divisor", "Do you really want to replace the current layout?": "Tem a certeza que quer substituir o layout atual?", "Do you really want to replace the current style?": "Tem a certeza que quer substituir o estilo atual?", "Documentation": "Documentação", "Double opt-in": "Duplo opt-in", "Download": "Descarregar", "Drop Cap": "Capitular", "Dropdown": "Menu suspenso", "Edit": "Editar", "Edit %title% %index%": "Editar %title% %index%", "Edit Items": "Editar itens", "Edit Layout": "Editar Esquema", "Edit Menu Item": "Editar item de menu", "Edit Module": "Editar módulo", "Edit Settings": "Editar definições", "Enable autoplay": "Ativar reprodução automática", "Enable drop cap": "Ativar capitular", "Enable filter navigation": "Ativar filtro de navegação", "Enable lightbox gallery": "Ativar lightbox da galeria", "Enable map dragging": "Ativar arrastamento do mapa", "Enable map zooming": "Ativar ampliação do mapa", "Enable masonry effect": "Ativar efeito masonry", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Inserir uma vírgula a separar a lista de etiquetas, por exemplo, <code>blue, white, black</code>.", "Enter a subtitle that will be displayed beneath the nav item.": "Inserir um subtítulo que será exibido abaixo do item de navegação.", "Enter a table header text for the content column.": "Escreva um texto de cabeçalho da tabela para a coluna do conteúdo.", "Enter a table header text for the image column.": "Escreva um texto de cabeçalho da tabela para a coluna da imagem.", "Enter a table header text for the link column.": "Escreva um texto de cabeçalho da tabela para a coluna da hiperligação.", "Enter a table header text for the meta column.": "Escreva um texto de cabeçalho da tabela para a coluna da meta .", "Enter a table header text for the title column.": "Escreva um texto de cabeçalho da tabela para a coluna do título.", "Enter a width for the popover in pixels.": "Inserir a largura para o popover em pixel.", "Enter an optional footer text.": "Inserir um texto opcional no rodapé.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Inserir um texto opcional para o título do atributo da hiperligação, que será exibido ao passar o cursor.", "Enter labels for the countdown time.": "Definir rótulos para o contador do tempo.", "Enter or pick a link, an image or a video file.": "Escreva ou escolha uma hiperligação, uma imagem ou um ficheiro de vídeo.", "Enter the text for the link.": "Inserir o texto para a hiperligação.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Definir o seu <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID para iniciar o seguimento. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">Anonimatização do IP </a> pode reduzir a precisão do seguimento.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Inserir a sua chave API do <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> para usar o Google Maps em vez do OpenStreetMap. Assim também lhe permite opções adicionais para o estilo das cores dos seus mapas.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Inserir a sua chave API do <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Monitor de campanha</a> para usá-la no elemento de boletim de notícias.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-footer</code>,<code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-image</code>,<code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-input</code>,<code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-item</code>,<code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-item</code>,<code>.el-content</code><code>.el-image</code>,<code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-item</code>,<code>.el-content</code><code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-item</code>,<code>.el-nav</code><code>.el-title</code>,<code>.el-meta</code>,<code>.el-content</code>,<code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-item</code>,<code>.el-title</code><code>.el-content</code>,<code>.el-image</code>,<code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Escreva o seu código CSS personalizado. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>,<code>.el-item</code>,<code>.el-title</code><code>.el-meta</code>,<code>.el-content</code>,<code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento:<code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento:<code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento:<code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Inserir o seu próprio CSS. Os seguintes seletores serão prefixados automaticamente para este elemento:<code>.el-section</code>", "Error: %error%": "Erro: %error%", "Expand width to table cell": "Expandir a largura da célula da tabela", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Exporte todas as definições do tema e importe-as em outra instalação. Isto não inclui o conteúdo das bibliotecas de esquema, estilo ou elementos ou do construtor de modelos.", "Extend all content items to the same height.": "Estender todos os itens de conteúdo para a mesma altura.", "Extra Margin": "Margem extra", "Files": "Ficheiros", "Filter": "Filtro", "Finite": "Finito", "First name": "Primeiro nome", "Fix the background with regard to the viewport.": "Corrigir a largura do fundo em relação à janela de visualização.", "Fixed-Inner": "Corrigido por dentro", "Fixed-Left": "Corrigido à esquerda", "Fixed-Outer": "Corrigido por fora", "Fixed-Right": "Corrigido à direita", "Folder Name": "Nome da pasta", "Footer": "Rodapé", "Form": "Formulário", "Full width button": "Largura total do botão", "Gallery": "Galeria", "General": "Geral", "Gradient": "Gradiente", "Grid": "Grelha", "Grid Breakpoint": "Ponto de interrupção da grellha", "Grid Width": "Largura da grelha", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Agrupar itens em conjuntos. O número de itens dentro de um conjunto depende da largura do item definido, por ex. <i>33%</i> significa que cada conjunto contém 3 itens.", "Halves": "Metades", "Header": "Cabeçalho", "Headline": "Título", "Height": "Altura", "Hide marker": "Ocultar marcador", "Highlight the hovered row": "Realçar a linha focada", "Home": "Início", "Horizontal Center": "Centro horizontal", "Horizontal Left": "Esquerda horizontal", "Horizontal Right": "Direita horizontal", "Hover Box Shadow": "Caixa de sombra ao passar", "Hover Image": "Imagem ao passar", "HTML Element": "Elemento HTML", "Hue": "Matiz", "Icon": "Ícone", "Icon Color": "Cor do ícone", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Se estiver a criar um site multilingue, não selecione um menu específico aqui. Em vez disso, use o gestor de módulos do joomla para publicar o menu correto dependendo da língua atual.", "Image": "Imagem", "Image Alignment": "Alinhamento da imagem", "Image Alt": "Nome da imagem", "Image Attachment": "Anexo da imagem", "Image Box Shadow": "Caixa de sombra da imagem", "Image Effect": "Efeito de imagem", "Image Height": "Altura da imagem", "Image Orientation": "Orientação da imagem", "Image Position": "Posição da imagem", "Image Size": "Tamanho da imagem", "Image Width": "Largura da imagem", "Image Width/Height": "Largura/Altura da imagem", "Image/Video": "Imagem/Vídeo", "Inline SVG": "SVG em linha", "Insert at the bottom": "Inserir na parte inferior", "Insert at the top": "Inserir no topo", "Inset": "Inserção", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Em vez de usar uma imagem personalizada, pode clicar no lápis para escolher um ícone da biblioteca de ícones.", "Inverse Logo (Optional)": "Logótipo invertido (Opcional)", "Inverse the text color on hover": "Inverter a cor do texto ao passar", "Invert lightness": "Inverter luminosidade", "IP Anonymization": "IP Anónimo", "Item Width": "Largura do item", "Item Width Mode": "Modo da largura do item", "Items": "Itens", "Ken Burns Effect": "Efeito Ken Burns", "l": "l\n \n", "Label Margin": "Margem do rótulo", "Labels": "Rótulos", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "As imagens de paisagem e retrato estão centradas nas células da grelha. A largura e altura serão invertidas quando as imagens forem redimensionadas.", "Large (Desktop)": "Largo (Área de trabalho)", "Large Screens": "Ecrãs grandes", "Larger padding": "Espaçamento largo", "Larger style": "Estilo largo", "Last Column Alignment": "Alinhamento da última coluna", "Last name": "Último nome", "Layout": "Esquema", "Layout Media Files": "Ficheiros de multimedia do Esquema", "Lazy load video": "Carregar vídeo lentamente", "Left": "Esquerda", "Library": "Biblioteca", "Lightness": "Luminosidade", "Link": "Ligação", "Link Parallax": "Ligação parallax", "Link Style": "Estilo da ligação", "Link Target": "Alvo da hiperligação", "Link Text": "Texto da ligação", "Link Title": "Título da ligação", "Link to redirect to after submit.": "Ligação para redireccionar depois de enviar.", "List": "Lista", "List Style": "Estilo da lista", "Load jQuery": "Carregar jQuery", "Loading Layouts": "A carregar Esquemas", "Location": "Localização", "Logo Image": "Imagem do logótipo", "Logo Text": "Texto do logótipo", "Loop video": "Vídeo em loop", "Mailchimp API Token": "Token da API do Mailchimp", "Main styles": "Estilos principais", "Map": "Mapa", "Margin": "Margem", "Marker": "Marcador", "Match content height": "Corresponder altura do conteúdo", "Match height": "Corresponder altura", "Match Height": "Corresponder altura", "Max Height": "Altura máxima", "Max Width": "Largura máxima", "Max Width (Alignment)": "Largura máxima (Alinhamento)", "Max Width Breakpoint": "Largura máxima do ponto de interrupção", "Medium (Tablet Landscape)": "Médio (Aspecto de tablet)", "Menu Style": "Estilo do menu", "Message": "Mensagem", "Message shown to the user after submit.": "Mensagem a mostrar ao utilizador depois de enviar.", "Meta Alignment": "Alinhamento do Meta", "Meta Margin": "Margem do Meta", "Meta Style": "Estilo da Meta", "Meta Width": "Largura do meta", "Min Height": "Altura mínima", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Tenha em conta que um modelo com um esquema geral está atribuído à página atual. Edite o modelo para atualizar este esqeuma.", "Mobile": "Móvel", "Mobile Logo (Optional)": "Logótipo móvel (Opcional)", "Mode": "Modo", "Module": "Módulo", "Move the sidebar to the left of the content": "Mover a barra lateral para a esquerda do conteúdo", "Mute video": "Silenciar vídeo", "Name": "Nome", "Navbar": "Barra de navegação", "Navigation": "Navegação", "Navigation Label": "Etiqueta da navegação", "Navigation Thumbnail": "Miniatura de Navegação", "New Layout": "Novo layout", "New Menu Item": "Novo item de menu", "New Module": "Novo módulo", "Newsletter": "Boletim informativo", "Next-Gen Images": "Imagens Next-Gen", "No files found.": "Ficheiros não encontrados.", "No font found. Press enter if you are adding a custom font.": "Fonte não encontrada. Pressione Enter se deseja adicionar uma fonte personalizada.", "No layout found.": "Esquema não encontrado.", "No Results": "Sem resultados.", "No results.": "Sem resultados.", "Offcanvas Mode": "Modo offcanvas", "Only available for Google Maps.": "Apenas disponível para Google Maps.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Apenas páginas e artigos únicos podem ter esquemas individuais. Utilize um modelo para aplicar um esquema geral a este tipo de página.", "Open in a new window": "Abrir numa janela nova", "Open the link in a new window": "Abrir ligação numa nova janela.", "Options": "Opções", "Order": "Ordem", "Outside Breakpoint": "Ponto de interrupção externo", "Outside Color": "Cor externa", "Overlap the following section": "Sobreponha a seguinte secção", "Overlay": "Sobreposição", "Overlay Color": "Cor de sobreposição", "Overlay Parallax": "Opacidade parallax", "Overlay the site": "Sobrepor o sítio", "Padding": "Espaçamento", "Panel": "Painel", "Panels": "Painéis", "Parallax Breakpoint": "Ponto de interrupção do parallax", "Pause autoplay on hover": "Pausar reprodução automática ao passar", "Phone Landscape": "Ambiente de telefone", "Phone Portrait": "Retrato de telefone", "Photos": "Fotos", "Pick link": "Escolha o link", "Placeholder Image": "Imagem do marcador de posição", "Play inline on mobile devices": "Reproduzir em linha em dispositivos móveis", "Position": "Posição", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Posicione a navegação na parte superior, inferior, esquerda ou direita. Um estilo maior pode ser aplicado às navegações à esquerda e direita.", "Poster Frame": "Quadro do cartaz", "Preview all UI components": "Pré-visualizar todos os elementos UI", "Primary navigation": "Navegação primária", "Provider": "Provedor", "Pull content behind header": "Puxar conteúdo abaixo da barra de navegação", "Quarters": "Quartos", "Quarters 1-1-2": "Quartos 1-1-2", "Quarters 1-2-1": "Quartos 1-2-1", "Quarters 1-3": "Quartos 1-3", "Quarters 2-1-1": "Quartos 2-1-1", "Quarters 3-1": "Quartos 3-1", "Quotation": "Cotação", "Remove bottom margin": "Remover margem abaixo", "Remove bottom padding": "Remover espaçamento inferior", "Remove left and right padding": "Remover o espaçamento da esquerda e direita", "Remove left logo padding": "Remover o espaçamento esquerdo do logo", "Remove Media Files": "Remover ficheiros multimédia", "Remove top margin": "Remover margem superior", "Remove top padding": "Remover espaçamento superior", "Reset": "Repor", "Reset to defaults": "Restaurar para o padrão", "Responsive": "Responsivo", "Rotate the title 90 degrees clockwise or counterclockwise.": "Rodar o título 90 graus no sentido dos ponteiros do relógio ou no sentido contrário.", "Rotation": "Rotação", "Row": "Linha", "Saturation": "Saturação", "Save": "Guardar", "Save %type%": "Guardar %type%", "Save Layout": "Guardar esquema", "Search": "Pesquisa", "Search Style": "Estilo de pesquisa", "Section": "Secção", "Select": "Selecionar", "Select %type%": "Selecionar %type%", "Select a card style.": "Selecionar o estilo do cartão.", "Select a different position for this item.": "Selecionar uma posição diferente para este item.", "Select a grid layout": "Selecionar o esquema da grelha.", "Select a predefined meta text style, including color, size and font-family.": "Selecionar o estilo predefinido para o meta texto, incluindo cor, tamanho e a família da fonte.", "Select a predefined text style, including color, size and font-family.": "Selecionar o estilo do texto predefinido, incluindo cor, tamanho e a família da fonte.", "Select a style for the overlay.": "Selecionar o estilo para a sobreposição.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Selecionar o ficheiro de vídeo ou escrever uma ligação do <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> ou <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Selecionar um logótipo alternativo com cor inversa, por exemplo, branco para melhor visibilidade em fundos escuros. Ele será exibido automaticamente, se for necessário.", "Select an alternative logo, which will be used on small devices.": "Selecionar um logótipo alternativo, caso seja usado em dispositivos pequenos.", "Select an animation that will be applied to the content items when toggling between them.": "Selecionar uma animação que será aplicada aos itens de conteúdo ao alternar entre eles.", "Select an image transition.": "Selecionar uma transição de imagem.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Selecionar uma transição de imagem. Se uma segunda imagem estiver definida, a transição ocorrerá entre as duas imagens. Se <i>None</i> estiver selecionado, a segunda imagem desaparece.", "Select an optional image that appears on hover.": "Selecionar uma segunda imagem opcional para aparecer ao passar.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Selecionar uma imagem opcional para apresentar até o vídeo ser reproduzido. Se não for selecionada, a primeira imagem do vídeo será usada como imagem de apresentação.", "Select header layout": "Selecionar esquema do cabeçalho", "Select Image": "Selecionar imagem", "Select one of the boxed card or tile styles or a blank panel.": "Selecionar um dos estilos de cartão em caixa ou um painel em branco.", "Select the content position.": "Selecionar a posição do conteúdo.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Escolher o estilo da navegação. Os estilos de linha só estão disponíveis para subnavegações horizontais.", "Select the link style.": "Selecionar o estilo da ligação.", "Select the list style.": "Selecionar o estilo da lista.", "Select the list to subscribe to.": "Selecionar também a lista a subscrever.", "Select the navigation type.": "Selecionar o tipo de navegação.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Selecionar o estilo da navegação. Os estilos de linha só estão disponíveis para subnavegações horizontais.", "Select the overlay or content position.": "Selecionar a sobreposição ou a posição do conteúdo.", "Select the position of the navigation.": "Selecionar a posição da navegação.", "Select the position of the slidenav.": "Selecionar a posição da navegação do slide.", "Select the position that will display the search.": "Selecionar a posição onde será exibida a pesquisa.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Selecionar a posição onde serão apresentados os ícones sociais. Certifique-se que adiciona as ligações dos perfis sociais ou nenhum ícone pode ser exibido.", "Select the search style.": "Selecionar o estilo da pesquisa.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Selecionar o estilo do destaque da sintaxe do código. Use o GitHub para claro e Monokai para fundos escuros.", "Select the style for the overlay.": "Selecionar o estilo para a sobreposição.", "Select the subnav style.": "Selecionar o estilo da sob navegação.", "Select the table style.": "Selecionar o estilo de tabela.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Selecionar a cor do texto. Se a opção de plano de fundo estiver selecionada, os estilos que não aplicam uma imagem de fundo usam a cor principal.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Selecionar a cor do texto. Se a opção de plano de fundo estiver selecionada, os estilos que não aplicam uma imagem de fundo usam a cor principal.", "Select the title style and add an optional colon at the end of the title.": "Selecionar o estilo do título e adicionar dois pontos adicionais no fim do título.", "Select the transformation origin for the Ken Burns animation.": "Selecionar a transformação original para a animação Ken Burns.", "Select the transition between two slides.": "Selecionar a transição entre dois slides.", "Select whether a button or a clickable icon inside the email input is shown.": "Selecione se um botão ou um ícone clicável dentro da entrada de e-mail são mostrados.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Selecionar se uma mensagem deve ser exibida ou um redirecionamento depois de clicar no botão de inscrição.", "Serve WebP images": "Usar imagens WebP", "Set a different link text for this item.": "Definir um texto de ligação diferente para este item.", "Set a different text color for this item.": "Definir uma cor de texto diferente para este item.", "Set a fixed width.": "Definir uma largura fixa.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Definir a largura da barra lateral em percentagem e a coluna do conteúdo se ajustará de acordo. A largura não vai abaixo da largura mínima da barra lateral, que você pode definir na secção Estilo.", "Set an additional transparent overlay to soften the image or video.": "Definir uma sobreposição transparente adicional para suavizar a imagem ou o vídeo.", "Set how the module should align when the container is larger than its max-width.": "Definir como o módulo deve alinhar-se quando o recetor é maior do que a sua largura máxima.", "Set light or dark color if the navigation is below the slideshow.": "Definir uma cor clara ou escura se a navegação estiver abaixo do slideshow.", "Set light or dark color if the slidenav is outside.": "Definir uma cor clara ou escura se a navegação do slide estiver fora do slideshow.", "Set light or dark color mode for text, buttons and controls.": "Definir o modo de cor claro ou escuro para o texto, botões e controlos.", "Set light or dark color mode.": "Definir modo de cor clara ou escura.", "Set percentage change in lightness (Between -100 and 100).": "Defina uma variação de percentagem para a luminosidade (Entre -100 e 100).", "Set percentage change in saturation (Between -100 and 100).": "Defina uma variação de percentagem para a saturação (Entre -100 e 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Defina a variação de percentagem na quantidade de correção gama (entre 0,01 e 10,0, onde 1,0 não se aplica correção).", "Set the autoplay interval in seconds.": "Definir o intervalo da reprodução automática em segundos.", "Set the breakpoint from which grid items will stack.": "Defina o ponto de interrupção a partir do qual as células da grelha serão empilhadas.", "Set the breakpoint from which the sidebar and content will stack.": "Defina o ponto de interrupção a partir do qual a barra lateral e o conteúdo serão empilhados.", "Set the button size.": "Definir o tamanho do botão.", "Set the button style.": "Definir o estilo do botão.", "Set the duration for the Ken Burns effect in seconds.": "Definir a duração para a animação Ken Burns em segundos.", "Set the icon color.": "Definir a cor do ícone.", "Set the initial background position, relative to the section layer.": "Definir a posição inicial do fundo, em relação à camada da secção.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Definir a resolução inicial para mostrar o mapa. 0 está totalmente afastado e 18 está aproximado em alta definição.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Definir a largura do item para cada ponto de interrupção. <i>Herdar</i> refere-se à largura do item do próximo tamanho de tela menor.", "Set the link style.": "Definir o estilo da ligação.", "Set the margin between the countdown and the label text.": "Definir uma margem entre o contador e o rótulo do texto.", "Set the margin between the overlay and the slideshow container.": "Definir a margem entre a sobreposição e o conteúdo do slideshow.", "Set the maximum content width.": "Definir a largura máxima do conteúdo.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Definir a largura máxima do conteúdo. Nota: A secção está com a largura máxima do conteúdo, não poderá ser excedida.", "Set the maximum height.": "Definir a altura máxima", "Set the maximum width.": "Defina a largura máxima.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Definir o número de colunas de grelha para cada ponto de interrupção. <i>Inherit</i> refere-se ao número de colunas no próximo tamanho de tela menor.", "Set the padding between sidebar and content.": "Definir o espaçamento entre a barra lateral e o conteúdo.", "Set the padding between the overlay and its content.": "Definir um espaçamento entre a sobreposição e o seu conteúdo.", "Set the padding.": "Definir espaçamento.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Definir um rácio Recomenda-se usar a mesma proporção da imagem de fundo. Apenas use a largura e altura, como <code>1600:900</code>.", "Set the top margin.": "Configurações no Joomla.", "Set the velocity in pixels per millisecond.": "Definir a velocidade em pixels por milésimo de segundo.", "Set the vertical container padding to position the overlay.": "Definir o preenchimento vertical do conteúdo para posicionar a sobreposição.", "Set the vertical margin.": "Definir a margem vertical.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Definir uma margem vertical. Nota: A margem superior do primeiro elemento e a margem inferior do último elemento serão sempre removidas. Defina as configurações da grelha em vez disso.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Definir uma margem vertical. Nota: A margem superior do primeiro grelha e a margem inferior da última grelha serão sempre removidas. Defina as configurações da secção em vez disso.", "Set the vertical padding.": "Definir o espaçamento vertical.", "Set the video dimensions.": "Definir as dimensões do vídeo.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Definir a largura e altura em pixeis (por exemplo 600). Definir apenas um valor a preservar das proporções originais. A imagem será redimensionada e cortada automaticamente.", "Sets": "Conjuntos", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Definindo apenas um valor, preserva as proporções originais. A imagem será redimensionada e cortada automaticamente e onde possível, imagens de grande resolução serão geradas automaticamente.", "Settings": "Configurações", "Show author": "Mostrar autor", "Show below slideshow": "Mostrar slideshow antes", "Show button": "Mostrar botão", "Show Content": "Mostrar conteúdo", "Show controls": "Mostrar controles", "Show dividers": "Mostrar divisores", "Show filter control for all items": "Mostrar controlo de filtro para todos os itens", "Show hover effect if linked.": "Mostrar efeito ao passar quando vinculado.", "Show Labels": "Mostrar rótulos", "Show map controls": "Mostrar os controlos do mapa", "Show name fields": "Mostrar nome dos campos", "Show on hover only": "Mostrar apenas ao passar por cima", "Show or hide content fields without the need to delete the content itself.": "Mostrar ou ocultar campos de conteúdo sem a necessidade de excluir o próprio conteúdo.", "Show popup on load": "Mostrar popup ao carregar", "Show Separators": "Mostrar separadores", "Show the content": "Mostrar conteúdo", "Show the image": "Mostrar imagem", "Show the link": "Mostrar ligação", "Show the menu text next to the icon": "Mostrar texto do menu a seguir ao ícone", "Show the meta text": "Mostrar meta texto", "Show the navigation label instead of title": "Mostrar a etiqueta de navegação em vez do título", "Show the navigation thumbnail instead of the image": "Mostrar a miniatura da navegação em vez da imagem", "Show the title": "Mostrar o título", "Show title": "Mostrar título", "Show Title": "Mostrar título", "Sidebar": "Barra lateral", "Site": "Sítio", "Size": "Tamanho", "Slide all visible items at once": "Apresentar todos os itens visíveis de uma só vez", "Slidenav": "Navegação do slide", "Small (Phone Landscape)": "Pequeno (Ambiente de telefone)", "Social Icons": "Ícones sociais", "Split the dropdown into columns.": "Dividir menu suspenso em colunas.", "Spread": "Espalhar", "Stack columns on small devices or enable overflow scroll for the container.": "Colunas em pilha em dispositivos pequenos ou ativar rolagem do recipiente.", "Stacked Center A": "Empilhado Centro A", "Stacked Center B": "Empilhado Centro B", "Stretch the panel to match the height of the grid cell.": "Esticar o painel para igualar a altura da célula de grelha.", "Style": "Estilo", "Subnav": "Subnavegação", "Subtitle": "Subtítulo", "Switcher": "Interruptor", "Syntax Highlighting": "Destaque de sintaxe", "Table": "Tabela", "Table Head": "Cabeça da tabela", "Tablet Landscape": "Tablet Paisagem", "Tags": "Etiquetas", "Text": "Texto", "Text Alignment": "Alinhamento do texto", "Text Alignment Breakpoint": "Ponto de interrupção do alinhamento do texto", "Text Alignment Fallback": "Retorno de alinhamento do texto", "Text Color": "Cor Texto", "Text Style": "Estilo Texto", "The changes you made will be lost if you navigate away from this page.": "As alterações que realizou serão perdidas se navegar para fora desta página.", "The width of the grid column that contains the module.": "A largura da coluna de grelha que contém este módulo.", "Thirds": "Terços", "Thirds 1-2": "Terços 1-2", "Thirds 2-1": "Terços 2-1", "This is only used, if the thumbnail navigation is set.": "Isto só é usado, se for definido uma miniatura para a navegação.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Este esquema inclui um ficheiro de media que precisa de ser descarregado na biblioteca de media do seu site. |||| Este esquema inclui %smart_count% ficheiros de media que precisa de ser descarregado na biblioteca de media do seu site.", "This option doesn't apply unless a URL has been added to the item.": "Esta opção não se aplica a menos que um URL tenha sido adicionado ao item.", "This option is only used if the thumbnail navigation is set.": "Esta opção é apenas usada se a miniatura da navegação for definida.", "Thumbnail Width/Height": "Largura/Altura da miniatura", "Thumbnails": "Miniaturas", "Title": "Título", "title": "título", "Title Decoration": "Decoração do Título", "Title Parallax": "Titulo parallax", "Title Style": "Estilo Título", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Os estilos de título diferem no tamanho da fonte, mas também podem vir com uma cor, tamanho e fonte predefinidos.", "Title Width": "Largura do título", "To Top": "Para to topo", "Toolbar": "Barra de ferramentas", "Top": "Topo", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Imagens superiores, à esquerda ou à direita podem ser anexadas à borda do cartão. Se a imagem estiver alinhada à esquerda ou à direita, ela também se estenderá para cobrir todo o espaço.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Imagens superiores, à esquerda ou à direita podem ser anexadas à borda do cartão. Se a imagem estiver alinhada à esquerda ou à direita, ela também se estenderá para cobrir todo o espaço.", "Transition": "Transição", "Transparent Header": "Cabeçalho Transparente", "Type": "Tipo", "Upload": "Carregue", "Upload a background image.": "Carregue uma imagem de fundo.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Carregue um fundo optional que cubra a página. Ficará fixo ao deslizar o conteúdo.", "Use double opt-in.": "Usar duplo opt-in.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Use a cor de fundo em combinação com os modos de mistura ou uma imagem transparente para preencher a área, se a imagem não cobrir toda a secção.", "Use the background color in combination with blend modes.": "Usar uma cor de fundo em combinação com os modos de mistura.", "Users": "Utilizadores", "Velocity": "Velocidade", "Version %version%": "Versão %version%", "Vertical Alignment": "Alinhamento Vertical", "Vertical navigation": "Navegação vertical", "Vertically center table cells.": "Centrar verticalmente a navegação e o conteúdo.", "Vertically center the navigation and content.": "Centrar verticalmente a navegação e o conteúdo.", "Video": "Vídeo", "View Photos": "Ver fotos", "Visibility": "Visibilidade", "Visible on this page": "Visível nesta página", "When using cover mode, you need to set the text color manually.": "Ao usar o modo de cobertura, você precisa definir a cor do texto manualmente.", "Whole": "Todo", "Width": "Largura", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Largura e altura serão invertidas em conformidade, se a imagem estiver em formato retrato ou paisagem.", "Width/Height": "Largura/Altura", "X-Large (Large Screens)": "X-Large (Ecrãs Largos)", "Zoom": "Ampliar" }theme/languages/da_DK.json000064400000555445151666572150011511 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Vælg -", "- Select Module -": "- Vælg modul -", "- Select Position -": "- Vælg position -", "- Select Widget -": "- Vælg widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" eksisterer allerede i biblioteket. Den vil blive overskrevet når der gemmes.", "(ID %id%)": "(ID %id%)", "%element% Element": "%element% element", "%label% - %group%": "%label% - %group%", "%label% Location": "%label% placering", "%label% Position": "%label% position", "%name% already exists. Do you really want to rename?": "%name% eksisterer allerede. Ønsker du virkelig at omdøbe?", "%post_type% Archive": "%post_type% arkiv", "%s is already a list member.": "%s er allerede et liste medlem.", "%s of %s": "%s ud af %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s blev permanent slettet og kan ikke gen-importeres. Kontakten skal gen-abonnere for at komme tilbage på listen.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% samling |||| %smart_count% samlinger", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% element |||| %smart_count% elementer", "%smart_count% File |||| %smart_count% Files": "%smart_count% fil |||| %smart_count% filer", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% fil valgt |||| %smart_count% filer valgt", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% ikon |||| %smart_count% ikoner", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% layout |||| %smart_count% layouts", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% medie fil download fejlede: |||| %smart_count% medie fil downloads fejlede:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% foto |||| %smart_count% fotos", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% presæt |||| %smart_count% presæts", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% stil |||| %smart_count% stile", "%smart_count% User |||| %smart_count% Users": "%smart_count% bruger |||| %smart_count% brugere", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% bliver kun indlæst fra den valgte overordnede %taxonomy%.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% presæts", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 kolonne", "1 Column Content Width": "1 kolonne indholdsbredde", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Column Grid": "2 kolonne gitter", "2 Column Grid (Meta only)": "2 kolonne gitter (kun meta)", "2 Columns": "2 kolonner", "20%": "20%", "25%": "25%", "2X-Large": "2X-Large", "3 Columns": "3 kolonner", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "4 Columns": "4 kolonner", "40%": "40%", "5 Columns": "5 kolonner", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 Aug, 1999 (j M, Y)", "6 Columns": "6 kolonner", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "About": "Om", "Above Content": "Over indhold", "Above Title": "Over titel", "Absolute": "Absolut", "Accessed": "Tilgået", "Accordion": "Akkordeon", "Active": "Aktiv", "Active item": "Aktivt element", "Add": "Tilføj", "Add a colon": "Tilføj en kolonne", "Add a leader": "Tilføj en leder", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Tilføj en parallax effekt eller sæt baggrunden fast i forhold til visningsområdet, når der scrolles.", "Add a parallax effect.": "Tilføj en parallax effekt.", "Add animation stop": "Tilføj animationsstop", "Add bottom margin": "Tilføj bund margin", "Add clipping offset": "Tilføj beskæringsoffset", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Tilføj brugerdefineret CSS eller Less til dit websted. Alle Less temavariablet og mixins er tilgængelige. <code><style></code> tagget behøves ikke.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Tilføj dit eget javascript til dit websted. Du behøver ikke at anvende <script> tagget.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Tilføj brugerdefineret JavaScript som sætter cookies. Det vil blive indlæst efter at samtykke er afgivet. <code><script></code> tagget behøves ikke.", "Add Element": "Tilføj element", "Add extra margin to the button.": "Tilføj ekstra margin til bunden.", "Add Folder": "Tilføj mappe", "Add Item": "Tilføj element", "Add margin between": "Tilføj margin i mellem", "Add Media": "Tilføj medie", "Add Menu Item": "Tilføj menupunkt", "Add Module": "Tilføj modul", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Tilføj multiple stop for at definere start, mellem og slutfarver igennem animationssekvensen. Angiv eventuelt procentsatser for at placere stoppene i løbet af animationssekvensen.", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Tilføj multiple stop for at definere start-, mellem- og slutgennemsigtighed igennem animationssekvensen. Angiv eventuelt en procentsats der angiver hvor i animationssekvensen at stoppene skal placeres.", "Add Row": "Tilføj række", "Add Section": "Tilføj sektion", "Add text after the content field.": "Tilføj tekst efter indholdsfeltet.", "Add text before the content field.": "Tilføj tekst inden indholdsfeltet.", "Add to Cart": "Tilføj til kurv", "Add to Cart Link": "Tilføj til kurv link", "Add to Cart Text": "Tilføj til kurv tekst", "Add top margin": "Tilføj top margin", "Adding a New Page": "Tilføj en ny side", "Adding the Logo": "Tilføjer logoet", "Adding the Search": "Tilføjer søg", "Adding the Social Icons": "Tilføjer sociale ikoner", "Additional Information": "Yderligere information", "Address": "Adresse", "Advanced": "Avanceret", "Advanced WooCommerce Integration": "Avanceret WooCommerce integration", "After": "Efter", "After 1 Item": "Efter 1 element", "After 10 Items": "Efter 10 elementer", "After 2 Items": "Efter 2 elementer", "After 3 Items": "Efter 3 elementer", "After 4 Items": "Efter 4 elementer", "After 5 Items": "Efter 5 elementer", "After 6 Items": "Efter 6 elementer", "After 7 Items": "Efter 7 elementer", "After 8 Items": "Efter 8 elementer", "After 9 Items": "Efter 9 elementer", "After Display Content": "Efter vis indhold", "After Display Title": "Efter vis titel", "After Submit": "Efter indsendelse", "Alert": "Advarsel", "Alias": "Alias", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Juster dropdown til deres menupunkt eller til navigationslinjen. Vis dem eventuelt i en fuld-bredde sektion kaldet dropbar, vis et ikon for at indikere dropdowns og lad tekstelementer åbne ved klik og ikke hover.", "Align image without padding": "Juster billedet uden padding", "Align the filter controls.": "Juster filter kontrollerne.", "Align the image to the left or right.": "Juster billedet til venstre eller højre.", "Align the image to the top or place it between the title and the content.": "Juster billedet til toppen eller placer det mellem titlen og indholdet.", "Align the image to the top, left, right or place it between the title and the content.": "Juster billedet til toppen, venstre, højre eller placer det mellem titlen og indholdet.", "Align the meta text.": "Juster metateksten.", "Align the navigation items.": "Juster navigations elementerne.", "Align the section content vertically, if the section height is larger than the content itself.": "Juster sektionsindholdet vertikalt, hvis sektionshøjden er større end selve indholdet.", "Align the title and meta text as well as the continue reading button.": "Juster titel og metatekst såvel som knappen Læs mere.", "Align the title and meta text.": "Juster titlen og metateksten.", "Align the title to the top or left in regards to the content.": "Juster titlen til toppen eller til venstre i forhold til indholdet.", "Align to navbar": "Juster til navlinje", "Alignment": "Justering", "Alignment Breakpoint": "Justering breakpoint", "Alignment Fallback": "Justering tilbagefald", "All backgrounds": "Alle baggrunde", "All colors": "Alle farver", "All except first page": "Alle undtagen første side", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Alle billeder er licenseret under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, hvilket betyder at du kan kopiere, ændre, distribuere og anvende billederne gratis, inklusiv til kommercielle formål, uden at spørge om lov.", "All Items": "Alle elementer", "All layouts": "Samtlige layouts", "All pages": "Alle sider", "All presets": "Alle presæts", "All styles": "Alle stile", "All topics": "Alle emner", "All types": "Alle typer", "All websites": "Alle websteder", "All-time": "Hele tiden", "Allow mixed image orientations": "Tillad blandede billedorienteringer", "Allow multiple open items": "Tillad multiple åbne elementer", "Alphabetical": "Alfabetisk", "Alphanumeric Ordering": "Alfabetisk sortering", "Alt": "Alt", "Alternate": "Alternativ", "Always": "Altid", "Animate background only": "Animer kun baggrund", "Animate items": "Animer elementer", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence for each property. Optionally, specify percentage to position the stops along the animation sequence. Translate and scale can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animer indstillinger til specifikke værdier. Tilføj multiple stop for at definere start, mellem og slutværdier i løbet af animationssekvensen for hver indstilling. Angiv eventuelt procentsats for at placere stoppene i løbet af animationssekvensen. Oversæt og skaler kan have valgfri <code>%</code>, <code>vw</code> og <code>vh</code> enheder.", "Animate properties to specific values. Add multiple stops to define start, intermediate and end values along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence. Translate can have optional <code>%</code>, <code>vw</code> and <code>vh</code> units.": "Animer indstillinger til specifikke værdier. Tilføj multiple stop for at definere start, mellem og slutværdier i løbet af animationssekvensen. Angiv eventuelt procentsats for at placere stoppene i løbet af animationssekvensen. Oversæt kan have valgfrie <code>%</code>, <code>vw</code> og <code>vh</code> enheder.", "Animate strokes": "Animer streger", "Animation": "Animation", "Animation Delay": "Animationspause", "Animations": "Animationer", "Any": "Enhver", "Any Joomla module can be displayed in your custom layout.": "Ethvert Joomla modul kan vises i dit brugerdefinerede layout.", "Any WordPress widget can be displayed in your custom layout.": "Ethvert Wordpress widhet kan vises i dit brugerdefinerede layout.", "API Key": "API nøgle", "Apply a margin between the navigation and the slideshow container.": "Anvend en margin mellem navigationen og slideshow beholderen.", "Apply a margin between the overlay and the image container.": "Anvend en margin mellem overlay og billedbeholder.", "Apply a margin between the slidenav and the slider container.": "Anvend en margin mellem slidenav og slider beholderen.", "Apply a margin between the slidenav and the slideshow container.": "Anvend en margin mellem slidenav og slideshow beholderen.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Anvend en animation på elementer når de kommer ind i visningsområdet. Slide animationer kan udføres med et fast offset eller ved 100% af elementets størrelse.", "Are you sure?": "Er du sikker?", "ARIA Label": "ARIA label", "Article": "Artikel", "Article Count": "Artikel antal", "Article Order": "Artikelrækkefølge", "Articles": "Artikler", "As notification only ": "Kun som notifikation ", "Ascending": "Stigende", "Assigning Modules to Specific Pages": "Tilknyt moduler til specifikke sider", "Assigning Templates to Pages": "Tilknyt skabeloner til specifikke sider", "Assigning Widgets to Specific Pages": "Tilknyt widgets til specifikke sider", "Attach the image to the drop's edge.": "Tilknyt billedet til kant på droppet.", "Attention! Page has been updated.": "Advarsel! Siden er blevet opdateret.", "Attribute Slug": "Attribut slug", "Attribute Terms": "Attribut termer", "Attribute Terms Operator": "Attribut termer operator", "Attributes": "Attributter", "Aug 6, 1999 (M j, Y)": "Aug 6, 1999 (M j, Y)", "August 06, 1999 (F d, Y)": "August 06, 1999 (F d, Y)", "Author": "Forfatter", "Author Archive": "Forfatter arkiv", "Author Link": "Link til forfatter", "Auto": "Auto", "Auto-calculated": "Beregn automatisk", "Autoplay": "Auto afspil", "Avatar": "Avatar", "Average Daily Views": "Gennemsnitlige daglige visninger", "b": "b", "Back": "Tilbage", "Back to top": "Tilbage til toppen", "Background": "Baggrund", "Background Color": "Baggrundsfarve", "Background Image": "Baggrundsbillede", "Badge": "Badge", "Bar": "Linje", "Base Style": "Grund stil", "Basename": "Grund navn", "Before": "Inden", "Before Display Content": "Inden vis indhold", "Behavior": "Opførsel", "Below Content": "Under indhold", "Below Title": "Under titel", "Beta": "Beta", "Between": "I mellem", "Blank": "Tom", "Blend Mode": "Blandingstilstand", "Block Alignment": "Blok justering", "Block Alignment Breakpoint": "Blok justering breakpoint", "Block Alignment Fallback": "Blok justering tilbagefald", "Blog": "Blog", "Blur": "Sløring", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrap er kun krævet når standard Joomla skabelonfiler indlæses, for eksempel til Joomla frontend redigeringen. Indlæs jQuery for at skrive brugerdefineret kode baseret på jQuery JavaScript biblioteket.", "Border": "Kant", "Bottom": "Bund", "Bottom Center": "Bund center", "Bottom Left": "Bund venstre", "Bottom Right": "Bund højre", "Box Decoration": "Boks dekoration", "Box Shadow": "Boks skygge", "Boxed": "Indrammet", "Brackets": "Anførselstegn", "Breadcrumbs": "Sti", "Breadcrumbs Home Text": "Sti hjem tekst", "Breakpoint": "Breakpunkt", "Builder": "Bygger", "Bullet": "Punkt", "Button": "Knap", "Button Danger": "Knap advarsel", "Button Default": "Knap standard", "Button Margin": "Knap margin", "Button Primary": "Knap primær", "Button Secondary": "Knap sekundær", "Button Size": "Knapstørrelse", "Button Text": "Knaptekst", "Buttons": "Knapper", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Som standard er felter med relaterede kilder med enkelt elementer tilgængelige til mapping. Vælg en relateret kilde som har multiple elementer for at mappe dets felter.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "Som standard indlæse billeder med lazy. Aktiver utålmodig indlæsning for billeder i det startende visningsområde.", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "Som standard er det kun ukategoriserede artikler der refereres til som sider. Alternativt, kan artikler fra eb specifik kategori specificeres som sider.", "By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.": "Som standard er det kun ukategoriserede artikler der refereres til som sider. Skift kategorien under avancerede indstillinger.", "Cache": "Cache", "Campaign Monitor API Token": "Kampagne monitor API token", "Cancel": "Annuller", "Caption": "Billedtekst", "Card Default": "Kort standard", "Card Hover": "Kort hover", "Card Primary": "Kort primær", "Card Secondary": "Kort sekundær", "Cart": "Kurv", "Cart Cross-sells Columns": "Kurv kryds-salgs kolonner", "Cart Quantity": "Kurv mængde", "Categories": "Kategorier", "Categories are only loaded from the selected parent category.": "Kategorier bliver kun indlæst fra den valgte overordnede kategori.", "Categories Operator": "Kategorier operator", "Category": "Kategori", "Category Blog": "Kategori blog", "Category Order": "Kategorirækkefølge", "Center": "Centrér", "Center Center": "Center centrér", "Center columns": "Centrér kolonner", "Center grid columns horizontally and rows vertically.": "Centrér gitterkolonner horisontalt og række vertikalt.", "Center horizontally": "Centrér horisontalt", "Center Left": "Center venstre", "Center Right": "Center højre", "Center rows": "Centrér rækker", "Center the active slide": "Centrér det aktive slide", "Center the content": "Centrér indholdet", "Center the module": "Centrér modulet", "Center the title and meta text": "Centrér titlen og metateksten", "Center the title, meta text and button": "Centrér titlen, metateksten og knappen", "Center the widget": "Centrér widget", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Venstre, højre og midterstillet justering afhænger af brydningspunktet (breakpoint) og kræver, at der er noget at falde tilbage på (fallback).", "Changed": "Ændret", "Changelog": "Ændringslog", "Checkout": "Tjek ud", "Checkout Page": "Tjek ud side", "Child %taxonomies%": "Underordnede %taxonomies%", "Child Categories": "Underkategorier", "Child Menu Items": "Under menupunkter", "Child Tags": "Underordnede tags", "Child Theme": "Underordnet tema", "Choose a divider style.": "Vælg stil for adskillelses-elementet.", "Choose a map type.": "Vælg kort-typen.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Vælg mellem en parallax afhængig af scroll positionen eller en animation, som anvendes når sliden er aktiv.", "Choose between a vertical or horizontal list.": "Vælg mellem en vertikal eller en horisontal liste.", "Choose between an attached bar or a notification.": "Vælg mellem en vedhæftet linje eller en notifikation.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Vælg mellem forrige/næste eller numerisk sideinddeling. Den numeriske sideinddeling er ikke tilgængelig for enkelt artikler.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Vælg mellem forrige/næste eller numerisk sideinddeling. Den numeriske sideinddeling er ikke tilgængelig for enkelt poster.", "Choose Font": "Vælg font", "Choose products of the current page or query custom products.": "Vælg produkter på den aktuelle side eller forespørg brugerdefinerede produkter.", "Choose the icon position.": "Vælg ikonets placering.", "Choose the page to which the template is assigned.": "Vælg siden som skabelonen er tilknyttet til.", "Circle": "Cirkel", "City or Suburb": "By eller bydel", "Class": "Klasse", "Classes": "Klasser", "Clear Cache": "Tøm cachen", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Tøm cachede billeder og assets. Billeder der skal skaleres, bliver automatisk gemt i temaets cache-mappe. Når du gen-uploader et billede med samme navn, er du nødt til at tømme cachen.", "Click": "Klik", "Click on the pencil to pick an icon from the icon library.": "Klik på blyanten for at vælge et ikon fra ikonbiblioteket.", "Close": "Luk", "Close Icon": "Lukke ikon", "Cluster Icon (< 10 Markers)": "Klyngeikon (< 10 markører)", "Cluster Icon (< 100 Markers)": "Klyngeikon (< 100 markører)", "Cluster Icon (100+ Markers)": "Klyngeikon (100+ markører)", "Clustering": "Klynger", "Code": "Kode", "Collapsing Layouts": "Kollapsende laytouter", "Collections": "Samlinger", "Color": "Farve", "Color-burn": "Farve-brænd", "Color-dodge": "Farve-dodge", "Column": "Kolonne", "Column 1": "Kolonne 1", "Column 2": "Kolonne 2", "Column 3": "Kolonne 3", "Column 4": "Kolonne 4", "Column 5": "Kolonne 5", "Column 6": "Kolonne 6", "Column Gap": "Kolonneafstand", "Column Height": "Kolonnehøjde", "Column Layout": "Kolonnelayout", "Column Parallax": "Kolonne parallax", "Column within Row": "Kolonne i række", "Column within Section": "Kolonne i sektion", "Columns": "Kolonner", "Columns Breakpoint": "Kolonners breakpoint", "Comment Count": "Kommentar antal", "Comments": "Kommentarer", "Components": "Komponenter", "Condition": "Betingelse", "Consent Button Style": "Samtykke knap stil", "Consent Button Text": "Samtykke knap tekst", "Contact": "Kontakt", "Contacts Position": "Kontakter placering", "Contain": "Indehold", "Container Default": "Beholder standard", "Container Large": "Beholder stor", "Container Padding": "Beholder padding", "Container Small": "Beholder lille", "Container Width": "Beholder bredde", "Container X-Large": "Beholder X-large", "Contains": "Beholdere", "Contains %element% Element": "Indeholder %element% element", "Contains %title%": "Indeholder %title%", "Content": "Indhold", "content": "indhold", "Content Alignment": "Indhold justering", "Content Length": "Indhold længde", "Content Margin": "Indhold margin", "Content Parallax": "Indhold parallax", "Content Type Title": "Indhold type titel", "Content Width": "Indeholdsbredde", "Controls": "Styring", "Convert": "Konverter", "Convert to title-case": "Konverter til store bogstaver", "Cookie Banner": "Cookie banner", "Cookie Scripts": "Cookie scripts", "Coordinates": "Koordinater", "Copy": "Kopier", "Countdown": "Nedtælling", "Country": "Land", "Cover": "Cover", "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.": "Opret et afstands-frit murstens layout hvis gitterelementer har forskellige højder. Pak elementer i kolonner med mest plads eller vis dem i deres naturlige rækkefølge. Anvend eventuelt en parallax animation for at flytte kolonner mens der scrolles indtil de justerer til bunden.", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opret et generelt layout for denne sidetype. Start med et nyt layout og vælg fra en samling af klar-til-brug elementer eller gennemse layout biblioteket og start med et af de præ-byggede layouts.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opret et layout for sidefodssektionen på alle sider. Start med et nyt layout og vælg fra en samling af klar-til-brug elementer eller gennemse layout biblioteket og start med et af de præ-byggede layouts.", "Create a layout for the menu item dropdown. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opret et layout for menupunkt dropdown. Start med et nyt layout og vælg fra en samling af klar-til-brug elementer eller gennemse layout biblioteket og start med et af de præ-byggede layouts.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opret et layout for dette modul og publicer det i top eller bund position. Start med et nyt layout og vælg fra en samling af klar-til-brug elementer eller gennemse layout biblioteket og start med et af de præ-byggede layouts.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opret et layout for denne widget og publicer den i top eller bund området. Start med et nyt layout og vælg fra en samling af klar-til-brug elementer eller gennemse layout biblioteket og start med et af de præ-byggede layouts.", "Create a layout. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opret et layout. Start med et nyt layout og vælg fra en samling af klar-til-brug elementer eller gennemse layout biblioteket og start med et af de præ-byggede layouts.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Opret et individuelt layout for den aktuelle side. Start med et nyt layout og vælg fra en samling af klar-til-brug elementer eller gennemse layout biblioteket og start med et af de præ-byggede layouts.", "Create site-wide templates for pages and load their content dynamically into the layout.": "Opret websteds skabeloner for sider og indlæs deres indhold dynamisk i layoutet.", "Created": "Oprettelsesdato", "Creating a New Module": "Opret nyt modul", "Creating a New Widget": "Opret ny widget", "Creating Accordion Menus": "Opret akkordeonmenu", "Creating Advanced Module Layouts": "Opret avancerede modul layouts", "Creating Advanced Widget Layouts": "Opret avancerede widget layouts", "Creating Advanced WooCommerce Layouts": "Opret avancerede WooCommerce layouts", "Creating Individual Post Layout": "Opretter individuelt post layout", "Creating Individual Post Layouts": "Opretter individuelle post layouts", "Creating Menu Dividers": "Opret menuopdelere", "Creating Menu Heading": "Opret menuoverskrift", "Creating Menu Headings": "Opret menuoverskrifter", "Creating Menu Text Items": "Opret menu teksteelementer", "Creating Navbar Text Items": "Opret Navbar tekstelemeneter", "Creating Parallax Effects": "Opret Parallax effekter", "Creating Sticky Parallax Effects": "Opret fastgjorte Parallax effekter", "Critical Issues": "Kritisk problem", "Critical issues detected.": "Kritisk problem opdaget.", "Cross-Sell Products": "kryds-sælgende produkter", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "Kurateret af <a href>%user%</a>", "Current Layout": "Aktuelt layout", "Current Style": "Aktuel stil", "Current User": "Aktuel bruger", "Custom": "Brugerdefineret", "Custom %post_type%": "Brugerdefineret %post_type%", "Custom %post_types%": "Brugerdefinerede %post_types%", "Custom %taxonomies%": "Brugerdefinerede %taxonomies%", "Custom %taxonomy%": "Brugerdefineret %taxonomy%", "Custom Article": "Brugerdefineret artikel", "Custom Articles": "Brugerdefinerede artikler", "Custom Categories": "Brugerdefinerede kategorier", "Custom Category": "Brugerdefineret kategori", "Custom Code": "Brugerdefineret kode", "Custom Fields": "Brugerdefinerede felter", "Custom Menu Item": "Brugerdefineret menupunkt", "Custom Menu Items": "Brugerdefinerede menupunkter", "Custom Query": "Brugerdefineret forespørgsel", "Custom Tag": "Brugerdefineret tag", "Custom Tags": "Brugerdefinerede tags", "Custom User": "Brugerdefineret bruger", "Custom Users": "Brugerdefinerede brugere", "Customization": "Brugerdefinering", "Customization Name": "Brugerdefineringsnavn", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Brugerdefiner kolonnebredderne i det valgte layout og angiv kolonnerækkefølgen. Ændring af layoutet vil nulstille alle brugerdefineringer.", "Danger": "Advarsel", "Dark": "Mørk", "Dark Text": "Mørk tekst", "Darken": "Gør mørk", "Date": "Dato", "Date Archive": "Dato arkiv", "Date Format": "Datoformat", "Day Archive": "Dag arkiv", "Decimal": "Decimal", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Dekorer overskriften med en skillelinje, punkt eller en linjer som er vertikal centreret i forhold til overskriften.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Dekorer titlen med an adskillelse, punkt eller en linje som er vertikalt centreret i forhold til overskriften.", "Decoration": "Dekorering", "Default": "Standard", "Default Link": "Standard link", "Define a background style or an image of a column and set the vertical alignment for its content.": "Definer en baggrundsstil eller et billede for en kolonne og angiv den vertikale justering af dets indhold.", "Define a custom background color or a color parallax animation instead of using a predefined style.": "Definer en brugerdefineret baggrundsfarve eller en farve parallax animation i stedet for at anvende en prædefineret stil.", "Define a name to easily identify the template.": "Definer et navn til at kunne identificere skabelonen.", "Define a name to easily identify this element inside the builder.": "Definer et navn for let at kunne identificere dette element i byggeren.", "Define a navigation menu or give it no semantic meaning.": "Definer en navigationsmenu eller giv den ingen semantisk mening.", "Define a unique identifier for the element.": "Definer en unik identifikator for dette element.", "Define an alignment fallback for device widths below the breakpoint.": "Definér et justerings-fallback for enhedsbredder der ligger under breakpoint.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Definer en eller flere attributter fro elementet. Separere attributnavne og værdier med <code>=</code> karakteren. En attribut per linje.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Definér et eller flere klassenavne for elementet. Adskil flere klasser med mellemrum.", "Define the alignment in case the container exceeds the element max-width.": "Definer justeringen i tilfælde af at beholderen overskrider elementets maks bredde.", "Define the alignment of the last table column.": "Definer justeringen for den sidste tabelkolonne.", "Define the device width from which the alignment will apply.": "Definér enhedsbredden som justingsinstillingerne skal gælde for.", "Define the device width from which the max-width will apply.": "Definer apparatbredden fra hvilken maks bredden vil gælde.", "Define the image quality in percent for generated JPG images and when converting JPEG and PNG to next-gen image formats.<br><br>Mind that setting the image quality too high will have a negative impact on page loading times.<br><br>Press the Clear Cache button in the advanced settings after changing the image quality.": "Definer billedkvaliteten i procent for genererede JPG billeder og når der konverteres JPEG og PNG til next-gen billedformater.<br><br>Bemærk at angivelse af en for høj billedkvalitet vil have negativ påvirkning på sideindlæsningstider.<br><br>Tryk på knappen ryd cache under avancerede indstillinger efter ændring af billedkvaliteten.", "Define the layout of the form.": "Definer layoutet for formularen.", "Define the layout of the title, meta and content.": "Definer layoutet for titlen, meta og indhold.", "Define the order of the table cells.": "Definer rækkefølgen for tabelceller.", "Define the origin of the element's transformation when scaling or rotating the element.": "Definer oprindelsen for elementets transformation, når elementet skaleres eller roteres.", "Define the padding between items.": "Definer padding imellem elementer.", "Define the padding between table rows.": "Definer padding mellem tabelrækker.", "Define the purpose and structure of the content or give it no semantic meaning.": "Definer formålet og strukturen for indholdet eller giv det ingen semantisk mening.", "Define the title position within the section.": "Definer titelplaceringen indenfor sektionen.", "Define the width of the content cell.": "Definer bredden på indholdscellen.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definer bredden på filternavigationen. Vælg mellem procent og faste bredder eller udvid kolonner til bredden af deres indhold.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definer bredden på billedet i gitteret. Vælg mellem procent of faste bredder eller udvid kolonner til bredden på deres indhold.", "Define the width of the meta cell.": "Definer bredden på meta cellen.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Definer bredden på navigationen. Vælg mellem procent og faste bredder eller udvid kolonner til bredden på deres indhold.", "Define the width of the title cell.": "Definer bredden på titelcellen.", "Define the width of the title within the grid.": "Definer bredden på titlen indenfor gitteret.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Definer bredden på titlen indenfor gitteret. Vælg mellem procent og faste bredde eller udvid kolonner til bredden på deres indhold.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Definer om bredden på slider elementer er fast eller automatisk udvides til dets indholdsbredder.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Definer om miniaturer deles over flere linjer hvis beholderen er for lille.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Pauser elementanimationerne i millisekunder, fx <code>200</code>.", "Delayed Fade": "Udskudt fade", "Delete": "Slet", "Delete animation stop": "Slet animationsstop", "Descending": "Faldende", "description": "beskrivelse", "Description": "Beskrivelse", "Description List": "Liste over beskrivelser", "Desktop": "Skrivebord", "Determine how the image or video will blend with the background color.": "Bestem hvordan billedet eller videoen skal blande sig med baggrundsfarven.", "Determine how the image will blend with the background color.": "Bestem hvordan billedet vil blende med baggrundsfarven.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Bestem om billede skal tilpasses til sidedimentionerne ved at beskære det, eller ved at udfylde det tomme område med baggrundsfarven.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Bestem hvordan billedet fil passe til sektions-dimensionerne ved at skære i det eller ved at udfylde de somme områder med baggrunds farven.", "Dialog End": "Dialog slut", "Dialog Layout": "Dialog layout", "Dialog Logo (Optional)": "Dialog logo (valgfri)", "Dialog Push Items": "Dialog push elementer", "Dialog Start": "Dialog start", "Difference": "Forskel", "Direction": "Retning", "Dirname": "Mappenavn", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Deaktiver autoafspil, start autoafspilning straks eller så snart videoen kommer ind i visningsområdet.", "Disable element": "Deaktiver element", "Disable Emojis": "Deaktiver emojis", "Disable infinite scrolling": "Deaktiver uendelig scrolling", "Disable item": "Deaktiver element", "Disable row": "Deaktiver række", "Disable section": "Deaktiver sektion", "Disable template": "Deaktiver skabelon", "Disable the <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filter for the_content and the_excerpt and disable conversion of Emoji characters to images.": "Deaktiver <a href=\"https://developer.wordpress.org/reference/functions/wpautop/\" target=\"_blank\">wpautop</a> filtereret for _content og _excerpt og deaktiver konversionen af emoji karakterer til billeder.", "Disable the element and publish it later.": "Deaktiver elementet og publicer det senere.", "Disable the item and publish it later.": "Deaktiver elementet og publicer det senere.", "Disable the row and publish it later.": "Deaktiver rækken og publicer den senere.", "Disable the section and publish it later.": "Deaktiver sektionen og publicer den senere.", "Disable the template and publish it later.": "Deaktiver skabelonen og publicer den senere.", "Disable wpautop": "Deaktiver wpautop", "Disabled": "Deaktiveret", "Disc": "Disk", "Discard": "Afvis", "Display": "Vis", "Display a divider between sidebar and content": "Vis en adskillelse mellem sidebar og indhold", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Vis en menu ved at vælge den placering, hvor den skal vises. Udgiv eksempelvis hovedmenuen i navbar placeringen og en alternativ menu i mobil placeringen.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Vis et søgeikon til venstre eller til højre. Ikonet til højre kan klikkes for at starte søgningen.", "Display header outside the container": "Vis header udenfor beholderen", "Display icons as buttons": "Vis ikoner som knapper", "Display on the right": "Vis til højre", "Display overlay on hover": "Vis overlay ved hover", "Display products based on visibility.": "Vis produkter baseret på synlighed.", "Display the breadcrumb navigation": "Vis stinavigationen", "Display the cart quantity in brackets or as a badge.": "Vis kurvantallet i klammer eller som et badge.", "Display the content inside the overlay, as the lightbox caption or both.": "Vis indholdet indeni overlayet, som ligtboks overskrift eller begge.", "Display the content inside the panel, as the lightbox caption or both.": "Vis indholdet i panelet, som lightbox overskrift eller begge.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Vis feltet excerpt hvis det har indhold, ellers indholdet. For at anvende et excerpt felt, opret et brugerdefineret felt med navnet excerpt.", "Display the excerpt field if it has content, otherwise the intro text.": "Vis excerpt feltet hvis det indeholder noget, ellers introteksten.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Vis excerpt feltet hvis det indeholder noget, eller introteksten. For at anvende et excerpt felt, opret et brugerdefineret felt med navnet excerpt.", "Display the first letter of the paragraph as a large initial.": "Vis det første bogstav af paragraffen, som et stort inicial.", "Display the image only on this device width and larger.": "Vis kun billedet på denne enhedsbredde eller større.", "Display the image or video only on this device width and larger.": "Vis kun billedet eller videoen på denne apparatbredde og større.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Vis kort kontrollerne og definer om man kan zoome eller trække på kortet ved anvendelse af musehjul eller touch.", "Display the meta text in a sentence or a horizontal list.": "Vis metateksten i en sætning eller en horisontal liste.", "Display the module only from this device width and larger.": "Vis kun dette modul fra denne enhedsbredde eller større.", "Display the navigation only on this device width and larger.": "Vis kun navigationen på denne apparatbredde eller større.", "Display the parallax effect only on this device width and larger.": "Vis kun parallaxeffekten på denne apparatbredde eller større.", "Display the popover on click or hover.": "Vis popovereen ved klik eller hover.", "Display the section title on the defined screen size and larger.": "Vis sektionstitlen på den definerede skærmstørrelse eller større.", "Display the short or long description.": "Vis den korte eller lange beskrivelse.", "Display the slidenav only on this device width and larger.": "Vis kun sidenav på denne apparatbredde eller større.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Vis kun slidenav outside på denne apparatbredde eller større. Ellers, vis det indeni.", "Display the title in the same line as the content.": "Vis titlen på samme linje som indholdet.", "Display the title inside the overlay, as the lightbox caption or both.": "Vis titlen indeni overlaey, som lysboks billedteksten eller begge.", "Display the title inside the panel, as the lightbox caption or both.": "Vis titlen indeni panelet, som lysboks billedtekst eller begge.", "Display the widget only from this device width and larger.": "Vis kun widget'et fra denne apparatbredde og større.", "Displaying the Breadcrumbs": "Vis stier", "Displaying the Excerpt": "Vis tekstsammendrag", "Displaying the Mobile Header": "Vis mobiloverskriften", "div": "div", "Divider": "Adskillelses-enhed", "Do you really want to replace the current layout?": "Ønsker du virkelig at erstatte det aktuelle layout?", "Do you really want to replace the current style?": "Ønsker du virkelig at erstatte den aktuelle stil?", "Documentation": "Dokumentation", "Does not contain": "Indeholder ikke", "Does not end with": "Slutter ikke med", "Does not start with": "Starter ikke med", "Don't collapse column": "Kollaps ikke kolonne", "Don't collapse the column if dynamically loaded content is empty.": "Kollaps ikke kolonnen hvis dynamisk indlæst indhold er tomt.", "Don't expand": "Udvid ikke", "Don't wrap into multiple lines": "Ombryd ikke til multiple linjer", "Dotnav": "Dotnav", "Double opt-in": "Dobbel opt-ind", "Download": "Download", "Download All": "Download alt", "Download Less": "Download mindre", "Draft new page": "Lav kladde til ny side", "Drop Cap": "Uncial", "Dropbar Animation": "Droplinje animation", "Dropbar Center": "Droplinje center", "Dropbar Content Width": "Droplinje indholdsbredde", "Dropbar Top": "Droplinje top", "Dropbar Width": "Droplinje bredde", "Dropdown": "Dropdown", "Dropdown Alignment": "Dropdown justering", "Dropdown Columns": "Dropdown kolonner", "Dropdown Nav Style": "Dropdown navigationsstil", "Dropdown Padding": "Dropdown padding", "Dropdown Stretch": "Dropdown stræk", "Dropdown Width": "Dropdown bredde", "Dynamic": "Dynamisk", "Dynamic Condition": "Dynamisk betingelse", "Dynamic Content": "Dynamisk indhold", "Dynamic Content (Parent Source)": "Dynamisk indhold (overordnet kilde)", "Dynamic Multiplication": "Dynamisk multiplikation", "Dynamic Multiplication (Parent Source)": "Dynamisk multiplikation (overordnet kilde)", "Easing": "Udtoning", "Edit": "Redigér", "Edit %title% %index%": "Rediger %title% %index%", "Edit Article": "Rediger artikel", "Edit Image Quality": "Rediger billedkvalitet", "Edit Item": "Rediger element", "Edit Items": "Rediger elementer", "Edit Layout": "Rediger layout", "Edit Menu Item": "Redigér menupunkt", "Edit Module": "Redigér modul", "Edit Parallax": "Rediger parallax", "Edit Settings": "Redigér indstillinger", "Edit Template": "Rediger skabelon", "Element": "Element", "Elements within Column": "Elementer med kolonne", "Email": "E-mail", "Emphasis": "Fremhævet", "Empty Dynamic Content": "Tomt dynamisk indhold", "Enable a navigation to move to the previous or next post.": "Aktiver en navigation til at flytte til forrige eller næste post.", "Enable active state": "Aktiver aktiv tilstand", "Enable autoplay": "Aktiver autoafspil", "Enable click mode on text items": "Aktiver klik tilstand på tekstelementer", "Enable drop cap": "Aktiver uncialer", "Enable dropbar": "Aktiver droplinje", "Enable filter navigation": "Aktiver filternavigation", "Enable lightbox gallery": "Aktiver lysboks galleri", "Enable map dragging": "Aktiver Træk på kort", "Enable map zooming": "Aktiver zoom på kort", "Enable marker clustering": "Aktiver markør samling", "Enable masonry effect": "Aktiver murstens effekt", "Enable the pagination.": "Aktiver sideinddeling.", "End": "Slut", "Ends with": "Slutter med", "Enter %s% preview mode": "Gå til %s% forhåndsvisningstilstand", "Enter a comma-separated list of tags to manually order the filter navigation.": "Angiv en kommasepareret liste med tags for manuelt at sortere filternavigationen.", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Angiv en komma-separeret liste med tags, for eksempel, <code>blå, hvid, sort</code>.", "Enter a date for the countdown to expire.": "Angiv en dato hvor nedtællingen skal udløbe.", "Enter a decorative section title which is aligned to the section edge.": "Angiv en dekorativ sektionstitel som justeres til sektionens kant.", "Enter a descriptive text label to make it accessible if the link has no visible text.": "Angiv en beskrivende tekstlabel for at gøre den tilgængelig hvis linket ikke har nogen tekst.", "Enter a subtitle that will be displayed beneath the nav item.": "Skriv en undertitel, som vises under navigationspunktet.", "Enter a table header text for the content column.": "Angiv en tabeloverskriftstekst for indholdskolonnen.", "Enter a table header text for the image column.": "Angiv en tabeloverskriftstekst for billedkolonnen.", "Enter a table header text for the link column.": "Angiv en tabeloverskriftstekst for linkkolonnen.", "Enter a table header text for the meta column.": "Angiv en tabeloverskriftstekst for metakolonnen.", "Enter a table header text for the title column.": "Angiv en tabeloverskriftstekst for titelkolonnen.", "Enter a width for the popover in pixels.": "Angiv en bredde for popoveren i pixels.", "Enter an optional footer text.": "Indtast en valgfri sidefodstekst.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Indtast et valgfrit tekst for titelattribut for linket, som vises ved hover.", "Enter labels for the countdown time.": "Angiv labels til nedtællingstiden.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Angiv et link til din sociale profil. Et tilhørende <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand ikon</a> vil blive vist automatisk, hvis tilgængeligt. Links til e-mailadresser og telefonnumre, såsom:info@example.com eller tel:+491570156, er også understøttet.", "Enter or pick a link, an image or a video file.": "Indtast eller vælg et link, et billede eller en videofil.", "Enter the API key in Settings > External Services.": "Indtast API-nøglen i Indstillinger > Eksterne tjenester.", "Enter the API key to enable 1-click updates for YOOtheme Pro and to access the layout library as well as the Unsplash image library. You can create an API Key for this website in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "Angiv API nøglen for at aktivere 1-kliks opdateringer for YOOtheme Pro og for at tilgå layout biblioteket, såvel som Unsplash billedbiblioteket. Du kan oprette en API nøgle for dette websted under dine <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">kontoindstillinger</a>.", "Enter the author name.": "Angiv forfatternavnet.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Indtast meddelelsen om cookie-samtykke. Standardteksten tjener som illustration. Juster den venligst i henhold til cookielovgivningen i dit land.", "Enter the horizontal position of the marker in percent.": "Indtast markørens vandrette position i procent.", "Enter the image alt attribute.": "Angiv billede alt attributten.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Angiv erstatningsstrengen som kan indeholde referencer. Hvis efterladt tom, så vil søge match blive fjernet.", "Enter the text for the button.": "Angiv teksten til knappen.", "Enter the text for the home link.": "Angiv teksten til hjem linket.", "Enter the text for the link.": "Angiv teksten til linket.", "Enter the vertical position of the marker in percent.": "Angiv den vertikale placering af markøren i procent.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Angiv dit <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID for at aktivere sporing. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymisering</a> kan forringe sporringspræcision.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Indtast din <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API nøgle for at bruge Google Maps istedet for OpenStreetMap. Det åbner også op for flere muligheder for at indstille kortets farver.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Angiv din <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Kampagne monitor</a> API nøgle til anvendelse sammen med nyhedsbrevselementet.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil automatisk blive præfikset for dette element: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil automatisk blive præfikset for dette element: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil automatisk blive præfikset for dette element: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil automatisk blive præfikset for dette element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-row</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Angiv din egen brugerdefinerede CSS. De følgende selektorer vil blive præfisket automatisk for dette element: <code>.el-section</code>", "Error": "Fejl", "Error 404": "Fejl 404", "Error creating folder.": "Fejl under oprettelse af mappe.", "Error deleting item.": "Fejl under sletning af element.", "Error renaming item.": "Fejl under omdøbning af element.", "Error: %error%": "Fejl: %error%", "Events": "Events", "Excerpt": "Sammendrag", "Exclude cross sell products": "Ekskluder krydssælgende produkter", "Exclude upsell products": "Ekskluder opsælgende produkter", "Exclusion": "Ekskludering", "Expand": "Udvid", "Expand columns equally to always fill remaining space within the row, center them or align them to the left.": "Udvid kolonner ens så de altid passer til den tilbageværende plads i rækken, centrer dem eller juster dem til venstre.", "Expand height": "Udvid højde", "Expand One Side": "Udvid en side", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Udvid bredden af en side til venstre eller til højre i mens den anden side holdes indenfor begrænsningerne for maks bredden.", "Expand width to table cell": "Udvid bredde til tabelcelle", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Eksporter alle temaindstillingerne og importer dem i en anden installation. Dette inkluderer ikke indhold fra layoutet, stile og elementbiblioteker eller skabelonbyggeren.", "Export Settings": "Eksporter indstillinger", "Extend all content items to the same height.": "Udvid alle indholdselementer til den samme højde.", "Extension": "Udvidelse", "External": "Ekstern", "External Services": "Ekstern service", "Extra Margin": "Ekstra margin", "Fade": "Udton", "Favicon": "Favicon", "Favicon PNG": "Favikon PNG", "Favicon SVG": "Favikon SVG", "Fax": "Fax", "Featured": "Fremhævet", "Featured Articles": "Fremhævede artikler", "Featured Articles Order": "Rækkefølge for fremhævede artikler", "Featured Image": "Fremhævet billede", "Fields": "Felter", "Fifths": "Femtedel", "Fifths 1-1-1-2": "Femtedel 1-1-1-2", "Fifths 1-1-3": "Femtedel 1-1-3", "Fifths 1-3-1": "Femtedel 1-3-1", "Fifths 1-4": "Femtedel 1-4", "Fifths 2-1-1-1": "Femtedel 2-1-1-1", "Fifths 2-3": "Femtedel 2-3", "Fifths 3-1-1": "Femtedel 3-1-1", "Fifths 3-2": "Femtedel 3-2", "Fifths 4-1": "Femtedel 4-1", "File": "Fil", "Files": "Filer", "Filter": "Filter", "Filter %post_types% by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtrer %post_types% efter forfatter. Anvend <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> tasten for at vælge multiple forfattere. Sæt den logiske operator til at matche de valgte forfattere eller ej.", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Filtrer %post_types% efter termer. Anvend <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> tasten for at vælge multiple termer. Sæt den logiske operator til at matche mindst en af termerne, ingen termer, eller alle termer.", "Filter articles by authors. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple authors. Set the logical operator to match or not match the selected authors.": "Filtrer artikler efter forfattere. Anvend <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> tasten for at vælge multiple forfattere. Sæt den logiske operator til at matche de valgte forfattere eller ej.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Filtrer artikler efter kategorier. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple kategorier. Sæt den logiske operator til at matche de valgte kategorier eller ej.", "Filter articles by featured status. Load all articles, featured articles only, or articles which are not featured.": "Filtrer artikler efter fremhævet status. Indlæs alle artikler, kun fremhævede artikler, eller artikler som ikke er fremhævet.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Filtrer artikler efter tags. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple tags. Sæt den logiske operator til at matche mindst ét tag, ingen tags eller alle tags.", "Filter by Authors": "Filtrer efter forfattere", "Filter by Categories": "Filtrer efter kategorier", "Filter by Featured Articles": "Filtrer efter fremhævede artikler", "Filter by Tags": "Filtrer efter tags", "Filter by Term": "Filtrer efter term", "Filter by Terms": "Filtrer efter termer", "Filter products by attribute using the attribute slug.": "Filtrer produkter efter attribut ved anvendelse af attribut slug.", "Filter products by categories using a comma-separated list of category slugs.": "Filtrer produkter efter kategorier ved at anvende en kommasepareret liste med kategori slugs.", "Filter products by tags using a comma-separated list of tag slugs.": "Filtrer produkter efter tags ved at anvende en kommasepareret liste med tag slugs.", "Filter products by terms of the chosen attribute using a comma-separated list of attribute term slugs.": "Filtrer produkter efter termer for den valgte attribut ved anvendelse af en kommasepareret liste med attribut term slugs.", "Filter products using a comma-separated list of IDs.": "Filtrer produkter ved anvendelse af en kommasepareret liste med ID'er.", "Filter products using a comma-separated list of SKUs.": "Filtrer produkter ved anvendelse af en kommasepareret liste med SKUer.", "Finite": "Slutteligt", "First Item": "Første element", "First name": "Fornavn", "First page": "Første side", "Fix the background with regard to the viewport.": "Fasthold baggrunden i forhold til visningsområdet.", "Fixed": "Fast", "Fixed-Inner": "Fast indre", "Fixed-Left": "Fast venstre", "Fixed-Outer": "Fast ydre", "Fixed-Right": "Fast højre", "Floating Shadow": "Flydende skygge", "Focal Point": "Midtpunkt", "Folder created.": "Mappe oprettet.", "Folder Name": "Mappennavn", "Font Family": "Font familie", "Footer": "Sidefod", "Force a light or dark color for text, buttons and controls on the image or video background.": "Gennemtving en lys eller en mørk farve for tekst, knapper og kontroller på billed- eller videobaggrunden.", "Force left alignment": "Gennemtving venstrejustering", "Force viewport height": "Tving visningsområdehøjde", "Form": "Formular", "Format": "Format", "Full Article Image": "Fuldt artikelbillede", "Full Article Image Alt": "Fuldt artikelbillede alt", "Full Article Image Caption": "Fuld artikelbillede beskrivelse", "Full Width": "Fuld bredde", "Full width button": "Knap i fuld bredde", "g": "g", "Gallery": "Galleri", "Gallery Thumbnail Columns": "Galleri miniature kolonner", "Gamma": "Gamma", "Gap": "Afstand", "General": "Generelt", "GitHub (Light)": "GitHub (Light)", "Google Analytics": "Google Analytics", "Google Fonts": "Google Fonts", "Google Maps": "Google Maps", "Gradient": "Glidende farveovergang", "Greater than": "Større end", "Grid": "Gitter", "Grid Breakpoint": "Gitter brydningspunkt", "Grid Column Gap": "Gitter kolonneafstand", "Grid Row Gap": "Gitter række afstand", "Grid Width": "Gitterbredde", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Grupper elementer i sæt. Antallet af elementer i et sæt afhænger af den definerede elementbredde, fx <i>33%</i> betyder at hvert sæt indeholder 3 elementer.", "Guest User": "Gæstebruger", "h": "h", "H1": "H1", "h1": "h1", "H2": "H2", "h2": "h2", "H3": "H3", "h3": "h3", "H4": "H4", "h4": "h4", "H5": "H5", "h5": "h5", "H6": "H6", "h6": "h6", "Halves": "Halve", "Hard-light": "Hårdt lys", "Header": "Header", "Header End": "Header slut", "Header Start": "Header start", "Heading": "Overskrift", "Heading 2X-Large": "Overskrift 2X-Large", "Heading H1": "Overskrift H1", "Heading H2": "Overskrift H2", "Heading H3": "Overskrift H3", "Heading H4": "Overskrift H4", "Heading H5": "Overskrift H5", "Heading H6": "Overskrift H6", "Heading Large": "Overskrift stor", "Heading Link": "Overskrift link", "Heading Medium": "Overskrift medium", "Heading Small": "Overskrift lille", "Heading X-Large": "Overskrift X-Large", "Headline": "Overskrift", "Headline styles differ in font size and font family.": "Overskriftsstile er forskellige mht fontstørrelse og font familie.", "Height": "Højde", "Height 100%": "Højde 100%", "Help": "Hjælp", "hex / keyword": "hex / nøgleord", "Hidden": "Skjult", "Hidden Large (Desktop)": "Skjult stor (desktop)", "Hidden Medium (Tablet Landscape)": "Skjult medium (tablet landskab)", "Hidden Small (Phone Landscape)": "Skjult lille (telefon landskab)", "Hidden X-Large (Large Screens)": "Skjult X-large (store skærme)", "Hide": "Skjul", "Hide and Adjust the Sidebar": "Skjul og juster sidepanelet", "Hide marker": "Gem markør", "Hide Sidebar": "Skjul sidepanelet", "Hide Term List": "Skjul term liste", "Hide title": "Skjul titel", "Highlight the hovered row": "Fremhæv rækken som musen er over", "Highlight the item as the active item.": "Fremhæv elementet som det aktive element.", "Hits": "Visninger", "Home": "Hjem", "Home Text": "Hjem tekst", "Horizontal": "Horisontal", "Horizontal Center": "Horisontal center", "Horizontal Center Logo": "Horisontal center logo", "Horizontal Justify": "Horisontal justeret", "Horizontal Left": "Horisontal venstre", "Horizontal Right": "Horisontal højre", "Hover": "Hover", "Hover Box Shadow": "Hover boksskygge", "Hover Image": "Hover billede", "Hover Style": "Hover stil", "Hover Transition": "Hover overgang", "hr": "hr", "Html": "Html", "HTML Element": "HTML element", "Hue": "Nuance", "Hyphen": "Bindestreg", "Hyphen and Underscore": "Bindestreg og underscore", "Icon": "Ikon", "Icon Color": "Ikonfarve", "Icon Width": "Ikonbredde", "Iconnav": "Ikonnav", "ID": "ID", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Hvis en sektion eller række har en maks bredde, og en side udvider til venstre eller højre side, så kan standard padding fjernes fra den udvidende side.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Hvis multiple skabeloner tilknyttes til den samme visning, så vil skabelonen som vises først blive anvendt. Skift rækkefølgen med træk og slip.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Hvis du opretter et multisprogswebsted, så vælg ikke en specifik menu her. Anvend i stedet Joomla modul styringen til at publicere den korrekte menu afhængig af det aktuelle sprog.", "If you are using WPML, you can not select a menu here. Instead, use the WordPress menu manager to assign menus to locations for a language.": "Hvis du anvender WPML, så kan du ikke vælge en menu her. I stedet kan du anvende WordPress menu manageren til at tildele menuer til placeringer for et sprog.", "Ignore %taxonomy%": "Ignorer %taxonomy%", "Image": "Billede", "Image Align": "Billedjustering", "Image Alignment": "Billedjustering", "Image Alt": "Billede Alt", "Image and Title": "Billede og titel", "Image Attachment": "Billede Vedhæftet", "Image Box Shadow": "Billede Boks Skygge", "Image Bullet": "Billedpunkt", "Image Effect": "Billedeffekt", "Image Focal Point": "Billede fokuspunkt", "Image Height": "Billedhøjde", "Image Margin": "Billedmargin", "Image Orientation": "billedretning", "Image Position": "Billede Position", "Image Quality": "Billedkvalitet", "Image Size": "Billede Størrelse", "Image Width": "Billedbredde", "Image Width/Height": "Billedbredde/højde", "Image, Title, Content, Meta, Link": "Billede, titel, indhold, meta, link", "Image, Title, Meta, Content, Link": "Billede, titel, meta, indhold, link", "Image/Video": "Billede/Video", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Billeder kan ikke caches. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Skift rettigheder</a> for <code>cache</code> mappen i <code>yootheme</code> tema mappen, så webserveren kan skrive til den.", "Import Settings": "Importindstillinger", "Include %post_types% from child %taxonomies%": "Inkluder %post_types% fra under %taxonomies%", "Include articles from child categories": "Inkluder artikler fra underkategorier", "Include heading itself": "Inkluder selve overskriften", "Include items from child tags": "Inkluder elementer fra undertags", "Include query string": "Inkluder forespørgselsstreng", "Info": "Info", "Inherit": "Nedarv", "Inherit transparency from header": "Nedarv gennemsigtighed fra header", "Inject SVG images into the markup so they adopt the text color automatically.": "Injicer SVG billeder ind i opmærkningen, så de automatisk adopterer textfarven.", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Injicer SVG billeder ind i sideopmærkningen, så de let kan styles med CSS.", "Inline SVG": "Inline SVG", "Inline SVG logo": "Inline SVG logo", "Inline title": "Inline titel", "Input": "Input", "Insert at the bottom": "Indsæt i bunden", "Insert at the top": "Indsæt i toppen", "Inset": "Indsæt", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "I stedet for at bruge et brugerdefineret billede, kan du klikke på blyanten og vælge et ikon fra ikon biblioteket.", "Intro Image": "Introbillede", "Intro Image Alt": "Introbillede alt", "Intro Image Caption": "Introbillede beskrivelsestekst", "Intro Text": "Introtekst", "Invalid Field Mapped": "Ugyldig feltmapning", "Invalid Source": "Ugyldig kilde", "Inverse Logo (Optional)": "Inverter Logo (Valgfrit)", "Inverse style": "Inverteret stil", "Inverse the text color on hover": "Inverter tekstfarven ved hover", "Invert lightness": "Inverter lysstyrke", "IP Anonymization": "IP anonymisering", "Is empty": "Er tom", "Is equal to": "Er lig med", "Is not empty": "Er ikke tom", "Is not equal to": "Er ikke lig med", "Issues and Improvements": "Problemer og forbedringer", "Item": "Element", "Item Count": "Element antal", "Item deleted.": "Element slettet.", "Item Index": "Element indeks", "Item Max Width": "Element maks bredde", "Item renamed.": "Element omdøbt.", "Item uploaded.": "Element uploadet.", "Item Width": "Elementbredde", "Item Width Mode": "Elementbredde tilstand", "Items": "Elementer", "JPEG": "JPEG", "JPEG to AVIF": "JPEG til AVIF", "JPEG to WebP": "JPEG til WebP", "Justify": "Juster", "Justify columns at the bottom": "Juster kolonner i bunden", "Keep existing": "Behold eksisterende", "Ken Burns Effect": "Ken Burns effekt", "l": "l", "Label": "Label", "Label Margin": "Label margin", "Labels": "Labels", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Landskabs- og portrætbilleder bliver centreret i gittercellerne. Bredde og højde vil blive ombyttet når billeder skaleres.", "Large": "Stor", "Large (Desktop)": "Stor (desktop)", "Large padding": "Stor padding", "Large Screen": "Stor skærm", "Large Screens": "Store skærme", "Larger padding": "Større padding", "Larger style": "Større stile", "Last 24 hours": "Seneste 24 timer", "Last 30 days": "Seneste 30 dage", "Last 7 days": "Seneste 7 dage", "Last Column Alignment": "Seneste kolonnejustering", "Last Item": "Seneste element", "Last Modified": "Senest ændret", "Last name": "Efternavn", "Last visit date": "Seneste besøgsdato", "Layout": "Layout", "Layout Media Files": "Layout mediefiler", "Lazy load video": "Lazy indlæs video", "Lead": "Hoved", "Learning Layout Techniques": "Lær layout teknikker", "Left": "Venstre", "Left (Not Clickable)": "Venstre (ikke klikbar)", "Left Bottom": "Venstre bund", "Left Center": "Venstre center", "Left Top": "Venstre top", "Less than": "Mindre end", "Library": "Bibliotek", "Light": "Lys", "Light Text": "Lys tekst", "Lightbox": "Lysboks", "Lightbox only": "Kun lysboks", "Lighten": "Lysere", "Lightness": "Lysstyrke", "Limit": "Grænse", "Limit by %taxonomies%": "Begræns efter %taxonomies%", "Limit by Categories": "Begræns efter kategorier", "Limit by Date Archive Type": "Begræns efter dato arkivtype", "Limit by Language": "Begræns efter sprog", "Limit by Menu Heading": "Begræns efter menuoverskrift", "Limit by Page Number": "Begræns efter sidenummer", "Limit by Products on sale": "Begrænse efter produkter på tilbud", "Limit by Tags": "Begræns efter tags", "Limit by Terms": "Begræns efter termer", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Begræns indholdslængden til et antal karakterer. Alle HTML elementer vil blive fjernet.", "Limit the number of products.": "Begræns antallet af produkter.", "Line": "Linje", "Link": "Link", "link": "link", "Link ARIA Label": "Link ARIA label", "Link card": "Link kort", "Link image": "Link billede", "Link Muted": "Link muted", "Link overlay": "Link overlay", "Link panel": "Link panel", "Link Parallax": "Link Parallax", "Link Reset": "Link nulstil", "Link Style": "Link stil", "Link Target": "Link mål", "Link Text": "Link tekst", "Link the image if a link exists.": "Link billedet hvis et link eksisterer.", "Link the title if a link exists.": "Link titlen, hvis et link eksisterer.", "Link the whole card if a link exists.": "Link hele kortet, hvis et link eksisterer.", "Link the whole overlay if a link exists.": "Link hele overlayet, hvis et link eksisterer.", "Link the whole panel if a link exists.": "Link hele panelet, hvis et link eksisterer.", "Link Title": "Link titel", "Link title": "Link titel", "Link to redirect to after submit.": "Link der skal omdirigeres til efter indsendelse.", "List": "Liste", "List All Tags": "Liste alle tags", "List Item": "List element", "List Style": "Liste stil", "Load Bootstrap": "Indlæs Bootstrap", "Load Font Awesome": "Indlæs Font Awesome", "Load image eagerly": "Indlæs billede ivrig", "Load jQuery": "Indlæs jQuery", "Load jQuery to write custom code based on the jQuery JavaScript library.": "Indlæs jQuery for at skrive brugerdefineret kode baseret på jQuery JavaScript biblioteket.", "Load product on sale only": "Indlæs kun produkt på udsalg", "Load products on sale only": "Indlæs kun produkter på udsalg", "Loading": "Indlæser", "Loading Layouts": "Indlæser layouts", "Location": "Lokation", "Login Page": "Log på side", "Logo End": "Logo slut", "Logo Image": "Logobillede", "Logo Text": "Logotekst", "Loop video": "Loop video", "Lost Password Confirmation Page": "Glemt adgangskode bekræftelsesside", "Lost Password Page": "Glemt adgangskode side", "Luminosity": "Lysstyrke", "Mailchimp API Token": "Mailchimp API Token", "Main Section Height": "Hovedsektion højde", "Main styles": "Hovedstile", "Make SVG stylable with CSS": "Gør SVG stilbar med CSS", "Make the column or its elements sticky only from this device width and larger.": "Sæt kolonnen eller dets elementer fast kun fra denne apparatbredde og større.", "Make the header transparent and overlay this section if it directly follows the header.": "Gøre headeren transparent og overlay på denne sektion, hvis den er lige efter headeren.", "Managing Menus": "Styring af menuer", "Managing Modules": "Styring af moduler", "Managing Pages": "Sider", "Managing Sections, Rows and Elements": "Styring af sektioner, rækker og elementer", "Managing Templates": "Styring af skabeloner", "Managing Widgets": "Styring af widgets", "Manual": "Manuel", "Manual Order": "Manuel rækkefølge", "Map": "Kort", "Mapping Fields": "Mapning af felter", "Margin": "Margin", "Margin Top": "Margin top", "Marker": "Markør", "Marker Color": "Markørfarve", "Marker Icon": "Markørikon", "Mask": "Maske", "Masonry": "Mursten", "Match (OR)": "Match (OR)", "Match content height": "Match indholdshøjde", "Match height": "Match højde", "Match Height": "Match højde", "Match the height of all modules which are styled as a card.": "Match højden på alle moduler som er stylet som et kort.", "Match the height of all widgets which are styled as a card.": "Match højden på alle widgets som er stylet som et kort.", "Max Height": "Maks højde", "Max Width": "Maks bredde", "Max Width (Alignment)": "Maks bredde (justering)", "Max Width Breakpoint": "Maks bredde brydningspunkt", "Maximum Zoom": "Maksimum zoom", "Maximum zoom level of the map.": "Maksimum zoom niveau på kortet.", "Media Folder": "Mediamappe", "Medium": "Medium", "Medium (Tablet Landscape)": "Medium (tablet landskab)", "Menu": "Menu", "Menu Divider": "Menuopdeler", "Menu Icon Width": "Menuikon bredde", "Menu Image Align": "Menubillede justering", "Menu Image and Title": "Menubillede og titel", "Menu Image Height": "Menubillledhøjde", "Menu Image Width": "Menubilledbredde", "Menu Inline SVG": "Menu inline SVG", "Menu Item": "Menupunkt", "Menu items are only loaded from the selected parent item.": "Menupunkter bliver kun indlæst fra det valgte overordnede punkt.", "Menu Style": "Menustil", "Menu Type": "Menutype", "Menus": "Menuer", "Message": "Besked", "Message shown to the user after submit.": "Besked der skal vises til brugeren efter indsendelse.", "Meta": "Meta", "Meta Alignment": "Metajustering", "Meta Margin": "Meta margin", "Meta Parallax": "Meta parallax", "Meta Style": "Meta stil", "Meta Width": "Meta bredde", "Meta, Image, Title, Content, Link": "Meta, billede, titel, indhold, link", "Meta, Title, Content, Link, Image": "Meta, titel, indhold, link, billlede", "Middle": "Midte", "Mimetype": "Mimetype", "Min Height": "Min højde", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Vær opmærksom på at en skabelon med et generelt layout er tilknyttet til den aktuelle side. Rediger skabelonen for at opdatere dets layout.", "Minimum Stability": "Minimum stabilitet", "Minimum Zoom": "Minimum zoom", "Minimum zoom level of the map.": "Minimum zoom niveau på kortet.", "Miscellaneous Information": "Diverse information", "Mobile": "Mobil", "Mobile Inverse Logo (Optional)": "Mobil inverteret logo (valgfrit)", "Mobile Logo (Optional)": "Mobil Logo (Valgfrit)", "Modal": "Modal", "Modal Center": "Modal cenreret", "Modal Focal Point": "Modal fokuspunkt", "Modal Image Focal Point": "Modal billedfokuspunkt", "Modal Top": "Modal top", "Modal Width": "Modal bredde", "Modal Width/Height": "Modal bredde/højde", "Mode": "Tilstand", "Modified": "Ændret", "Module": "Modul", "Module Position": "Modulplacering", "Modules": "Moduler", "Monokai (Dark)": "Monokai (mørk)", "Month Archive": "Måned arkiv", "Move the sidebar to the left of the content": "Flyt sidepanelet til venstre for indholdet", "Multiple Items Source": "Multiple elementkilder", "Multiply": "Multiplicer", "Mute video": "Mute video", "Muted": "Muted", "My Account": "Min konto", "My Account Page": "Min kontoside", "Name": "Navn", "Names": "Navne", "Nav": "Nav", "Navbar": "Navlinje", "Navbar Container": "Navlinje beholder", "Navbar Dropdown": "Navlinje dropdown", "Navbar End": "Navlinje slut", "Navbar Start": "Navlinje start", "Navbar Style": "Navlinje stil", "Navigation": "Navigation", "Navigation Label": "Navigation label", "Navigation Order": "Navigation rækkefølge", "Navigation Thumbnail": "Navigation mniature", "New Article": "Ny artikel", "New Layout": "Nyt layout", "New Menu Item": "Nyt menupunkt", "New Module": "Nyt modul", "New Page": "Ny side", "New Template": "Ny skabelon", "New Window": "Nyt vindue", "Newsletter": "Nyhedsbrev", "Next": "Næste", "Next %post_type%": "Næste %post_type%", "Next Article": "Næste artikel", "Next page": "Næste side", "Next slide": "Næste slide", "Next-Gen Images": "Næste generations billeder", "Nicename": "Nicename", "Nickname": "Kælenavn", "No %item% found.": "Ingen %item% fundet.", "No articles found.": "Ingen artikler fundet.", "No critical issues found.": "Ingen kritiske problemer fundet.", "No element found.": "Ingen elementer fundet.", "No element presets found.": "Ingen element presæts fundet.", "No Field Mapped": "Intet felt mapped", "No files found.": "Ingen filer fundet.", "No font found. Press enter if you are adding a custom font.": "Ingen font fundet. Tryk på enter hvis du er ved at tilføje en brugerdefineret font.", "No icons found.": "Ingen ikoner fundet.", "No items yet.": "Endnu ingen elementer.", "No layout found.": "Intet layout fundet.", "No limit": "Ingen grænse", "No list selected.": "Ingen liste valgt.", "No pages found.": "Ingen sider fundet.", "No Results": "Ingen resultater", "No results.": "Ingen resultater.", "No source mapping found.": "Ingen kilde mapning fundet.", "No style found.": "Ingen stil fundet.", "None": "Ingen", "None (Fade if hover image)": "Ingen (udton hvis hover billede)", "Normal": "Normal", "Not assigned": "Ikke tildelt", "Notification": "Notifikation", "Numeric": "Numerisk", "Off": "Off", "Offcanvas Center": "Offcanvas center", "Offcanvas Mode": "Offcanvas tilstand", "Offcanvas Top": "Offcanvas top", "Offset": "Offset", "Ok": "Ok", "ol": "ol", "On": "On", "On (If inview)": "On (hvis i synsfelt)", "On Sale Product": "Tilbudsprodukt", "On short pages, the main section can be expanded to fill the viewport. This only applies to pages which are not build with the page builder.": "På korte sider kan hovedsektionen udvides til at fylde hele visningsområdet. Dette gælder kun for sider som ikke er bygget med page builderen.", "Only available for Google Maps.": "Kun tilgængelig for Google Maps.", "Only display modules that are published and visible on this page.": "Vis kun moduler som er publicerede og synlige på denne side.", "Only display widgets that are published and visible on this page.": "Vis kun widgets som er publicerede og synlige på denne side.", "Only load menu items from the selected menu heading.": "Indlæs kun menupunkter fra den valgte menuoverskrift.", "Only show the image or icon.": "Vis kun billedet eller ikonet.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Kun enkeltsider og poster kan have individuelle layouts. Anvend en skabelon til at anvende et generelt layout på denne sidestype.", "Opacity": "Gennemsigtighed", "Open": "Åben", "Open in a new window": "Åben i et nyt vindue", "Open menu": "Åben menu", "Open Templates": "Åben skabeloner", "Open the link in a new window": "Åben linket i et nyt vindue", "Opening the Changelog": "Åbner ændringsloggen", "Options": "Indstillinger", "Order": "Rækkefølge", "Order Direction": "Retning på rækkefølge", "Order First": "Sorter først", "Order Received Page": "Rækkefølge modtaget side", "Order the filter navigation alphabetically or by defining the order manually.": "Sorter filterrækkefølgen alfabetisk eller ved at definere rækkefølgen manuelt.", "Order Tracking": "Rækkefølgesporing", "Ordering": "Sortering", "Ordering Sections, Rows and Elements": "Sortering af sektioner, rækker og elementer", "Out of Stock": "Ikke på lager", "Outside": "Udenfor", "Outside Breakpoint": "Udenfor brydningspunkt", "Outside Color": "Udenfor farve", "Overlap the following section": "Overlap den følgende sektion", "Overlay": "Overlay", "Overlay + Lightbox": "Overlay + lysboks", "Overlay Color": "Overlay farve", "Overlay Default": "Overlay standard", "Overlay only": "Kun overlay", "Overlay Parallax": "Overlay parallax", "Overlay Primary": "Overlay primær", "Overlay Slider": "Overlay slider", "Overlay the site": "Overlay webstedet", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Overskriv sektionsanimations indstillingen. Denne indstilling har ingen effekt, med mindre animationer er aktiveret for denne sektion.", "Pack": "Pakke", "Padding": "Padding", "Page": "Side", "Page Category": "Side kategori", "Page Locale": "Side lokalisation", "Page Title": "Sidetitel", "Page URL": "Side URL", "Pages": "Sider", "Pagination": "Sideinddeling", "Panel": "Panel", "Panel + Lightbox": "Panel + lysboks", "Panel only": "Kun panel", "Panel Slider": "Panel slider", "Panels": "Paneler", "Parallax": "Parallax", "Parallax Breakpoint": "Parallax brydningspunkt", "Parallax Easing": "Parallax udjævning", "Parallax Start/End": "Parallax start/slut", "Parent": "Overordnet", "Parent (%label%)": "Overordnet (%label%)", "Parent %taxonomy%": "Overordnet %taxonomy%", "Parent Category": "Overordnet kategori", "Parent Menu Item": "Overordnet menupunkt", "Parent Tag": "Overordnet tag", "Path": "Sti", "Path Pattern": "Sti mønster", "Pause autoplay on hover": "Pauser autoafspilning ved hover", "Phone Landscape": "Telefon landskab", "Phone Portrait": "Telefon portræt", "Photos": "Fotos", "Pick": "Vælg", "Pick %type%": "Vælg %type%", "Pick a %post_type% manually or use filter options to specify which %post_type% should be loaded dynamically.": "Vælg en %post_type% manuelt eller anvend filterindstillinger til at angive hvilken %post_type% der skal indlæses dynamisk.", "Pick an alternative icon from the icon library.": "Vælg et alternativt ikon fra ikonbiblioteket.", "Pick an alternative SVG image from the media manager.": "Vælg et alternativt SVG billede fra medier.", "Pick an article manually or use filter options to specify which article should be loaded dynamically.": "Vælg en artikel manuelt eller anvend filterindstillinger til at angive hvilken artikel der skal indlæses dynamisk.", "Pick an optional icon from the icon library.": "Vælg et valgfrit ikon fra ikonbiblioteket.", "Pick file": "Vælg fil", "Pick icon": "Vælg ikon", "Pick link": "Vælg link", "Pick media": "Vælg medie", "Pick video": "Vælg video", "Pill": "Pille", "Placeholder Image": "Pladsbolderbillede", "Play inline on mobile devices": "Afspil inline på mobile enheder", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "installer/aktiver venligst plugin'et <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer</a> for at aktivere denne funktion.", "Please provide a valid email address.": "Angiv venligst en gyldig e-mailadresse.", "PNG to AVIF": "PNG til AVIF", "PNG to WebP": "PNG til WebP", "Popover": "Popover", "Popular %post_type%": "Populær %post_type%", "Popup": "Popup", "Position": "Placering", "Position Absolute": "Absolut placering", "Position Sticky": "Fast placering", "Position Sticky Breakpoint": "Fast placering brydningspunkt", "Position Sticky Offset": "Fast placering offset", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Placer elementet over eller under andre elementer. Hvis de har samme stak niveau, så afhænger placeringen af rækkefølgen i layoutet.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Placer elementet i det normale indholdsflow, eller i normalt flow men med et offset relativt til sig selv, eller fjern det fra flowet og placer det relativt til den beholdende kolonne.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Placer filternavigationen i toppen, venstre eller højre. En større stil kan anvendes på venstre og højre navigationen.", "Position the meta text above or below the title.": "Placer meta teksten over eller under titlen.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Placer navigationen i toppen, bunden, venstre eller højre. En større stil kan anvendes op venstre og højre navigationerne.", "Post": "Post", "Post Order": "Post rækkefølge", "Post Type Archive": "Post type arkiv", "Postal/ZIP Code": "Postnr", "Poster Frame": "Plakat ramme", "Poster Frame Focal Point": "Plakat ramme fokuspunkt", "Prefer excerpt over intro text": "Foretræk sammendrag fremfor introtekst", "Prefer excerpt over regular text": "Foretræk sammendrag fremfor regulær tekst", "Preserve text color": "Bibehold tekstfarve", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Bibehold tekstfarven, for eksempel når der anvendes kort. Sektionsoverlap er ikke understøttet af alle stile og har måske ingen visuel effekt.", "Preview all UI components": "Forhåndsvis alle UI komponenter", "Previous %post_type%": "Forrige %post_type%", "Previous Article": "Forrige artikel", "Previous page": "Forrige side", "Previous slide": "Forrige slide", "Previous/Next": "Forrige/næste", "Price": "Pris", "Primary": "Primær", "Primary navigation": "Primær navigation", "Product Category Archive": "Produktkategori arkiv", "Product Description": "Produktbeskrivelse", "Product Gallery": "Produktgalleri", "Product IDs": "Produkt IDer", "Product Images": "Produktbilleder", "Product Information": "Produktinformation", "Product Meta": "Produkt meta", "Product Price": "Produktpris", "Product Rating": "Produktvurdering", "Product SKUs": "Produkt SKUer", "Product Stock": "Produktlagerbeholdning", "Product Tabs": "Produktfaner", "Product Tag Archive": "Produkt tag arkiv", "Product Title": "Produkttitel", "Products": "Produkter", "Property": "Indstillinger", "Provider": "Leverandør", "Published": "Publiceret", "Pull": "Træk", "Pull content behind header": "Træk indhold bagved header", "Purchases": "Køb", "Push": "Tryk", "Push Items": "Tryk elementer", "Quantity": "Mængde", "Quarters": "Fjerdedele", "Quarters 1-1-2": "Fjerdedele 1-1-2", "Quarters 1-2-1": "Fjerdedele 1-2-1", "Quarters 1-3": "Fjerdedele 1-3", "Quarters 2-1-1": "Fjerdedele 2-1-1", "Quarters 3-1": "Fjerdedele 3-1", "Query String": "Forespørgselsstreng", "Quotation": "Citat", "r": "r", "Random": "Tilfældig", "Rating": "Vurdering", "Ratio": "Forhold", "Read More": "Læs mere", "Recompile style": "Rekompiler stil", "Redirect": "Omdiriger", "Register date": "Registreringsdato", "Registered": "Registreret", "Reject Button Style": "Afvis knap-stil", "Reject Button Text": "Afvis knap tekst", "Related %post_type%": "Relateret %post_type%", "Related Articles": "Relaterede artikler", "Related Products": "Relaterede produkter", "Relationship": "Relation", "Relationships": "Relationer", "Relative": "Relativ", "Reload Page": "Genindlæs side", "Remove bottom margin": "Fjern bund margin", "Remove bottom padding": "Fjern bund padding", "Remove horizontal padding": "Fjern horisontal padding", "Remove left and right padding": "Fjern venstre og højre padding", "Remove left logo padding": "Fjern venstre logo padding", "Remove left or right padding": "Fjern venstre eller højre padding", "Remove Media Files": "Fjern mediefiler", "Remove top margin": "Fjern topmargin", "Remove top padding": "Fjern top padding", "Remove vertical padding": "Fjern vertikal padding", "Rename": "Omdøb", "Rename %type%": "Omdøb %type%", "Replace": "Erstat", "Replace layout": "Erstat layout", "Reset": "Nulstil", "Reset Link Sent Page": "Nulstil link sendt side", "Reset to defaults": "Nulstil til standarder", "Resize Preview": "Skalerings forhåndsvisning", "Responsive": "Responsiv", "Reveal": "Afslør", "Reverse order": "Omvendt rækkefølge", "Right": "Højre", "Right (Clickable)": "Højre (klikbar)", "Right Bottom": "Højre bund", "Right Center": "Højre center", "Right Top": "Højre top", "Roadmap": "Roadmap", "Roles": "Roller", "Root": "Rod", "Rotate": "Roter", "Rotate the title 90 degrees clockwise or counterclockwise.": "Roter titlen 90 grader med uret eller mod uret.", "Rotation": "Drejning", "Rounded": "Rundet", "Row": "Række", "Row Gap": "Række afstand", "Rows": "Rækker", "Run Time": "Kørselstid", "s": "s", "Same Window": "Samme vindue", "Satellite": "Sattelit", "Saturation": "Mætning", "Save": "Gem", "Save %type%": "Gem %type%", "Save in Library": "Gem i bibliotek", "Save Layout": "Gem layout", "Save Module": "Gem modul", "Save Style": "Gem stil", "Save Template": "Gem skabelon", "Save Widget": "Gem widget", "Scale": "Skaler", "Scale Down": "Skaler ned", "Scale Up": "Skaler op", "Screen": "Skærm", "Script": "Script", "Scroll into view": "Scroll ind i synsfelt", "Scroll overflow": "Scroll overflow", "Search": "Søg", "Search articles": "Søg artikler", "Search Component": "Søgekomponent", "Search Item": "Søg element", "Search pages and post types": "Søg sider og post typer", "Search Style": "Søgestil", "Search Word": "Søg ord", "Secondary": "Sekundær", "Section": "Sektion", "Section Animation": "Sektion animation", "Section Height": "Sektionshøjde", "Section Image and Video": "Sektionsbillede og -video", "Section Padding": "Sektion padding", "Section Style": "Sektionsstil", "Section Title": "Sektionstitel", "Section Width": "Sketionsbredde", "Section/Row": "Sektion/række", "Select": "Vælg", "Select %item%": "Vælg %item%", "Select %type%": "Vælg %type%", "Select a card style.": "Vælg en kort stil.", "Select a child theme. Note that different template files will be loaded, and theme settings will be updated respectively. To create a child theme, add a new folder <code>yootheme_NAME</code> in the templates directory, for example <code>yootheme_mytheme</code>.": "Vælg et undertema. Bemærk at andre skabelonfiler vil blive indlæst, og temaindstillinger vil blive opdateret respektivt. For at oprette et undertema, så tilføj en ny mappe <code>yootheme_NAVN</code> i skabelonmappen, for eksempel <code>yootheme_mittema</code>.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Vælg en indholdskilde for at gøre dets felter tilgængelige for mapning. Vælg mellem kilder for den aktuelle side eller forespørg en brugerdefineret kilde.", "Select a different position for this item.": "Vælg en anden placering for dette element.", "Select a grid layout": "Vælg et gitterlayout", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Vælg en Joomla modulplacering som vil gengive alle publicerede moduler. Det anbefales at anvende builder builder-1 to -6 placeringerne, som ikke gengives andre steder af temaet.", "Select a logo, which will be shown in offcanvas and modal dialogs of certain header layouts.": "Vælg et logo, som vil vises i offcanvas og i modale dialoger for nogle header layouts.", "Select a panel style.": "Vælg en panelstil.", "Select a predefined date format or enter a custom format.": "Vælg et prædefineret datoformat eller angiv et brugerdefineret format.", "Select a predefined meta text style, including color, size and font-family.": "Vælg en prædefineret meta tekst stil, inklusiv farve, størrelse og font familie.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Vælg et prædefineret søgemønster eller en brugerdefineret streng eller regulært udtryk til at søge efter. Det regulære udtryk skal være omkranset af skråstreger. For eksempel `min-streng` eller `/ab+c/`.", "Select a predefined text style, including color, size and font-family.": "Vælg en prædefineret tekststil, inklusiv farve, størrelse og font familie.", "Select a style for the continue reading button.": "Vælg en stil til knappen Fortsæt med at læse.", "Select a style for the overlay.": "Vælg en stil for overlay'et.", "Select a taxonomy to only load posts from the same term.": "Vælg en taksonomi for kun at indlæse poster fra den samme term.", "Select a taxonomy to only navigate between posts from the same term.": "Vælg en taksonomi for kun at navigere mellem poster fra den samme term.", "Select a transition for the content when the overlay appears on hover.": "Vælg en overgang for indholdet når overlay'et fremkommer ved hover.", "Select a transition for the link when the overlay appears on hover.": "Vælg en overgang for linket når overlay'et fremkommer ved hover.", "Select a transition for the meta text when the overlay appears on hover.": "Vælg en overgang for meta teksten når overlay'et fremkommer ved hover.", "Select a transition for the overlay when it appears on hover.": "Vælg en overgang for overlay'et når det fremkommer ved hover.", "Select a transition for the title when the overlay appears on hover.": "Vælg en overgang for titlen, når overlay'et fremkommer ved hover.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Vælg en videofil eller angiv et link fra <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> eller <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WooCommerce page.": "Vælg en WooCommerce side.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Vælg et WordPress widget område som vil gengive alle publicerede widgets. Det anbefales at anvende builder-1 to -6 widget områderne, som ikke gengives andre steder af temaet.", "Select an alternative font family. Mind that not all styles have different font families.": "Vælg en alternativ font familie. Vær opmærksom på at ikke alle stile har forskellige font familier.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Vælg et alternativt logo med inverteret farve, fx hvid, for bedre synlighed på mørke baggrunde. Det vil blive vist automatisk hvis nødvendigt.", "Select an alternative logo, which will be used on small devices.": "Vælg et alternativt logo, som vil blive anvendt på små apparater.", "Select an animation that will be applied to the content items when filtering between them.": "Vælg en animation som vil blive anvendt på indholdselementerne når der filtreres imellem dem.", "Select an animation that will be applied to the content items when toggling between them.": "Vælg en animation som vil blive anvendt på indholdselementerne når der skiftes imellem dem.", "Select an image transition.": "Vælg en billedovergang.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Vælg en billedovergang. Hvis hover billede er sat, så vil overgangen være mellem disse to billeder. Hvis <i>Ingen</i> er valgt, så toner hover billedet ind.", "Select an optional <code>favicon.svg</code>. Modern browsers will use it instead of the PNG image. Use CSS to toggle the SVG color scheme for light/dark mode.": "Vælg et valgfrit <code>favicon.svg</code>. Moderne browserse vil anvende det i stedet for PNG billederne. Anvend CSS til at skifte SVG farveskemaet til lys/mørk tilstand.", "Select an optional image that appears on hover.": "Vælg et valgfrit billede som fremkommer ved hover.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Vælg et valgfrit billede som vises indtil videoen afspilles. Hvis intet er valgt, så vises det første videobillede som plakatramme.", "Select Color": "Vælg farve", "Select dialog layout": "Vælg dialog layout", "Select Element": "Vælg element", "Select Gradient": "Vælg gradient", "Select header layout": "Vælg header layout", "Select Image": "Vælg billede", "Select Manually": "Vælg manuelt", "Select menu item.": "Vælg menupunkt.", "Select menu items manually. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple menu items.": "Vælg menupunkter manuelt. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple menupunkter.", "Select mobile dialog layout": "Vælg mobil dialog layout", "Select mobile header layout": "Vælg mobil header layout", "Select one of the boxed card or tile styles or a blank panel.": "Vælg en af de boksede kort eller titel stile eller et tomt panel.", "Select the animation on how the dropbar appears below the navbar.": "Vælg for animationen hvordan droplinjen fremkommer under navlinjen.", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Vælg brydningspunktet fra hvilket kolonnen vil starte med at vises før andre kolonner. På mindre skærmstørrelser, vil kolonnen vises i naturlig rækkefølge.", "Select the color of the list markers.": "Vælg farven på liste markørerne.", "Select the content position.": "Vælg indholdsplaceringen.", "Select the device size where the default header will be replaced by the mobile header.": "Vælg apparatstørrelsen hvor standard headeren vil blive erstattet af mobilheaderen.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Vælg filternavigationsstilen. Punkt og opdeler stilene er kun tilgængelige for horisontale subnavs.", "Select the form size.": "Vælg formularstørrelsen.", "Select the form style.": "Vælg formularstilen.", "Select the icon color.": "Vælg ikonfarven.", "Select the image border style.": "Vælg billedkantstilen.", "Select the image box decoration style.": "Vælg billedboks dekorationsstilen.", "Select the image box shadow size on hover.": "Vælg billedboks skyggestørrelsen ved hover.", "Select the image box shadow size.": "Vælg billedboks skyggestørrelsen.", "Select the item type.": "Vælg elementtypen.", "Select the layout for the <code>dialog-mobile</code> position. Pushed items of the position are shown as ellipsis.": "Vælg layoutet for placeringen <code>dialog-mobile</code>. Elementer der pushes til placeringen vises som ellipser.", "Select the layout for the <code>dialog</code> position. Items which can be pushed are shown as ellipsis.": "Vælg layoutet til placeringen <code>dialog</code>. Elementer som pushes til denne placering vises som ellipser.", "Select the layout for the <code>logo-mobile</code>, <code>navbar-mobile</code> and <code>header-mobile</code> positions.": "Vælg layoutet for placeringerne <code>logo-mobile</code>, <code>navbar-mobile</code> og <code>header-mobile</code>.", "Select the layout for the <code>logo</code>, <code>navbar</code> and <code>header</code> positions. Some layouts can split or push items of a position which are shown as ellipsis.": "Vælg layoutet placeringerne <code>logo</code>, <code>navbar</code> og <code>header</code>. Nogle layouts kan splitte eller skubbe elementer fra en placering, som vises i ellipser.", "Select the link style.": "Vælg link stilen.", "Select the list style.": "Vælg liste stilen.", "Select the list to subscribe to.": "Vælg listen der skal abonneres på.", "Select the logical operator for the attribute term comparison. Match at least one of the terms, none of the terms or all terms.": "Vælg den logiske operator til attribut term sammenligningen. Match mindst en af termerne, ingen eller alle termer.", "Select the logical operator for the category comparison. Match at least one of the categories, none of the categories or all categories.": "Vælg den logiske operator til kategori sammenligning. Match mindst en af kategorierne, ingen af kategorierne eller alle kategorierne.", "Select the logical operator for the tag comparison. Match at least one of the tags, none of the tags or all tags.": "Vælg den logiske operator til tag sammenligning. Match mindst et at tagsene, ingen af tagsene eller alle tags.", "Select the marker of the list items.": "Vælg markøren for listeelementerne.", "Select the menu type.": "Vælg menutypen.", "Select the nav style.": "Vælg nav stilen.", "Select the navbar style.": "Vælg navlinje stilen.", "Select the navigation type.": "Vælg navigationstypen.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Vælg navigationstypen. Punkt og opdeler stilene er kun tilgængelige for horisontale subnavs.", "Select the overlay or content position.": "Vælg overlay'et eller indholdsplaceringen.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Vælg popover justeringen til dets markør. Hvis popover'en ikke passer ind i dets beholder, så vil den automatisk flippes.", "Select the position of the navigation.": "Vælg placeringen af navigationen.", "Select the position of the slidenav.": "Vælg placeringen for slidenavigation.", "Select the position that will display the search.": "Vælg placeringen som vil vise søgningen.", "Select the position that will display the social icons.": "Vælg placeringen som vil vise de sociale ikoner.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Vælg placeringen som vil vise de sociale ikoner. Vær sikker på at tilføje dine sociale profillinks, ellers vil der ikke vises nogen ikoner.", "Select the search style.": "Vælg søgestilen.", "Select the slideshow box shadow size.": "Vælg størrelsen på skyggen på slideshow boksen.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Vælg stilen for kode syntaks fremhævning. Anvend GitHub for lys og Monokai for mørke baggrunde.", "Select the style for the overlay.": "Vælg stilen til overlayet.", "Select the subnav style.": "Vælg subnavn stilen.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Vælg SVG farven. Den vil kun gælde for understøttede elementer defineret i SVG.", "Select the table style.": "Vælg tabelstilen.", "Select the text color.": "Vælg tekstfarven.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Vælg tekstfarven. Baggrundsindstillingen er valgt, og stile som ikke anvender et baggrundsbillede anvender i stedet den primære farve.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Vælg tekstfarven. Hvis baggrundsindstillingen er valgt, så vil stile der ikke anvender at baggrundsbillede anvende den primære farve i stedet.", "Select the title style and add an optional colon at the end of the title.": "Vælg titelstilen og tilføj en valgfri kolon i slutning af titlen.", "Select the transformation origin for the Ken Burns animation.": "Vælg transformations udgangspunktet for Ken Burns animationen.", "Select the transition between two slides.": "Vælg transitionen i mellem de to slides.", "Select the video box decoration style.": "Vælg dekorationsstilen for videoboksen.", "Select the video box shadow size.": "Vælg skyggestørrelsen på videoboksen.", "Select whether a button or a clickable icon inside the email input is shown.": "Vælg om der vises en knap eller et klikbart ikon i e-mail inputtet.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Vælg om der skal vises en besked eller om webstedet omdirigerer efter at der klikkes på knappen Abonner.", "Select whether the default Search or Smart Search is used by the search module and builder element.": "Vælg om standard søg eller smart søg anvendes af søgemodulet og builder element.", "Select whether the modules should be aligned side by side or stacked above each other.": "Vælg om modulerne skal justeres side om side eller stakkes over hinanden.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Vælg om widgets skal justeres side om side eller stakkes over hinanden.", "Select your <code>apple-touch-icon.png</code>. It appears when the website is added to the home screen on iOS devices. The recommended size is 180x180 pixels.": "Vælg dit <code>apple-touch-icon.png</code>. Det fremkommer når webstedet tilføjes til hjem skærmen på iOS apparater. Den anbefalede størrelse er 180x180 pixels.", "Select your <code>favicon.png</code>. It appears in the browser's address bar, tab and bookmarks. The recommended size is 96x96 pixels.": "Vælg dit <code>favicon.png</code>. Det fremkommer i browserens adresselinje, faner og bogmærker. Den anbefalede størrelse er 96x96 pixels.", "Select your logo. Optionally inject an SVG logo into the markup so it adopts the text color automatically.": "Vælg dit logo. Injicer eventuelt et SVG logo i markup, så det automatisk adopterer tekstfarven.", "Sentence": "Sætning", "Separator": "Separator", "Serve AVIF images": "Tilbyd AVIF billeder", "Serve optimized image formats with better compression and quality than JPEG and PNG.": "Tilbyd optimerede billedformater med bedre komprimering og kvalitet end JPEG og PNG.", "Serve WebP images": "Tilbyd WebP billeder", "Set a condition to display the element or its item depending on the content of a field.": "Angiv en betingelse for at vises elementet eller dets emne afhængigt af indholdet af et felt.", "Set a different link ARIA label for this item.": "Angiv et forskelligt ARIA label for dette element.", "Set a different link text for this item.": "Angiv en forskellig linktekst for dette element.", "Set a different text color for this item.": "Angiv en forskellig tekstfarve for dette element.", "Set a fixed width.": "Sæt en fast bredde.", "Set a focal point to adjust the image focus when cropping.": "Angiv et fokuspunkt for at justere billedfokus under beskæring.", "Set a higher stacking order.": "Sæt en højere stak rækkefølge.", "Set a large initial letter that drops below the first line of the first paragraph.": "Angiv et stort begyndelsesbogstav som falder under den første linje for den første sætning.", "Set a parallax animation to move columns with different heights until they justify at the bottom. Mind that this disables the vertical alignment of elements in the columns.": "Angiv en parallax animation til at flytte kolonner med forskellig højde indtil de justeres i bunden. Vær opmærksom på at dette deaktiverer den vertikale justering af elementer i kolonnerne.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Angiv en sidebarbredde i procent, og indholdskolonnen vil justeres derefter. Bredden vil ikke komme under sidebarens min-width, som du kan angive i Stil sektionen.", "Set a thematic break between paragraphs or give it no semantic meaning.": "Angiv et tematisk skift mellem sætninger eller giv det en semantisk mening.", "Set an additional transparent overlay to soften the image or video.": "Angiv et yderligere gennemsigtigt overlay for at blødgøre billedet eller videoen.", "Set an additional transparent overlay to soften the image.": "Angiv et yderliger gennemsigtigt overlay for st blødgøre billedet.", "Set an optional content width which doesn't affect the image if there is just one column.": "Angiv en yderligere indholdsbredde som ikke påvirker billedet, hvis der kun er én kolonne.", "Set an optional content width which doesn't affect the image.": "Angiv en yderligere indholdsbredde som ikke påvirker billedet.", "Set how the module should align when the container is larger than its max-width.": "Angiv hvordan modulet skal justere når beholderen er større end sin max-width.", "Set how the widget should align when the container is larger than its max-width.": "Angiv hvordan widget skal justere når beholderen er større ende sin max-width.", "Set light or dark color if the navigation is below the slideshow.": "Angiv lys eller mørk farve hvis navigationen er under slideshowet.", "Set light or dark color if the slidenav is outside.": "Angiv lys eller mørk farve hvis slidenavn er udenfor.", "Set light or dark color mode for text, buttons and controls.": "Angiv lys eller mørk farve til tekst, knapper og kontroller.", "Set light or dark color mode.": "Angiv lys eller mørk farvetilstand.", "Set percentage change in lightness (Between -100 and 100).": "Angiv procentvis ændring i lys (mellem -100 og 100).", "Set percentage change in saturation (Between -100 and 100).": "Angiv procentvis ændring i mætning (mellem -100 og 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Angiv procentvis ændring i mængden af gamme forbindelse (mellem 0.01 og 10.0, hvor 1.0 ikke giver nogen korrektion).", "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.": "Angiv animationsstart. Nul transitionerer ved jævn hastighed, en negativ værdi starter hurtigt, i mens en positiv værdi starter langsomt.", "Set the autoplay interval in seconds.": "Angiv autoafspils intervallet i sekunder.", "Set the blog width.": "Angiv blogbredden.", "Set the breakpoint from which grid items will align side by side.": "Angiv brydningspunktet fra hvilket gitterelementer vil justere side om side.", "Set the breakpoint from which grid items will stack.": "Angiv brydningspunktet fra hvilket gitterelementer vil stakkes.", "Set the breakpoint from which the sidebar and content will stack.": "Angiv brydningspunktet fra hvilket sidebjælken og indhold vil stakkes.", "Set the button size.": "Angiv knapstørrelsen.", "Set the button style.": "Angiv knapstilen.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Angiv kolonnebredden for hvert brydningspunkt. Bland fraktionsbredder eller kombiner faste bredder med <i>Udivd</i> værdien. Hvis ingen værdi er valgt, så vil kolonnebredden for den næste mindre skærmstørrelse blive anvendt. Kombinationen af bredder skal altid optage den fulde bredde.", "Set the content width.": "Angiv indholdsbredden.", "Set the device width from which the list columns should apply.": "Angiv apparatbredden fra hvilken liste kolonnen skal gælde.", "Set the device width from which the nav columns should apply.": "Angiv apparatbredden fra hvilken nav kolonnerne skal gælde.", "Set the device width from which the text columns should apply.": "Angiv apparatbredden fra hvilken tekstkolonnerne skal gælde.", "Set the dropbar width if it slides in from the left or right.": "Angiv dropbar bredden hvis den slider ind fra venstre eller højre.", "Set the dropdown width in pixels (e.g. 600).": "Angiv dropdown bredde i pixels (fx 600).", "Set the duration for the Ken Burns effect in seconds.": "Angiv varighed for Ken Bruns effekten i sekunder.", "Set the height in pixels.": "Ang højden i pixels.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Angiv den horisontale placering af elementets bundkant i pixels. En anden enhed som fx % eller vw kan også angives.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Angiv den horisontale placering af elementets venstre kant i pixels. En anden enhed som fx % eller vw kan også angives.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Angiv den horisontale placering af elementets højre kant i pixels. En anden enhed som fx % eller vw kan også angives.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Angiv den horisontale placering af elementets top kant i pixels. En anden enhed som fx % eller vw kan også angives.", "Set the hover style for a linked title.": "Angiv hover stilen for en linket titel.", "Set the hover transition for a linked image.": "Angiv hover overgangen for et linket billede.", "Set the hue, e.g. <i>#ff0000</i>.": "Angiv nuance, fx. <i>#ff0000</i>.", "Set the icon color.": "Angiv ikonfarven.", "Set the icon width.": "Angiv ikonbredden.", "Set the initial background position, relative to the page layer.": "Angiv den initiale baggrundsplacering, relativt til sidelaget.", "Set the initial background position, relative to the section layer.": "Angiv den initiale baggrundsplacering, relativt til sektionslaget.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Angiv den initiale opløsning, som kortet skal vises i. 0 er fuldt zoomet ud og 18 er den højeste opløsning zoomet ind.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Angiv elementbredden for hvert brydningspunkt. <i>Nedarv</i> refererer til elementbredden på den næste mindre skærmstørrelse.", "Set the level for the section heading or give it no semantic meaning.": "Angiv niveauet for sektionsoverskriften eller giv den en semantisk mening.", "Set the link style.": "Angiv link stilen.", "Set the logical operator for how the %post_type% relate to the author. Choose between matching at least one term, all terms or none of the terms.": "Angiv den logiske operator for hvordan %post_type% relaterer til forfatteren. Vælg mellem at matche mindst en term, alle termer eller ingen af termerne.", "Set the logical operators for how the %post_type% relate to %taxonomy_list% and author. Choose between matching at least one term, all terms or none of the terms.": "Angiv de logiske operatorer for hvordan %post_type% relaterer til %taxonomy_list% og forfatter. Vælg mellem at matche mindst en term, alle termer eller ingen af termerne.", "Set the logical operators for how the articles relate to category, tags and author. Choose between matching at least one term, all terms or none of the terms.": "Angiv de logiske operatorer for hvordan artiklerne relaterer til kategori, tags og forfatter. Vælg mellem at matche mindst en term, alle termerne eller ingen af termerne.", "Set the margin between the countdown and the label text.": "Angiv margin mellem nedtællingen og labelteksten.", "Set the margin between the overlay and the slideshow container.": "Angiv margin mellem overlaget og slideshow beholderen.", "Set the maximum content width.": "Angiv den maksimale indholdsbredde.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Angiv den maksimale indholdsbredde. Bemærk: Sektionen har måske allerede en maksimumsbredde, som du ikke kan overskride.", "Set the maximum header width.": "Angiv den maksimale header bredde.", "Set the maximum height.": "Angiv maksimum højden.", "Set the maximum width.": "Angiv maksimum bredden.", "Set the number of columns for the cart cross-sell products.": "Angiv antallet af kolonner for kryds-salgs produkter.", "Set the number of columns for the gallery thumbnails.": "Angiv antallet af kolonner for gallerominiaturerne.", "Set the number of grid columns for desktops and larger screens. On smaller viewports the columns will adapt automatically.": "Angiv antallet af gitterkolonner for desktops og større skærme. På mindre visningsområder vil kolonnerne automatisk tilpasse sig.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Angiv antallet af gitterkolonner for hvert brydningspunkt. <i>Nedarv</i> refererer til antallet af kolonner på den næste mindre skærmstørrelse. <i>Auto</i> udvider kolonnerne til bredden på deres elementer, og fylder derved rækkerne op.", "Set the number of grid columns.": "Angiv antallet af gitterkolonner.", "Set the number of items after which the following items are pushed to the bottom.": "Angiv antallet af elementer efter hvilke de følgende elementer skubbes til bunden.", "Set the number of items after which the following items are pushed to the right.": "Angiv antallet af elementer efter hvilke de følgende elementer bliver skubbet til højre.", "Set the number of list columns.": "Angiv antallet af liste kolonner.", "Set the number of text columns.": "Angiv antallet af tekstkolonner.", "Set the offset from the top of the viewport where the column or its elements should become sticky, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height.": "Angiv offset fra toppen af visningsområdet hvor kolonnen eller dets elementer skal låses fast, fx. <code>100px</code>, <code>50vh</code> eller <code>50vh - 50%</code>. Procent relaterer til kolonnens højde.", "Set the offset to specify which file is loaded.": "Angiv offset for at angive hvilken fil der indlæses.", "Set the order direction.": "Angiv retning på rækkefølgen.", "Set the padding between sidebar and content.": "Angiv padding mellem sidebjælken og indhold.", "Set the padding between the card's edge and its content.": "Angiv padding mellem kortets kant og dets indhold.", "Set the padding between the overlay and its content.": "Angiv padding mellem overlaget og dets indhold.", "Set the padding.": "Angiv padding.", "Set the post width. The image and content can't expand beyond this width.": "Angiv post bredden. Billedet og indholdet kan ikke overskride denne bredde.", "Set the product ordering.": "Angiv produktrækkefølgen.", "Set the search input size.": "Angiv søge input størrelsen.", "Set the search input style.": "Angiv søge input stilen.", "Set the separator between fields.": "Angiv separatoren mellem felter.", "Set the separator between list items.": "Angiv separatoren mellem liste elementer.", "Set the separator between tags.": "Angiv separatoren mellem tags.", "Set the separator between terms.": "Angiv separatoren mellem termer.", "Set the separator between user groups.": "Angiv separatoren mellem brugergrupper.", "Set the separator between user roles.": "Angiv separatoren mellem brugerroller.", "Set the size for the Gravatar image in pixels.": "Angiv størrelsen på Gravatar billedet i pixels.", "Set the size of the column gap between multiple buttons.": "Angiv størrelsen på kolonneafstanden mellem multiple knapper.", "Set the size of the column gap between the numbers.": "Angiv størrelsen på kolonneafstanden mellem numrene.", "Set the size of the gap between between the filter navigation and the content.": "Angiv størrelsen på afstanden mellem filternavigationen og indholdet.", "Set the size of the gap between the grid columns.": "Angiv størrelsen på afstanden mellem gitterkolonnerne.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Angiv størrelsen af afstanden mellem gitterkolonnerne. Definer antallet af kolonner i indstillingerne <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/fremhævet layoutet</a> i Joomla.", "Set the size of the gap between the grid rows.": "Angiv størrelsen på afstanden mellem gitterrækkerne.", "Set the size of the gap between the image and the content.": "Angiv størrelsen på afstanden mellem billedet og indholdet.", "Set the size of the gap between the navigation and the content.": "Angiv størrelsen på afstanden mellem navigationen og indholdet.", "Set the size of the gap between the social icons.": "Angiv størrelsen på afstanden mellem de sociale ikoner.", "Set the size of the gap between the title and the content.": "Angiv størrelsen på afstanden mellem titlen og indholdet.", "Set the size of the gap if the grid items stack.": "Angiv størrelsen på afstanden hvis gitterelementerne er stakket.", "Set the size of the row gap between multiple buttons.": "Angiv størrelsen på rækkeafstanden mellem multiple knapper.", "Set the size of the row gap between the numbers.": "Angiv størrelsen på rækkeafstanden mellem numrene.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Angiv slideshow forhold. Det anbefales at anvende det samme forhold som billede- eller videofilen. Anvend blot dets brede og højde, fx <code>1600:900</code>.", "Set the starting point and limit the number of %post_type%.": "Angiv startpunkt og begræns antallet af %post_type%.", "Set the starting point and limit the number of %post_types%.": "Angiv startpunkt og begræns antallet af %post_types%.", "Set the starting point and limit the number of %taxonomies%.": "Angiv startpunkt og begræns antallet af %taxonomies%.", "Set the starting point and limit the number of articles.": "Angiv startpunktet og begræns antallet af artikler.", "Set the starting point and limit the number of categories.": "Angiv startpunktet og begræns antallet af kategorier.", "Set the starting point and limit the number of files.": "Angiv startpunktet of begræns antallet af filer.", "Set the starting point and limit the number of items.": "Angiv startpunktet og begræns antallet af elementer.", "Set the starting point and limit the number of tagged items.": "Angiv startpunktet og begræns antallet af taggede elementer.", "Set the starting point and limit the number of tags.": "Angiv startpunktet og begræns antallet af tags.", "Set the starting point and limit the number of users.": "Angiv startpunktet og begræns antallet af brugere.", "Set the starting point to specify which %post_type% is loaded.": "Angiv startpunktet for at angive hvilken %post_type% der indlæses.", "Set the starting point to specify which article is loaded.": "Angiv startpunktet for at angive hvilken artikel der indlæses.", "Set the top margin if the image is aligned between the title and the content.": "Angiv top margin, hvis billedet er justeret mellem titlen og indholdet.", "Set the top margin.": "Angiv top margin.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Angiv top margin. Bemærk at margin kun vil gælde hvis indholdsfeltet følger umiddelbart efter et andet indholdsfelt.", "Set the type of tagged items.": "Angiv typen af taggede elementer.", "Set the velocity in pixels per millisecond.": "Angiv hastigheden i pixels per millisekund.", "Set the vertical container padding to position the overlay.": "Angiv den vertikale beholder padding for at placere overlay.", "Set the vertical margin.": "Angiv den vertikale margin.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Angiv den vertikale margin. Note: Bemærk at det først elements top margin og det sidste elements bund margin altid bliver fjernet. Definer disse i gitterindstillingerne i stedet.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Angiv den vertikale margin. Note: Det første gitters top margin og det sidste gitters bundmargin bliver altid fjernet. Definer disse i sektionsindstillingerne i stedet.", "Set the vertical padding.": "Angiv den vertikale padding.", "Set the video dimensions.": "Angiv video dimensioner.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Angiv bredden og højden for det modale indhold, fx billede, video eller iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Angiv bredden og højden i pixels (fx 600). Hvis der kun angives én værdi, så bibeholdes de originale proportioner. Billedet vil blive skaleret og beskåret automatisk.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Angiv bredden og højden i pixels. Hvis der kun angives én værdi, så bevares de originale proportioner. Billedet bil blive skaleret og beskåret automatisk.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Angiv bredden i pixels. Hvis der ikke angives en bredde, så vil kortet optage den fulde bredde. Hvis både bredde og højde er angivet, så vil kortet være responsivt, som et billede. Yderligere, så kan bredden anvendes som brydningspunkt. Kortet anvender den fulde bredde, men under brydningspunktet vil det begynde at skrumpe så proportionerne bibeholdes.", "Set the width of the dropbar content.": "Angiv bredden på droplinje indholdet.", "Set whether it's an ordered or unordered list.": "Angiv om det er en ordnet eller uordnet liste.", "Sets": "Sæt", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Hvis der kun angives én værdi, så bibeholdes de originale proportioner. Billedet vil blive skaleret og beskåret automatisk, og om muligt, vil høj-opløsningsbilleder blive auto-genereret.", "Setting Menu Items": "Indstillinger for menupunkter", "Setting the Blog Content": "Indstillinger for blogindhold", "Setting the Blog Image": "Indstillinger for blogbilledet", "Setting the Blog Layout": "Indstil blog layoutet", "Setting the Blog Navigation": "Indstil blognavigationen", "Setting the Dialog Layout": "Indstil dialoglayoutet", "Setting the Header Layout": "Indstil headerlayoutet", "Setting the Main Section Height": "Indstil hovedsektionshøjden", "Setting the Minimum Stability": "Indstil minimumsstabilitet", "Setting the Mobile Dialog Layout": "Indstil mobil dialog layout", "Setting the Mobile Header Layout": "Indstil mobil header layout", "Setting the Mobile Navbar": "Indstil den mobile navigationslinje", "Setting the Mobile Search": "Indstil den mobile søgning", "Setting the Module Appearance Options": "Indstil modulvisningensindstillinger", "Setting the Module Default Options": "Indstil modul standardindstillinger", "Setting the Module Grid Options": "Indstil modul gitterindstillinger", "Setting the Module List Options": "Indstil modul listeindstillinger", "Setting the Module Menu Options": "Indstil modul menuindstillinger", "Setting the Navbar": "Indstil navigationslinjen", "Setting the Page Layout": "Indstil sidelayoutet", "Setting the Post Content": "Indstil postindholdet", "Setting the Post Image": "Indstil postbilledet", "Setting the Post Layout": "Indstil postlayoutet", "Setting the Post Navigation": "Indstil postnavigationen", "Setting the Sidebar Area": "Indstil sidebjælkeområdet", "Setting the Sidebar Position": "Indstil sidebjælke placeringen", "Setting the Source Order and Direction": "Indstil kilde rækkefølgen og retningen", "Setting the Template Loading Priority": "Indstil skabelon indlæsningsprioriteten", "Setting the Template Status": "Indstil skabelonstatus", "Setting the Top and Bottom Areas": "Indstil top- og bundområder", "Setting the Top and Bottom Positions": "Indstil top- og bundeplaceringer", "Setting the Widget Appearance Options": "Indstil widget visningsindstillinger", "Setting the Widget Default Options": "Indstil widget standardindstillinger", "Setting the Widget Grid Options": "Indstil widget gitterindstillinger", "Setting the Widget List Options": "Indstil widget listeindstillinger", "Setting the Widget Menu Options": "Indstil widget menuindstillinger", "Setting the WooCommerce Layout Options": "Indstil WooCommerce layout indstillinger", "Settings": "Indstillinger", "Shop": "Shop", "Shop and Search": "Shop og søg", "Short Description": "Kort beskrivelse", "Show": "Vis", "Show %taxonomy%": "Vis %taxonomy%", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Vis et banner for at informere dine besøgende om cookies der anvendes af dit websted. Vælg mellem en simpel notifikation om at cookies bliver indlæst eller kræv et obligatorisk samtykke inden cookies indlæses.", "Show a divider between grid columns.": "Vis en skillelinje mellem gitterkolonner.", "Show a divider between list columns.": "Vis en skillelinje mellem listekolonner.", "Show a divider between text columns.": "Vis en skillelinje mellem tekstkolonner.", "Show a separator between the numbers.": "Vis en separator mellem numrene.", "Show archive category title": "Vis arkiv kategorititel", "Show as disabled button": "Vis som deaktiveret knap", "Show author": "Vis forfatter", "Show below slideshow": "Vis under slideshow", "Show button": "Vis knap", "Show categories": "Vis kategorier", "Show Category": "Vis kategori", "Show close button": "Vis luk knap", "Show comment count": "Vis kommentarantal", "Show comments count": "Vis kommentarantal", "Show content": "Vis indhold", "Show Content": "Vis indhold", "Show controls": "Vis kontrolknapper", "Show current page": "Vis aktuel side", "Show date": "Vis dato", "Show dividers": "Vis adskillere", "Show drop cap": "Vis stort første bogstav", "Show filter control for all items": "Vis filterkontroller for alle elementer", "Show headline": "Vis overskrift", "Show home link": "Vis forside link", "Show hover effect if linked.": "Vis hover effekt hvis linket.", "Show intro text": "Vis introtekst", "Show Labels": "Vis labels", "Show link": "Vis link", "Show lowest price": "Vis laveste pris", "Show map controls": "Vis kort kontrolknapper", "Show message": "Vis besked", "Show name fields": "Vis navnefelter", "Show navigation": "Vis navigation", "Show on hover only": "Vis kun ved hover", "Show optional dividers between nav or subnav items.": "Vis valgfrie opdelere mellem nav og subnavn elementer.", "Show or hide content fields without the need to delete the content itself.": "Vis eller skjul indholdsfelter uden at skulle slette selve indholdet.", "Show or hide fields in the meta text.": "Vis eller skjul felter i metateksten.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Vis eller skjul elementet på denne apparatbredde og større. Hvis alle elementer er skjulte, så vil kolonner, rækker og sektioner også være skjulte.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Vis eller skjul hjem linket som første element såvel som den aktuelle side som sidste element i sti-navigationen.", "Show or hide the intro text.": "Vis eller skjul introteksten.", "Show or hide the reviews link.": "Vis eller skjul vurderings linket.", "Show or hide title.": "Vis eller skjul titlen.", "Show out of stock text as disabled button for simple products.": "Vis ikke på lager tekst som en deaktiveret knap for simple produkter.", "Show parent icon": "Vis overordnet ikon", "Show points of interest": "Vis interessepunkter", "Show popup on load": "Vis popup ved indlæsning", "Show rating": "Vis vurdering", "Show result count": "Vis resultatantal", "Show result ordering": "Vis resultatsortering", "Show reviews link": "Vis vurderings link", "Show Separators": "Vis separatorer", "Show space between links": "Vis afstand mellem links", "Show Start/End links": "Vis start/slut links", "Show system fields for single posts. This option does not apply to the blog.": "Vis systemfelter for enkeltposter. Denne mulighed gælder ikke for bloggen.", "Show system fields for the blog. This option does not apply to single posts.": "Vis systemfelter for bloggen. Denne mulighed gælder ikke for enkeltposter.", "Show tags": "Vis tags", "Show Tags": "Vis tags", "Show the content": "Vis indholdet", "Show the excerpt in the blog overview instead of the post text.": "Vis excerpt in blog oversigten i stedet for post teksten.", "Show the image": "Vis billedet", "Show the link": "Vis linket", "Show the lowest price instead of the price range.": "Vis den laveste pris i stedet for prisområde.", "Show the menu text next to the icon": "Vis menuteksten ved siden af ikonet", "Show the meta text": "Vis metateksten", "Show the navigation label instead of title": "Vis navigationslabelen i stedet for titlen", "Show the navigation thumbnail instead of the image": "Vis navigationsminiaturen i stedet for billledet", "Show the sale price before or after the regular price.": "Vis udsalgsprisen før og efter den regulære pris.", "Show the subtitle": "Vis undertitlen", "Show the title": "Vis titlen", "Show title": "Vis titel", "Show Title": "Vis titel", "Shrink": "Skrump", "Sidebar": "Sidebjælke", "Single %post_type%": "Enkelt %post_type%", "Single Article": "Enkelt artikel", "Single Contact": "Enkelt kontakt", "Single Post": "Enkelt post", "Single Post Pages": "Enkelte postsider", "Site": "Websted", "Site Title": "Webstedstitel", "Sixths": "Sjettedele", "Sixths 1-5": "Sjettedele 1-5", "Sixths 5-1": "Sjettedele 5-1", "Size": "Størrelse", "Slide": "Slide", "Slide %s": "Slide %s", "Slide all visible items at once": "Slide alle synlige elementer på én gang", "Slide Bottom 100%": "Slide bund 100%", "Slide Bottom Medium": "Slide bund medium", "Slide Bottom Small": "Slide bund lille", "Slide Left": "Slide venstre", "Slide Left 100%": "Slide venstre 100%", "Slide Left Medium": "Slide venstre medium", "Slide Left Small": "Slide venstre lille", "Slide Right": "Slide højre", "Slide Right 100%": "Slide højre 100%", "Slide Right Medium": "Slide højre medium", "Slide Right Small": "Slide højre lille", "Slide Top": "Slide top", "Slide Top 100%": "Slide top 100%", "Slide Top Medium": "Slide top medium", "Slide Top Small": "Slide top lille", "Slidenav": "Slidenavn", "Slider": "Slider", "Slideshow": "Slideshow", "Slug": "Slug", "Small": "Lille", "Small (Phone Landscape)": "Lille (telefon landskab)", "Smart Search": "Smartsøgning", "Smart Search Item": "Smartsøgnings elementer", "Social": "Social", "Social Icons": "Sociale ikoner", "Social Icons Gap": "Sociale ikoner afstand", "Social Icons Size": "Sociale ikoner størrelse", "Soft-light": "Blød-lys", "Source": "Kilde", "Split Items": "Opdel elementer", "Split the dropdown into columns.": "Opdel dropdown i kolonner.", "Spread": "Spred", "Square": "Firkant", "Stable": "Stabil", "Stack columns on small devices or enable overflow scroll for the container.": "Stak kolonner på små apparater eller aktiver overflow rul for beholderen.", "Stacked": "Stakket", "Stacked (Name fields as grid)": "Stakket (navngiv felter som gitter)", "Stacked Center A": "Stakket center A", "Stacked Center B": "Stakket center B", "Stacked Center C": "Stakket center C", "Stacked Center Split A": "Stakket center opdel A", "Stacked Center Split B": "Stakket center opdel B", "Stacked Justify": "Stakket justeret", "Stacked Left": "Stakket venstre", "Start": "Start", "Start with all items closed": "Start med alle elementer lukket", "Starts with": "Starter med", "State or County": "Stat eller land", "Static": "Statisk", "Status": "Status", "Stick the navbar at the top of the viewport while scrolling or only when scrolling up.": "Klæb navbjælken til toppen af visningsområdet når der scrolles eller kun når der scrolles op.", "Sticky": "Klæbende", "Sticky Effect": "Klæbeffekt", "Sticky on scroll up": "Klæb ved rul op", "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.": "Den klæbende sektion vil blive dækket af den følgende sektion når der rulles. Afslår sektion ved forrige sektion.", "Stretch the dropdown to the width of the navbar or the navbar container.": "Stræk dropdown til bredden af navigationsbjælken eller navigationsbjælke beholderen.", "Stretch the panel to match the height of the grid cell.": "Stræk panelet til at matche højden på gittercellen.", "Striped": "Stripet", "Style": "Stil", "Sublayout": "Underlayout", "Subnav": "Undernavigation", "Subnav (Nav)": "Undernavigation (Navn)", "Subnav Divider (Nav)": "Undernavigations opdeler (Nav)", "Subnav Pill (Nav)": "Undernavigations pille (Nav)", "Subtitle": "Undertitel", "Success": "Succes", "Support": "Support", "Support Center": "Supportcenter", "SVG Color": "SVG farve", "Switch prices": "Skift priser", "Switcher": "Skifter", "Syntax Highlighting": "Fremhæv syntaks", "System Assets": "System-assets", "System Check": "Systemkontrol", "Tab": "Fane", "Table": "Tabel", "Table Head": "Tabelhoved", "Tablet Landscape": "Tablet landskab", "Tabs": "Faner", "Tag": "Tag", "Tag Item": "Tagelement", "Tag Order": "Tag rækkefølge", "Tagged Items": "Taggede elementer", "Tags": "Tags", "Tags are only loaded from the selected parent tag.": "Tags bliver kun indlæst fra det valgte overordnede tag.", "Tags Operator": "Tags-operator", "Target": "Mål", "Taxonomy Archive": "Taksonomi arkiv", "Teaser": "Teaser", "Telephone": "Telefon", "Template": "Skabelon", "Templates": "Skabeloner", "Term ID": "Term ID", "Term Order": "Term rækkefølge", "Tertiary": "Tertiær", "Text": "Tekst", "Text Alignment": "Tekstjustering", "Text Alignment Breakpoint": "Tekstjusterings brydningspunkt", "Text Alignment Fallback": "Tekstjusterings tilbagefald", "Text Bold": "Fed tekst", "Text Color": "Tekstfarve", "Text Large": "Stor tekst", "Text Lead": "Hovedtekst", "Text Meta": "Metatekst", "Text Muted": "Muted tekst", "Text Small": "Lille tekst", "Text Style": "Tekststil", "The Accordion Element": "Akkordeon elementet", "The Alert Element": "Advarselselementet", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "Animationen starter og stopper afhængigt af elementplaceringen i visningsområdet. Alternativt, anvend placeringen i den overordnede beholder.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.": "Animationen starter når element kommer ind i visningsområdet og slutter når det går ud af visningsområdet. Angiv eventuelt et start og slut offset, fx <code>100px</code>, <code>50vh</code> eller <code>50vh + 50%</code>. Procent relaterer til elementets højde.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "Animationen starter når elementet indtræder i visningsområdet og slutter når det forlader visningsområdet. Angiv eventuelt et start- og slut offset, fx <code>100px</code>, <code>50vh</code> eller <code>50vh + 50%</code>. Procent relaterer til målets højde.", "The animation starts when the row enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the row's height.": "Animationen starter når rækken indtræder på visningsområdet og slutter når den forlader visningsområdet. Angiv eventuelt et start. og slut offset, fx <code>100px</code>, <code>50vh</code> eller <code>50vh + 50%</code>. Procent relaterer til rækkens højde.", "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.": "Apache modulet <code>mod_pagespeed</code> kan medføre visningsproblemer på kortelementet med OpenStreetMap.", "The Area Element": "Områdelementet", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "Bjælken i toppen skubber indholdet ned, mens bjælken i bunden er låst fast over indholdet.", "The Breadcrumbs Element": "Sti elementet", "The builder is not available on this page. It can only be used on pages, posts and categories.": "Builderen er ikke tilgængelig på denne side. Den kan kun anvendes på sider, poster og kategorier.", "The Button Element": "Knapelementet", "The changes you made will be lost if you navigate away from this page.": "Ændringerne som du foretog vil være tabte hvis du navigerer væk fra denne side.", "The Code Element": "Kodelementet", "The Countdown Element": "Nedtællingselementet", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "Standardrækkefølgen følger rækkefølgen der er sat af parenteserne eller falder tilbage til standard filrækkefølgen sat af systemet.", "The Description List Element": "Beskrivelses listeelementet", "The Divider Element": "Opdelingselementet", "The Gallery Element": "Gallerielementet", "The Grid Element": "Gitterelementet", "The Headline Element": "Overskriftselementet", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Højden kan tilpasse til højden af visningsområdet. <br><br>Bemærk: Vær sikker på at der ikke er sat en højde under sektionsindstillingerne når du anvender en af visningsområdeindstillingerne.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Højden vil tilpasse sig automatisk, baseret på dets indhold. Alternativt, tilpasser højden sig til højden af visningsområdet. <br><br>Bemærk: Vær sikker på at ingen højde er sat under sektionsindstillingerne når der anvendes visningsområdeindstillingerne.", "The Icon Element": "Ikonelementet", "The Image Element": "Billedelementet", "The List Element": "LIstelementet", "The list shows pages and is limited to 50. Use the search to find a specific page or search for a post of any post type to give it an individual layout.": "Listen viser sider og dens grænse er sat til 50. Anvend søg for at finde en specifik side eller søg efter en post af enhver posttype for at give det et individuelt layout.", "The list shows uncategorized articles and is limited to 50. Use the search to find a specific article or an article from another category to give it an individual layout.": "Listen viser ukategoriserede artikler og grænse er sat til 50. Anvend søg for at finde en specifik artikel eller en artikel fra en anden kategori for at give det et individuelt layout.", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "Logoet placeres automatisk mellem elementerne. Eventuelt kan du angive antallet af elementer efter hvilke elementet deles op.", "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.": "Logo teksten vil blive anvendt, hvis der ikke er valgt et logobillede. Hvis et billede er valgt, så vil det blive anvendt som en aria-label attribut på linket.", "The Map Element": "Kortelementet", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "Murstenseffekten opretter et layout der er fri for mellemrum selvom gitterelementer har forskellige højder. ", "The minimum stability of the theme updates. Stable is recommended for production websites, Beta is only for testing new features and reporting issues.": "Minimums stabiliteten af temaopdateringer. Stabil anbefales for produktionswebsteder, Beta er kun til at teste ny funktionalitet og for at indberette problemer.", "The Module Element": "Modulelementet", "The module maximum width.": "Modul maksimumbredden.", "The Nav Element": "Nav elementet", "The Newsletter Element": "Nyhedsbrevselementet", "The Overlay Element": "Overlay elementet", "The Overlay Slider Element": "Overlay slide elementet", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "Siden er blevet opdateret af %modifiedBy%. Afvis dine ændringer og genindlæs?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "Siden som du aktuelt redigere er blevet opdateret af %modified_by%. Lagring af dine ændringer vil overskrive de forrige ændringer. Ønsker alligevel at gemme eller at afvise dine ændringer og indlæse siden?", "The Pagination Element": "Sideinddelingselementet", "The Panel Element": "Panelelementet", "The Panel Slider Element": "Panel slider elementet", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels.": "Parallax animationen flytter enkelt gitterkolonner ved forskellig hastighed imens der scolles. Definer det vertikale parallax offset i pixels.", "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.": "Parallax animationenen flytter enkelt gitterkolonner ved forskellig hastighed når der scrolles. Definer det vertikale parallax offset i pixels. Alternativt, flyt kolonner med forskellig højde indtil der justeres ens i bunden.", "The Popover Element": "Popover elementet", "The Position Element": "Placeringselementet", "The Quotation Element": "Citeringselementet", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "RSFirewall plugin'et ødelægger builder indholdet. Deaktiver funktionen <em>Konverter e-mailadresser fra rå tekst til billeder</em> i <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall konfigurationen</a>.", "The Search Element": "Søgelementet", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "SEBLOD plugin'et bevirker at builder er utilgængelig. Deaktiver funktionen <em>Skjul redigeringsikon</em> i <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD konfigurationen</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Slideshowet optager altid den fulde bredde, og højden vil tilpasses automatisk baseret på den definerede ratio. Alternativt, kan højden tilpasse sig til højden på visningsområdet. <br><br>Bemærk: Vær sikker på at der ikke er angivet en højde under sektionsindstillingerne når der anvendes en af visningsområdeindstillingerne.", "The Slideshow Element": "Slideshowelementet", "The Social Element": "Social elementet", "The Sublayout Element": "Underlayout elementet", "The Subnav Element": "Undernavigations elementet", "The Switcher Element": "Skifter elementet", "The System debug mode generates too much session data which can lead to unexpected behavior. Disable the debug mode.": "System fejlsøgningstilstanden genererer for meget sessionsdata, som kan føre til uventet opførsel. Deaktiver fejlsøgningstilstanden.", "The Table Element": "Tabelelementet", "The template is only assigned to %taxonomies% if the selected terms are set in the URL. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms.": "Skabelonen er kun tilknyttet til %taxonomies% hvis de valgte termer er sat i URL'en. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple termer.", "The template is only assigned to articles with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Skabelonen er kun tilknyttet til artikler med de valgte tags. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple tags.", "The template is only assigned to categories if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Skabelonen er kun tilknyttet til kategorier hvis de valgte tags er sat på menupunktet. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple tags.", "The template is only assigned to contacts with the selected tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Skabelonen er kun tilknyttet til kontakter med de valgte tags. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple tags.", "The template is only assigned to the selected pages.": "Skabelonen er kun tilknyttet til de valgte sider.", "The template is only assigned to the view if the selected tags are set in the menu item. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags.": "Skabelonen er kun tilknyttet til visningen hvis de valgte tags er sat på menupunktet. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple tags.", "The Text Element": "Tekstelementet", "The Totop Element": "Tiltop elementet", "The Video Element": "Videoelementet", "The Widget Element": "Widget elementet", "The widget maximum width.": "Widget maksimum bredden.", "The width of the grid column that contains the module.": "Bredden på gitterkolonnen som indeholder modulet.", "The width of the grid column that contains the widget.": "Bredden på gitterkolonnen som indeholder widget'en.", "The YOOtheme API key, which enables <span class=\"uk-text-nowrap\">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Account settings</a>.": "YOOtheme API nøglen, som aktiverer <span class=\"uk-text-nowrap\">1-kliks</span> opdateringer og adgang til layoutbiblioteket, mangler. Opret en API nøgle under dine <a href=\"https://yootheme.com/shop/my-account/websites/\" target=\"_blank\">Kontoindstillinger</a>.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "YOOtheme Pro temamappen blev omdøbt og har dermed ødelagt essentiel funktionalitet. Døb venligst temamappen tilbage til <code>yootheme</code>.", "Theme Settings": "Temaindstillinger", "Thirds": "Trededele", "Thirds 1-2": "Tredjedele 1-2", "Thirds 2-1": "Tredjedele 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Denne mappe gemmer billeder som du downloader når du anvende layouts fra YOOtheme Pro biblioteket. Den er placeret i Joomla billedmappen.", "This is only used, if the thumbnail navigation is set.": "Dette anvendes kun, hvis miniature navigationen er sat.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Dette layout inkluderer en mediefil som skal downloades til dit websteds mediebibliotek. |||| Dette layout inkluderer %smart_count% mediefiler som skal downloades til dit websteds mediebibliotek.", "This option doesn't apply unless a URL has been added to the item.": "Denne indstilling fælder ikke med mindre en URL er blevet tilføjet til elementet.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Denne indstilling gælder ikke med mindre en URL er blevet tilføjet til elementet. Kun elementindholdet vil blive linket.", "This option is only used if the thumbnail navigation is set.": "Denne indstilling gælder kun hvis miniaturenavigationen er sat.", "Thumbnail": "Miniature", "Thumbnail Inline SVG": "Miniature inline SVG", "Thumbnail SVG Color": "Miniature SVG farve", "Thumbnail Width/Height": "Miniature bredde/højde", "Thumbnail Wrap": "Miniature ombrydning", "Thumbnails": "Miniaturer", "Thumbnav": "Miniaturenav", "Thumbnav Inline SVG": "Miniaturenavn inline SVG", "Thumbnav SVG Color": "Miniaturenav SVG farve", "Thumbnav Wrap": "Miniaturenav ombrydning", "Tile Checked": "Boks markeret", "Tile Default": "Boks standard", "Tile Muted": "Boks muted", "Tile Primary": "Boks primær", "Tile Secondary": "Boks sekundær", "Time Archive": "Tids arkiv", "title": "titel", "Title": "Titel", "Title Decoration": "Titeldekoration", "Title Margin": "Titel margin", "Title Parallax": "Titel parallax", "Title Style": "Titelstil", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Titelstile kan være forskellige mht font-størrelse, men kan også være med en prædefineret farve, størrelse og font.", "Title Width": "Titelbredde", "Title, Image, Meta, Content, Link": "Titel, billede, meta, indhold, link", "Title, Meta, Content, Link, Image": "Titel, meta, indhold, link, billede", "To left": "Til venstre", "To right": "Til højre", "To Top": "Til top", "Toolbar": "Værkstøjslinje", "Toolbar Left End": "Værktøjslinje venstre slut", "Toolbar Left Start": "Værktøjslinje venstre start", "Toolbar Right End": "Værktøjslinje højre slut", "Toolbar Right Start": "Værktøjslinje højre start", "Top": "Top", "Top Center": "Top center", "Top Left": "Top venstre", "Top Right": "Top højre", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Top-, bund-, venstre- eller højrejusterede billeder kan vedhæftes til panelkanten. Hvis billedet er justeret til venstre eller højre, så vil det også udvides til at dække hele området.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Top-, venstre- eller højrejusterede billeder kan vedhæftes til panelkanten. Hvis billedet er justeret til venstre eller til højre, så vil det også udvides til at dække hele området.", "Total Views": "Totale visninger", "Touch Icon": "Touch ikon", "Transform": "Transformer", "Transform Origin": "Transformerings origin", "Transform the element into another element while keeping its content and settings. Unused content and settings are removed. Transforming into a preset only keeps the content but adopts all preset settings.": "Transformer element til et andet element mens dets indhold og indstillinger bibeholdes. Ubrugt indhold og indstillinger fjernes. Transformering til at presæt beholder kun indholdet med adopterer alle presæt indstillinger.", "Transition": "Transition", "Translate X": "Oversæt X", "Translate Y": "Oversæt Y", "Transparent Header": "Gennemsigtig header", "Tuesday, Aug 06 (l, M d)": "Tirsdag, Aug 06 (l, M d)", "Type": "Type", "ul": "ul", "Understanding Status Icons": "Forstå statusikoner", "Understanding the Layout Structure": "Forstå layoutstruktur", "Unknown %type%": "Ukendt %type%", "Unpublished": "Afpubliceret", "Updating YOOtheme Pro": "Opdaterer YOOtheme Pro", "Upload": "Upload", "Upload a background image.": "Upload et baggrundsbillede.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Upload et valgfrit billede som dækker siden. Det vil være fast når der scrolles.", "Upload Layout": "Opdater layout", "Upload Preset": "Upload presæt", "Upload Style": "Upload stil", "Upsell Products": "Mersalg af produkter", "Url": "URL", "URL Protocol": "URl protokol", "Use a numeric pagination or previous/next links to move between blog pages.": "Anvend en numerisk sideinddeling eller forrige/næste links til at skifte mellem blogsider.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Anvend en valgfri minimumshøjde ofr at forhindre billeder i at blive mindre end indholdet på små apparater.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Anvend en valgfri minimumshøjde for at forhindre slideren i at blive mindre end dets indhold på små apparater.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Anvend en valgfri minimumshøjde for at forhindre slideshowet i at blive mindre end dets indhold på små apparater.", "Use as breakpoint only": "Anvend kun som brydningpunkt", "Use double opt-in.": "Anvend dobbelt tilvalg.", "Use excerpt": "Anvend tekstuddrag", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Anvend baggrundsfarven i kombination med blandingstilstande, som et gennemsigtigt billede eller for at udfylde området hvis billedet i fylder hele siden.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Anvend baggrundsfarven i kombination med blandingstilstande, et gennemsigtigt billede eller for at udfylde området, hvis billedet ikke fylder hele sektionen.", "Use the background color in combination with blend modes.": "Anvend baggrundsfarven i kombination med blandingstilstande.", "User": "Bruger", "User Group": "Brugergruppe", "User Groups": "Brugergrupper", "Username": "Brugernavn", "Users": "Brugere", "Users are only loaded from the selected roles. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple roles.": "Brugere bliver kun indlæst fra det valgte roller. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple roller.", "Users are only loaded from the selected user groups. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple user groups.": "Brugere bliver kun indlæst fra de valgte brugergrupper. Anvend <kbd>shift</kbd> eller <kbd>ctrl/cmd</kbd> tasten for at vælge multiple brugergrupper.", "Using Advanced Custom Fields": "Anvend avancerede brugerdefinerede felter", "Using Content Fields": "Anvend indholdsfelter", "Using Content Sources": "Anvend indholdskilder", "Using Custom Fields": "Anvend brugerdefinerede felter", "Using Custom Post Type UI": "Anvend brugerdefineret post type UI", "Using Custom Post Types": "Anvend brugerdefinerede posttyper", "Using Custom Sources": "Anvend brugerdefinerede kilder", "Using Dynamic Conditions": "Anvend dynamiske betingelser", "Using Dynamic Multiplication": "Anvend dynamisk multiplikation", "Using Elements": "Anvend elementer", "Using External Sources": "Anvend eksterne kilder", "Using Images": "Anvend billeder", "Using Links": "Anvend links", "Using Menu Location Options": "Anvend menu lokationsindstillinger", "Using Menu Locations": "Anvend menulokationer", "Using Menu Position Options": "Anvend menu placeringsindstillinger", "Using Menu Positions": "Anvend menuplaceringer", "Using Module Positions": "Anvend modulplaceringer", "Using My Layouts": "Anvend mine layouts", "Using My Presets": "Anvend mine presæts", "Using Page Sources": "Anvend sidekilder", "Using Parent Sources": "Anvend overordnede kilder", "Using Powerful Posts Per Page": "Anvend kraftfuld poster per side", "Using Pro Layouts": "Anvend pro layouts", "Using Pro Presets": "Anvend pro presæts", "Using Related Sources": "Anvend relaterede kilder", "Using Site Sources": "Anvend webstedskilder", "Using the Before and After Field Options": "Anvend før og efter feltindstillingerne", "Using the Builder Module": "Anvend builder modulet", "Using the Builder Widget": "Anvend builder widget", "Using the Categories and Tags Field Options": "Anvend kategorier og tags felt indstillinger", "Using the Content Field Options": "Anvend indholds feltindstillinger", "Using the Content Length Field Option": "Anvend indholdslænge felt indstillinger", "Using the Contextual Help": "Anvend den kontekstuelle hjælp", "Using the Date Format Field Option": "Anvend datoformat felt indstillinger", "Using the Device Preview Buttons": "Anvend apparat forhåndsvis knapper", "Using the Dropdown Menu": "Anvend dropdown menu", "Using the Element Finder": "Anvend element finder", "Using the Footer Builder": "Anvend sidefodsbygger", "Using the Media Manager": "Anvend mediemanager", "Using the Mega Menu Builder": "Anvend mega menu byggeren", "Using the Menu Module": "Anvend menumodulet", "Using the Menu Widget": "Anvend menuwidget", "Using the Meta Field Options": "Anvend meta felt indstillinger", "Using the Page Builder": "Anvend side byggeren", "Using the Search and Replace Field Options": "Anvend søg og erstat felt indstillingen", "Using the Sidebar": "Anvend sidebjælken", "Using the Tags Field Options": "Anvend tags felt indstillinger", "Using the Teaser Field Options": "Anvend teaser felt indstillinger", "Using the Toolbar": "Anvend værktøjslinjen", "Using the Unsplash Library": "Anvend unsplash biblioteket", "Using the WooCommerce Builder Elements": "Anvend WooCommerce bygger elementer", "Using the WooCommerce Page Builder": "Anvend WooCommerce sideopbygger", "Using the WooCommerce Pages Element": "Anvend WooCommerce sideelementer", "Using the WooCommerce Product Stock Element": "Anvend WooCommerce produkt lager element", "Using the WooCommerce Products Element": "Anvend WooCommerce produkter element", "Using the WooCommerce Related and Upsell Products Elements": "Anvend WooCommerce elementet relaterede og mersalgs produkter", "Using the WooCommerce Style Customizer": "Anvend WooCommerce stileditor", "Using the WooCommerce Template Builder": "Anvend WooCommerce skabelonbygger", "Using Toolset": "Anvend værktøjssæt", "Using Widget Areas": "Anvend widgetområder", "Using WooCommerce Dynamic Content": "Anvend WooCommerce dynamisk indhold", "Using WordPress Category Order and Taxonomy Terms Order": "Anvend WordPress kategorirækkefølge og taksonomi termer rækkefølge", "Using WordPress Popular Posts": "Anvend WordPress populære poster", "Using WordPress Post Types Order": "Anvend WordPress posttyper rækkefølge", "Value": "Værdi", "Values": "Værdier", "Variable Product": "Variabelt produkt", "Velocity": "Hastighed", "Version %version%": "Version %version%", "Vertical": "Vertikal", "Vertical Alignment": "Vertikal justering", "Vertical navigation": "Vertikal navigation", "Vertically align the elements in the column.": "Vertikal justering af elementerne i kolonnen.", "Vertically center grid items.": "Vertikal centrering af gitterelementer.", "Vertically center table cells.": "Vertikal centrering af tabelceller.", "Vertically center the image.": "Vertikal centrering af billedet.", "Vertically center the navigation and content.": "Vertikal centrering af navigationen og indholdet.", "Video": "Video", "Videos": "Videoer", "View Photos": "Vis fotos", "Viewport": "Visningsområde", "Viewport Height": "Visningsområde højde", "Visibility": "Synlighed", "Visible Large (Desktop)": "Synlighed stor (desktop)", "Visible Medium (Tablet Landscape)": "Synlighed medium (tablet landskab)", "Visible on this page": "Synlig på denne side", "Visible Small (Phone Landscape)": "Synlighed lille (telefon landskab)", "Visible X-Large (Large Screens)": "Synlighed XL (store skærme)", "Visual": "Visuel", "Votes": "Stemmer", "Warning": "Advarsel", "Website": "Websted", "Website Url": "Websteds URL", "What's New": "Hvad er nyt", "When using cover mode, you need to set the text color manually.": "Når du anvender cover tilstand, så skal du angive tekstfarven manuelt.", "Whole": "Hele", "Widget": "Widget", "Widget Area": "Widgetområde", "Widgets": "Widgets", "Width": "Bredde", "Width 100%": "Bredde 100%", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Bredde og højde vil blive ombyttet som det passer, hvis billedet er i portræt- eller landskabsformat.", "Width/Height": "Bredde/højde", "With mandatory consent": "Med obligatorisk samtykke", "Woo Notices": "Woo bemærkninger", "Woo Pages": "Woo sider", "WooCommerce": "WooCommerce", "Working with Multiple Authors": "Arbejde med multiple forfattere", "X": "X", "X-Large": "XL", "X-Large (Large Screens)": "XL (store skærme)", "X-Small": "XS", "Y": "Y", "Year Archive": "Års arkiv", "YOOtheme API Key": "YOOtheme API nøgle", "YOOtheme Help": "YOOtheme hjælp", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro er fuldt operationel og klar til at gå i gang.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro er ikke operationel. Alle kritiske problemer skal rettes.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro er operationel, men der er problemer som skal rettes for at låse op for funktioner og forbedre performance.", "Z Index": "Z indeks", "Zoom": "Zoom" }theme/languages/th_TH.json000064400000105672151666572150011546 0ustar00{ "- Select -": "- เลือก -", "- Select Module -": "- เลือกโมดูล -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" ไลบารี่มีอยู่แล้ว และจะถูกเขียนทับเมื่อบันทึก", "%label% Position": "%label% ตำแหน่ง", "%smart_count% File |||| %smart_count% Files": "%smart_count% ไฟล์ |||| %smart_count% ไฟล์", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% ไฟล์ ที่เลือก |||| %smart_count% ไฟล์ ที่เลือก", "About": "เกี่ยวกับ", "Accordion": "แอคคอเดียน", "Add": "เพิ่ม", "Add a colon": "เพิ่มโคลอน", "Add Element": "เพิ่มอิลีเม้นท์", "Add Folder": "เพิ่มโฟลเดอร์", "Add Item": "เพิ่มไอเทม", "Add Menu Item": "เพิ่มเมนู", "Add Module": "เพิ่มโมดูล", "Add Row": "เพิ่มแถว", "Add Section": "เพิ่มเซคชั่น", "Advanced": "ขั้นสูง", "Alert": "เตือน", "Align image without padding": "วางตําแหน่งภาพโดยไม่มีช่องว่าง", "Align the image to the left or right.": "วางตําแหน่งภาพไปทางซ้ายหรือขวา", "Align the image to the top, left, right or place it between the title and the content.": "วางตําแหน่งภาพไปด้านบนซ้ายขวาหรือวางไว้ระหว่างชื่อเรื่องและเนื้อหา", "Alignment": "การจัดวาง", "Alignment Breakpoint": "การจัดตำแหน่งเบรกพอยต์", "Alignment Fallback": "การจัดตำแหน่งสำรอง", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "ภาพทุกภาพอยู่ภาใบอนุญาต <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> ซึ่งหมายความว่าคุณสามารถคัดลอกแก้ไขแจกจ่ายและใช้ภาพฟรีรวมทั้งวัตถุประสงค์ทางการค้าโดยไม่ขออนุญาต", "All layouts": "รูปแบบทั้งหมด", "All topics": "ทุกหัวข้อ", "All types": "ทุกชนิด", "All websites": "ทุกเว็บไซต์", "Allow multiple open items": "อนุญาตให้รายการทั้งหมด เปิด", "Animation": "อนิเมชั่น", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "ใส่อนิเมชั่นให้กับอิลีเม้นท์", "Author": "ผู้เขียน", "Author Link": "ลิ้งค์ผู้เขียน", "Auto-calculated": " คำนวณ-อัตโนมัติ", "Back": "ย้อนกลับ", "Background Color": "สีพื้นหลัง", "Behavior": "การแสดง", "Blend Mode": "โหมดการผสมผสาน", "Blur": "เบลอ", "Bottom": "ปุ่ม", "Builder": " ตัวสร้างรูปแบบ", "Button": "ปุ่ม", "Button Size": "ขนาดปุ่ม", "Buttons": "ปุ่ม", "Cache": "แคช", "Cancel": "ยกเลิก", "Center": "ตรงกลาง", "Center the module": "กลางโมดูล", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "การวางแนวศูนย์ซ้ายและขวาอาจขึ้นอยู่กับ breakpoint", "Changelog": "ข้อมูลการเปลี่ยนแปลง", "Choose a divider style.": "เลือกรูปแบบ เส้นแบ่ง", "Choose a map type.": "เลือกชนิดของแผนที่", "Choose Font": "เลือกตัวหนังสือ", "Choose the icon position.": "เลือกตำแหน่งไอคอน", "Class": "คลาส", "Clear Cache": "ล้างแคช", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "ล้างภาพและเนื้อหาที่แคชไว้ รูปภาพที่ต้องปรับขนาดจะถูกจัดเก็บไว้ในโฟลเดอร์แคชของธีม หลังจากอัปโหลดภาพที่มีชื่อเดียวกันแล้วคุณจะต้องล้างข้อมูล ", "Close": "ปิด", "Code": "โค้ด", "Color": "สี", "Columns": "คอลัมน์", "Columns Breakpoint": "คอลัมน์ Breakpoint", "Components": "คอมโพเน้น", "Content": "เนื้อหา", "content": "เนื้อหา", "Controls": "ควบคุม", "Copy": "คัดลอก", "Custom Code": "โค้ดที่กำหนดเอง", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "ตกแต่งหัวเรื่องด้วย เส้นแบ่ง, บูลเล็ต หรือเส้น ตรงกลางกับส่วนหัว", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "ตกแต่งหัวเรื่องด้วย เส้นแบ่ง, บูลเล็ต หรือเส้น ตรงกลางกับส่วนหัว", "Decoration": "ตกแต่ง", "Define a unique identifier for the element.": "ชื่อต้องไม่ซ้ำกัน", "Define an alignment fallback for device widths below the breakpoint.": "กำหนด fallback การปรับแนวสำหรับความกว้างของอุปกรณ์ที่อยู่ด้านล่าง breakpoint.", "Define one or more class names for the element. Separate multiple classes with spaces.": "กำหนดคลาส ให้อิลีเม้นท์ หากมีหลาบคลาสให้ใช้เว้นวรรค", "Define the alignment in case the container exceeds the element max-width.": "กำหนดความกว้างของอิลีเม้นท์", "Define the device width from which the alignment will apply.": "กำหนดความกว้างของอุปกรณ์ที่ต้องการใช้การจัดตำแหน่ง", "Delete": "ลบ", "Description List": "รายการรายละเอียด", "Desktop": "เดสก์ทอป", "Determine how the image or video will blend with the background color.": "ตรวจสอบว่าภาพหรือวิดีโอจะกลมกลืนกับสีพื้นหลังได้อย่างไร", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "ตรวจสอบว่ารูปภาพจะพอดีกับส่วนของส่วนโดยการตัดหรือโดยการเติมพื้นที่ว่างด้วยสีพื้นหลัง", "Display": "แสดง", "Display a divider between sidebar and content": "แสดงแส้นแบ่งระหว่าง ไซด์บาร์และเนื้อหา", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "แสดงเมนูโดยเลือกตำแหน่งที่ควรจะปรากฏ ตัวอย่างเช่นเผยแพร่เมนูหลักในตำแหน่ง navbar และเมนูอื่นในตำแหน่งบนอุปกรณ์เคลื่อนที่", "Display icons as buttons": "แสดงไอคอนเป็นปุ่ม", "Display on the right": "แสดงทางด้านขวา", "Display the breadcrumb navigation": "แสดง breadcrumb", "Display the first letter of the paragraph as a large initial.": "แสดงตัวหนังสือตัวแรกใหญ่", "Display the image only on this device width and larger.": "แสดงรูปเฉพาะหน้าจอกว้างและใหญ่", "Display the module only from this device width and larger.": "แสดงโมดูลในหน้าจอกว้างและใหญ่เท่านั้น", "Divider": "เส่นแบ่ง", "Download": "ดาวน์โหลด", "Drop Cap": "อักษรตัวแรกใหญ่", "Dropdown": "ดรอปดาวน์", "Edit": "แก้ไข", "Edit %title% %index%": "แก้ไข %title% %index%", "Edit Items": "แก้ไชไอเทม", "Edit Menu Item": "แก้ไขเมนูไอเทม", "Edit Module": "แก้ไขโมดูล", "Edit Settings": "แกไขการตั้งค่า", "Enable autoplay": "เล่นอัตโนมัติ", "Enable drop cap": "เปิดใช้ตัวหนังสือตัวแรกใหญ่", "Enable map dragging": "เปิดใช้การลากบนแผนที่", "Enable map zooming": "เปิดใช้การซูมแผนที่", "Enter a subtitle that will be displayed beneath the nav item.": "ป้อนคำบรรยายที่จะแสดงอยู่ใต้เมนู", "Enter an optional footer text.": "ป้อนข้อความส่วนท้ายของเว็บ", "Enter an optional text for the title attribute of the link, which will appear on hover.": "ป้อนข้อความเสริมสำหรับแอตทริบิวต์ title ของลิงก์ซึ่งจะปรากฏตอน Hover", "Enter the author name.": "ใส่ชื่อผู้เขียน", "Enter the image alt attribute.": "ใส่ข้อความอธิบายรูป", "Enter the text for the link.": "ใส่ข้อความอธิบาลิ้งค์", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "ใส่ <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key ", "Error: %error%": "มีข้อผิดพลาด: %error%", "Extend all content items to the same height.": "ขยายรายการเนื้อหาให้มีความสูงเท่ากัน", "Favicon": "แฟวิคอน", "Fix the background with regard to the viewport.": "แก้ไขพื้นหลังเกี่ยวกับวิวพอร์ต", "Fixed-Inner": "ด้านในคงที่", "Fixed-Left": "ด้านซ้ายคงที่", "Fixed-Outer": "ด้านนอกคงที่", "Fixed-Right": "ด้านขวาคงที่", "Folder Name": "ชื่อโฟลเดอร์", "Footer": "ส่วนล่างเว็บ", "Full width button": "ปุ่มความกว้างเต็ม", "Gallery": "แกลลอรี่", "Gamma": "แกมมา", "General": "ทั่วไป", "Google Analytics": "กูเกิล แอนะลิติกส์", "Google Fonts": "กูเกิล ฟอนต์", "Google Maps": "แผนที่กูเกิล ", "Grid": "กริด", "Grid Width": "ความกว้างกริด", "Halves": "ครึ่ง", "Header": "ส่วนหัว", "Headline": "หัวข้อ", "Headline styles differ in font size and font family.": "หัวข้อแตกต่างกันในขนาดตัวอักษร แต่อาจมีสีขนาดและแบบอักษรที่กำหนดไว้ล่วงหน้า", "Height": "ความสูง", "Hide marker": "ซ่อน เครื่องหมาย", "Home": "หน้าแรก", "Horizontal Center": "ตรงกลางแนวนอน", "Horizontal Left": "ซ้ายแนวนอน", "Horizontal Right": "แนวนอนชิดขวา", "HTML Element": "HTML อิลีเม้นท์", "Icon": "ไอคอน", "Icon Color": "ไอคอนสี", "ID": "ไอดี", "Image": "รูป", "Image Alignment": "การจัดวางรูป", "Image Alt": "ข้อความอธิบายรูป", "Image Attachment": "แนบรูปภาพ", "Image Box Shadow": "เงาของกรอบรูป", "Image Height": "ความสูงของรูป", "Image Position": "ตำหน่งรูป", "Image Size": "ขนาดรูป", "Image Width": "ความกว้างรูปภาพ", "Image/Video": "รูป/วีดีโอ", "Inset": "ใส่", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "แทนที่จะใช้ภาพที่กำหนดเองคุณสามารถคลิกที่ดินสอเพื่อเลือกไอคอนจากคลังไอคอน", "Inverse Logo (Optional)": "โลโก้ Inverse (ไม่บังคับ)", "Inverse the text color on hover": "สลับสีข้อควาเมื่อเม้าส์ชี้", "Item": "ไอเทม", "Items": "ไอเทม", "Large (Desktop)": "ใหญ่ (Desktop)", "Large Screens": "จอใหญ่", "Larger padding": "ระยะห่างขนาดใหญ่", "Layout": "รูปแบบ", "Left": "ซ้าย", "Library": "คลัง", "Lightness": "สีสว่าง", "Link": "ลิ้งค์", "Link Style": "รูปแบบลิ้งค์", "Link Text": "ข้อความลิ้งค์", "Link Title": "ชื่อลิ้งค์", "List": "รายการ", "List Style": "รูปแบบรายการ", "Location": "สถานที่ตั้ง", "Logo Image": "รูปโลโก้", "Logo Text": "ข้อความโลโก้", "Loop video": "เล่นวีดีโอวน", "Map": "แผนที่", "Margin": "ขอบนอก", "Marker": "เครื่องหมาย", "Match content height": "ตรงกับความสูงเนื้อหา", "Match height": "ตรงกับความสูง", "Match Height": "ความสูงเท่ากัน", "Max Width": "ตรงกับความกว้าง", "Max Width (Alignment)": "ความกว้างสูงสุด (Alignment)", "Medium (Tablet Landscape)": "ปานกลาง (แท็บเล็ตแนวนอน)", "Menu": "เมนู", "Menu Style": "รูปแบบเมนู", "Meta": "เมต้า", "Meta Alignment": "ตำแหน่งเมต้า", "Meta Margin": "ระยะห่างขอบเมต้า", "Meta Style": "รูปแบบเมต้า", "Mobile": "มือถือ", "Mobile Logo (Optional)": "โลโก้บนเมือถือ", "Mode": "โหมด", "Move the sidebar to the left of the content": "ย้าย ไซด์บาร์ ไปทางซ้ายของเนื้อหา", "Name": "ชื่อ", "Navbar": "เมนูบาร์", "Navigation": "การนำทาง", "Navigation Label": "ป้ายกำกับเมนู", "Navigation Thumbnail": "รูปย่อการนำทาง", "New Menu Item": "สร้างไอเทมเมนู", "New Module": "สร้างโมดูล", "No files found.": "ไม่มีไฟล์ ไม่พบไฟล์", "No font found. Press enter if you are adding a custom font.": "ไม่พบไฟล์ โปรดใส่ฟอนต์เอง", "No layout found.": "ไม่มีรูปแบบ", "Offcanvas Mode": "โหมด Offcanvas", "Open in a new window": "เปิดหน้าต่างใหม่", "Open the link in a new window": "เปิดลิ้งค์ในหน้าต่างใหม่", "Order": "ลำดับ", "Overlap the following section": "ซ้อนทับเซกชั่นนี้", "Overlay": "โอเวอร์เลย์", "Overlay Color": "ซ้อนสี(Overlay)", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "แทนที่การตั้งค่าภาพเคลื่อนไหวของส่วน ตัวเลือกนี้จะไม่มีผลใด ๆ ยกเว้นกรณีที่มีการเปิดใช้ภาพเคลื่อนไหวสำหรับส่วนนี้", "Padding": "ระยะห่าง", "Panel": "พาเนล", "Panels": "พาเนล", "Phone Landscape": "มือถือแนวนอน", "Phone Portrait": "มือถือแนวตั้ง", "Placeholder Image": "รูปภาพตัวยึดตำแหน่ง", "Position": "ตำแหน่ง", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "ตำแหน่งของการนำทาง บน ล่าง ซ้าย หรือขวา", "Poster Frame": "กรอบโปสเตอร์", "Preview all UI components": "แสดง UI ทั้งหมด", "Quarters": "ควอเตอร์", "Quarters 1-1-2": "ควอเตอร์ 1-1-2", "Quarters 1-2-1": "ควอเตอร์ 1-2-1", "Quarters 1-3": "ควอเตอร์ 1-3", "Quarters 2-1-1": "ควอเตอร์ 2-1-1", "Quarters 3-1": "ควอเตอร์ 3-1", "Quotation": "อ้างอิง", "Remove bottom margin": "ลบระยะห่างด้านล่าง", "Remove bottom padding": "ลบระยะห่างด้านล่าง", "Remove top margin": "ลบระยะห่างด้านบน", "Remove top padding": "ลบระยะห่างด้านบน", "Reset to defaults": "รีเซ็ตเป็นค่าเริ่มต้น", "Row": "แถว", "Saturation": "ความอิ่มตัว", "Save": "บันทึก", "Save %type%": "บันทึก %type%", "Save Layout": "บันทึกรูปแบบ", "Script": "สคริปต์", "Search": "ค้นหา", "Search Style": "รูปแบบค้นหา", "Section": "เซกชั่น", "Select": "เลือก", "Select a grid layout": "เลือกรูปแบบกริด", "Select a predefined meta text style, including color, size and font-family.": "เลือกรูปแบบข้อความเมตา สี ขนาดและแบบอักษร", "Select a predefined text style, including color, size and font-family.": "เลือกรูปแบบข้อความ สี ขนาดและแบบอักษร", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "เลือกวีดีโอจาก ลิ้งค์ <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> หรือ <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "เลือกโลโก้อื่นที่มีสีแตกต่างเช่น ขาวเพื่อการมองเห็นที่ดีขึ้นบนพื้นหลังสีเข้ม ระบบจะแสดงโดยอัตโนมัติหากจำเป็น", "Select an alternative logo, which will be used on small devices.": "เลือกโลโก้อื่นซึ่งจะใช้กับอุปกรณ์ขนาดเล็ก", "Select an animation that will be applied to the content items when toggling between them.": "เลือกการเคลื่อนไหวที่จะถูกเพิ่มลงในไอเท็มเนื้อหาเมื่อสลับระหว่างรูปภาพเหล่านั้น", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "เลือกภาพที่จะปรากฏขึ้นจนกว่าวิดีโอจะเล่น หากไม่ได้เลือกเฟรมวิดีโอแรกจะแสดงเป็นกรอบโปสเตอร์", "Select header layout": "เลือกรูปแบบส่วนหัว", "Select Image": "เลือกรูป", "Select the icon color.": "เลือกสีไอคอน", "Select the image border style.": "เลือกรูปแบบของกรอบ", "Select the image box shadow size on hover.": "เลือกเงาของกรอบ", "Select the image box shadow size.": "เลือกเงาของกรอบ", "Select the link style.": "เลือกรูปแบบของลิ้งค์", "Select the list style.": "เหลือรูปแบบรายการ", "Select the position that will display the search.": "เลือกตำแหน่งที่จะแสดงช่องค้นหา", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "ลือกตำแหน่งที่จะแสดงโซเชียลไอคอนอย่าลืมเพิ่มลิงก์โปรไฟล์โซเชียลของคุณห", "Select the search style.": "เลือกรูปแบบช่องค้นหา", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "เลือกรูปแบบเน้นไคำของโค้ด ใช้ GitHub สำหรับแสงและ Monokai สำหรับพื้นหลังที่มืด", "Select the subnav style.": "เลือกรูปแบบเมนูย่อย", "Select the title style and add an optional colon at the end of the title.": "เลือกรูปแบบชื่อเรื่อง", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "กำหนดความกว้างของแถบด้านข้างเป็นเปอร์เซ็นต์และคอลัมน์เนื้อหาจะปรับตาม ความกว้างจะไม่ต่ำกว่าความกว้างต่ำสุดของแถบด้านข้างซึ่งคุณสามารถตั้งค่าได้ในส่วนสไตล์", "Set an additional transparent overlay to soften the image or video.": "ตั้งค่าการซ้อนทับโปร่งใสเพิ่มเติมเพื่อทำให้ภาพหรือวิดีโอ", "Set how the module should align when the container is larger than its max-width.": "ตั้งค่าวิธีการจัดตำแหน่งโมดูลเมื่อคอนเทนเนอร์มีขนาดใหญ่กว่าความกว้างสูงสุด", "Set light or dark color mode for text, buttons and controls.": "ตั้งค่าโหมดสีอ่อนหรือสีเข้มสำหรับข้อความปุ่มและตัวควบคุม", "Set the breakpoint from which the sidebar and content will stack.": "ตั้งเบรกพอยต์จากแถบด้านข้างและเนื้อหาสแต็ค", "Set the button size.": "ตั้งค่าขนาดปุ่ม", "Set the button style.": "ตั้งค่าลักษณะปุ่ม", "Set the icon color.": "ตั้งค่าสีไอคอน", "Set the initial background position, relative to the section layer.": "ตั้งค่าตำแหน่งพื้นหลังเริ่มต้นเทียบกับเลเยอร์ส่วน", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "ตั้งค่าความละเอียดเริ่มต้นที่จะแสดงแผนที่ 0 ซูมออกอย่างเต็มที่และ 18 ที่ความละเอียดสูงสุดซูมเข้า", "Set the link style.": "ตั้งค่าลักษณะลิงก์", "Set the maximum content width.": "กำหนดความกว้างเนื้อหาสูงสุด", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "กำหนดความกว้างเนื้อหาสูงสุด หมายเหตุ: ส่วนนี้อาจมีความกว้างสูงสุดแล้วซึ่งคุณไม่สามารถเกินได้", "Set the padding between sidebar and content.": "ตั้งระยะห่างระหว่างแถบด้านข้างและเนื้อหา", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "ตั้งค่าขอบแนวตั้ง หมายเหตุ: ส่วนขอบด้านบนขององค์ประกอบแรกและขอบด้านล่างขององค์ประกอบสุดท้ายจะถูกลบออกเสมอ กำหนดผู้ที่อยู่ในการตั้งค่าของตารางแทน", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "ตั้งค่าขอบแนวตั้ง หมายเหตุ: ขอบด้านบนของตารางแรกและขอบด้านล่างของกริดสุดท้ายจะถูกลบออกเสมอ กำหนดผู้ที่อยู่ในส่วนการตั้งค่าแทน", "Set the vertical padding.": "ตั้งระยะห่างแนวตั้ง", "Set the video dimensions.": "ตั้งขนาดวีดีโอ", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "กำหนดความกว้างและความสูงเป็นพิกเซล (เช่น 600) การตั้งค่าเพียงค่าเดียวจะช่วยรักษาสัดส่วนเดิมไว้ ภาพจะถูกปรับขนาดและตัดโดยอัตโนมัติ", "Settings": "ตั้งค่า", "Show map controls": "แสดงตัวควบคุมแผนที่", "Show or hide content fields without the need to delete the content itself.": "แสดงหรือซ่อนเขตเนื้อหาโดยไม่จำเป็นต้องลบเนื้อหา", "Show popup on load": "แสดงป๊อปอัปเมื่อโหลด", "Show the content": "แสดงเนื้อหา", "Show the image": "แสดงรูปภาพ", "Show the link": "แสดงลิงก์", "Show the menu text next to the icon": "แสดงข้อความเมนูติดกับไอคอน", "Show the meta text": "แสดงข้อความเมตา", "Show the title": "แสดงชื่อ", "Show title": "แสดงชื่อ", "Show Title": "แสดงชื่อ", "Sidebar": "แถบด้านข้าง", "Site": "เว็บไซต์", "Size": "ขนาด", "Small (Phone Landscape)": "เล็ก (มือถือแนวนอน)", "Social": "โซเชียล", "Split the dropdown into columns.": "แบ่งเมนูเป็นคอลัมน์", "Spread": "แพร่กระจาย", "Stacked Center A": "Stacked กลาง A", "Stacked Center B": "Stacked กลาง B", "Stretch the panel to match the height of the grid cell.": "เพื่อให้ตรงกับความสูงของเซลล์ตาราง", "Style": "รูปแบบ", "Subnav": "เมนูย่อย", "Subtitle": "หัวข้อรอง", "Table": "ตาราง", "Tablet Landscape": "แท็บเล็ตแนวนอน", "Text": "ข้อความ", "Text Color": "สีข้อความ", "Text Style": "รูปแบบข้อความ", "The changes you made will be lost if you navigate away from this page.": "การเปลี่ยนแปลงที่คุณทำจะหายไปหากคุณออกจากหน้านี้", "The module maximum width.": "ความกว้างสูงสุดของโมดูล", "The width of the grid column that contains the module.": "ความกว้างของคอลัมน์ตารางที่มีโมดูล", "Thirds": "สาม", "Thirds 1-2": "สาม 1-2", "Thirds 2-1": "สาม 2-1", "This is only used, if the thumbnail navigation is set.": "ใช้เฉพาะรูปย่อการนำทาง", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "รูปแบบนี้ประกอบด้วยภาพที่ต้องการดาวน์โหลดลงในไลบรารีสื่อของเว็บไซต์ของคุณ |||| รูปแบบประกอบด้วย %smart_count% ภาพที่ต้องดาวน์โหลดลงในไลบรารีสื่อของเว็บไซต์ของคุณ", "This option is only used if the thumbnail navigation is set.": "ใช้เฉพาะรูปย่อการนำทาง", "Thumbnails": "รูปย่อ", "Title": "ชื่อเรื่อง", "title": "ชื่อเรื่อง", "Title Decoration": "การตกแต่งชื่อเรื่อง", "Title Style": "รูปแบบชื่อเรื่อง", "Title styles differ in font-size but may also come with a predefined color, size and font.": "หัวข้อแตกต่างกันในขนาดตัวอักษร แต่อาจมีสีขนาดและแบบอักษรที่กำหนดไว้ล่วงหน้า", "To Top": "กลับไปข้างบน", "Toolbar": "ทูลบาร์", "Top": "บน", "Touch Icon": "ไอคอนสัมผัส", "Transparent Header": "ส่วนหัวที่โปร่งใส", "Type": "ชนิด", "Upload": "อัปโหลด", "Upload a background image.": "อัปโหลดรูปพื้นหลัง", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "อัปโหลดภาพพื้นหลังที่เป็นตัวเลือกซึ่งครอบคลุมหน้าเว็บ จะได้รับการแก้ไขขณะเลื่อน", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "ใช้สีพื้นหลังร่วมกับโหมดผสมผสานภาพที่โปร่งใสหรือเพื่อเติมพื้นที่ถ้าภาพไม่ครอบคลุมทั้งส่วน", "Version %version%": "ตัวแปร %version%", "Vertical Alignment": "การจัดแนวแนวตั้ง", "Video": "วีดีโอ", "Visibility": "แสดง", "Visible on this page": "แสดงในหน้านี้", "Whole": "ทั่วไป", "Width": "กว้าง", "X-Large (Large Screens)": "X-Large (จอกว้าง)", "Zoom": "ซูม" }theme/languages/ar_AA.json000064400000011447151666572150011477 0ustar00{ "- Select -": "- اختر -", "- Select Module -": "- حدد الوحدة -", "- Select Position -": " - اختر الموضع -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" متواجد مسبقا في المكتبة. سيتم استبداله عند الحفظ.", "%label% Position": "موضع %label%", "About": "حول", "Accordion": "الأكورديون", "Add": "إضافة", "Add a colon": "اضافة عمود", "Add a leader": "أضف زعيم", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "إضافة تأثير المنظر أو إصلاح الخلفية فيما يتعلق بإطار العرض أثناء التمرير.", "Add a parallax effect.": "إضافة تأثير المنظر.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "أضف JavaScript خاص لموقعك. لا داعي لإضافة وسم <script>.", "Add Element": "إضافة عنصر", "Add extra margin to the button.": "أضف هامش إضافي إلى الزر.", "Add Folder": "إضافة مجلد", "Add Item": "إضافة عنصر", "Add Menu Item": "إضافة عنصر القائمة", "Add Module": "إضافة وحدة", "Add Row": "إضافة سطر", "Add Section": "إضافة مقطع", "Advanced": "المتقدمة", "After Submit": "بعد إرسال", "Alert": "محزر", "Align image without padding": "محاذاة الصورة دون الحشو", "Align the filter controls.": "محاذاة عناصر تحكم عامل التصفية.", "Align the image to the left or right.": "قم بمحاذاة الصورة إلى اليسار أو اليمين.", "Align the image to the top, left, right or place it between the title and the content.": "قم بمحاذاة الصورة إلى الأعلى أو اليسار أو اليمين أو ضعها بين العنوان والمحتوى.", "Align the section content vertically, if the section height is larger than the content itself.": "قم بمحاذاة محتوى القسم رأسيًا ، إذا كان ارتفاع القسم أكبر من المحتوى نفسه.", "Alignment": "انتقام", "Alignment Breakpoint": "محاذاة Breakpoint", "Alignment Fallback": "محاذاة الاحتياطي", "All backgrounds": "كل الخلفيات", "All colors": "جميع الالوان", "All Items": "جميع المواد", "All layouts": "كل التصاميم", "All styles": "كل الأنماط", "All types": "كل الانواع", "All websites": "جميع المواقع", "Allow mixed image orientations": "السماح بالاتجاهات الصورة المختلطة", "Allow multiple open items": "السماح بعدة عناصر مفتوحة", "Animate background only": "تحريك الخلفية فقط", "Animation": "الرسوم المتحركة", "Apply a margin between the navigation and the slideshow container.": "تطبيق هامش بين التنقل وحاوية عرض الشرائح.", "Apply a margin between the overlay and the image container.": "تطبيق هامش بين التراكب وحاوية الصورة.", "Apply a margin between the slidenav and the slider container.": "تطبيق هامش بين slidenav وحاوية المنزلق.", "Apply a margin between the slidenav and the slideshow container.": "تطبيق هامش بين slidenav وحاوية عرض الشرائح.", "Articles": "مقالات", "Author": "مؤلف", "Author Link": "رابط المؤلف", "Auto-calculated": "لصناعة السيارات في حساب", "Autoplay": "تشغيل تلقائي", "Back": "الى الخلف", "Background Color": "لون الخلفية", "Behavior": "سلوك", "Blend Mode": "وضع المزج", "Blur": "شىء ضبابي", "Border": "الحدود", "Bottom": "الأسفل", "Box Shadow": "صندوق الظل", "Breadcrumbs": "فتات الخبز", "Breakpoint": "توقف", "Builder": "باني", "Button": "زر", "Button Size": "حجم الزر", "Buttons": "وصفت", "Cache": "مخبأ", "Campaign Monitor API Token": "Campaign Monitor API Token", "Cancel": "إلغاء", "Center": "مركز", "Center the active slide": "توسيط الشريحة النشطة", "Center the module": "مركز الوحدة", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "قد تعتمد محاذاة الوسط واليسار واليمين على نقطة توقف وتتطلب الاستعادة.", "Changelog": "التغيير", "Choose Font": "اختر الخط", "CSS": "CSS" }theme/languages/tr_TR.json000064400000241070151666572150011563 0ustar00{ "- Select -": "-Seçin-", "- Select Module -": "-Modül Seçin-", "- Select Position -": "- Pozisyon Seçin -", "- Select Widget -": "- Widget Seç -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "%name% halen kütüphanede mevcut. Kaydedildiğinde üzerine yazılacak.", "%label% Position": "%label% Konumu", "%name% already exists. Do you really want to rename?": "%name% mevcut. Gerçekten yeniden adlandırmak istiyor musunuz?", "%post_type% Archive": "%post_type% Arşiv", "%s is already a list member.": "%s kullanıcı listesinde mevcut.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Koleksiyon |||| %smart_count% Koleksiyonlar", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Öğe |||| %smart_count% Öğeler", "%smart_count% File |||| %smart_count% Files": "%smart_count% Dosya |||| %smart_count% Dosyalar", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Dosya seçildi |||| %smart_count% Dosya seçildi", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% İkon |||| %smart_count% İkonlar", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Sayfa Düzeni |||| %smart_count% Safya Düzeni", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% medya dosyası indirme başarısız: |||| %smart_count% medya dosyalarını indirme başarısız:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Fotoğraf|||| %smart_count% Fotoğraflar", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Hazır Öğeler |||| %smart_count% Hazır Öğeler", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Stil |||| %smart_count% Stiller", "%smart_count% User |||| %smart_count% Users": "%smart_count% kullanıcı|||| %smart_count% Kullanıcılar", "%type% Presets": "%type% Hazır Öğeler", "1 Column": "1 Sütun", "1 Column Content Width": "1 Sütun İçerik Genişliği", "2 Column Grid": "2 Sütunlu Izgara", "2 Column Grid (Meta only)": "2 Sütunlu Izgara (Sadece meta)", "About": "Hakkında", "Absolute": "Mutlak", "Accessed": "Erişildi", "Accordion": "Akordeon", "Active": "Aktif", "Active item": "Aktif Öğe", "Add": "Ekle", "Add a colon": "Bir sütun ekle", "Add a leader": "Bir lider ekle", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Bir kaçkınlık efekti ekleyin veya kaydırma yaparken görüntüleme alanına göre arka planı düzeltin.", "Add a parallax effect.": "Bir kaçkınlık efekti ekleyin.", "Add bottom margin": "Alta boşluk ekle", "Add clipping offset": "Kırpma ofseti ekle", "Add Element": "Öğe Ekle", "Add extra margin to the button.": "Butona fazladan boşluk ekleyin.", "Add Folder": "Klasör Ekle", "Add Item": "Öğe Ekle", "Add Media": "Medya Ekle", "Add Menu Item": "Menü Öğesi Ekle", "Add Module": "Modül Ekle", "Add Row": "Satır Ekle", "Add Section": "Bölüm Ekle", "Add text after the content field.": "İçerikten sonra metin ekle.", "Add text before the content field.": "içerikten önce metin ekle.", "Add to Cart": "Sepete Ekle", "Add to Cart Link": "Sepete Ekle Bağlantısı", "Add to Cart Text": "Sepete Ekle Metni", "Add top margin": "Üste boşluk ekle", "Advanced": "Gelişmiş", "After Submit": "Gönderdikten Sonra", "Alert": "Uyarı", "Align image without padding": "Görseli boşluksuz hizala", "Align the filter controls.": "Filtre kontrollerini hizalayın.", "Align the image to the left or right.": "Görseli sola veya sağa hizala", "Align the image to the top or place it between the title and the content.": "Resmi en üste hizalayın veya başlık ile içerik arasında yerleştirin.", "Align the image to the top, left, right or place it between the title and the content.": "Görseli üste, sola, sağa hizalayın veya başlık ve içerik arasına yerleştirin.", "Align the meta text.": "Meta metni hizalayın", "Align the section content vertically, if the section height is larger than the content itself.": "Bölüm yüksekliği içeriğin kendisinden daha yüksek ise bölüm içeriğini dikey olarak hizalayın.", "Align the title and meta text as well as the continue reading button.": "Başlığı ve meta metni yanı sıra okumaya devam et düğmesini de hizalayın.", "Align the title and meta text.": "Başlık ve meta metni hizalayın.", "Align the title to the top or left in regards to the content.": "Başlığı içeriğe göre yukarı veya sola hizalayın.", "Alignment": "Hizalama", "Alignment Breakpoint": "Hizalama Kesim Noktası", "Alignment Fallback": "Hizalama Yedeği", "All backgrounds": "Tüm artalanlar", "All colors": "Tüm renkler", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Tüm resimler <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> altında lisanslıdır; bu söz konusu görüntüleri ticari amaçlı da dahil olmak üzere ücretsiz olarak, izin istemeden kopyalayabileceğiniz, değiştirebileceğiniz, dağıtabileceğiniz ve kullanabileceğiniz anlamına gelir.", "All Items": "Tüm Öğeler", "All layouts": "Tüm Sayfa Düzenleri", "All presets": "Tüm Hazır Öğeler", "All styles": "Tüm biçimler", "All topics": "Tüm konular", "All types": "Tüm tipler", "All websites": "Tüm web siteleri", "Allow mixed image orientations": "Karışık (farklı) resim yönlendirmelerine izin ver", "Allow multiple open items": "Birden çok açık öğeye izin ver", "Animate background only": "Yalnızca arkaplanı canlandır", "Animate strokes": "Konturları canlandır", "Animation": "Animasyon", "Animation Delay": "Animasyon Gecikmesi", "Any Joomla module can be displayed in your custom layout.": "Herhangi bir Joomla modülü, özel düzeninizde görüntülenebilir.", "Any WordPress widget can be displayed in your custom layout.": "Herhangi bir Wordpress modülü, özel düzeninizde görüntülenebilir.", "API Key": "API Anahtarı", "Apply a margin between the navigation and the slideshow container.": "Gezinme ve slayt gösterisi kapsayıcısı arasında bir kenar boşluğu uygulayın.", "Apply a margin between the overlay and the image container.": "Kaplama ile resim taşıyıcı arasına bir kenar boşluğu yerleştirin.", "Apply a margin between the slidenav and the slider container.": "Slidenav ve slider konteyner arasında bir marj uygulayın.", "Apply a margin between the slidenav and the slideshow container.": "Slidenav simgeleri ve slayt gösterisi konteyneri arasında bir boşluk uygulayın.", "Article": "Makale", "Articles": "Makaleler", "Attach the image to the drop's edge.": "Resmi damla kenarına takın.", "Attention! Page has been updated.": "Dikkat! Sayfa güncellendi.", "Author": "Yazar", "Author Link": "Yazar Bağlantısı", "Auto-calculated": "Otomatik hesaplanan", "Autoplay": "Otomatik oynatma", "Back": "Geri", "Background Color": "Artalan rengi", "Base Style": "Temel Stil", "Before": "Önce", "Behavior": "Davranış", "Blend Mode": "Harman modu", "Block Alignment": "Hizalamayı Engelleyin", "Block Alignment Breakpoint": "Blok Hizalama Kesme Noktası", "Block Alignment Fallback": "Blok Hizalama Yedeklemesi", "Blur": "Bulanık", "Border": "Çerçeve", "Bottom": "Alt", "Box Decoration": "Kutu Dekorasyonu", "Box Shadow": "Kutu Gölgesi", "Breadcrumbs": "Sayfa İşaretleri Yolu", "Breakpoint": "Kesme noktası", "Builder": "Oluşturucu", "Button": "Düğme", "Button Margin": "Buton Kenarı", "Button Size": "Düğme boyutu", "Buttons": "Düğmeler", "Cache": "Önbellek", "Campaign Monitor API Token": "Kampanya Monitörü API Token", "Cancel": "İptal", "Center": "Merkez", "Center horizontally": "Yatay ortalayın", "Center the active slide": "Etkin slaydı ortalayın", "Center the content": "İçeriği ortalayın", "Center the module": "Modülü ortala", "Center the title and meta text": "Başlığı ve meta metni ortalayın", "Center the title, meta text and button": "Başlığı, meta metni ve düğmeyi ortalayın", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Merkez, sol ve sağ hizalama bir kesme noktasına bağlı olabilir ve bir geri dönüş gerektirir.", "Changelog": "Değişiklikler", "Child Theme": "Alt Tema", "Choose a divider style.": "Bir ayırıcı stili seçin", "Choose a map type.": "Bir harita tipi seçin.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Kaydırma konumuna bağlı olarak paralaks veya slayt aktif olduğunda uygulanan bir animasyon arasında seçim yapın.", "Choose between an attached bar or a notification.": "Ekli çubuk bar veya bildirim arasında seçim yapın.", "Choose Font": "Yazıtipi Seçin", "Choose the icon position.": "Simge konumunu seçin.", "Class": "Sınıf", "Classes": "Sınıflar", "Clear Cache": "Önbelleği Temizle", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Yeniden boyutlandırılması için temanın önbellek klasöründe saklanan önbelleğe alınmış görüntüleri ve ögeleri temizleyin. Aynı ada sahip bir görüntüyü tekrar yükledikten sonra önbelleği temizlemeniz gerekir.", "Close": "Kapat", "Code": "Kod", "Collections": "Koleksiyonlar", "Color": "Renk", "Column": "Sütun", "Column 1": "Sütun 1", "Column 2": "Sütun 2", "Column 3": "Sütun 3", "Column 4": "Sütun 4", "Column 5": "Sütun 5", "Column Gap": "Sütun Boşluğu", "Column Layout": "Sütun Düzeni", "Column within Section": "Bölüm İçindeki Sütun", "Columns": "Sütunlar", "Columns Breakpoint": "Sütun Kesme Noktası", "Comments": "Yorumlar", "Components": "Bileşenler", "Consent Button Style": "Onay Düğmesi Stili", "Consent Button Text": "Onay Düğmesi Metni", "Contact": "İletişim", "Container Padding": "Konteyner Dolgu", "Container Width": "Konteyner Genişliği", "Content": "İçerik", "content": "içerik", "Content Alignment": "İçerik Hizalama", "Content Length": "İçerik Uzunluğu", "Content Margin": "Content Kenarı", "Content Parallax": "İçerik Paralaks", "Content Width": "İçerik genişliği", "Controls": "Denetimler", "Cookie Banner": "Cookie Afiş", "Cookie Scripts": "Cookie Script", "Copy": "Kopyala", "Countdown": "Gerisayım", "Critical Issues": "Kritik meseleler", "Critical issues detected.": "Kritik sorunlar tespit edildi.", "Current Layout": "Mevcut Sayfa Düzeni", "Custom Code": "Özel Kod", "Customization": "Özelleştirme", "Customization Name": "Özelleştirme Adı", "Date": "Tarih", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Başlıkları dikey olarak ortalanmış bir ayırıcı, madde işareti veya çizgi ile süsleyin.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Başlığı, ayırıcı, madde işareti veya dikey olarak başlığın ortasına yerleştirilmiş bir çizgi ile süsleyin.", "Decoration": "Dekorasyon", "Default": "Varsayılan", "Define a name to easily identify this element inside the builder.": "Oluşturucu içindeki bu öğeyi kolayca tanımlamak için bir ad tanımlayın.", "Define a unique identifier for the element.": "Öğe için benzersiz bir kimlik tanımlayın.", "Define an alignment fallback for device widths below the breakpoint.": "Kesme noktasının altındaki aygıt genişlikleri için bir hizalama geri dönüşü tanımlayın.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Öğe için bir veya daha fazla öznitelik tanımlayın. Öznitelik adını ve değerini <code>=</code> karakteri ile ayırın. Satır başına bir öznitelik girin.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Öge için bir veya daha fazla sınıf tanımlayın. Birden çok sınıfı boşluklarla ayırın.", "Define the alignment of the last table column.": "Son tablo sütununun hizasını belirle.", "Define the device width from which the alignment will apply.": "Hizalamanın yapılacağı aygıt genişliğini tanımlayın.", "Define the device width from which the max-width will apply.": "Elemanın maksimum genişliğinin uygulanacağı cihaz genişliğini tanımlayın.", "Define the layout of the form.": "Formun düzenini tanımlayın.", "Define the layout of the title, meta and content.": "Başlık, meta ve içeriğin düzenini belirleyin.", "Define the order of the table cells.": "Tablo hücrelerinin sırasını belirleyin.", "Define the padding between table rows.": "Tablo satırları arasındaki dolguyu belirleyin.", "Define the title position within the section.": "Başlığın içindeki bölümün konumunu tanımlayın.", "Define the width of the content cell.": "İçerik hücrelerinin genişliğini belirleyin.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Filtre navigasyonunun genişliğini tanımlayın. Yüzde ve sabit genişlikler arasından seçim yapın veya içeriklerinin genişliğine sütunları genişletin.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Izgaradaki görüntünün genişliğini belirleyin. Yüzde ve sabit genişlik arasında seçim yapın veya içerik genişliğine kadar sütunları genişletin.", "Define the width of the meta cell.": "Meta hücrelerinin genişliğini belirleyin.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Navigasyonun genişliğini belirleyin. Yüzde ve sabit genişlik arasında seçim yapın veya içerik genişliğine kadar sütunları genişletin.", "Define the width of the title cell.": "Başlık hücrelerinin genişliğini belirleyin.", "Define the width of the title within the grid.": "Izgaradaki başlığın genişliğini belirleyin.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Izgara içindeki başlığın genişliğini tanımlayın. Yüzde ve sabit genişlikler arasından seçim yapın veya sütunları içeriklerinin genişliğine genişletin.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Kaydırıcı öğelerinin genişliğinin, içerik genişlikleri tarafından sabitlenip otomatik olarak genişletilip genişletilmeyeceğini belirleyin.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Küçük resimlerin kapsayıcı çok küçük olup olmadığını birden çok satıra mı sardıracağını belirtin.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Öğelerin animasyon gecikme hızını milisaniye cinsinden girin, örneğin <code>200</code>.", "Delete": "Sil", "Description List": "Tanım Listesi", "Desktop": "Masaüstü", "Determine how the image or video will blend with the background color.": "Görüntünün veya videonun arka plan rengiyle nasıl karışacağını belirleyin.", "Determine how the image will blend with the background color.": "Görüntünün arka plan rengiyle nasıl karışacağını belirleyin.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Görüntünün kırparak veya boş alanları arka plan rengiyle doldurarak sayfa boyutlarına uyup uymayacağını belirleyin.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Resmin kırpılarak veya boş alanları arka plan rengiyle doldurarak bölüm boyutlarına uyup uymayacağını belirleyin.", "Dialog Layout": "Diyalog Düzeni", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Otomatik oynatmayı devre dışı bırakın, hemen veya video görüntü alanına girer girmez otomatik oynatmayı başlatın.", "Disable element": "Öğeyi devre dışı bırak", "Disable Emojis": "Emojileri Devre Dışı Bırak", "Disable infinite scrolling": "Sonsuz kaydırma işlemini devre dışı bırak", "Disable row": "Satırı devre dışı bırak", "Disable section": "Bölümü devre dışı bırak", "Disable wpautop": "wpautop devre dışı", "Discard": "Iskarta", "Display": "Görüntüle", "Display a divider between sidebar and content": "Kenar çubuğu ve içerik arasında bir ayırıcı görüntüle", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Bir menüyü görüneceği yeri seçerek görüntüleyin. Örneğin, ana menüyü gezinti çubuğu konumunda ve mobil konumda alternatif bir menü yayınlayın.", "Display header outside the container": "Kabın dışında ekran başlığı", "Display icons as buttons": "Simgeleri buton olarak görüntüle", "Display on the right": "Sağda görüntüle", "Display overlay on hover": "Fare üzerine gelince görüntüle", "Display the breadcrumb navigation": "Sayfa işaretleri yolu gezintisini görüntüle", "Display the content inside the overlay, as the lightbox caption or both.": "İçeriği kaplamanın içinde, ışık kutusu başlığı veya her ikisi olarak görüntüleyin.", "Display the content inside the panel, as the lightbox caption or both.": "İçeriği panelin içinde, ışık kutusu başlığı veya her ikisi olarak görüntüleyin.", "Display the first letter of the paragraph as a large initial.": "Paragrafın ilk harfini büyük baş harfi olarak görüntüleyin.", "Display the image only on this device width and larger.": "Görüntüyü yalnızca bu cihazın genişliğinde ve daha büyüğünde görüntüleyin.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Harita denetimlerini görüntüleyin ve haritanın fare tekerleğini kullanarak dokunup çekemeyeceğini veya dokunarak sürüklenip büyüyüp büyümeyeceğini belirleyin", "Display the meta text in a sentence or a horizontal list.": "Meta metni bir cümle veya yatay bir listede görüntüler.", "Display the module only from this device width and larger.": "Modülü yalnızca bu cihazın genişliğinde ve daha büyüklerinde gösterin.", "Display the navigation only on this device width and larger.": "Gezinmeyi yalnızca bu cihaz genişliğinde ve daha büyük ekranda görüntüleyin.", "Display the parallax effect only on this device width and larger.": "Paralaks etkisini sadece bu cihaz genişliğinde ve daha büyük ekranda gösterin.", "Display the popover on click or hover.": "Tıklama veya üzerine giderek popover görüntüler.", "Display the slidenav only on this device width and larger.": "Sadece bu cihaz genişliğine ve daha büyük üzerinde SlideNav görüntüler.", "Display the title inside the overlay, as the lightbox caption or both.": "Işık kutusu başlığı veya her ikisi olarak, kaplamanın içindeki başlığı görüntüleyin.", "Display the title inside the panel, as the lightbox caption or both.": "Pano içindeki başlığı, ışık kutusu başlığı veya her ikisi olarak görüntüleyin.", "Divider": "Ayırıcı", "Do you really want to replace the current layout?": "Mevcut sayfa düzenini gerçekten değiştirmek istiyor musunuz?", "Do you really want to replace the current style?": "Mevcut sitili gerçekten değiştirmek istiyor musunuz?", "Documentation": "Dökümantasyon", "Don't expand": "Genişletme", "Don't wrap into multiple lines": "Birden çok satıra sarmayın", "Double opt-in": "Çift katılım", "Download": "İndir", "Drop Cap": "İlk harf büyük", "Dropdown": "Yıkılmak", "Dynamic Condition": "Dinamik Koşul", "Dynamic Content": "Dinamik İçerik", "Easing": "Yavaşlatma", "Edit": "Düzenle", "Edit %title% %index%": "%title% %index% düzenle", "Edit Items": "Ögeleri düzenle", "Edit Layout": "Sayfa Yerleşimini Düzenle", "Edit Menu Item": "Menü ögelerini düzenle", "Edit Module": "Modülü Düzenle", "Edit Settings": "Düzenleme Ayarları", "Email": "E-posta", "Enable a navigation to move to the previous or next post.": "Önceki veya sonraki gönderiye gitmek için bir gezinmeyi etkinleştirin.", "Enable autoplay": "Otomatik oynatma etkinleştir", "Enable click mode on text items": "Metin öğelerinde tıklama modunu etkinleştir", "Enable drop cap": "İlk harfi büyüt", "Enable filter navigation": "Filtre gezinmeyi etkinleştir", "Enable lightbox gallery": "Işık kutusu galerisini etkinleştir", "Enable map dragging": "Harita sürüklemeyi etkinleştir", "Enable map zooming": "Harita büyütmeyi etkinleştir", "Enable masonry effect": "Duvarcılık etkisini etkinleştir", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Virgülle ayrılmış bir etiket listesi girin,örneğin:<code>blue, white, black</code>.", "Enter a decorative section title which is aligned to the section edge.": "Bölüm kenarına hizalanmış bir dekoratif bölüm başlığı girin.", "Enter a subtitle that will be displayed beneath the nav item.": "Nav ögesinin altında görüntülenecek bir altyazı girin.", "Enter a table header text for the content column.": "İçerik sütunu için bir tablo başlığı metni girin.", "Enter a table header text for the image column.": "Resim sütunu için bir tablo başlığı metni girin.", "Enter a table header text for the link column.": "Bağlantı sütunu için bir tablo başlığı metni girin.", "Enter a table header text for the meta column.": "Meta sütun için bir tablo başlığı metni girin.", "Enter a table header text for the title column.": "Başlık sütunu için bir tablo başlığı metni girin.", "Enter a width for the popover in pixels.": "Piksel cinsinden popover için bir genişlik girin.", "Enter an optional footer text.": "İsteğe bağlı alt bilgi metni girin.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Fareyle üzerine gelinen bağlantıda, başlık özniteliği için isteğe bağlı bir metin girin.", "Enter labels for the countdown time.": "Gerisayım zamanı için etiketleri girin.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Sosyal profillerinize en fazla 5 bağlantı girin. <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\"> UIKit marka simgesi </a>ne bir karşılık otomatik olarak görünecektir, tabii varsa. mailto:info@example.com or tel:+491570156 gibi e-mail adreslerine ve telefon numaralarına bağlantılar da desteklenmektedir.", "Enter or pick a link, an image or a video file.": "Bir bağlantı, bir resim veya video dosyası girin veya seçin.", "Enter the text for the button.": "Bağlantı için bir yazı ekleyin", "Enter the text for the link.": "Bağlantı için bir yazı ekleyin", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Siteyi takip etmek için<a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID girin. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonimleştirme </a> izleme doğruluğunu azaltabilir.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Sokak Görünümü ve diğer özellikleri <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Haritalarda</a> kullanmak için API key kullanmanız gerekmektedir. Ayrıca, haritalarınızın renklerini biçimlendirmek için ek seçenekler de sağlar.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "<a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Kampanya Monitörü</a> Haber bülteni öğesiyle kullanmak için API anahtarı girin.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-column</code> öğesine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Kendi özel CSS'nizi girin. Aşağıdaki öğeler bu öğe için otomatik olarak ön eklenir: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-content</code> öğesine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code> öğesine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code> öğesine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-title</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>": "Kendi özel CSS'nizi girin. Özel CSS kodları, <code>.el-row</code> öğelerine öncelikli olarak otomatik eklenir.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Kendi özel CSS lerinizi ekleyin. The following selectors will be prefixed automatically for this element: <code>.el-section</code>", "Error: %error%": "Hata: %error%", "Expand": "Genişlet", "Expand height": "Yüksekliği genişlet", "Expand One Side": "Bir Tarafı Genişlet", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Bir tarafın genişliğini genişletin genişliğini genişletin, diğer taraf ise maksimum genişliğin sınırlarını korur.", "Expand width to table cell": "Tablo hücresinin genişliğine genişletin", "Extend all content items to the same height.": "İçeriğin tüm ögelerini aynı yüksekliğe uzatın.", "External Services": "Dış Hizmetler", "Favicon": "Favori Simge", "Filter": "filtre", "Finite": "Sınırlı", "First name": "İlk Adı", "Fix the background with regard to the viewport.": "Görünüm alanıyla ilgili arka planı düzeltin.", "Fixed-Inner": "Sabit İç", "Fixed-Left": "Sabit Sol", "Fixed-Outer": "Sabit Dış", "Fixed-Right": "Sabit Sağ", "Folder Name": "Klasör Adı", "Footer": "Alt Bilgi", "Force a light or dark color for text, buttons and controls on the image or video background.": "Görüntü veya video arka planındaki metin, butonlar ve kontroller için yazı renginin açık veya koyu kalmasını zorlayabilirsiniz.", "Full width button": "Tam genişlik düğmesi", "Gallery": "Galeri", "Gamma": "Gama", "General": "Genel", "Google Analytics": "Google Analizleri", "Google Fonts": "Google Yazıtipleri", "Google Maps": "Google Haritalar", "Gradient": "Gradyan", "Grid": "Izgara", "Grid Breakpoint": "Izgara Ayrılma Noktası", "Grid Width": "Izgara Genişliği", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Öğeleri gruplara ayır. Bir küme içindeki öğe sayısı tanımlı öğe genişliğine, ör. <i>%33 </i>, her kümenin 3 öğe içerdiği anlamına gelir.", "Halves": "Yarım", "Header": "Üst bilgi", "Heading 2X-Large": "2 Kat Büyük Başlık", "Heading Large": "Büyük Başlık", "Heading X-Large": "1 Kat Büyük Başlık", "Headline": "Başlık", "Height": "Yükseklik", "hex / keyword": "hex / anahtar kelime", "Hide marker": "İşaretçiyi gizle", "Highlight the hovered row": "Yükseltilmiş satırı vurgulayın", "Home": "Anasayfa", "Horizontal Center": "Yatay Ortala", "Horizontal Left": "Yatay Sol", "Horizontal Right": "Yatay Sağ", "Hover Box Shadow": "Vurgulu Kutu Gölge", "Hover Image": "Vurgusu Görüntüsü", "HTML Element": "HTML Öğesi", "Hue": "Renk tonu", "Icon": "Simge", "Icon Color": "Simge Rengi", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Bir bölüm veya satır maksimum genişliğe sahipse ve bir taraf sola veya sağa doğru genişliyorsa, varsayılan dolgu genişletme tarafından kaldırılabilir.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Eğer çok-dilli bir site oluşturuyorsanız, burada özel bir menü seçmeyin. Bunun yerine, geçerli dile bağlı olarak doğru menüyü yayınlamak için Joomla modül yöneticisini kullanın.", "Image": "Resim", "Image Alignment": "Resim Hizalama", "Image Alt": "Resim Alt Bilgileri", "Image Attachment": "Resim Eki", "Image Box Shadow": "Resim Çerçeve Gölgesi", "Image Effect": "Görüntü Efekti", "Image Height": "Resim Yüksekliği", "Image Margin": "Görüntü Kenarı", "Image Orientation": "Görüntü Yönlendirme", "Image Position": "Resim Pozisyonu", "Image Size": "Resim Boyutu", "Image Width": "Resim Genişliği", "Image Width/Height": "Görüntü Genişliği/Yükseklik", "Image/Video": "Resim/Video", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "SVG görüntülerini sayfa işaretlemesine enjekte edin, böylece CSS ile kolayca biçimlendirilebilir.", "Inline SVG": "Satır içi SVG", "Insert at the bottom": "Alta yerleştirin", "Insert at the top": "Üste yerleştirin", "Inset": "İlave", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Özel bir resim kullanmak yerine, simge kitaplığından bir simge seçmek için kurşun kalemi tıklayabilirsiniz.", "Inverse Logo (Optional)": "Ters Logosu (İsteğe Bağlı)", "Inverse style": "Ters tarzı", "Inverse the text color on hover": "Fare üzerindeyken resim rengini ters çevir", "Invert lightness": "Açıklık tersini çevir", "IP Anonymization": "IP Anonimleştirme", "Issues and Improvements": "Sorunlar ve İyileştirmeler", "Item": "öğe", "Item Width": "Öğe Genişliği", "Item Width Mode": "Öğe Genişliği Modu", "Items": "öğeler", "Ken Burns Effect": "Ken Burns Effekti", "Label Margin": "Etiket Marjı", "Labels": "Etiketler", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Peyzaj ve portre görüntüleri ızgara hücreleri içinde ortalanır. Görüntüler yeniden boyutlandırıldığında genişlik ve yükseklik ters çevrilecektir.", "Large": "Büyük", "Large (Desktop)": "Geniş (Masaüstü)", "Large Screen": "Geniş Ekran", "Large Screens": "Geniş Ekran", "Larger padding": "Geniş kenar boşlukları", "Larger style": "Büyük stil", "Last Column Alignment": "Son Satır Yüksekliği", "Last name": "Son İsim", "Layout": "Sayfa Düzeni", "Layout Media Files": "Sayfa Düzeni Medya Dosyaları", "Lazy load video": "Tembel yük video", "Left": "Sol", "Library": "Kütüphane", "Lightbox": "Işık Kutusu", "Lightness": "Açıklık", "Limit the content length to a number of characters. All HTML elements will be stripped.": "İçerik uzunluğunu bir dizi karakterle sınırlayın. Tüm HTML öğeleri çıkarılacaktır.", "Link": "Bağlantı", "link": "Bağlantı", "Link Parallax": "Bağlantı Paralaks", "Link Style": "Bağlantı Stili", "Link Target": "Bağlantı Hedefi", "Link Text": "Bağlantı Yazısı", "Link Title": "Bağlantı Başlığı", "Link to redirect to after submit.": "Gönderildikten sonra yönlendirilecek bağlantı.", "List": "Liste", "List Style": "Liste Stili", "Load jQuery": "JQuery Yükle", "Loading Layouts": "Sayfa Düzenleri Yükleniyor", "Location": "Konum", "Logo Image": "Logo Görseli", "Logo Text": "Logo Metni", "Loop video": "Tekrarlanan video", "Main styles": "Ana Stiller", "Make SVG stylable with CSS": "SVG'yi CSS ile stillendirilir yapabilir", "Map": "Harita", "Margin": "İç Boşluk", "Marker": "İşaretleyici", "Masonry": "Duvarcık", "Match content height": "Eşleşen içerik yüksekliği", "Match height": "Eşleşen yüksek", "Match Height": "Yüksekliği Eşleştir", "Max Height": "Maksimum Yükseklik", "Max Width": "Maksimum Genişlik", "Max Width (Alignment)": "Maks. Genişlik (Hizalama)", "Max Width Breakpoint": "Maksimum Genişlik Kesme Noktası", "Media Folder": "Medya Klasörü", "Medium (Tablet Landscape)": "Orta (Tablet Manzarası)", "Menu": "Menü", "Menu Style": "Menü Stili", "Menus": "Menüler", "Message": "Mesaj", "Message shown to the user after submit.": "Gönderildikten sonra kullanıcıya gösterilen mesaj.", "Meta Alignment": "Meta Hizalama", "Meta Margin": "Meta İç Boşluğu", "Meta Parallax": "Meta Paralaks", "Meta Style": "Meta Stili", "Meta Width": "Meta Genişliği", "Middle": "Orta", "Min Height": "Minimum yükseklik", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "Geçerli sayfaya genel bir düzene sahip bir şablonun atandığını unutmayın. Düzenini güncellemek için şablonu düzenleyin.", "Mobile": "Mobil", "Mobile Logo (Optional)": "Mobil Logo (İstege Bağlı)", "Mode": "Mod", "Module": "Modül", "Modules": "Modüller", "Move the sidebar to the left of the content": "Kenar çubuğunu içeriğinin soluna getirin", "Mute video": "Videonun sesini kapat", "Name": "İsim", "Navbar": "Gezinti Çubuğu", "Navigation": "Gezinme", "Navigation Label": "Navigasyon Etiketi", "Navigation Thumbnail": "Gezinme Küçük Resmi", "New Layout": "Yeni Sayfa Düzeni", "New Menu Item": "Yeni Menü Öğesi", "New Module": "Yeni Modül", "Newsletter": "Bülten", "Next-Gen Images": "Yeni Nesil Görüntüler", "No critical issues found.": "Önemli bir sorun bulunamadı.", "No element found.": "Hiç bir şey bulunamadı.", "No element presets found.": "Kayıtlı element öğesi bulunamadı", "No files found.": "Dosya bulunamadı.", "No font found. Press enter if you are adding a custom font.": "Font bulunamadı. Özel yazı tipi ekliyorsanız enter tuşuna basın.", "No items yet.": "Henüz öğe yok.", "No layout found.": "Sayfa düzeni bulunamadı", "No Results": "Sonuç Yok", "No results.": "Sonuç yok.", "No style found.": "Stil bulunamadı.", "None": "Yok", "Offcanvas Mode": "Offcanvas Modu", "Only available for Google Maps.": "Sadece Google Haritalar için kullanılabilir.", "Only display modules that are published and visible on this page.": "Sadece bu sayfada yayınlanan ve görünen modülleri görüntüleyin.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Yalnızca tek sayfalar ve gönderiler ayrı düzenlere sahip olabilir. Bu sayfa türüne genel bir düzen uygulamak için bir şablon kullanın.", "Open in a new window": "Yeni bir pencerede aç", "Open the link in a new window": "Bağlantıyı yeni bir pencerede aç", "Options": "Seçenekler", "Order": "Sıralama", "Outside Breakpoint": "Dış Uç Noktası", "Outside Color": "Dış Renk", "Overlap the following section": "Aşağıdaki bölümü üst üste bindirin", "Overlay": "Kaplama", "Overlay Color": "Kaplama Rengi", "Overlay Default": "Varsayılan Kaplama", "Overlay only": "Sadece kaplama", "Overlay Parallax": "Paralaks Yerleşimi", "Overlay the site": "Siteyi kapla", "Padding": "Dış boşluk", "Panels": "Paneller", "Parallax": "Paralaks", "Parallax Breakpoint": "Paralaks Ayrılma Noktası", "Pause autoplay on hover": "Üzerine giderek otomatik oynatmadı durdur", "Phone Landscape": "Telefon Manzarası", "Phone Portrait": "Telefon Portresi", "Photos": "Fotoğraflar", "Pick file": "Dosya seç", "Pick link": "Bağlantı seç", "Pick media": "Medya seç", "Placeholder Image": "Yer tutucu Resim", "Play inline on mobile devices": "Mobil cihazlarda satır içi oynat", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Bu özelliği etkinleştirmek için lütfen <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">yükleyici eklentsini</a>yükleyin / etkinleştirin.", "Popover": "Açılır menü", "Position": "Konum", "Position Sticky": "Sticky Pozisyonu", "Position Sticky Breakpoint": "Sticky Pozisyonu Bırakma Noktası", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Öğeyi diğer öğelerin üstüne veya altına yerleştirin. Aynı yığın düzeyine sahiplerse konum, düzendeki sıraya bağlıdır.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Filtre gezinmesini üst, sol veya sağa yerleştirin. Sol ve sağ yönlere daha büyük bir stil uygulanabilir.", "Position the meta text above or below the title.": "Meta metni başlığın üstüne veya altına yerleştirin.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Navigasyonu üste, alta, sola veya sağa konumlandırın. Sol ve sağ navigasyonlara daha geniş bir stil uygulanabilir.", "Poster Frame": "Poster Çerçevesi", "Preserve text color": "Metin rengini koru", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Metin rengi korumayı örneğin kart öğesini kullanırken etkinleştirebilirsiniz. Bölüm üst üste bindirme, tüm stiller tarafından desteklenmez ve görsel bir etkisi olmayabilir.", "Preview all UI components": "Tüm UI bileşenlerini önizle", "Primary navigation": "Birincil navigasyon", "Provider": "Sağlayıcı", "Pull content behind header": "İçeriği navbarın altına çekin", "Quarters": "Çeyrek", "Quarters 1-1-2": "Çeyrek 1-1-2", "Quarters 1-2-1": "Çeyrek 1-2-1", "Quarters 1-3": "Çeyrek 1-3", "Quarters 2-1-1": "Çeyrek 2-1-1", "Quarters 3-1": "Çeyrek 3-1", "Quotation": "Alıntı", "Ratio": "Oran", "Relative": "Göreceli", "Reload Page": "Sayfayı Yeniden Yükle", "Remove bottom margin": "Alt iç boşluğu kaldır", "Remove bottom padding": "Alt dış boşluğu kaldır", "Remove left and right padding": "Sol ve sağ dolguyu kaldır", "Remove left logo padding": "Sol logo dolgusunu kaldır", "Remove left or right padding": "Sol veya sağ dolguyu kaldır", "Remove Media Files": "Medya Dosyalarını Kaldır", "Remove top margin": "Üst iç boşluğu kaldır", "Remove top padding": "Üst dış boşluğu kaldır", "Rename": "Yeniden Adlandır", "Replace layout": "Sayfa düzenini değiştirin", "Reset": "Sıfırla", "Reset to defaults": "Varsayılanlara dön", "Responsive": "Duyarlı", "Rotate the title 90 degrees clockwise or counterclockwise.": "Başlığı saat yönünde veya saat yönünün tersine 90 derece döndürün.", "Rotation": "Döndürme", "Row": "Sıra", "Saturation": "Doyma", "Save": "Kaydet", "Save %type%": "%type% kaydet", "Save in Library": "Kütüphaneye kaydet", "Save Layout": "Düzeni Kaydet", "Search": "Arama", "Search Style": "Stil Ara", "Section": "Bölüm", "Section Animation": "Bölüm Animasyonu", "Section Height": "Bölüm Yüksekliği", "Section Image and Video": "Bölüm Görseli ve Videosu", "Section Padding": "Bölüm Boşluk Dolgusu", "Section Style": "Bölüm Stili", "Section Title": "Bölüm Başlığı", "Section Width": "Bölüm Genişliği", "Section/Row": "Bölüm / Satır", "Select": "Seç", "Select %type%": "%type% seç", "Select a card style.": "Bir kart stili seçin.", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Öğe alanlarını dinamik eşlemeye uygun hale getirmek için bir içerik kaynağı seçin. Geçerli sayfanın kaynakları arasından seçim yapın veya özel bir kaynağı sorgulayın.", "Select a different position for this item.": "Bu öğe için farklı bir konum seçin.", "Select a grid layout": "Bir kılavuz düzenini seçin", "Select a predefined meta text style, including color, size and font-family.": "Renk, boyut ve yazı tipi ailesi de dahil olmak üzere önceden tanımlanmış bir meta metin stili seçin.", "Select a predefined text style, including color, size and font-family.": "Renk, boyut ve yazı tipi ailesini de içeren önceden tanımlanmış bir metin stili seçin.", "Select a style for the continue reading button.": "Devamını okuma düğmesi için bir stil seçin.", "Select a style for the overlay.": "Kaplama için bir stil seçin.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "<a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> ya da <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a> bağlantısından bir video dosyası seçin .", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Yayınlanan tüm widget'ları oluşturacak bir WordPress widget alanı seçin. Tema tarafından başka yerde oluşturulmayan, oluşturucu-1 ila -6 widget alanlarını kullanmanız önerilir.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Ters çevrilmiş renkte alternatif bir logo seçin, ör. Koyu arka planlar üzerinde daha iyi görünürlük için beyaz. Gerekirse, otomatik olarak görüntülenecektir.", "Select an alternative logo, which will be used on small devices.": "Küçük cihazlarda kullanılacak alternatif bir logo seçin.", "Select an animation that will be applied to the content items when filtering between them.": "Aralarında geçiş yaparken içerik ögelerine uygulanacak bir animasyon seçin.", "Select an animation that will be applied to the content items when toggling between them.": "Aralarında geçiş yaparken içerik ögelerine uygulanacak bir animasyon seçin.", "Select an image transition.": "Bir görüntü geçişi seçin.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Bir resim geçişi seçin. İkinci bir resim ayarlanmışsa, geçiş iki resim arasında gerçekleşir. Eğer <i>Yok</i> seçilmiş ise ikinci resim solarak kaybolur.", "Select an optional image that appears on hover.": "Fare üzerine geldiğinde görünecek isteğe bağlı ikinci bir resim seçin.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Video oynatılana kadar görünen bir seçenek resmi seçin. Seçilmezse, ilk video çerçevesi poster çerçevesi olarak gösterilir.", "Select dialog layout": "Diyalog düzeni seçin", "Select header layout": "Başlık düzeni seç", "Select Image": "Görsel Seç", "Select mobile dialog layout": "Mobil diyalog düzeni seçin\n", "Select mobile header layout": "Mobil başlık düzeni seç", "Select the content position.": "İçerik konumunu seçin.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Filtre gezinme stilini seçin. Hap ve ayırıcı stilleri sadece yatay Subnavlar için kullanılabilir.", "Select the form size.": "Form boyutunu seçin.", "Select the form style.": "Form sitilini seçiniz.", "Select the link style.": "Bağlantı sitilini seçiniz.", "Select the list style.": "Liste stilini seçiniz.", "Select the list to subscribe to.": "Abone olmak için listeyi seçin.", "Select the navigation type.": "Navigasyon stilini seçiniz.", "Select the overlay or content position.": "Kaplama veya içerik konumunu seç.", "Select the position of the navigation.": "Navigasyonun konumunu seçin.", "Select the position of the slidenav.": "Slidenav konumunu seçin.", "Select the position that will display the search.": "Arama'nın gösterileceği konumu seçin.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Sosyal simgelerin görüntüleneceği konumu seçin. Sosyal profil bağlantılarınızı eklediğinizden emin olun, yoksa hiçbir simge görüntülenemez.", "Select the search style.": "Arama stilini seçiniz", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Kod sözdizimi vurgulamasının stilini seçin. Işık için GitHub, koyu arka planlar için ise Monokai kullanın.", "Select the style for the overlay.": "Kaplama için stil seç.", "Select the subnav style.": "Subnav stilini seçin.", "Select the table style.": "Tablo stilini seçin.", "Select the text color.": "Metin rengini seçin.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Metin rengini seç. Artalan seçeneği seçili ise, arka plan resmi uygulanmayan biçimler yerine birincil renk kullanılır.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Metin rengini seç. Artalan seçeneği seçili ise, arka plan resmi uygulanmayan biçimler yerine birincil renk kullanılır.", "Select the title style and add an optional colon at the end of the title.": "Başlık stilini seçin ve başlığın sonuna seçimlik bir kolon ekleyin. ", "Select the transformation origin for the Ken Burns animation.": "Ken Burns animasyonu için dönüşüm orjinini seçin.", "Select the transition between two slides.": "İki slayt arasındaki geçişi seçin.", "Select whether a button or a clickable icon inside the email input is shown.": "E-posta girişinin içinde bir düğmenin veya tıklanabilir bir simgenin gösterilip gösterilmeyeceğini seçin.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Bir mesajın gösterilip gösterilmeyeceğini veya abone düğmesine tıkladıktan sonra site yönlendirilip yönlendirilmeyeceğini seçin.", "Select whether the modules should be aligned side by side or stacked above each other.": "Widget'ların yan yana mı yoksa üst üste yığılmış mı olması gerektiğini seçin.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Widget'ların yan yana mı yoksa üst üste yığılmış mı olması gerektiğini seçin.", "Serve WebP images": "WebP görüntülerini sunun", "Set a different link text for this item.": "Bu öğe için farklı bir bağlantı metni ayarlayın.", "Set a different text color for this item.": "Bu öğe için farklı bir metin rengi ayarlayın.", "Set a fixed width.": "Sabit genişlik ayarlayın.", "Set a large initial letter that drops below the first line of the first paragraph.": "İlk paragrafın ilk satırının altına düşen büyük bir başlangıç harfi ayarlayın.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Yüzde bir kenar çubuğu genişliği ayarlayın ve içerik sütunu buna göre ayarlanır. Genişlik, Stil bölümünde ayarlayabileceğiniz Kenar Çubuğunun min-genişliğinin altına geçmez.", "Set an additional transparent overlay to soften the image or video.": "Görüntüyü veya videoyu yumuşatmak için ek bir şeffaf kaplama ayarlayın.", "Set an additional transparent overlay to soften the image.": "Görüntüyü veya videoyu yumuşatmak için ek bir şeffaf kaplama ayarlayın.", "Set how the module should align when the container is larger than its max-width.": "Maksimum genişliğinden daha büyük olduğunda modülün nasıl hizalanması gerektiğini ayarlayın.", "Set light or dark color if the navigation is below the slideshow.": "Navigasyon slayt gösterisinin altındaysa açık veya koyu renkli ayarlayın.", "Set light or dark color if the slidenav is outside.": "Slayt gösterisi slayt gösterisinin dışındaysa açık veya koyu renkli ayarlayın.", "Set light or dark color mode for text, buttons and controls.": "Metin, düğme ve kontroller için açık veya koyu renk modunu ayarlayın.", "Set light or dark color mode.": "Açık veya koyu renk modunu ayarlayın.", "Set percentage change in lightness (Between -100 and 100).": "Hafiflikteki yüzde değişimini ayarlayın (-100 ile 100 arasında).", "Set percentage change in saturation (Between -100 and 100).": "Doygunluktaki yüzde değişimini ayarla (-100 ile 100 arasında).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Gama düzeltmesinin miktarındaki yüzde değişimini ayarlayın (1.0 ile 10.0 arasında, 1.0'da düzeltme olmaz).", "Set the autoplay interval in seconds.": "Otomatik oynatma aralığını saniye cinsinden ayarlayın.", "Set the blog width.": "Blog genişliğini ayarlayın.", "Set the breakpoint from which grid items will stack.": "Izgara hücrelerinin istifleneceği kesme noktasını ayarlayın.", "Set the breakpoint from which the sidebar and content will stack.": "Kenar çubuğunun ve içeriğin yığılacağı kesme noktasını ayarlayın.", "Set the button size.": "Buton boyutunu ayarlayın.", "Set the button style.": "Buton sitilini ayarlayın.", "Set the duration for the Ken Burns effect in seconds.": "Ken Burns etkisinin süresini saniye cinsinden ayarlayın.", "Set the icon color.": "Simge rengini ayarlayın.", "Set the initial background position, relative to the page layer.": "Bölüm katmanına göre başlangıç arka plan konumunu ayarlayın.", "Set the initial background position, relative to the section layer.": "Bölüm katmanına göre başlangıç arka plan konumunu ayarlayın.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Haritanın görüntüleneceği ilk çözünürlüğü ayarlayın. 0 tamamen yakınlaştırılmış ve 18 yakınlaştırılmış en yüksek çözünürlükte.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Her kesme noktası için öğe genişliğini ayarlayın. <i> Devral </i>, bir sonraki küçük ekran boyutunun öğe genişliğini belirtir.", "Set the link style.": "Bağlantı stilini ayarla", "Set the margin between the countdown and the label text.": "Countdownlar (Geriye sayım ?) arasında kenar payı ayarlayın ve metni etiketleyin.", "Set the margin between the overlay and the slideshow container.": "Kaplama ve slayt gösterisi arasına bir kenar boşluğu yerleştirin.", "Set the maximum content width.": "Maksimum içerik genişliğini ayarlayın.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Maksimum içerik genişliğini ayarlayın. Not: Bu bölümde zaten maksimum genişlik olabilir ve aşılabilir.", "Set the maximum height.": "Maksimum yüksekliği ayarla.", "Set the maximum width.": "Maksimum genişliği ayarlayın.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Her kesme noktası için kılavuz sütun sayısını ayarlayın. <I> Inherit </ i> bir sonraki küçük ekran boyutundaki sütun sayısına başvurur.", "Set the padding between sidebar and content.": "Kenar çubuğu ve içerik arasındaki dolguyu ayarlayın.", "Set the padding between the overlay and its content.": "Kaplama ve içeriği arasındaki dış kenar boşluğunu ayarlayın.", "Set the padding.": "Dış kenar boşluğunu ayarlayın.", "Set the post width. The image and content can't expand beyond this width.": "Gönderi genişliğini ayarlayın. Resim ve içerik bu genişliğin ötesine genişletilemez.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Joomla daki <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Öne Çıkan Düzen</a> ayarlarındaki sütun sayısını tanımlayın.", "Set the size of the gap between the image and the content.": "Resim başlık ve içerik arasında hizalanmışsa üst kenar boşluğunu ayarlayın.", "Set the size of the gap between the navigation and the content.": "Navigasyon ve içerik öğeleri arasındaki oluk genişliğini seçin.", "Set the size of the gap between the title and the content.": "Resim başlık ve içerik arasında hizalanmışsa üst kenar boşluğunu ayarlayın.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Bir oran ayarlayın. Arka plan resminin aynı oranını kullanmanız önerilir. Sadece <code>1600:900</code> gibi genişliğini ve yüksekliğini kullanın.", "Set the top margin if the image is aligned between the title and the content.": "Resim başlık ve içerik arasında hizalanmışsa üst kenar boşluğunu ayarlayın.", "Set the top margin.": "Üst kenar boşluğunu ayarlayın.", "Set the velocity in pixels per millisecond.": "Hızını milisaniyede piksel olarak ayarlayın.", "Set the vertical container padding to position the overlay.": "Bindirmeyi konumlandırmak için dikey kap doldurucusunu ayarlayın.", "Set the vertical margin.": "Dikey kenar boşluğunu ayarlayın.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Dikey kenar boşluğunu ayarlayın. Not: İlk elemanın üst kenar boşluğu ve son öğenin alt kenar boşluğu daima kaldırılır. Bunun yerine grid ayarlarında tanımlayın", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Dikey kenar boşluğunu ayarlayın. Not: İlk ızgaranın üst kenar boşluğu ve son ızgaranın alt kenar boşluğu daima kaldırılır. Bunun yerine bölüm ayarlarında tanımlayın.", "Set the vertical padding.": "Dikey dolguyu ayarlayın.", "Set the video dimensions.": "Video boyutlarını ayarlayın.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Genişlik ve yüksekliği piksel olarak ayarlayın (ör. 600). Bir değeri ayarlamak orijinal oranları korur. Görüntü otomatik olarak yeniden boyutlandırılacak ve kırpılacaktır.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Genişlik ve yüksekliği piksel olarak ayarlayın. Bir değeri ayarlamak orijinal oranları korur. Görüntü otomatik olarak yeniden boyutlandırılacak ve kırpılacaktır.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Genişliği piksel cinsinden. Genişlik belirlenmemişse, harita tüm genişliği alacaktır ve yüksekliğini koruyacaktır. Veya genişliği sadece haritanın küçülme oranını koruyarak küçültmeye başladığı kesme noktasını tanımlamak için kullanın.", "Sets": "Setler", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Bir değeri ayarlamak orijinal oranları korur. Görüntü otomatik olarak yeniden boyutlandırılacak ve kırpılacak ve mümkün olduğunda yüksek çözünürlüklü resimler otomatik olarak oluşturulacaktır.", "Setting the Blog Layout": "Blog Sayfa Düzeni Ayarı", "Setting the Header Layout": "Başlık Yerleşimi Ayarı", "Setting the Page Layout": "Sayfa Düzeni Ayarı", "Setting the Post Layout": "Paylaşım Sayfa Düzeni Ayarı", "Setting the WooCommerce Layout Options": "WooCommerce Sayfa Düzeni Ayarı\n", "Settings": "Ayarlar", "Show archive category title": "Arşiv kategorisi başlığını göster", "Show author": "Yazar göster", "Show below slideshow": "Slayt gösterisini göster", "Show button": "Buton göster", "Show categories": "Kategorileri göster", "Show comments count": "Yorum sayısını göster", "Show content": "İçeriği göster", "Show Content": "İçeriği Göster", "Show controls": "Denetimleri göster", "Show date": "Tarihi göster", "Show dividers": "Ayırıcıları göster", "Show drop cap": "Açılan kapağı göster", "Show filter control for all items": "Tüm öğeler için filtre kontrolünü göster", "Show home link": "Ana Sayfa Bağlantısını Göster", "Show hover effect if linked.": "Bağlıysa, vurgulu efekti göster.", "Show Labels": "Etiketleri Göster", "Show link": "Bağlantıyı Göster", "Show map controls": "Harita kontrollerini göster", "Show message": "Mesajı Göster", "Show name fields": "İsim alanlarını göster", "Show navigation": "Navigasyonu göster", "Show on hover only": "Yalnızca vurgulu göster", "Show or hide content fields without the need to delete the content itself.": "İçeriği kendiliğinden silmek zorunda kalmadan içerik alanlarını gösterin veya gizleyin.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Bu cihaz genişliğinde ve daha büyük genişlikte öğeyi gösterin veya gizleyin. Tüm öğeler gizlenirse, sütunlar, satırlar ve bölümler buna göre gizlenir.", "Show popup on load": "Yüklenirken pop-up göster", "Show Separators": "Ayırıcıları Göster", "Show Start/End links": "Başlangıç / Bitiş bağlantılarını göster", "Show system fields for single posts. This option does not apply to the blog.": "Tek gönderi için sistem alanlarını göster. Bu seçenek blog için geçerli değildir.", "Show system fields for the blog. This option does not apply to single posts.": "Blog için sistem alanlarını göster. Bu seçenek, tek gönderi için geçerli değildir.", "Show tags": "Etiketleri göster", "Show the content": "İçeriği göster", "Show the image": "Resmi göster", "Show the link": "Bağlantıyı göster", "Show the menu text next to the icon": "Menü metnini simgenin yanında gösterin", "Show the meta text": "Meta metni göster", "Show the navigation label instead of title": "Başlık yerine gezinti etiketini göster", "Show the navigation thumbnail instead of the image": "Görsel yerine gezinti küçükresmini göster", "Show the title": "Başlığı göster", "Show title": "Başlığı göster", "Show Title": "Başlığı göster", "Sidebar": "Kenar Çubuğu", "Size": "Boyut", "Slide all visible items at once": "Görünür öğeleri tek seferde kaydır", "Slidenav": "SlideNav", "Slider": "Kaydırıcı", "Slideshow": "Slayt Gösterisi", "Small": "Küçük", "Small (Phone Landscape)": "Küçük (Telefon Manzarası)", "Social": "Sosyal", "Social Icons": "Sosyal İkonları", "Split the dropdown into columns.": "Açılır pencereyi sütunlara bölün.", "Spread": "Yayılma", "Stack columns on small devices or enable overflow scroll for the container.": "Küçük aygıtlarda sütunları istifleyin ya da taşıyıcı için taşma kaydırma çubuklarını etkinleştirin.", "Stacked Center A": "Yığılmış Merkez A", "Stacked Center B": "Yığılmış Merkez B", "Stacked Center C": "Yığılmış Merkez A", "Status": "Durum", "Stretch the panel to match the height of the grid cell.": "Paneli ızgaranın yüksekliğine uyacak şekilde gerin.", "Style": "Stil", "Sublayout": "Altdüzen", "Subnav": "Alt navigasyon", "Subtitle": "Altbaşlık", "Switcher": "Değiştirici", "Syntax Highlighting": "Sözdizimi Vurgulama", "System Check": "Sistem Kontrolü", "Table": "Tablo", "Table Head": "Tablo Başlığı", "Tablet Landscape": "Tablet Manzarası", "Tags": "Etiketler", "Text": "Yazı", "Text Alignment": "Metin Hizalama", "Text Alignment Breakpoint": "Metin Hizalama Kesme Noktası", "Text Alignment Fallback": "Metin Hizalama Geridönüşü", "Text Color": "Yazı Rengi", "Text Large": "Büyük Text", "Text Style": "Yazı Stili", "The changes you made will be lost if you navigate away from this page.": "Bu sayfadan ayrılırsanız yaptığınız değişiklikler kaybolacaktır.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Yükseklik, içeriğine göre otomatik olarak uyarlanacaktır. Alternatif olarak, yükseklik görünümün yüksekliğine uyum sağlayabilir. <br> <br> Not: Viewport seçeneklerinden birini kullanırken bölüm ayarlarında yükseklik ayarlanmadığından emin olun.", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "Duvar etkisi, ızgara hücreleri farklı yüksekliklerde olsa bile, boşluksuz bir düzen oluşturur. ", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "Sayfa %modifiedBy% tarafından güncellendi. Değişikliklerinizi atın ve yeniden yükleyin?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "Şu anda düzenlemekte olduğunuz sayfa %modified_by% tarafından güncellendi. Değişikliklerinizi kaydetmek, önceki değişikliklerin üzerine yazacaktır. Yine de kaydetmek veya değişikliklerinizi silmek ve sayfayı yeniden yüklemek mi istiyorsunuz?", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Slayt gösterisi her zaman tam genişlikte yer alır ve yükseklik belirlenen orana otomatik olarak uyarlanır.", "The width of the grid column that contains the module.": "Modülü içeren kılavuz sütununun genişliği.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "YOOtheme Pro tema klasörü, temel işlevselliği bozacak şekilde yeniden adlandırıldı. Tema klasörünü yeniden adlandırın. <code>yootheme</code>.", "Thirds": "Üçüncüler", "Thirds 1-2": "Üçüncüler 1-2", "Thirds 2-1": "Üçüncüler 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Bu klasör, YOOtheme Pro kitaplığından düzenleri kullanırken indirdiğiniz görüntüleri saklar. Joomla görüntüleri klasörünün içinde bulunur.", "This is only used, if the thumbnail navigation is set.": "Bu, yalnızca küçük resim gezinme ayarı yapıldıysa kullanılır.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Bu düzen, web sitenizin medya kitaplığına indirilmesi gereken bir medya dosyası içerir. |||| Bu düzen, web sitenizin medya kitaplığına indirilmesi gereken %smart_count% medya dosyalarını içerir.", "This option doesn't apply unless a URL has been added to the item.": "Bu seçenek, öğeye bir URL eklenmediği sürece geçerli değildir.", "This option is only used if the thumbnail navigation is set.": "Bu seçenek sadece küçük navigasyon ayarlanmışsa kullanılır.", "Thumbnail Width/Height": "Küçükresimler Genişlik/Yükseklik", "Thumbnail Wrap": "Küçük Resim Paketi", "Thumbnails": "Küçükresimler", "Thumbnav Wrap": "Thumbnav Paketi", "Title": "Başlık", "title": "başlık", "Title Decoration": "Başlık Dekorasyonu", "Title Margin": "Başlık Kenarı", "Title Parallax": "Kaçkınlık Efekti Başlığı", "Title Style": "Başlık Stili", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Başlık stilleri yazı tipi boyutunda farklıdır, ancak önceden tanımlanmış bir renk, boyut ve yazı tipi ile gelebilir.", "Title Width": "Başlık Genişliği", "To left": "Sola", "To right": "Sağa", "To Top": "Yukarı", "Toolbar": "Araç çubuğu", "Top": "Üst", "Touch Icon": "Dokunmatik Simge", "Transition": "Geçiş", "Transparent Header": "Şeffaf Üstbilgi", "Type": "Tip", "Upload": "Yükle", "Upload a background image.": "Arka plan resmi yükle", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Sayfayı kapsayan isteğe bağlı bir arka plan resmi yükleyin. Kaydırma sırasında sabitlenir.", "Upload Layout": "Sayfa Düzeni Yükle", "Upload Preset": "Hazır Öğe Yükle", "Use a numeric pagination or previous/next links to move between blog pages.": "Blog sayfaları arasında hareket etmek için sayısal bir sayfalama veya önceki / sonraki bağlantıları kullanın.", "Use as breakpoint only": "Sadece kesme noktası olarak kullan", "Use double opt-in.": "Çift katılımı kullanın.", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Resim bölümün tamamını kapsamıyorsa, arka plan rengini harmanlama modları, şeffaf bir görüntü veya alan doldurmak için kullanın.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Resim bölümün tamamını kapsamıyorsa, arka plan rengini harmanlama modları, şeffaf bir görüntü veya alan doldurmak için kullanın.", "Use the background color in combination with blend modes.": "Karışık tarzların bileşiminde artalan rengini kullan.", "Users": "Kullanıcılar", "Using Dynamic Conditions": "Dinamik Koşulları Kullanma", "Using My Layouts": "Sayfa Düzenlerimi Kullanma", "Using My Presets": "Hazır öğeleri kullanma", "Using Pro Layouts": "Pro Sayfa Düzenlerini Kullanma", "Using Pro Presets": "Hazır pro öğeleri kullanma", "Using WooCommerce Dynamic Content": "WooCommerce Dinamik İçerik Kullanma", "Velocity": "Hız", "Version %version%": "Sürüm %version%", "Vertical Alignment": "Dikey Hizalama", "Vertical navigation": "Dikey navigasyon", "Vertically align the elements in the column.": "Sütundaki öğeleri dikey olarak hizalayın.", "Vertically center grid items.": "Dikey merkez hücrelerini ortala.", "Vertically center table cells.": "Dikey olarak ortadaki masa hücreleri.", "Vertically center the image.": "Resmi dikey olarak ortalayın.", "Vertically center the navigation and content.": "Navigasyon ve içeriği dikey ortalayın.", "Video": "Video", "Videos": "Videolar", "View Photos": "Fotoğrafları Görüntüle", "Visibility": "Görünürlük", "Visible on this page": "Bu sayfada görünür", "Visual": "Görsel", "Votes": "Oylamalar", "Warning": "Uyarı", "What's New": "Neler Yeni?", "When using cover mode, you need to set the text color manually.": "Kapak modunu kullanırken, metin rengini manuel ayarlamanız gerekir.", "Whole": "Bütün", "Widget": "Eklenti", "Widget Area": "Eklenti Alanı", "Width": "Genişlik", "Width 100%": "100% Genişlet", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Resim dikey veya yatay formatta ise, genişlik ve yükseklik buna göre ters çevrilecektir.", "Width/Height": "Yükseklik/Genişlik", "X-Large": "1 Kat Büyük", "X-Large (Large Screens)": "Bir Kat Büyük (Geniş Ekran)", "X-Small": "1 Kat Küçük", "YOOtheme API Key": "YOOtheme API Anahtarı", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro tamamen operasyonel ve yayına hazır.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro çalışmıyor. Tüm kritik konuların düzeltilmesi gerekiyor.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro çalışır durumdadır, ancak özelliklerin kilidini açmak ve performansı artırmak için düzeltilmesi gereken sorunlar vardır.", "Zoom": "Yakınlaştırma" }theme/languages/ca_ES.json000064400000073173151666572150011512 0ustar00{ "0": "0", "1": "1", "2": "2", "- Select -": "- Selecciona -", "- Select Module -": "- Selecciona el mòdul -", "- Select Position -": "- Selecciona la posició -", "- Select Widget -": "- Selecciona el giny -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "Ja existeix \"%name%\" a la biblioteca, es sobreescriurà en desar.", "%label% Position": "%label% Posició", "%name% already exists. Do you really want to rename?": "Ja existeix %name%. Realment voleu canviar el nom?", "%post_type% Archive": "Fitxer %post_type%", "%s is already a list member.": "%s ja és un membre de la llista.", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s ha sigut borrat de manera permanent i no pot ser re-importat. El contacte s'ha de tornar a subscriure per tornar a ser a la llista.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Col·lecció |||| %smart_count% Col·leccions", "%smart_count% File |||| %smart_count% Files": "%smart_count% Fitxer |||| %smart_count% Fitxers", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Fitxer seleccionat |||| %smart_count% Fitxers seleccionats", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Ícona |||| %smart_count% Ícones", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% descàrrega fallida: |||| %smart_count% descàrregues fallides:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Foto |||| %smart_count% Fotos", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Preconfiguració |||| %smart_count% Preconfiguracions", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Estil |||| %smart_count% Estils", "%smart_count% User |||| %smart_count% Users": "%smart_count% Usuari |||| %smart_count% Usuaris", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.A)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/A)", "1 Column": "1 Columna", "1 Column Content Width": "Ample del contingut per a 1 columna", "2 Columns": "2 Columnes", "3 Columns": "3 columnes", "5 Columns": "5 Columnes", "6 Columns": "6 Columnes", "a": "un", "About": "Quant a", "Accordion": "Acordió", "Active": "Actiu", "Active item": "Element actiu", "Add": "Afegeix", "Add a colon": "Afegeix una coma", "Add a leader": "Afegeix un líder", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Afegiu un efecte paral·laxi o fixeu el fons respecte al viewport mentre es desplaça.", "Add a parallax effect.": "Afegeix un efecte paral·laxi.", "Add bottom margin": "Afegeix marge a la part inferior", "Add Element": "Afegeix un element", "Add extra margin to the button.": "Afegeix marge addicional al botó.", "Add Folder": "Afegeix una carpeta", "Add Item": "Afegeix un element", "Add Media": "Afegeix un mèdia", "Add Menu Item": "Afegeix un element de menú", "Add Module": "Afegeix un mòdul", "Add Row": "Afegeix una fila", "Add Section": "Afegeix una secció", "Add text after the content field.": "Afegeix text després del camp del contingut.", "Add text before the content field.": "Afegeix text abans del camp del contingut.", "Add top margin": "Afegeix marge a la part superior", "Adding the Logo": "S'està afegint el logotip", "Adding the Search": "S'està afegint la cerca", "Adding the Social Icons": "S'està afegint les icones de xarxes socials", "Advanced": "Avançat", "After": "Després", "After Submit": "Després d'enviar", "Alert": "Alerta", "Align image without padding": "Alinea la imatge sense separació", "Align the filter controls.": "Alinea els controls del filtre.", "Align the image to the left or right.": "Alinea la imatge a l'esquerra o a la dreta.", "Align the image to the top or place it between the title and the content.": "Alinea la imatge a la part superior o col·loqueu-la entre el títol i el contingut.", "Align the image to the top, left, right or place it between the title and the content.": "Alinea la imatge en la part superior, esquerra, dreta o col·loqueu-la entre el títol i el contingut.", "Align the meta text.": "Alinea el text de les metadades.", "Align the navigation items.": "Alinea els elements de la navegació.", "Align the section content vertically, if the section height is larger than the content itself.": "Alinea el contingut de la secció verticalment, si l'alçada de la secció és superior al contingut.", "Align the title and meta text as well as the continue reading button.": "Alinea el títol i el text meta, així com el botó de continuar llegint.", "Align the title and meta text.": "Alinea el títol i el text de les metadades.", "Align the title to the top or left in regards to the content.": "Alinea el text a la part superior o esquerra pel que fa al contingut.", "Alignment": "Alineació", "Alignment Breakpoint": "Punt de ruptura d'alineació", "Alignment Fallback": "Respatllament d'alineació", "All backgrounds": "Tots els fons", "All colors": "Tots els colors", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Totes les imatges estan sota llicència <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a>, la qual cosa significa que podeu copiar, modificar, distribuir i utilitzar les imatges de forma gratuïta, fins i tot amb finalitats comercials, sense sol·licitar permís.", "All Items": "Tots els elements", "All layouts": "Tots els dissenys", "All styles": "Tots els estils", "All topics": "Tots els temes", "All types": "Tots els tipus", "All websites": "Tots els llocs web", "Allow mixed image orientations": "Permet diferents orientacions d'imatge", "Allow multiple open items": "Permet diversos elements oberts", "Animate background only": "Anima només el fons", "Animation": "Animació", "Any Joomla module can be displayed in your custom layout.": "Qualsevol mòdul de Joomla es pot mostrar en el disseny personalitzat.", "API Key": "Clau API", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Aplicar animació als elements una vegada es visualitzen. L'animació del desplaçament pot ser amb un valor fix o al 100% de la seva grandària.", "Author": "Autor", "Author Link": "Enllaç a l'Autor", "Auto-calculated": "Calculat automàticament", "Back": "Enrere", "Background Color": "Color del Fons", "Behavior": "Comportament", "Blend Mode": "Manera de mescla", "Blur": "Difuminar", "Bottom": "Inferior", "Breadcrumbs": "Ruta", "Breakpoint": "Punt de Ruptura", "Builder": "Constructor", "Button": "Botó", "Button Size": "Grandària del Botó", "Buttons": "Botons", "Cache": "Submemoria (Cache)", "Cancel": "Cancel·lar", "Center": "Centrar", "Center the module": "Centrar el Módulo", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "L'alineació central, esquerra i dreta pot dependre d'un punt de ruptura i requerir una caiguda cap a enrere.", "Changelog": "Registre de canvis", "Choose a divider style.": "Triï un estil de divisor.", "Choose a map type.": "Triï un tipus de mapa.", "Choose Font": "Triï font", "Choose the icon position.": "Triï la posició de la icona.", "Class": "Classe", "Clear Cache": "Netejar la Memòria (cau)", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Esborrar les imatges i els recursos emmagatzemats en (la memòria) caché. Les imatges que necessiten ser canviades de grandària s'emmagatzemen a la carpeta de caché del tema. Després de tornar a carregar una imatge amb el mateix nom, haurà d'esborrar la (memòria) caché.", "Close": "Tancar", "Code": "Codi", "Columns": "Columnes", "Columns Breakpoint": "Punt de ruptura de les Columnes", "Content": "Contingut", "content": "contingut", "Copy": "Copiar", "Custom Code": "Codi personalitzat", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Decora el titular amb un divisor, un punt decoratiu o una línia que està centrada verticalment a l'encapçalat.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Decora el títol amb un divisor, un punt decoratiu o una línia que està centrada verticalment a l'encapçalat.", "Decoration": "Decoració", "Define a unique identifier for the element.": "Defineixi un identificador únic per a l'element.", "Define an alignment fallback for device widths below the breakpoint.": "Defineixi disposició d'alineació d'amples per sota dels punts de tall establerts.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Defineixi un a més noms de classe per a l'element. Separi múltiples classes amb espais..", "Define the alignment in case the container exceeds the element max-width.": "Defina la alineación en caso de exceder el ancho máximo del contenedor.", "Define the device width from which the alignment will apply.": "Defineixi l'ample del dispositiu pel qual s'aplicarà aquesta alineació.", "Delete": "Esborrar", "Description List": "Llista Descriptiva", "Desktop": "Escriptori", "Determine how the image or video will blend with the background color.": "Determini com es fusionarà la imatge o el video amb el color de fons.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Determini si la imatge s'ajustarà a les dimensions de la secció tallant-la o emplenant les àrees buides amb el color de fons", "Display": "Mostrar", "Display a divider between sidebar and content": "Mostrar un divisor entre la barra lateral i el contingut", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Mostra un menú seleccionant la posició en la qual hauria d'aparèixer. Per exemple, publiqui el menú principal en la posició de la barra de navegació i un menú alternatiu en la posició mòbil.", "Display icons as buttons": "Mostrar icones com a botons", "Display on the right": "Mostrar a la Dreta", "Display the breadcrumb navigation": "Mostrar la ruta de navegació", "Display the first letter of the paragraph as a large initial.": "Mostra la primera lletra del paràgraf com una inicial gran. (Lletra Cabdal)", "Display the image only on this device width and larger.": "Mostra la imatge només en aquest ample de dispositiu o majors.", "Display the module only from this device width and larger.": "Muestra el módulo sólo en este ancho de dispositivo y mayores.", "Divider": "Divisor", "Download": "Descarregar", "Drop Cap": "Lletra Cabdal", "Dropdown": "Desplegable", "Edit": "Editar", "Edit Items": "Editar Elements", "Edit Menu Item": "Editar Element de Menu.", "Edit Module": "Editar Mòdul", "Edit Settings": "Editar Ajustos", "Enable autoplay": "Activar Reproducción automática", "Enable drop cap": "Activar Lletra Cabdal", "Enable map dragging": "Habilitar arrossegar mapa", "Enable map zooming": "Habilitar el zoom del mapa", "Enter a subtitle that will be displayed beneath the nav item.": "Introdueixi un subtítol que es mostrarà sota l'element de navegació.", "Enter an optional footer text.": "Introdueixi un text de peu de pàgina opcional.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Introdueixi un text opcional per a l'atribut de títol de l'enllaç, que es mostrarà en posicionar-se a sobre.", "Enter the author name.": "Introdueixi el nom de l'autor.", "Enter the image alt attribute.": "Introdueixi l'atribut \"alt\" de la imatge.", "Enter the text for the link.": "Introdueixi el text per a l'enllaç.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Ingressa la <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\"> clau de la API de Google Maps </a> per usar Google Maps en comptes de OpenStreetMap. En fer-ho també activarà opcions addicionals del mapa, com poder modificar els colors, o la lluminositat dels teus mapes.", "Favicon": "Favicon (icona de favorits)", "Fix the background with regard to the viewport.": "Corregir el fons pel que fa a la finestra gràfica.", "Fixed-Inner": "Fix-Interior", "Fixed-Left": "Fix a l'esquerra", "Fixed-Outer": "Fix-Exterior", "Fixed-Right": "Fix a la dreta", "Folder Name": "Nom de la carpeta", "Footer": "Peu de pàgina", "Full width button": "Botó d'ample complet", "Google Maps": "Google Fonts", "Grid": "Quadrícula", "Grid Width": "Ample de la quadrícula", "Halves": "Mitades", "Header": "Encapçalament", "Headline": "Titular", "Headline styles differ in font size and font family.": "Els estils de títol varien en gruix de la font però també poden incloure un color, grandària i tipografia predefinits.", "Height": "Alçada", "Hide marker": "Ocultar marcador", "Home": "Pàgina d'Inici", "Horizontal Center": "Centrat Horitzontal", "Horizontal Left": "Centrat a l'Esquerra", "Horizontal Right": "Horitzontal Dreta", "HTML Element": "Element HTML", "Hue": "Matís", "Icon": "Icona", "Icon Color": "Color del Icono", "ID": "ID (Identificador)", "Image": "Imagen", "Image Alignment": "Alineación de la Imagen", "Image Alt": "Texto Alternativo a la Imagen", "Image Attachment": "Adjunt d'imatge", "Image Box Shadow": "Ombra del quadre d'imatge", "Image Position": "Posició de la Imatge", "Image Size": "Grandària d'Imatge", "Image/Video": "Imatge/Video", "Inset": "Requadre", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "En lloc d'utilitzar una imatge personalitzada, pot fer clic en el llapis per seleccionar una icona de la biblioteca d'icones.", "Inverse Logo (Optional)": "Logotip invers (opcional)", "Invert lightness": "Invertir Lluminositat", "Item": "Article", "Items": "Articles", "Large (Desktop)": "Gran (Escriptori)", "Large Screens": "Pantalles grans", "Larger padding": "Espacio Interno grande", "Layout": "Esquema del Disseny (Layout)", "Left": "Izquierda", "Library": "Biblioteca", "Lightness": "Lluminositat", "Link": "Enllaç", "Link Style": "Estil de l'Enllaç", "Link Text": "Texto del Enlace", "Link Title": "Títol de l'Enllaç", "List": "Llista", "List Style": "Estil de la Llista", "Location": "Ubicació", "Logo Image": "Imagen del Logo", "Logo Text": "Text del Logo", "Loop video": "Vídeo en bucle", "Map": "Mapa", "Margin": "Marge", "Marker": "Marcador", "Match content height": "Igualar l'alçada del contingut", "Match height": "Igualar l'alçada", "Max Width": "Amplària Màxima", "Max Width (Alignment)": "Ample màxim (alineació)", "Medium (Tablet Landscape)": "Mitjà (Tableta en Horitzontal)", "Menu Style": "Estil del Menu", "Meta": "Meta (Etiquetes d'Informació)", "Mobile": "Mòbil", "Mobile Logo (Optional)": "Logo per a Mòbils (Opcional)", "Mode": "Manera", "Move the sidebar to the left of the content": "Moure la barra lateral a l'esquerra del contingut", "Name": "Nom", "Navbar": "Barra de Navegació", "Navigation Label": "Etiqueta de Navegació", "New Menu Item": "Nou Element de Menú", "New Module": "Nou Mòdul", "No files found.": "No es van trobar Arxius.", "No font found. Press enter if you are adding a custom font.": "No es va trobar font. Premi Intro si està agregant una font personalitzada.", "No layout found.": "No s'ha trobat cap disseny.", "Offcanvas Mode": "Manera sense llenç (Offcanvas)", "Open in a new window": "Obrir en una nova finestra", "Open the link in a new window": "Obrir l'enllaç en una nova finestra", "Order": "Ordre", "Overlap the following section": "Superposi la següent secció", "Overlay Color": "Color de superposició", "Padding": "Espai de farciment Intern (Padding)", "Panel": "Panell", "Panels": "Panells", "Phone Landscape": "Mòbil en Horitzontal", "Phone Portrait": "Mòbil en Vertical", "Placeholder Image": "Imatge del marcador de posició", "Position": "Posició", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Coloqui la navegació del filtre en la part superior, esquerra o dreta. Es pot aplicar un estil més gran a la navegació esquerra i dreta.", "Poster Frame": "Marco del Cartell", "Quarters": "Quarts", "Quarters 1-1-2": "Quarts 1-1-2", "Quarters 1-2-1": "Quarts 1-2-1", "Quarters 1-3": "Quarts 1-3", "Quarters 2-1-1": "Quarts 2-1-1", "Quarters 3-1": "Quarts 3-1", "Quotation": "Cita", "Remove bottom margin": "Treure el marge inferior", "Remove bottom padding": "Treure l'ample de farciment inferior", "Remove top margin": "Eliminar el marge superior", "Remove top padding": "Treure l'ample de farciment superior", "Reset to defaults": "Restablir els valors predeterminats", "Row": "Fila", "Saturation": "Saturació", "Save": "Guardar", "Save %type%": "Guardar %type%", "Save Layout": "Guardar Disseny", "Search": "Cercar", "Search Style": "Estil de Cerca", "Section": "Secció", "Select": "Seleccionar", "Select a grid layout": "Seleccioni un disseny de quadrícula", "Select a predefined meta text style, including color, size and font-family.": "Seleccioni un estil de meta-text predefinit, incloent color, grandària i família de la font.", "Select a predefined text style, including color, size and font-family.": "Seleccioni un estil de text predefinit, inclòs el color, la grandària i la família de la font.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Selecciona un arxiu de vídeo o ingressa un vincle des de <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> o <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Seleccioni un logo alternatiu amb color invers, p ex.: Blanc, per a una millor visibilitat en fons foscos. Es mostrarà automàticament, si és necessari.", "Select an alternative logo, which will be used on small devices.": "Seleccioni un logotip alternatiu, que s'utilitzarà en dispositius petits.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Seleccioni una imatge opcional que es mostri fins que es reprodueixi el vídeo. Si no es selecciona, el primer quadre de video es mostra com el marc del cartell.", "Select header layout": "Selecció del disseny de l'encapçalat", "Select Image": "Seleccionar Imatge", "Select the icon color.": "Seleccioni el color de la icona.", "Select the image border style.": "Seleccioni l'estil de la vora de la imatge.", "Select the image box shadow size.": "Seleccioni la grandària de la caixa d'ombra de la imatge", "Select the link style.": "Seleccioni l'estil d'enllaç.", "Select the list style.": "Seleccioni l'estil de llista.", "Select the position that will display the search.": "Seleccioni la posició que mostrarà la cerca", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Seleccioni la posició que mostrarà les icones socials. Asseguri's d'agregar els seus vincles (urls) de perfil social o no es mostraran les icones.", "Select the search style.": "Seleccioni l'estil de cerca.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Seleccioni l'estil per al ressaltat de sintaxi de codi. Utilitzi GitHub per a llum i Monokai per a fons foscos.", "Select the subnav style.": "Seleccioni l'estil de submenú de navegació.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Estableixi un ample de barra lateral en percentatge i la columna de contingut s'ajustarà en conseqüència. L'ample no baixarà per sota de l'ample mínim de la barra lateral, que pot establir en la secció Estilo.", "Set an additional transparent overlay to soften the image or video.": "Estableixi una superposició transparent addicional per suavitzar la imatge del vídeo.", "Set how the module should align when the container is larger than its max-width.": "Estableixi com ha d'alinear-se el mòdul quan el contenidor és més gran que la seva amplària màxima.", "Set light or dark color mode for text, buttons and controls.": "Estableix la presentació de color (clar o fosc) per a text, botons i controls.", "Set the breakpoint from which the sidebar and content will stack.": "Estableixi el punt d'interrupció des del qual la barra lateral i el contingut s'apilaran.", "Set the button size.": "Ajusti la grandària del botó.", "Set the button style.": "Estableixi l'estil del botó.", "Set the icon color.": "Establir el color de la icona.", "Set the initial background position, relative to the section layer.": "Estableixi la posició de fons inicial, en relació amb la capa de secció.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Defineixi la resolució inicial en la qual es mostrarà el mapa. 0 està completament allunyat i 18 té la resolució més alta ampliada.", "Set the link style.": "Establir l'estil d'enllaç.", "Set the maximum content width.": "Estableixi l'ample màxim del contingut.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Estableixi l'ample màxim del contingut. Nota: La secció ja pot tindre un ample màxim, que no podrá superar.", "Set the padding between sidebar and content.": "Estableixi l'espai de farciment entre la barra lateral i el contingut.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Estableixi el marge vertical. Nota: El marge superior del primer element i el marge inferior de l'últim element sempre s'eliminen. En el seu lloc, defineixi els valors de la quadrícula.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Estableixi el marge vertical. *Nota: El marge superior de la primera quadrícula i el marge inferior de l'última quadrícula sempre es treuen. Defineixi els que estan en la configuració de secció.", "Set the vertical padding.": "Ajusti l'espaiat del farciment vertical (padding).", "Set the video dimensions.": "Estableixi les dimensions del vídeo.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Estableixi l'ample i l'alçada en píxels (per exemple, 600). L'ajust d'un sol valor conserva les proporcions originals. La imatge es redimensionará i retallarà automàticament.", "Settings": "Ajustos", "Show Content": "Mostrar el contingut", "Show map controls": "Mostrar els controls del mapa", "Show or hide content fields without the need to delete the content itself.": "Mostrar o ocultar camps de contingut sense necessitat d'eliminar el contingut en si.", "Show popup on load": "Mostrar element emergent en càrrega", "Show the content": "Mostrar el contingut", "Show the image": "Mostrar la imatge", "Show the link": "Mostrar l'enllaç", "Show the menu text next to the icon": "Mostrar el text del menú al costat de la icona", "Show the meta text": "Mostrar el meta text", "Show the title": "Mostrar el títol", "Show title": "Mostrar títol", "Show Title": "Mostrar títol", "Sidebar": "Barra lateral", "Site": "Lloc", "Size": "Grandària", "Small (Phone Landscape)": "Petit (Mòbil Horitzontal)", "Split the dropdown into columns.": "Divideixi la llista desplegable en columnes.", "Spread": "Propagació (Spread)", "Stacked Center A": "Centre Apilat A", "Stacked Center B": "Centre Apilat B", "Stretch the panel to match the height of the grid cell.": "Estiri el panell perquè coincideixi amb l'altura de la cel·la de la reixeta (grid).", "Style": "Estil", "Subnav": "Subnavegació", "Subtitle": "Subtítol", "Switcher": "Commutador", "Syntax Highlighting": "Ressaltat de sintaxi", "Table": "Tableta", "Tablet Landscape": "Tableta en Horitzontal", "Tags": "Etiquetes", "Text Color": "Color del Text", "Text Style": "Estil del Text", "The Accordion Element": "L'element acordió", "The Alert Element": "L'element alerta", "The Breadcrumbs Element": "L'element ruta de navegació", "The Button Element": "L'element botó", "The changes you made will be lost if you navigate away from this page.": "Els canvis realitzats es perdran si navega fora d'aquesta pàgina.", "The Code Element": "L'element codi", "The Countdown Element": "L'element compte enrere", "The Description List Element": "L'element llista de descripcions", "The Divider Element": "L'element divisor", "The Gallery Element": "L'element galeria", "The Grid Element": "L'element graella", "The Headline Element": "L'element titular", "The Icon Element": "L'element icona", "The Image Element": "L'element imatge", "The List Element": "L'element llista", "The Map Element": "L'element mapa", "The Nav Element": "L'element navegació", "The Newsletter Element": "L'element butlletí", "The Overlay Element": "L'element superposició", "The Overlay Slider Element": "L'element control lliscant de superposició", "The Panel Element": "L'element plafó", "The Panel Slider Element": "L'element controls lliscant de plafons", "The Popover Element": "L'element finestra emergent", "The Quotation Element": "L'element citació", "The Search Element": "L'element cerca", "The Slideshow Element": "L'element presentació de diapositives", "The Social Element": "L'element xarxes socials", "The Subnav Element": "L'element subnavegació", "The Switcher Element": "L'element commutador", "The Table Element": "L'element taula", "The Text Element": "L'element text", "The Totop Element": "L'element cap a dalt", "The Video Element": "L'element vídeo", "The width of the grid column that contains the module.": "L'ample de la columna de quadrícula que conté el mòdul.", "Thirds": "El ancho de la columna de cuadrícula que contiene el módulo.", "Thirds 1-2": "Terços 1-2", "Thirds 2-1": "Terços 2-1", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Aquest disseny inclou una imatge que ha de ser descarregada a la biblioteca multimèdia del seu lloc web. |||| Aquest disseny inclou %smart_count% imatges que han de ser descarregades a la biblioteca multimèdia del seu lloc web.", "Thumbnails": "Miniatures", "Title": "Títol", "title": "títol", "Title Decoration": "Decoració del Títol", "Title Style": "Estil del títol", "To Top": "Anar a dalt", "Toolbar": "Barra d'eines", "Top": "A dalt", "Touch Icon": "Icona Tactil", "Transparent Header": "Capçalera transparent", "Type": "Tipus", "Upload": "Pujar", "Upload a background image.": "Carregar una imatge de fons.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Carregui una imatge de fons opcional que cobreixi la pàgina. La imatge s'ajustarà mentre és desplaça.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Utilitzi el color de fons en combinació amb les maneres de mescla, o una imatge transparent per emplenar l'àrea, si la imatge no cobreix tota la secció.", "Version %version%": "Versión %version%", "Vertical Alignment": "Alineació Vertical", "Video": "Vídeo", "Visibility": "Visibilitat", "Visible on this page": "Visible en aquesta pàgina", "Whole": "Tot", "Width": "Ample", "X-Large (Large Screens)": "X-Large (Pantalles Grans)" }theme/languages/hr_HR.json000064400000003050151666572150011525 0ustar00{ "- Select -": "- izaberite -", "- Select Module -": "- izaberite module -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" već postoji u biblioteci, spremanjem ćete prepisati postojeću verziju.", "%label% Position": "%label% Pozicija", "About": "O nama", "Add": "Dodaj", "Add a colon": "Dodaj kolonu", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Dodaj vlastitu Java Skriptu na stranicu. <script> tag nije potreban.", "Add Element": "Dodaj element", "Add Folder": "Dodaj datoteku", "Add Item": "Dodaj stavku", "Add Menu Item": "Dodaj stavku izbornika", "Add Module": "Dodaj modul", "Add Row": "Dodaj red", "Add Section": "Dodaj sekciju", "Advanced": "Napredno", "Alert": "Upozorenje", "Align image without padding": "Poravnanje slike bez praznog razmaka", "Align the image to the left or right.": "Poravnanje slike u desnu ili u lijevu stranu", "All layouts": "Svi predlošci", "All topics": "Sve teme", "All types": "Svi tipovi", "All websites": "Sve web stranice", "Animation": "Animacija", "Background Color": "Pozadinska boja", "Bottom": "Dno", "Breadcrumbs": "Putanja", "Button": "Gumb", "Button Size": "Veličina gumba", "Buttons": "Gumbi", "Cancel": "Odbaci", "Center": "Centar", "Close": "Zatvori", "Code": "Kod", "Color": "Boja", "Copy": "Kopiraj", "Delete": "Izbriši", "Display": "Ekran", "Edit": "Uredi" }theme/languages/el_GR.json000064400000017223151666572150011522 0ustar00{ "- Select -": "- Επέλεξε -", "- Select Module -": "- Επέλεξε ένθεμα -", "- Select Position -": "Επέλεξε θέση", "- Select Widget -": "Επέλεξε widget", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" υπάρχει ήδη στη βιβλιοθήκη, όταν γίνει αποθήκευση θα αντικατασταθεί.", "(ID %id%)": "(ID %id%)", "%label% Position": "%label% Θέση", "%name% already exists. Do you really want to rename?": "%name% υπάρχει ήδη. Συνεχίζεις να επιθυμείς την μετονομασία;", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Συλλογή |||| %smart_count% Συλλογές", "%smart_count% File |||| %smart_count% Files": "%smart_count% Αρχείο |||| %smart_count% Αρχεία", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Επιλεγμένο αρχείο |||| %smart_count% Επιλεγμένα αρχεία", "About": "Σχετικά", "Accordion": "Accordion", "Add": "Προσθήκη", "Add a colon": "Προσθήκη στήλης", "Add a parallax effect.": "Προσθήκη parallax effect", "Add bottom margin": "Πρόσθεσε κάτω περιθώριο", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Προσθέστε custom Javascript στην ιστοσελίδα σας. Το tag <script> δεν χρειάζεται.", "Add Element": "Προσθήκη στοιχείου", "Add extra margin to the button.": "Πρόσθεσε έξτρα κενό στο κουμπί.", "Add Folder": "Προσθήκη φακέλου", "Add Item": "Προσθήκη αντικειμένου", "Add Menu Item": "Προσθήκη στοιχείου μενού", "Add Module": "Προσθήκη ενθέματος", "Add Row": "Προσθήκη γραμμής", "Add Section": "Προσθήκη ενότητας", "Add top margin": "Πρόσθεσε περιθώριο πάνω", "Advanced": "Προηγμένα", "Alert": "Προειδοποίηση", "Align image without padding": "Στοίχιση εικόνας χωρίς padding", "Align the image to the left or right.": "Στοίχιση εικόνας στα αριστερά ή στα δεξιά", "Align the image to the top, left, right or place it between the title and the content.": "Ευθυγράμμιση εικόνας πάνω, αριστερά, δεξιά ή τοποθέτηση μεταξύ του τίτλου και του περιεχομένου.", "Alignment": "Παράταξη", "Alignment Breakpoint": "Breakpoint παράταξης", "Alignment Fallback": "Εφεδρική παράταξη", "All layouts": "Όλα τα layouts", "All topics": "Όλα τα θέματα", "All types": "Όλοι οι τύποι", "All websites": "Όλα τα websites", "Allow multiple open items": "Επέτρεψε πολλαπλά ανοιχτά αντικείμενα", "Animation": "Animation", "Author": "Συγγραφέας", "Author Link": "Σύνδεσμος συγγραφέα", "Auto-calculated": "Αυτόματος υπολογισμός", "Back": "Πίσω", "Background Color": "Χρώμα background", "Behavior": "Συμπεριφορά", "Blend Mode": "Μέθοδος blend", "Blur": "Θόλωση", "Bottom": "Κάτω", "Breadcrumbs": "Breadcrumbs", "Breakpoint": "Σημείο διακοπής", "Builder": "Builder", "Button": "Κουμπί", "Button Size": "Μέγεθος κουμπιού", "Buttons": "Κουμπιά", "Cache": "Προσωρινή μνήμη", "Cancel": "Ακύρωση", "Center": "Κέντρο", "Center the module": "Κέντραρε το ένθεμα", "Changelog": "Αρχείο αλλαγών", "Choose a divider style.": "Επιλογή στυλ διαχωρισμού", "Choose a map type.": "Επιλογή τύπου χάρτη", "Choose Font": "Επιλογή γραμματοσειράς", "Choose the icon position.": "Επιλογή θέσης εικονιδίου", "Class": "Class", "Clear Cache": "Καθαρισμός προσωρινής μνήμης", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Καθαρισμός προσωρινής μνήμης και στοιχείων. Οι εικόνες που πρέπει να αλλάξει το μέγεθος τους αποθηκεύονται στο φάκελο cache του θέματος. Αν ξανακάνεις upload μια φωτογραφία με το ίδιο όνομα, πρέπει να καθαρίσεις την προσωρινή μνήμη.", "Close": "Κλείσιμο", "Code": "Κώδικας", "Color": "Χρώμα", "Columns": "Στήλες", "Columns Breakpoint": "Σημείο διακοπής στηλών", "Components": "Εφαρμογές", "Content": "Περιεχόμενο", "Controls": "Controls", "Copy": "Αντιγραφή", "Custom Code": "Custom κώδικας", "Decoration": "Διακόσμηση", "Define a unique identifier for the element.": "Όρισε ένα μοναδικό ID γι' αυτό το στοιχείο.", "Delete": "Διαγραφή", "Description List": "Λίστα περιγραφής", "Desktop": "Υπολογιστής", "Display": "Προβολή", "Display icons as buttons": "Προβολή εικονιδίων ως κουμπιά", "Display on the right": "Προβολή στα δεξιά", "Display the breadcrumb navigation": "Προβολή breadcrubs", "Divider": "Διαχωριστής", "Download": "Κατέβασμα", "Drop Cap": "Πρώτο γράμμα κεφαλαίο", "Dropdown": "Dropdown", "Edit": "Επεξεργασία", "Edit Menu Item": "Επεξεργασία στοιχείου μενού", "Edit Module": "Επεξεργασία ενθέματος", "Edit Settings": "Επεξεργασία ρυθμίσεων", "Enable autoplay": "Ενεργοποίηση αυτόματης αναπαραγωγής", "Enable drop cap": "Ενεργοποίηση κεφαλαίου πρώτου γράμματος", "Footer": "Footer", "General": "Γενικά", "Google Analytics": "Google Analytics", "Google Fonts": "Google Fonts", "Google Maps": "Google Maps", "Html": "Html", "Image": "Εικόνα", "Image Alt": "Alt εικόνας", "Image Size": "Μέγεθος εικόνας", "Image/Video": "Εικόνα/Βίντεο", "Left": "Αριστερά", "Library": "Βιβλιοθήκη", "Lightness": "Φωτεινότητα", "Link": "Σύνδεσμος", "Link Style": "Στυλ συνδέσμου", "Link Text": "Κείμενο συνδέσμου", "Link Title": "Τίτλος συνδέσμου", "List": "Λίστα", "List Style": "Στυλ λίστας", "Location": "Τοποθεσία", "Logo Image": "Εικόνα λογοτύπου", "Logo Text": "Κείμενο λογοτύπου", "Loop video": "Loop video", "Map": "Χάρτης", "Margin": "Margin", "Menu Style": "Στυλ μενού", "Meta": "Meta", "Mobile": "Κινητό", "Mobile Logo (Optional)": "Λογότυπο κινητού", "Name": "Όνομα", "New Menu Item": "Νέο στοιχείο μενού", "Position": "Θέση" }theme/languages/pl_PL.json000064400000207604151666572150011544 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Wybierz -", "- Select Module -": "- Wybierz moduł -", "- Select Position -": "- Wybierz pozycję -", "- Select Widget -": "Wybierz widżet", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" istnieje już w bibliotece, zostanie nadpisana przy zapisie.", "(ID %id%)": "(ID %id%)", "%element% Element": "element %element%", "%email% is already a list member.": "%email% jest już członkiem listy.", "%email% was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%email% został trwale usunięty i nie można go ponownie zaimportować. Kontakt musi ponownie zapisać się na listę, aby do niej powrócić.", "%label% - %group%": "%label% - %group%", "%label% (%depth%)": "%label% (%depth%)", "%label% Location": "Lokalizacja %label%", "%label% Position": "%label% Pozycja", "%name% already exists. Do you really want to rename?": "%name% już istnieje. Czy na pewno chcesz zmienić nazwę?", "%name% Copy": "Kopiuj %name%", "%name% Copy %index%": "%name% Kopiuj %index%", "%post_type% Archive": "%post_type% Archiwum", "%s is already a list member.": "%s jest już pozycją listy.", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s został usunięty i nie może zostać zaimportowany ponownie. Kontakt musi zostać zasubskrybowany ponownie, aby wrócił na listę.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Kolekcja |||| %smart_count% Kolekcje", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Element |||| %smart_count% Elementy", "%smart_count% File |||| %smart_count% Files": "%smart_count% Plik |||| %smart_count% Pliki", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Wybrany plik |||| %smart_count% Wybrane pliki", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Ikona |||| %smart_count% Ikony", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Układ |||| %smart_count% Układy", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "%smart_count% pobranie pliku media nie powiodło się: |||| %smart_count% pobrania plików media nie powiodło się:", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Zdjęcie |||| %smart_count% Zdjęcia", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Preset |||| %smart_count% Presety", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Styl |||| %smart_count% Style", "%smart_count% User |||| %smart_count% Users": "%smart_count% Użytkownik |||| %smart_count% Użytkownicy", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% są załadowane tylko z wybranego elementu nadrzędnego %taxonomy%.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% Presety", "08.06.1999 (m.d.Y)": "08.06.1999 (m.d.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (m/d/Y)", "1 Column": "1 kolumna", "1 Column Content Width": "1 Kolumna o szerokości zawartości", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Columns": "2 Kolumny", "20%": "20%", "25%": "25%", "2X-Large": "2X-Large", "3 Columns": "3 kolumny", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3rd Party Integration": "Integracje zewnętrzne", "3X-Large": "3X-Large", "4 Columns": "4 Kolumny", "40%": "40%", "5 Columns": "5 Kolumn", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 Aug, 1999 (j M, Y)", "6 Columns": "6 Kolumn", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Zalecany jest wyższy limit pamięci. Ustaw wartość <code>memory_limit</code> na minimum 128M w pliku <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.", "A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Zalecany jest wyższy limit przesyłania. Ustaw wartosć <code>post_max_size</code> na minimum 8M w pliku <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Zaleca się wyższy limit przesyłania. Ustaw <code> upload_max_fileSize </code> na 8M w <a href = \"https://php.net/manual/en/ini.core.php\" target = \"_ blank\"> konfiguracja php </a>.", "About": "O", "Above Content": "Powyższa zawartość", "Above Title": "Powyższa nazwa", "Absolute": "Absolutna", "Accessed": "Dostępna", "Accessed Date": "Data dostępu", "Accordion": "Akordeon", "Active": "Aktywna", "Active Filters": "Aktywne filtry", "Active Filters Count": "Liczba aktywnych filtrów", "Active item": "Aktywna pozycja", "Add": "Dodaj", "Add a colon": "Dodaj średnik", "Add a comma-separated list of font weights to load, e.g. 300, 400, 600. Look up available variants at <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.": "Dodaj liste wag czcionek oddzielaną przecinkami, aby załadować, np. 300, 400, 600. Wyszukaj dostępne warianty pod adresem <a href=\"https://fonts.google.com\" target=\"_blank\">Google Fonts</a>.", "Add a leader": "Dodaj wprowadzenie", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Dodaje efekt paralaksy lub ustawia wysokość tła zależnie od pola widoku podczas scrollowania.", "Add a parallax effect.": "Dodaj efekt parallax.", "Add a stepless parallax animation based on the scroll position.": "Dodaj bezstopniową animację efektu paralaksy w oparciu o pozycję przewijania.", "Add animation stop": "Dodaj zatrzymanie animacji", "Add bottom margin": "Dodaj margines dolny", "Add clipping offset": "Dodaj przesunięcie wycinka", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Dodaj niestandardowe CSS lub Less do swojej witryny. Dostępne są wszystkie zmienne motywu. Znacznik <code><style></code> nie jest potrzebny.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Dodaj niestandardowy JavaScript do swojej witryny. Tag <code><script></code> nie jest potrzebny.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Dodaj niestandardowy JavaScript, który ustawia pliki cookie. Zostanie załadowany po wyrażaniu zgody. Tag <code><script></code> nie jest potrzebny.", "Add Element": "Dodaj element", "Add Folder": "Dodaj katalog", "Add Item": "Dodaj pozycję", "Add margin between": "Dodaj margines pomiędzy", "Add Media": "Dodaj media", "Add Menu Item": "Dodaj pozycję w Menu", "Add Module": "Dodaj Moduł", "Add Row": "Dodaj wiersz", "Add Section": "Dodaj sekcję", "Add text after the content field.": "Dodaj tekst po polu zawartość.", "Add text before the content field.": "Dodaj tekst przed polem zawartość.", "Add to Cart": "Dodaj do koszyka", "Add to Cart Link": "Link pola Add to Cart", "Add to Cart Text": "Tekst pola Add to Cart", "Add top margin": "Dodaj górny margines", "Adding a New Page": "Dodawanie nowej strony", "Adding the Logo": "Dodawanie Logo", "Adding the Search": "Dodawanie Wyszukiwarki", "Adding the Social Icons": "Dodawanie ikonek społecznościowych", "Additional Information": "Dodatkowe informacje", "Address": "Adres", "Advanced": "Zaawansowane", "Advanced WooCommerce Integration": "Zaawansowana integracja WooCommerce", "After": "Po", "After Display Content": "Po wyświetleniu zawartości", "After Display Title": "Po wyświetleniu tytułu", "After Submit": "Po zatwierdzeniu", "Alert": "Powiadomienie", "Align image without padding": "Wyrównaj obraz bez marginesu wewnętrznego (padding)", "Align the filter controls.": "Wyrównaj przyciski filtrujące", "Align the image to the left or right.": "Wyrównaj obraz do lewej lub prawej strony", "Align the image to the top or place it between the title and the content.": "Wyrównaj obraz do góry lub pomiędzy tytułem lub ustaw go pomiędzy tytułem i treścią", "Align the image to the top, left, right or place it between the title and the content.": "Wyrównaj obraz do góry, lewej, prawej strony lub ustaw go pomiędzy tytułem i treścią", "Align the meta text.": "Wyrównaj tekst meta", "Align the navigation items.": "Wyrównaj elementy nawigacji.", "Align the section content vertically, if the section height is larger than the content itself.": "Wyrównaj zawartość sekcji pionowo, jeśli wysokość sekcji jest większa niż sama treść.", "Align the title and meta text as well as the continue reading button.": "Wyrównaj tytuł i meta tekst, a także przycisk kontynuuj czytanie.", "Align the title and meta text.": "Wyrównaj tytuł i meta tekst.", "Alignment": "Wyrównanie", "Alignment Breakpoint": "Breakpoint dla wyrównania", "Alignment Fallback": "Fallback dla wyrównania", "All backgrounds": "Wszystkie tła", "All colors": "Wszystkie kolory", "All except first page": "Wszystko oprócz pierwszej strony", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Wszystkie zdjęcia są pod licencją <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> , co oznacza, że możesz kopiować, modyfikować, upowszechniać oraz wykorzystywać zdjęcia za darmo, włączając przy tym cele komercyjne bez konieczności pytania o taką możliwość.", "All Items": "Wszystkie elementy", "All layouts": "Wszystkie szablony", "All pages": "Wszystkie strony", "All presets": "Wszystkie presety", "All styles": "Wszystkie style", "All topics": "Wszystkie tematy", "All types": "Wszystkie typy", "All websites": "Wszystkie witryny", "All-time": "Zawsze", "Allow mixed image orientations": "Zezwalaj na mieszane orientacje obrazów", "Allow multiple open items": "Pozwól na otwarcie wielu pozycji", "Alphabetical": "Alfabetycznie", "Alphanumeric Ordering": "Kolejność alfanumeryczna", "Animate background only": "Animuj tylko tło", "Animate items": "Animuj pozycje", "Animate strokes": "Animuj \"strokes\"", "Animation": "Animacja", "Animation Delay": "Czas działania animacji", "Any": "Jakiekolwiek", "Any Joomla module can be displayed in your custom layout.": "Każdy moduł Joomla może być wyświetlony w twoim customowym układzie.", "Any WordPress widget can be displayed in your custom layout.": "Każdy widżet z WordPress'a może być wyświetlony w twoim customowym układzie.", "API Key": "Klucz API", "Apply a margin between the navigation and the slideshow container.": "Zastosuj margines między nawigacją a kontenerem pokazu slajdów.", "Apply a margin between the overlay and the image container.": "Zastosuj margines między nakładką(overlay) a kontenerem obrazu.", "Apply a margin between the slidenav and the slider container.": "Ustal margines pomiędzy elementem slidenav oraz kontenerem slider.", "Apply a margin between the slidenav and the slideshow container.": "Ustal margines pomiędzy elementem slidenav oraz kontenerem slideshow", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Ustal animację na elementach kiedy wejdą w pole widzenia. Animacje slide mogą uzyskać ten efekt z przesunięciem o typie fixed lub dla 100% wielkości elementu.", "Article": "Artykuł", "Article Count": "Ilość artykułów", "Article Order": "Kolejność artykułów", "Articles": "Artykuły", "Ascending": "Rosnąco", "Assigning Modules to Specific Pages": "Przypisywanie modułów do wybranych stron", "Assigning Templates to Pages": "Przypisywanie szablonów do stron", "Assigning Widgets to Specific Pages": "Przypisywanie widżetów do wybranych stron", "Attach the image to the drop's edge.": "Załącz zdjęcie do krawędzi \"drop\"", "Attention! Page has been updated.": "Uwaga! Strona została zaktualizowana.", "Attributes": "Atrybuty", "Author": "Autor", "Author Archive": "Archiwum Autora", "Author Link": "Autor Link", "Auto-calculated": "Obliczone automatycznie", "Autoplay": "Autoodtwarzanie", "Avatar": "Awatar", "Average Daily Views": "Średnie dzienne wyświetlenia", "Back": "Z powrotem", "Background Color": "Kolor tła", "Base Style": "Styl bazowy", "Basename": "Nazwa własna", "Before": "Przed", "Before Display Content": "Przed wyświetleniem zawartości", "Behavior": "Zachowanie", "Beta": "Beta", "Blend Mode": "Tryb mieszania", "Block Alignment": "Wyrównanie bloku", "Block Alignment Breakpoint": "Breakpoint dla wyrównania bloku", "Block Alignment Fallback": "Fallback dla wyrównania bloku", "Blog": "Blog", "Blur": "Rozmycie", "Bootstrap is only required when default Joomla template files are loaded, for example for the Joomla frontend editing. Load jQuery to write custom code based on the jQuery JavaScript library.": "Bootstrap jest wymagany tylko wtedy, gdy są ładowane domyślne pliki szablonu Joomla, na przykład podczas edycji frontendu Joomla. Ładuj jQuery, aby pisać niestandardowy kod oparty na bibliotece JavaScript jQuery.", "Border": "Obramowanie", "Bottom": "Dół", "Bottom Center": "Dół centrum", "Bottom Left": "Dół lewo", "Bottom Right": "Dół prawo", "Box Decoration": "Dekoracja Box'a", "Box Shadow": "Cień Box'a", "Breadcrumb": "Ścieżka powrotu", "Breadcrumbs": "Ścieżka powrotu", "Breadcrumbs Home Text": "Tekst dla pierwszej pozycji modułu Breadcrumbs", "Breakpoint": "Wartość graniczna", "Button": "Przycisk", "Button Margin": "Margines przycisku", "Button Size": "Rozmiar przycisku", "Buttons": "Przyciski", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Domyślnie pola z powiązanymi źródłami są dostępne dla mapowania dla pojedynczych pozycji. Wybierz źródło powiązane, które posiada wielokrotne pozycje aby zmapować pola.", "By default, only uncategorized articles are referred as pages. Alternatively, define articles from a specific category as pages.": "Domyślnie tylko artykuły nieskategoryzowane są określane jako strony. Alternatywnie można zdefiniować artykuły z określonej kategorii jako strony.", "By default, only uncategorized articles are referred as pages. Change the category in the advanced settings.": "Domyślnie tylko artykuły bez kategorii są określane jako strony. Zmień kategorię w ustawieniach zaawansowanych.", "Cache": "Pamięć podręczna", "Campaign Monitor API Token": "Klucz Api Monitorowania Kampanii", "Cancel": "Anuluj", "Caption": "Podpis", "Categories": "Kategorie", "Categories are only loaded from the selected parent category.": "Ładowane są tylko kategorie z wybranych kategorii nadrzędnych.", "Categories Operator": "Operator kategorii", "Category": "Kategoria", "Category Blog": "Blog kategorii", "Category Order": "Kolejność kategorii", "Center": "Wyśrodkuj", "Center columns": "Centruj kolumny", "Center grid columns horizontally and rows vertically.": "Centruj kolumny grida poziomo oraz wiersze pionowo.", "Center horizontally": "Wycentruj poziomo", "Center rows": "Centruj wiersze", "Center the active slide": "Wycentruj aktywny slajd", "Center the content": "Wycentruj treść", "Center the module": "Wyśrodkuj moduł", "Center the title and meta text": "Wycentruj tytuł i tekst meta", "Center the title, meta text and button": "Wycentruj tytuł, tekst meta oraz przycisk", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "Wyśrodkowanie, wyrównanie do lewej i prawej może być uzależnione od punktu przełamania i wymagać anulowania zmian.", "Changed": "Zmienione", "Changelog": "Lista zmian", "Child %taxonomies%": "Podrzędny %taxonomies%", "Child Categories": "Kategorie podrzędne", "Child Tags": "Tagi podrzędne", "Child Theme": "Szablon podrzędny", "Choose a divider style.": "Wybierz styl odstępu", "Choose a map type.": "Wybierz typ mapy", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Wybierz wartość funkcji parallax zależnie od pozycji scrollowania oraz animacji, która jest włączona gdy slide jest aktywny.", "Choose between an attached bar or a notification.": "Wybierz pomiędzy załączonym elementem bar, a powiadomieniem", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Wybierz pomiędzy poprzednie/następne lub numeryczną paginacją. Numeryczna paginacja nie jest dostępna dla pojedyńczych artykułów.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Wybierz pomiędzy paginacją typu poprzednie/następne lub numeryczną. Numeryczna paginacja nie jest dostępna dla pojedyńczych postów.", "Choose Font": "Wybierz czcionkę", "Choose products of the current page or query custom products.": "Wybierz produkty z bieżącej strony lub zapytaj o produkty niestandardowe.", "Choose the icon position.": "Wybierz pozycję ikony.", "City or Suburb": "Miasto lub dzielnica", "Class": "Klasa", "Classes": "Klasy", "Clear Cache": "Wyczyść pamięć podręczną", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Wyczyść cache zdjęć oraz zasobów. Zdjęcia, które wymagają zmiany wielkości są przechowywane w folderze cache dla szablonu. Po uploadzie zdjęcia z taką samą nazwą będziesz musiał wyczyścić cache.", "Click on the pencil to pick an icon from the icon library.": "Kliknij w ołówek w celu wybrania ikony z biblioteki ikon.", "Close": "Zamknij", "Cluster Icon (< 10 Markers)": "Grupa ikon (< 10 Znaczników)", "Cluster Icon (< 100 Markers)": "Grupa ikon (< 100 Znaczników)", "Cluster Icon (100+ Markers)": "Grupa ikon (100+ Znaczników)", "Clustering": "Grupowanie", "Code": "Kod", "Collapsing Layouts": "Składanie układów", "Collections": "Kolekcje", "Color": "Kolor", "Column": "Kolumna", "Column 1": "Kolumna 1", "Column 2": "Kolumna 2", "Column 3": "Kolumna 3", "Column 4": "Kolumna 4", "Column 5": "Kolumna 5", "Column Gap": "Odstęp między kolumnami", "Column Layout": "Układ kolumny", "Columns": "Kolumny", "Columns Breakpoint": "Przełamanie kolumny", "Comment Count": "Ilość komentarzy", "Comments": "Komentarze", "Components": "Komponenty", "Condition": "Warunek", "Consent Button Style": "Styl przycisku dla zgody", "Consent Button Text": "Tekst przycisku zgody", "Contact": "Kontakt", "Contacts Position": "Pozycja kontaktów", "Container Padding": "Padding kontenera", "Container Width": "Szerokość kontenera", "Content": "Zawartość", "content": "zawartość", "Content Alignment": "Rozmieszczenie kontenera", "Content Length": "Długość zawartości", "Content Margin": "Margines zawartości", "Content Parallax": "Paralaksa dla zawartości", "Content Type Title": "Tytuł zawartości", "Content Width": "Szerokość zawartości", "Controls": "Kontrolery", "Convert": "Przekształcanie", "Convert to title-case": "Przekształć tytuł", "Cookie Banner": "Baner Ciasteczek", "Cookie Scripts": "Skrypty cookies", "Copy": "Kopiuj", "Countdown": "Licznik", "Country": "Kraj", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Stwórz generalny szkic dla strony tego typu. Zacznij z nowym szkicem i wybierz z kolekcji gotowych elementów lub wybierz szkic z biblioteki i zacznij z predefiniowanymi elementami.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Stwórz układ dla sekcji footer dla wszystich stron. Zacznij z nowym szkicem i wybierz z kolekcji gotowych elementów lub wybierz szkic z biblioteki i zacznij z predefiniowanymi elementami.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Stwórz układ dla tego modułu i opublikuj go w pozycji bottom/top. Zacznij z nowym szkicem i wybierz z kolekcji gotowych elementów lub wybierz szkic z biblioteki i zacznij z predefiniowanymi elementami.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Stwórz układ dla tego rozszerzenia i opublikuj go w pozycji bottom/top. Zacznij z nowym szkicem i wybierz z kolekcji gotowych elementów lub wybierz szkic z biblioteki i zacznij z predefiniowanymi elementami.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Stwórz indywidualny szkic dla tej strony. Zacznij z nowym szkicem i wybierz z kolekcji gotowych elementów lub wybierz szkic z biblioteki i zacznij z predefiniowanymi elementami.", "Created": "Utworzono", "Created Date": "Data utworzenia", "Creating a New Module": "Tworzenie nowego modułu", "Creating a New Widget": "Tworzenie nowego rozszerzenia", "Creating Accordion Menus": "Tworzenie menu o typie akordeon", "Creating Advanced Module Layouts": "Tworzenie zaawansowanego modułu układu", "Creating Advanced Widget Layouts": "Tworzenie zaawansowanego rozszerzenia układu", "Creating Advanced WooCommerce Layouts": "Tworzenie zaawansowanego układu WooCommerce", "Creating Individual Post Layout": "Tworzenie indywidualnego układu postów", "Creating Individual Post Layouts": "Tworzenie indywidualnych układów postów", "Creating Menu Dividers": "Tworzenie przekładek dla menu", "Creating Menu Heading": "Tworzenie nagłówka menu", "Creating Menu Headings": "Tworzenie nagłówków menu", "Creating Navbar Text Items": "Tworzenie elementu tekstowego dla Navbar'a", "Critical Issues": "Krytyczne zagadnienia", "Critical issues detected.": "Wykryto krytyczne zagadnienia.", "Cross-Sell Products": "Sprzedaż krzyżowa produktów", "Curated by <a href>%user%</a>": "Zajęte przez <a href>%user%</a>", "Current Layout": "Aktualny układ", "Current Style": "Aktualny styl", "Current User": "Aktualny użytkownik", "Custom Article": "Customowy Artykuł", "Custom Articles": "Customowe Artykuły", "Custom Categories": "Customowe Kategorie", "Custom Category": "Customowa Kategoria", "Custom Code": "Kod niestandardowy", "Custom Query": "Własne zapytanie", "Custom Tag": "Customowy Znacznik", "Custom Tags": "Customowe Znaczniki", "Custom User": "Customowy Użytkownik", "Custom Users": "Customowi Użytkownicy", "Customization": "Dostosowanie", "Customization Name": "Nazwa dostosowania", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Dostosuj szerokości kolumn wybranego szkicu oraz ustaw kolejność kolumn. Zmiana układu zresetuje wszelkie dopasowania.", "Date": "Data", "Date Archive": "Archiwum daty", "Date Format": "Format daty", "Day Archive": "Archiwum dnia", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Dekoruj nagłówek poprzez przekładkę, pocisk lub linię która jest wyśrodkowana pionowo do nagłówka.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Dekoruj tytuł poprzez przekładkę, pocisk lub linię która jest wyśrodkowana pionowo do nagłówka", "Decoration": "Dekoracja", "Default": "Domyślnie", "Define a background style or an image of a column and set the vertical alignment for its content.": "Zdefiniuj styl dla tła lub zdjęcie kolumn oraz ustaw pozycję pionową dla zawartości.", "Define a name to easily identify this element inside the builder.": "Zdefiniuj nazwę w celu ułatwienia identyfikacji elementu wewnątrz buildera.", "Define a unique identifier for the element.": "Zdefiniuj unikalny identyfikator dla elementu.", "Define an alignment fallback for device widths below the breakpoint.": "Zdefiniuj pozycję która odpowie za przełamanie zawartości dla danej szerokości urządzeń.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Zdefiniuj jeden bądź więcej atrybutów dla tego elementu. Oddziel nazwę oraz wartość atrybutu poprzez znak <code>=</code>. Jeden atrybut w jednej linii.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Zdefiniuj jedną, bądź więcej nazw klas dla tego elementu. Oddziel klasy poprzez biały znak spacji", "Define the alignment in case the container exceeds the element max-width.": "Zdefiniuj wyrównanie w przypadku, gdy kontener przekroczy maksymalną szerokość dla elementu.", "Define the alignment of the last table column.": "Zdefiniuj wyrównanie dla ostatniej tabelki kolumny", "Define the device width from which the alignment will apply.": "Zdefiniuj szerokość urządzenia, dla którego wyrównanie zostanie zatwierdzone.", "Define the device width from which the max-width will apply.": "Zdefiniuj szerokość urządzenia, dla którego maksymalna szerokość zostanie zatwierdzona.", "Define the layout of the form.": "Zdefiniuj układ formularza.", "Define the layout of the title, meta and content.": "Zdefiniuj układ tytułu, meta oraz zawartości.", "Define the order of the table cells.": "Zdefiniuj kolejność wierszy w tabeli.", "Define the padding between items.": "Zdefiniuj odstępy pomiędzy pozycjami.", "Define the padding between table rows.": "Zdefiniuj odstępny pomiędzy wierszami tabeli.", "Define the title position within the section.": "Zdefiniuj pozycję tytułu wewnątrz sekcji.", "Define the width of the content cell.": "Zdefiniuj szerokość dla zawartości komórki.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Zdefiniuj szerokość dla filtra nawigacji. Wybierz pomiędzy procentami, poprawioną szerokością lub rozszerzeniem kolumn do szerokości zawartości elementu.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Zdefiniuj szerokość zdjęcia wewnątrz elementu grid. Wybierz pomiędzy procentami, poprawioną szerokością lub rozszerzeniem kolumn dla szerokości zawartości elementu.", "Define the width of the meta cell.": "Zdefiniuj szerokość dla komórki meta.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Zdefiniuj szerokość dla elementu nawigacyjnego. Wybierz pomiędzy procentami, poprawioną szerokością lub rozszerzeniem kolumn dla szerokości zawartości elementu.", "Define the width of the title cell.": "Zdefiniuj szerokość dla komórki tytułu.", "Define the width of the title within the grid.": "Zdefiniuj szerokość dla tytułu wewnątrz elementu grid.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Zdefiniuj szerokość tytułu wewnątrz elementu grid. Wybierz pomiędzy procentami, poprawioną szerokością lub rozszerzeniem szerokości kolumn wedle zawartości.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Zdefiniuj czy szerokość pozycji slidera są typu fixed czy automatycznie rozszerzone poprzez szerokość zawartości.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Zdefiniuj w jaki sposób miniatury są załączane do wielokrotnych linii, gdy kontener jest za mały.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Długość trwania animacji w milisekundach np. <code>200</code>.", "Delete": "Usuń", "Descending": "Malejąco", "description": "Opis", "Description": "Opis", "Description List": "Lista opisu", "Desktop": "Pulpit", "Determine how the image or video will blend with the background color.": "Zdecyduj, jak zdjęcie lub wideo będzie mieszać się z kolorem tła.", "Determine how the image will blend with the background color.": "Ustal jak zdjęcie będzie zlewać się z kolorem tła.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Zdecyduj czy zdjęcie ma pasować do wymiarów strony. Możliwe jest przycięcie zdjęcia. Puste pole może zostać zapełnione poprzez kolor tła.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Zdecyduj czy zdjęcie ma pasować do wymiarów sekcji. Możliwe jest przycięcie zdjęcia. Puste pole może zostać zapełnione poprzez kolor tła", "Direction": "Kierunek", "Dirname": "Nazwa folderu", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Wyłącz autoodtwarzanie, włącz autoodtwarzanie w momencie gdy element video pojawi się w polu widoku.", "Disable element": "Wyłącz element", "Disable Emojis": "Wyłącz emojis", "Disable infinite scrolling": "Wyłącz nieograniczone scrollowanie", "Disable item": "Wyłącz pozycję", "Disable row": "Wyłącz wiersz", "Disable section": "Wyłącz sekcję", "Disable template": "Wyłącz szablon", "Disable wpautop": "Wyłącz wpautop", "Disabled": "Wyłączone", "Discard": "Odrzuć", "Display": "Wyświetl", "Display a divider between sidebar and content": "Wyświetl przekładkę pomiędzy sidebarem oraz zawartością", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Wyświetl menu poprzez wybranie pozycji, która powinna się pojawić. Np. opublikuj menu główne w pozycji navbar oraz alternatywne menu w pozycji mobilnej.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Wyświetl ikonę wyszukiwania po stronie lewej lub prawej. Ikona po prawej może zostać kliknięta w celu finalizacji wyszukiwania.", "Display header outside the container": "Wyświetl header na zewnątrz kontenera", "Display icons as buttons": "Wyświetl ikony jako przyciski", "Display on the right": "Wyświetl na prawo", "Display overlay on hover": "Wyświetl overlay po najechaniu", "Display products based on visibility.": "Pokaż produkty na podstawie widoczność.", "Display the breadcrumb navigation": "Wyświetl nawigację breadcrumb", "Display the cart quantity in brackets or as a badge.": "Wyświetl ilość koszyka w nawiasach lub jako plakietkę.", "Display the content inside the overlay, as the lightbox caption or both.": "Wyświetl zawartość wewnątrz overlay jako podpis lightbox lub oba.", "Display the content inside the panel, as the lightbox caption or both.": "Wyświetl zawartość wewnątrz panelu jako podpis lightbox lub oba.", "Display the excerpt field if it has content, otherwise the content. To use an excerpt field, create a custom field with the name excerpt.": "Wyświetl fragment pola jeśli posiada treść, w przeciwnym wypadku wyświetl treść. Aby użyć fragmentu pola utwórz pole dodatkowe.", "Display the excerpt field if it has content, otherwise the intro text.": "Wyświetl fragment pola jeśli posiada treść. W przeciwnym wypadku wyświetl intro text.", "Display the excerpt field if it has content, otherwise the intro text. To use an excerpt field, create a custom field with the name excerpt.": "Wyświetl fragment pola jeśli posiada treść. W przeciwnym wypadku wyświetl intro text. Aby użyć fragmentu pola stwórz dodatkowe pole o takiej nazwie.", "Display the first letter of the paragraph as a large initial.": "Wyświetl pierwszą literę paragrafu jako duży inicjał.", "Display the image only on this device width and larger.": "Wyświetl zdjęcie tylko na szerokości tego urządzenia lub większej", "Display the image or video only on this device width and larger.": "Wyświetl zdjęcie lub wideo tylko na urządzeniach tej szerokości lub większej.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Wyświetl przyciski kontrolne mapy oraz zdefiniuj czy mapa może być powiększana, przeciągana poprzez użycie scroll'a.", "Display the meta text in a sentence or a horizontal list.": "Wyświetl tekst meta w zdaniu lub liście poziomej.", "Display the module only from this device width and larger.": "Wyświetl moduł tylko dla szerokości tego urządzenia lub większego.", "Display the navigation only on this device width and larger.": "Wyświetl nawigację tylko dla szerokości tego urządzenia lub większego.", "Display the parallax effect only on this device width and larger.": "Wyświetl efekt paralaksy tylko dla tego urządzenia i szerszego.", "Display the popover on click or hover.": "Wyświetl popover po kliknięciu lub najechaniu.", "Display the section title on the defined screen size and larger.": "Wyświetl tytuł sekcji na zdefiniowanej szerokości lub większej.", "Display the short or long description.": "Pokaż krótki lub długi opis.", "Display the slidenav only on this device width and larger.": "Wyświetl slidenav tylko na szerokości tego urządzenia lub większej.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Wyświetl slidenav tylko na zewnątrz tej szerokości urządzenia lub większej. W przeciwnym wypadku slidenav wyświetli się wewnątrz.", "Display the title in the same line as the content.": "Wyświetl tytuł w tej samej linii, co zawartość.", "Display the title inside the overlay, as the lightbox caption or both.": "Wyświetl tytuł wewnątrz elementu overlay jako lightbox lub oba.", "Display the title inside the panel, as the lightbox caption or both.": "Wyświetl tytuł wewnątrz elementu panel jako lightbox lub oba.", "Displaying the Breadcrumbs": "Wyświetlanie Breadcrumbs'ów", "Displaying the Excerpt": "Wyświetlanie wyjątków", "Displaying the Mobile Header": "Wyświetlanie mobilnego nagłówka", "Divider": "Przekładka", "Do you really want to replace the current layout?": "Czy na pewno chcesz zastąpić aktualny układ?", "Do you really want to replace the current style?": "Czy na pewno chcesz zastąpić aktualny styl?", "Documentation": "Dokumentacja", "Don't wrap into multiple lines": "Nie zawijaj w linie wielokrotne", "Double opt-in": "Podwójna zgoda", "Download": "Pobierz", "Download All": "Pobierz wszystko", "Download Less": "Pobierz plik less", "Draft new page": "Szkic nowej strony", "Drop Cap": "Inicjały", "Dynamic": "Dynamiczny", "Dynamic Condition": "Warunek dynamiczny", "Dynamic Content": "Treść dynamiczna", "Easing": "Ułatwienie", "Edit": "Edytuj", "Edit Items": "Edytuj pozycje", "Edit Layout": "Edytuj Układ", "Edit Menu Item": "Edytuj pozycje Menu", "Edit Module": "Edytuj Moduł", "Edit Settings": "Edytuj Ustawienia", "Edit Template": "Edytuj Szablon", "Email": "Adres e-mail", "Enable a navigation to move to the previous or next post.": "Włącz nawigację aby umożliwić poprzednie/następne posty.", "Enable autoplay": "Włącz autoodtwarzanie", "Enable click mode on text items": "Włącz możliwość kliknięcia na pozycje tekstowe", "Enable drop cap": "Włącz inicjały", "Enable filter navigation": "Włącz filtr nawigacyjny", "Enable lightbox gallery": "Włącz galerię typu lightbox", "Enable map dragging": "Włącz map draggign", "Enable map zooming": "Włacz powiększanie mapy", "Enable marker clustering": "Włącz grupowanie dla znaczników", "Enable masonry effect": "Włącz efekt masonry", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Wprowadź listę tagów oddzieloną przecinkiem, np., <code>blue, white, black</code>.", "Enter a decorative section title which is aligned to the section edge.": "Wprowadź dekoracyjny tytuł dla sekcji, który jest przypięty do krawędzi sekcji.", "Enter a subtitle that will be displayed beneath the nav item.": "Wprowadź podtytuł, który będzie wyświetlony pod elementem typu nav.", "Enter a table header text for the content column.": "Wprowadź nagłówek tabeli dla zawartości kolumny.", "Enter a table header text for the image column.": "Wprowadź nagłówek tabeli dla zdjęcia kolumny.", "Enter a table header text for the link column.": "Podaj tekst nagłówka tabeli dla kolumny link.", "Enter a table header text for the meta column.": "Podaj tekst nagłówka tabeli dla kolumny meta.", "Enter a table header text for the title column.": "Podaj tekst nagłówka tabeli dla kolumny tytułowej.", "Enter a width for the popover in pixels.": "Podaj szerokość okienka popover w pikselach.", "Enter an optional footer text.": "Wprowadź opcjonalny tekst stopki.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Wprowadź opcjonalny tekst dla atrybutu title linku, który będzie wyświetlany po najechaniu na niego.", "Enter labels for the countdown time.": "Wprowadź etykiety dla czasu odliczania.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Wpisz link do swojego profilu społecznościowego. Odpowiednia <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\"> ikona marki UIkit </a> zostanie wyświetlona automatycznie, jeśli jest dostępna. Linki do adresów e-mail i numerów telefonów, takich jak mailto:info@example.com lub tel:+491570156, są również obsługiwane.", "Enter or pick a link, an image or a video file.": "Wprowadź lub wybierz link, obraz lub plik wideo.", "Enter the author name.": "Wprowadź nazwisko autora.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Wprowadź komunikat o zgodzie na korzystanie z plików cookie. Domyślny tekst służy jako ilustracja. Dostosuj go zgodnie z przepisami dotyczącymi plików cookie obowiązującymi w Twoim kraju.", "Enter the horizontal position of the marker in percent.": "Wprowadź poziomą pozycję znacznika w procentach.", "Enter the image alt attribute.": "Wprowadź atrybut alt obrazu.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Wprowadź ciąg zastępczy, który może zawierać odwołania. Jeśli zostanie pozostawiony pusty, wyszukiwane dopasowania zostaną usunięte.", "Enter the text for the button.": "Wprowadź tekst dla przycisku.", "Enter the text for the home link.": "Wprowadź tekst dla linku głównego.", "Enter the text for the link.": "Wprowadź tekst dla linku.", "Enter the vertical position of the marker in percent.": "Wprowadź pionową pozycję znacznika w procentach.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Wpisz swój <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">identyfikator Google Analytics</a>, aby włączyć śledzenie. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">Anonimizacja adresu IP</a> może zmniejszyć dokładność śledzenia.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Wpisz swój klucz API <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Map Google</a>, aby używać Map Google zamiast OpenStreetMap. Umożliwia także dodatkowe opcje stylizacji kolorów map.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Wprowadź klucz interfejsu API <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Monitora kampanii</a>, aby używać go z elementem Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Wprowadź własny niestandardowy kod CSS. Następujące selektory zostaną automatycznie poprzedzone prefiksem dla tego elementu: <code>.el-section</code>", "Error": "Błąd", "Error 404": "Błąd 404", "Error creating folder.": "Błąd podczas tworzenia folderu.", "Export all theme settings and import them into another installation. This doesn't include content from the layout, style and element libraries or the template builder.": "Wyeksportuj wszystkie ustawienia motywu i zaimportuj je do innej instalacji. Nie obejmuje to zawartości z bibliotek układu, stylów i elementów ani z page buildiera.", "Export Settings": "Eksportuj ustawienia", "External Services": "Zewnętrzne serwisy", "Featured Articles": "Wyróżnione artykuły", "Featured Articles Order": "Kolejność wyróżnionych artykułów", "Featured Image": "Wyróżniony obraz", "Fields": "Pola", "File": "Plik", "Files": "Pliki", "Filter %post_types% by terms. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple terms. Set the logical operator to match at least one of the terms, none of the terms or all terms.": "Filtruj %post_types% według terminów. Użyj klawisza <kbd>shift</kbd> lub <kbd>ctrl/cmd</kbd>, aby wybrać wiele terminów. Ustaw operator logiczny tak, aby odpowiadał co najmniej jednemu terminowi, żadnemu terminowi lub wszystkim terminom.", "Filter articles by categories. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple categories. Set the logical operator to match or not match the selected categories.": "Filtruj artykuły według kategorii. Użyj klawisza <kbd>shift</kbd> lub <kbd>ctrl/cmd</kbd>, aby wybrać wiele kategorii. Ustaw operator logiczny, aby pasował lub nie pasował do wybranych kategorii.", "Filter articles by tags. Use the <kbd>shift</kbd> or <kbd>ctrl/cmd</kbd> key to select multiple tags. Set the logical operator to match at least one of the tags, none of the tags or all tags.": "Filtruj artykuły według tagów. Użyj klawisza <kbd>shift</kbd> lub <kbd>ctrl/cmd</kbd>, aby wybrać wiele tagów. Ustaw operator logiczny tak, aby pasował do co najmniej jednego tagu, żadnego z tagów lub wszystkich tagów.", "Filter by Categories": "Filtruj według kategorii", "Filter by Tags": "Filtruj według tagów", "Filter by Terms": "Filtruj według terminów", "Footer": "Stopka", "Force left alignment": "Wymuś wyrównanie do lewej", "Full Article Image": "Obraz pełnego tekstu", "Full Article Image Alt": "Tekst alternatywny pełnego obrazu", "Full Article Image Caption": "Podpis pełnego obrazu", "Full width button": "Pełna szerokość przycisku", "Gallery": "Galeria", "Gallery Thumbnail Columns": "Kolumny miniatur w galerii", "Gap": "Przerwa", "General": "Ogólne", "Google Analytics": "Analityka Google", "Google Fonts": "Czcionki Google", "Google Maps": "Mapy Google", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Grupuj przedmioty w zestawy. Ilość sztuk w zestawie uzależniona jest od zdefiniowanej szerokości pozycji, m.in. <i>33%</i> oznacza, że każdy zestaw zawiera 3 elementy.", "Guest User": "Użytkownik Gość", "Halves": "Połówki", "Headline": "Nagłówek", "Headline styles differ in font size and font family.": "Style nagłówków różnią się rozmiarem czcionki i rodziną czcionek.", "Height": "Wysokość", "hex / keyword": "hex / słowo", "Hide and Adjust the Sidebar": "Ukryj i dostosuj pasek boczny", "Hide marker": "Ukryj oznaczenie", "Hide Term List": "Ukryj listę terminów", "Hide title": "Ukryj tytuł", "Hits": "Odsłony", "Home": "Start", "Home Text": "Tekst startu", "Horizontal Center": "Środek poziomo", "Horizontal Center Logo": "Logo środek poziomo", "Horizontal Left": "Lewa poziomo", "Horizontal Right": "Prawa poziomo", "HTML Element": "Element HTML", "Hue": "Odcień", "Icon": "Ikona", "Ignore %taxonomy%": "Ignoruj %taxonomy%", "Image": "Obraz", "Image Alignment": "Wyrównanie obrazu", "Image Alt": "Tekst alternatywny obrazu", "Image Attachment": "Załącznik obrazu", "Image Effect": "Efekt obrazu", "Image Height": "Wysokość obrazu", "Image Margin": "Margines obrazu", "Image Orientation": "Orientacja obrazu", "Image Position": "Pozycja obrazu", "Image Size": "Rozmiar obrazu", "Image Width": "Szerokość obrazu", "Image Width/Height": "Wysokość/Szerokość obrazu", "Image/Video": "Obraz/Wideo", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Obrazy nie mogą być buforowane. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Zmień uprawnienia</a> <code>cache</code> w katalogu motywów <code>yootheme</code>, aby serwer WWW mógł do niego zapisywać.", "Import Settings": "Ustawienia importu", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Zamiast używać niestandardowego obrazu, możesz kliknąć ołówek, aby wybrać ikonę z biblioteki ikon.", "Intro Image": "Obraz wprowadzenia", "Intro Image Alt": "Tekst alternatywny obrazu prowadzanie", "Intro Image Caption": "Opis obrazu wprowadzania", "Intro Text": "Wprowadzanie", "Inverse Logo (Optional)": "Odwrócone Logo (opcjonalnie)", "Inverse style": "Odwrócony styl", "Inverse the text color on hover": "Odwróć kolor tekstu po najechaniu myszą", "IP Anonymization": "Anonimizacja IP", "Issues and Improvements": "Problemy i ulepszenia", "Item": "Element", "Item Count": "Liczba elementów", "Item deleted.": "Skasowano.", "Item renamed.": "Zmieniono nazwę.", "Item uploaded.": "Załadowano", "Item Width": "Szerokość elementu", "Item Width Mode": "Tryb szerokości elementu", "Items": "Elementy", "l": "I", "Label": "Etykieta", "Label Margin": "Margines etykiety", "Labels": "Etykiety", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Obrazy poziome i pionowe są wyśrodkowane w komórkach siatki. Szerokość i wysokość zostaną odwrócone podczas zmiany rozmiaru obrazów.", "Last 24 hours": "Ostatnie 24 godziny", "Last 30 days": "Ostatnie 30 dni", "Last 7 days": "Ostatnie 7 dni", "Last Column Alignment": "Wyrównanie ostatniej kolumny", "Last Modified": "Ostatnio zmodyfikowany", "Last name": "Nazwisko", "Last visit date": "Data ostatnia wizyta", "Learning Layout Techniques": "Nauka technik układu", "Left": "Lewo", "Library": "Biblioteka", "Load Bootstrap": "Załaduj Bootstrap", "Load jQuery": "Załaduj jQuery", "Location": "Lokalizacja", "Logo Image": "Logo obraz", "Logo Text": "Tekst logo", "Loop video": "Zapętlij wideo", "Make SVG stylable with CSS": "Ustaw stylizację SVG według CSS", "Match the height of all modules which are styled as a card.": "Dopasuj wysokość wszystkich modułów stylizowanych na karty.", "Match the height of all widgets which are styled as a card.": "Dopasuj wysokość wszystkich widżetów stylizowanych na karty.", "Max Height": "Maksymalna wysokość", "Max Width": "Maksymalna szerokość", "Max Width (Alignment)": "Maksymalna szerokość (wyrównaj)", "Module": "Moduł", "Module Position": "Pozycja Modułu", "Modules": "Moduły", "New Article": "Nowy Artykuł", "New Layout": "Nowy Układ", "New Menu Item": "Nowa Pozycja Menu", "New Module": "Nowy Moduł", "New Page": "Nowa Strona", "New Template": "Nowy Szablon", "New Window": "Nowe Okno", "Newsletter": "Newsletter", "Next": "Następny", "Next %post_type%": "Następny %post_type%", "Next Article": "Następny Artykuł", "Next Section": "Następna Sekcja", "Next-Gen Images": "Obrazy nowej generacji", "No %item% found.": "Nie znaleziono %item% .", "No articles found.": "Nie znaleziono żadnych artykułów.", "No critical issues found.": "Nie znaleziono krytycznych problemów.", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Zastąp ustawienie animacji. Ta opcja nie przyniesie żadnego efektu, chyba że w tej sekcji zostaną włączone animacje.", "Page": "Strona", "Page Title": "Tytuł strony", "Pagination": "Paginacja", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Proszę, zainstaluj/włącz <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">dodatek instalatora</a>, aby włączyć tę funkcję.", "PNG to AVIF": "PNG na AVIF", "PNG to WebP": "PNG na WebP", "Position": "Pozycja", "Position Absolute": "Pozycja Absolutna", "Position Sticky": "Pozycja przyklejenia", "Position Sticky Breakpoint": "Punkt przerwania dla pozycji przyklejonej", "Position Sticky Offset": "Punkt przesunięcia dla pozycji przyklejonej", "Reset to defaults": "Przywróć domyślne", "Responsive": "Responsywność", "Reverse order": "Odwróć kolejność", "Right": "Prawa", "Save": "Zapisz", "Select one of the boxed card or tile styles or a blank panel.": "Wybierz jeden ze stylów kart, płytek lub pusty panel.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Wybierz rodzaj nawigacji. Dostępne style dla poziomego elementu nawigacji to: pill lub divider.", "Set light or dark color if the slidenav is outside.": "Ustaw kolor jasny lub ciemny jeśli element slidenav jest na zewnątrz", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Ustaw wielkość odstępu między kolumnami siatki. Zdefiniuj liczbę kolumn w ustawieniach <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Wyróżniony układ</a> w Joomla.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Ustaw margines pionowy. Uwaga: Górny margines pierwszego elementu i dolny margines ostatniego elementu są zawsze usuwane. Zamiast tego zdefiniuj je w ustawieniach siatki.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Ustaw margines pionowy. Uwaga: Górny margines pierwszej siatki i dolny margines ostatniej siatki są zawsze usuwane. Zdefiniuj je w ustawieniach sekcji.", "Settings": "Ustawienia", "Single Article": "Pojedynczy Artykuł", "Single Contact": "Pojedynczy Kontakt", "The list shows uncategorized articles and is limited to 50. Use the search to find a specific article or an article from another category to give it an individual layout.": "Lista pokazuje nieskategoryzowane artykuły i jest ograniczona do 50. Skorzystaj z wyszukiwania, aby znaleźć konkretny artykuł lub artykuł z innej kategorii, aby nadać jej indywidualny układ.", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "Strona została zaktualizowana przez %modifiedBy%. Odrzucić zmiany i ponownie załadować?", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "Zmieniono nazwę folderu motywu YOOtheme Pro, łamiąc podstawową funkcjonalność. Zmień nazwę folderu motywu z powrotem na <code>yootheme</code>.", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Ten folder przechowuje obrazy, które pobierasz podczas korzystania z układów z biblioteki YOOtheme Pro. Znajduje się w folderze obrazów Joomla.", "This is only used, if the thumbnail navigation is set.": "Jest to używane tylko wtedy, gdy ustawiono nawigację po miniaturach.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Ten układ zawiera plik multimedialny, który należy pobrać do biblioteki multimediów Twojej witryny. |||| Ten układ zawiera pliki multimedialne %smart_count%, które należy pobrać do biblioteki multimediów Twojej witryny.", "This option doesn't apply unless a URL has been added to the item.": "Ta opcja nie ma zastosowania, chyba że do elementu został dodany adres URL.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Ta opcja nie ma zastosowania, chyba że do elementu został dodany adres URL. Tylko zawartość przedmiotu zostanie połączona.", "This option is only used if the thumbnail navigation is set.": "Ta opcja jest używana tylko wtedy, gdy ustawiono nawigację po miniaturach.", "Thumbnail": "Miniatura", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Do krawędzi panelu można przymocować obrazy wyrównane do góry, do dołu, do lewej lub prawej strony. Jeśli obraz jest wyrównany do lewej lub prawej strony, będzie się również rozszerzał, aby pokryć całą przestrzeń.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Do krawędzi panelu można przymocować obrazy wyrównane do góry, do lewej lub do prawej. Jeśli obraz jest wyrównany do lewej lub prawej strony, będzie się również rozszerzał, aby pokryć całą przestrzeń.", "Updating YOOtheme Pro": "Aktualizacja YOOtheme Pro", "Upload": "Prześlij", "Upload a background image.": "Prześlij obraz tła.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Prześlij opcjonalny obraz tła, który zakrywa stronę. Zostanie to naprawione podczas przewijania.", "Visibility": "Widoczność", "Visible on this page": "Widoczność na tej stronie", "What's New": "Co nowego", "White": "Biały", "Whole": "W całości", "Widget": "Widżet", "Widget Area": "Obszar widżetów", "Widget Theme Settings": "Ustawienia motywu widżetu", "Widgets": "Widżety", "Widgets and Areas": "Widżety i obszary", "Width/Height": "Szerokość/Wysokość", "With Clear all button": "Z przyciskiem \"Wyczyść wszystko\"", "With mandatory consent": "Z obowiązkową zgodą", "Working with Multiple Authors": "Praca z wieloma autorami", "Wrap with nav element": "Zawijanie z elementem nawigacyjnym", "X": "X", "X-Large": "X-Duży (X-Large)", "X-Large (Large Screens)": "X-Duży (X-Large) (duże ekrany)", "X-Small": "X-Mały (X-Small)", "Y": "R", "Year Archive": "Archiwum roku", "YOOtheme API Key": "Klucz API YOOtheme", "YOOtheme Help": "Pomoc YOOtheme", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro jest w pełni sprawny i gotowy do startu.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro nie działa. Wszystkie krytyczne problemy muszą zostać naprawione.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro działa, ale istnieją problemy, które należy naprawić, aby odblokować funkcje i poprawić wydajność." }theme/languages/sv_SE.json000064400000023331151666572150011546 0ustar00{ "-": "-", "- Select -": "- Välj -", "- Select Module -": "- Välj modul -", "- Select Position -": "- Välj position -", "- Select Widget -": "- Välj widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" redan finns i biblioteket. Det kommer att skrivas över när du sparar.", "(ID %id%)": "(ID %id%)", "%label% - %group%": "%label% - %group%", "%label% Position": "%label% Position", "%name% already exists. Do you really want to rename?": "%name% finns redan. Är du säker på att du vill byta namn?", "%post_type% Archive": "%post_type% Arkiv", "%s is already a list member.": "%s är redan en listad medlem.", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s är permanent borttagen och kan inte importeras igen. Kontakten måste prenumerera igen för att komma in på listan.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Kollektion |||| %smart_count% Kollektioner", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Element |||| %smart_count% Element", "%smart_count% File |||| %smart_count% Files": "%smart_count% Fil |||| %smart_count% Filer", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Fil markerad |||| %smart_count% Filer markerade", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Ikon |||| %smart_count% Ikoner", "About": "Om", "Accordion": "Dragspel", "Add": "Lägg till", "Add a colon": "Lägg till kolon", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Lägg till ett anpassat JavaScript till din webbplats. Taggen <style> behövs inte.", "Add Element": "Lägg till element", "Add Folder": "Lägg till mapp", "Add Item": "Lägg till objekt", "Add Menu Item": "Lägg till menyobjekt", "Add Module": "Lägg till modul", "Add Row": "Lägg till rad", "Add Section": "Lägg till sektion", "Add text after the content field.": "Lägg till text efter innehållsfältet", "Add text before the content field.": "Lägg till text före innehållsfältet", "Advanced": "Avancerad", "After": "Efter", "Alert": "Varning", "Align image without padding": "Justera bild utan padding", "Align the image to the left or right.": "Justera bilden till vänster eller höger.", "Align the image to the top, left, right or place it between the title and the content.": "Justera bilden till topp, vänster, höger eller placera den mellan titel och innehåll.", "Alignment": "Inriktning", "Alignment Breakpoint": "Alignment Brytpunkt", "Alignment Fallback": "Alignment Fallback", "All layouts": "alla layouter", "All topics": "alla ämnen", "All types": "Alla typer", "All websites": "alla webbplatser", "Allow multiple open items": "Tillåt flera öppna poster", "Animation": "Animering", "Any Joomla module can be displayed in your custom layout.": "Vilken Joomla-modul som helst kan visas i din anpassade layout.", "API Key": "API-nyckel", "Author": "Författare", "Author Link": "Författare länk", "Auto-calculated": "Auto-beräknat", "Back": "Tillbaka", "Background Color": "Bakgrundsfärg", "Behavior": "Beteende", "Blend Mode": "Blandningsläge", "Blog": "Blogg", "Blur": "Fläck", "Border": "Ram", "Breadcrumbs": "Brödsmulor", "Breakpoint": "Brytpunkt", "Builder": "Byggare", "Button": "Knapp", "Buttons": "Knappar", "Cache": "Cache", "Cancel": "Avbryt", "Choose Font": "Välj font", "Class": "Klass", "Classes": "Klasser", "Clear Cache": "Töm cache", "Close": "Stäng", "Code": "Kod", "Collections": "Samlingar", "Color": "Färg", "Column": "Kolumn", "Column 1": "Kolumn 1", "Column 2": "Kolumn 2", "Column 3": "Kolumn 3", "Column 4": "Kolumn 4", "Column 5": "Kolumn 5", "Columns": "Kolumner", "Comments": "Kommentarer", "Components": "Komponenter", "Content": "Innehåll", "content": "innehåll", "Copy": "Kopiera", "Countdown": "Nedräkning", "Creating a New Module": "Skapar en ny modul", "CSS": "CSS", "Date": "Datum", "Date Format": "Datumformat", "Decoration": "Dekoration", "Delete": "Radera", "Desktop": "Desktop", "Disable element": "Inaktivera element", "Disable Emojis": "Inaktivera emojis", "Disable item": "Inaktivera objekt", "Disable row": "Inaktivera rad", "Disable section": "Inaktivera sektion", "Disabled": "Inaktiverad", "Discard": "Avfärda", "Display": "Visa", "Divider": "Avskiljare", "Documentation": "Dokumentation", "Download": "Ladda ner", "Download Less": "Ladda ner Less", "Dynamic": "Dynamisk", "Edit": "Ändra", "Edit Layout": "Ändra layout", "Edit Menu Item": "Ändra menyobjekt", "Edit Module": "Ändra modul", "Edit Settings": "Ändra inställningar", "Edit Template": "Ändra mall", "Element": "Element", "Email": "Email", "Enable autoplay": "Aktivera autoplay", "Enter the author name.": "Skriv in författarens namn", "Enter the image alt attribute.": "Skriv in bildens alt attribut", "Enter the text for the button.": "Skriv in knapp-text", "Enter the text for the link.": "Skriv in länk-text", "Filter": "Filter", "First name": "Förnamn", "Footer": "Footer", "Form": "Formulär", "Gallery": "Galleri", "Gamma": "Gamma", "General": "Allmän", "Google Fonts": "Google Fonts", "Google Maps": "Google Maps", "Grid": "Grid", "Halves": "Halvor", "Header": "Header", "Headline": "Rubrik", "Height": "Höjd", "Hide title": "Göm titel", "Home": "Hem", "Html": "Html", "Icon": "Ikon", "ID": "ID", "Image": "Bild", "Image Alt": "Bild alt", "Info": "Info", "Item": "Objekt", "Item deleted.": "Objekt raderat", "Items": "Objekt", "Labels": "Etiketter", "Last name": "Efternamn", "Layout": "Layout", "Left": "Vänster", "Library": "Bibliotek", "Lightbox": "Lightbox", "Link": "Länk", "link": "länk", "Link Style": "Länk-stil", "Link Target": "Länk-mål", "Link Text": "Länk-text", "Link Title": "Länk-titel", "Link title": "Länk-titel", "List": "Lista", "List Item": "List-objekt", "List Style": "List-stil", "Load jQuery": "Ladda jQuery", "Location": "Plats", "Map": "Karta", "Menu": "Meny", "Menus": "Menyer", "Message": "Meddelande", "Meta": "Meta", "Mobile": "Mobil", "Mode": "Läge", "Module": "Modul", "Module Position": "Modulposition", "Modules": "Moduler", "Name": "Namn", "New Layout": "Ny layout", "New Module": "Ny modul", "New Template": "Ny mall", "No Results": "Inga resultat", "No results.": "Inga resultat.", "None": "Inga", "Ok": "Ok", "Open in a new window": "Öppna i nytt fönster", "Open Templates": "Öppna mallar", "Open the link in a new window": "Öppna länk i nytt fönster", "Options": "Alternativ", "Order": "Ordning", "Panel": "Panel", "Panels": "Paneler", "Photos": "Bilder", "Pick": "Välj", "Pick %type%": "Välj %type%", "Pick file": "Välj fil", "Pick icon": "Välj ikon", "Pick link": "Välj länk", "Pick media": "Välj media", "Pick video": "Välj video", "Position": "Position", "Rename": "Döp om", "Rename %type%": "Döp om %type%", "Replace": "Ersätt", "Replace layout": "Ersätt layout", "Reset": "Återställ", "Responsive": "Responsiv", "Right": "Höger", "Row": "Rad", "Save": "Spara", "Save %type%": "Spara %type%", "Save in Library": "Spara i bibliotek", "Save Layout": "Spara layout", "Save Style": "Spara stil", "Save Template": "Spara mall", "Script": "Script", "Search": "Sök", "Search Style": "Sök-stil", "Section": "Sektion", "Section/Row": "Sektion/Rad", "Select": "Välj", "Select %item%": "Välj %item%", "Select %type%": "Välj %type%", "Select a card style.": "Välj kortstil", "Select Image": "Välj bild", "Select the link style.": "Välj länk-stil", "Select the list style.": "Välj list-stil", "Separator": "Avskiljare", "Set the icon color.": "Välj ikon-färg", "Set the link style.": "Välj länk-stil", "Show author": "Visa författare", "Show button": "Visa knapp", "Show categories": "Visa kategorier", "Show Content": "Visa innehåll", "Show content": "Visa innehåll", "Show controls": "Visa kontroller", "Show date": "Visa datum", "Show dividers": "Visa avskiljare", "Show Labels": "Visa etiketter", "Show name fields": "Visa namnfält", "Show navigation": "Visa navigering", "Show Separators": "Visa avskiljare", "Show tags": "Visa taggar", "Show the content": "Visa innehållet", "Show the image": "Visa bilden", "Show the link": "Visa länken", "Show the title": "Visa titeln", "Show title": "Visa titel", "Show Title": "Visa titel", "Site": "Webbsida", "Size": "Storlek", "Status": "Status", "Style": "Stil", "Support": "Support", "Table": "Tabell", "Tags": "Taggar", "Target": "Mål", "Text": "Text", "Text Alignment": "Text-justering", "Text Color": "Text-färg", "Text Style": "Text-stil", "Thirds": "Tredjedelar", "Title": "Titel", "title": "titel", "Type": "Typ", "Upload": "Ladda upp", "Users": "Användare", "Value": "Värde", "Version %version%": "Version %version%", "Video": "Video", "Videos": "Videos", "Width": "Bredd", "X": "X", "Y": "Y", "Zoom": "Zoom" }theme/languages/fr_FR.json000064400000372434151666572150011540 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "Sélectionner", "- Select Module -": "- Sélectionner un Module -", "- Select Position -": "- Sélectionner une Position -", "- Select Widget -": "- Sélectionner un Widget -", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" existe déjà dans la bibliothèque, il sera écrasé lors de l'enregistrement.", "(ID %id%)": "(ID %id%)", "%element% Element": "Element %element%", "%label% - %group%": "%label% - %group%", "%label% Location": "%label% Location", "%label% Position": "Position %label%", "%name% already exists. Do you really want to rename?": "%name% existe déjà. Vous voulez vraiment le renommer ?", "%post_type% Archive": "Archive %post_type%", "%s is already a list member.": "%s est déjà membre de la liste.", "%s of %s": "%s sur %s", "%s was permanently deleted and cannot be re-imported. The contact must re-subscribe to get back on the list.": "%s a été définitivement supprimé et ne peut être réimporté. Le contact doit se réinscrire pour être réintégré dans la liste.", "%smart_count% Collection |||| %smart_count% Collections": "%smart_count% Collection |||| %smart_count% Collections", "%smart_count% Element |||| %smart_count% Elements": "%smart_count% Elément |||| %smart_count% Eléments", "%smart_count% File |||| %smart_count% Files": "%smart_count% Fichier |||| %smart_count% Fichiers", "%smart_count% File selected |||| %smart_count% Files selected": "%smart_count% Fichier sélectionné |||| %smart_count% Fichiers sélectionnés", "%smart_count% Icon |||| %smart_count% Icons": "%smart_count% Icône |||| %smart_count% Icônes", "%smart_count% Layout |||| %smart_count% Layouts": "%smart_count% Mise en page |||| %smart_count% Mises en page", "%smart_count% media file download failed: |||| %smart_count% media file downloads failed:": "Le téléchargement de fichier média %smart_count% a échoué : |||| Le téléchargement de fichier média %smart_count% a échoué :", "%smart_count% Photo |||| %smart_count% Photos": "%smart_count% Photo |||| %smart_count% Photos", "%smart_count% Preset |||| %smart_count% Presets": "%smart_count% Préréglage |||| %smart_count% Préréglages", "%smart_count% Style |||| %smart_count% Styles": "%smart_count% Style |||| %smart_count% Styles", "%smart_count% User |||| %smart_count% Users": "%smart_count% Utilisateur |||| %smart_count% Utilisateurs", "%taxonomies% are only loaded from the selected parent %taxonomy%.": "%taxonomies% ne sont chargées qu'à partir de la %taxonomy% parente sélectionnée.", "%title% %index%": "%title% %index%", "%type% Presets": "%type% Préconfigurations", "${theme.title}": "${theme.title}", "08.06.1999 (m.d.Y)": "08.06.1999 (d.m.Y)", "08/06/1999 (m/d/Y)": "08/06/1999 (d/m/Y)", "1 Column": "1 colonne", "1 Column Content Width": "1 Colonne de contenu (défini la Largeur)", "100%": "100%", "15:00 (G:i)": "15:00 (G:i)", "16%": "16%", "2 Column Grid": "Grille 2 colonnes", "2 Column Grid (Meta only)": "Grille 2 colonnes (seul. Meta)", "2 Columns": "2 colonnes", "20%": "20%", "25%": "25%", "2X-Large": "2X-Large", "3 Columns": "3 Colonnes", "3:00 pm (g:i A)": "3:00 pm (g:i A)", "33%": "33%", "3X-Large": "3X-Large", "4 Columns": "4 Colonnes", "40%": "40%", "5 Columns": "5 Colonnes", "50%": "50%", "6 Aug, 1999 (j M, Y)": "6 Août, 1999 (j M, Y)", "6 Columns": "6 Colonnes", "60%": "60%", "66%": "66%", "75%": "75%", "80%": "80%", "83%": "83%", "a": "a", "A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Il est recommandé d'augmenter la limite de mémoire. Définissez le <code>memory_limit</code> à 128M dans la <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">configuration PHP</a>.", "A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Il est recommandé d'augmenter la limite de téléchargement. Définissez le <code>post_max_size</code> à 8M dans la <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">configuration PHP</a>.", "A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">PHP configuration</a>.": "Il est recommandé d'augmenter la limite de taille des fichiers téléchargés. Définissez le <code>upload_max_filesize</code> à 8M dans la <a href=\"https://php.net/manual/en/ini.core.php\" target=\"_blank\">configuration PHP</a>.", "About": "À Propos", "Above Content": "Sur contenu", "Above Title": "Sur titre", "Absolute": "Absolue", "Accessed": "Accédé à", "Accordion": "Accordéon", "Active": "Activer", "Active item": "Article actif", "Add": "Ajouter", "Add a colon": "Ajouter une colonne", "Add a leader": "Ajouter des points de suite", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Ajouter un effet parallax ou mettre un arrière-plan fixe en ce qui concerne le viewport (hauteur du contenu prenant l'ensemble de la hauteur de la fenêtre du navigateur) lors du défilement.", "Add a parallax effect.": "Ajouter un effet parallax.", "Add animation stop": "Ajouter fin d'animation", "Add bottom margin": "Ajouter marge inférieure", "Add clipping offset": "Ajouter décalage découpe", "Add custom CSS or Less to your site. All Less theme variables and mixins are available. The <code><style></code> tag is not needed.": "Ajouter du CSS ou Less personnalisé. Toutes les variables Less de thème et les mixins sont disponibles. La balise <code><style></code> n'est pas nécessaire.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Ajouter du JavaScript personnalisé. La balise <code><script></code> n'est pas nécessaire.", "Add custom JavaScript which sets cookies. It will be loaded after consent is given. The <code><script></code> tag is not needed.": "Ajoutez du JavaScript personnalisé qui définit des cookies. Il sera chargé une fois le consentement obtenu. La balise <code><script></code> n'est pas nécessaire.", "Add Element": "Ajouter un élément", "Add extra margin to the button.": "Ajouter une marge supplémentaire au bouton.", "Add Folder": "Ajouter un dossier", "Add Item": "Ajouter un élément", "Add margin between": "Ajouter marge entre", "Add Media": "Ajouter un media", "Add Menu Item": "Ajouter un élément de menu", "Add Module": "Ajouter un module", "Add multiple stops to define start, intermediate and end colors along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Ajouter plusieurs jalons pour définir les couleurs de début, intermédiaires et de fin le long de la séquence d’animation. En option, spécifiez le pourcentage pour positionner les jalons le long de la séquence d’animation.", "Add multiple stops to define start, intermediate and end opacity along the animation sequence. Optionally, specify percentage to position the stops along the animation sequence.": "Ajoutez plusieurs jalons pour définir l’opacité de début, intermédiaire et de fin le long de la séquence d’animation. En option, spécifiez le pourcentage pour positionner les jalons le long de la séquence d’animation.", "Add Row": "Ajouter une ligne", "Add Section": "Ajouter une section", "Add text after the content field.": "Ajoutez du texte après le champ de contenu.", "Add text before the content field.": "Ajoutez du texte avant le champ de contenu.", "Add to Cart": "Ajouter au panier", "Add to Cart Link": "Lien d'ajout au panier", "Add to Cart Text": "Texte d'ajout au panier", "Add top margin": "Ajouter marge supérieure", "Adding the Logo": "Ajout du Logo", "Adding the Search": "Ajouter la recherche", "Adding the Social Icons": "Ajouter les icônes sociales", "Additional Information": "Information complémentaire", "Address": "Adresse", "Advanced": "Avancé", "Advanced WooCommerce Integration": "Intégration avancée de WooCommerce", "After": "Après", "After 1 Item": "Après 1 élément", "After 10 Items": "Après 10 éléments", "After 2 Items": "Après 2 éléments", "After 3 Items": "Après 3 éléments", "After 4 Items": "Après 4 éléments", "After 5 Items": "Après 5 éléments", "After 6 Items": "Après 6 éléments", "After 7 Items": "Après 7 éléments", "After 8 Items": "Après 8 éléments", "After 9 Items": "Après 9 éléments", "After Display Content": "Après affichage contenu", "After Display Title": "Avant affichage contenu", "After Submit": "Après soumission", "Alert": "Alerte", "Alias": "Alias", "Align dropdowns to their menu item or the navbar. Optionally, show them in a full-width section called dropbar, display an icon to indicate dropdowns and let text items open by click and not hover.": "Alignez les menus déroulants sur leur élément de menu ou sur la barre de navigation. En option, affichez-les dans une section pleine largeur appelée barre déroulante, affichez une icône pour indiquer les menus déroulantes et laissez les éléments de texte s’ouvrir par clic et non par survol.", "Align image without padding": "Aligner l'image sans espace", "Align the filter controls.": "Aligner les contrôles de filtre.", "Align the image to the left or right.": "Aligner l'image à gauche ou à droite.", "Align the image to the top or place it between the title and the content.": "Aligner l'image en haut ou placer la entre le titre et le contenu.", "Align the image to the top, left, right or place it between the title and the content.": "Aligner l'image en haut, à gauche, à droite ou placer là entre le titre et le contenu.", "Align the meta text.": "Aligner le texte meta.", "Align the navigation items.": "Aligner les éléments de navigation.", "Align the section content vertically, if the section height is larger than the content itself.": "Aligner le contenu de la section verticalement, si la hauteur est plus grande que le contenu lui même.", "Align the title and meta text as well as the continue reading button.": "Aligner le titre et le texte meta ainsi que le bouton \"Lire la suite\".", "Align the title and meta text.": "Aligner le titre et le texte meta.", "Align the title to the top or left in regards to the content.": "Aligner le titre en haut ou à gauche selon le contenu.", "Align to navbar": "Aligner à la navbar", "Alignment": "Alignement", "Alignment Breakpoint": "Point d'arrêt de l'alignement", "Alignment Fallback": "Retour d'alignement", "All backgrounds": "Tous les fonds", "All colors": "Toutes les couleurs", "All except first page": "Tout sauf la première page", "All images are licensed under <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> which means you can copy, modify, distribute and use the images for free, including commercial purposes, without asking permission.": "Toutes les images sont sous licence <a href='http://creativecommons.org/publicdomain/zero/1.0/' target='_blank'>Creative Commons Zero</a> ce qui signifie que vous pouvez copier, modifier, redistribuer et utiliser les images gratuitement, même à des fins commerciales et sans demander de permissions.", "All Items": "Tous les éléments", "All layouts": "Tous les mises en pages", "All pages": "Toutes pages", "All presets": "Tous les préréglages", "All styles": "Tous les styles", "All topics": "Tous les sujets", "All types": "Tous les types", "All websites": "Tous les sites web", "All-time": "Toujours", "Allow mixed image orientations": "Autoriser l'orientation des images", "Allow multiple open items": "Autoriser plusieurs éléments ouverts", "Alphabetical": "Alphabétique", "Alphanumeric Ordering": "Ordre alphabétique", "Alt": "Alt", "Alternate": "Alterné", "Always": "Toujours", "Animate background only": "Animer uniquement le fond", "Animate items": "Éléments animés", "Animate strokes": "Animer les strokes", "Animation": "Animation", "Animation Delay": "Décalage de l'animation", "Animations": "Animations", "Any": "Tout", "Any Joomla module can be displayed in your custom layout.": "Chaque module Joomla peut être affiché dans votre Layout personnalisé.", "Any WordPress widget can be displayed in your custom layout.": "Tout widget WordPress peut être affiché dans votre Layout personnalisé.", "API Key": "Clé API", "Apply a margin between the navigation and the slideshow container.": "Appliquer une marge entre la navigation et le container du slideshow.", "Apply a margin between the overlay and the image container.": "Appliquer une marge entre la superposition et le conteneur d'image.", "Apply a margin between the slidenav and the slider container.": "Appliquer une marge entre le slidenav et le container slider.", "Apply a margin between the slidenav and the slideshow container.": "Appliquer une marge entre le slidenav et le container slideshow.", "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.": "Appliquer une animation aux éléments une fois qu'ils entrent dans la fenêtre. Les animations de diapositives peuvent entrer en vigueur avec un décalage fixe ou à 100% de la taille de l'élément.", "Are you sure?": "Êtes-vous sûr ?", "Article": "Article", "Article Count": "Nombre d'articles", "Article Order": "Ordre articles", "Articles": "Articles", "As notification only ": "Comme notification seulement ", "Ascending": "Ascendant", "Assigning Modules to Specific Pages": "Affectation de modules à des pages spécifiques", "Assigning Templates to Pages": "Affectation de modèles aux pages", "Assigning Widgets to Specific Pages": "Attribution de widgets à des pages spécifiques", "Attach the image to the drop's edge.": "Attachez l'image au bord de la goutte.", "Attention! Page has been updated.": "Attention ! La page a été mise à jour.", "Attributes": "Attributs", "Author": "Auteur", "Author Archive": "Archive de l'auteur", "Author Link": "Lien de l'auteur", "Auto": "Auto", "Auto-calculated": "Auto-calculé", "Autoplay": "Jouer automatiquement", "Average Daily Views": "Moyenne des vues quotidiennes", "b": "b", "Back": "Retour", "Back to top": "Retour en haut", "Background": "Arrière plan", "Background Color": "Couleur d'arrière plan", "Background Image": "Arrière plan de l'image", "Badge": "Badge", "Bar": "Barre", "Base Style": "Style de base", "Basename": "Nom de base", "Before": "Avant", "Before Display Content": "Avant l'affichage du contenu", "Behavior": "Comportement", "Below Content": "Sous le contenu", "Below Title": "Sous le titre", "Between": "Entre", "Blank": "Vide", "Blend Mode": "Mode de fusion", "Block Alignment": "Alignement du bloc", "Block Alignment Breakpoint": "Point d'arrêt de l'alignement du bloc", "Block Alignment Fallback": "Annuler l'alignement du bloc", "Blog": "Blog", "Blur": "Flou", "Border": "Bordure", "Bottom": "Bas", "Bottom Center": "Bas Centre", "Bottom Left": "Bas Gauche", "Bottom Right": "Bas Droit", "Box Decoration": "Décoration de la boîte", "Box Shadow": "Ombre portée", "Boxed": "Boîte", "Breadcrumbs": "Chemin de navigation", "Breadcrumbs Home Text": "Texte d'accueil du chemin de navigation", "Breakpoint": "Point d'arrêt", "Button": "Bouton", "Button Danger": "Bouton Danger", "Button Default": "Bouton Default", "Button Margin": "Marge du bouton", "Button Primary": "Bouton Primary", "Button Secondary": "Bouton Secondary", "Button Size": "Taille du bouton", "Button Text": "Bouton texte", "Buttons": "Boutons", "By default, fields of related sources with single items are available for mapping. Select a related source which has multiple items to map its fields.": "Par défaut, les champs des sources associées avec des éléments uniques sont disponibles pour le mappage. Sélectionnez une source associée qui a plusieurs éléments pour mapper ses champs.", "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.": "Par défaut, le chargement des images est différé. Activez le chargement prioritaire pour les images qui apparaissent en premier à l'écran.", "Cache": "Cache", "Campaign Monitor API Token": "Clé API de Campaign Monitor", "Cancel": "Annuler", "Caption": "Légende", "Cart": "Panier", "Categories": "Catégories", "Categories are only loaded from the selected parent category.": "Les catégories ne sont chargées qu'à partir de la catégorie parente sélectionnée.", "Category": "Catégorie", "Category Blog": "Catégorie Blog", "Category Order": "Ordre des catégories", "Center": "Centrer", "Center Center": "Centre Centre", "Center columns": "Colonnes centrales", "Center grid columns horizontally and rows vertically.": "Centrez les colonnes de la grille horizontalement et les lignes verticalement.", "Center horizontally": "Centrer horizontalement", "Center Left": "Centre Gauche", "Center Right": "Centre Droit", "Center rows": "Centrez les lignes", "Center the active slide": "Centre le slide actif", "Center the content": "Centrer le contenu", "Center the module": "Centrer le module", "Center the title and meta text": "Centre le titre et le texte meta", "Center the title, meta text and button": "Centrer le titre, le texte meta et le bouton", "Center the widget": "Centrer le widget", "Center, left and right alignment may depend on a breakpoint and require a fallback.": "L'alignement central, gauche et droit peut dépendre d'un point d'arrêt et nécessiter un repli.", "Changed": "Modifié", "Changelog": "Liste des modifications", "Child %taxonomies%": "Enfant %taxonomies%", "Child Categories": "Catégories enfants", "Child Tags": "Étiquettes enfant", "Child Theme": "Thème enfant", "Choose a divider style.": "Choisir un style de diviseur.", "Choose a map type.": "Choisir un type de carte.", "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.": "Choisissez entre un parallax dépendant de la position du défilement ou une animation, qui sera appliquée lorsque le slide sera actif.", "Choose between a vertical or horizontal list.": "Choisir entre une liste verticale ou horizontale.", "Choose between an attached bar or a notification.": "Choisissez entre une barre attaché en haut de page qui fait descendre le contenu ou une notification qui s'affiche au dessus du contenu.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single articles.": "Choisissez entre la pagination précédente / suivante ou numérique. La pagination numérique n'est pas disponible pour les articles uniques.", "Choose between the previous/next or numeric pagination. The numeric pagination is not available for single posts.": "Choisissez entre la pagination précédente / suivante ou numérique. La pagination numérique n'est pas disponible pour les traitements uniques.", "Choose Font": "Choisir une police", "Choose the icon position.": "Choisir la position de l'icône.", "Circle": "Cercle", "City or Suburb": "Ville ou quartier", "Class": "Classe", "Classes": "Classes", "Clear Cache": "Effacer le cache", "Clear cached images and assets. Images that need to be resized are stored in the theme's cache folder. After reuploading an image with the same name, you'll have to clear the cache.": "Effacer les images et les ressources mises en cache. Les images qui doivent être redimensionnées sont stockées dans le dossier de cache du thème. Après avoir réimplanté une image portant le même nom, vous devrez effacer le cache.", "Click": "Clic", "Click on the pencil to pick an icon from the icon library.": "Cliquez sur le crayon pour choisir une icône dans la bibliothèque d'icônes.", "Close": "Fermer", "Close Icon": "Icone cloture", "Cluster Icon (< 10 Markers)": "Amas d'icônes (< 10 repères)", "Cluster Icon (< 100 Markers)": "Amas d'icônes (< 100 repères)", "Cluster Icon (100+ Markers)": "Amas d'icônes (100+ repères)", "Clustering": "Concentration", "Code": "Code", "Collapsing Layouts": "Réduire les schemas (Layouts)", "Collections": "Collections", "Color": "Couleur", "Column": "Colonne", "Column 1": "Colonne 1", "Column 2": "Colonne 2", "Column 3": "Colonne 3", "Column 4": "Colonne 4", "Column 5": "Colonne 5", "Column 6": "Colonne 6", "Column Gap": "Écart colonne", "Column Height": "Hauteur de la colonne", "Column Layout": "Disposition des colonnes", "Columns": "Colonnes", "Columns Breakpoint": "Point d'arrêt des colonnes", "Comment Count": "Nombre de commentaire", "Comments": "commentaires", "Components": "Composants", "Condition": "Condition", "Consent Button Style": "Style du Bouton de Consentement", "Consent Button Text": "Texte du Bouton de Consentement", "Contact": "Contact", "Container Padding": "Padding du container", "Container Width": "Largeur du container", "Content": "Contenu", "content": "contenu", "Content Alignment": "Alignement du contenu", "Content Length": "Longueur du contenu", "Content Margin": "Marge du contenu", "Content Parallax": "Contenu du parallax", "Content Width": "Largeur du contenu", "Controls": "Contrôles", "Convert": "Convertir", "Cookie Banner": "Bannière Cookie", "Cookie Scripts": "Scripts du Cookie", "Coordinates": "Coordonnées", "Copy": "Copier", "Countdown": "Compte à rebours", "Country": "Pays", "Create a general layout for this page type. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Créez une mise en page générale pour ce type de page. Commencez avec une nouvelle mise en page et choisissez parmi une collection d'éléments prêts à l'emploi ou parcourez la bibliothèque de mises en page et commencez avec l'une des mises en page prédéfinies.", "Create a layout for the footer section of all pages. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Créez une mise en page pour la section de pied de page de toutes les pages. Commencez avec une nouvelle mise en page et choisissez parmi une collection d'éléments prêts à l'emploi ou parcourez la bibliothèque de mises en page et commencez avec l'une des mises en page prédéfinies.", "Create a layout for this module and publish it in the top or bottom position. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Créez une mise en page pour ce module et publiez-la en position haute ou basse. Commencez avec une nouvelle mise en page et choisissez parmi une collection d'éléments prêts à l'emploi ou parcourez la bibliothèque de mises en page et commencez avec l'une des mises en page prédéfinies.", "Create a layout for this widget and publish it in the top or bottom area. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Créez une mise en page pour ce widget et publiez-la dans la zone supérieure ou inférieure. Commencez avec une nouvelle mise en page et choisissez parmi une collection d'éléments prêts à l'emploi ou parcourez la bibliothèque de mises en page et commencez avec l'une des mises en page prédéfinies.", "Create an individual layout for the current page. Start with a new layout and choose from a collection of ready-to-use elements or browse the layout library and start with one of the pre-built layouts.": "Créez une mise en page individuelle pour la page actuelle. Commencez avec une nouvelle mise en page et choisissez parmi une collection d'éléments prêts à l'emploi ou parcourez la bibliothèque de mises en page et commencez avec l'une des mises en page prédéfinies.", "Created": "Créé", "Creating a New Module": "Création d'un nouveau module", "Creating a New Widget": "Création d'un nouveau widget", "Creating Accordion Menus": "Création de menus accordéon", "Creating Advanced Module Layouts": "Création de dispositions de module avancées", "Creating Advanced Widget Layouts": "Création de dispositions de widget avancées", "Creating Menu Dividers": "Création de diviseurs de menu", "Creating Menu Heading": "Création d'un en-tête de menu", "Creating Menu Headings": "Création d'en-têtes de menu", "Creating Navbar Text Items": "Création d'éléments de texte de la barre de navigation", "Creating Parallax Effects": "Création d'un effet parallax", "Critical Issues": "Problèmes critiques", "Critical issues detected.": "Problèmes critiques détectés.", "CSS": "CSS", "CSS/Less": "CSS/Less", "Curated by <a href>%user%</a>": "Organisé par <a href>%user%</a>", "Current Layout": "Layout actuel", "Current Style": "Style actuel", "Current User": "Utilisateur actuel", "Custom Code": "Code personnalisé", "Custom Fields": "Champs personnalisés", "Customization": "Personnalisation", "Customization Name": "Nom personnalisation", "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.": "Personnalisez les largeurs de colonne de la mise en page sélectionnée et définissez l'ordre des colonnes. La modification de la mise en page réinitialisera toutes les personnalisations.", "Dark": "Noir", "Date Format": "Format date", "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.": "Décorez le titre avec un diviseur, une puce ou une ligne qui est verticalement centrée à l'en-tête.", "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.": "Décorez le titre avec un diviseur, une puce ou une ligne qui est centrée verticalement à l'en-tête.", "Decoration": "Décoration", "Default": "Par défaut", "Define a background style or an image of a column and set the vertical alignment for its content.": "Définissez un style d'arrière-plan ou une image d'une colonne et définissez l'alignement vertical de son contenu.", "Define a name to easily identify the template.": "Définir un nom pour facilement identifier le thème.", "Define a name to easily identify this element inside the builder.": "Définir un nom pour facilement identifier l'élément à l'intérieur du builder (Générateur).", "Define a unique identifier for the element.": "Définir un identifiant unique pour cet élément.", "Define an alignment fallback for device widths below the breakpoint.": "Définissez un repli d'alignement pour les largeurs de périphérique inférieures au point d'arrêt.", "Define one or more attributes for the element. Separate attribute name and value by <code>=</code> character. One attribute per line.": "Définissez un ou plusieurs attributs pour l'élément. Séparez le nom et la valeur de l'attribut par le caractère <code>=</code>. Un attribut par ligne.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Définissez un ou plusieurs noms de classe pour l'élément. Séparez plusieurs classes avec des espaces.", "Define the alignment in case the container exceeds the element max-width.": "Définissez l'alignement au cas où le conteneur dépasserait la largeur maximale de l'élément.", "Define the alignment of the last table column.": "Définir l'alignement de la dernière colonne du tableau.", "Define the device width from which the alignment will apply.": "Définissez la largeur du périphérique à partir de laquelle l'alignement s'appliquera.", "Define the device width from which the max-width will apply.": "Définissez la largeur de l'appareil à partir de laquelle la largeur maximale du contenu s'appliquera.", "Define the layout of the form.": "Définir l'affichage du formulaire.", "Define the layout of the title, meta and content.": "Définir l'affichage du titre, meta et contenu.", "Define the order of the table cells.": "Définir l'ordre des cellules du tableau.", "Define the padding between items.": "Définissez le remplissage entre les éléments.", "Define the padding between table rows.": "Définir le padding entre les lignes du tableau.", "Define the title position within the section.": "Définissez la position du titre dans la section.", "Define the width of the content cell.": "Définir la largeur du contenu de la cellule.", "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Définir la largeur de la navigation filtre. Choisissez entre pourcentage et largeurs fixes ou étendre les colonnes à la largeur du contenu.", "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Définissez la largeur de l'image dans la grille. Choisissez entre pourcentage et largeurs fixes ou développez des colonnes sur la largeur de leur contenu.", "Define the width of the meta cell.": "Définir la largeur de la cellule meta.", "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.": "Définissez la largeur de la navigation. Choisissez entre pourcentage et largeurs fixes ou développez des colonnes sur la largeur de leur contenu.", "Define the width of the title cell.": "Définir la largeur de la cellule du titre.", "Define the width of the title within the grid.": "Définir la largeur du titre à l'intérieur de la grille.", "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.": "Défini la largeur du titre dans la grille. Choisi entre largeurs fixe et fixe ou développer les colonnes à la largeur du contenu.", "Define whether the width of the slider items is fixed or automatically expanded by its content widths.": "Définir si la largeur de l'élément du slider est fixe ou automatiquement étendu par ses largeurs de contenu.", "Define whether thumbnails wrap into multiple lines if the container is too small.": "Définir si les vignettes s'empillent sur de multiples lignes ou pas si le container et trop petit.", "Delay the element animations in milliseconds, e.g. <code>200</code>.": "Décalage de l'animation en millisecondes, par ex. <code>200</code>.", "Delete": "Effacer", "Descending": "Descendant", "Description List": "Liste de description", "Desktop": "Bureau", "Determine how the image or video will blend with the background color.": "Déterminez comment l'image ou la vidéo se mélangent avec la couleur d'arrière-plan.", "Determine how the image will blend with the background color.": "Détermine comment l'image fusionne avec la couleur de fond.", "Determine whether the image will fit the page dimensions by clipping it or by filling the empty areas with the background color.": "Détermine si l'image s'adapte aux dimensions de la page en la coupant ou en remplissant les zones vides avec la couleur de fond.", "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.": "Déterminez si l'image correspond aux dimensions de la section en la coupant ou en remplissant les zones vides par la couleur de fond.", "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.": "Désactiver la lecture automatique, commencer la lecture automatique immédiatement ou dès que la vidéo entre dans le viewport (dans l'écran).", "Disable element": "Désactiver élément", "Disable Emojis": "Désactiver Emojis", "Disable infinite scrolling": "Désactiver le défilement infini", "Disable item": "Désactiver l'élément", "Disable row": "Désactiver ligne", "Disable section": "Désactiver section", "Disable wpautop": "Désactiver wpautop", "Disabled": "Désactivé", "Discard": "Abandonner", "Display": "Afficher", "Display a divider between sidebar and content": "Afficher un diviseur entre la barre latérale et le contenu", "Display a menu by selecting the position in which it should appear. For example, publish the main menu in the navbar position and an alternative menu in the mobile position.": "Affichez un menu en sélectionnant la position dans laquelle il doit apparaître. Par exemple, publiez le menu principal dans la position navbar et un menu alternatif dans la position mobile.", "Display a search icon on the left or right. The icon on the right can be clicked to submit the search.": "Afficher une icône de recherche à gauche ou à droite. L'icône de droite peut être cliquée pour soumettre la recherche.", "Display header outside the container": "Afficher l'entête hors du conteneur", "Display icons as buttons": "Afficher les icones comme des boutons", "Display on the right": "Afficher sur la droite", "Display overlay on hover": "Afficher la superposition au survol", "Display the breadcrumb navigation": "Afficher le chemin de navigation", "Display the content inside the overlay, as the lightbox caption or both.": "Afficher le contenu à l'intérieur de la overlay, comme la légende de la lightbox ou les deux.", "Display the content inside the panel, as the lightbox caption or both.": "Afficher le contenu à l'intérieur du panel, comme la légende de la lightbox ou les deux.", "Display the first letter of the paragraph as a large initial.": "Afficher la première lettre du paragraphe comme une grande initiale.", "Display the image only on this device width and larger.": "Affichez l'image uniquement sur cette largeur de périphérique et plus.", "Display the image or video only on this device width and larger.": "N'affichez l'image ou la vidéo que sur la largeur de cet appareil et plus grand.", "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.": "Affichez les commandes de la carte et définissez si la carte peut être agrandie ou déplacée à l'aide de la molette de la souris ou touchez.", "Display the meta text in a sentence or a horizontal list.": "Affiche le texte meta dans une phrase ou une liste horizontale.", "Display the module only from this device width and larger.": "Affichez le module uniquement à partir de cette largeur de périphérique et plus.", "Display the navigation only on this device width and larger.": "Afficher la navigation seulement sur cette largeur de périphérique ou plus large.", "Display the parallax effect only on this device width and larger.": "Afficher l'effet parallax seulement sur la largeur de ce périphérique et ceux plus large.", "Display the popover on click or hover.": "Afficher la popover lors du clic ou du survol.", "Display the section title on the defined screen size and larger.": "Afficher le titre de la section sur une taille d'écran définie et plus grand.", "Display the slidenav only on this device width and larger.": "Afficher la slidenav seulement sur cette largeur de périphérique ou plus large.", "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.": "Affiche la navigation externe uniquement sur des terminaux de cette largeur ou plus. Sinon, la navigation sera affichée à l'intérieur.", "Display the title in the same line as the content.": "Afficher le titre sur la même ligne que le contenu.", "Display the title inside the overlay, as the lightbox caption or both.": "Afficher le titre à l'intérieur de l'overlay, comme la légende de la lightbox ou les deux.", "Display the title inside the panel, as the lightbox caption or both.": "Afficher le titre à l'intérieur du panel, comme la légende de la lightbox ou les deux.", "Displaying the Breadcrumbs": "Afficher le fil d'Ariane", "Displaying the Excerpt": "Affichage de l'extrait", "Displaying the Mobile Header": "Affichage de l'en-tête Mobile", "Divider": "Diviseur", "Do you really want to replace the current layout?": "Voulez-vous vraiment remplacer la mise en page actuelle ?", "Do you really want to replace the current style?": "Voulez-vous vraiment remplacer le style actuelle ?", "Don't wrap into multiple lines": "Ne pas empiler sur de multiples lignes", "Download": "Télécharger", "Download All": "Tout télécharger", "Download Less": "Télécharger le code Less", "Drop Cap": "Lettrine", "Dropdown": "Menu déroulant", "Dynamic": "Dynamique", "Dynamic Condition": "Condition dynamique", "Dynamic Content": "Contenu dynamique", "Easing": "Élasticité", "Edit": "Editer", "Edit %title% %index%": "Editer %title% %index%", "Edit Items": "Editer les articles", "Edit Layout": "Modifier Layout", "Edit Menu Item": "Editer l'élément du menu", "Edit Module": "Editer un module", "Edit Settings": "Editer la configuration", "Edit Template": "Modifier le modèle", "Element": "Elément", "Enable a navigation to move to the previous or next post.": "Activer une navigation pour se déplacer vers l'article précédent ou suivant.", "Enable autoplay": "Activer la lecture automatique", "Enable click mode on text items": "Activer le mode cliquez sur les éléments de texte", "Enable drop cap": "Activer Lettrine", "Enable filter navigation": "Activer la navigation par filtre", "Enable lightbox gallery": "Activer la galerie lightbox", "Enable map dragging": "Activer le glissement de carte", "Enable map zooming": "Activer le zoom de la carte", "Enable marker clustering": "Permettre amas de repères", "Enable masonry effect": "Activer l'effet mansonry (ajustement des hauteurs des images)", "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.": "Saisir une liste de tags séparés par des virgules, par exemple, <code>bleu, blanc, noir</code>.", "Enter a decorative section title which is aligned to the section edge.": "Entrez un titre de section décorative aligné sur le bord de la section.", "Enter a subtitle that will be displayed beneath the nav item.": "Entrez un sous-titre qui sera affiché sous l'élément de navigation.", "Enter a table header text for the content column.": "Indiquez une en-tête de tableau pour le contenu de la colonne.", "Enter a table header text for the image column.": "Indiquez une en-tête de tableau pour l'image de la colonne.", "Enter a table header text for the link column.": "Indiquez une en-tête de tableau pour le lien de la colonne.", "Enter a table header text for the meta column.": "Indiquez une en-tête de tableau pour les métas de la colonne.", "Enter a table header text for the title column.": "Indiquez une en-tête de tableau pour le titre de la colonne.", "Enter a width for the popover in pixels.": "Saisir une largeur en pixel pour la popover.", "Enter an optional footer text.": "Entrez un texte optionnel pour le pied de page.", "Enter an optional text for the title attribute of the link, which will appear on hover.": "Entrez un texte facultatif pour l'attribut titre du lien, qui apparaîtra au survol.", "Enter labels for the countdown time.": "Saisir les étiquettes pour le compte à rebours.", "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported.": "Entrez le lien vers votre profil social. Un correspondant <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">Icône de marque UIkit</a> sera affiché automatiquement, si disponible. Liens vers des adresses e-mail et des numéros de téléphone, comme mailto:info@example.com ou tel:+491570156, sont également pris en charge.", "Enter or pick a link, an image or a video file.": "Saisir ou choisir un lien, une image ou un fichier vidéo.", "Enter the author name.": "Entrez le nom de l'auteur.", "Enter the cookie consent message. The default text serves as illustration. Please adjust it according to the cookie laws of your country.": "Saisissez le message de consentement aux cookies. Le texte par défaut utilisé est une proposition. Veuillez ajuster le texte en accord avec les lois sur les cookies de votre pays.", "Enter the horizontal position of the marker in percent.": "Entrez la position horizontale du marqueur en pourcentage.", "Enter the image alt attribute.": "Entrer l'attribut de la balise ALT de l’image.", "Enter the replacement string which may contain references. If left empty, the search matches will be removed.": "Entrez la chaîne de remplacement qui peut contenir des références. Si laissé vide, les correspondances de recherche seront supprimées.", "Enter the text for the button.": "Saisissez le texte pour le bouton.", "Enter the text for the home link.": "Saisissez le texte du lien d'accueil.", "Enter the text for the link.": "Entrer le texte pour le lien.", "Enter the vertical position of the marker in percent.": "Entrez la position verticale du marqueur en pourcentage.", "Enter your <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> ID to enable tracking. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">IP anonymization</a> may reduce tracking accuracy.": "Saisir votre ID <a href=\"https://developers.google.com/analytics/\" target=\"_blank\">Google Analytics</a> pour activer les statistiques. <a href=\"https://support.google.com/analytics/answer/2763052\" target=\"_blank\">L'anonymisation des IPs</a> peut réduire la précision des statistiques.", "Enter your <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> API key to use Google Maps instead of OpenStreetMap. It also enables additional options to style the colors of your maps.": "Saisissez votre clé API <a href=\"https://developers.google.com/maps/web/\" target=\"_blank\">Google Maps</a> pour utiliser Google Maps à la place d'OpenStreetMap. Vous activerez également des options supplémentaires pour personnaliser les couleurs de vos cartes.", "Enter your <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> API key for using it with the Newsletter element.": "Saisir votre clef API <a href=\"https://help.campaignmonitor.com/topic.aspx?t=206\" target=\"_blank\">Campaign Monitor</a> afin de l'utiliser avec l'élément Newsletter.", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront préfixés automatiquement pour cet élément : <code>.el-column</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>": "Saisissez votre CSS personalisé. Les sélecteurs suivants seront préfixés automatiquement pour cet élément : <code>.el-element</code>, <code>.el-input</code>, <code>.el-button</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>": "Saisir votre propre CSS personnalisé, les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Entrez votre propre CSS personnalisé. Les sélecteurs suivants seront préfixés automatiquement pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>": "Saisir votre propre CSS personnalisé. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-title</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>": "Saisir vos styles CSS personnalisés. Les sélecteurs suivants seront automatiquement préfixés pour cet élément : <code>.el-section</code>", "Error": "Erreur", "Error creating folder.": "Erreur de création de dossier.", "Error deleting item.": "Erreur de suppression d'élément.", "Error renaming item.": "Erreur de renommage d'élément.", "Error: %error%": "Erreur : %error%", "Excerpt": "Extrait", "Expand One Side": "Extension d'un côté", "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.": "Augmentez la largeur d'un côté à gauche ou à droite, tandis que l'autre côté respecte les contraintes de la largeur maximale.", "Expand width to table cell": "Étendre la largeur à la cellule du tableau", "Export Settings": "Exporter paramètres", "Extend all content items to the same height.": "Étendre tous les éléments de contenu à une même hauteur.", "External Services": "Services externes", "Extra Margin": "Extra marge", "Fifths": "Cinquièmes", "Fifths 1-1-1-2": "Cinquièmes 1-1-1-2", "Fifths 1-1-3": "Cinquièmes 1-1-3", "Fifths 1-3-1": "Cinquièmes 1-3-1", "Fifths 1-4": "Cinquièmes 1-4", "Fifths 2-1-1-1": "Cinquièmes 2-1-1-1", "Fifths 2-3": "Cinquièmes 2-3", "Fifths 3-1-1": "Cinquièmes 3-1-1", "Fifths 3-2": "Cinquièmes 3-2", "Fifths 4-1": "Cinquièmes 4-1", "Files": "Fichiers", "Filter": "Filtre", "Finite": "Fini", "First name": "Prénom", "Fix the background with regard to the viewport.": "Régler l'arrière plan par rapport à la fenêtre d'affichage.", "Fixed-Inner": "Fixer à l'intérieur", "Fixed-Left": "Fixer à gauche", "Fixed-Outer": "Fixer à l'extérieur", "Fixed-Right": "Fixer à droite", "Folder created.": "Dossier créé.", "Folder Name": "Nom du dossier", "Font Family": "Famille de police", "Footer": "Pied de page", "Force a light or dark color for text, buttons and controls on the image or video background.": "Forcer une couleur claire ou foncée pour le texte, les boutons et les commandes sur l'arrière-plan de l'image ou de la vidéo.", "Force left alignment": "Forcer l'alignement à gauche", "Form": "Formulaire", "Full width button": "Bouton pleine largeur", "Gallery": "Galerie", "Gap": "Écart", "General": "Général", "Gradient": "Dégradé", "Grid": "Grille", "Grid Breakpoint": "Point d'arrêt de la Grid", "Grid Column Gap": "Écart colonnes grille", "Grid Row Gap": "Écart lignes grille", "Grid Width": "Largeur de la grille", "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.": "Grouper les éléments en ensembles. Le nombre d'éléments contenus à l'intérieur d'un ensemble dépend de la largeur de l'élément défini, exemple : <i>33%</i> signifie que chaque ensemble contiendra 3 éléments.", "Halves": "Moitiées", "Header": "En-tête", "Heading": "Rubrique", "Heading H4": "Titre H4", "Heading H5": "Titre H5", "Heading H6": "Titre H6", "Heading Large": "Titre large", "Heading Link": "Lien titre", "Heading Medium": "Titre moyen", "Heading Small": "Titre petit", "Heading X-Large": "Titre extra large", "Headline": "Titre", "Headline styles differ in font size and font family.": "Les styles de titre varient en taille et en famille de police.", "Height": "Hauteur", "Height 100%": "Hauteur 100%", "hex / keyword": "hex / mot-clé", "Hide and Adjust the Sidebar": "Masquer et ajuster la barre latérale", "Hide marker": "Masquer le marqueur", "Hide title": "Cacher le titre", "Highlight the hovered row": "Mettre en surbrillance la ligne survolée", "Home": "Accueil", "Home Text": "Texte d'accueil", "Horizontal Center": "Centré horizontalement", "Horizontal Center Logo": "Logo Centré Horizontalement", "Horizontal Left": "Horizontal gauche", "Horizontal Right": "Horizontal droite", "Hover Box Shadow": "Ombre portée Hover Box", "Hover Image": "Image au survol", "Hover Style": "Style survol", "Hover Transition": "Transition survol", "HTML Element": "Élément HTML", "Hue": "Teinte", "Icon": "Icone", "Icon Color": "Couleur de l'icone", "Icon Width": "Largeur de l'icône", "If a section or row has a max width, and one side is expanding to the left or right, the default padding can be removed from the expanding side.": "Si une section ou une ligne a une largeur maximale et qu'un côté est en expansion à gauche ou à droite, le remplissage par défaut peut être supprimé du côté en expansion.", "If multiple templates are assigned to the same view, the template which appears first is applied. Change the order with drag and drop.": "Si plusieurs modèles sont affectés à la même vue, le modèle qui apparaît en premier est appliqué. Modifiez l'ordre par glisser-déposer.", "If you are creating a multilingual site, do not select a specific menu here. Instead, use the Joomla module manager to publish the right menu depending on the current language.": "Si vous réalisez un site multilingue, ne sélectionnez pas un menu spécifique ici. Utilisez plutôt le gestionnaire de module Joomla pour publier les menu des langues correspondantes et en les assignant selon les pages désirées.", "Image Alignment": "Alignement de l'image", "Image Alt": "Définir la balise ALT de l’image", "Image Attachment": "Joindre une image", "Image Box Shadow": "Ombre Portée Image", "Image Effect": "Effet sur l'image", "Image Height": "Hauteur de l'image", "Image Margin": "Marge de l'image", "Image Orientation": "Orientation de l'image", "Image Position": "Position de l'image", "Image Size": "Taille de l'image", "Image Width": "Largeur de l'image", "Image Width/Height": "Largeur/Hauteur de l'image", "Image, Title, Content, Meta, Link": "Image, Titre, Contenu, Meta, Lien", "Image, Title, Meta, Content, Link": "Image, Titre, Meta, Contenu, Lien", "Image/Video": "Image/Vidéo", "Images can't be cached. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.": "Les images ne peuvent pas être mises en cache. <a href=\"https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues\" target=\"_blank\">Changer les permissions</a> du dossier <code>cache</code> dans le répertoire du template <code>yootheme</code>, pour que le serveur web puisse écrire dedans.", "Import Settings": "Importer paramètres", "Inherit": "Hérité", "Inherit transparency from header": "Transparence héritée de l'entête", "Inject SVG images into the page markup so that they can easily be styled with CSS.": "Injectez des images SVG dans le balisage de page, afin qu'elles puissent être facilement stylisées avec CSS.", "Inline SVG": "SVG en ligne", "Inline title": "Titre en ligne", "Insert at the bottom": "Insérer en dernier", "Insert at the top": "Insérer en premier", "Inset": "Encart", "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.": "Au lieu d'utiliser une image personnalisée, vous pouvez cliquer sur le crayon pour sélectionner une icône dans la bibliothèque d'icônes.", "Inverse Logo (Optional)": "Décliner le Logo (Optionnel)", "Inverse style": "Style inverse", "Inverse the text color on hover": "Inverser la couleur du texte au survol", "Invert lightness": "Inverser la Luminosité", "IP Anonymization": "Rendre anonyme les IPs des visiteurs", "Is empty": "Est vide", "Is equal to": "Est égal à", "Is not empty": "N'est pas vide", "Issues and Improvements": "Problèmes et améliorations", "Item": "Article", "Item deleted.": "Elément effacé.", "Item renamed.": "Elément renommé.", "Item uploaded.": "Elément envoyé.", "Item Width": "Largeur de l'élément", "Item Width Mode": "Méthode de largeur de l'élément", "Items": "Articles", "Justify": "Justifié", "Keep existing": "Conserver existant", "Ken Burns Effect": "Effet Ken Burns", "l": "I", "Label Margin": "Marge de l'étiquette", "Labels": "Etiquettes", "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.": "Les images en paysage ou en portrait sont centrées à l'intérieur de la cellule. Largeur et hauteur seront inversées lorsque les images seront redimensionnées.", "Large (Desktop)": "Large (Bureau)", "Large Screen": "Grand écran", "Large Screens": "Grands écrans", "Larger padding": "Largeur de la marge interne", "Larger style": "Style plus large", "Last Column Alignment": "Alignement de la dernière colonne", "Last Modified": "Dernière modification", "Last name": "Nom", "Layout": "Modèle", "Layout Media Files": "Fichiers multimédia de mise en page", "Lazy load video": "Vidéos qui seront retardées", "Left": "Gauche", "Left (Not Clickable)": "Gauche (non clickable)", "Less than": "Plus petit que", "Library": "Bibliothèque", "Light": "Léger", "Lightbox only": "Seulement Lightbox", "Lightness": "Clarté", "Limit the content length to a number of characters. All HTML elements will be stripped.": "Limite la longueur du contenu à un certain nombre de caractères. Tous les éléments HTML seront enlevés.", "Link": "Lien", "link": "lien", "Link card": "Carte de lien", "Link image": "Lier l'image", "Link overlay": "Lier la surperposition", "Link panel": "Lier le panneau", "Link Parallax": "Lien Parallax", "Link Style": "Style du lien", "Link Target": "Cible du lien", "Link Text": "Texte du lien", "Link the image if a link exists.": "Liez l'image si un lien existe.", "Link the title if a link exists.": "Liez le titre si un lien existe.", "Link the whole card if a link exists.": "Liez toute la carte si un lien existe.", "Link the whole overlay if a link exists.": "Lier toute la superposition si un lien existe.", "Link the whole panel if a link exists.": "Lier tout le panneau si un lien existe.", "Link title": "Titre du lien", "Link Title": "Titre du lien", "Link to redirect to after submit.": "Saisir le lien de la page de redirection vers laquelle l'internaute sera redirigé après soumission.", "List": "Liste", "List Item": "Élément de liste", "List Style": "Style de liste", "Load jQuery": "Charger jQuery", "Loading Layouts": "Chargement des modèles", "Location": "Emplacement", "Logo Text": "Logo Texte", "Loop video": "Vidéo en boucle", "Mailchimp API Token": "Clé API de Mailchimp", "Main styles": "Les styles principaux", "Make SVG stylable with CSS": "Rendre SVG stylable avec CSS", "Managing Menus": "Gestion des menus", "Managing Modules": "Gestion des modules", "Managing Templates": "Gestion des modèles", "Managing Widgets": "Gestion des widgets", "Map": "Carte", "Margin": "Marge", "Margin Top": "Marge du haut", "Marker": "Marqueur", "Marker Color": "Couleur du marqueur", "Masonry": "Mansonry (Dallage des images)", "Match content height": "Aligner la hauteur du contenu", "Match height": "Aligner l'hauteur", "Match Height": "Adapter la hauteur", "Match the height of all modules which are styled as a card.": "Unifier la hauteur de tous les modules dont le style est card.", "Match the height of all widgets which are styled as a card.": "Unifier la hauteur de tous les widgets dont le style est card.", "Max Height": "Hauteur max", "Max Width": "Largeur maximale", "Max Width (Alignment)": "Largeur maximale (alignement)", "Max Width Breakpoint": "Point d'arrêt pour la largeur Max", "Maximum Zoom": "Zoom maximum", "Maximum zoom level of the map.": "Niveau de zoom maximum de la carte.", "Media Folder": "Dossier des médias", "Medium (Tablet Landscape)": "Medium (Tablette Paysage)", "Menu Divider": "Séparateur du menu", "Message shown to the user after submit.": "Message affiché aux utilisateurs après soumission.", "Meta Alignment": "Alignement Meta", "Meta Margin": "Marge Meta", "Meta Style": "Style du Meta", "Meta Width": "Largeur du Meta", "Min Height": "Hauteur minimum", "Mind that a template with a general layout is assigned to the current page. Edit the template to update its layout.": "N'oubliez pas qu'un modèle avec une mise en page générale est affecté à la page en cours. Modifiez le modèle pour mettre à jour sa mise en page.", "Minimum Stability": "Stabilité minimum", "Minimum Zoom": "Zoom minimum", "Minimum zoom level of the map.": "Niveau de zoom minimum de la carte.", "Mobile Logo (Optional)": "Logo pour mobiles (Optionnel)", "Modal Width/Height": "Hauteur/largeur de la fenêtre", "Module Position": "Position du module", "Move the sidebar to the left of the content": "Déplacer la barre latérale à gauche du contenu", "Multiple Items Source": "Source d'éléments multiples", "Mute video": "Couper le son de la vidéo", "Name": "Nom", "Navbar": "Barre de navigation", "Navbar Style": "Style barre de navigation", "Navigation Label": "Étiquette de navigation", "Navigation Thumbnail": "Miniature de navigation", "New Layout": "Nouvelle mise en page", "New Menu Item": "Ajouter un élément de menu", "New Module": "Nouveau module", "New Template": "Nouveau modèle", "Next Article": "Article suivant", "Next-Gen Images": "Images Next-Gen", "No %item% found.": "Aucun %item% trouvé.", "No critical issues found.": "Aucun problème critique trouvé.", "No element found.": "Aucun élément trouvé.", "No element presets found.": "Aucun préréglage d'élément trouvé.", "No files found.": "Aucun fichier trouvé.", "No font found. Press enter if you are adding a custom font.": "Aucune police trouvée. Appuyez sur Entrée si vous ajoutez une police personnalisée.", "No icons found.": "Aucune icône trouvée.", "No items yet.": "Aucun élément pour l'instant.", "No layout found.": "Aucun Layout trouvé.", "No list selected.": "Aucune liste sélectionnée.", "No Results": "Aucun résultats", "No results.": "Aucun résultats.", "No style found.": "Aucun style trouvé.", "None": "Aucun", "Not assigned": "Non attribué", "Offcanvas Mode": "Mode Offcanvas", "Only available for Google Maps.": "Seulement disponible pour Google Maps.", "Only display modules that are published and visible on this page.": "Affichez uniquement les modules publiés et visibles sur cette page.", "Only single pages and posts can have individual layouts. Use a template to apply a general layout to this page type.": "Seules les pages et les articles uniques peuvent avoir des mises en page individuelles. Utilisez un modèle pour appliquer une mise en page générale à ce type de page.", "Open in a new window": "Ouvrir dans une nouvelle fenêtre", "Open Templates": "Ouvrir le modèle", "Open the link in a new window": "Ouvrir le lien dans une nouvelle fenêtre", "Opening the Changelog": "Ouvrir liste des changements", "Order": "Tri", "Order First": "Les plus anciens en premier", "Ordering Sections, Rows and Elements": "Ordonner Sections, Lignes et Éléments", "Outside Breakpoint": "Point d'arrêt en dehors", "Outside Color": "Couleur en dehors", "Overlap the following section": "Chevauchez la section suivante", "Overlay": "Recouvrir", "Overlay Color": "Chevaucher la couleur", "Overlay Parallax": "Faire un overlay du Parallax", "Overlay the site": "Faire un overlay du site", "Override the section animation setting. This option won't have any effect unless animations are enabled for this section.": "Remplacez le paramètre d'animation de la section. Cette option n'aura d'effet que si les animations sont activées pour cette section.", "Padding": "Marge intérieur", "Panel": "Panneau", "Panels": "Panneaux", "Parallax Easing": "Lissage de Parallax", "Pause autoplay on hover": "Mettre en pause l'autoplay au survol", "Phone Landscape": "Phone Paysage", "Pick": "Choisir", "Pick %type%": "Choisir %type%", "Pick an alternative icon from the icon library.": "Choisir une icône différente dans la bibliothèque d'icônes.", "Pick an alternative SVG image from the media manager.": "Choisir une image SVG différente dans le gestionnaire de media.", "Pick file": "Choisir un fichier", "Pick icon": "Choisir l'icône", "Pick link": "Choisir un lien", "Pick media": "Choisir un média", "Pick video": "Choisir la vidéo", "Placeholder Image": "Image d'indication", "Play inline on mobile devices": "Mettre en marche sur les périphériques mobiles", "Please install/enable the <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">installer plugin</a> to enable this feature.": "Veuillez installer / activer le <a href=\"index.php?option=com_plugins&view=plugins&filter_search=installer%20yootheme\">plugin d'installation</a> pour activer cette fonctionnalité.", "Please provide a valid email address.": "Merci d'indiquer une adresse mail valide.", "Position the element above or below other elements. If they have the same stack level, the position depends on the order in the layout.": "Positionner l'élément au dessus ou au dessous des autres éléments. Si il a le même niveau dans la pile, la position dépend alors de l'ordre dans la mise en page.", "Position the element in the normal content flow, or in normal flow but with an offset relative to itself, or remove it from the flow and position it relative to the containing column.": "Positionner l'élément dans le contenu normal du flux, ou dans le flux normal, mais avec un décalage par rapport à lui-même, ou alors le retirer de la numérotation ainsi que sa position par rapport à la colonne contenant.", "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.": "Positionner le filtre de navigation en haut, la gauche ou la droite. Un style plus large peut être appliqué pour les navigations gauche et droite.", "Position the meta text above or below the title.": "Positionner le texte meta au dessus ou en dessous du titre.", "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.": "Positionnez la navigation en haut, en bas, à gauche ou à droite. Un style plus large peut être appliqué aux navigations gauche et droite.", "Post": "Article", "Poster Frame": "Cadre d'affiche", "Preserve text color": "Conserver la couleur du texte", "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.": "Conservez la couleur du texte, par exemple lors de l'utilisation de cartes. Le chevauchement de section n'est pas pris en charge par tous les styles et peut n'avoir aucun effet visuel.", "Preview all UI components": "Prévisualiser tous les éléments de l'UI", "Previous %post_type%": "Précédent %post_type%", "Previous Article": "Article précédent", "Previous/Next": "Précédent/Suivant", "Primary navigation": "Navigation primaire", "Provider": "Fournisseur", "Quantity": "Quantité", "Quarters": "Quarts", "Quarters 1-1-2": "Quarts 1-1-2", "Quarters 1-2-1": "Quarts 1-2-1", "Quarters 1-3": "Quarts 1-3", "Quarters 2-1-1": "Quarts 2-1-1", "Quarters 3-1": "Quarts 3-1", "Quotation": "Citation", "Recompile style": "Recompile le style", "Reject Button Style": "Style du Bouton Ne pas accepter", "Reject Button Text": "Texte du Bouton Ne pas accepter", "Reload Page": "Actualiser la page", "Remove bottom margin": "Retirer la marge inférieure", "Remove bottom padding": "Retirer l'espace inférieur", "Remove horizontal padding": "Supprimer l'espace horizontal", "Remove left and right padding": "Enlever le padding à gauche et à doite", "Remove left logo padding": "Enlever l'espace à gauche du logo", "Remove left or right padding": "Enlever l'espace à gauche ou à droite", "Remove Media Files": "Retirer fichiers média", "Remove top margin": "Supprimer la marge supérieure", "Remove top padding": "Retirer l'espace supérieur", "Rename": "Renommer", "Rename %type%": "Renommer %type%", "Replace": "Remplacer", "Replace layout": "Remplacer Layout", "Reset": "Réinitialiser", "Reset to defaults": "Réinitialiser les paramètres par défaut", "Reverse order": "Ordre inverse", "Right": "Droit", "Root": "Racine", "Rotate the title 90 degrees clockwise or counterclockwise.": "Pivotez le titre de 90 degrés dans le sens de l'horloge ou dans le sens inverse.", "Row": "Ligne", "Row Gap": "Écart ligne", "Save": "Sauvegarder", "Save %type%": "Sauvegarder %type%", "Save in Library": "Enregistrer dans la bibliothèque", "Save Layout": "Sauvegarder Layout", "Save Style": "Sauvegarder Style", "Save Template": "Enregistrer le modèle", "Search": "Recherche", "Search Component": "Composant de recherche", "Search Style": "Chercher un style", "Section Animation": "Animation de la section", "Section Height": "Hauteur de la section", "Section Padding": "Padding Section", "Section Style": "Style Section", "Section Title": "Titre Section", "Section Width": "Largeur Section", "Section/Row": "Section/Colonne", "Select": "Séléctionner", "Select %item%": "Sélectionner %item%", "Select %type%": "Séléctionner %type%", "Select a card style.": "Sélectionner un style d'encadrement (Card).", "Select a content source to make its fields available for mapping. Choose between sources of the current page or query a custom source.": "Sélectionnez une source de contenu pour rendre ses champs disponibles pour le mappage. Choisissez entre les sources de la page actuelle ou interrogez une source personnalisée.", "Select a different position for this item.": "Sélectionner une position différente pour cet élément.", "Select a grid layout": "Sélectionner une disposition de grille", "Select a Joomla module position that will render all published modules. It's recommended to use the builder-1 to -6 positions, which are not rendered elsewhere by the theme.": "Sélectionner une position de module Joomla qui affichera tous les modules publiés. Il est recommandé d'utiliser les positions builder-1 à -6, qui ne sont pas rendus autre part par le template.", "Select a panel style.": "Choisir un style pour Panel.", "Select a predefined date format or enter a custom format.": "Sélectionnez un format de date prédéfini ou entrez un format personnalisé.", "Select a predefined meta text style, including color, size and font-family.": "Sélectionnez un style méta-texte prédéfini, y compris la couleur, la taille et la famille de polices.", "Select a predefined search pattern or enter a custom string or regular expression to search for. The regular expression has to be enclosed between slashes. For example `my-string` or `/ab+c/`.": "Sélectionnez un modèle de recherche prédéfini ou entrez une chaîne personnalisée ou une expression régulière à rechercher. L'expression régulière doit être placée entre des barres obliques. Par exemple `my-string` ou `/ab+c/`.", "Select a predefined text style, including color, size and font-family.": "Sélectionnez un style de texte prédéfini, y compris la couleur, la taille et font-family.", "Select a style for the continue reading button.": "Sélectionner un style pour le bouton \"Lire la suite\".", "Select a style for the overlay.": "Sélectionner un style pour le recouvrement.", "Select a transition for the content when the overlay appears on hover.": "Choisir une transition pour le contenu lors du survol de l'Overlay.", "Select a transition for the link when the overlay appears on hover.": "Choisir une transition pour le lien lors du survol de l'Overlay.", "Select a transition for the meta text when the overlay appears on hover.": "Choisir une transition pour le meta lors du survol de l'Overlay.", "Select a transition for the overlay when it appears on hover.": "Choisir une transition pour l'Overlay lors du survol.", "Select a transition for the title when the overlay appears on hover.": "Choisir une transition pour le titre lors du survol de l'Overlay.", "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.": "Sélectionnez un fichier vidéo ou entrez un lien à partir de <a href=\"https://www.youtube.com\" target=\"_blank\"> YouTube </a> ou <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "Select a WordPress widget area that will render all published widgets. It's recommended to use the builder-1 to -6 widget areas, which are not rendered elsewhere by the theme.": "Sélectionnez une zone de widget WordPress qui rendra tous les widgets publiés. Il est recommandé d'utiliser les zones de widgets constructeur-1 à -6, qui ne sont pas restituées ailleurs par le thème.", "Select an alternative logo with inversed color, e.g. white, for better visibility on dark backgrounds. It will be displayed automatically, if needed.": "Sélectionnez un autre logo avec une couleur inversée, par exemple : Blanc, pour une meilleure visibilité sur les fonds sombres. Il sera affiché automatiquement, si nécessaire.", "Select an alternative logo, which will be used on small devices.": "Sélectionnez un autre logo, qui sera utilisé sur les petits appareils.", "Select an animation that will be applied to the content items when filtering between them.": "Sélectionnez une animation qui sera appliquée aux éléments de contenu lors du basculement entre eux.", "Select an animation that will be applied to the content items when toggling between them.": "Sélectionnez une animation qui sera appliquée aux éléments de contenu lors du basculement entre eux.", "Select an image transition.": "Sélectionner une image de transition.", "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.": "Sélectionner une image de transition. Si l'image survolé est sélectionnée, la transition prendre effet entre les deux images. Si <i>Aucune</i> est sélectionné, l'image au survol fera un fade in.", "Select an optional image that appears on hover.": "Choisir une image optionnelle au survol.", "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.": "Sélectionnez une image en option qui s'affiche jusqu'à ce que la vidéo soit lue. Si elle n'est pas sélectionnée, la première image vidéo est affichée comme cadre d'affichage.", "Select header layout": "Sélectionnez une disposition pour l'en-tête", "Select Image": "Sélectionner une image", "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.": "Sélectionnez le point d'arrêt à partir duquel la colonne commencera à apparaître avant les autres colonnes. Sur des tailles d'écran plus petites, la colonne apparaîtra dans l'ordre naturel.", "Select the color of the list markers.": "Sélectionnez la couleur des marqueurs de liste.", "Select the content position.": "Sélectionner la position du contenu.", "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.": "Sélectionner le style de filtre de navigation. Les styles pill et diviseur sont uniquement disponible pour les sous-navigations horizontales.", "Select the form size.": "Sélectionner la taille du formulaire.", "Select the form style.": "Sélectionner le style du formulaire.", "Select the icon color.": "Sélectionner la couleur de l'icône.", "Select the image border style.": "Sélectionner le style de la bordure de l'image.", "Select the image box decoration style.": "Sélectionnez le style de décoration de la boîte de l'image.", "Select the image box shadow size on hover.": "Choisir la taille de la box shadow de l'image lors du survol.", "Select the image box shadow size.": "Sélectionnez la taille d'ombre de la zone d'image.", "Select the link style.": "Sélectionner le style du lien.", "Select the list style.": "Sélectionnez le style de liste.", "Select the list to subscribe to.": "Sélectionner la liste à laquelle l'utilisateur sera inscrit.", "Select the marker of the list items.": "Sélectionnez le marqueur des éléments de la liste.", "Select the nav style.": "Sélectionner le style de navigation.", "Select the navbar style.": "Sélectionner le style de la barre de navigation.", "Select the navigation type.": "Sélectionner le type de navigation.", "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.": "Sélectionnez le style de navigation. Les styles de \"pilules\" et de lignes ne sont disponibles que pour les sous-navigations horizontales.", "Select the overlay or content position.": "Choisir l'Overlay ou la position du contenu.", "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.": "Sélectionner l'alignement vis à vis du marqueur de la popover. Si la popover ne s'adapte pas à son container, l'alignement s'adaptera automatiquement.", "Select the position of the navigation.": "Sélectionner la position de la navigation.", "Select the position of the slidenav.": "Sélectionner la position de la slidenav.", "Select the position that will display the search.": "Sélectionnez la position qui affichera la recherche.", "Select the position that will display the social icons. Be sure to add your social profile links or no icons can be displayed.": "Sélectionnez la position qui affichera les icônes sociaux. Assurez-vous d'ajouter vos liens de profil social ou aucune icône ne peut être affichée.", "Select the search style.": "Sélectionner le style de la recherche.", "Select the slideshow box shadow size.": "Sélectionner la taille de la box shadow du slideshow.", "Select the style for the code syntax highlighting. Use GitHub for light and Monokai for dark backgrounds.": "Sélectionnez le style de la mise en surbrillance de la syntaxe de code. Utilisez GitHub pour la lumière et Monokai pour l'arrière-plan.", "Select the style for the overlay.": "Choisir le style pour l'Overlay.", "Select the subnav style.": "Sélectionnez le style du sous-menu.", "Select the SVG color. It will only apply to supported elements defined in the SVG.": "Sélectionner la couleur SVG. Elle s'appliquera uniquement aux éléments supportés définis dans le SVG.", "Select the table style.": "Sélectionner le style du tableau (table).", "Select the text color.": "Sélectionnez la couleur du texte.", "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.": "Sélectionnez la couleur du texte. Si l'option d'arrière-plan est sélectionnée, les styles qui n'appliquent pas une image d'arrière-plan utilisent la couleur primaire à la place.", "Select the text color. If the background option is selected, styles that don't apply a background image use the primary color instead.": "Sélectionnez la couleur du texte. Si l'option d'arrière-plan est sélectionnée, les styles qui n'appliquent pas une image d'arrière-plan utilisent la couleur primaire à la place.", "Select the title style and add an optional colon at the end of the title.": "Sélectionner le style du titre et ajouter une marque de ponctuation à la fin du titre.", "Select the transformation origin for the Ken Burns animation.": "Sélectionner le point d'origine de la transformation pour l'animation Ken Burns.", "Select the transition between two slides.": "Sélectionner la transition entre les deux slides.", "Select the video box decoration style.": "Sélectionnez le style de décoration de la boîte video.", "Select the video box shadow size.": "Sélectionner la taille de l'ombre de la boîte, de la vidéo.", "Select whether a button or a clickable icon inside the email input is shown.": "Sélectionnez si un bouton ou un icône cliquable sera affiché dans les emails.", "Select whether a message will be shown or the site will be redirected after clicking the subscribe button.": "Sélectionner si un message devrait être affiché ou si le site sera redirigé après avoir cliqué sur le bouton d'inscription.", "Select whether the modules should be aligned side by side or stacked above each other.": "Sélectionner si les modules devraient être alignés côte à côte ou l'un au dessus de l'autre.", "Select whether the widgets should be aligned side by side or stacked above each other.": "Indiquez si les widgets doivent être alignés côte à côte ou empilés les uns sur les autres.", "Separator": "Séparateur", "Serve WebP images": "Mettre les images WebP", "Set a condition to display the element or its item depending on the content of a field.": "Définissez une condition pour afficher l'élément ou son élément en fonction du contenu d'un champ.", "Set a different link text for this item.": "Choisir un lien texte différent pour cet élément.", "Set a different text color for this item.": "Choisir une couleur de texte différent pour cet élément.", "Set a fixed width.": "Paramétrer une largeur fixe.", "Set a higher stacking order.": "Choisissez un ordre des éléments, l'un au dessus de l'autre, plus élevé.", "Set a large initial letter that drops below the first line of the first paragraph.": "Mettre une lettre initiale large qui tombe en dessous de la première ligne du premier paragraphe.", "Set a sidebar width in percent and the content column will adjust accordingly. The width will not go below the Sidebar's min-width, which you can set in the Style section.": "Définissez une largeur de barre latérale en pourcentage et la colonne de contenu s'ajuste en conséquence. La largeur n'est pas inférieure à la largeur minimale de la barre latérale, que vous pouvez définir dans la section Style.", "Set an additional transparent overlay to soften the image or video.": "Définissez une superposition transparente supplémentaire pour adoucir l'image ou la vidéo.", "Set an additional transparent overlay to soften the image.": "Défini une couche transparente additionnelle pour adoucir l'image.", "Set an optional content width which doesn't affect the image if there is just one column.": "Définissez une largeur de contenu facultative qui n'affecte pas l'image s'il n'y a qu'une seule colonne.", "Set an optional content width which doesn't affect the image.": "Régler une largeur optionnelle qui n'affecte pas l'image.", "Set how the module should align when the container is larger than its max-width.": "Définir comment le module doit aligner lorsque le conteneur est plus grand que sa largeur maximale.", "Set light or dark color if the navigation is below the slideshow.": "Choisir une couleur claire ou sombre si la navigation est dessous le slideshow.", "Set light or dark color if the slidenav is outside.": "Choisir une couleur claire ou sombre si la slidenav est en dehors du slideshow.", "Set light or dark color mode for text, buttons and controls.": "Réglez le mode de couleur claire ou sombre pour le texte, les boutons et les commandes.", "Set light or dark color mode.": "Choisir un mode de couleur claire ou sombre.", "Set percentage change in lightness (Between -100 and 100).": "Régler changement en luminosité (Entre -100 et 100).", "Set percentage change in saturation (Between -100 and 100).": "Régler changement en saturation (Entre -100 et 100).", "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).": "Régler pourcentage de changement en total de correction gamma (Entre 0.01 et 10.0, alors que 1.0 n'applique aucune correction).", "Set the autoplay interval in seconds.": "Choisir l'intervalle de lecture automatique en secondes.", "Set the blog width.": "Choisir la largeur du blog.", "Set the breakpoint from which grid items will stack.": "Définissez le point d'arrêt à partir duquel les cellules du quadrillage s'empilent.", "Set the breakpoint from which the sidebar and content will stack.": "Définissez le point d'arrêt à partir duquel la barre latérale et le contenu s'empilent.", "Set the button size.": "Définir la taille du bouton.", "Set the button style.": "Définir le style du bouton.", "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.": "Définissez la largeur de colonne pour chaque point d'arrêt. Mélangez des largeurs de fraction ou combinez des largeurs fixes avec la valeur <i>Expand</i>. Si aucune valeur n'est sélectionnée, la largeur de colonne de la taille d'écran la plus petite suivante est appliquée. La combinaison de largeurs doit toujours prendre toute la largeur.", "Set the device width from which the list columns should apply.": "Définissez la largeur de l'appareil à partir de laquelle les colonnes de la liste doivent s'appliquer.", "Set the device width from which the text columns should apply.": "Définissez la largeur de l'appareil à partir de laquelle les colonnes de texte doivent s'appliquer.", "Set the duration for the Ken Burns effect in seconds.": "Choisir la durée pour l'effet Ken Burns en secondes.", "Set the height in pixels.": "Fixer la hauteur en pixels.", "Set the horizontal position of the element's bottom edge in pixels. A different unit like % or vw can also be entered.": "Régler la position horizontale de l'élément de fond de la bordure en pixels. Une unité différente, comme % ou vw peut également être saisi.", "Set the horizontal position of the element's left edge in pixels. A different unit like % or vw can also be entered.": "Régler la position horizontale de l'élément de gauche de la bordure en pixels. Une unité différente, comme % ou vw peut également être saisi.", "Set the horizontal position of the element's right edge in pixels. A different unit like % or vw can also be entered.": "Régler la position horizontale de l'élément du bord droit en pixels. Une unité différente, comme % ou vw peut également être saisi.", "Set the horizontal position of the element's top edge in pixels. A different unit like % or vw can also be entered.": "Régler la position horizontale de l'élément du bord haut de la page en pixels. Une unité différente, comme % ou vw peut également être saisi.", "Set the hover style for a linked title.": "Règle le style de survol pour les liens de titres.", "Set the hover transition for a linked image.": "Règle la transition de survol pour les liens d'images.", "Set the hue, e.g. <i>#ff0000</i>.": "Choisir la teinte, exemple : <i>#ff0000</i>.", "Set the icon color.": "Définissez la couleur de l'icône.", "Set the icon width.": "Définissez la largeur de l'icône.", "Set the initial background position, relative to the page layer.": "Défini la position d'arrière-plan initiale par rapport au calque de page.", "Set the initial background position, relative to the section layer.": "Définissez la position de fond initiale, par rapport à la couche de coupe.", "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in.": "Définir la résolution initiale à laquelle afficher la carte. 0 est complètement zoomé et 18 est à la plus haute résolution zoomée.", "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.": "Choisir la largeur de l'élément pour chaque point d'arrêt. <i>Hérité</i> se réfère à la largeur de l'élément de la taille d'écran plus petit.", "Set the link style.": "Définir le style de lien.", "Set the margin between the countdown and the label text.": "Choisir la marge entre le compte à rebours et le label textuel.", "Set the margin between the overlay and the slideshow container.": "Choisir la marge entre l'overlay et le container du slideshow.", "Set the maximum content width.": "Définissez la largeur maximale du contenu.", "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.": "Définissez la largeur maximale du contenu. Remarque : La section peut déjà avoir une largeur maximale, que vous ne pouvez pas dépasser.", "Set the maximum header width.": "Règle la largeur maximale du titre.", "Set the maximum height.": "Choisir la hauteur maximum.", "Set the maximum width.": "Définissez la largeur maximale.", "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.": "Définissez le nombre de colonnes de grille pour chaque point d'arrêt. <i>Inherit</i> fait référence au nombre de colonnes de la prochaine taille d'écran plus petite. <i>Auto</i> étend les colonnes à la largeur de leurs éléments en remplissant les lignes en conséquence.", "Set the number of list columns.": "Définissez le nombre de colonnes de liste.", "Set the number of text columns.": "Définissez le nombre de colonnes de texte.", "Set the padding between sidebar and content.": "Définissez l'espace entre la barre latérale et le contenu.", "Set the padding between the overlay and its content.": "Définissez le padding de l'effet de recouvrement par rapport à son contenu.", "Set the padding.": "Régler le padding.", "Set the post width. The image and content can't expand beyond this width.": "Choisir la largeur de l'article. L'image et le contenu ne pourront pas s'étendre au delà de cette largeur.", "Set the search input style.": "Sélectionnez le style de la recherche.", "Set the size of the column gap between multiple buttons.": "Règle la taille de l'écart de multiples boutons en colonne.", "Set the size of the column gap between the numbers.": "Règle la taille de l'écart entre des nombres en colonne.", "Set the size of the gap between between the filter navigation and the content.": "Sélectionnez la largeur de gouttière entre les éléments de navigation et de contenu.", "Set the size of the gap between the grid columns.": "Définir la taille de l'écart entre les colonnes de la grille.", "Set the size of the gap between the grid columns. Define the number of columns in the <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">Blog/Featured Layout</a> settings in Joomla.": "Définissez la taille de l'espace entre les colonnes de la grille. Définissez le nombre de colonnes dans les paramètres de Joomla pour <a href=\"index.php?option=com_config&view=component&component=com_content#blog_default_parameters\">l'affichage Blog/Blog des articles en vedette</a>.", "Set the size of the gap between the grid rows.": "Définir la taille de l'écart entre les lignes de la grille.", "Set the size of the gap between the image and the content.": "Définir la taille de l'écart entre l'image et le contenu.", "Set the size of the gap between the navigation and the content.": "Sélectionnez la largeur de gouttière entre les éléments de navigation et de contenu.", "Set the size of the gap between the social icons.": "Définissez la taille de l'écart entre les icônes sociales.", "Set the size of the gap between the title and the content.": "Définir la taille de l'écart entre le titre et le contenu.", "Set the size of the gap if the grid items stack.": "Définir la taille de l'écart entre les éléments de la grille et la pile.", "Set the size of the row gap between multiple buttons.": "Définissez la taille de la ligne de l'écart entre les boutons multiples.", "Set the size of the row gap between the numbers.": "Définissez la taille de la ligne de l'écart entre les nombres.", "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.": "Paramétrer un ratio. Il est recommandé d'utiliser le même ratio que l'image d'arrière-plan. Utiliser tout simplement la largeur et la hauteur, de cette façon <code>1600:900</code>.", "Set the starting point and limit the number of items.": "Définissez le point de départ et limitez le nombre d'éléments.", "Set the top margin if the image is aligned between the title and the content.": "Choisir la marge du haut si l'image est alignée entre le titre et le contenu.", "Set the top margin.": "Choisir la marge du haut.", "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.": "Défini la marge supérieure. Notez que la marge ne s'applique que si le champ de contenu suit immédiatement un autre champ de contenu.", "Set the velocity in pixels per millisecond.": "Choisir la vélocité en pixels par millisecondes.", "Set the vertical container padding to position the overlay.": "Choisir le padding vertical du container pour positionner l'overlay.", "Set the vertical margin.": "Réglage de la marge verticale.", "Set the vertical margin. Note: The first element's top margin and the last element's bottom margin are always removed. Define those in the grid settings instead.": "Définissez la marge verticale. Remarque : La première marge supérieure de l'élément et la dernière marge inférieure de l'élément sont toujours supprimées. Définissez plutôt ceux des paramètres de grille.", "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.": "Définissez la marge verticale. Remarque : La première marge de la grille et la dernière marge inférieure de la grille sont toujours supprimées. Définissez plutôt ceux des paramètres de section.", "Set the vertical padding.": "Définissez l'espace vertical.", "Set the video dimensions.": "Définissez les dimensions de la vidéo.", "Set the width and height for the modal content, i.e. image, video or iframe.": "Choisir la largeur et la hauteur pour le contenu lightbox. Pour : image, vidéo ou iframe.", "Set the width and height in pixels (e.g. 600). Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Définissez la largeur et la hauteur en pixels (par exemple, 600). Le réglage d'une seule valeur préserve les proportions d'origine. L'image sera redimensionnée et recadrée automatiquement.", "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.": "Définissez la largeur et la hauteur en pixels. Le réglage d'une seule valeur préserve les proportions d'origine. L'image sera redimensionnée et recadrée automatiquement.", "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.": "Définissez la largeur en pixels, par exemple. 600. Si aucune largeur n'est définie, la carte prendra toute la largeur et conservera la hauteur. Vous pouvez également utiliser la largeur uniquement pour définir le point de rupture à partir duquel la carte commence à se réduire, en conservant les proportions.", "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.": "Le réglage d'une seule valeur préserve les proportions d'origine. L'image sera redimensionnée et recadrée automatiquement, et si possible, les images haute résolution seront générées automatiquement.", "Setting the Blog Content": "Définition du contenu du blog", "Setting the Blog Image": "Définition de l'image du blog", "Setting the Blog Layout": "Définition de la mise en page du blog", "Setting the Blog Navigation": "Définition de la navigation du blog", "Setting the Header Layout": "Définition de la disposition de l'en-tête", "Setting the Minimum Stability": "Choisir la Stabilité minimale", "Setting the Module Appearance Options": "Définition des options d'apparence du module", "Setting the Module Default Options": "Définition des options par défaut du module", "Setting the Module Grid Options": "Définition des options de grille de modules", "Setting the Module List Options": "Définition des options de la liste des modules", "Setting the Module Menu Options": "Définition des options du menu du module", "Setting the Navbar": "Régler la Navbar", "Setting the Page Layout": "Régler la mise en page", "Setting the Post Content": "Régler le contenu de l'article", "Setting the Post Image": "Définir l'image du poste", "Setting the Post Layout": "Régler la disposition des articles", "Setting the Post Navigation": "Définir la navigation du poste", "Setting the Sidebar Area": "Régler la zone de la barre latérale", "Setting the Sidebar Position": "Régler la position de la barre latérale", "Setting the Source Order and Direction": "Régler l'ordre et la direction de la source", "Setting the Template Loading Priority": "Définir la priorité de chargement du thème", "Setting the Template Status": "Définir le statut du thème", "Setting the Top and Bottom Areas": "Définir haut et le bas zones", "Setting the Top and Bottom Positions": "Définir haut et bas positions", "Setting the Widget Appearance Options": "Définition des options d'apparence du module", "Setting the Widget Default Options": "Définition des options par défaut du module", "Setting the Widget Grid Options": "Réglages des options de grille de widgets", "Setting the Widget List Options": "Réglages des options de la liste des widgets", "Setting the Widget Menu Options": "Définition des options du menu Widget", "Settings": "Paramètres", "Show a banner to inform your visitors of cookies used by your website. Choose between a simple notification that cookies are loaded or require a mandatory consent before loading cookies.": "Montrer une bannière pour informer vos visiteurs de l'existence de cookies sur votre site web. Choisissez entre une simple notification disant que les cookies sont chargés ou un consentement obligatoire avant que les cookies soient chargés.", "Show a divider between grid columns.": "Montrer le diviseur entre les colonnes et la grille.", "Show a divider between list columns.": "Afficher un séparateur entre les colonnes de la liste.", "Show a divider between text columns.": "Afficher un séparateur entre les colonnes de texte.", "Show a separator between the numbers.": "Montrer un séparateur entre les numéros.", "Show archive category title": "Montrer le titre de la catégorie archive", "Show author": "Montrer l'auteur", "Show below slideshow": "Montrer en dessous du slideshow", "Show button": "Montrer le bouton", "Show categories": "Montrer les catégories", "Show comment count": "Montrer le comptage des commentaires", "Show comments count": "Montrer le comptage des commentaires", "Show content": "Afficher le contenu", "Show Content": "Afficher Contenu", "Show controls": "Montrer les boutons de contrôle", "Show current page": "Afficher la page actuelle", "Show date": "Montrer la date", "Show dividers": "Montrer les séparateurs", "Show drop cap": "Montrer la lettre capitale initiale", "Show filter control for all items": "Montrer le contrôle filtre pour tous les éléments", "Show headline": "Montrer le titre", "Show home link": "Afficher le lien vers la page d'accueil", "Show hover effect if linked.": "Montrer l'effet au survol si un lien existe.", "Show Labels": "Afficher les étiquettes", "Show map controls": "Afficher les contrôles de carte", "Show name fields": "Afficher noms champs", "Show navigation": "Montrer la navigation", "Show on hover only": "Montrer seulement au survol", "Show or hide content fields without the need to delete the content itself.": "Afficher ou masquer les champs de contenu sans avoir à supprimer le contenu lui-même.", "Show or hide the element on this device width and larger. If all elements are hidden, columns, rows and sections will hide accordingly.": "Afficher ou masquer l'élément sur cette largeur de périphérique et plus. Si tous les éléments sont masqués, les colonnes, lignes et sections seront masquées en conséquence.", "Show or hide the home link as first item as well as the current page as last item in the breadcrumb navigation.": "Afficher ou masquer le lien d'accueil comme premier élément ainsi que la page actuelle comme dernier élément dans le fil d'Ariane.", "Show popup on load": "Afficher le popup lors du chargement", "Show Separators": "Afficher les séparateurs", "Show space between links": "Afficher l'espace entre les liens", "Show Start/End links": "Montrer les liens Début/Fin", "Show system fields for single posts. This option does not apply to the blog.": "Montrer les champs systèmes pour les articles uniques. Cette option ne s'appliquent pas pour l'affichage blog.", "Show system fields for the blog. This option does not apply to single posts.": "Montrer les champs systèmes pour le blog. Cette option ne s'appliquent pour les articles uniques.", "Show tags": "Montrer les étiquettes/tags", "Show Tags": "Montrer les étiquettes/tags", "Show the content": "Afficher le contenu", "Show the excerpt in the blog overview instead of the post text.": "Affiche le texte d'intro en blog (Chapot) au lieu du texte de l'article.", "Show the image": "Afficher l'image", "Show the link": "Afficher le lien", "Show the menu text next to the icon": "Afficher le texte du menu à côté de l'icône", "Show the meta text": "Afficher le texte de la balise meta", "Show the navigation label instead of title": "Montrer le label de navigation à la place du titre", "Show the navigation thumbnail instead of the image": "Montrer la vignette de navigation à la place de l'image", "Show the title": "Afficher le titre", "Show title": "Afficher titre", "Show Title": "Afficher Titre", "Sidebar": "Barre latérale", "Size": "Taille", "Slide all visible items at once": "Faire glisser tous les éléments visibles en une fois", "Small (Phone Landscape)": "Petit (Téléphone en mode paysage)", "Social Icons": "Icônes Sociales", "Social Icons Gap": "Ecart entre les icônes de réseaux sociaux", "Social Icons Size": "Taille des icônes sociales", "Split the dropdown into columns.": "Découper le menu déroulant en colonnes.", "Spread": "Étendre", "Stack columns on small devices or enable overflow scroll for the container.": "Empiler les colonnes sur les périphériques de petite taille ou activer le défilement du surplus pour le container.", "Stacked Center A": "Empilé au centre A", "Stacked Center B": "Empilé au centre B", "Stacked Center C": "Empilé au centre C", "Start": "Début", "Status": "État", "Stretch the panel to match the height of the grid cell.": "Étirez le panneau pour qu'il corresponde à la hauteur de la cellule de grille.", "Subnav": "Sous-menu", "Subtitle": "Sous-titre", "SVG Color": "Couleur SVG", "Switcher": "Échangeur", "Syntax Highlighting": "Syntaxe en surbrillance", "System Check": "Vérification du système", "Table": "Tableau", "Table Head": "Haut du tableau (table th)", "Tablet Landscape": "Tablette Paysage", "Tags": "Mots-Clefs (Tags)", "Target": "Cible", "Text": "Texte", "Text Alignment": "Alignement du texte", "Text Alignment Breakpoint": "Point d'arrêt de l'alignement du texte", "Text Alignment Fallback": "Annuler l'alignement du texte", "Text Bold": "Texte en gras", "Text Color": "Couleur du texte", "Text Large": "Texte de grande taille (Large)", "Text Lead": "Texte d'introduction (Lead)", "Text Meta": "Texte méta (Meta)", "Text Muted": "Texte atténué (Muted)", "Text Small": "Texte de petite taille (Small)", "Text Style": "Style du texte", "The Accordion Element": "L'élément Accordion", "The Alert Element": "L'élément Alerte", "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.": "Le démarrage et l'arrêt de l'animation dépendent de la position de l'élément dans la fenêtre d'affichage. Vous avez également la possibilité d'utiliser la position d'un conteneur parent.", "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.": "L'animation démarre lorsque l'élément entre dans la fenêtre d'affichage (viewport) et se termine lorsqu'il quitte la fenêtre d'affichage. Vous pouvez éventuellement définir un décalage de début et de fin, par exemple <code>100px</code>, <code>50vh</code> ou <code>50vh + 50%</code>. Le pourcentage est relatif à la hauteur de la cible.", "The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.": "Le module Apache <code>mod_pagespeed</code> peut entraîner des problèmes d'affichage dans l'élément de carte avec OpenStreetMap.", "The Area Element": "La zone élément", "The bar at the top pushes the content down while the bar at the bottom is fixed above the content.": "La barre en haut pousse le contenu vers le bas tandis que la barre en bas de page est fixe et au dessus du contenu.", "The Breadcrumbs Element": "L'élément Fil d'Ariane", "The builder is not available on this page. It can only be used on pages, posts and categories.": "Le constructeur n'est pas accessible sur cette page. Il peut être utilisé uniquement sur les pages, articles et catégories.", "The Button Element": "L'élément Bouton", "The changes you made will be lost if you navigate away from this page.": "Les modifications que vous avez effectuées seront perdues si vous changez de page.", "The Code Element": "L'élément Code", "The Countdown Element": "L'élément Compte à rebours", "The Default order will follow the order set by the brackets or fallback to the default files order set by the system.": "L'ordre par défaut suivra l'ordre défini par les crochets ou se basera sur l'ordre par défaut des fichiers défini par le système.", "The Description List Element": "L'élément Liste de définitions", "The Divider Element": "L'élément Séparateur", "The Gallery Element": "L'élément Galerie", "The Grid Element": "L'élément Grille", "The Headline Element": "L'élément Titre principal", "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "La hauteur peut s'adapter à la hauteur de la fenêtre d'affichage (viewport). <br><br>Remarque : Assurez-vous de ne pas définir de hauteur dans les paramètres de la section lorsque vous utilisez l'une des options de la fenêtre d'affichage.", "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "La hauteur s'adaptera automatiquement sur la base de son contenu. Alternativement, la hauteur peut s'adapter à la hauteur du viewport. <br><br> Note : Assurez-vous qu'aucune hauteur n'est réglé dans les paramètres de la section lorsque vous utilisez une des options viewport .", "The Icon Element": "L'élément Icône", "The Image Element": "L'élément Image", "The List Element": "L'élément Liste", "The logo is placed automatically between the items. Optionally, set the number of items after which the items are split.": "Le logo est placé automatiquement entre les éléments. Vous pouvez éventuellement définir le nombre d'éléments après lequel les éléments sont séparés.", "The logo text will be used, if no logo image has been picked. If an image has been picked, it will be used as an aria-label attribute on the link.": "Le texte du logo sera utilisé s'il n'y a pas d'image de logo sélectionnée. Si une image a été sélectionnée, elle sera utilisée comme attribut aria-label sur le lien.", "The Map Element": "L'élément Carte", "The masonry effect creates a layout free of gaps even if grid items have different heights. ": "L'effet masonry crée une mise en page sans espace, même si les éléments de la grille ont des hauteurs différentes. ", "The Module Element": "L'élément Module", "The module maximum width.": "Largeur maximale du module.", "The Nav Element": "L'élément Navigation", "The Newsletter Element": "L'élément Newletter", "The Overlay Element": "L'élément Superposition", "The Overlay Slider Element": "L'élément Superposition de Diapositives (Overlay Slider)", "The page has been updated by %modifiedBy%. Discard your changes and reload?": "La page a été mise à jour par %modifiedBy%. Annuler vos changements et recharger la page ?", "The page your are currently editing has been updated by %modified_by%. Saving your changes will overwrite the previous changes. Do you want to save anyway or discard your changes and reload the page?": "La page que vous êtes en train de modifier a été mise à jour par %modified_by%. L'enregistrement de vos modifications écrasera les modifications précédentes. Voulez-vous quand même enregistrer ou annuler vos modifications et recharger la page ?", "The Pagination Element": "L'élément Pagination", "The Panel Element": "L'élément Panneau", "The RSFirewall plugin corrupts the builder content. Disable the feature <em>Convert email addresses from plain text to images</em> in the <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">RSFirewall configuration</a>.": "Le plugin RSFirewall corromps le contenu du générateur (builder). Désactiver la fonction <em>Convertir les adresses e-mail de texte en images</em> dans la <a href=\"index.php?option=com_rsfirewall&view=configuration\" target=\"_blank\">configuration de RSFirewall</a>.", "The SEBLOD plugin causes the builder to be unavailable. Disable the feature <em>Hide Edit Icon</em> in the <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">SEBLOD configuration</a>.": "Le plugin SEBLOD rend le builder (générateur) indisponible. Désactiver la fonction <em>Cacher les icônes d'édition</em> dans la <a href=\"index.php?option=com_config&view=component&component=com_cck\" target=\"_blank\">configuration de SEBLOD</a>.", "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.": "Le slideshow prend toujours la largeur complète, et la hauteur s'adaptera automatiquement sur la base du ratio défini. Alternativement, la hauteur peut s'adapter à la hauteur du viewport.<br><br>Note : Assurez-vous qu'aucune hauteur n'est paramétré dans les paramètres de la section lorsque vous utilisez l'une des options viewport.", "The width of the grid column that contains the module.": "Largeur de la colonne de grille qui contient le module.", "The YOOtheme Pro theme folder was renamed breaking essential functionality. Rename the theme folder back to <code>yootheme</code>.": "Le dossier de thèmes YOOtheme Pro a été renommé, cédant des fonctions essentielles. Renommez le dossier de thème en <code>yootheme</code>.", "Thirds": "Encarts", "Thirds 1-2": "Encarts 1-2", "Thirds 2-1": "Encarts 2-1", "This folder stores images that you download when using layouts from the YOOtheme Pro library. It's located inside the Joomla images folder.": "Ce dossier conserve les images que vous avez téléchargées lorsque vous avez utilisé un affichage de la bibliothèque Yootheme Pro. Il est situé dans le dossier images de Joomla.", "This is only used, if the thumbnail navigation is set.": "Ceci est uniquement utilisé si la navigation par vignette (images miniatures) est paramétrée.", "This layout includes a media file which needs to be downloaded to your website's media library. |||| This layout includes %smart_count% media files which need to be downloaded to your website's media library.": "Cette mise en page inclut un fichier multimédia qui doit être téléchargé dans la médiathèque de votre site Web. |||| Cette mise en page comprend %smart_count% de fichiers multimédias qui doivent être téléchargés sur la médiathèque de votre site Web.", "This option doesn't apply unless a URL has been added to the item.": "Cette option s'applique uniquement si une URL a été ajoutée à l'élément.", "This option doesn't apply unless a URL has been added to the item. Only the item content will be linked.": "Cette option s'applique uniquement si une URL a été ajoutée à l'élément. Seul le contenu de l'élément sera affecté en tant que lien.", "This option is only used if the thumbnail navigation is set.": "Cette option n'est utilisé que si la vignette de navigation est renseignée.", "Thumbnail Inline SVG": "Vignette du SVG inline", "Thumbnail SVG Color": "Couleur de la vignette du SVG", "Thumbnail Width/Height": "Largeur/Hauteur Vignette", "Thumbnail Wrap": "Empilage des vignettes", "Thumbnails": "Vignettes", "Thumbnav Inline SVG": "Vignette de navigation du SVG Inline", "Thumbnav SVG Color": "Couleur de la vignette de navigation SVG", "Thumbnav Wrap": "Empilage des vignettes", "Title": "Titre", "title": "titre", "Title Decoration": "Style du Titre", "Title Margin": "Marge du titre", "Title Parallax": "Parallax du Titre", "Title Style": "Style du titre", "Title styles differ in font-size but may also come with a predefined color, size and font.": "Les styles de titre varient en taille de police mais peuvent également être accompagnés d'une couleur, d'une taille et d'une police prédéfinies.", "Title Width": "Largeur du Titre", "To Top": "Vers le haut", "Toolbar": "Barre d'outils", "Top": "Haut", "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Les images alignées en Haut, en bas, à gauche ou à droite peuvent être attaché sur le bord du Card (encadrement). Si l'image est alignée à gauche ou à droite, cela s'étendra aussi pour couvrir l'espace dans son ensemble.", "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.": "Les images alignées en haut, à gauche ou à droite peuvent être fixées au bord de la carte. Si l'image est alignée vers la gauche ou la droite, elle s'étendra également pour couvrir l'ensemble de l'espace.", "Touch Icon": "Icône iOS (Touch icon)", "Transparent Header": "Haut de page transparent", "Upload": "Télécharger", "Upload a background image.": "Télécharger une image d'arrière-plan.", "Upload an optional background image that covers the page. It will be fixed while scrolling.": "Téléchargez une image d'arrière-plan facultative qui couvre la page. Il sera corrigé pendant le défilement.", "Upload Layout": "Importer Layout", "Use a numeric pagination or previous/next links to move between blog pages.": "Utiliser une pagination numérique ou des liens précédent/suivant pour se déplacer entre les pages du blog.", "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.": "Utiliser une option de hauteur minimale pour éviter que les images deviennent de plus en plus petite sur les petits appareils.", "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.": "Utiliser une option de hauteur minimale pour éviter que le curseur devienne de plus en plus petit sur les petits appareils.", "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.": "Utiliser une option de hauteur minimale pour éviter que le diaporama devienne de plus en plus petit sur les petits appareils.", "Use as breakpoint only": "Utiliser comme point d'arrêt uniquement", "Use double opt-in.": "Utiliser le double opt-in.", "Use excerpt": "Utiliser excerpt", "Use the background color in combination with blend modes, a transparent image or to fill the area if the image doesn't cover the whole page.": "Utiliser la couleur de fond en combinaison avec le mode de fusion, pour une image transparente ou pour remplir la zone si l'image ne couvre pas toute la page.", "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.": "Utilisez la couleur d'arrière-plan en combinaison avec les modes de mélange, une image transparente ou pour remplir la zone, si l'image ne couvre pas toute la section.", "Use the background color in combination with blend modes.": "Utiliser la couleur de l'arrière-plan en combinaison avec les modes blend.", "Users": "Utilisateurs", "Using the Builder Module": "Ouvrir le Module Builder", "Using the Builder Widget": "Ouvrir le Widget Builder", "Using Widget Areas": "Utiliser zone Widget", "Velocity": "Vélocité", "Vertical Alignment": "Alignement vertical", "Vertical navigation": "Navigation verticale", "Vertically align the elements in the column.": "Aligner les éléments verticalement dans la colonne.", "Vertically center grid items.": "Centre Verticalement les éléments de la grille.", "Vertically center table cells.": "Centre verticalement les cellules du tableau (table).", "Vertically center the image.": "Centrer l'image verticalement.", "Vertically center the navigation and content.": "Centrer verticalement la navigation et le contenu.", "Video": "Vidéo", "Videos": "Vidéos", "View Photos": "Voir Photos", "Viewport": "Viewport (hauteur de la fenêtre)", "Visibility": "Visibilité", "Visible on this page": "Visible sur cette page", "Visual": "Visuel", "Website": "Site web", "When using cover mode, you need to set the text color manually.": "Lorsque vous utilisez le mode de couverture, vous devez définir la couleur du texte manuellement.", "Whole": "Entier", "Widget Area": "Zone du Widget", "Width": "Largeur", "Width and height will be flipped accordingly, if the image is in portrait or landscape format.": "Largeur et hauteur seront inversées en correspondance, si l'image est en format portrait ou paysage.", "Width/Height": "Largeur/Hauteur", "X-Large (Large Screens)": "X-Large (Grands écrans)", "YOOtheme API Key": "Clé API de Yootheme", "YOOtheme Help": "Aide Yootheme (en anglais)", "YOOtheme Pro is fully operational and ready to take off.": "YOOtheme Pro est pleinement opérationnel et prêt à démarrer.", "YOOtheme Pro is not operational. All critical issues need to be fixed.": "YOOtheme Pro n'est pas opérationnel. Tous les problèmes critiques doivent être résolus.", "YOOtheme Pro is operational, but there are issues which need to be fixed to unlock features and improve performance.": "YOOtheme Pro est opérationnel, mais il reste des problèmes à résoudre pour déverrouiller les fonctionnalités et améliorer les performances.", "Z Index": "Z index" }theme/languages/hu_HU.json000064400000026272151666572150011546 0ustar00{ "0": "0", "1": "1", "2": "2", "3": "3", "4": "4", "5": "5", "6": "6", "-": "-", "- Select -": "- Válassz -", "- Select Module -": "- Válassz modult -", "- Select Position -": "- Válassz poziciót -", "- Select Widget -": "-Válasz Widgetet-", "\"%name%\" already exists in the library, it will be overwritten when saving.": "\"%name%\" már létezik a könyvtárban, felülírja a mentés során.", "(ID %id%)": "Azonosító %id%", "%label% Position": "%label% pozíció", "About": "Rólunk", "Accordion": "Harmonika", "Active": "Aktív", "Active item": "Aktív elem", "Add": "Hozzáadás", "Add a colon": "Kettőspont hozzáadása", "Add a parallax effect or fix the background with regard to the viewport while scrolling.": "Parallax effekt hozzáadása vagy a háttér beállítása a nézetablakhoz görgetés közben.", "Add a parallax effect.": "Parallax effekt hozzáadása.", "Add custom JavaScript to your site. The <code><script></code> tag is not needed.": "Egyéni JavaScript hozzáadása a webhelyhez <script> tag nélkül.", "Add Element": "Elem hozzáadása", "Add extra margin to the button.": "Adjon hozzá extra margót a gombhoz.", "Add Folder": "Alkönyvtár hozzáadása", "Add Item": "Tétel hozzáadása", "Add Media": "Kép/Videó hozzáadása", "Add Menu Item": "Menüpont hozzáadása", "Add Module": "Modul hozzáadása", "Add Row": "Sor hozzáadása", "Add Section": "Szakasz hozzáadása", "Add to Cart": "Kosárba helyezés", "Advanced": "Haladó", "After": "Utána", "After Submit": "Küldés után", "Alert": "Figyelem", "Align image without padding": "Kép igazítása eltartás (padding) nélkül", "Align the filter controls.": "A szűrő vezérlők igazítása.", "Align the image to the left or right.": "Kép igazítása balra vagy jobbra.", "Align the image to the top, left, right or place it between the title and the content.": "Kép igazítása fel, balra, jobbra vagy a cím és a cikk közé.", "Align the title and meta text.": "A cím és meta szöveg igazítása.", "Alignment": "Igazítás", "Alignment Breakpoint": "Igazítás töréspontja", "All colors": "Összes szín", "All Items": "Minden elem", "All layouts": "Minden elrendezés", "All topics": "Minden téma", "All types": "Minden típus", "All websites": "Minden honlap", "Allow multiple open items": "Lehetővé teszi több példány nyitvatartását", "Animate background only": "Csak a háttér animációja", "Animation": "Animáció", "API Key": "API kulcs", "Author": "Szerző", "Author Link": "Szerző linkje", "Auto-calculated": "Automatikus számítás", "Autoplay": "Automatikus lejátszás", "Back": "Vissza", "Background Color": "Háttérszín", "Behavior": "Viselkedés", "Blend Mode": "Blend mód", "Blog": "Blog", "Blur": "Homályosítás (Blur)", "Border": "Szegély", "Bottom": "Alul", "Breadcrumbs": "Útvonal", "Breakpoint": "Töréspont", "Builder": "Szerkesztő", "Button": "Gomb", "Button Size": "Gomb mérete", "Buttons": "Gombok", "Cache": "Gyorsítótár (Cache)", "Cancel": "Mégsem", "Center": "Középre", "Center the module": "Modul középre", "Changelog": "Változások", "Choose a divider style.": "Válasszon elválasztó (divider) stílust.", "Choose a map type.": "Válasszon térkép típust.", "Choose Font": "Válasszon betűtípust", "Choose the icon position.": "Válaszzon ikon helyet", "Class": "Osztály (Class)", "Classes": "Osztályok", "Clear Cache": "Gyorsítótár törlése", "Close": "Zárás", "Code": "Kód", "Color": "Szín", "Column": "Oszlop", "Columns": "Oszlopok", "Columns Breakpoint": "Oszlopok töréspontja", "Components": "Komponensek", "Content": "Tartalom", "content": "tartalom", "Content Alignment": "Tartalom igazítása", "Content Length": "Tartalom hossza", "Content Width": "Tartalom szélessége", "Controls": "Ellenőrzések (Controls)", "Copy": "Másolás", "Countdown": "Visszaszámlálás", "CSS": "CSS", "Custom Code": "Egyedi kód", "Date": "Dátum", "Decoration": "Dekoráció", "Define a unique identifier for the element.": "Határozza meg az elem egyedi azonosítóját.", "Define one or more class names for the element. Separate multiple classes with spaces.": "Határozza meg az elem egy vagy több osztályának a nevét. Több osztály estén használjon szóközt.", "Define the width of the title cell.": "Határozza meg a cím cellának a szélességét.", "Delete": "Törlés", "Description List": "Leírás lista", "Desktop": "Asztal (desktop)", "Disable row": "Sor inaktív állapotba tétele", "Disable section": "Szekció inaktív állapotba tétele", "Display": "Megjelenítés", "Display a divider between sidebar and content": "Elválasztó megjelenítése a tartalom és az oldalsáv között", "Display icons as buttons": "Ikonok megjelenítése gombként", "Display on the right": "Megjelenítés jobbra", "Display the breadcrumb navigation": "Útvonal navigáció megjelenítése", "Display the first letter of the paragraph as a large initial.": "A bekezdés első betűjének megjelenítése iniciáléként.", "Divider": "Elválasztó", "Do you really want to replace the current layout?": "Tényleg ki szeretné cserélni az aktuális elrendezést?", "Do you really want to replace the current style?": "Tényleg ki szeretné cserélni az aktuális stílust?", "Download": "Letöltés", "Dropdown": "Legördülő", "Edit": "Javítás", "Edit %title% %index%": "Javítás %title% %index%", "Edit Menu Item": "Menüpont javítása", "Edit Module": "Modul javítása", "Edit Settings": "Beállítások javítása", "Enable autoplay": "Automatikus lejátszás engedélyezése", "Enable map dragging": "Térkép mozgatás (dragging) engedélyezése", "Enable map zooming": "Térkép nagyítás engedélyezése", "Enter an optional footer text.": "Adjon meg egy tetszőleges lábléc szöveget.", "Enter the text for the link.": "Írja be a link szövegét.", "Error: %error%": "Hiba: %error%", "Favicon": "Favicon", "Folder Name": "Alkönytár neve", "Footer": "Lábléc", "Full width button": "Teljes szélességű gomb", "Gallery": "Galéria", "Gamma": "Gamma", "General": "Általános", "Google Analytics": "Google Analítika", "Google Fonts": "Google betűtípusok", "Google Maps": "Google Térkép", "Gradient": "Színátmenet", "Grid": "Rács (grid)", "Grid Width": "Rács szélessége", "Header": "Fejléc", "Headline": "Főcím", "Height": "Magasság", "Hide marker": "Jelölő elrejtése", "Home": "Főoldal", "Horizontal Center": "Vízszintesen középre", "Horizontal Left": "Vízszintesen balra", "Horizontal Right": "Vízszintesen jobbra", "Html": "Html", "Hue": "Színfokozat (hue)", "Icon": "Ikon", "Icon Color": "Ikon színe", "ID": "ID", "Image": "Kép", "Image Alt": "Kép alternatíva", "Image Attachment": "Kép melléklet", "Image Box Shadow": "Kép doboz árnyéka", "Image Height": "Kép magasság", "Image Position": "Kép pozíciója", "Image Size": "Kép mérete", "Image Width": "Kép szélessége", "Image/Video": "Kép/Videó", "Inverse Logo (Optional)": "Inverz logo (választható)", "Item": "Elem", "Items": "Elemek", "Large (Desktop)": "Nagy asztal (Desktop)", "Large Screens": "Nagy képernyő", "Larger padding": "Nagy eltartás (padding)", "Layout": "Elrendezés (layout)", "Left": "Bal", "Library": "Könyvtár (library)", "Link": "Link", "Link Style": "Link stílusa", "Link Text": "Link szövege", "Link Title": "Link címe", "List": "Lista", "List Style": "Lista stílusa", "Location": "Helyszín", "Logo Image": "Logo képe", "Logo Text": "Logo szöveg", "Loop video": "videó ismétlése", "Map": "Térkép", "Margin": "Margó", "Marker": "Jelölő (marker)", "Match content height": "Egyenlő tartalom magasság", "Match Height": "Egyforma magasság", "Match height": "Egyenlő magasság", "Max Width": "Maximális szélesség", "Max Width (Alignment)": "Maximális szélesség (igazítás)", "Medium (Tablet Landscape)": "Közepes (Tablet fekvő nézet)", "Menu Style": "Menü stílus", "Meta": "Meta", "Mobile": "Mobiltelefon", "Mobile Logo (Optional)": "Mobiltelefon logo (nem kötelező)", "Mode": "Mód", "Name": "Név", "Navigation": "Navigáció", "New Menu Item": "Új menüpont", "New Module": "Új modul", "No files found.": "Nem találhatók fájlok.", "Open in a new window": "Megnyitás új ablakban.", "Open the link in a new window": "Link megnyitása új ablakban", "Order": "Rendezés", "Padding": "Eltartás", "Pagination": "Számozás", "Panel": "Panel", "Panels": "Panelek", "Phone Landscape": "Telefon fekvőnézet", "Phone Portrait": "Telefon állónézet", "Position": "Pozíció", "Primary navigation": "Elsődleges navigáció", "Quotation": "Idézet", "Row": "Sor", "Saturation": "Telítettség", "Save": "Mentés", "Save %type%": "Mentés %type%", "Save Layout": "Elrendezés mentése", "Script": "Script", "Search": "Keresés", "Search Style": "Keresés stílusa", "Section": "Szakasz", "Select": "Válasszon", "Select a grid layout": "Rácsos elrendezés kiválasztása", "Select header layout": "Fejléc elrendezés kiválasztása", "Select Image": "Kép kiválasztása", "Select the link style.": "Link stílusának kiválasztása.", "Select the list style.": "Lista stílusának kiválasztása.", "Select the search style.": "Keresés stílusának kiválasztása.", "Set the button size.": "Gomb méretének beállítása.", "Set the button style.": "Gomb stílusának beállítása.", "Set the icon color.": "Ikon színének beállítása.", "Set the link style.": "Link stílusának beállítása.", "Set the vertical padding.": "Függőleges eltartás beállítása.", "Set the video dimensions.": "Videó méreteinek beállítása.", "Settings": "Beállítások", "Size": "Méret", "Small (Phone Landscape)": "Kicsi (telefon fekvőnézet)", "Social": "Közösség", "Style": "Stílus", "Subtitle": "Alcím", "Table": "Táblázat", "Text": "Szöveg", "Text Color": "Szöveg színe", "Text Style": "Szöveg stílusa", "Title": "Cím", "title": "cím", "Title Style": "Cím stílusa", "Type": "Típus", "Upload": "Feltöltés", "Version %version%": "Verzió %version%", "Vertical Alignment": "Függőleges igazítás", "Video": "Videó", "Visibility": "Láthatóság", "What's New": "Újdonság", "White": "Fehér", "Width": "Szélesség", "Width 100%": "100% szélesség", "Width/Height": "Szélesség/magasság", "YOOtheme API Key": "YOOtheme API kulcs", "Zoom": "Nagyítás" }theme/src/ViewHelper.php000064400000044644151666572150011252 0ustar00<?php namespace YOOtheme\Theme; use YOOtheme\Config; use YOOtheme\ImageProvider; use YOOtheme\Url; use YOOtheme\View; use YOOtheme\View\HtmlElement; class ViewHelper implements ViewHelperInterface { // https://developer.mozilla.org/en-US/docs/Web/Media/Formats/Image_types public const REGEX_IMAGE = '#\.(avif|gif|a?png|jpe?g|svg|webp)($|\#.*)#i'; public const REGEX_VIDEO = '#\.(mp4|m4v|ogv|webm)($|\#.*)#i'; public const REGEX_VIMEO = '#(?:player\.)?vimeo\.com(?:/video)?/(\d+)#i'; public const REGEX_YOUTUBE = '#(?:youtube(-nocookie)?\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?|shorts)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})#i'; public const REGEX_YOUTUBE_SHORTS = '#youtube\.com/shorts/#i'; public const REGEX_PHOTOS = '#images.unsplash.com/|images.pexels.com/photos/#i'; /** * @var ImageProvider */ protected $image; /** * @var Config */ protected $config; /** * Constructor. * * @param Config $config * @param ImageProvider $image */ public function __construct(Config $config, ImageProvider $image) { $this->image = $image; $this->config = $config; } /** * Register helper. * * @param View $view */ public function register($view) { // Loaders $view->addLoader(function ($name, $parameters, $next) { $content = $next($name, $parameters); // Apply to root template view only if (empty($parameters['_root'])) { return $content; } return $this->image->replace($content); }); // Functions $view->addFunction('social', [$this, 'social']); $view->addFunction('uid', [$this, 'uid']); $view->addFunction('iframeVideo', [$this, 'iframeVideo']); $view->addFunction('isYouTubeShorts', [$this, 'isYouTubeShorts']); $view->addFunction('isVideo', [$this, 'isVideo']); $view->addFunction('isImage', [$this, 'isImage']); $view->addFunction('image', [$this, 'image']); $view->addFunction('bgImage', [$this, 'bgImage']); $view->addFunction('parallaxOptions', [$this, 'parallaxOptions']); $view->addFunction('striptags', [$this, 'striptags']); $view->addFunction('margin', [$this, 'margin']); // Components $view['html']->addComponent('image', [$this, 'comImage']); } /** * @inheritdoc */ public function social($link) { $link = strval($link); if (str_starts_with($link, 'mailto:')) { return 'mail'; } if (str_starts_with($link, 'tel:')) { return 'receiver'; } if (preg_match('#(google|goo)\.(.+?)/maps(?>/?.+)?#i', $link)) { return 'location'; } $link = parse_url($link, PHP_URL_HOST); $link = explode( '.', str_replace( ['wa.me', 't.me', 'bsky.app'], ['whatsapp', 'telegram', 'bluesky'], $link ?? '', ), ); $icons = $this->config->get('theme.social_icons', []); return array_find($icons, fn($icon) => in_array($icon, $link)) ?: 'social'; } /** * @inheritdoc */ public function iframeVideo($link, $params = [], $defaults = true) { $link = strval($link); $query = parse_url($link, PHP_URL_QUERY); if ($query) { parse_str($query, $_params); $params = array_merge($_params, $params); } if (preg_match(static::REGEX_VIMEO, $link, $matches)) { if (empty($params['controls'])) { $params['keyboard'] = 0; } return Url::to( "https://player.vimeo.com/video/{$matches[1]}", $defaults ? array_merge( [ 'loop' => 1, 'autoplay' => 1, 'autopause' => 0, 'controls' => 0, 'title' => 0, 'byline' => 0, 'setVolume' => 0, ], $params, ) : $params, ); } if (preg_match(static::REGEX_YOUTUBE, $link, $matches)) { if (!empty($params['loop'])) { $params['playlist'] = $matches[2]; } if (empty($params['controls'])) { $params['disablekb'] = 1; } return Url::to( "https://www.youtube{$matches[1]}.com/embed/{$matches[2]}", $defaults ? array_merge( [ 'rel' => 0, 'loop' => 1, 'playlist' => $matches[2], 'autoplay' => 1, 'controls' => 0, 'showinfo' => 0, 'iv_load_policy' => 3, 'modestbranding' => 1, 'wmode' => 'transparent', 'playsinline' => 1, ], $params, ) : $params, ); } return false; } /** * @inheritdoc */ public function isYouTubeShorts($link) { return (bool) preg_match(static::REGEX_YOUTUBE_SHORTS, $link ?? ''); } /** * @inheritdoc */ public function uid() { static $uid = 0; return $uid++; } /** * @inheritdoc */ public function isVideo($link) { return $link && preg_match(static::REGEX_VIDEO, $link, $matches) ? $matches[1] : false; } /** * @inheritdoc */ public function image($url, array $attrs = []) { $url = (array) $url; $path = array_shift($url); $isAbsolute = $this->isAbsolute($path); $type = $this->isImage($path); if (!empty($url['thumbnail']) && ($isAbsolute || $type === 'gif')) { if (is_array($url['thumbnail'])) { [$width, $height] = $url['thumbnail']; $attrs['width'] = is_numeric($width) ? $width : null; $attrs['height'] = is_numeric($height) ? $height : null; } if ($attrs['width'] && $attrs['height']) { if (preg_match(static::REGEX_PHOTOS, $path)) { $path = self::buildPhotosUrl($path, $attrs['width'], $attrs['height']); } else { $this->addAttr( $attrs, 'style', "aspect-ratio: {$attrs['width']} / {$attrs['height']}", ); $this->addAttr($attrs, 'class', 'uk-object-cover'); } } } $attrs['src'] = !$isAbsolute && !in_array($type, ['gif', 'svg']) && !empty($url) ? parse_url($path, PHP_URL_PATH) . '#' . http_build_query( array_map( fn($value) => is_array($value) ? implode(',', $value) : $value, $url, ), '', '&', ) : $path; if (empty($attrs['alt'])) { $attrs['alt'] = true; } if ($type === 'svg' && (empty($attrs['width']) || empty($attrs['height']))) { [$attrs['width'], $attrs['height']] = SvgHelper::getDimensions($path, $attrs); } // Deprecated YOOtheme Pro < v2.8.0 if (!empty($attrs['uk-img'])) { unset($attrs['uk-img']); } $attrs['loading'] = $attrs['loading'] ?? 'lazy' ?: 'eager'; return HtmlElement::tag('img', $attrs); } /** * @inheritdoc */ public function bgImage($url, array $params = []) { $attrs = []; $isResized = $params['width'] || $params['height']; $type = $this->isImage($url); $focalPoint = $this->parseFocalPoint($params['focal_point'] ?? ''); if (preg_match(static::REGEX_PHOTOS, $url)) { $url = $this->buildPhotosUrl($url, $params['width'], $params['height'], $focalPoint); } elseif ($type == 'svg' || $this->isAbsolute($url)) { if ($isResized && !$params['size']) { $this->addAttr( $attrs, 'style', sprintf( 'background-size: %s %s;', $params['width'] ? "{$params['width']}px" : 'auto', $params['height'] ? "{$params['height']}px" : 'auto', ), ); if ($focalPoint) { $this->addAttr( $attrs, 'style', sprintf('background-position: %s;', implode(' ', $focalPoint)), ); } } } elseif ($type != 'gif') { $url = parse_url($url, PHP_URL_PATH) . '#srcset=1'; $url .= '&covers=' . ((int) ($params['size'] === 'cover')); if ($isResized) { $url .= '&thumbnail=' . join(',', [$params['width'], $params['height'], '', ...$focalPoint]); } } if ($image = $this->image->create($url, false)) { $minWidth = 0; if (empty($params['size'])) { $img = $image->apply($image->getAttribute('params')); $minWidth = $img->getWidth(); $this->addAttr( $attrs, 'style', sprintf('background-size: %spx %spx;', $img->getWidth(), $img->getHeight()), ); } $sources = $this->image->getSources($image, $minWidth); $srcsetAttrs = $this->image->getSrcsetAttrs($image, 'data-', $minWidth); if ($sources) { $srcsetAttrs = array_slice($srcsetAttrs, 0, 1); } $attrs = array_merge($attrs, $srcsetAttrs, [ 'data-sources' => json_encode($sources), ]); } else { $attrs['data-src'][] = Url::to($url); } // use eager loading? if (isset($params['loading'])) { $attrs['loading'] = $params['loading']; } $attrs['uk-img'] = true; $attrs['class'] = [ HtmlElement::expr( [ 'uk-background-norepeat', 'uk-background-{size}', 'uk-background-{position}', 'uk-background-image@{visibility}', 'uk-background-blend-{blend_mode}', 'uk-background-fixed{@effect: fixed}', ], $params, ), ]; $attrs['style'][] = $params['background'] ? "background-color: {$params['background']};" : ''; if ( ($params['effect'] ?? '') == 'parallax' && ($options = $this->parallaxOptions($params, '', ['bgx', 'bgy'])) ) { $attrs['uk-parallax'] = $options; } return $attrs; } /** * @param HtmlElement $element * @param array $params * * @return void */ public function comImage($element, array $params = []) { $defaults = ['src' => '', 'width' => '', 'height' => '']; $attrs = array_merge($defaults, $element->attrs); $type = $this->isImage($attrs['src']); $isAbsolute = $this->isAbsolute($attrs['src']); if (empty($attrs['alt'])) { $attrs['alt'] = true; } if ($type !== 'svg') { if (!empty($attrs['thumbnail'])) { if (is_array($attrs['thumbnail'])) { $thumbnail = $attrs['thumbnail']; } else { $thumbnail = [$attrs['width'], $attrs['height']]; } $focalPoint = $this->parseFocalPoint($attrs['focal_point'] ?? ''); if ($isAbsolute || $type === 'gif') { [$width, $height] = $thumbnail; if ($width && $height) { if (preg_match(static::REGEX_PHOTOS, $attrs['src'])) { $attrs['src'] = $this->buildPhotosUrl( $attrs['src'], $width, $height, $focalPoint, ); } else { $this->addAttr($attrs, 'style', "aspect-ratio: {$width} / {$height};"); $this->addAttr($attrs, 'class', 'uk-object-cover'); if ($focalPoint) { $this->addAttr( $attrs, 'style', sprintf('object-position: %s;', implode(' ', $focalPoint)), ); } } } elseif ($type === 'gif') { if ($imageObj = $this->image->create($attrs['src'], false)) { if ($width || $height) { $imageObj = $imageObj->thumbnail($width, $height); } $attrs['width'] = $imageObj->getWidth(); $attrs['height'] = $imageObj->getHeight(); } } } else { $query['thumbnail'] = [...array_pad($thumbnail, 3, ''), ...$focalPoint]; $query['srcset'] = true; $attrs['width'] = $attrs['height'] = null; } } if (!empty($attrs['uk-cover'])) { $query['covers'] = true; } if ($type && $type !== 'gif' && !$isAbsolute && !empty($query)) { $attrs['src'] = parse_url($attrs['src'], PHP_URL_PATH) . '#' . http_build_query( array_map( fn($value) => is_array($value) ? join(',', $value) : $value, $query, ), '', '&', ); } unset($attrs['uk-svg']); } elseif (empty($attrs['width']) || empty($attrs['height'])) { [$attrs['width'], $attrs['height']] = SvgHelper::getDimensions($attrs['src'], $attrs); } // use lazy loading? $attrs['loading'] = $attrs['loading'] ?? 'lazy' ?: 'eager'; unset($attrs['thumbnail']); unset($attrs['focal_point']); // update element $element->name = 'img'; $element->attrs = $attrs; } /** * @inheritdoc */ public function isImage($link) { return $link && preg_match(static::REGEX_IMAGE, $link, $matches) ? $matches[1] : false; } /** * @inheritdoc */ public function isAbsolute($url): bool { return $url && preg_match('/^(\/|#|[a-z0-9-.]+:)/', $url); } /** * @inheritdoc */ public function parallaxOptions( $params, $prefix = '', $props = ['x', 'y', 'scale', 'rotate', 'opacity', 'blur', 'background'] ) { $prefix = "{$prefix}parallax_"; $filter = fn($value) => implode( ',', array_filter(explode(',', $value), fn($value) => '' !== trim($value)), ); $options = []; foreach ($props as $prop) { $value = $filter($params["{$prefix}{$prop}"] ?? ''); if ('' !== $value) { if ($prop === 'background') { $prop .= '-color'; } $options[] = "{$prop}: {$value}"; } } if (!$options) { return ''; } $options[] = sprintf( 'easing: %s', is_numeric($params["{$prefix}easing"] ?? '') ? $params["{$prefix}easing"] : 0, ); $options[] = !empty($params["{$prefix}breakpoint"]) ? "media: @{$params["{$prefix}breakpoint"]}" : ''; foreach (['target', 'start', 'end'] as $prop) { if (!empty($params[$prefix . $prop])) { $options[] = "{$prop}: {$params[$prefix . $prop]}"; } } return implode('; ', array_filter($options)); } /** * @inheritdoc */ public function striptags( $str, $allowable_tags = '<div><h1><h2><h3><h4><h5><h6><p><ul><ol><li><img><svg><br><hr><span><strong><em><i><b><s><mark><sup><del>' ): string { return strip_tags(strval($str), $allowable_tags); } /** * @inheritdoc */ public function margin($margin): ?string { switch ($margin) { case '': return null; case 'default': return 'uk-margin-top'; default: return "uk-margin-{$margin}-top"; } } protected function addAttr(&$attrs, $name, $value): void { if (empty($attrs[$name])) { $attrs[$name] = []; } elseif (is_string($attrs[$name])) { $attrs[$name] = [$attrs[$name]]; } $attrs[$name][] = $value; } protected function buildPhotosUrl($url, $width, $height, $focalPoint = []): string { $url = parse_url($url); return "{$url['scheme']}://{$url['host']}{$url['path']}?" . http_build_query( [ 'fit' => 'crop', 'w' => $width, 'h' => $height, 'crop' => implode( ',', array_filter($focalPoint, fn($point) => $point && $point !== 'center'), ) ?: null, ], '', '&', ); } protected function parseFocalPoint(string $focalPoint): array { return array_reverse(array_filter(explode('-', $focalPoint))); } } theme/src/SvgHelper.php000064400000004726151666572150011074 0ustar00<?php namespace YOOtheme\Theme; use YOOtheme\Event; use YOOtheme\Path; class SvgHelper { public static function getDimensions($file, $attrs) { return static::ratio(static::readDimensions(static::getSvgTag($file)), $attrs); } protected static function getSvgTag($file) { $file = Path::resolve('~', Event::emit('svg.resolve|filter', $file)); $result = ''; if ($file && is_readable($file) && ($resource = @fopen($file, 'r'))) { while (($line = fgets($resource, 4096)) !== false) { if ($result) { $result .= $line; } elseif (str_contains($line, '<svg')) { $result = $line; } if ($result && str_contains($line, '>')) { $result = substr($result, 0, strpos($line, '>') - (strlen($line) - 1)); break; } } fclose($resource); } return $result; } protected static function readDimensions($tag) { if ( !preg_match_all( '/(?<prop>height|width|viewBox)=([\'\"])\s*(?<value>[\d\s.e]*?)(?:px)?\s*\2/i', $tag, $matches, ) ) { return []; } $dim = ['width' => null, 'height' => null]; foreach ($matches['prop'] as $i => $prop) { $dim[strtolower($prop)] = $matches['value'][$i]; } if ((empty($dim['width']) || empty($dim['height'])) && !empty($dim['viewbox'])) { [$dim['width'], $dim['height']] = static::ratio( array_slice(explode(' ', $dim['viewbox']), 2), $dim, ); } return [ isset($dim['width']) ? round($dim['width']) : null, isset($dim['height']) ? round($dim['height']) : null, ]; } protected static function ratio($props, $attrs) { $dim = array_pad($props, 2, null); $props = ['width', 'height']; foreach ($props as $i => $prop) { $aprop = $props[1 - $i]; if (empty((int) $attrs[$prop]) && !empty((int) $attrs[$aprop]) && !empty($dim[$i])) { $$prop = (string) round($dim[$i] * ((int) $attrs[$aprop] / $dim[1 - $i])); } else { $$prop = empty((int) $attrs[$prop]) ? $dim[$i] : $attrs[$prop]; } } return [$width, $height]; // @phpstan-ignore-line } } theme/src/ImageLoader.php000064400000004210151666572150011332 0ustar00<?php namespace YOOtheme\Theme; use YOOtheme\Config; use YOOtheme\Image; class ImageLoader { /** * @var Config */ protected $config; /** * @var array */ protected $convert = []; /** * Constructor. */ public function __construct(Config $config) { $this->config = $config; // supports image avif? if ($config('~theme.avif') && function_exists('imageavif') && PHP_VERSION_ID >= 80100) { $png = intval($config('~theme.image_quality_png_avif')); $jpg = intval($config('~theme.image_quality_jpg_avif')); $this->convert['png']['image/avif'] = 'avif,' . ($png ?: 85); $this->convert['jpeg']['image/avif'] = 'avif,' . ($jpg ?: 75); } // supports image webp? if ($config('~theme.webp') && function_exists('imagewebp')) { $png = intval($config('~theme.image_quality_png_webp')); $jpg = intval($config('~theme.image_quality_jpg_webp')); $this->convert['png']['image/webp'] = 'webp,' . ($png ?: 100); $this->convert['jpeg']['image/webp'] = 'webp,' . ($jpg ?: 85); } } public function __invoke(Image $image) { $params = $image->getAttribute('params', []); // convert type if (isset($this->convert[$image->type])) { $image->setAttribute('types', $this->convert[$image->type]); } // image quality if ($quality = intval($this->config->get('~theme.image_quality_jpg'))) { $image->quality = $quality; } // image covers if (!empty($params['covers']) && !isset($params['sizes'])) { $img = $image->apply($params); if ($img->width && $img->height) { $ratio = round(($img->width / $img->height) * 100); $params['sizes'] = "(max-aspect-ratio: {$img->width}/{$img->height}) {$ratio}vh"; } } // set default srcset if (($params['srcset'] ?? '') === '1') { $params['srcset'] = '768,1024,1366,1600,1920,200%'; } $image->setAttribute('params', $params); } } theme/src/ViewHelperInterface.php000064400000003567151666572150013072 0ustar00<?php namespace YOOtheme\Theme; interface ViewHelperInterface { /** * @param string $link * * @return string */ public function social($link); /** * @param string $link * @param array $params * @param bool $defaults * * @return false|string */ public function iframeVideo($link, $params = [], $defaults = true); /** * @param string $link * * @return bool */ public function isYouTubeShorts($link); /** * @return int */ public function uid(); /** * @param string $link * * @return string|false */ public function isVideo($link); /** * @param string|array $url * @param array $attrs * * @return string */ public function image($url, array $attrs = []); /** * @param string $url * @param array $params * * @return array */ public function bgImage($url, array $params = []); /** * @param string $link * * @return string|false */ public function isImage($link); /** * @param string $url * * @return bool */ public function isAbsolute($url): bool; /** * @param array $params * @param string $prefix * @param string[] $props * * @return mixed */ public function parallaxOptions( $params, $prefix = '', $props = ['x', 'y', 'scale', 'rotate', 'opacity', 'blur', 'background'] ); /** * @param string $str * @param string $allowable_tags * * @return string */ public function striptags( $str, $allowable_tags = '<div><h1><h2><h3><h4><h5><h6><p><ul><ol><li><img><svg><br><hr><span><strong><em><i><b><s><mark><sup><del>' ): string; /** * @param string $margin */ public function margin($margin): ?string; } theme/src/SystemCheck.php000064400000011214151666572150011405 0ustar00<?php namespace YOOtheme\Theme; use YOOtheme\Path; use function YOOtheme\trans; abstract class SystemCheck { /** * Gets the requirements. * * @return array */ public function getRequirements() { $res = []; if (!extension_loaded('JSON')) { $res[] = trans( '<code>json_encode()</code> must be available. Install and enable the <a href="https://php.net/manual/en/book.json.php" target="_blank">JSON</a> extension.', ); } if ( !extension_loaded('GD') || !function_exists('imagegif') || !function_exists('imagejpeg') || !function_exists('imagepng') ) { $res[] = trans( 'No image library is available to process images. Install and enable the <a href="https://php.net/manual/en/book.image.php" target="_blank">GD</a> extension.', ); } if (!extension_loaded('mbstring')) { $res[] = trans( 'Multibyte encoded strings such as UTF-8 can\'t be processed. Install and enable the <a href="https://php.net/manual/en/book.mbstring.php" target="_blank">Multibyte String extension</a>.', ); } return $res; } /** * Gets the recommendations. * * @return array */ public function getRecommendations() { $res = []; if (!$this->hasApiKey()) { $res[] = trans( 'The YOOtheme API key, which enables <span class="uk-text-nowrap">1-click</span> updates and access to the layout library, is missing. Create an API Key in your <a href="https://yootheme.com/shop/my-account/websites/" target="_blank">Account settings</a>.', ); } if (version_compare('8.1', PHP_VERSION, '>')) { $res[] = trans( 'The current PHP version %version% is outdated. Upgrade the installation, preferably to the <a href="https://php.net" target="_blank">latest PHP version</a>.', ['%version%' => PHP_VERSION], ); } if (extension_loaded('GD') && !function_exists('imagewebp')) { $res[] = trans( 'WebP image format isn\'t supported. Enable WebP support in the <a href="https://php.net/manual/en/image.installation.php" target="_blank">GD extension</a>.', ); } if (!is_writable(Path::get('~theme/cache'))) { $res[] = trans( 'Images can\'t be cached. <a href="https://yootheme.com/support/yootheme-pro/joomla/file-permission-issues" target="_blank">Change the permissions</a> of the <code>cache</code> folder in the <code>yootheme</code> theme directory, so that the web server can write into it.', ); } $post_max_size = $this->parseSize(ini_get('post_max_size')); if ($post_max_size < $this->parseSize('8M')) { $res[] = trans( 'A higher upload limit is recommended. Set the <code>post_max_size</code> to 8M in the <a href="https://php.net/manual/en/ini.core.php" target="_blank">PHP configuration</a>.', ); } $upload_max_filesize = $this->parseSize(ini_get('upload_max_filesize')); if ($upload_max_filesize < $this->parseSize('8M')) { $res[] = trans( 'A higher upload limit is recommended. Set the <code>upload_max_filesize</code> to 8M in the <a href="https://php.net/manual/en/ini.core.php" target="_blank">PHP configuration</a>.', ); } $memory_limit = $this->parseSize(ini_get('memory_limit')); if ($memory_limit > 0 && $memory_limit < $this->parseSize('128M')) { $res[] = trans( 'A higher memory limit is recommended. Set the <code>memory_limit</code> to 128M in the <a href="https://php.net/manual/en/ini.core.php" target="_blank">PHP configuration</a>.', ); } if ( function_exists('apache_get_modules') && in_array('mod_pagespeed', apache_get_modules()) ) { $res[] = trans( 'The Apache module <code>mod_pagespeed</code> can lead to display issues in the map element with OpenStreetMap.', ); } return $res; } /** * @param string $size * @return float */ protected function parseSize($size) { $unit = preg_replace('/[^bkmgtpezy]/i', '', $size); $size = (float) preg_replace('/[^0-9.\-]/', '', $size); if ($unit) { return round($size * pow(1024, stripos('bkmgtpezy', $unit[0]))); } return round($size); } abstract protected function hasApiKey(); } theme/src/Updater.php000064400000003362151666572150010574 0ustar00<?php namespace YOOtheme\Theme; class Updater { /** * @var string */ public $version; /** * @var string[] */ public $updates = []; /** * Constructor. * * @param string $version */ public function __construct($version) { $this->version = $version; } /** * Add update files. * * @param string $file */ public function add($file) { $this->updates[] = $file; } /** * Updates a config. * * @param array $config * @param mixed $params * * @return array */ public function update($config, $params) { $version = empty($config['version']) ? '1.0.0' : $config['version']; // check node version if (version_compare($version, $this->version, '>=')) { return $config; } $config['version'] = $this->version; // apply update callbacks foreach ($this->resolveUpdates($version) as $updates) { foreach ($updates as $update) { $config = $update($config, $params); } } return $config; } /** * Resolves updates for the current version. * * @param string $version * * @return array */ protected function resolveUpdates($version) { $resolved = []; foreach ($this->updates as $file) { $updates = require $file; foreach ($updates as $ver => $update) { if (version_compare($ver, $version, '>') && is_callable($update)) { $resolved[$ver][] = $update; } } } uksort($resolved, 'version_compare'); return $resolved; } } theme/src/Listener/UpdateBuilderLayouts.php000064400000001557151666572150015073 0ustar00<?php namespace YOOtheme\Theme\Listener; use YOOtheme\Builder; use YOOtheme\Config; class UpdateBuilderLayouts { public Config $config; public Builder $builder; public function __construct(Config $config, Builder $builder) { $this->config = $config; $this->builder = $builder; } public function handle(): void { $this->config->update( '~theme.footer.content', fn($footer) => $footer ? $this->builder->load(json_encode($footer)) : null, ); $this->config->update('~theme.menu.items', function ($items) { foreach ($items ?: [] as $id => $item) { if (!empty($item['content'])) { $items[$id]['content'] = $this->builder->load(json_encode($item['content'])); } } return $items; }); } } theme/src/Listener/SaveBuilderLayouts.php000064400000001722151666572150014541 0ustar00<?php namespace YOOtheme\Theme\Listener; use YOOtheme\Arr; use YOOtheme\Builder; class SaveBuilderLayouts { public Builder $builder; public function __construct(Builder $builder) { $this->builder = $builder; } public function handle($config): array { Arr::update( $config, 'footer.config', fn($footer) => $footer ? $this->builder->withParams(['context' => 'save'])->load(json_encode($footer)) : null, ); Arr::update($config, 'menu.items', function ($items) { foreach ($items ?: [] as $id => $item) { if (!empty($item['content'])) { $items[$id]['content'] = $this->builder ->withParams(['context' => 'save']) ->load(json_encode($item['content'])); } } return $items; }); return $config; } } theme/src/Listener/LoadUIkitScript.php000064400000001357151666572150013771 0ustar00<?php namespace YOOtheme\Theme\Listener; use YOOtheme\Config; use YOOtheme\Metadata; class LoadUIkitScript { public Config $config; public Metadata $metadata; public function __construct(Config $config, Metadata $metadata) { $this->config = $config; $this->metadata = $metadata; } public function handle(): void { $debug = $this->config->get('app.debug') ? '' : '.min'; $this->metadata->set('script:uikit', [ 'src' => "~assets/uikit/dist/js/uikit{$debug}.js", 'defer' => true, ]); $this->metadata->set('script:uikit-icons', [ 'src' => "~assets/uikit/dist/js/uikit-icons{$debug}.js", 'defer' => true, ]); } } theme/src/Listener/LoadCustomizerData.php000064400000002177151666572150014516 0ustar00<?php namespace YOOtheme\Theme\Listener; use YOOtheme\Config; use YOOtheme\Path; use YOOtheme\Translator; use YOOtheme\Url; class LoadCustomizerData { public Config $config; public Translator $translator; public function __construct(Config $config, Translator $translator) { $this->config = $config; $this->translator = $translator; } public function handle(): void { // add config $this->config->addFile('customizer', Path::get('../../config/customizer.json', __DIR__)); $this->config->add('customizer', [ 'base' => Url::to($this->config->get('theme.rootDir')), 'name' => $this->config->get('theme.name'), 'version' => $this->config->get('theme.version'), ]); // add locale $locale = strtr($this->config->get('locale.code'), [ 'de_AT' => 'de_DE', 'de_CH' => 'de_DE', 'de_CH_informal' => 'de_DE', 'de_DE_formal' => 'de_DE', 'ja_JP' => 'ja', ]); $this->translator->addResource(Path::get("../../languages/{$locale}.json", __DIR__)); } } theme/src/Listener/LoadConfigData.php000064400000002370151666572150013552 0ustar00<?php namespace YOOtheme\Theme\Listener; use YOOtheme\Config; use YOOtheme\Metadata; use YOOtheme\Translator; use YOOtheme\Url; class LoadConfigData { public Config $config; public Metadata $metadata; public Translator $translator; public function __construct(Config $config, Metadata $metadata, Translator $translator) { $this->config = $config; $this->metadata = $metadata; $this->translator = $translator; } public function handle(): void { $values = [ 'api' => 'https://api.yootheme.com', 'url' => Url::base(), 'route' => Url::route(), 'csrf' => $this->config->get('session.token'), 'base' => ($base = Url::to($this->config->get('theme.rootDir'))), 'assets' => Url::to("{$base}/packages/theme/assets"), 'locale' => $this->config->get('locale.code'), 'locales' => $this->translator->getResources(), 'platform' => $this->config->get('app.platform'), ]; $this->metadata->set( 'script:config', sprintf( 'window.yootheme ||= {}; var $config = yootheme.config = %s;', json_encode($values), ), ); } } theme/src/Listener/LoadThemeVersion.php000064400000000720151666572150014160 0ustar00<?php namespace YOOtheme\Theme\Listener; use YOOtheme\Config; class LoadThemeVersion { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($meta) { $version = $this->config->get('theme.version'); if ($version && is_null($meta->version)) { $meta = $meta->withAttribute('version', $version); } return $meta; } } theme/src/Listener/LoadThemeHead.php000064400000004452151666572150013402 0ustar00<?php namespace YOOtheme\Theme\Listener; use YOOtheme\Config; use YOOtheme\File; use YOOtheme\Metadata; use YOOtheme\Path; class LoadThemeHead { public Config $config; public Metadata $metadata; public function __construct(Config $config, Metadata $metadata) { $this->config = $config; $this->metadata = $metadata; } public function handle(): void { $rtl = $this->config->get('~theme.direction') == 'rtl' ? '{.rtl,}' : ''; $href = File::find("~theme/css/theme{.{$this->config->get('theme.id')},}{$rtl}.css"); $debug = $this->config->get('app.debug') ? '' : '.min'; $version = filectime($href); [$style] = explode(':', $this->config->get('~theme.style')); $this->metadata->set( 'style:theme', compact('href', 'version') + ($this->config->get('app.isCustomizer') ? ['id' => 'theme-style'] : []), ); if (filectime(__FILE__) >= $version) { $this->metadata->set('style:theme-update', ['href' => '~theme/css/theme.update.css']); } $this->metadata->set('script:theme-uikit', [ 'src' => "~assets/uikit/dist/js/uikit{$debug}.js", ]); $this->metadata->set('script:theme-uikit-icons', [ 'src' => File::find("~assets/uikit/dist/js/uikit-icons{-{$style},}.min.js"), ]); $this->metadata->set('script:theme', ['src' => '~theme/js/theme.js']); $this->metadata->set( 'script:theme-data', sprintf( 'window.yootheme ||= {}; var $theme = yootheme.theme = %s;', json_encode($this->config->get('theme.data', (object) [])), ), $this->config->get('app.isCustomizer') ? ['data-preview' => 'diff'] : [], ); if ($this->config->get('app.isCustomizer')) { $this->metadata->set('script:customizer-site', [ 'src' => Path::get('../../assets/js/customizer.min.js', __DIR__), ]); } if ($custom = File::get('~theme/css/custom.css')) { $this->metadata->set('style:theme-custom', ['href' => $custom]); } if ($custom = File::get('~theme/js/custom.js')) { $this->metadata->set('script:theme-custom', ['src' => $custom]); } } } theme/src/Listener/DisableImageCache.php000064400000000654151666572150014210 0ustar00<?php namespace YOOtheme\Theme\Listener; use YOOtheme\Config; class DisableImageCache { public Config $config; public function __construct(Config $config) { $this->config = $config; } public function handle($request, callable $next) { // Prevent image caching in customizer mode return $next($request->withAttribute('save', !$this->config->get('app.isCustomizer'))); } } theme/bootstrap.php000064400000002657151666572150010424 0ustar00<?php namespace YOOtheme\Theme; use YOOtheme\Config; use YOOtheme\ImageProvider; use YOOtheme\View; return [ 'theme' => fn(Config $config) => $config->loadFile(__DIR__ . '/config/theme.json'), 'events' => [ 'app.request' => [Listener\DisableImageCache::class => '@handle'], 'metadata.load' => [Listener\LoadThemeVersion::class => ['@handle', -10]], 'theme.head' => [ Listener\LoadThemeHead::class => ['@handle', -10], ], 'customizer.init' => [ Listener\UpdateBuilderLayouts::class => '@handle', Listener\LoadCustomizerData::class => '@handle', Listener\LoadConfigData::class => ['@handle', -20], Listener\LoadUIkitScript::class => ['@handle', 40], ], 'config.save' => [ Listener\SaveBuilderLayouts::class => '@handle', ], ], 'extend' => [ View::class => function (View $view, $app) { $app(ViewHelper::class)->register($view); }, ImageProvider::class => function (ImageProvider $image, $app) { $image->addLoader($app(ImageLoader::class)); }, ], 'services' => [ Updater::class => function (Config $config) { $updater = new Updater($config('theme.version')); $updater->add(__DIR__ . '/updates.php'); return $updater; }, Listener\LoadThemeVersion::class => '', ], ]; builder/elements/grid/element.php000064400000004257151666572150013123 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { $node->tags = []; // Filter tags if (!empty($node->props['filter'])) { foreach ($node->children as $child) { $child->tags = []; foreach (explode(',', $child->props['tags'] ?? '') as $tag) { // Strip tags as precaution if tags are mapped dynamically $tag = strip_tags($tag); if ($key = str_replace(' ', '-', trim($tag))) { $child->tags[$key] = trim($tag); } } $node->tags += $child->tags; } if ( $node->props['filter_order'] === 'manual' && $node->props['filter_order_manual'] ) { $order = array_map( 'strtolower', array_map('trim', explode(',', $node->props['filter_order_manual'])), ); uasort($node->tags, function ($a, $b) use ($order) { $iA = array_search(strtolower($a), $order); $iB = array_search(strtolower($b), $order); return $iA !== false && $iB !== false ? $iA - $iB : ($iA !== false ? -1 : ($iB !== false ? 1 : strnatcmp($a, $b))); }); } else { natsort($node->tags); } if ($node->props['filter_reverse']) { $node->tags = array_reverse($node->tags, true); } } if ($node->props['panel_style'] === 'tile-checked') { app(Metadata::class)->set('script:builder-grid', [ 'src' => Path::get('./app/grid.min.js', __DIR__), 'defer' => true, ]); } }, ], ]; builder/elements/grid/images/icon.svg000064400000000713151666572150013670 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="10" height="10" fill="none" stroke="#444" stroke-width="2" x="3" y="3" /> <rect width="10" height="10" fill="none" stroke="#444" stroke-width="2" x="17" y="3" /> <rect width="10" height="10" fill="none" stroke="#444" stroke-width="2" x="17" y="17" /> <rect width="10" height="10" fill="none" stroke="#444" stroke-width="2" x="3" y="17" /> </svg> builder/elements/grid/images/iconSmall.svg000064400000000617151666572150014664 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="6" height="6" fill="none" stroke="#444" x="2.5" y="2.5" /> <rect width="6" height="6" fill="none" stroke="#444" x="11.5" y="2.5" /> <rect width="6" height="6" fill="none" stroke="#444" x="11.5" y="11.5" /> <rect width="6" height="6" fill="none" stroke="#444" x="2.5" y="11.5" /> </svg> builder/elements/grid/templates/template.php000064400000007523151666572150015302 0ustar00<?php // Resets if ($props['panel_link']) { $props['title_link'] = ''; $props['image_link'] = ''; } // Override default settings if (!$props['grid_parallax'] && $props['grid_parallax_justify']) { $props['grid_parallax'] = '0'; } $el = $this->el('div', [ 'uk-filter' => $tags ? [ 'target: .js-filter;', 'animation: {filter_animation};', ] : false, ]); // Grid $grid = $this->el('div', [ 'class' => [ 'uk-grid', 'js-filter' => $tags, 'uk-child-width-[1-{@!grid_default: auto}]{grid_default}', 'uk-child-width-[1-{@!grid_small: auto}]{grid_small}@s', 'uk-child-width-[1-{@!grid_medium: auto}]{grid_medium}@m', 'uk-child-width-[1-{@!grid_large: auto}]{grid_large}@l', 'uk-child-width-[1-{@!grid_xlarge: auto}]{grid_xlarge}@xl', 'uk-flex-center {@grid_column_align} {@!grid_masonry}', 'uk-flex-middle {@grid_row_align} {@!grid_masonry}', $props['grid_column_gap'] == $props['grid_row_gap'] ? 'uk-grid-{grid_column_gap}' : '[uk-grid-column-{grid_column_gap}] [uk-grid-row-{grid_row_gap}]', 'uk-grid-divider {@grid_divider} {@!grid_column_gap: collapse} {@!grid_row_gap: collapse}' => count($children) > 1, 'uk-grid-match {@!grid_masonry}', ], 'uk-grid' => $this->expr([ 'masonry: {grid_masonry};', 'parallax: {grid_parallax};', 'parallax-justify: true; {@grid_parallax_justify}', 'parallax-start: {grid_parallax_start};' => $props['grid_parallax'] || $props['grid_parallax_justify'], 'parallax-end: {grid_parallax_end};' => $props['grid_parallax'] || $props['grid_parallax_justify'], ], $props) ?: count($children) > 1, 'uk-grid-checked' => $props['panel_style'] === 'tile-checked' ? 'uk-tile-default,uk-tile-muted' : false, 'uk-lightbox' => $props['lightbox'] ? [ 'toggle: a[data-type];', 'animation: {lightbox_animation};', 'nav: {lightbox_nav}; slidenav: false;', 'delay-controls: 0;' => $props['lightbox_controls'], 'counter: true;' => $props['lightbox_counter'], 'bg-close: false;' => !$props['lightbox_bg_close'], 'video-autoplay: {lightbox_video_autoplay};', ] : false, ]); $cell = $this->el('div'); // Filter $filter_grid = $this->el('div', [ 'class' => [ 'uk-grid', 'uk-child-width-expand', $props['filter_grid_column_gap'] == $props['filter_grid_row_gap'] ? 'uk-grid-{filter_grid_column_gap}' : '[uk-grid-column-{filter_grid_column_gap}] [uk-grid-row-{filter_grid_row_gap}]', ], 'uk-grid' => count($children) > 1, ]); $filter_cell = $this->el('div', [ 'class' => [ 'uk-width-{filter_grid_width}@{filter_grid_breakpoint}', 'uk-flex-last@{filter_grid_breakpoint} {@filter_position: right}', ], ]); ?> <?= $el($props, $attrs) ?> <?php if ($tags) : ?> <?php if ($filter_horizontal = in_array($props['filter_position'], ['left', 'right'])) : ?> <?= $filter_grid($props) ?> <?= $filter_cell($props) ?> <?php endif ?> <?= $this->render("{$__dir}/template-nav", compact('props')) ?> <?php if ($filter_horizontal) : ?> </div> <div> <?php endif ?> <?= $grid($props) ?> <?php foreach ($children as $child) : ?> <?= $cell($props, ['data-tag' => $child->tags], $builder->render($child, ['element' => $props])) ?> <?php endforeach ?> <?= $grid->end() ?> <?php if ($filter_horizontal) : ?> </div> </div> <?php endif ?> <?php else : ?> <?= $grid($props) ?> <?php foreach ($children as $child) : ?> <div><?= $builder->render($child, ['element' => $props]) ?></div> <?php endforeach ?> <?= $grid->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/grid/templates/template-nav.php000064400000003607151666572150016063 0ustar00<?php // => gallery $nav = $this->el('ul', [ 'class' => [ 'el-nav', 'uk-{filter_style} {@filter_style: tab}', 'uk-margin[-{filter_margin}] {@filter_position: top}', ], 'uk-scrollspy-class' => in_array($props['animation'], ['none', 'parallax']) || !$props['item_animation'] ? false : (!empty($props['animation']) ? ['uk-animation-{0}' => $props['animation']] : true), ]); $nav_horizontal = [ 'uk-subnav {@filter_style: subnav.*}', 'uk-{filter_style} {@filter_style: subnav-.*}', 'uk-flex-{filter_align: right|center}', 'uk-child-width-expand {@filter_align: justify}', ]; $nav_vertical = [ 'uk-nav uk-nav-{0} [uk-text-left {@text_align}] {@filter_style: subnav.*}' => $props['filter_style_primary'] ? 'primary' : 'default', 'uk-tab-{filter_position} {@filter_style: tab}', ]; $nav_attrs = $props['filter_position'] === 'top' ? [ 'class' => $nav_horizontal, 'uk-margin' => (bool) preg_match('/^subnav/', $props['filter_style']), ] : [ 'class' => $nav_vertical, 'uk-toggle' => [ "cls: {$this->expr(array_merge($nav_vertical, $nav_horizontal), $props)};", 'mode: media;', 'media: @{filter_grid_breakpoint};', ], ]; ?> <?= $nav($props, $nav_attrs) ?> <?php if ($props['filter_all']) : ?> <li class="uk-active" uk-filter-control><a href><?= $this->trans($props['filter_all_label'] ?: 'All') ?></a></li> <?php endif ?> <?php foreach ($tags as $tag => $name) : ?> <li <?= $this->attrs([ 'class' => ['uk-active' => $tag === array_key_first($tags) && !$props['filter_all']], 'uk-filter-control' => json_encode(['filter' => '[data-tag~="' . str_replace('"', '\"', $tag) . '"]']), ]) ?>> <a href><?= $name ?></a> </li> <?php endforeach ?> <?= $nav->end() ?> builder/elements/grid/templates/content.php000064400000000522151666572150015131 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/grid/element.json000064400000172312151666572150013303 0ustar00{ "@import": "./element.php", "name": "grid", "title": "Grid", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_title": true, "show_meta": true, "show_content": true, "show_image": true, "show_video": true, "show_link": true, "show_hover_image": true, "show_hover_video": true, "grid_default": "1", "grid_medium": "3", "filter_style": "tab", "filter_all": true, "filter_position": "top", "filter_align": "left", "filter_grid_width": "auto", "filter_grid_breakpoint": "m", "lightbox_bg_close": true, "title_hover_style": "reset", "title_element": "h3", "title_align": "top", "title_grid_width": "1-2", "title_grid_breakpoint": "m", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "content_column_breakpoint": "m", "icon_width": 80, "image_align": "top", "image_grid_width": "1-2", "image_grid_breakpoint": "m", "image_svg_color": "emphasis", "link_text": "Read more", "link_style": "default", "margin": "default", "item_animation": true }, "placeholder": { "children": [ { "type": "grid_item", "props": {} }, { "type": "grid_item", "props": {} }, { "type": "grid_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "item": "grid_item", "media": [ { "type": "image", "item": { "title": "title", "image": "src" } }, { "type": "video", "item": { "title": "title", "video": "src" } } ] }, "show_title": { "label": "Display", "type": "checkbox", "text": "Show the title" }, "show_meta": { "type": "checkbox", "text": "Show the meta text" }, "show_content": { "type": "checkbox", "text": "Show the content" }, "show_image": { "type": "checkbox", "text": "Show the image" }, "show_video": { "type": "checkbox", "text": "Show the video" }, "show_link": { "type": "checkbox", "text": "Show the link" }, "show_hover_image": { "type": "checkbox", "text": "Show the hover image" }, "show_hover_video": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the hover video" }, "grid_masonry": { "label": "Masonry", "description": "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.", "type": "select", "options": { "None": "", "Pack": "pack", "Next": "next" } }, "grid_parallax": { "label": "Parallax", "description": "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.", "type": "range", "attrs": { "min": 0, "max": 600, "step": 10 } }, "grid_parallax_justify": { "type": "checkbox", "text": "Justify columns at the bottom" }, "grid_parallax_start": { "enable": "grid_parallax || grid_parallax_justify" }, "grid_parallax_end": { "enable": "grid_parallax || grid_parallax_justify" }, "grid_column_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "grid_row_gap": { "label": "Row Gap", "description": "Set the size of the gap between the grid rows.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "grid_divider": { "label": "Divider", "description": "Show a divider between grid columns.", "type": "checkbox", "text": "Show dividers", "enable": "grid_column_gap != 'collapse' && grid_row_gap != 'collapse'" }, "grid_column_align": { "label": "Alignment", "type": "checkbox", "text": "Center columns", "enable": "!grid_masonry" }, "grid_row_align": { "description": "Center grid columns horizontally and rows vertically.", "type": "checkbox", "text": "Center rows", "enable": "!grid_masonry" }, "grid_default": { "label": "Phone Portrait", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "grid_small": { "label": "Phone Landscape", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "Inherit": "", "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "grid_medium": { "label": "Tablet Landscape", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "Inherit": "", "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "grid_large": { "label": "Desktop", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "Inherit": "", "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "grid_xlarge": { "label": "Large Screens", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "Inherit": "", "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "filter": { "label": "Filter", "type": "checkbox", "text": "Enable filter navigation" }, "filter_animation": { "label": "Animation", "description": "Select an animation that will be applied to the content items when filtering between them.", "type": "select", "options": { "None": "false", "Slide": "", "Fade": "fade", "Delayed Fade": "delayed-fade" }, "enable": "filter" }, "filter_order": { "label": "Navigation Order", "description": "Order the filter navigation alphabetically or by defining the order manually.", "type": "select", "options": { "Alphabetical": "", "Manual": "manual" }, "enable": "filter" }, "filter_reverse": { "type": "checkbox", "text": "Reverse order", "enable": "filter" }, "filter_order_manual": { "label": "Manual Order", "description": "Enter a comma-separated list of tags to manually order the filter navigation.", "enable": "filter && filter_order == 'manual'" }, "filter_style": { "label": "Style", "description": "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.", "type": "select", "options": { "Tabs": "tab", "Subnav (Nav)": "subnav", "Subnav Divider (Nav)": "subnav-divider", "Subnav Pill (Nav)": "subnav-pill" }, "enable": "filter" }, "filter_all": { "label": "All Items", "type": "checkbox", "text": "Show filter control for all items", "enable": "filter" }, "filter_all_label": { "attrs": { "placeholder": "All" }, "enable": "filter && filter_all" }, "filter_position": { "label": "Position", "description": "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.", "type": "select", "options": { "Top": "top", "Left": "left", "Right": "right" }, "enable": "filter" }, "filter_style_primary": { "type": "checkbox", "text": "Primary navigation", "enable": "filter && $match(filter_position, 'left|right') && $match(filter_style, '^subnav')" }, "filter_align": { "label": "Alignment", "description": "Align the filter controls.", "type": "select", "options": { "Left": "left", "Right": "right", "Center": "center", "Justify": "justify" }, "enable": "filter && filter_position == 'top'" }, "filter_margin": { "label": "Margin", "description": "Set the vertical margin.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "filter && filter_position == 'top'" }, "filter_grid_width": { "label": "Grid Width", "description": "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.", "type": "select", "options": { "Auto": "auto", "50%": "1-2", "33%": "1-3", "25%": "1-4", "20%": "1-5", "Small": "small", "Medium": "medium", "Large": "large" }, "enable": "filter && $match(filter_position, 'left|right')" }, "filter_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between between the filter navigation and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "filter && $match(filter_position, 'left|right')" }, "filter_grid_row_gap": { "label": "Grid Row Gap", "description": "Set the size of the gap if the grid items stack.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "filter && $match(filter_position, 'left|right')" }, "filter_grid_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "filter && $match(filter_position, 'left|right')" }, "lightbox": { "label": "Lightbox", "type": "checkbox", "text": "Enable lightbox gallery" }, "lightbox_controls": { "type": "checkbox", "text": "Show controls always", "enable": "lightbox" }, "lightbox_counter": { "type": "checkbox", "text": "Show counter", "enable": "lightbox" }, "lightbox_bg_close": { "type": "checkbox", "text": "Close on background click", "enable": "lightbox" }, "lightbox_animation": { "label": "Animation", "description": "Select the transition between two slides.", "type": "select", "options": { "Slide": "", "Fade": "fade", "Scale": "scale" }, "enable": "lightbox" }, "lightbox_nav": { "label": "Navigation", "description": "Select the navigation type.", "type": "select", "options": { "Slidenav": "", "Dotnav": "dotnav", "Thumbnav": "thumbnav" }, "enable": "lightbox" }, "lightbox_image_width": { "attrs": { "placeholder": "auto" }, "enable": "lightbox" }, "lightbox_image_height": { "attrs": { "placeholder": "auto" }, "enable": "lightbox" }, "lightbox_image_orientation": { "label": "Image Orientation", "description": "Width and height will be flipped accordingly, if the image is in portrait or landscape format.", "type": "checkbox", "text": "Allow mixed image orientations", "enable": "lightbox" }, "lightbox_video_autoplay": { "label": "Video Autoplay", "description": "Enable autoplay or play a muted inline video without controls.", "type": "select", "options": { "None": "", "Autoplay": "true", "Inline": "inline" }, "enable": "lightbox" }, "lightbox_text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true, "enable": "lightbox" }, "title_display": { "label": "Show Title", "description": "Display the title inside the panel, as the lightbox caption or both.", "type": "select", "options": { "Panel + Lightbox": "", "Panel only": "item", "Lightbox only": "lightbox" }, "enable": "show_title && lightbox" }, "content_display": { "label": "Show Content", "description": "Display the content inside the panel, as the lightbox caption or both.", "type": "select", "options": { "Panel + Lightbox": "", "Panel only": "item", "Lightbox only": "lightbox" }, "enable": "show_content && lightbox" }, "panel_style": { "label": "Style", "description": "Select one of the boxed card or tile styles or a blank panel.", "type": "select", "options": { "None": "", "Card Default": "card-default", "Card Primary": "card-primary", "Card Secondary": "card-secondary", "Card Hover": "card-hover", "Tile Default": "tile-default", "Tile Muted": "tile-muted", "Tile Primary": "tile-primary", "Tile Secondary": "tile-secondary", "Tile Checked": "tile-checked" } }, "panel_link": { "label": "Link", "description": "Link the whole panel if a link exists. Optionally, add a hover style.", "type": "checkbox", "text": "Link panel", "enable": "show_link" }, "panel_link_hover": { "type": "checkbox", "text": "Add hover style", "enable": "show_link && panel_link && $match(panel_style, 'card-(default|primary|secondary)|tile-')" }, "panel_padding": { "label": "Padding", "description": "Set the padding.", "type": "select", "options": { "None": "", "Small": "small", "Default": "default", "Large": "large" }, "enable": "panel_style || (!panel_style && (show_image || show_video) && image_align != 'between')" }, "panel_image_no_padding": { "description": "Top, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.", "type": "checkbox", "text": "Align image without padding", "show": "panel_style", "enable": "(show_image || show_video) && image_align != 'between'" }, "item_maxwidth": { "type": "select", "label": "Max Width", "description": "Set the maximum width.", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" } }, "panel_content_width": { "label": "1 Column Content Width", "description": "Set an optional content width which doesn't affect the image if there is just one column.", "type": "select", "options": { "Auto": "", "X-Small": "xsmall", "Small": "small" }, "show": "!panel_style", "enable": "(show_image || show_video) && image_align == 'top' && !panel_padding && !item_maxwidth && (!grid_default || grid_default == '1') && (!grid_small || grid_small == '1') && (!grid_medium || grid_medium == '1') && (!grid_large || grid_large == '1') && (!grid_xlarge || grid_xlarge == '1')" }, "panel_expand": { "label": "Expand Content", "description": "Expand the height of the content to fill the available space in the panel and push the link to the bottom.", "type": "select", "options": { "None": "", "Image": "image", "Content": "content", "Image and Content": "both" }, "enable": "!grid_masonry" }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_link": { "label": "Link", "description": "Link the title if a link exists.", "type": "checkbox", "text": "Link title", "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox) && show_link" }, "title_hover_style": { "label": "Hover Style", "description": "Set the hover style for a linked title.", "type": "select", "options": { "None": "reset", "Heading Link": "heading", "Default Link": "" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox) && show_link && (title_link || panel_link)" }, "title_decoration": { "label": "Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_align": { "label": "Alignment", "description": "Align the title to the top or left in regards to the content.", "type": "select", "options": { "Top": "top", "Left": "left" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_grid_width": { "label": "Grid Width", "description": "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.", "type": "select", "options": { "Auto": "auto", "Expand": "expand", "80%": "4-5", "75%": "3-4", "66%": "2-3", "60%": "3-5", "50%": "1-2", "40%": "2-5", "33%": "1-3", "25%": "1-4", "20%": "1-5", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox) && title_align == 'left'" }, "title_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between the title and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox) && title_align == 'left'" }, "title_grid_row_gap": { "label": "Grid Row Gap", "description": "Set the size of the gap if the grid items stack.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox) && title_align == 'left'" }, "title_grid_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox) && title_align == 'left'" }, "title_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_meta" }, "meta_align": { "label": "Alignment", "description": "Align the meta text.", "type": "select", "options": { "Above Title": "above-title", "Below Title": "below-title", "Above Content": "above-content", "Below Content": "below-content" }, "enable": "show_meta" }, "meta_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_meta" }, "meta_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_meta" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox)" }, "content_align": { "label": "Alignment", "type": "checkbox", "text": "Force left alignment", "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox)" }, "content_dropcap": { "label": "Drop Cap", "description": "Display the first letter of the paragraph as a large initial.", "type": "checkbox", "text": "Enable drop cap", "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox)" }, "content_column": { "label": "Columns", "description": "Set the number of text columns.", "type": "select", "options": { "None": "", "Halves": "1-2", "Thirds": "1-3", "Quarters": "1-4", "Fifths": "1-5", "Sixths": "1-6" }, "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox)" }, "content_column_divider": { "description": "Show a divider between text columns.", "type": "checkbox", "text": "Show dividers", "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox) && content_column" }, "content_column_breakpoint": { "label": "Columns Breakpoint", "description": "Set the device width from which the text columns should apply.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox) && content_column" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox)" }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image || show_video" }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image || show_video" }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "enable": "show_image || show_video" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "(show_image || show_video) && (!panel_style || (panel_style && (!panel_image_no_padding || image_align == 'between')))" }, "image_box_shadow": { "label": "Box Shadow", "description": "Select the image box shadow size.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "(show_image || show_video) && !panel_style" }, "image_box_decoration": { "label": "Box Decoration", "description": "Select the image box decoration style.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Floating Shadow": "shadow", "Mask": "mask" }, "enable": "(show_image || show_video) && !panel_style" }, "image_box_decoration_inverse": { "type": "checkbox", "text": "Inverse style", "enable": "(show_image || show_video) && !panel_style && $match(image_box_decoration, '^(default|primary|secondary)$')" }, "image_link": { "label": "Link", "description": "Link the image if a link exists.", "type": "checkbox", "text": "Link image", "enable": "(show_image || show_video) && show_link" }, "image_transition": { "label": "Hover Transition", "description": "Set the hover transition for a linked image.", "type": "select", "options": { "None": "", "Scale Up": "scale-up", "Scale Down": "scale-down" }, "enable": "(show_image || show_video) && show_link && (image_link || panel_link)" }, "image_transition_border": { "type": "checkbox", "text": "Border", "enable": "(show_image || show_video) && show_link && (image_link || panel_link)" }, "image_hover_box_shadow": { "label": "Hover Box Shadow", "description": "Select the image box shadow size on hover.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "show_link && (show_image || show_video) && !panel_style && (image_link || panel_link)" }, "icon_width": { "label": "Icon Width", "description": "Set the icon width.", "enable": "show_image" }, "icon_color": { "label": "Icon Color", "description": "Set the icon color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image" }, "image_align": { "label": "Alignment", "description": "Align the image to the top, left, right or place it between the title and the content.", "type": "select", "options": { "Top": "top", "Bottom": "bottom", "Left": "left", "Right": "right", "Between": "between" }, "enable": "show_image || show_video" }, "image_grid_width": { "label": "Grid Width", "description": "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.", "type": "select", "options": { "Auto": "auto", "80%": "4-5", "75%": "3-4", "66%": "2-3", "60%": "3-5", "50%": "1-2", "40%": "2-5", "33%": "1-3", "25%": "1-4", "20%": "1-5", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "(show_image || show_video) && $match(image_align, 'left|right')" }, "image_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between the image and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "(show_image || show_video) && $match(image_align, 'left|right') && !(panel_image_no_padding && panel_style)" }, "image_grid_row_gap": { "label": "Grid Row Gap", "description": "Set the size of the gap if the grid items stack.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "(show_image || show_video) && $match(image_align, 'left|right') && !(panel_image_no_padding && panel_style)" }, "image_grid_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "(show_image || show_video) && $match(image_align, 'left|right')" }, "image_vertical_align": { "label": "Vertical Alignment", "description": "Vertically center grid items.", "type": "checkbox", "text": "Center", "enable": "(show_image || show_video) && $match(image_align, 'left|right')" }, "image_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "(show_image || show_video) && (image_align == 'between' || (image_align == 'bottom' && !(panel_style && panel_image_no_padding)))" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "show_image" }, "image_svg_animate": { "type": "checkbox", "text": "Animate strokes", "enable": "show_image && image_svg_inline" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image && image_svg_inline" }, "image_text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true, "enable": "show_image || show_video" }, "link_target": { "label": "Target", "type": "checkbox", "text": "Open in a new window", "enable": "show_link && !lightbox" }, "link_text": { "label": "Text", "description": "Enter the text for the link.", "enable": "show_link" }, "link_aria_label": { "label": "ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text.", "enable": "show_link" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "show_link" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "item_animation": "${builder.item_animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-nav", ".el-item", ".el-title", ".el-meta", ".el-content", ".el-image", ".el-link", ".el-hover-image" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "content", "show_title", "show_meta", "show_content", "show_image", "show_video", "show_link", "show_hover_image", "show_hover_video" ] }, { "title": "Settings", "fields": [ { "label": "Grid", "type": "group", "divider": true, "fields": [ "grid_masonry", "grid_parallax", "grid_parallax_justify", { "label": "Parallax Start/End", "description": "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.", "type": "grid", "width": "1-2", "fields": ["grid_parallax_start", "grid_parallax_end"] }, "grid_column_gap", "grid_row_gap", "grid_divider", "grid_column_align", "grid_row_align" ] }, { "label": "Columns", "type": "group", "divider": true, "fields": [ "grid_default", "grid_small", "grid_medium", "grid_large", "grid_xlarge" ] }, { "label": "Filter", "type": "group", "divider": true, "fields": [ "filter", "filter_animation", "filter_order", "filter_reverse", "filter_order_manual", "filter_style", "filter_all", "filter_all_label", "filter_position", "filter_style_primary", "filter_align", "filter_margin", "filter_grid_width", "filter_grid_column_gap", "filter_grid_row_gap", "filter_grid_breakpoint" ] }, { "label": "Lightbox", "type": "group", "divider": true, "fields": [ "lightbox", "lightbox_controls", "lightbox_counter", "lightbox_bg_close", "lightbox_animation", "lightbox_nav", { "label": "Image Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["lightbox_image_width", "lightbox_image_height"] }, "lightbox_image_orientation", "lightbox_video_autoplay", "lightbox_text_color", "title_display", "content_display" ] }, { "label": "Panel", "type": "group", "divider": true, "fields": [ "panel_style", "panel_link", "panel_link_hover", "panel_padding", "panel_image_no_padding", "item_maxwidth", "panel_content_width", "panel_expand" ] }, { "label": "Title", "type": "group", "divider": true, "fields": [ "title_style", "title_link", "title_hover_style", "title_decoration", "title_font_family", "title_color", "title_element", "title_align", "title_grid_width", "title_grid_column_gap", "title_grid_row_gap", "title_grid_breakpoint", "title_margin" ] }, { "label": "Meta", "type": "group", "divider": true, "fields": [ "meta_style", "meta_color", "meta_align", "meta_element", "meta_margin" ] }, { "label": "Content", "type": "group", "divider": true, "fields": [ "content_style", "content_align", "content_dropcap", "content_column", "content_column_divider", "content_column_breakpoint", "content_margin" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading", "image_border", "image_box_shadow", "image_box_decoration", "image_box_decoration_inverse", "image_link", "image_transition", "image_transition_border", "image_hover_box_shadow", "icon_width", "icon_color", "image_align", "image_grid_width", "image_grid_column_gap", "image_grid_row_gap", "image_grid_breakpoint", "image_vertical_align", "image_margin", "image_svg_inline", "image_svg_animate", "image_svg_color", "image_text_color" ] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", "link_text", "link_aria_label", "link_style", "link_size", "link_fullwidth", "link_margin" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "item_animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } } } builder/elements/grid/app/grid.min.js000064400000001061151666572150013574 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ (function(i,l){"use strict";i.component("GridChecked",{args:"classes",extends:i.component("margin"),props:{classes:"list"},data:{classes:"",margin:"",firstColumn:""},update:{write({rows:n}){var a;for(let e=0;e<n.length;e++)for(let t=0;t<n[0].length;t++){const r=e%2^t%2;let s=(a=n[e][t])==null?void 0:a.firstElementChild;l.isTag(s==null?void 0:s.firstElementChild,"a")&&(s=s.firstElementChild),l.toggleClass(s,this.classes[0],!r),l.toggleClass(s,this.classes[1],r)}},events:["resize"]}})})(UIkit,UIkit.util); builder/elements/grid/updates.php000064400000025664151666572150013144 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.3' => function ($node) { if (Arr::get($node->props, 'show_link') && Arr::get($node->props, 'panel_link') && preg_match('/^card-(default|primary|secondary)|tile-/', Arr::get($node->props, 'panel_style', ''))) { $node->props['panel_link_hover'] = 'true'; } // Remove obsolete props unset( $node->props['icon_ratio'], $node->props['grid_mode'], $node->props['panel_card_size'] ); }, '4.4.0-beta.0.2' => function ($node) { if (str_starts_with(Arr::get($node->props, 'panel_style', ''), 'card-') && Arr::get($node->props, 'panel_image_no_padding') && in_array(Arr::get($node->props, 'image_align'), ['left', 'right'])) { $node->props['panel_expand'] = 'image'; } }, '4.3.4.1' => function ($node) { if (Arr::get($node->props, 'panel_expand')) { $node->props['panel_expand'] = 'content'; } }, '4.3.1' => function ($node) { if (!Arr::get($node->props, 'grid_masonry')) { unset($node->props['grid_masonry']); } }, '4.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'grid_masonry')) { $node->props['grid_masonry'] = 'next'; } }, '4.0.0-beta.9' => function ($node) { if (Arr::get($node->props, 'panel_link') && Arr::get($node->props, 'css')) { $node->props['css'] = str_replace('.el-item', '.el-item > *', $node->props['css']); } }, '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '2.7.3.1' => function ($node) { if (empty($node->props['panel_style']) && empty($node->props['panel_padding'])) { foreach ($node->children as $child) { if (str_starts_with($child->props->panel_style ?? '', 'card-')) { $node->props['panel_padding'] = 'default'; break; } } } }, '2.7.0-beta.0.5' => function ($node) { if (str_starts_with($node->props['panel_style'] ?? '', 'card-')) { if (empty($node->props['panel_card_size'])) { $node->props['panel_card_size'] = 'default'; } $node->props['panel_padding'] = $node->props['panel_card_size']; } unset($node->props['panel_card_size']); }, '2.7.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'panel_content_padding' => 'panel_padding', 'panel_size' => 'panel_card_size', 'panel_card_image' => 'panel_image_no_padding', ]); }, '2.4.14.2' => function ($node) { $node->props['animation'] = Arr::get($node->props, 'item_animation'); $node->props['item_animation'] = true; }, '2.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'item_maxwidth') === 'xxlarge') { $node->props['item_maxwidth'] = '2xlarge'; } if (Arr::get($node->props, 'title_grid_width') === 'xxlarge') { $node->props['title_grid_width'] = '2xlarge'; } if (Arr::get($node->props, 'image_grid_width') === 'xxlarge') { $node->props['image_grid_width'] = '2xlarge'; } if (!empty($node->props['icon_ratio'])) { $node->props['icon_width'] = round(20 * $node->props['icon_ratio']); unset($node->props['icon_ratio']); } }, '2.0.0-beta.8.1' => function ($node) { Arr::updateKeys($node->props, ['grid_align' => 'grid_column_align']); }, '2.0.0-beta.5.1' => function ($node) { Arr::updateKeys($node->props, [ 'link_type' => function ($value) { if ($value === 'content') { return [ 'title_link' => true, 'image_link' => true, 'link_text' => '', ]; } elseif ($value === 'element') { return [ 'panel_link' => true, 'link_text' => '', ]; } }, ]); }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'divider' => 'grid_divider', 'filter_breakpoint' => 'filter_grid_breakpoint', 'title_breakpoint' => 'title_grid_breakpoint', 'image_breakpoint' => 'image_grid_breakpoint', 'gutter' => fn($value) => ['grid_column_gap' => $value, 'grid_row_gap' => $value], 'filter_gutter' => fn($value) => [ 'filter_grid_column_gap' => $value, 'filter_grid_row_gap' => $value, ], 'title_gutter' => fn($value) => [ 'title_grid_column_gap' => $value, 'title_grid_row_gap' => $value, ], 'image_gutter' => fn($value) => [ 'image_grid_column_gap' => $value, 'image_grid_row_gap' => $value, ], ]); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'title_style') === 'heading-hero') { $node->props['title_style'] = 'heading-xlarge'; } if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } if (in_array($style, ['juno', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-medium'; } } if ( in_array($style, [ 'district', 'florence', 'flow', 'nioh-studio', 'summit', 'vision', ]) ) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-large'; } } if ($style == 'lilian') { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-2xlarge'; } } }, '1.19.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { $node->props['meta_align'] = 'above-title'; } if (Arr::get($node->props, 'meta_align') === 'bottom') { $node->props['meta_align'] = 'below-title'; } if (Arr::get($node->props, 'link_style') === 'panel') { if (Arr::get($node->props, 'panel_style')) { $node->props['link_type'] = 'element'; } else { $node->props['link_type'] = 'content'; } $node->props['link_style'] = 'default'; } Arr::updateKeys($node->props, ['image_card' => 'panel_image_no_padding']); }, '1.18.10.3' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { if (!empty($node->props['meta_margin'])) { $node->props['title_margin'] = $node->props['meta_margin']; } $node->props['meta_margin'] = ''; } }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, [ 'image_inline_svg' => 'image_svg_inline', 'image_animate_svg' => 'image_svg_animate', ]); }, '1.18.0' => function ($node) { if ( !isset($node->props['grid_parallax']) && Arr::get($node->props, 'grid_mode') === 'parallax' ) { $node->props['grid_parallax'] = Arr::get($node->props, 'grid_parallax_y'); } if ( !isset($node->props['image_box_decoration']) && Arr::get($node->props, 'image_box_shadow_bottom') === true ) { $node->props['image_box_decoration'] = 'shadow'; } if ( !isset($node->props['meta_color']) && Arr::get($node->props, 'meta_style') === 'muted' ) { $node->props['meta_color'] = 'muted'; $node->props['meta_style'] = ''; } }, ]; builder/elements/overlay-slider_item/templates/content.php000064400000002270151666572150020165 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['video']) : ?> <?php if ($this->iframeVideo($props['video'], [], false)) : ?> <iframe src="<?= $props['video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['hover_image']) : ?> <img src="<?= $props['hover_image'] ?>" alt> <?php endif ?> <?php if ($props['hover_video']) : ?> <?php if ($this->iframeVideo($props['hover_video'], [], false)) : ?> <iframe src="<?= $props['hover_video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['hover_video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $element['title_element'] ?>><?= $props['title'] ?></<?= $element['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a></p> <?php endif ?> builder/elements/overlay-slider_item/templates/template-content.php000064400000006464151666572150022007 0ustar00<?php // Title $title = $this->el($element['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-link-{title_hover_style} {@title_link}', // Set here to style links which already come with dynamic content (WP taxonomy links) 'uk-transition-{title_transition} {@overlay_display}', 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', 'uk-flex-1 {@content_expand}' => !$props['content'] && (!$props['meta'] || $element['meta_align'] == 'above-title'), ], ]); // Meta $meta = $this->el($element['meta_element'], [ 'class' => [ 'el-meta', 'uk-transition-{meta_transition} {@overlay_display}', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($element['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $element['meta_element'] != 'div', 'uk-flex-1 {@content_expand}' => $element['meta_align'] == 'below-content' || (!$props['content'] && ($element['meta_align'] == 'above-content' || ($element['meta_align'] == 'below-title' ))), ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-transition-{content_transition} {@overlay_display}', 'uk-{content_style}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($element['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), 'uk-flex-1 {@content_expand}' => !($props['meta'] && $element['meta_align'] == 'below-content'), ], ]); // Link $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', 'uk-transition-{link_transition} {@overlay_display}', // Not on link element to prevent conflicts with link style ], ]); ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($element) ?> <?php if ($element['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($element['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($element, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && ($props['link_text'] || $element['link_text'])) : ?> <?= $link_container($element, $link($element, $props['link_text'] ?: $element['link_text'])) ?> <?php endif ?> builder/elements/overlay-slider_item/templates/template-link.php000064400000003267151666572150021270 0ustar00<?php $link = $props['link'] ? $this->el('a', [ 'href' => $props['link'], 'aria-label' => $props['link_aria_label'] ?: $element['link_aria_label'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; if ($link && $element['overlay_link']) { $link_container->attr($link->attrs + [ 'class' => [ // Needs to be child of `uk-light` or `uk-dark` 'uk-link-toggle', ], ]); $props['title'] = $this->striptags($props['title']); $props['meta'] = $this->striptags($props['meta']); $props['content'] = $this->striptags($props['content']); if ($props['title'] != '' && $element['title_hover_style'] != 'reset') { $props['title'] = $this->el('span', [ 'class' => [ 'uk-link-{title_hover_style: heading}', 'uk-link {!title_hover_style}', ], ], $props['title'])->render($element); } } if ($link && $props['title'] != '' && $element['title_link']) { $props['title'] = $link($element, [], $this->striptags($props['title'])); // title_hover_style is set on title } if ($link && ($props['link_text'] || $element['link_text'])) { if ($element['overlay_link']) { $link = $this->el('div'); } $link->attr('class', [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-muted|link-text} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', // Keep link style if overlay link 'uk-link {@link_style:} {@overlay_link}', 'uk-text-muted {@link_style: link-muted} {@overlay_link}', ]); } return $link; builder/elements/overlay-slider_item/templates/template-media.php000064400000005110151666572150021377 0ustar00<?php if ($props['video']) { $src = $props['video']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-video.php"; } elseif ($props['image']) { $src = $props['image']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-image.php"; } elseif ($props['hover_video']) { $src = $props['hover_video']; $focal = $props['hover_image_focal_point']; $media = include "{$__dir}/template-video.php"; } elseif ($props['hover_image']) { $src = $props['hover_image']; $focal = $props['hover_image_focal_point']; $media = include "{$__dir}/template-image.php"; } // Media $media->attr([ 'class' => [ 'el-image', 'uk-blend-{0}' => $props['media_blend_mode'], 'uk-transition-{image_transition}', 'uk-transition-opaque' => $props['image'] || $props['video'], 'uk-transition-fade {@!image_transition}' => ($props['hover_image'] || $props['hover_video']) && !($props['image'] || $props['video']), 'uk-flex-1 {@image_expand}' ], ]); if ($element['image_expand'] || ($media->name == 'video' && $element['image_width'] && $element['image_height'])) { $media->attr([ 'class' => [ 'uk-object-cover', 'uk-object-{0}' => $focal, ], 'style' => [ // Keep video responsiveness but with new proportions (because video isn't cropped like an image) 'aspect-ratio: {image_width} / {image_height};' => $media->name == 'video', ], ]); } // Hover Media $hover_media = ''; if (($props['hover_image'] || $props['hover_video']) && ($props['image'] || $props['video'])) { if ($props['hover_video']) { $src = $props['hover_video']; $hover_media = include "{$__dir}/template-video.php"; } elseif ($props['hover_image']) { $src = $props['hover_image']; $focal = $props['hover_image_focal_point']; $hover_media = include "{$__dir}/template-image.php"; } $hover_media->attr([ 'class' => [ 'el-hover-image', 'uk-transition-{image_transition}', 'uk-transition-fade {@!image_transition}', 'uk-object-{0}' => $props['hover_image_focal_point'], // `uk-cover` already sets object-fit to cover ], 'uk-cover' => true, 'uk-video' => false, // Resets 'alt' => true, // Image 'loading' => false, // Image + Iframe 'preload' => false, // Video ]); } ?> <?= $media($element, '') ?> <?php if ($hover_media) : ?> <?= $hover_media($element, '') ?> <?php endif ?> builder/elements/overlay-slider_item/templates/template-image.php000064400000000463151666572150021410 0ustar00<?php $image = $this->el('image', [ 'src' => $src, 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $focal, 'thumbnail' => true, ]); return $image; builder/elements/overlay-slider_item/templates/template.php000064400000010324151666572150020325 0ustar00<?php // Override default settings $element['text_color'] = $props['text_color'] ?: $element['text_color']; // New logic shortcuts $element['has_transition'] = $element['overlay_display'] || $element['image_transition'] || $props['hover_image'] || $props['hover_video']; $element['text_color_inverse'] = $element['text_color'] === 'light' ? 'dark' : 'light'; $el = $this->el($props['item_element'] ?: 'div', [ 'class' => [ 'el-item', // Can't use `uk-grid-item-match` because `flex-wrap: warp` creates a multi-line flex container which doesn't shrink the child height if its content is larger 'uk-flex uk-flex-column {@image_expand}', // Needs to be parent of `uk-link-toggle` 'uk-{0}' => !$element['overlay_style'] || $element['overlay_cover'] ? $element['text_color'] : false, // Only for transparent navbar 'uk-inverse-{0}' => $element['overlay_style'] && !$element['overlay_cover'] ? $element['text_color'] : false, ], ]); // Link Container $link_container = $props['link'] && $element['overlay_link'] ? $this->el('a', [ 'class' => [ 'uk-flex-1 uk-flex uk-flex-column {@image_expand}', ], ]) : null; ($link_container ?: $el)->attr([ 'class' => [ 'uk-inline-clip', 'uk-transition-toggle {@has_transition}', ], 'style' => [ "background-color: {$props['media_background']};" => $props['media_background'], ], 'tabindex' => $element['has_transition'] && !($props['link'] && $element['overlay_link']) ? 0 : null, // Needs to be on anchor to have just one focusable toggle when using keyboard navigation 'uk-toggle' => ($props['text_color_hover'] || $element['text_color_hover']) && ((!$element['overlay_style'] && ($props['hover_image'] || $props['hover_video'])) || ($element['overlay_cover'] && $element['overlay_display'] && $element['overlay_transition_background'])) ? [ 'cls: uk-{text_color_inverse} [uk-{text_color}];', 'mode: hover;', 'target: !*; {@overlay_link}' => $props['link'], ] : false, ]); $overlay = $this->el('div', [ 'class' => [ 'uk-{overlay_style}', 'uk-transition-{overlay_transition} {@overlay_display} {@overlay_cover}', 'uk-position-cover {@overlay_cover}', 'uk-position-{overlay_margin} {@overlay_cover}', ], ]); $position = $this->el('div', [ 'class' => [ 'uk-position-{overlay_position} [uk-position-{overlay_margin} {@overlay_style}]', 'uk-transition-{overlay_transition} {@overlay_display}' => !$element['overlay_transition_background'] || !$element['overlay_cover'], 'uk-blend-difference {@text_blend} {@!overlay_style}', 'uk-flex uk-flex-column {@content_expand}' ], ]); $content = $this->el('div', [ 'class' => [ $element['overlay_style'] ? 'uk-overlay' : 'uk-panel', 'uk-padding {@!overlay_padding} {@!overlay_style}', 'uk-padding-{!overlay_padding: |none}', 'uk-padding-remove {@overlay_padding: none} {@overlay_style}', 'uk-width-{overlay_maxwidth} {@!overlay_position: top|bottom}', 'uk-margin-remove-first-child', 'uk-flex-1 uk-flex uk-flex-column {@content_expand}' ], ]); if (!$element['overlay_cover']) { $position->attr($overlay->attrs); } // Link $link = include "{$__dir}/template-link.php"; ?> <?= $el($element, $attrs) ?> <?php if ($link_container) : ?> <?= $link_container($element) ?> <?php endif ?> <?= $this->render("{$__dir}/template-media", compact('props', 'element')) ?> <?php if ($props['media_overlay']) : ?> <div class="uk-position-cover" style="background-color:<?= $props['media_overlay'] ?>"></div> <?php endif ?> <?php if ($element['overlay_cover']) : ?> <?= $overlay($element, '') ?> <?php endif ?> <?php if ($props['title'] != '' || $props['meta'] != '' || $props['content'] != '' || ($props['link'] && ($props['link_text'] || $element['link_text']))) : ?> <?= $position($element, $content($element, $this->render("{$__dir}/template-content", compact('props', 'element', 'link')))) ?> <?php endif ?> <?php if ($link_container) : ?> <?= $link_container->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/overlay-slider_item/templates/template-video.php000064400000001422151666572150021430 0ustar00<?php if ($iframe = $this->iframeVideo($src)) { $video = $this->el('iframe', [ 'src' => $iframe, 'uk-responsive' => true, 'loading' => ['lazy {@image_loading}'], 'title' => $props['video_title'], 'class' => [ 'uk-disabled', ], 'uk-video' => [ 'automute: true;', ], ]); } else { $video = $this->el('video', [ 'src' => $src, 'controls' => false, 'loop' => true, 'autoplay' => true, 'muted' => true, 'playsinline' => true, 'preload' => ['none {@image_loading}'], 'uk-video' => true, ]); } $video->attr([ 'width' => $element['image_width'], 'height' => $element['image_height'], ]); return $video; builder/elements/overlay-slider_item/element.php000064400000002507151666572150016151 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['title', 'meta', 'content', 'link', 'hover_image', 'hover_video'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; } } /** * Auto-correct media rendering for dynamic content * * @var View $view */ $view = app(View::class); foreach (['', 'hover_'] as $prefix) { if ($node->props["{$prefix}image"] && $view->isVideo($node->props["{$prefix}image"])) { $node->props["{$prefix}video"] = $node->props["{$prefix}image"]; $node->props["{$prefix}image"] = null; } elseif ($node->props["{$prefix}video"] && $view->isImage($node->props["{$prefix}video"])) { $node->props["{$prefix}image"] = $node->props["{$prefix}video"]; $node->props["{$prefix}video"] = null; } } // Don't render element if content fields are empty return $node->props['image'] || $node->props['video'] || $node->props['hover_image'] || $node->props['hover_video']; }, ], ]; builder/elements/overlay-slider_item/element.json000064400000020762151666572150016336 0ustar00{ "@import": "./element.php", "name": "overlay-slider_item", "title": "Item", "width": 500, "placeholder": { "props": { "image": "${url:~yootheme/theme/assets/images/element-image-placeholder.png}", "video": "", "title": "Title", "meta": "", "content": "", "hover_image": "", "hover_video": "" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "image": { "label": "Image", "type": "image", "source": true, "show": "!video", "altRef": "%name%_alt" }, "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true, "show": "!image" }, "_media": { "type": "button-panel", "panel": "builder-overlay-slider-item-media", "text": "Edit Settings", "show": "image || video" }, "video_title": { "label": "Video Title", "source": true, "show": "video && $match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "image_alt": { "label": "Image Alt", "source": true, "show": "image && !video" }, "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item.", "source": true, "enable": "link" }, "hover_image": { "label": "Hover Image", "description": "Select an optional image that appears on hover.", "type": "image", "source": true, "show": "!hover_video" }, "hover_video": { "label": "Hover Video", "description": "Select an optional video that appears on hover.", "type": "video", "source": true, "show": "!hover_image" }, "item_element": "${builder.html_element_item}", "text_color": { "label": "Text Color", "description": "Set a different text color for this item.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true }, "text_color_hover": { "type": "checkbox", "text": "Inverse the text color on hover" }, "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "hover_image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "image", "video", "_media", "video_title", "image_alt", "title", "meta", "content", "link", "link_text", "link_aria_label", "hover_image", "hover_video" ] }, { "title": "Settings", "fields": [ { "label": "Item", "type": "group", "divider": true, "fields": [ "item_element" ] }, { "label": "Overlay", "type": "group", "divider": true, "fields": ["text_color", "text_color_hover"] }, { "label": "Image", "type": "group", "divider": true, "fields": ["image_focal_point"] }, { "label": "Hover Image", "type": "group", "fields": ["hover_image_focal_point"] } ] }, "${builder.advancedItem}" ] } }, "panels": { "builder-overlay-slider-item-media": { "title": "Media", "width": 500, "fields": { "media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes.", "type": "color" }, "media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image or video will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" }, "enable": "media_background" }, "media_overlay": { "label": "Overlay Color", "description": "Set an additional transparent overlay to soften the image or video.", "type": "color" } }, "fieldset": { "default": { "fields": ["media_background", "media_blend_mode", "media_overlay"] } } } } } builder/elements/overlay-slider_item/updates.php000064400000000340151666572150016156 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'image') && Arr::get($node->props, 'video')) { unset($node->props['video']); } }, ]; builder/elements/html/images/icon.svg000064400000000573151666572150013713 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="24" height="27" fill="none" stroke="#444" stroke-width="2" x="3" y="2" /> <polyline fill="none" stroke="#444" stroke-width="2" points="18.2,10.6 23.1,15.5 18.2,20.4" /> <polyline fill="none" stroke="#444" stroke-width="2" points="12.1,10.6 7.2,15.5 12.1,20.4" /> </svg> builder/elements/html/images/iconSmall.svg000064400000000530151666572150014675 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="1.01" points="12,7 15,10 12,13" /> <polyline fill="none" stroke="#444" stroke-width="1.01" points="8,7 5,10 8,13" /> <rect width="15" height="18" fill="none" stroke="#444" x="2.5" y="0.5" /> </svg> builder/elements/html/templates/content.php000064400000000143151666572150015147 0ustar00<?php if ($props['content'] != '') : ?> <div> <?= $props['content'] ?> </div> <?php endif ?> builder/elements/html/templates/template.php000064400000000115151666572150015307 0ustar00<?php $el = $this->el('div'); echo $el($props, $attrs, $props['content']); builder/elements/html/element.json000064400000003426151666572150013321 0ustar00{ "@import": "./element.php", "name": "html", "title": "Html", "icon": "${url:images/icon.svg}", "group": "basic", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "placeholder": { "props": { "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "type": "editor", "editor": "code", "mode": "text/html", "source": true }, "name": "${builder.name}", "source": "${builder.source}", "id": "${builder.id}", "status": "${builder.status}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "type": "editor", "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content"] }, "${builder.advanced}" ] } } } builder/elements/html/element.php000064400000000351151666572150013131 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return $node->props['content'] != ''; }, ], ]; builder/elements/layout/element.json000064400000000334151666572150013665 0ustar00{ "name": "layout", "title": "Layout", "container": true, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" } } builder/elements/layout/templates/content.php000064400000000051151666572150015516 0ustar00<?php echo $builder->render($children); builder/elements/layout/templates/template.php000064400000000635151666572150015667 0ustar00<?php if (isset($prefix)) { echo "<!-- Builder #{$prefix} -->"; } // Add elements inline css above the content to ensure css is present when rendered if (!empty($props['css'])) { echo $this->el('style', [ 'class' => 'uk-margin-remove-adjacent', 'data-id' => !empty($attrs['data-id']) ? "{$attrs['data-id']}-style" : false, ])([], $props['css']); } echo $builder->render($children); builder/elements/layout/updates.php000064400000002265151666572150013524 0ustar00<?php namespace YOOtheme; return [ '2.4.0-beta.0.3' => function ($node) { $rename = [ 'slider' => 'overlay-slider', 'slider_item' => 'overlay-slider_item', 'map_marker' => 'map_item', ]; $apply = function ($node) use (&$apply, $rename) { if (isset($node->type) && !empty($rename[$node->type])) { $node->type = $rename[$node->type]; } if (!empty($node->children)) { array_map($apply, $node->children); } }; $apply($node); }, '2.3.0-beta.0.1' => function ($node) { $rename = [ 'joomla_module' => 'module', 'wordpress_widget' => 'module', 'joomla_position' => 'module_position', 'wordpress_area' => 'module_position', ]; $apply = function ($node) use (&$apply, $rename) { if (isset($node->type) && !empty($rename[$node->type])) { $node->type = $rename[$node->type]; } if (!empty($node->children)) { array_map($apply, $node->children); } }; $apply($node); }, ]; builder/elements/text/updates.php000064400000000667151666572150013177 0ustar00<?php namespace YOOtheme; return [ '2.8.0-beta.0.13' => function ($node) { if (Arr::get($node->props, 'text_size') && !Arr::get($node->props, 'text_style')) { $node->props['text_style'] = Arr::get($node->props, 'text_size'); } unset($node->props['text_size']); }, '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/text/templates/content.php000064400000000133151666572150015166 0ustar00<?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> builder/elements/text/templates/template.php000064400000001452151666572150015334 0ustar00<?php $el = $this->el($props['html_element'] ?: 'div', [ 'class' => [ 'uk-panel', 'uk-text-{text_style}', 'uk-text-{text_color}', 'uk-dropcap {@dropcap}', 'uk-column-{column}[@{column_breakpoint}]', 'uk-column-divider {@column} {@column_divider}', ], ]); // Column $breakpoints = ['xl', 'l', 'm', 's', '']; if ($props['column'] && false !== $index = array_search($props['column_breakpoint'], $breakpoints)) { [, $columns] = explode('-', $props['column']); foreach (array_splice($breakpoints, $index + 1, 4) as $breakpoint) { if ($columns < 2) { break; } $el->attr('class', ['uk-column-1-' . (--$columns) . ($breakpoint ? "@{$breakpoint}" : '')]); } } echo $el($props, $attrs, $props['content']); builder/elements/text/element.json000064400000017040151666572150013336 0ustar00{ "@import": "./element.php", "name": "text", "title": "Text", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "margin": "default", "column_breakpoint": "m" }, "placeholder": { "props": { "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "type": "editor", "source": true }, "dropcap": { "label": "Drop Cap", "description": "Display the first letter of the paragraph as a large initial.", "type": "checkbox", "text": "Enable drop cap" }, "text_style": { "label": "Text Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Meta": "meta", "Lead": "lead", "Small": "small", "Large": "large" } }, "text_color": { "label": "Text Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" } }, "column": { "label": "Columns", "description": "Set the number of text columns.", "type": "select", "options": { "None": "", "Halves": "1-2", "Thirds": "1-3", "Quarters": "1-4", "Fifths": "1-5", "Sixths": "1-6" } }, "column_divider": { "description": "Show a divider between text columns.", "type": "checkbox", "text": "Show dividers", "enable": "column" }, "column_breakpoint": { "label": "Columns Breakpoint", "description": "Set the device width from which the text columns should apply.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "column" }, "html_element": { "label": "HTML Element", "description": "Define the purpose and structure of the content or give it no semantic meaning.", "type": "select", "options": { "div": "", "address": "address", "aside": "aside", "footer": "footer" } }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content"] }, { "title": "Settings", "fields": [ { "label": "Text", "type": "group", "divider": true, "fields": [ "dropcap", "text_style", "text_color", "column", "column_divider", "column_breakpoint", "html_element" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/text/images/icon.svg000064400000000512151666572150013724 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="26" height="2" fill="#444" x="2" y="8" /> <rect width="26" height="2" fill="#444" x="2" y="12" /> <rect width="26" height="2" fill="#444" x="2" y="16" /> <rect width="20" height="2" fill="#444" x="2" y="20" /> </svg> builder/elements/text/images/iconSmall.svg000064400000000511151666572150014714 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="18" height="1" fill="#444" x="1" y="5" /> <rect width="18" height="1" fill="#444" x="1" y="8" /> <rect width="18" height="1" fill="#444" x="1" y="11" /> <rect width="14" height="1" fill="#444" x="1" y="14" /> </svg> builder/elements/text/element.php000064400000000351151666572150013151 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return $node->props['content'] != ''; }, ], ]; builder/elements/gallery/element.json000064400000160566151666572150014025 0ustar00{ "@import": "./element.php", "name": "gallery", "title": "Gallery", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_title": true, "show_meta": true, "show_content": true, "show_link": true, "show_hover_image": true, "show_hover_video": true, "grid_default": "1", "grid_medium": "3", "filter_style": "tab", "filter_all": true, "filter_position": "top", "filter_align": "left", "filter_grid_width": "auto", "filter_grid_breakpoint": "m", "lightbox_bg_close": true, "overlay_mode": "cover", "overlay_hover": true, "overlay_style": "overlay-primary", "overlay_position": "center", "text_color": "light", "overlay_transition": "fade", "title_hover_style": "reset", "title_element": "h3", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "link_text": "Read more", "link_style": "default", "text_align": "center", "margin": "default", "item_animation": true }, "placeholder": { "children": [ { "type": "gallery_item", "props": {} }, { "type": "gallery_item", "props": {} }, { "type": "gallery_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "item": "gallery_item", "media": [ { "type": "image", "item": { "title": "title", "image": "src" } }, { "type": "video", "item": { "title": "title", "video": "src" } } ] }, "show_title": { "label": "Display", "type": "checkbox", "text": "Show the title" }, "show_meta": { "type": "checkbox", "text": "Show the meta text" }, "show_content": { "type": "checkbox", "text": "Show the content" }, "show_link": { "type": "checkbox", "text": "Show the link" }, "show_hover_image": { "type": "checkbox", "text": "Show the hover image" }, "show_hover_video": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the hover video" }, "grid_masonry": { "label": "Masonry", "description": "Create a gap-free masonry layout if grid items have different heights. Pack items into columns with the most room or show them in their natural order. Optionally, use a parallax animation to move columns while scrolling until they justify at the bottom.", "type": "select", "options": { "None": "", "Pack": "pack", "Next": "next" } }, "grid_parallax": { "label": "Parallax", "description": "The parallax animation moves single grid columns at different speeds while scrolling. Define the vertical parallax offset in pixels. Alternatively, move columns with different heights until they justify at the bottom.", "type": "range", "attrs": { "min": 0, "max": 600, "step": 10 } }, "grid_parallax_justify": { "type": "checkbox", "text": "Justify columns at the bottom" }, "grid_parallax_start": { "enable": "grid_parallax || grid_parallax_justify" }, "grid_parallax_end": { "enable": "grid_parallax || grid_parallax_justify" }, "grid_column_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "grid_row_gap": { "label": "Row Gap", "description": "Set the size of the gap between the grid rows.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "grid_divider": { "label": "Divider", "description": "Show a divider between grid columns.", "type": "checkbox", "text": "Show dividers", "enable": "grid_column_gap != 'collapse' && grid_row_gap != 'collapse'" }, "grid_column_align": { "label": "Alignment", "description": "Center grid columns horizontally and rows vertically.", "type": "checkbox", "text": "Center columns", "enable": "!grid_masonry" }, "grid_row_align": { "type": "checkbox", "text": "Center rows", "enable": "!grid_masonry" }, "grid_default": { "label": "Phone Portrait", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "grid_small": { "label": "Phone Landscape", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "Inherit": "", "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "grid_medium": { "label": "Tablet Landscape", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "Inherit": "", "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "grid_large": { "label": "Desktop", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "Inherit": "", "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "grid_xlarge": { "label": "Large Screens", "description": "Set the number of grid columns for each breakpoint. <i>Inherit</i> refers to the number of columns on the next smaller screen size. <i>Auto</i> expands the columns to the width of their items filling the rows accordingly.", "type": "select", "options": { "Inherit": "", "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6", "Auto": "auto" } }, "filter": { "label": "Filter", "type": "checkbox", "text": "Enable filter navigation" }, "filter_animation": { "label": "Animation", "description": "Select an animation that will be applied to the content items when filtering between them.", "type": "select", "options": { "None": "false", "Slide": "", "Fade": "fade", "Delayed Fade": "delayed-fade" }, "enable": "filter" }, "filter_order": { "label": "Navigation Order", "description": "Order the filter navigation alphabetically or by defining the order manually.", "type": "select", "options": { "Alphabetical": "", "Manual": "manual" }, "enable": "filter" }, "filter_reverse": { "type": "checkbox", "text": "Reverse order", "enable": "filter" }, "filter_order_manual": { "label": "Manual Order", "description": "Enter a comma-separated list of tags to manually order the filter navigation.", "enable": "filter && filter_order == 'manual'" }, "filter_style": { "label": "Style", "description": "Select the filter navigation style. The pill and divider styles are only available for horizontal Subnavs.", "type": "select", "options": { "Tabs": "tab", "Subnav (Nav)": "subnav", "Subnav Divider (Nav)": "subnav-divider", "Subnav Pill (Nav)": "subnav-pill" }, "enable": "filter" }, "filter_all": { "label": "All Items", "type": "checkbox", "text": "Show filter control for all items", "enable": "filter" }, "filter_all_label": { "attrs": { "placeholder": "All" }, "enable": "filter && filter_all" }, "filter_position": { "label": "Position", "description": "Position the filter navigation at the top, left or right. A larger style can be applied to left and right navigation.", "type": "select", "options": { "Top": "top", "Left": "left", "Right": "right" }, "enable": "filter" }, "filter_style_primary": { "type": "checkbox", "text": "Primary navigation", "enable": "filter && $match(filter_position, 'left|right') && $match(filter_style, '^subnav')" }, "filter_align": { "label": "Alignment", "description": "Align the filter controls.", "type": "select", "options": { "Left": "left", "Right": "right", "Center": "center", "Justify": "justify" }, "enable": "filter && filter_position == 'top'" }, "filter_margin": { "label": "Margin", "description": "Set the vertical margin.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "filter && filter_position == 'top'" }, "filter_grid_width": { "label": "Grid Width", "description": "Define the width of the filter navigation. Choose between percent and fixed widths or expand columns to the width of their content.", "type": "select", "options": { "Auto": "auto", "50%": "1-2", "33%": "1-3", "25%": "1-4", "20%": "1-5", "Small": "small", "Medium": "medium", "Large": "large" }, "enable": "filter && $match(filter_position, 'left|right')" }, "filter_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between between the filter navigation and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "filter && $match(filter_position, 'left|right')" }, "filter_grid_row_gap": { "label": "Grid Row Gap", "description": "Set the size of the gap if the grid items stack.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "filter && $match(filter_position, 'left|right')" }, "filter_grid_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "filter && $match(filter_position, 'left|right')" }, "lightbox": { "label": "Lightbox", "type": "checkbox", "text": "Enable lightbox gallery" }, "lightbox_controls": { "type": "checkbox", "text": "Show controls always", "enable": "lightbox" }, "lightbox_counter": { "type": "checkbox", "text": "Show counter", "enable": "lightbox" }, "lightbox_bg_close": { "type": "checkbox", "text": "Close on background click", "enable": "lightbox" }, "lightbox_animation": { "label": "Animation", "description": "Select the transition between two slides.", "type": "select", "options": { "Slide": "", "Fade": "fade", "Scale": "scale" }, "enable": "lightbox" }, "lightbox_nav": { "label": "Navigation", "description": "Select the navigation type.", "type": "select", "options": { "Slidenav": "", "Dotnav": "dotnav", "Thumbnav": "thumbnav" }, "enable": "lightbox" }, "lightbox_image_width": { "attrs": { "placeholder": "auto" }, "enable": "lightbox" }, "lightbox_image_height": { "attrs": { "placeholder": "auto" }, "enable": "lightbox" }, "lightbox_image_orientation": { "label": "Image Orientation", "description": "Width and height will be flipped accordingly, if the image is in portrait or landscape format.", "type": "checkbox", "text": "Allow mixed image orientations", "enable": "lightbox" }, "lightbox_video_autoplay": { "label": "Video Autoplay", "description": "Enable autoplay or play a muted inline video without controls.", "type": "select", "options": { "None": "", "Autoplay": "true", "Inline": "inline" }, "enable": "lightbox" }, "lightbox_text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true, "enable": "lightbox" }, "title_display": { "label": "Show Title", "description": "Display the title inside the overlay, as the lightbox caption or both.", "type": "select", "options": { "Overlay + Lightbox": "", "Overlay only": "item", "Lightbox only": "lightbox" }, "enable": "show_title && lightbox" }, "content_display": { "label": "Show Content", "description": "Display the content inside the overlay, as the lightbox caption or both.", "type": "select", "options": { "Overlay + Lightbox": "", "Overlay only": "item", "Lightbox only": "lightbox" }, "enable": "show_content && lightbox" }, "image_expand": { "label": "Height", "description": "Expand the height of the image to fill the available space in the item.", "type": "checkbox", "text": "Expand image", "enable": "!grid_masonry" }, "overlay_link": { "label": "Link", "description": "Link the whole overlay if a link exists.", "type": "checkbox", "text": "Link overlay", "enable": "show_link" }, "item_maxwidth": { "type": "select", "label": "Max Width", "description": "Set the maximum width.", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" } }, "overlay_mode": { "label": "Mode", "description": "When using cover mode, you need to set the text color manually.", "type": "select", "options": { "Cover": "cover", "Caption": "caption" } }, "overlay_hover": { "type": "checkbox", "text": "Display overlay on hover" }, "overlay_transition_background": { "type": "checkbox", "text": "Animate background only", "enable": "overlay_hover && overlay_mode == 'cover' && overlay_style" }, "overlay_style": { "label": "Style", "description": "Select the style for the overlay.", "type": "select", "options": { "None": "", "Overlay Default": "overlay-default", "Overlay Primary": "overlay-primary", "Tile Default": "tile-default", "Tile Muted": "tile-muted", "Tile Primary": "tile-primary", "Tile Secondary": "tile-secondary" } }, "overlay_position": { "label": "Position", "description": "Select the overlay or content position.", "type": "select", "options": { "Top": "top", "Bottom": "bottom", "Left": "left", "Right": "right", "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right", "Center": "center", "Center Left": "center-left", "Center Right": "center-right" } }, "overlay_margin": { "label": "Margin", "description": "Apply a margin between the overlay and the image container.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large" }, "enable": "overlay_style" }, "overlay_padding": { "label": "Padding", "description": "Set the padding between the overlay and its content.", "type": "select", "options": { "Default": "", "Small": "small", "Large": "large", "None": "none" } }, "content_expand": { "label": "Height", "description": "Expand the height of the content to fill the available space in the overlay and push the link to the bottom.", "type": "checkbox", "text": "Expand content" }, "overlay_maxwidth": { "label": "Max Width", "description": "Set the maximum content width.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "!$match(overlay_position, '^(top|bottom)$')" }, "text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" } }, "text_color_hover": { "type": "checkbox", "text": "Inverse the text color on hover", "enable": "!overlay_style && (show_hover_image || show_hover_video) || overlay_style && overlay_mode == 'cover' && overlay_hover && overlay_transition_background" }, "text_blend": { "type": "checkbox", "text": "Blend with image", "enable": "!overlay_style" }, "overlay_transition": { "label": "Transition", "description": "Select a transition for the overlay when it appears on hover.", "type": "select", "options": { "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "overlay_hover" }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" } }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" } }, "image_orientation": { "label": "Image Orientation", "description": "Landscape and portrait images are centered within the grid cells. Width and height will be flipped when images are resized.", "type": "checkbox", "text": "Allow mixed image orientations" }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly" }, "image_transition": { "label": "Transition", "description": "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.", "type": "select", "options": { "None (Fade if hover image)": "", "Scale Up": "scale-up", "Scale Down": "scale-down" } }, "image_transition_border": { "type": "checkbox", "text": "Border" }, "image_min_height": { "label": "Min Height", "description": "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.", "type": "range", "attrs": { "min": 200, "max": 500, "step": 20 } }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "!image_transition_border && !image_box_decoration" }, "image_box_shadow": { "label": "Box Shadow", "description": "Select the image box shadow size.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" } }, "image_hover_box_shadow": { "label": "Hover Box Shadow", "description": "Select the image box shadow size on hover.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" } }, "image_box_decoration": { "label": "Box Decoration", "description": "Select the image box decoration style.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Floating Shadow": "shadow", "Mask": "mask" } }, "image_box_decoration_inverse": { "type": "checkbox", "text": "Inverse style", "enable": "$match(image_box_decoration, '^(default|primary|secondary)$')" }, "title_transition": { "label": "Transition", "description": "Select a transition for the title when the overlay appears on hover.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "show_title && overlay_hover && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_link": { "label": "Link", "description": "Link the title if a link exists.", "type": "checkbox", "text": "Link title", "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox) && show_link" }, "title_hover_style": { "label": "Hover Style", "description": "Set the hover style for a linked title.", "type": "select", "options": { "None": "reset", "Heading Link": "heading", "Default Link": "" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox) && show_link && (title_link || overlay_link)" }, "title_decoration": { "label": "Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "title_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_title && (title_display != 'lightbox' && lightbox || !lightbox)" }, "meta_transition": { "label": "Transition", "description": "Select a transition for the meta text when the overlay appears on hover.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "show_meta && overlay_hover" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_meta" }, "meta_align": { "label": "Alignment", "description": "Align the meta text.", "type": "select", "options": { "Above Title": "above-title", "Below Title": "below-title", "Below Content": "below-content" }, "enable": "show_meta" }, "meta_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_meta" }, "meta_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_meta" }, "content_transition": { "label": "Transition", "description": "Select a transition for the content when the overlay appears on hover.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "show_content && overlay_hover && (content_display != 'lightbox' && lightbox || !lightbox)" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox)" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_content && (content_display != 'lightbox' && lightbox || !lightbox)" }, "link_target": { "label": "Target", "type": "checkbox", "text": "Open in a new window", "enable": "show_link && !lightbox" }, "link_text": { "label": "Text", "description": "Enter the text for the link.", "enable": "show_link" }, "link_aria_label": { "label": "ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text.", "enable": "show_link" }, "link_transition": { "label": "Transition", "description": "Select a transition for the link when the overlay appears on hover.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "show_link && overlay_hover" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "show_link" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "item_animation": "${builder.item_animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-nav", ".el-item", ".el-image", ".el-title", ".el-meta", ".el-content", ".el-link", ".el-hover-image" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "content", "show_title", "show_meta", "show_content", "show_link", "show_hover_image", "show_hover_video" ] }, { "title": "Settings", "fields": [ { "label": "Gallery", "type": "group", "divider": true, "fields": [ "grid_masonry", "grid_parallax", "grid_parallax_justify", { "label": "Parallax Start/End", "description": "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the element's height.", "type": "grid", "width": "1-2", "fields": ["grid_parallax_start", "grid_parallax_end"] }, "grid_column_gap", "grid_row_gap", "grid_divider", "grid_column_align", "grid_row_align" ] }, { "label": "Columns", "type": "group", "divider": true, "fields": [ "grid_default", "grid_small", "grid_medium", "grid_large", "grid_xlarge" ] }, { "label": "Filter", "type": "group", "divider": true, "fields": [ "filter", "filter_animation", "filter_order", "filter_reverse", "filter_order_manual", "filter_style", "filter_all", "filter_all_label", "filter_position", "filter_style_primary", "filter_align", "filter_margin", "filter_grid_width", "filter_grid_column_gap", "filter_grid_row_gap", "filter_grid_breakpoint" ] }, { "label": "Lightbox", "type": "group", "divider": true, "fields": [ "lightbox", "lightbox_controls", "lightbox_counter", "lightbox_bg_close", "lightbox_animation", "lightbox_nav", { "label": "Image Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["lightbox_image_width", "lightbox_image_height"] }, "lightbox_image_orientation", "lightbox_video_autoplay", "lightbox_text_color", "title_display", "content_display" ] }, { "label": "Item", "type": "group", "divider": true, "fields": [ "image_expand", "overlay_link", "item_maxwidth" ] }, { "label": "Overlay", "type": "group", "divider": true, "fields": [ "overlay_mode", "overlay_hover", "overlay_transition_background", "overlay_style", "overlay_position", "overlay_margin", "overlay_padding", "content_expand", "overlay_maxwidth", "text_color", "text_color_hover", "text_blend", "overlay_transition" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_orientation", "image_loading", "image_transition", "image_transition_border", "image_min_height", "image_border", "image_box_shadow", "image_hover_box_shadow", "image_box_decoration", "image_box_decoration_inverse" ] }, { "label": "Title", "type": "group", "divider": true, "fields": [ "title_transition", "title_style", "title_link", "title_hover_style", "title_decoration", "title_font_family", "title_color", "title_element", "title_margin" ] }, { "label": "Meta", "type": "group", "divider": true, "fields": [ "meta_transition", "meta_style", "meta_color", "meta_align", "meta_element", "meta_margin" ] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_transition", "content_style", "content_margin"] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", "link_text", "link_aria_label", "link_transition", "link_style", "link_size", "link_fullwidth", "link_margin" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "item_animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } } } builder/elements/gallery/images/icon.svg000064400000001347151666572150014406 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="10" height="10" fill="none" stroke="#444" stroke-width="2" x="3" y="3" /> <rect width="10" height="10" fill="none" stroke="#444" stroke-width="2" x="17" y="3" /> <rect width="10" height="10" fill="none" stroke="#444" stroke-width="2" x="3" y="17" /> <rect width="10" height="10" fill="none" stroke="#444" stroke-width="2" x="17" y="17" /> <path fill="none" stroke="#444" stroke-width="2" d="M10,6H6v4" /> <path fill="none" stroke="#444" stroke-width="2" d="M24,10V6H20" /> <path fill="none" stroke="#444" stroke-width="2" d="M20,24h4V20" /> <path fill="none" stroke="#444" stroke-width="2" d="M6,20v4h4" /> </svg> builder/elements/gallery/images/iconSmall.svg000064400000001167151666572150015377 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" d="M6.5 4.5h-2v2" /> <path fill="none" stroke="#444" d="M6.5 15.5h-2v-2" /> <path fill="none" stroke="#444" d="M13.5 15.5h2v-2" /> <path fill="none" stroke="#444" d="M13.5 4.5h2v2" /> <rect width="6" height="6" fill="none" stroke="#444" x="2.5" y="2.5" /> <rect width="6" height="6" fill="none" stroke="#444" x="11.5" y="2.5" /> <rect width="6" height="6" fill="none" stroke="#444" x="11.5" y="11.5" /> <rect width="6" height="6" fill="none" stroke="#444" x="2.5" y="11.5" /> </svg> builder/elements/gallery/element.php000064400000003634151666572150013633 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { $node->tags = []; // Filter tags if (!empty($node->props['filter'])) { foreach ($node->children as $child) { $child->tags = []; foreach (explode(',', $child->props['tags'] ?? '') as $tag) { // Strip tags as precaution if tags are mapped dynamically $tag = strip_tags($tag); if ($key = str_replace(' ', '-', trim($tag))) { $child->tags[$key] = trim($tag); } } $node->tags += $child->tags; } if ( $node->props['filter_order'] === 'manual' && $node->props['filter_order_manual'] ) { $order = array_map( 'strtolower', array_map('trim', explode(',', $node->props['filter_order_manual'])), ); uasort($node->tags, function ($a, $b) use ($order) { $iA = array_search(strtolower($a), $order); $iB = array_search(strtolower($b), $order); return $iA !== false && $iB !== false ? $iA - $iB : ($iA !== false ? -1 : ($iB !== false ? 1 : strnatcmp($a, $b))); }); } else { natsort($node->tags); } if ($node->props['filter_reverse']) { $node->tags = array_reverse($node->tags, true); } } }, ], ]; builder/elements/gallery/updates.php000064400000015312151666572150013643 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset( $node->props['grid_mode'], $node->props['image_box_shadow_bottom'] ); }, '4.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'grid_masonry')) { $node->props['grid_masonry'] = 'next'; } }, '4.0.0-beta.9' => function ($node) { if (Arr::get($node->props, 'overlay_link') && Arr::get($node->props, 'css')) { $node->props['css'] = str_replace('.el-item', '.el-item > *', $node->props['css']); } }, '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '2.4.14.2' => function ($node) { $node->props['animation'] = Arr::get($node->props, 'item_animation'); $node->props['item_animation'] = true; }, '2.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'item_maxwidth') === 'xxlarge') { $node->props['item_maxwidth'] = '2xlarge'; } }, '2.0.0-beta.8.1' => function ($node) { Arr::updateKeys($node->props, ['grid_align' => 'grid_column_align']); }, '2.0.0-beta.5.1' => function ($node) { Arr::updateKeys($node->props, [ 'link_type' => function ($value) { if ($value === 'content') { return [ 'title_link' => true, 'link_text' => '', ]; } elseif ($value === 'element') { return [ 'overlay_link' => true, 'link_text' => '', ]; } }, ]); }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'divider' => 'grid_divider', 'filter_breakpoint' => 'filter_grid_breakpoint', 'gutter' => fn($value) => ['grid_column_gap' => $value, 'grid_row_gap' => $value], 'filter_gutter' => fn($value) => [ 'filter_grid_column_gap' => $value, 'filter_grid_row_gap' => $value, ], ]); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } }, '1.19.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { $node->props['meta_align'] = 'above-title'; } if (Arr::get($node->props, 'meta_align') === 'bottom') { $node->props['meta_align'] = 'below-title'; } $node->props['link_type'] = 'element'; }, '1.18.10.3' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { if (!empty($node->props['meta_margin'])) { $node->props['title_margin'] = $node->props['meta_margin']; } $node->props['meta_margin'] = ''; } }, '1.18.0' => function ($node) { if ( !isset($node->props['grid_parallax']) && Arr::get($node->props, 'grid_mode') === 'parallax' ) { $node->props['grid_parallax'] = Arr::get($node->props, 'grid_parallax_y'); } if (!isset($node->props['show_hover_image'])) { $node->props['show_hover_image'] = Arr::get($node->props, 'show_image2'); } if ( !isset($node->props['image_box_decoration']) && Arr::get($node->props, 'image_box_shadow_bottom') === true ) { $node->props['image_box_decoration'] = 'shadow'; } if ( !isset($node->props['meta_color']) && Arr::get($node->props, 'meta_style') === 'muted' ) { $node->props['meta_color'] = 'muted'; $node->props['meta_style'] = ''; } }, ]; builder/elements/gallery/templates/template.php000064400000011427151666572150016012 0ustar00<?php // Resets if ($props['overlay_link']) { $props['title_link'] = ''; } // Override default settings if (!$props['grid_parallax'] && $props['grid_parallax_justify']) { $props['grid_parallax'] = '0'; } if ($props['content_expand']) { if (in_array($props['overlay_position'], ['top', 'bottom'])) { $props['overlay_position'] = 'cover'; } if (in_array($props['overlay_position'], ['top-center', 'center', 'bottom-center'])) { $props['overlay_position'] = 'center-horizontal'; } if (in_array($props['overlay_position'], ['top-left', 'center-left', 'bottom-left'])) { $props['overlay_position'] = 'left'; } if (in_array($props['overlay_position'], ['top-right', 'center-right', 'bottom-right'])) { $props['overlay_position'] = 'right'; } } // New logic shortcuts $props['overlay_cover'] = $props['overlay_style'] && $props['overlay_mode'] == 'cover'; $el = $this->el('div', [ 'uk-filter' => $tags ? [ 'target: .js-filter;', 'animation: {filter_animation};', ] : false, ]); // Grid $grid = $this->el('div', [ 'class' => [ 'uk-grid', 'js-filter' => $tags, 'uk-child-width-[1-{@!grid_default: auto}]{grid_default}', 'uk-child-width-[1-{@!grid_small: auto}]{grid_small}@s', 'uk-child-width-[1-{@!grid_medium: auto}]{grid_medium}@m', 'uk-child-width-[1-{@!grid_large: auto}]{grid_large}@l', 'uk-child-width-[1-{@!grid_xlarge: auto}]{grid_xlarge}@xl', 'uk-flex-center {@grid_column_align} {@!grid_masonry}', 'uk-flex-middle {@grid_row_align} {@!grid_masonry}', $props['grid_column_gap'] == $props['grid_row_gap'] ? 'uk-grid-{grid_column_gap}' : '[uk-grid-column-{grid_column_gap}] [uk-grid-row-{grid_row_gap}]', 'uk-grid-divider {@grid_divider} {@!grid_column_gap: collapse} {@!grid_row_gap:collapse}' => count($children) > 1, ], 'uk-grid' => $this->expr([ 'masonry: {grid_masonry};', 'parallax: {grid_parallax};', 'parallax-justify: true; {@grid_parallax_justify}', 'parallax-start: {grid_parallax_start};' => $props['grid_parallax'] || $props['grid_parallax_justify'], 'parallax-end: {grid_parallax_end};' => $props['grid_parallax'] || $props['grid_parallax_justify'], ], $props) ?: count($children) > 1, 'uk-lightbox' => $props['lightbox'] ? [ 'toggle: a[data-type];', 'animation: {lightbox_animation};', 'nav: {lightbox_nav}; slidenav: false;', 'delay-controls: 0;' => $props['lightbox_controls'], 'counter: true;' => $props['lightbox_counter'], 'bg-close: false;' => !$props['lightbox_bg_close'], 'video-autoplay: {lightbox_video_autoplay};', ] : false, ]); $cell = $this->el('div', [ 'class' => [ 'uk-flex uk-flex-center uk-flex-middle {@image_orientation}', // Can't use `uk-grid-match` on the parent because `flex-wrap: warp` creates a multi-line flex container which doesn't shrink the child height if its content is larger 'uk-flex {@!grid_masonry} {@image_expand}', 'uk-flex-{text_align}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]] {@!grid_masonry} {@image_expand}', ], ]); // Filter $filter_grid = $this->el('div', [ 'class' => [ 'uk-grid', 'uk-child-width-expand', $props['filter_grid_column_gap'] == $props['filter_grid_row_gap'] ? 'uk-grid-{filter_grid_column_gap}' : '[uk-grid-column-{filter_grid_column_gap}] [uk-grid-row-{filter_grid_row_gap}]', ], 'uk-grid' => count($children) > 1, ]); $filter_cell = $this->el('div', [ 'class' => [ 'uk-width-{filter_grid_width}@{filter_grid_breakpoint}', 'uk-flex-last@{filter_grid_breakpoint} {@filter_position: right}', ], ]); ?> <?= $el($props, $attrs) ?> <?php if ($tags) : ?> <?php if ($filter_horizontal = in_array($props['filter_position'], ['left', 'right'])) : ?> <?= $filter_grid($props) ?> <?= $filter_cell($props) ?> <?php endif ?> <?= $this->render("{$__dir}/template-nav", compact('props')) ?> <?php if ($filter_horizontal) : ?> </div> <div> <?php endif ?> <?= $grid($props) ?> <?php foreach ($children as $child) : ?> <?= $cell($props, ['data-tag' => $child->tags], $builder->render($child, ['element' => $props])) ?> <?php endforeach ?> <?= $grid->end() ?> <?php if ($filter_horizontal) : ?> </div> </div> <?php endif ?> <?php else : ?> <?= $grid($props) ?> <?php foreach ($children as $child) : ?> <?= $cell($props, $builder->render($child, ['element' => $props])) ?> <?php endforeach ?> <?= $grid->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/gallery/templates/template-nav.php000064400000003604151666572150016572 0ustar00<?php // => grid $nav = $this->el('ul', [ 'class' => [ 'el-nav', 'uk-{filter_style} {@filter_style: tab}', 'uk-margin[-{filter_margin}] {@filter_position: top}', ], 'uk-scrollspy-class' => in_array($props['animation'], ['none', 'parallax']) || !$props['item_animation'] ? false : (!empty($props['animation']) ? ['uk-animation-{0}' => $props['animation']] : true), ]); $nav_horizontal = [ 'uk-subnav {@filter_style: subnav.*}', 'uk-{filter_style} {@filter_style: subnav-.*}', 'uk-flex-{filter_align: right|center}', 'uk-child-width-expand {@filter_align: justify}', ]; $nav_vertical = [ 'uk-nav uk-nav-{0} [uk-text-left {@text_align}] {@filter_style: subnav.*}' => $props['filter_style_primary'] ? 'primary' : 'default', 'uk-tab-{filter_position} {@filter_style: tab}', ]; $nav_attrs = $props['filter_position'] === 'top' ? [ 'class' => $nav_horizontal, 'uk-margin' => (bool) preg_match('/^subnav/', $props['filter_style']), ] : [ 'class' => $nav_vertical, 'uk-toggle' => [ "cls: {$this->expr(array_merge($nav_vertical, $nav_horizontal), $props)};", 'mode: media;', 'media: @{filter_grid_breakpoint};', ], ]; ?> <?= $nav($props, $nav_attrs) ?> <?php if ($props['filter_all']) : ?> <li class="uk-active" uk-filter-control><a href><?= $this->trans($props['filter_all_label'] ?: 'All') ?></a></li> <?php endif ?> <?php foreach ($tags as $tag => $name) : ?> <li <?= $this->attrs([ 'class' => ['uk-active' => $tag === array_key_first($tags) && !$props['filter_all']], 'uk-filter-control' => json_encode(['filter' => '[data-tag~="' . str_replace('"', '\"', $tag) . '"]']), ]) ?>> <a href><?= $name ?></a> </li> <?php endforeach ?> <?= $nav->end() ?> builder/elements/gallery/templates/content.php000064400000000522151666572150015643 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/column/element.json000064400000037561151666572150013661 0ustar00{ "@import": "./element.php", "name": "column", "title": "Column", "container": true, "width": 500, "defaults": { "position_sticky_breakpoint": "m", "image_position": "center-center" }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "image": { "label": "Image", "description": "Upload a background image.", "type": "image", "source": true, "show": "!video" }, "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true, "show": "!image" }, "_media": { "type": "button-panel", "panel": "builder-column-media", "text": "Edit Settings", "show": "image || video" }, "video_title": { "label": "Video Title", "source": true, "show": "video && $match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "vertical_align": { "label": "Vertical Alignment", "description": "Vertically align the elements in the column.", "type": "select", "options": { "Top": "", "Middle": "middle", "Bottom": "bottom" } }, "style": { "label": "Style", "type": "select", "options": { "None": "", "Card Default": "card-default", "Card Primary": "card-primary", "Card Secondary": "card-secondary", "Card Hover": "card-hover", "Tile Default": "tile-default", "Tile Muted": "tile-muted", "Tile Primary": "tile-primary", "Tile Secondary": "tile-secondary" } }, "preserve_color": { "type": "checkbox", "text": "Preserve text color", "enable": "$match(style, 'tile-')" }, "background_color": { "label": "Background Color", "type": "color", "enable": "!style && !background_parallax_background" }, "_background_parallax_button": { "description": "Define a custom background color or a color parallax animation instead of using a predefined style.", "type": "button-panel", "text": "Edit Parallax", "panel": "background-parallax", "enable": "!style" }, "text_color": { "label": "Text Color", "description": "Force a light or dark color for text, buttons and controls on the image or video background.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true, "enable": "!style || ($match(style, 'tile-') && (image || video))" }, "padding": { "label": "Padding", "description": "Set the padding.", "type": "select", "options": { "Default": "", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge", "None": "none" }, "enable": "style || background_color || background_parallax_background || image || video" }, "html_element": "${builder.html_element}", "position_sticky": { "label": "Position Sticky", "type": "select", "options": { "None": "", "Elements within Column": "column", "Column within Row": "row", "Column within Section": "section" } }, "position_blend": { "description": "Stick the column or its elements to the top of the viewport while scrolling down. They will stop being sticky when they reach the bottom of the containing column, row or section. Optionally, blend all elements with the page content.", "type": "checkbox", "text": "Blend with page content", "enable": "position_sticky" }, "position_sticky_offset": { "label": "Top Offset", "attrs": { "placeholder": "0" }, "enable": "position_sticky" }, "position_sticky_offset_end": { "label": "Bottom Offset", "attrs": { "placeholder": "0" }, "enable": "position_sticky" }, "position_sticky_breakpoint": { "label": "Position Sticky Breakpoint", "description": "Make the column or its elements sticky only from this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "position_sticky" }, "prevent_collapse": { "label": "Empty Dynamic Content", "description": "Don't collapse the column if dynamically loaded content is empty.", "type": "checkbox", "text": "Don't collapse column" }, "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-column</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-column"] } } }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["image", "video", "_media", "video_title"] }, { "title": "Settings", "fields": [ "vertical_align", "style", "preserve_color", "text_color", "padding", "html_element", "position_sticky", "position_blend", { "description": "Set the sticky top offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh - 50%</code>. Percent relates to the column's height. Set a bottom offset if the sticky content is larger than the viewport.", "name": "_position_sticky_offset", "type": "grid", "width": "1-2", "fields": ["position_sticky_offset", "position_sticky_offset_end"] }, "position_sticky_breakpoint", "prevent_collapse" ] }, { "title": "Advanced", "fields": ["source", "id", "class", "attributes", "css"] } ] } }, "panels": { "builder-column-media": { "title": "Image/Video", "width": 500, "fields": { "image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } }, "video_width": { "label": "Width", "type": "number" }, "video_height": { "label": "Height", "type": "number" }, "media_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "show": "image && !video" }, "image_size": { "label": "Image Size", "description": "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.", "type": "select", "options": { "Auto": "", "Cover": "cover", "Contain": "contain", "Width 100%": "width-1-1", "Height 100%": "height-1-1" }, "show": "image && !video" }, "image_position": { "label": "Image Position", "description": "Set the initial background position, relative to the section layer.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "center-center", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "show": "image && !video" }, "image_effect": { "label": "Image Effect", "type": "select", "options": { "None": "", "Parallax": "parallax", "Fixed": "fixed" }, "show": "image && !video" }, "_image_parallax_button": { "description": "Add a parallax effect or fix the background with regard to the viewport while scrolling.", "type": "button-panel", "text": "Edit Parallax", "panel": "image-parallax", "show": "image && !video", "enable": "image_effect == 'parallax'" }, "media_visibility": { "label": "Visibility", "description": "Display the image or video only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } }, "media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.", "type": "color" }, "media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image or video will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" } }, "media_overlay": { "label": "Overlay Color", "type": "gradient", "internal": "media_overlay_gradient" }, "_media_overlay_parallax_button": { "description": "Set an additional transparent overlay to soften the image or video.", "type": "button-panel", "text": "Edit Parallax", "panel": "media-overlay-parallax", "enable": "media_overlay" } }, "fieldset": { "default": { "fields": [ { "description": "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.", "name": "_image_dimension", "type": "grid", "width": "1-2", "show": "image && !video", "fields": ["image_width", "image_height"] }, { "description": "Set the video dimensions.", "name": "_video_dimension", "type": "grid", "width": "1-2", "show": "video && !image", "fields": ["video_width", "video_height"] }, "media_focal_point", "image_loading", "image_size", "image_position", "image_effect", "_image_parallax_button", "media_visibility", "media_background", "media_blend_mode", "media_overlay", "_media_overlay_parallax_button" ] } } } } } builder/elements/column/templates/template.php000064400000022607151666572150015652 0ustar00<?php // Initialize prop if not set $props += [ 'media_overlay_gradient' => null, 'background_parallax_background' => null, ]; // Resets if (str_starts_with($props['style'] ?? '', 'card-')) { if ($props['padding'] == 'xsmall') { $props['padding'] = 'small'; } if ($props['padding'] == 'xlarge') { $props['padding'] = 'large'; } } if ($props['row_height'] != 'viewport' || $props['row_height_viewport'] > 100) { $props['row_height_offset_top'] = false; } if ($props['image']) { $props['video'] = false; } // New logic shortcuts $props['has_panel'] = $props['style'] || $props['background_color'] || $props['background_parallax_background'] || $props['image'] || $props['video'] || in_array($props['position_sticky'], ['row', 'section']) || $props['row_height']; $props['has_overlay'] = ($props['image'] || $props['video']) && ($props['media_overlay'] || $props['media_overlay_gradient']); // Cell $el = $this->el($props['html_element'] ?: 'div', [ 'class' => [ // Match child height 'uk-grid-item-match' => ($props['vertical_align'] || $props['style'] || $props['background_color'] || $props['background_parallax_background'] || $props['image'] || $props['video'] || !empty($props['element_absolute'])) && !in_array($props['position_sticky'], ['row', 'section']) && !$props['row_height'], // Vertical alignment 'uk-flex-{vertical_align} {@!has_panel}', // Child expand to column height 'uk-flex uk-flex-column {@child_height_expand} {@!has_panel}', // Sticky 'js-sticky {@position_sticky: column} {@!has_panel}', // Text color 'uk-{text_color}' => !$props['style'] || (preg_match('/^tile-/', $props['style']) && ($props['image'] || $props['video'])), // Breakpoint widths 'uk-width-1-1 {@!width_default} {@!width_small} {@!width_medium} {@!width_large} {@!width_xlarge}', // Make sure at least one `uk-width` is set 'uk-width-{width_default}', 'uk-width-{width_small}@s', 'uk-width-{width_medium}@m', 'uk-width-{width_large}@l', 'uk-width-{width_xlarge}@xl', // Order first 'uk-flex-first {@order_first: xs}', 'uk-flex-first@{order_first} {@!order_first: xs}', ], // Row parallax 'style' => [ 'align-self: stretch; {@row_parallax} {@position_sticky}', ], ]); // Panel: Style / Background / Image / Video / Sticky / Row Height $panel = $props['has_panel'] ? $this->el('div', [ 'class' => [ 'uk-{style} [uk-card {@style: card-.*}] [uk-card-{!padding: |none} {@style: card-.*}]', // Match child height 'uk-flex {@image}', // Clip video 'uk-position-relative {@video} {@!image}' => !$this->iframeVideo($props['video']), 'uk-cover-container {@video} {@!image}' => $this->iframeVideo($props['video']), // Preserve color 'uk-preserve-color {@style: tile-.*}' => $props['preserve_color'] || ($props['text_color'] && ($props['image'] || $props['video'])), // Height Viewport 'uk-height-viewport {@row_height: viewport} {@!row_height_offset_top} {@row_height_viewport: |100}', 'uk-height-viewport-{0} {@row_height: viewport} {@!row_height_offset_top} {@row_height_viewport: 200|300|400}' => (int) $props['row_height_viewport'] / 100, ], 'style' => [ // Video Background 'background-color: {media_background}; {@video}', 'background-color: {background_color}; {@!media_background} {@!video} {@!style}', // Height Viewport 'min-height: {!row_height_viewport: |100|200|300|400}vh {@row_height: viewport} {@!row_height_offset_top}', 'min-height: {0}px {@row_height: pixels}' => $props['row_height_viewport'] ?: 100, ], // Height Viewport 'uk-height-viewport' => $props['row_height'] == 'viewport' && $props['row_height_offset_top'] ? [ 'offset-top: {0};' => in_array($props['position_sticky'], ['row', 'section']) ? '!*' : 'true', 'offset-bottom: {0};' => $props['row_height_viewport'] && $props['row_height_viewport'] < 100 ? 100 - (int) $props['row_height_viewport'] : false, ] : false, ]) : null; if (!$props['style'] && $bgParallax = $this->parallaxOptions($props, 'background_', ['background'])) { $panel->attr('uk-parallax', $bgParallax); } if (in_array($props['position_sticky'], ['row', 'section'])) { $panel->attr([ 'class' => [ // Force sticky below sticky navbar 'uk-position-z-index', 'uk-blend-difference {@position_blend}', ], 'uk-sticky' => $this->expr([ 'offset: {position_sticky_offset};', 'offset-end: {position_sticky_offset_end};', 'end: !.tm-grid-expand; {@position_sticky: row}', 'end: !.uk-section; {@position_sticky: section}', 'media: @{position_sticky_breakpoint};', ], $props) ?: true, ]); } // Image $image = $props['image'] ? $this->el('div', $this->bgImage($props['image'], [ 'width' => $props['image_width'], 'height' => $props['image_height'], 'focal_point' => $props['media_focal_point'], 'loading' => $props['image_loading'] ? 'eager' : null, 'size' => $props['image_size'], 'position' => $props['image_position'], 'visibility' => $props['media_visibility'], 'blend_mode' => $props['media_blend_mode'], 'background' => $props['media_background'], 'effect' => $props['image_effect'] != 'parallax' ? $props['image_effect'] : '', ])) : null; if ($image && $props['image_effect'] == 'parallax' && $imageParallax = $this->parallaxOptions($props, 'image_', ['bgx', 'bgy'])) { $image->attr('uk-parallax', $imageParallax); } // `has_panel` with padding if ($props['style'] || $props['background_color'] || $props['background_parallax_background'] || $props['image'] || $props['video']) { ($props['image'] ? $image : $panel)->attr('class', [ // Padding and position context for the overlay 'uk-tile {@!style: card-.*} [uk-tile-{!padding: |none}]', // Also padding if no style 'uk-card-body {@style: card-.*}', // Needed if height matches parent 'uk-width-1-1 {@image}', // Padding 'uk-padding-remove {@padding: none}', ]); // `has_panel` without padding } elseif (in_array($props['position_sticky'], ['row', 'section']) || $props['row_height']) { $panel->attr('class', [ // Remove child margin && position context for the overlay 'uk-panel', ]); } if ($props['has_panel']) { ($props['image'] ? $image : $panel)->attr('class', [ 'js-sticky {@position_sticky: column}', // Vertical alignment 'uk-flex uk-flex-{vertical_align}', // Child expand to column height 'uk-flex uk-flex-column {@child_height_expand}', ]); } // Video $video = $props['video'] ? include "{$__dir}/template-video.php" : null; // Overlay $overlay = $props['has_overlay'] ? $this->el('div', [ 'class' => ['uk-position-cover'], 'style' => [ 'background-color: {media_overlay};', // `background-clip` fixes sub-pixel issue 'background-image: {media_overlay_gradient}; background-clip: padding-box;', ], ]) : null; if (($props['media_overlay'] || $props['media_overlay_gradient']) && ($props['image'] || $props['video']) && $mediaOverlayParallax = $this->parallaxOptions($props, 'media_overlay_', ['opacity'])) { $overlay->attr('uk-parallax', $mediaOverlayParallax); } // Align elements as block. // Make sure overlay or video are always below content. // Add position context considering any tile padding. $container = $props['vertical_align'] || $props['has_overlay'] || $props['video'] || !empty($props['element_absolute']) ? $this->el('div', [ 'class' => [ 'uk-panel uk-width-1-1', // Child expand to column height 'uk-flex-1 uk-flex uk-flex-column {@child_height_expand}', ], ]) : null; // Sticky $sticky = $props['position_sticky'] == 'column' ? $this->el('div', [ 'class' => [ 'uk-panel uk-position-z-index', // Force sticky below sticky navbar 'uk-blend-difference {@position_blend}', ], 'uk-sticky' => $this->expr([ 'offset: {position_sticky_offset};', 'offset-end: {position_sticky_offset_end};', 'end: !.js-sticky;', // Selects panel, so tile padding is considered 'media: @{position_sticky_breakpoint};', ], $props) ?: true, ]) : null; ?> <?= $el($props, $attrs) ?> <?php if ($panel) : ?> <?= $panel($props) ?> <?php endif ?> <?php if ($image) : ?> <?= $image($props) ?> <?php endif ?> <?php if ($video) : ?> <?= $video($props, '') ?> <?php endif ?> <?php if ($overlay) : ?> <?= $overlay($props, '') ?> <?php endif ?> <?php if ($container) : ?> <?= $container($props) ?> <?php endif ?> <?php if ($sticky) : ?> <?= $sticky($props) ?> <?php endif ?> <?= $builder->render($children) ?> <?php if ($sticky) : ?> <?= $sticky->end() ?> <?php endif ?> <?php if ($container) : ?> <?= $container->end() ?> <?php endif ?> <?php if ($image) : ?> <?= $image->end() ?> <?php endif ?> <?php if ($panel) : ?> <?= $panel->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/column/templates/template-video.php000064400000001423151666572150016747 0ustar00<?php if ($iframe = $this->iframeVideo($props['video'])) { $video = $this->el('iframe', [ 'class' => [ 'uk-disabled', ], 'src' => $iframe, 'title' => $props['video_title'], ]); } else { $video = $this->el('video', [ 'src' => $props['video'], 'controls' => false, 'loop' => true, 'autoplay' => true, 'muted' => true, 'playsinline' => true, 'class' => [ 'uk-object-{media_focal_point}', ], ]); } $video->attr([ 'width' => $props['video_width'], 'height' => $props['video_height'], 'class' => [ 'uk-blend-{media_blend_mode}', 'uk-visible@{media_visibility}', ], 'uk-cover' => true, ]); return $video; builder/elements/column/templates/content.php000064400000000051151666572150015476 0ustar00<?php echo $builder->render($children); builder/elements/column/element.php000064400000001537151666572150013471 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { foreach (['height', 'height_viewport', 'height_offset_top', 'parallax'] as $prop) { $node->props["row_{$prop}"] = $params['parent']->props[$prop] ?? null; } foreach ($node->children as $child) { if ( !empty($child->props['height_expand']) && (!$node->props['position_sticky'] || (in_array($node->props['position_sticky'], ['row', 'section']) && $node->props['row_height'])) ) { $node->props['child_height_expand'] = true; $node->props['vertical_align'] = ''; break; } } }, ], ]; builder/elements/column/updates.php000064400000004630151666572160013503 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset($node->props['widths']); }, '4.3.0-beta.0.3' => function ($node, $params) { Arr::updateKeys($node->props, ['image_focal_point' => 'media_focal_point']); }, '4.0.0-beta.9.1' => function ($node) { $style = Arr::get($node->props, 'style') ?: ''; if (preg_match('/^tile-(tile|card)-/', $style)) { $node->props['style'] = substr($style, 5); } }, '4.0.0-beta.9' => function ($node) { if (Arr::get($node->props, 'style')) { $node->props['style'] = "tile-{$node->props['style']}"; } }, '3.0.5.1' => function ($node) { if ( Arr::get($node->props, 'image_effect') == 'parallax' && !is_numeric(Arr::get($node->props, 'image_parallax_easing')) ) { Arr::set($node->props, 'image_parallax_easing', '1'); } }, '2.8.0-beta.0.3' => function ($node) { foreach (['bgx', 'bgy'] as $prop) { $key = "image_parallax_{$prop}"; $start = Arr::get($node->props, "{$key}_start", ''); $end = Arr::get($node->props, "{$key}_end", ''); if ($start != '' || $end != '') { Arr::set( $node->props, $key, implode(',', [$start != '' ? $start : 0, $end != '' ? $end : 0]), ); } Arr::del($node->props, "{$key}_start"); Arr::del($node->props, "{$key}_end"); } }, '2.8.0-beta.0.1' => function ($node) { if (isset($node->props['position_sticky'])) { $node->props['position_sticky'] = 'column'; } }, '2.4.0-beta.0.2' => function ($node) { Arr::updateKeys($node->props, ['image_visibility' => 'media_visibility']); }, '2.1.0-beta.2.1' => function ($node) { if (in_array(Arr::get($node->props, 'style'), ['primary', 'secondary'])) { $node->props['text_color'] = ''; } }, '1.22.0-beta.0.1' => function ($node) { unset($node->props['widths']); }, '1.18.0' => function ($node) { if ( !isset($node->props['vertical_align']) && Arr::get($node->props, 'vertical_align') === true ) { $node->props['vertical_align'] = 'middle'; } }, ]; builder/elements/overlay/templates/template-video.php000064400000001416151666572160017136 0ustar00<?php if ($iframe = $this->iframeVideo($src)) { $video = $this->el('iframe', [ 'src' => $iframe, 'uk-responsive' => true, 'loading' => ['lazy {@image_loading}'], 'title' => $props['video_title'], 'class' => [ 'uk-disabled', ], 'uk-video' => [ 'automute: true;', ], ]); } else { $video = $this->el('video', [ 'src' => $src, 'controls' => false, 'loop' => true, 'autoplay' => true, 'muted' => true, 'playsinline' => true, 'preload' => ['none {@image_loading}'], 'uk-video' => true, ]); } $video->attr([ 'width' => $props['image_width'], 'height' => $props['image_height'], ]); return $video; builder/elements/overlay/templates/template-image.php000064400000000455151666572160017114 0ustar00<?php $image = $this->el('image', [ 'src' => $src, 'alt' => $props['image_alt'], 'loading' => $props['image_loading'] ? false : null, 'width' => $props['image_width'], 'height' => $props['image_height'], 'focal_point' => $focal, 'thumbnail' => true, ]); return $image; builder/elements/overlay/templates/content.php000064400000002774151666572160015701 0ustar00<?php if ($props['image'] || $props['video'] || $props['hover_image'] || $props['hover_video'] || $props['title'] != '' || $props['meta'] != '' || $props['content'] != '' || $props['link']) : ?> <div> <?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['video']) : ?> <?php if ($this->iframeVideo($props['video'], [], false)) : ?> <iframe src="<?= $props['video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['hover_image']) : ?> <img src="<?= $props['hover_image'] ?>" alt> <?php endif ?> <?php if ($props['hover_video']) : ?> <?php if ($this->iframeVideo($props['hover_video'], [], false)) : ?> <iframe src="<?= $props['hover_video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['hover_video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $props['title_element'] ?>><?= $props['title'] ?></<?= $props['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?></a></p> <?php endif ?> </div> <?php endif ?> builder/elements/overlay/templates/template-media.php000064400000005223151666572160017107 0ustar00<?php if ($props['video']) { $src = $props['video']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-video.php"; } elseif ($props['image']) { $src = $props['image']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-image.php"; } elseif ($props['hover_video']) { $src = $props['hover_video']; $focal = $props['hover_image_focal_point']; $media = include "{$__dir}/template-video.php"; } elseif ($props['hover_image']) { $src = $props['hover_image']; $focal = $props['hover_image_focal_point']; $media = include "{$__dir}/template-image.php"; } // Media $media->attr([ 'class' => [ 'el-image', 'uk-blend-{0}' => $props['media_blend_mode'], 'uk-transition-{image_transition}', 'uk-transition-opaque' => $props['image'] || $props['video'], 'uk-transition-fade {@!image_transition}' => ($props['hover_image'] || $props['hover_video']) && !($props['image'] || $props['video']), 'uk-flex-1 {@image_expand}' ], 'style' => [ 'min-height: {image_min_height}px;', ], ]); if ($props['image_expand'] || $props['image_min_height'] || ($media->name == 'video' && $props['image_width'] && $props['image_height'])) { $media->attr([ 'class' => [ 'uk-object-cover', 'uk-object-{0}' => $focal, ], 'style' => [ // Keep video responsiveness but with new proportions (because video isn't cropped like an image) 'aspect-ratio: {image_width} / {image_height};' => $media->name == 'video', ], ]); } // Hover Media $hover_media = ''; if (($props['hover_image'] || $props['hover_video']) && ($props['image'] || $props['video'])) { if ($props['hover_video']) { $src = $props['hover_video']; $hover_media = include "{$__dir}/template-video.php"; } elseif ($props['hover_image']) { $src = $props['hover_image']; $focal = $props['hover_image_focal_point']; $hover_media = include "{$__dir}/template-image.php"; } $hover_media->attr([ 'class' => [ 'el-hover-image', 'uk-transition-{image_transition}', 'uk-transition-fade {@!image_transition}', 'uk-object-{hover_image_focal_point}', // `uk-cover` already sets object-fit to cover ], 'uk-cover' => true, 'uk-video' => false, // Resets 'alt' => true, // Image 'loading' => false, // Image + Iframe 'preload' => false, // Video ]); } ?> <?= $media($props, '') ?> <?php if ($hover_media) : ?> <?= $hover_media($props, '') ?> <?php endif ?> builder/elements/overlay/templates/template-content.php000064400000006314151666572160017504 0ustar00<?php // Title $title = $this->el($props['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-link-{title_hover_style} {@title_link}', // Set here to style links which already come with dynamic content (WP taxonomy links) 'uk-transition-{title_transition} {@overlay_hover}', 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', 'uk-flex-1 {@content_expand}' => !$props['content'] && (!$props['meta'] || $props['meta_align'] == 'above-title'), ], ]); // Meta $meta = $this->el($props['meta_element'], [ 'class' => [ 'el-meta', 'uk-transition-{meta_transition} {@overlay_hover}', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($props['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $props['meta_element'] != 'div', 'uk-flex-1 {@content_expand}' => $props['meta_align'] == 'below-content' || (!$props['content'] && ($props['meta_align'] == 'above-content' || ($props['meta_align'] == 'below-title' ))), ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-transition-{content_transition} {@overlay_hover}', 'uk-{content_style}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($props['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), 'uk-flex-1 {@content_expand}' => !($props['meta'] && $props['meta_align'] == 'below-content'), ], ]); // Link $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', 'uk-transition-{link_transition} {@overlay_hover}', // Not on link element to prevent conflicts with link style ], ]); ?> <?php if ($props['meta'] != '' && $props['meta_align'] == 'above-title') : ?> <?= $meta($props, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($props) ?> <?php if ($props['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($props['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $props['meta_align'] == 'below-title') : ?> <?= $meta($props, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($props, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $props['meta_align'] == 'below-content') : ?> <?= $meta($props, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && $props['link_text']) : ?> <?= $link_container($props, $link($props, $props['link_text'])) ?> <?php endif ?> builder/elements/overlay/templates/template.php000064400000014322151666572160016032 0ustar00<?php // Resets if ($props['overlay_link']) { $props['title_link'] = ''; } if ($props['content_expand']) { if (in_array($props['overlay_position'], ['top', 'bottom'])) { $props['overlay_position'] = 'cover'; } if (in_array($props['overlay_position'], ['top-center', 'center', 'bottom-center'])) { $props['overlay_position'] = 'center-horizontal'; } if (in_array($props['overlay_position'], ['top-left', 'center-left', 'bottom-left'])) { $props['overlay_position'] = 'left'; } if (in_array($props['overlay_position'], ['top-right', 'center-right', 'bottom-right'])) { $props['overlay_position'] = 'right'; } } // New logic shortcuts $props['image_expand'] = $props['height_expand']; // Keep code same as other overlay elements $props['overlay_cover'] = $props['overlay_style'] && $props['overlay_mode'] == 'cover'; $props['has_transition'] = $props['overlay_hover'] || $props['image_transition'] || $props['image_transition_border'] || $props['hover_image'] || $props['hover_video']; $props['text_color_inverse'] = $props['text_color'] === 'light' ? 'dark' : 'light'; $props['flex_column_align'] = ''; $props['flex_column_align_fallback'] = ''; if ($props['image_expand']) { $horizontal = ['left', 'center', 'right']; $vertical = ['top', 'middle', 'bottom']; $props['flex_column_align'] = str_replace($horizontal, $vertical, $props['text_align'] ?? ''); $props['flex_column_align_fallback'] = str_replace($horizontal, $vertical, $props['text_align_fallback'] ?? ''); } $el = $this->el($props['html_element'] ?: 'div', [ 'class' => [ // Expand to column height 'uk-flex-1 {@height_expand}', 'uk-flex uk-flex-column {@image_expand}', 'uk-flex-{flex_column_align}[@{text_align_breakpoint} [uk-flex-{flex_column_align_fallback}]] {@image_expand}', // Needs to be parent of `uk-link-toggle` 'uk-{text_color}' => !$props['overlay_style'] || $props['overlay_cover'], // Only for transparent navbar 'uk-inverse-{text_color}' => $props['overlay_style'] && !$props['overlay_cover'], ], ]); // Container (Needed for link and to make text alignment work set on parent) $container = $this->el($props['link'] && $props['overlay_link'] ? 'a' : 'div', [ 'class' => [ 'uk-box-shadow-{image_box_shadow}', 'uk-box-shadow-hover-{image_hover_box_shadow}', 'uk-border-{image_border} {@!image_box_decoration} {@!image_transition_border}', 'uk-box-shadow-bottom {@image_box_decoration: shadow}', 'tm-mask-default {@image_box_decoration: mask}', 'tm-box-decoration-{image_box_decoration: default|primary|secondary}', 'tm-box-decoration-inverse {@image_box_decoration_inverse} {@image_box_decoration: default|primary|secondary}', 'tm-transition-border {@image_transition_border}', 'uk-inline' => $props['image_box_decoration'] || $props['image_transition_border'], 'uk-transition-toggle {@has_transition}', 'uk-flex-1 uk-flex uk-flex-column {@image_expand}', ], 'style' => [ "background-color: {$props['media_background']};" => $props['media_background'], ], 'tabindex' => $props['has_transition'] && !($props['link'] && $props['overlay_link']) ? 0 : null, // Needs to be on anchor to have just one focusable toggle when using keyboard navigation 'uk-toggle' => $props['text_color_hover'] && ((!$props['overlay_style'] && ($props['hover_image'] || $props['hover_video'])) || ($props['overlay_cover'] && $props['overlay_hover'] && $props['overlay_transition_background'])) ? [ 'cls: uk-{text_color_inverse} [uk-{text_color}];', 'mode: hover;', 'target: !*;', ] : false, ]); // Box Decoration / Transition Border $image_container = $props['image_box_decoration'] || $props['image_transition_border'] ? $this->el('div', [ 'class' => [ 'uk-flex-1 uk-flex uk-flex-column {@image_expand}', ], ]) : null; ($image_container ?: $container)->attr('class', [ 'uk-inline-clip', ]); $overlay = $this->el('div', [ 'class' => [ 'uk-{overlay_style}', 'uk-transition-{overlay_transition} {@overlay_hover} {@overlay_cover}', 'uk-position-cover {@overlay_cover}', 'uk-position-{overlay_margin} {@overlay_cover}', ], ]); $position = $this->el('div', [ 'class' => [ 'uk-position-{overlay_position} [uk-position-{overlay_margin} {@overlay_style}]', 'uk-transition-{overlay_transition} {@overlay_hover}' => !($props['overlay_transition_background'] && $props['overlay_cover']), 'uk-blend-difference {@text_blend} {@!overlay_style}', 'uk-flex {@content_expand}' ], ]); $content = $this->el('div', [ 'class' => [ $props['overlay_style'] ? 'uk-overlay' : 'uk-panel', 'uk-padding {@!overlay_padding} {@!overlay_style}', 'uk-padding-{!overlay_padding: |none}', 'uk-padding-remove {@overlay_padding: none} {@overlay_style}', 'uk-width-{overlay_maxwidth} {@!overlay_position: top|bottom}', 'uk-margin-remove-first-child', 'uk-flex-1 uk-flex uk-flex-column {@content_expand}' ], ]); if (!$props['overlay_cover']) { $position->attr($overlay->attrs); } // Link $link = include "{$__dir}/template-link.php"; ?> <?= $el($props, $attrs) ?> <?= $container($props) ?> <?php if ($image_container) : ?> <?= $image_container($props) ?> <?php endif ?> <?= $this->render("{$__dir}/template-media", compact('props')) ?> <?php if ($props['media_overlay']) : ?> <div class="uk-position-cover" style="background-color:<?= $props['media_overlay'] ?>"></div> <?php endif ?> <?php if ($props['overlay_cover']) : ?> <?= $overlay($props, '') ?> <?php endif ?> <?php if ($props['title'] != '' || $props['meta'] != '' || $props['content'] != '' || ($props['link'] && $props['link_text'])) : ?> <?= $position($props, $content($props, $this->render("{$__dir}/template-content", compact('props', 'link')))) ?> <?php endif ?> <?php if ($image_container) : ?> <?= $image_container->end() ?> <?php endif ?> <?= $container->end() ?> <?= $el->end() ?> builder/elements/overlay/templates/template-link.php000064400000003144151666572160016765 0ustar00<?php $link = $props['link'] ? $this->el('a', [ 'href' => ['{link}'], 'aria-label' => ['{link_aria_label}'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; if ($link && $props['overlay_link']) { $container->attr($link->attrs + [ 'class' => [ // Needs to be child of `uk-light` or `uk-dark` 'uk-link-toggle', ], ]); $props['title'] = $this->striptags($props['title']); $props['meta'] = $this->striptags($props['meta']); $props['content'] = $this->striptags($props['content']); if ($props['title'] != '' && $props['title_hover_style'] != 'reset') { $props['title'] = $this->el('span', [ 'class' => [ 'uk-link-{title_hover_style: heading}', 'uk-link {!title_hover_style}', ], ], $props['title'])->render($props); } } if ($link && $props['title'] != '' && $props['title_link']) { $props['title'] = $link($props, [], $this->striptags($props['title'])); // title_hover_style is set on title } if ($link && $props['link_text']) { if ($props['overlay_link']) { $link = $this->el('div'); } $link->attr('class', [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-muted|link-text} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', // Keep link style if overlay link 'uk-link {@link_style:} {@overlay_link}', 'uk-text-muted {@link_style: link-muted} {@overlay_link}', ]); } return $link; builder/elements/overlay/element.php000064400000002066151666572160013654 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { /** * Auto-correct media rendering for dynamic content * * @var View $view */ $view = app(View::class); foreach (['', 'hover_'] as $prefix) { if ($node->props["{$prefix}image"] && $view->isVideo($node->props["{$prefix}image"])) { $node->props["{$prefix}video"] = $node->props["{$prefix}image"]; $node->props["{$prefix}image"] = null; } elseif ($node->props["{$prefix}video"] && $view->isImage($node->props["{$prefix}video"])) { $node->props["{$prefix}image"] = $node->props["{$prefix}video"]; $node->props["{$prefix}video"] = null; } } // Don't render element if content fields are empty return $node->props['image'] || $node->props['video'] || $node->props['hover_image'] || $node->props['hover_video']; }, ], ]; builder/elements/overlay/element.json000064400000116611151666572160014040 0ustar00{ "@import": "./element.php", "name": "overlay", "title": "Overlay", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "link_text": "Read more", "overlay_mode": "cover", "overlay_hover": true, "overlay_style": "overlay-primary", "overlay_position": "center", "text_color": "light", "overlay_transition": "fade", "title_hover_style": "reset", "title_element": "h3", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "link_style": "default", "text_align": "center", "margin": "default" }, "placeholder": { "props": { "image": "${url:~yootheme/theme/assets/images/element-image-placeholder.png}", "video": "", "title": "Title", "meta": "", "content": "", "hover_image": "", "hover_video": "" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "image": { "label": "Image", "type": "image", "source": true, "show": "!video", "altRef": "%name%_alt" }, "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true, "show": "!image" }, "_media": { "type": "button-panel", "panel": "builder-overlay-media", "text": "Edit Settings", "show": "image || video" }, "video_title": { "label": "Video Title", "source": true, "show": "video && $match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } }, "image_alt": { "label": "Image Alt", "source": true, "show": "image && !video" }, "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "link": "${builder.link}", "link_target": "${builder.link_target}", "link_text": { "label": "Link Text", "description": "Enter the text for the link.", "source": true, "enable": "link" }, "link_aria_label": { "label": "Link ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text.", "source": true, "enable": "link" }, "hover_image": { "label": "Hover Image", "description": "Select an optional image that appears on hover.", "type": "image", "source": true, "show": "!hover_video" }, "hover_video": { "label": "Hover Video", "description": "Select an optional video that appears on hover.", "type": "video", "source": true, "show": "!hover_image" }, "height_expand": { "label": "Height", "description": "Expand the height of the element to fill the available space in the column.", "type": "checkbox", "text": "Fill the available column space" }, "overlay_link": { "label": "Link", "description": "Link the whole overlay if a link exists.", "type": "checkbox", "text": "Link overlay", "enable": "link" }, "html_element": "${builder.html_element}", "overlay_mode": { "label": "Mode", "description": "When using cover mode, you need to set the text color manually.", "type": "select", "options": { "Cover": "cover", "Caption": "caption" } }, "overlay_hover": { "type": "checkbox", "text": "Display overlay on hover" }, "overlay_transition_background": { "type": "checkbox", "text": "Animate background only", "enable": "overlay_hover && overlay_mode == 'cover' && overlay_style" }, "overlay_style": { "label": "Style", "description": "Select a style for the overlay.", "type": "select", "options": { "None": "", "Overlay Default": "overlay-default", "Overlay Primary": "overlay-primary", "Tile Default": "tile-default", "Tile Muted": "tile-muted", "Tile Primary": "tile-primary", "Tile Secondary": "tile-secondary" } }, "overlay_position": { "label": "Position", "description": "Select the overlay or content position.", "type": "select", "options": { "Top": "top", "Bottom": "bottom", "Left": "left", "Right": "right", "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right", "Center": "center", "Center Left": "center-left", "Center Right": "center-right" } }, "overlay_margin": { "label": "Margin", "description": "Apply a margin between the overlay and the image container.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large" }, "enable": "overlay_style" }, "overlay_padding": { "label": "Padding", "description": "Set the padding between the overlay and its content.", "type": "select", "options": { "Default": "", "Small": "small", "Large": "large", "None": "none" } }, "content_expand": { "label": "Height", "description": "Expand the height of the content to fill the available space in the overlay and push the link to the bottom.", "type": "checkbox", "text": "Expand content" }, "overlay_maxwidth": { "label": "Max Width", "description": "Set the maximum content width.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "!$match(overlay_position, '^(top|bottom)$')" }, "text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true }, "text_color_hover": { "type": "checkbox", "text": "Inverse the text color on hover", "enable": "!overlay_style && (hover_image || hover_video) || overlay_style && overlay_mode == 'cover' && overlay_hover && overlay_transition_background" }, "text_blend": { "type": "checkbox", "text": "Blend with image", "enable": "!overlay_style" }, "overlay_transition": { "label": "Transition", "description": "Select a transition for the overlay when it appears on hover.", "type": "select", "options": { "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "overlay_hover" }, "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly" }, "image_transition": { "label": "Transition", "description": "Select an image transition. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.", "type": "select", "options": { "None (Fade if hover image)": "", "Scale Up": "scale-up", "Scale Down": "scale-down" } }, "image_transition_border": { "type": "checkbox", "text": "Border" }, "image_min_height": { "label": "Min Height", "description": "Use an optional minimum height to prevent images from becoming smaller than the content on small devices.", "type": "range", "attrs": { "min": 200, "max": 500, "step": 20 } }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "!image_transition_border && !image_box_decoration" }, "image_box_shadow": { "label": "Box Shadow", "description": "Select the image box shadow size.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" } }, "image_hover_box_shadow": { "label": "Hover Box Shadow", "description": "Select the image box shadow size on hover.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" } }, "image_box_decoration": { "label": "Box Decoration", "description": "Select the image box decoration style.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Floating Shadow": "shadow", "Mask": "mask" } }, "image_box_decoration_inverse": { "type": "checkbox", "text": "Inverse style", "enable": "$match(image_box_decoration, '^(default|primary|secondary)$')" }, "hover_image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "title_transition": { "label": "Transition", "description": "Select a transition for the title when the overlay appears on hover.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "title && overlay_hover" }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" }, "enable": "title" }, "title_link": { "label": "Link", "description": "Link the title if a link exists.", "type": "checkbox", "text": "Link title", "enable": "title && link" }, "title_hover_style": { "label": "Hover Style", "description": "Set the hover style for a linked title.", "type": "select", "options": { "None": "reset", "Heading Link": "heading", "Default Link": "" }, "enable": "title && link && (title_link || overlay_link)" }, "title_decoration": { "label": "Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "enable": "title" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "title" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "title" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "title" }, "title_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "title" }, "meta_transition": { "label": "Transition", "description": "Select a transition for the meta text when the overlay appears on hover.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "meta && overlay_hover" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "meta" }, "meta_align": { "label": "Alignment", "description": "Align the meta text.", "type": "select", "options": { "Above Title": "above-title", "Below Title": "below-title", "Below Content": "below-content" }, "enable": "meta" }, "meta_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "meta" }, "meta_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "meta" }, "content_transition": { "label": "Transition", "description": "Select a transition for the content when the overlay appears on hover.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "content && overlay_hover" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "content" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "content" }, "link_transition": { "label": "Transition", "description": "Select a transition for the link when the overlay appears on hover.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "link && link_text && overlay_hover" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "link && link_text" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "link && link_text && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "link && link_text && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "link && link_text" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-image", ".el-title", ".el-meta", ".el-content", ".el-link", ".el-hover-image" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "image", "video", "_media", "video_title", { "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "name": "_image_dimension", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_alt", "title", "meta", "content", "link", "link_target", "link_text", "link_aria_label", "hover_image", "hover_video" ] }, { "title": "Settings", "fields": [ { "label": "Container", "type": "group", "divider": true, "fields": [ "height_expand", "overlay_link", "html_element" ] }, { "label": "Overlay", "type": "group", "divider": true, "fields": [ "overlay_mode", "overlay_hover", "overlay_transition_background", "overlay_style", "overlay_position", "overlay_margin", "overlay_padding", "content_expand", "overlay_maxwidth", "text_color", "text_color_hover", "text_blend", "overlay_transition" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ "image_focal_point", "image_loading", "image_transition", "image_transition_border", "image_min_height", "image_border", "image_box_shadow", "image_hover_box_shadow", "image_box_decoration", "image_box_decoration_inverse" ] }, { "label": "Hover Image", "type": "group", "divider": true, "fields": [ "hover_image_focal_point" ] }, { "label": "Title", "type": "group", "divider": true, "fields": [ "title_transition", "title_style", "title_link", "title_hover_style", "title_decoration", "title_font_family", "title_color", "title_element", "title_margin" ] }, { "label": "Meta", "type": "group", "divider": true, "fields": [ "meta_transition", "meta_style", "meta_color", "meta_align", "meta_element", "meta_margin" ] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_transition", "content_style", "content_margin"] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_transition", "link_style", "link_size", "link_fullwidth", "link_margin" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } }, "panels": { "builder-overlay-media": { "title": "Media", "width": 500, "fields": { "media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes.", "type": "color" }, "media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image or video will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" }, "enable": "media_background" }, "media_overlay": { "label": "Overlay Color", "description": "Set an additional transparent overlay to soften the image or video.", "type": "color" } }, "fieldset": { "default": { "fields": ["media_background", "media_blend_mode", "media_overlay"] } } } } } builder/elements/overlay/images/icon.svg000064400000000705151666572160014426 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="30" height="30" fill="none" /> <rect width="12" height="2" fill="#444" x="8.971" y="13" /> <rect width="8" height="2" fill="#444" x="10.971" y="16" /> <rect width="28" height="22" fill="none" stroke="#444" stroke-width="2px" x="1" y="4" /> <rect width="20" height="14" fill="none" stroke="#444" stroke-width="2px" x="5" y="8" /> </svg> builder/elements/overlay/images/iconSmall.svg000064400000000554151666572160015421 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="19" height="15" fill="none" stroke="#444" x="0.5" y="2.5" /> <rect width="15" height="11" fill="none" stroke="#444" x="2.5" y="4.5" /> <rect width="8" height="1" fill="#444" x="6" y="9" /> <rect width="6" height="1" fill="#444" x="7" y="11" /> </svg> builder/elements/overlay/updates.php000064400000013326151666572160013671 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'image') && Arr::get($node->props, 'video')) { unset($node->props['video']); } }, '4.0.0-beta.9' => function ($node) { if (Arr::get($node->props, 'overlay_link') && Arr::get($node->props, 'css')) { $node->props['css'] = str_replace( '.el-element', '.el-element > *', $node->props['css'], ); } }, '3.0.0-beta.5.1' => function ($node) { if (Arr::get($node->props, 'image_box_decoration') === 'border-hover') { $node->props['image_transition_border'] = true; unset($node->props['image_box_decoration']); } }, '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '2.0.0-beta.5.1' => function ($node) { Arr::updateKeys($node->props, [ 'link_type' => function ($value) { if ($value === 'content') { return [ 'title_link' => true, 'link_text' => '', ]; } elseif ($value === 'element') { return [ 'overlay_link' => true, 'link_text' => '', ]; } }, ]); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } }, '1.19.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { $node->props['meta_align'] = 'above-title'; } if (Arr::get($node->props, 'meta_align') === 'bottom') { $node->props['meta_align'] = 'below-title'; } $node->props['link_type'] = 'element'; }, '1.18.10.3' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { if (!empty($node->props['meta_margin'])) { $node->props['title_margin'] = $node->props['meta_margin']; } $node->props['meta_margin'] = ''; } }, '1.18.0' => function ($node) { if (!isset($node->props['overlay_image']) && Arr::get($node->props, 'image2')) { $node->props['overlay_image'] = Arr::get($node->props, 'image2'); } if ( !isset($node->props['image_box_decoration']) && Arr::get($node->props, 'image_box_shadow_bottom') === true ) { $node->props['image_box_decoration'] = 'shadow'; } if ( !isset($node->props['meta_color']) && Arr::get($node->props, 'meta_style') === 'muted' ) { $node->props['meta_color'] = 'muted'; $node->props['meta_style'] = ''; } }, ]; builder/elements/accordion/templates/content.php000064400000000522151666572160016146 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/accordion/templates/template.php000064400000000543151666572160016312 0ustar00<?php $el = $this->el('div', [ 'uk-accordion' => [ 'multiple: {multiple};', 'collapsible: {0};' => $props['collapsible'] ? 'true' : 'false', ], ]); ?> <?= $el($props, $attrs) ?> <?php foreach ($children as $child) : ?> <?= $builder->render($child, ['element' => $props]) ?> <?php endforeach ?> <?= $el->end() ?> builder/elements/accordion/element.json000064400000043314151666572160014317 0ustar00{ "name": "accordion", "title": "Accordion", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_image": true, "show_link": true, "collapsible": true, "content_column_breakpoint": "m", "image_svg_color": "emphasis", "image_align": "top", "image_grid_width": "1-2", "image_grid_breakpoint": "m", "link_text": "Read more", "link_style": "default" }, "placeholder": { "children": [ { "type": "accordion_item", "props": {} }, { "type": "accordion_item", "props": {} }, { "type": "accordion_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "item": "accordion_item", "media": { "type": "image", "item": { "title": "title", "image": "src" } } }, "show_image": { "type": "checkbox", "text": "Show the image" }, "show_link": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the link" }, "multiple": { "label": "Behavior", "type": "checkbox", "text": "Allow multiple open items" }, "collapsible": { "type": "checkbox", "text": "Start with all items closed" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Lead": "lead", "Meta": "meta" } }, "content_dropcap": { "label": "Drop Cap", "description": "Display the first letter of the paragraph as a large initial.", "type": "checkbox", "text": "Enable drop cap" }, "content_column": { "label": "Columns", "description": "Set the number of text columns.", "type": "select", "options": { "None": "", "Halves": "1-2", "Thirds": "1-3", "Quarters": "1-4", "Fifths": "1-5", "Sixths": "1-6" } }, "content_column_divider": { "description": "Show a divider between text columns.", "type": "checkbox", "text": "Show dividers", "enable": "content_column" }, "content_column_breakpoint": { "label": "Columns Breakpoint", "description": "Set the device width from which the text columns should apply.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "content_column" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" } }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "enable": "show_image" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "show_image" }, "image_align": { "label": "Alignment", "description": "Align the image to the top, left, right or place it between the title and the content.", "type": "select", "options": { "Top": "top", "Bottom": "bottom", "Left": "left", "Right": "right" }, "enable": "show_image" }, "image_grid_width": { "label": "Grid Width", "description": "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.", "type": "select", "options": { "Auto": "auto", "80%": "4-5", "75%": "3-4", "66%": "2-3", "60%": "3-5", "50%": "1-2", "40%": "2-5", "33%": "1-3", "25%": "1-4", "20%": "1-5", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "show_image && $match(image_align, 'left|right')" }, "image_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between the image and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "show_image && $match(image_align, 'left|right')" }, "image_grid_row_gap": { "label": "Grid Row Gap", "description": "Set the size of the gap if the grid items stack.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "show_image && $match(image_align, 'left|right')" }, "image_grid_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "show_image && $match(image_align, 'left|right')" }, "image_vertical_align": { "label": "Vertical Alignment", "description": "Vertically center grid items.", "type": "checkbox", "text": "Center", "enable": "show_image && $match(image_align, 'left|right')" }, "image_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_image && image_align == 'bottom'" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "show_image" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image && image_svg_inline" }, "link_text": { "label": "Text", "description": "Enter the text for the link.", "enable": "show_link" }, "link_target": { "type": "checkbox", "text": "Open in a new window", "enable": "show_link" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "show_link" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-item", ".el-title", ".el-content", ".el-image", ".el-link" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content", "show_image", "show_link"] }, { "title": "Settings", "fields": [ { "label": "Accordion", "type": "group", "divider": true, "fields": ["multiple", "collapsible"] }, { "label": "Content", "type": "group", "divider": true, "fields": [ "content_style", "content_dropcap", "content_column", "content_column_divider", "content_column_breakpoint", "content_margin" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading", "image_border", "image_align", "image_grid_width", "image_grid_column_gap", "image_grid_row_gap", "image_grid_breakpoint", "image_vertical_align", "image_margin", "image_svg_inline", "image_svg_color" ] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_text", "link_target", "link_style", "link_size", "link_fullwidth", "link_margin" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/accordion/images/iconSmall.svg000064400000000547151666572160015703 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="17" height="8" fill="none" stroke="#575656" x="1.5" y="4.5" /> <rect width="18" height="1" fill="#575656" x="1" y="2" /> <rect width="18" height="1" fill="#575656" x="1" y="14" /> <rect width="18" height="1" fill="#575656" x="1" y="16" /> </svg> builder/elements/accordion/images/icon.svg000064400000000671151666572160014710 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="28" height="13" fill="none" stroke="#444" stroke-width="2" x="1" y="6" /> <line fill="none" stroke="#444" stroke-width="2" x1="0" y1="2" x2="30" y2="2" /> <line fill="none" stroke="#444" stroke-width="2" x1="0" y1="23" x2="30" y2="23" /> <line fill="none" stroke="#444" stroke-width="2" x1="0" y1="27" x2="30" y2="27" /> </svg> builder/elements/accordion/updates.php000064400000001613151666572160014145 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.4' => function ($node) { unset($node->props['title_element']); }, '2.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'image_grid_width') === 'xxlarge') { $node->props['image_grid_width'] = '2xlarge'; } }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'image_breakpoint' => 'image_grid_breakpoint', 'image_gutter' => fn($value) => [ 'image_grid_column_gap' => $value, 'image_grid_row_gap' => $value, ], ]); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, ['image_inline_svg' => 'image_svg_inline']); }, ]; builder/elements/code/templates/template.php000064400000000343151666572160015261 0ustar00<?php $el = $this->el('pre', [ 'class' => [ 'uk-margin-remove {@position: absolute}', ], ]); ?> <?= $el($props, $attrs) ?><code class="el-content"><?= $this->e($props['content']) ?></code><?= $el->end() ?> builder/elements/code/templates/content.php000064400000000162151666572160015117 0ustar00<?php if ($props['content'] != '') : ?> <pre><code><?= $this->e($props['content']) ?></code></pre> <?php endif ?> builder/elements/code/element.json000064400000006467151666572160013300 0ustar00{ "@import": "./element.php", "name": "code", "title": "Code", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "placeholder": { "props": { "content": "// Code example\n <div id=\"myid\" class=\"myclass\" hidden> \nLorem ipsum <strong>dolor</strong> sit amet, consectetur adipiscing elit.\n</div>" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "type": "editor", "editor": "code", "source": true }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-content</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-content"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content"] }, { "title": "Settings", "fields": [ { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/code/images/icon.svg000064400000000406151666572160013655 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="2" points="20,7 28,15 20,23" /> <polyline fill="none" stroke="#444" stroke-width="2" points="10,7 2,15 10,23" /> </svg> builder/elements/code/images/iconSmall.svg000064400000000412151666572160014643 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="1.01" points="13,4 19,10 13,16" /> <polyline fill="none" stroke="#444" stroke-width="1.01" points="7,4 1,10 7,16" /> </svg> builder/elements/code/element.php000064400000000351151666572160013100 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return $node->props['content'] != ''; }, ], ]; builder/elements/icon/images/icon.svg000064400000000470151666572160013674 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" stroke-width="2" d="M15,19.39,20,22,19,16.48l4-3.9-5.57-.81L15,6.76l-2.48,5L7,12.58l4,3.9L10.05,22Z" /> <circle fill="none" stroke="#444" stroke-width="2" cx="15" cy="15" r="13" /> </svg> builder/elements/icon/images/iconSmall.svg000064400000000436151666572160014667 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" d="M10,13l3.46,1.81L12.77,11l2.77-2.7-3.86-.56L10,4.3,8.28,7.76l-3.82.56L7.23,11l-.66,3.83Z" /> <circle fill="none" stroke="#444" cx="10" cy="10" r="9" /> </svg> builder/elements/icon/element.php000064400000000347151666572160013123 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return (bool) $node->props['icon']; }, ], ]; builder/elements/icon/templates/content.php000064400000000267151666572160015143 0ustar00<?php if ($props['icon'] && $props['link']) : ?> <a href="<?= $props['link'] ?>">[<?= $props['icon'] ?>]</a> <?php elseif ($props['icon']) : ?> [<?= $props['icon'] ?>] <?php endif ?> builder/elements/icon/templates/template.php000064400000001507151666572160015302 0ustar00<?php $el = $this->el('div'); // Icon $icon = $this->el('span', [ 'class' => [ 'uk-text-{icon_color} {@!link}', ], 'uk-icon' => [ 'icon: {icon};', 'width: {icon_width}; height: {icon_width}; {@!link_style: button}', ], ], ''); // Link $link = $this->el('a', [ 'class' => [ 'uk-icon-link {@!link_style}', 'uk-icon-button {@link_style: button}', 'uk-link-{link_style: muted|text|reset}', ], 'href' => ['{link}'], 'aria-label' => ['{link_aria_label}'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]); ?> <?= $el($props, $attrs) ?> <?php if ($props['link']) : ?> <?= $link($props, $icon($props)) ?> <?php else : ?> <?= $icon($props) ?> <?php endif ?> <?= $el->end() ?> builder/elements/icon/element.json000064400000013633151666572160013307 0ustar00{ "@import": "./element.php", "name": "icon", "title": "Icon", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "icon_width": 60, "margin": "default" }, "placeholder": { "props": { "icon": "star" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "icon": { "label": "Icon", "description": "Click on the pencil to pick an icon from the icon library.", "type": "icon", "source": true }, "link": "${builder.link}", "link_target": "${builder.link_target}", "link_aria_label": "${builder.link_aria_label}", "icon_color": { "label": "Color", "description": "Select the icon color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "!link" }, "icon_width": { "label": "Icon Width", "description": "Set the icon width.", "enable": "link_style != 'button'" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Icon Link": "", "Icon Button": "button", "Link": "link", "Link Muted": "muted", "Link Text": "text", "Link Reset": "reset" }, "enable": "link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["icon", "link", "link_target", "link_aria_label"] }, { "title": "Settings", "fields": [ { "label": "Icon", "type": "group", "divider": true, "fields": ["icon_color", "icon_width"] }, { "label": "Link", "type": "group", "divider": true, "fields": ["link_style"] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/icon/updates.php000064400000000624151666572160013135 0ustar00<?php namespace YOOtheme; return [ '2.1.0-beta.0.1' => function ($node) { if (!empty($node->props['icon_ratio'])) { $node->props['icon_width'] = round(20 * $node->props['icon_ratio']); unset($node->props['icon_ratio']); } }, '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/button/updates.php000064400000000751151666572160013521 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset($node->props['inline_align']); }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'gutter' => fn($value) => ['grid_column_gap' => $value, 'grid_row_gap' => $value], ]); }, '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/button/images/icon.svg000064400000000524151666572160014257 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" stroke-width="1.8" d="M11,8l10.882,8.611l-2.902,1.681l3.209,5.965 l-3.98,2.146l-3.207-5.965l-2.9,1.681L11,8z" /> <polyline fill="none" stroke="#444" stroke-width="2" points="8,18 2,18 2,3 28,3 28,18 25,18" /> </svg> builder/elements/button/images/iconSmall.svg000064400000000456151666572160015254 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" d="M7.1,6.4l7.4,6l-1.9,1.1l2.1,3.9l-2.6,1.4L10,14.9L8.1,16L7.1,6.4z" /> <polyline fill="none" stroke="#444" points="6,12.5 1.5,12.5 1.5,3.5 18.5,3.5 18.5,12.5 16,12.5" /> </svg> builder/elements/button/element.json000064400000013652151666572160013673 0ustar00{ "name": "button", "title": "Button", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "grid_column_gap": "small", "grid_row_gap": "small", "margin": "default" }, "placeholder": { "children": [{ "type": "button_item", "props": {} }] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "title": "content", "item": "button_item", "media": { "type": "", "item": { "link_title": "title", "link": "src" } } }, "button_size": { "label": "Size", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" } }, "fullwidth": { "type": "checkbox", "text": "Full width button" }, "grid_column_gap": { "label": "Column Gap", "description": "Set the size of the column gap between multiple buttons.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "grid_row_gap": { "label": "Row Gap", "description": "Set the size of the row gap between multiple buttons.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-item", ".el-content"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content"] }, { "title": "Settings", "fields": [ { "label": "Button", "type": "group", "divider": true, "fields": [ "button_size", "fullwidth", "grid_column_gap", "grid_row_gap" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/button/templates/template.php000064400000001760151666572160015666 0ustar00<?php $el = $this->el('div'); // Grid $grid = $this->el('div', [ 'class' => [ 'uk-flex-middle', $props['grid_column_gap'] == $props['grid_row_gap'] ? 'uk-grid-{grid_column_gap}' : '[uk-grid-column-{grid_column_gap}] [uk-grid-row-{grid_row_gap}]', 'uk-child-width-{0}' => $props['fullwidth'] ? '1-1' : 'auto', 'uk-flex-{text_align}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]] {@!fullwidth}', ], 'uk-grid' => true, ]); ?> <?= $el($props, $attrs) ?> <?php if (count($children) > 1) : ?> <?= $grid($props) ?> <?php endif ?> <?php foreach ($children as $child) : ?> <?php if (count($children) > 1) : ?> <div class="el-item"> <?php endif ?> <?= $builder->render($child, ['element' => $props]) ?> <?php if (count($children) > 1) : ?> </div> <?php endif ?> <?php endforeach ?> <?php if (count($children) > 1) : ?> <?= $grid->end() ?> <?php endif ?> </div> builder/elements/button/templates/content.php000064400000000434151666572160015522 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <p> <?= $builder->render($children[0]) ?> </p> <?php endif ?> builder/elements/subnav/updates.php000064400000000442151666572160013501 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset($node->props['inline_align']); }, '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/subnav/images/iconSmall.svg000064400000000416151666572160015233 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="4" height="1" fill="#444" x="16" y="10" /> <rect width="4" height="1" fill="#444" x="10" y="10" /> <path fill="#444" d="M0,8v5h8V8H0z M7,12H1V9h6V12z" /> </svg> builder/elements/subnav/images/icon.svg000064400000000444151666572160014243 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="6" height="2" fill="#444" x="24" y="14" /> <rect width="6" height="2" fill="#444" x="15" y="14" /> <path fill="#444" d="M0,12v6h11.999L12,12H0z M9.999,16h-8L2,14h7.999V16z" /> </svg> builder/elements/subnav/element.json000064400000012205151666572160013647 0ustar00{ "name": "subnav", "title": "Subnav", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "placeholder": { "children": [ { "type": "subnav_item", "props": {} }, { "type": "subnav_item", "props": {} }, { "type": "subnav_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "title": "content", "item": "subnav_item" }, "subnav_style": { "label": "Style", "description": "Select the subnav style.", "type": "select", "options": { "Default": "", "Divider": "divider", "Pill": "pill", "Tab": "tab" } }, "html_element": { "label": "HTML Element", "description": "Define a navigation menu or give it no semantic meaning.", "type": "select", "options": { "div": "", "nav": "nav" } }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-item", ".el-content", ".el-link"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content"] }, { "title": "Settings", "fields": [ { "label": "Subnav", "type": "group", "divider": true, "fields": ["subnav_style", "html_element"] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/subnav/templates/template.php000064400000001334151666572160015646 0ustar00<?php $el = $this->el($props['html_element'] ?: 'div'); // Subnav $subnav = $this->el('ul', [ 'class' => [ 'uk-margin-remove-bottom', 'uk-subnav {@subnav_style: |divider|pill} [uk-subnav-{subnav_style: divider|pill}]', 'uk-tab {@subnav_style: tab}', 'uk-flex-{text_align}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]]', ], 'uk-margin' => count($children) > 1, ]); ?> <?= $el($props, $attrs) ?> <?= $subnav($props) ?> <?php foreach ($children as $child) : ?> <li class="el-item <?= $child->props['active'] ? 'uk-active' : '' ?>"><?= $builder->render($child, ['element' => $props]) ?></li> <?php endforeach ?> <?= $subnav->end() ?> <?= $el->end() ?> builder/elements/subnav/templates/content.php000064400000000512151666572160015502 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <p> <?= $builder->render($children[0], ['element' => $props]) ?> </p> <?php endif ?> builder/elements/quotation/images/iconSmall.svg000064400000000475151666572160015765 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" d="M9.5,5.5v5c0,3.4-2.5,5-5,5v-1.3c1.8-0.3,2.6-1.7,2.5-3.7H4.5v-5H9.5z" /> <path fill="none" stroke="#444" d="M16.5,5.5v5c0,3.4-2.5,5-5,5v-1.3c1.8-0.3,2.6-1.7,2.5-3.7h-2.5v-5 H16.5z" /> </svg> builder/elements/quotation/images/icon.svg000064400000000510151666572160014762 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" stroke-width="2" d="M13,7v8c0,5.4-4,9-8,9v-3.1c2.9-0.5,4.2-2.7,4-5.9 H5V7H13z" /> <path fill="none" stroke="#444" stroke-width="2" d="M25,7v8c0,5.4-4,9-8,9v-3.1c2.9-0.5,4.2-2.7,4-5.9 h-4V7H25z" /> </svg> builder/elements/quotation/templates/content.php000064400000000771151666572160016236 0ustar00<?php if ($props['content'] != '') : ?> <blockquote> <?= $props['content'] ?> <?php if ($props['footer'] || $props['author']) : ?> <footer> <?= $props['footer'] ?> <?php if ($props['author'] && $props['link']) : ?> <cite><a href="<?= $props['link'] ?>"><?= $props['author'] ?></a></cite> <?php elseif ($props['author']) : ?> <cite><?= $props['author'] ?></cite> <?php endif ?> </footer> <?php endif ?> </blockquote> <?php endif ?> builder/elements/quotation/templates/template.php000064400000001274151666572160016376 0ustar00<?php $el = $this->el('blockquote', [ 'class' => [ 'uk-margin-remove {@position: absolute}', ], ]); // Link $link = $this->el('a', [ 'class' => [ 'uk-link-{link_style}', ], 'href' => ['{link}'], 'target' => ['_blank {@link_target}'], ]); ?> <?= $el($props, $attrs) ?> <?= $props['content'] ?> <?php if ($props['footer'] || $props['author']) : ?> <footer class="el-footer"> <?= $props['footer'] ?> <?php if ($props['author']) : ?> <cite class="el-author"><?= $props['link'] ? $link($props, $props['author']) : $props['author'] ?></cite> <?php endif ?> </footer> <?php endif ?> <?= $el->end() ?> builder/elements/quotation/updates.php000064400000000245151666572160014227 0ustar00<?php namespace YOOtheme; return [ '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/quotation/element.json000064400000013121151666572160014372 0ustar00{ "@import": "./element.php", "name": "quotation", "title": "Quotation", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "placeholder": { "props": { "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "type": "editor", "source": true }, "author": { "label": "Author", "description": "Enter the author name.", "source": true }, "link": { "label": "Author Link", "attrs": { "placeholder": "http://" }, "source": true, "enable": "author" }, "link_target": { "type": "checkbox", "text": "Open in a new window", "enable": "author && link" }, "footer": { "label": "Footer", "description": "Enter an optional footer text.", "source": true }, "link_style": { "label": "Style", "description": "Select the link style.", "type": "select", "options": { "None": "", "Muted": "muted", "Text": "text", "Reset": "reset" }, "enable": "author && link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-footer</code>, <code>.el-author</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-footer", ".el-author"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content", "author", "link", "link_target", "footer"] }, { "title": "Settings", "fields": [ { "label": "Link", "type": "group", "divider": true, "fields": ["link_style"] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/quotation/element.php000064400000000352151666572160014212 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return (bool) $node->props['content']; }, ], ]; builder/elements/slideshow/updates.php000064400000021373151666572160014212 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.1' => function ($node) { unset($node->props['nav_color']); unset($node->props['slidenav_outside_color']); }, '4.3.0-beta.0.5' => function ($node, $params) { if ($height = Arr::get($node->props, 'slideshow_height')) { if ($height === 'full' || $height === 'percent') { $node->props['slideshow_height'] = 'viewport'; } if ($height === 'percent') { $node->props['slideshow_height_viewport'] = 80; } if ( ($params['updateContext']['sectionIndex'] ?? 0) < 2 && empty($params['updateContext']['height']) ) { $node->props['slideshow_height_offset_top'] = true; } $params['updateContext']['height'] = true; } }, '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '2.8.0-beta.0.3' => function ($node) { foreach (['overlay', 'title', 'meta', 'content', 'link'] as $prefix) { foreach (['x', 'y', 'scale', 'rotate', 'opacity'] as $prop) { $key = "{$prefix}_parallax_{$prop}"; $start = implode( ',', array_map('trim', explode(',', Arr::get($node->props, "{$key}_start", ''))), ); $end = implode( ',', array_map('trim', explode(',', Arr::get($node->props, "{$key}_end", ''))), ); if ($start !== '' || $end !== '') { $default = in_array($prop, ['scale', 'opacity']) ? 1 : 0; $values = [ $start !== '' ? $start : $default, $default, $end !== '' ? $end : $default, ]; Arr::set($node->props, $key, implode(',', $values)); } Arr::del($node->props, "{$key}_start"); Arr::del($node->props, "{$key}_end"); } } }, '2.3.0-beta.1.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ($style == 'fjord') { if (Arr::get($node->props, 'overlay_container') === 'default') { $node->props['overlay_container'] = 'large'; } } }, '2.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'overlay_width') === 'xxlarge') { $node->props['overlay_width'] = '2xlarge'; } }, '2.0.0-beta.5.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if (!in_array($style, ['jack-baker', 'morgan-consulting', 'vibe'])) { if (Arr::get($node->props, 'overlay_container') === 'large') { $node->props['overlay_container'] = 'xlarge'; } } if ( in_array($style, [ 'craft', 'district', 'florence', 'makai', 'matthew-taylor', 'pinewood-lake', 'summit', 'tomsen-brody', 'trek', 'vision', 'yard', ]) ) { if (Arr::get($node->props, 'overlay_container') === 'default') { $node->props['overlay_container'] = 'large'; } } }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'title_style') === 'heading-hero') { $node->props['title_style'] = 'heading-xlarge'; } if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } if (in_array($style, ['juno', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-medium'; } } if ( in_array($style, [ 'district', 'florence', 'flow', 'nioh-studio', 'summit', 'vision', ]) ) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-large'; } } if ($style == 'lilian') { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-2xlarge'; } } }, '1.19.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { $node->props['meta_align'] = 'above-title'; } if (Arr::get($node->props, 'meta_align') === 'bottom') { $node->props['meta_align'] = 'below-title'; } }, '1.18.10.3' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { if (!empty($node->props['meta_margin'])) { $node->props['title_margin'] = $node->props['meta_margin']; } $node->props['meta_margin'] = ''; } }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, ['thumbnav_inline_svg' => 'thumbnav_svg_inline']); }, '1.18.0' => function ($node) { if ( !isset($node->props['slideshow_box_decoration']) && Arr::get($node->props, 'slideshow_box_shadow_bottom') === true ) { $node->props['slideshow_box_decoration'] = 'shadow'; } if ( !isset($node->props['meta_color']) && Arr::get($node->props, 'meta_style') === 'muted' ) { $node->props['meta_color'] = 'muted'; $node->props['meta_style'] = ''; } }, ]; builder/elements/slideshow/templates/template-slidenav.php000064400000004635151666572160020163 0ustar00<?php $slidenav = $this->el('a', [ 'class' => [ 'el-slidenav', 'uk-slidenav-large {@slidenav_large}', ], 'href' => '#', // WordPress Preview reloads if `href` is empty ]); $attrs_slidenav_next = [ 'uk-slidenav-next' => true, 'uk-slideshow-item' => 'next', ]; $attrs_slidenav_previous = [ 'uk-slidenav-previous' => true, 'uk-slideshow-item' => 'previous', ]; $slidenav_container = $this->el('div', [ 'class' => [ 'uk-visible@{slidenav_breakpoint}', 'uk-hidden-hover uk-hidden-touch {@slidenav_hover}', // Initial text color 'uk-{text_color} {@!slidenav: outside}', ], 'uk-inverse' => true, ]); if (in_array($props['slidenav'], ['default', 'outside'])) { $slidenav_container->attr([ 'class' => [ 'uk-position-{slidenav_margin}', ], ]); $attrs_slidenav_container_next = [ 'class' => [ 'uk-position-center-right {@slidenav: default}', 'uk-position-center-right-out {@slidenav: outside}', ], 'uk-toggle' => [ 'cls: uk-position-center-right-out uk-position-center-right; mode: media; media: @{slidenav_outside_breakpoint} {@slidenav: outside}', ], ]; $attrs_slidenav_container_previous = [ 'class' => [ 'uk-position-center-left {@slidenav: default}', 'uk-position-center-left-out {@slidenav: outside}', ], 'uk-toggle' => [ 'cls: uk-position-center-left-out uk-position-center-left; mode: media; media: @{slidenav_outside_breakpoint} {@slidenav: outside}', ], ]; } else { $slidenav_container->attr([ 'class' => [ 'uk-slidenav-container uk-position-{slidenav} [uk-position-{slidenav_margin}]', ], ]); } ?> <?php if (!in_array($props['slidenav'], ['default', 'outside'])) : ?> <?= $slidenav_container($props) ?> <?= $slidenav($props, $attrs_slidenav_previous, '') ?> <?= $slidenav($props, $attrs_slidenav_next, '') ?> <?= $slidenav_container->end() ?> <?php else : ?> <?= $slidenav_container($props, $attrs_slidenav_container_previous) ?> <?= $slidenav($props, $attrs_slidenav_previous, '') ?> <?= $slidenav_container->end() ?> <?= $slidenav_container($props, $attrs_slidenav_container_next) ?> <?= $slidenav($props, $attrs_slidenav_next, '') ?> <?= $slidenav_container->end() ?> <?php endif ?>builder/elements/slideshow/templates/content.php000064400000000522151666572160016206 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/slideshow/templates/template.php000064400000012335151666572160016354 0ustar00<?php // Resets if ($props['overlay_link']) { $props['title_link'] = ''; } if ($props['slideshow_height']) { $props['height_expand'] = ''; } if ($props['slideshow_height'] == 'viewport') { if ($props['slideshow_height_viewport'] > 100) { $props['slideshow_height_offset_top'] = false; } elseif (!$props['slideshow_height_viewport']) { $props['slideshow_height_viewport'] = 100; } } if ($props['slideshow_parallax']) { $props['slidenav'] = ''; } $el = $this->el('div', [ 'class' => [ // Expand to column height 'uk-flex-1 uk-flex uk-flex-column {@height_expand}', ], 'uk-slideshow' => $this->expr([ 'ratio: {0};' => $props['slideshow_height'] ? 'false' : $props['slideshow_ratio'], 'minHeight: {slideshow_min_height}; {@!slideshow_height} {@!height_expand}', 'maxHeight: {slideshow_max_height}; {@!slideshow_height} {@!height_expand}', 'animation: {slideshow_animation};', 'velocity: {slideshow_velocity}; {@!slideshow_parallax}', 'autoplay: {slideshow_autoplay}; [pauseOnHover: false; {!slideshow_autoplay_pause}; ] [autoplayInterval: {slideshow_autoplay_interval}000;] {@!slideshow_parallax}', // Parallax 'parallax: true; {@slideshow_parallax}', 'parallax-easing: {slideshow_parallax_easing}; {@slideshow_parallax}', 'parallax-target: {slideshow_parallax_target}; {@slideshow_parallax}', 'parallax-start: {slideshow_parallax_start}; {@slideshow_parallax}', 'parallax-end: {slideshow_parallax_end}; {@slideshow_parallax}', ], $props) ?: true, ]); // Container $container = $this->el('div', [ 'class' => [ 'uk-position-relative', 'uk-visible-toggle' => ($props['slidenav'] && $props['slidenav_hover']) || ($props['nav'] && $props['nav_hover']), 'uk-flex-1 uk-flex uk-flex-column {@height_expand}', ], 'tabindex' => ($props['slidenav'] && $props['slidenav_hover']) || ($props['nav'] && $props['nav_hover']) ? '-1' : null, ]); // Box decoration $decoration = $this->el('div', [ 'class' => [ 'uk-box-shadow-bottom [uk-display-block {@!height_expand}] {@slideshow_box_decoration: shadow}', 'tm-mask-default {@slideshow_box_decoration: mask}', 'tm-box-decoration-{slideshow_box_decoration: default|primary|secondary}', 'tm-box-decoration-inverse {@slideshow_box_decoration_inverse} {@slideshow_box_decoration: default|primary|secondary}', 'uk-flex-1 uk-flex uk-flex-column {@height_expand}', ], ]); // Items $items = $this->el($props['link'] ? 'a' : 'div', [ 'class' => [ 'uk-slideshow-items', 'uk-box-shadow-{slideshow_box_shadow}', 'uk-flex-1 {@height_expand}', ], 'style' => [ 'min-height: max({0}px, {slideshow_height_viewport}vh); {@slideshow_height: viewport} {@!slideshow_height_offset_top}' => [$props['slideshow_min_height'] ?: '0'], ], 'uk-height-viewport' => ($props['slideshow_height'] == 'viewport' && $props['slideshow_height_offset_top']) || $props['slideshow_height'] == 'section' ? [ 'offset-top: true; {@slideshow_height_offset_top}', 'min: {slideshow_min_height};', 'offset-bottom: {0}; {@slideshow_height: viewport}' => $props['slideshow_height_viewport'] && $props['slideshow_height_viewport'] < 100 ? 100 - (int) $props['slideshow_height_viewport'] : false, 'offset-bottom: !:is(.uk-section-default,.uk-section-muted,.uk-section-primary,.uk-section-secondary) +; {@slideshow_height: section}', ] : false, ]); if ($props['link']) { $items->attr([ 'href' => ['{link}'], 'aria-label' => ['{link_aria_label}'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), 'class' => ['uk-display-block'], ]); } ?> <?= $el($props, $attrs) ?> <?= $container($props) ?> <?php if ($props['slideshow_box_decoration']) : ?> <?= $decoration($props) ?> <?php endif ?> <?= $items($props) ?> <?php foreach ($children as $i => $child) : $item = $this->el('div', [ 'class' => [ 'el-item', 'uk-inverse-{0}' => $child->props['text_color'] ?: $props['text_color'], ], 'style' => [ 'background-color: {0};' => $child->props['media_background'] ?: false, ], ]); ?> <?= $item($props, $builder->render($child, ['i' => $i, 'element' => $props])) ?> <?php endforeach ?> <?= $items->end() ?> <?php if ($props['slideshow_box_decoration']) : ?> <?= $decoration->end() ?> <?php endif ?> <?php if ($props['slidenav']) : ?> <?= $this->render("{$__dir}/template-slidenav") ?> <?php endif ?> <?php if ($props['nav'] && !$props['nav_below']) : ?> <?= $this->render("{$__dir}/template-nav") ?> <?php endif ?> <?= $container->end() ?> <?php if ($props['nav'] && $props['nav_below']) : ?> <?= $this->render("{$__dir}/template-nav") ?> <?php endif ?> <?= $el->end() ?> builder/elements/slideshow/templates/template-nav.php000064400000004622151666572160017136 0ustar00<?php $nav = $this->el('ul', [ 'class' => [ 'el-nav uk-slideshow-nav', 'uk-{nav} [uk-flex-nowrap {@nav: thumbnav} {@thumbnav_nowrap}]', // Alignment 'uk-flex-{nav_align} {@nav_below}', // Vertical 'uk-{nav}-vertical {@nav_vertical} {@!nav_below}', // Wrapping 'uk-flex-right {@!nav_vertical} {@!nav_below} {@nav_position: .*-right}', 'uk-flex-center {@!nav_vertical} {@!nav_below} {@nav_position: bottom-center}', ], 'uk-margin' => !$props['nav_vertical'] && ($props['nav'] !== 'thumbnav' || !$props['thumbnav_nowrap']), ]); $nav_container = $this->el('div', [ 'class' => [ // Margin 'uk-margin[-{nav_margin}]-top {@nav_below}', // Position 'uk-position-{nav_position} {@!nav_below}', // Margin 'uk-position-{nav_position_margin} {@!nav_below}', // Hover 'uk-hidden-hover uk-hidden-touch {@nav_hover}', // Breakpoint 'uk-visible@{nav_breakpoint}', // Initial text color 'uk-{text_color} {@!nav_below}', ], 'uk-inverse' => true, ]); ?> <?= $nav_container($props) ?> <?= $nav($props) ?> <?php foreach ($children as $i => $child) : // Image $image = $this->el('image', [ 'class' => [ 'uk-text-{thumbnav_svg_color}' => $props['thumbnav_svg_inline'] && $props['thumbnav_svg_color'] && $this->isImage($child->props['thumbnail'] ?: $child->props['image']) == 'svg', ], 'src' => $child->props['thumbnail'] ?: $child->props['image'], 'alt' => $child->props['image_alt'], 'loading' => $props['image_loading'] ? false : null, 'width' => $props['thumbnav_width'], 'height' => $props['thumbnav_height'], 'focal_point' => $child->props['thumbnail'] ? $child->props['thumbnail_focal_point'] : $child->props['image_focal_point'], 'uk-svg' => (bool) $props['thumbnav_svg_inline'], 'thumbnail' => true, ]); $thumbnail = $image->attrs['src'] && $props['nav'] == 'thumbnav' ? $image($props) : ''; ?> <li uk-slideshow-item="<?= $i ?>"> <a href="#"><?= $thumbnail ?: $child->props['title'] ?></a> </li> <?php endforeach ?> <?= $nav->end() ?> <?= $nav_container->end() ?> builder/elements/slideshow/images/icon.svg000064400000001004151666572160014737 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <circle fill="#444" cx="10.5" cy="28.5" r="1.5" /> <circle fill="#444" cx="15.5" cy="28.5" r="1.5" /> <circle fill="#444" cx="20.5" cy="28.5" r="1.5" /> <rect width="28" height="22" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <polyline fill="none" stroke="#444" stroke-width="2" points="22,9 25,12 22,15" /> <polyline fill="none" stroke="#444" stroke-width="2" points="8,9 5,12 8,15" /> </svg> builder/elements/slideshow/images/iconSmall.svg000064400000000700151666572160015732 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="#444" cx="7" cy="19" r="1" /> <circle fill="#444" cx="10" cy="19" r="1" /> <circle fill="#444" cx="13" cy="19" r="1" /> <rect width="19" height="15" fill="none" stroke="#444" x="0.5" y="0.5" /> <polyline fill="none" stroke="#444" points="14,5 17,8 14,11" /> <polyline fill="none" stroke="#444" points="6,5 3,8 6,11" /> </svg> builder/elements/slideshow/element.json000064400000164615151666572160014367 0ustar00{ "name": "slideshow", "title": "Slideshow", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_title": true, "show_meta": true, "show_content": true, "show_link": true, "show_thumbnail": true, "slideshow_min_height": 300, "slideshow_autoplay_pause": true, "nav": "dotnav", "nav_position": "bottom-center", "nav_position_margin": "medium", "nav_align": "center", "nav_breakpoint": "s", "thumbnav_width": "100", "thumbnav_height": "75", "thumbnav_svg_color": "emphasis", "slidenav": "default", "slidenav_margin": "medium", "slidenav_breakpoint": "s", "slidenav_outside_breakpoint": "xl", "overlay_position": "center-left", "overlay_animation": "parallax", "title_hover_style": "reset", "title_element": "h3", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "link_text": "Read more", "link_style": "default", "margin": "default" }, "placeholder": { "children": [ { "type": "slideshow_item", "props": {} }, { "type": "slideshow_item", "props": {} }, { "type": "slideshow_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "item": "slideshow_item", "media": [ { "type": "image", "item": { "title": "title", "image": "src" } }, { "type": "video", "item": { "title": "title", "video": "src" } } ] }, "show_title": { "label": "Display", "type": "checkbox", "text": "Show the title" }, "show_meta": { "type": "checkbox", "text": "Show the meta text" }, "show_content": { "type": "checkbox", "text": "Show the content" }, "show_link": { "type": "checkbox", "text": "Show the link" }, "show_thumbnail": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the navigation thumbnail instead of the image" }, "link": { "label": "Link", "type": "link", "description": "Link the whole slideshow instead of linking items separately.", "attrs": { "placeholder": "http://" }, "source": true }, "slideshow_height": { "type": "select", "options": { "Auto": "", "Viewport": "viewport", "Viewport (Subtract Next Section)": "section" } }, "slideshow_height_viewport": { "type": "number", "attrs": { "placeholder": "100", "min": 0, "max": 100, "step": 10, "class": "uk-form-width-xsmall" }, "enable": "slideshow_height == 'viewport'" }, "height_expand": { "type": "checkbox", "text": "Fill the available column space", "enable": "!slideshow_height" }, "slideshow_height_offset_top": { "type": "checkbox", "text": "Subtract height above", "enable": "slideshow_height == 'viewport' && (slideshow_height_viewport || 0) <= 100 || slideshow_height == 'section'" }, "slideshow_ratio": { "label": "Ratio", "description": "Set the slideshow ratio. It's recommended to use the same ratio as the image or video file. Simply use its width and height, e.g. <code>1600:900</code>.", "attrs": { "placeholder": "16:9" }, "enable": "!slideshow_height" }, "slideshow_min_height": { "label": "Min Height", "description": "Use an optional minimum height to prevent the slideshow from becoming smaller than its content on small devices.", "type": "range", "attrs": { "min": 200, "max": 800, "step": 50 }, "enable": "slideshow_height || (!slideshow_height && !height_expand)" }, "slideshow_max_height": { "label": "Max Height", "description": "Set the maximum height.", "type": "range", "attrs": { "min": 500, "max": 1600, "step": 50 }, "enable": "!slideshow_height" }, "text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" } }, "slideshow_box_shadow": { "label": "Box Shadow", "description": "Select the slideshow box shadow size.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" } }, "slideshow_box_decoration": { "label": "Box Decoration", "description": "Select the image box decoration style.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Floating Shadow": "shadow", "Mask": "mask" } }, "slideshow_box_decoration_inverse": { "type": "checkbox", "text": "Inverse style", "enable": "$match(slideshow_box_decoration, '^(default|primary|secondary)$')" }, "slideshow_animation": { "label": "Transition", "description": "Select the transition between two slides.", "type": "select", "options": { "Slide": "", "Pull": "pull", "Push": "push", "Fade": "fade", "Scale": "scale" } }, "slideshow_velocity": { "label": "Velocity", "description": "Set the velocity in pixels per millisecond.", "type": "range", "attrs": { "min": 0.2, "max": 3, "step": 0.1, "placeholder": "1" }, "enable": "!slideshow_parallax" }, "slideshow_autoplay": { "label": "Autoplay", "type": "checkbox", "text": "Enable autoplay", "enable": "!slideshow_parallax" }, "slideshow_autoplay_pause": { "type": "checkbox", "text": "Pause autoplay on hover", "enable": "!slideshow_parallax && slideshow_autoplay" }, "slideshow_autoplay_interval": { "label": "Autoplay Interval", "description": "Set the autoplay interval in seconds.", "type": "range", "attrs": { "min": 5, "max": 15, "step": 1, "placeholder": "7" }, "enable": "!slideshow_parallax && slideshow_autoplay" }, "slideshow_parallax": { "label": "Parallax", "description": "Add a stepless parallax animation based on the scroll position.", "type": "checkbox", "text": "Enable parallax effect" }, "slideshow_parallax_easing": { "label": "Parallax Easing", "description": "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.", "type": "range", "attrs": { "min": -2, "max": 2, "step": 0.1 }, "enable": "slideshow_parallax" }, "slideshow_parallax_target": { "label": "Parallax Target", "description": "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.", "type": "select", "options": { "Element": "", "Column": "!.tm-grid-expand>*", "Row": "!.tm-grid-expand", "Section": "!.uk-section", "Next Section": "![class*='uk-section-'] ~ [class*='uk-section-']" }, "enable": "slideshow_parallax" }, "slideshow_parallax_start": { "enable": "slideshow_parallax" }, "slideshow_parallax_end": { "enable": "slideshow_parallax" }, "slideshow_kenburns": { "label": "Ken Burns Effect", "description": "Select the transformation origin for the Ken Burns animation.", "type": "select", "options": { "None": "", "Alternate": "alternate", "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "center-center", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" } }, "slideshow_kenburns_duration": { "label": "Ken Burns Duration", "description": "Set the duration for the Ken Burns effect in seconds.", "type": "range", "attrs": { "min": 10, "max": 30, "step": 1, "placeholder": "15" }, "enable": "slideshow_kenburns" }, "nav": { "label": "Navigation", "description": "Select the navigation type.", "type": "select", "options": { "None": "", "Dotnav": "dotnav", "Thumbnav": "thumbnav" } }, "nav_below": { "type": "checkbox", "text": "Show below slideshow", "enable": "nav" }, "nav_hover": { "type": "checkbox", "text": "Show on hover only", "enable": "nav && !nav_below" }, "nav_vertical": { "type": "checkbox", "text": "Vertical navigation", "enable": "nav && !nav_below" }, "nav_position": { "label": "Position", "description": "Select the position of the navigation.", "type": "select", "options": { "Top Left": "top-left", "Top Right": "top-right", "Center Left": "center-left", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "show": "nav && !nav_below" }, "nav_align": { "label": "Position", "description": "Align the navigation items.", "type": "select", "options": { "Left": "left", "Center": "center", "Right": "right" }, "show": "nav && nav_below" }, "nav_position_margin": { "label": "Margin", "description": "Apply a margin between the navigation and the slideshow container.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large" }, "show": "nav && !nav_below" }, "nav_margin": { "label": "Margin", "description": "Set the vertical margin.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large" }, "show": "nav && nav_below" }, "nav_breakpoint": { "label": "Breakpoint", "description": "Display the navigation only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "nav" }, "thumbnav_width": { "attrs": { "placeholder": "auto" }, "enable": "nav == 'thumbnav' && show_thumbnail" }, "thumbnav_height": { "attrs": { "placeholder": "auto" }, "enable": "nav == 'thumbnav' && show_thumbnail" }, "thumbnav_nowrap": { "label": "Thumbnav Wrap", "description": "Define whether thumbnails wrap into multiple lines if the container is too small.", "type": "checkbox", "text": "Don't wrap into multiple lines", "enable": "nav == 'thumbnav' && show_thumbnail" }, "thumbnav_svg_inline": { "label": "Thumbnav Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "nav == 'thumbnav' && show_thumbnail" }, "thumbnav_svg_color": { "label": "Thumbnav SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "nav == 'thumbnav' && show_thumbnail && thumbnav_svg_inline" }, "slidenav": { "label": "Position", "description": "Select the position of the slidenav.", "type": "select", "options": { "None": "", "Default": "default", "Outside": "outside", "Top Left": "top-left", "Top Right": "top-right", "Center Left": "center-left", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" } }, "slidenav_hover": { "type": "checkbox", "text": "Show on hover only", "enable": "slidenav" }, "slidenav_large": { "type": "checkbox", "text": "Larger style", "enable": "slidenav" }, "slidenav_margin": { "label": "Margin", "description": "Apply a margin between the slidenav and the slideshow container.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large" }, "enable": "slidenav" }, "slidenav_breakpoint": { "label": "Breakpoint", "description": "Display the slidenav only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "slidenav" }, "slidenav_outside_breakpoint": { "label": "Outside Breakpoint", "description": "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "slidenav == 'outside'" }, "overlay_link": { "label": "Link", "description": "Link the whole overlay if a link exists.", "type": "checkbox", "text": "Link overlay", "enable": "show_link && !link" }, "overlay_container": { "label": "Container Width", "description": "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.", "type": "select", "options": { "None": "", "Default": "default", "Small": "small", "Large": "large", "X-Large": "xlarge", "Expand": "expand" } }, "overlay_container_padding": { "label": "Container Padding", "description": "Set the vertical container padding to position the overlay.", "type": "select", "options": { "Default": "", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge" }, "enable": "overlay_container" }, "overlay_margin": { "label": "Margin", "description": "Set the margin between the overlay and the slideshow container.", "type": "select", "options": { "Default": "", "Small": "small", "Large": "large", "None": "none" }, "enable": "!overlay_container" }, "overlay_position": { "label": "Position", "description": "Select the content position.", "type": "select", "options": { "Top": "top", "Bottom": "bottom", "Left": "left", "Right": "right", "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "center", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" } }, "overlay_style": { "label": "Style", "description": "Select a style for the overlay.", "type": "select", "options": { "None": "", "Overlay Default": "overlay-default", "Overlay Primary": "overlay-primary", "Tile Default": "tile-default", "Tile Muted": "tile-muted", "Tile Primary": "tile-primary", "Tile Secondary": "tile-secondary" } }, "overlay_padding": { "label": "Padding", "description": "Set the padding between the overlay and its content.", "type": "select", "options": { "Default": "", "Small": "small", "Large": "large" }, "enable": "overlay_style" }, "content_expand": { "label": "Height", "description": "Expand the height of the content to fill the available space in the overlay and push the link to the bottom.", "type": "checkbox", "text": "Expand content" }, "overlay_width": { "label": "Width", "description": "Set a fixed width.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "!$match(overlay_position, '^(top|bottom)$')" }, "overlay_animation": { "label": "Animation", "description": "Choose between a parallax depending on the scroll position or an animation, which is applied once the slide is active.", "type": "select", "options": { "Parallax": "parallax", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" } }, "_slideshow_overlay_parallax": { "type": "button-panel", "panel": "builder-slideshow-overlay-parallax", "text": "Edit Settings", "enable": "overlay_animation == 'parallax'" }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" } }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" } }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly" }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" }, "enable": "show_title" }, "title_link": { "label": "Link", "description": "Link the title if a link exists.", "type": "checkbox", "text": "Link title", "enable": "show_title && show_link && !link" }, "title_hover_style": { "label": "Hover Style", "description": "Set the hover style for a linked title.", "type": "select", "options": { "None": "reset", "Heading Link": "heading", "Default Link": "" }, "enable": "show_title && show_link && !link && (title_link || overlay_link)" }, "title_decoration": { "label": "Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "enable": "show_title" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "show_title" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "show_title" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_title" }, "title_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_title" }, "_title_parallax": { "label": "Parallax", "description": "Add a parallax effect.", "type": "button-panel", "panel": "builder-slideshow-title-parallax", "text": "Edit Settings", "enable": "show_title && overlay_animation == 'parallax'" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_meta" }, "meta_align": { "label": "Alignment", "description": "Align the meta text.", "type": "select", "options": { "Above Title": "above-title", "Below Title": "below-title", "Below Content": "below-content" }, "enable": "show_meta" }, "meta_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_meta" }, "meta_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_meta" }, "_meta_parallax": { "label": "Parallax", "description": "Add a parallax effect.", "type": "button-panel", "panel": "builder-slideshow-meta-parallax", "text": "Edit Settings", "enable": "show_meta && overlay_animation == 'parallax'" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_content" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_content" }, "_content_parallax": { "label": "Parallax", "description": "Add a parallax effect.", "type": "button-panel", "panel": "builder-slideshow-content-parallax", "text": "Edit Settings", "enable": "show_content && overlay_animation == 'parallax'" }, "link_target": { "label": "Target", "type": "checkbox", "text": "Open in a new window", "enable": "show_link" }, "link_text": { "label": "Text", "description": "Enter the text for the link.", "enable": "show_link && !link" }, "link_aria_label": { "label": "ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text.", "enable": "show_link" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "show_link && !link" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "show_link && !link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "show_link && !link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_link && !link" }, "_link_parallax": { "label": "Parallax", "description": "Add a parallax effect.", "type": "button-panel", "panel": "builder-slideshow-link-parallax", "text": "Edit Settings", "enable": "show_link && !link && overlay_animation == 'parallax'" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-nav</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-overlay</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-item", ".el-nav", ".el-slidenav", ".el-image", ".el-overlay", ".el-title", ".el-meta", ".el-content", ".el-link" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "content", "show_title", "show_meta", "show_content", "show_link", "show_thumbnail", "link" ] }, { "title": "Settings", "fields": [ { "label": "Slideshow", "type": "group", "divider": true, "fields": [ { "label": "Height", "description": "The slideshow always takes up full width, and the height will adapt automatically based on the defined ratio. Alternatively, the height can adapt to the height of the viewport or to fill the available space in the column.<br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.", "name": "_slideshow_height", "type": "grid", "width": "expand,auto", "gap": "small", "fields": ["slideshow_height", "slideshow_height_viewport"] }, "height_expand", "slideshow_height_offset_top", "slideshow_ratio", "slideshow_min_height", "slideshow_max_height", "text_color", "slideshow_box_shadow", "slideshow_box_decoration", "slideshow_box_decoration_inverse" ] }, { "label": "Animation", "type": "group", "divider": true, "fields": [ "slideshow_animation", "slideshow_velocity", "slideshow_autoplay", "slideshow_autoplay_pause", "slideshow_autoplay_interval", "slideshow_parallax", "slideshow_parallax_easing", "slideshow_parallax_target", { "label": "Parallax Start/End", "description": "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.", "type": "grid", "width": "1-2", "fields": ["slideshow_parallax_start", "slideshow_parallax_end"] }, "slideshow_kenburns", "slideshow_kenburns_duration" ] }, { "label": "Navigation", "type": "group", "divider": true, "fields": [ "nav", "nav_below", "nav_hover", "nav_vertical", "nav_position", "nav_align", "nav_position_margin", "nav_margin", "nav_breakpoint", { "label": "Thumbnail Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["thumbnav_width", "thumbnav_height"] }, "thumbnav_nowrap", "thumbnav_svg_inline", "thumbnav_svg_color" ] }, { "label": "Slidenav", "type": "group", "divider": true, "fields": [ "slidenav", "slidenav_hover", "slidenav_large", "slidenav_margin", "slidenav_breakpoint", "slidenav_outside_breakpoint" ] }, { "label": "Item", "type": "group", "divider": true, "fields": [ "overlay_link" ] }, { "label": "Overlay", "type": "group", "divider": true, "fields": [ "overlay_container", "overlay_container_padding", "overlay_margin", "overlay_position", "overlay_style", "overlay_padding", "content_expand", "overlay_width", "overlay_animation", "_slideshow_overlay_parallax" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading" ] }, { "label": "Title", "type": "group", "divider": true, "fields": [ "title_style", "title_link", "title_hover_style", "title_decoration", "title_font_family", "title_color", "title_element", "title_margin", "_title_parallax" ] }, { "label": "Meta", "type": "group", "divider": true, "fields": [ "meta_style", "meta_color", "meta_align", "meta_element", "meta_margin", "_meta_parallax" ] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_style", "content_margin", "_content_parallax"] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", "link_text", "link_aria_label", "link_style", "link_size", "link_fullwidth", "link_margin", "_link_parallax" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } }, "panels": { "builder-slideshow-overlay-parallax": { "title": "Overlay Parallax", "width": 500, "fields": { "overlay_parallax_x": { "text": "Translate X", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "overlay_parallax_y": { "text": "Translate Y", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "overlay_parallax_scale": { "text": "Scale", "type": "parallax-stops", "attrs": { "min": 0.3, "max": 4, "step": 0.1 } }, "overlay_parallax_rotate": { "text": "Rotate", "type": "parallax-stops", "attrs": { "min": 0, "max": 360, "step": 10 } }, "overlay_parallax_opacity": { "text": "Opacity", "type": "parallax-stops", "attrs": { "min": 0, "max": 1, "step": 0.1 } } }, "fieldset": { "default": { "fields": [ "overlay_parallax_x", "overlay_parallax_y", "overlay_parallax_scale", "overlay_parallax_rotate", "overlay_parallax_opacity" ] } } }, "builder-slideshow-title-parallax": { "title": "Title Parallax", "width": 500, "fields": { "title_parallax_x": { "text": "Translate X", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "title_parallax_y": { "text": "Translate Y", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "title_parallax_scale": { "text": "Scale", "type": "parallax-stops", "attrs": { "min": 0.3, "max": 4, "step": 0.1 } }, "title_parallax_rotate": { "text": "Rotate", "type": "parallax-stops", "attrs": { "min": 0, "max": 360, "step": 10 } }, "title_parallax_opacity": { "text": "Opacity", "type": "parallax-stops", "attrs": { "min": 0, "max": 1, "step": 0.1 } } }, "fieldset": { "default": { "fields": [ "title_parallax_x", "title_parallax_y", "title_parallax_scale", "title_parallax_rotate", "title_parallax_opacity" ] } } }, "builder-slideshow-meta-parallax": { "title": "Meta Parallax", "width": 500, "fields": { "meta_parallax_x": { "text": "Translate X", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "meta_parallax_y": { "text": "Translate Y", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "meta_parallax_scale": { "text": "Scale", "type": "parallax-stops", "attrs": { "min": 0.3, "max": 4, "step": 0.1 } }, "meta_parallax_rotate": { "text": "Rotate", "type": "parallax-stops", "attrs": { "min": 0, "max": 360, "step": 10 } }, "meta_parallax_opacity": { "text": "Opacity", "type": "parallax-stops", "attrs": { "min": 0, "max": 1, "step": 0.1 } } }, "fieldset": { "default": { "fields": [ "meta_parallax_x", "meta_parallax_y", "meta_parallax_scale", "meta_parallax_rotate", "meta_parallax_opacity" ] } } }, "builder-slideshow-content-parallax": { "title": "Content Parallax", "width": 500, "fields": { "content_parallax_x": { "text": "Translate X", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "content_parallax_y": { "text": "Translate Y", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "content_parallax_scale": { "text": "Scale", "type": "parallax-stops", "attrs": { "min": 0.3, "max": 4, "step": 0.1 } }, "content_parallax_rotate": { "text": "Rotate", "type": "parallax-stops", "attrs": { "min": 0, "max": 360, "step": 10 } }, "content_parallax_opacity": { "text": "Opacity", "type": "parallax-stops", "attrs": { "min": 0, "max": 1, "step": 0.1 } } }, "fieldset": { "default": { "fields": [ "content_parallax_x", "content_parallax_y", "content_parallax_scale", "content_parallax_rotate", "content_parallax_opacity" ] } } }, "builder-slideshow-link-parallax": { "title": "Link Parallax", "width": 500, "fields": { "link_parallax_x": { "text": "Translate X", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "link_parallax_y": { "text": "Translate Y", "type": "parallax-stops", "attrs": { "min": -600, "max": 600, "step": 10 } }, "link_parallax_scale": { "text": "Scale", "type": "parallax-stops", "attrs": { "min": 0.3, "max": 4, "step": 0.1 } }, "link_parallax_rotate": { "text": "Rotate", "type": "parallax-stops", "attrs": { "min": 0, "max": 360, "step": 10 } }, "link_parallax_opacity": { "text": "Opacity", "type": "parallax-stops", "attrs": { "min": 0, "max": 1, "step": 0.1 } } }, "fieldset": { "default": { "fields": [ "link_parallax_x", "link_parallax_y", "link_parallax_scale", "link_parallax_rotate", "link_parallax_opacity" ] } } } } } builder/elements/headline/element.php000064400000000351151666572160013737 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return $node->props['content'] != ''; }, ], ]; builder/elements/headline/element.json000064400000017376151666572160014140 0ustar00{ "@import": "./element.php", "name": "headline", "title": "Headline", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "title_element": "h1" }, "placeholder": { "props": { "content": "Headline" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "type": "editor", "root": true, "source": true }, "link": "${builder.link}", "link_target": "${builder.link_target}", "title_style": { "label": "Style", "description": "Headline styles differ in font size and font family.", "type": "select", "options": { "None": "", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" } }, "title_decoration": { "label": "Decoration", "description": "Decorate the headline with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" } }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" } }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" } }, "link_style": { "type": "checkbox", "text": "Show hover effect if linked.", "enable": "link" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" } }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-link"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content", "link", "link_target"] }, { "title": "Settings", "fields": [ { "label": "Title", "type": "group", "divider": true, "fields": [ "title_style", "title_decoration", "title_font_family", "title_color", "link_style", "title_element" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/headline/templates/content.php000064400000000515151666572160015760 0ustar00<?php if ($props['content'] != '' && $props['link']) : ?> <<?= $props['title_element'] ?>><a href="<?= $props['link'] ?>"><?= $props['content'] ?></a></<?= $props['title_element'] ?>> <?php elseif ($props['content'] != '') : ?> <<?= $props['title_element'] ?>><?= $props['content'] ?></<?= $props['title_element'] ?>> <?php endif ?> builder/elements/headline/templates/template.php000064400000002027151666572160016121 0ustar00<?php $el = $this->el($props['title_element'], [ 'class' => [ 'uk-{title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-margin-remove {@position: absolute}', ], ]); // Link $link = $props['link'] ? $this->el('a', [ 'class' => [ 'el-link', 'uk-link-{0}' => $props['link_style'] ? 'heading' : 'reset', ], 'href' => ['{link}'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ], $props['content']) : null; ?> <?= $el($props, $attrs) ?> <?php if ($props['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $link ? $link($props) : $props['content'] ?></span> <?php elseif ($props['title_decoration'] == 'line') : ?> <span><?= $link ? $link($props) : $props['content'] ?></span> <?php else : ?> <?= $link ? $link($props) : $props['content'] ?> <?php endif ?> <?= $el->end() ?> builder/elements/headline/images/iconSmall.svg000064400000000322151666572160015502 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="16" height="1" fill="#444" x="2" y="8" /> <rect width="12" height="1" fill="#444" x="4" y="11" /> </svg> builder/elements/headline/images/icon.svg000064400000000323151666572160014512 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="26" height="2" fill="#444" x="2" y="12" /> <rect width="20" height="2" fill="#444" x="5" y="16" /> </svg> builder/elements/headline/updates.php000064400000007743151666572160013767 0ustar00<?php namespace YOOtheme; return [ '2.8.0-beta.0.13' => function ($node) { if (in_array(Arr::get($node->props, 'title_style'), ['meta', 'lead'])) { $node->props['title_style'] = 'text-' . Arr::get($node->props, 'title_style'); } }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if (Arr::get($node->props, 'title_style') === 'heading-hero') { $node->props['title_style'] = 'heading-xlarge'; } if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } if (in_array($style, ['juno', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-medium'; } } if ( in_array($style, [ 'district', 'florence', 'flow', 'nioh-studio', 'summit', 'vision', ]) ) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-large'; } } if ($style == 'lilian') { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-2xlarge'; } } }, ]; builder/elements/overlay-slider/templates/content.php000064400000000522151666572160017146 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/overlay-slider/templates/template.php000064400000013623151666572160017315 0ustar00<?php // Resets if ($props['overlay_link']) { $props['title_link'] = ''; } if (!$props['slider_width']) { $props['slider_height'] = ''; $props['height_expand'] = ''; $props['image_expand'] = true; } if ($props['slider_width'] && $props['slider_height'] ) { $props['height_expand'] = ''; } if ($props['height_expand'] || $props['slider_min_height'] || $props['slider_height']) { $props['image_expand'] = true; } if ($props['slider_height'] == 'viewport') { if ($props['slider_height_viewport'] > 100) { $props['slider_height_offset_top'] = false; } elseif (!$props['slider_height_viewport']) { $props['slider_height_viewport'] = 100; } } if ($props['slider_parallax']) { $props['slidenav'] = ''; } if ($props['content_expand']) { if (in_array($props['overlay_position'], ['top', 'bottom'])) { $props['overlay_position'] = 'cover'; } if (in_array($props['overlay_position'], ['top-center', 'center', 'bottom-center'])) { $props['overlay_position'] = 'center-horizontal'; } if (in_array($props['overlay_position'], ['top-left', 'center-left', 'bottom-left'])) { $props['overlay_position'] = 'left'; } if (in_array($props['overlay_position'], ['top-right', 'center-right', 'bottom-right'])) { $props['overlay_position'] = 'right'; } } // New logic shortcuts $props['overlay_cover'] = $props['overlay_style'] && $props['overlay_mode'] == 'cover'; $el = $this->el('div', [ 'class' => [ 'uk-slider-container {@!slidenav: outside}', // Expand to column height 'uk-flex-1 uk-flex uk-flex-column {@height_expand}', ], 'uk-slider' => $this->expr([ 'sets: {slider_sets}; {@!slider_parallax}', 'center: {slider_center};', 'finite: {slider_finite};', 'velocity: {slider_velocity}; {@!slider_parallax}', 'autoplay: {slider_autoplay}; [pauseOnHover: false; {@!slider_autoplay_pause}] [autoplayInterval: {slider_autoplay_interval}000;] {@!slider_parallax}', // Parallax 'parallax: true; {@slider_parallax}', 'parallax-easing: {slider_parallax_easing}; {@slider_parallax}', 'parallax-target: {slider_parallax_target}; {@slider_parallax}', 'parallax-start: {slider_parallax_start}; {@slider_parallax}', 'parallax-end: {slider_parallax_end}; {@slider_parallax}', // Overlay active 'clsActivated: uk-transition-active; [active: first; {@overlay_active_first}] {@overlay_display: active}', ], $props) ?: true, ]); // Container $container = $this->el('div', [ 'class' => [ 'uk-position-relative', 'uk-visible-toggle' => ($props['slidenav'] && $props['slidenav_hover']) || ($props['nav'] && $props['nav_hover']), 'uk-flex-1 uk-flex uk-flex-column {@height_expand}', ], 'tabindex' => ($props['slidenav'] && $props['slidenav_hover']) || ($props['nav'] && $props['nav_hover']) ? '-1' : null, ]); // Slider Container $slider_container = $props['slidenav'] == 'outside' ? $this->el('div', [ 'class' => [ 'uk-slider-container', 'uk-flex-1 uk-flex uk-flex-column {@height_expand}', ], ]) : null; // Slider Items $slider_items = $this->el('div', [ 'class' => [ 'uk-slider-items', 'uk-grid [uk-grid-{!slider_gap: default}] {@slider_gap}', 'uk-grid-divider {@slider_gap} {@slider_divider}', 'uk-flex-1 {@height_expand}', ], 'style' => [ 'min-height: {slider_min_height}px; {@!slider_height}', 'height: max({0}px, {slider_height_viewport}vh); {@slider_height: viewport} {@!slider_height_offset_top}' => [$props['slider_min_height'] ?: '0'], ], // Height Viewport 'uk-height-viewport' => ($props['slider_height'] == 'viewport' && $props['slider_height_offset_top']) || $props['slider_height'] == 'section' ? [ 'property: height;', 'offset-top: true; {@slider_height_offset_top}', 'min: {slider_min_height};', 'offset-bottom: {0}; {@slider_height: viewport}' => $props['slider_height_viewport'] && $props['slider_height_viewport'] < 100 ? 100 - (int) $props['slider_height_viewport'] : false, 'offset-bottom: !:is(.uk-section-default,.uk-section-muted,.uk-section-primary,.uk-section-secondary) +; {@slider_height: section}', ] : false, ]); $slider_item = $this->el('div', [ 'class' => [ 'uk-width-{slider_width_default} {@slider_width}', 'uk-width-{slider_width_small}@s {@slider_width}', 'uk-width-{slider_width_medium}@m {@slider_width}', 'uk-width-{slider_width_large}@l {@slider_width}', 'uk-width-{slider_width_xlarge}@xl {@slider_width}', // Can't use `uk-grid-match` on the parent because `flex-wrap: warp` creates a multi-line flex container which doesn't shrink the child height if its content is larger 'uk-flex' => $props['image_expand'], 'uk-flex-{text_align}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]] {@image_expand}', ], ]); ?> <?= $el($props, $attrs) ?> <?= $container($props) ?> <?php if ($slider_container) : ?> <?= $slider_container($props) ?> <?php endif ?> <?= $slider_items($props) ?> <?php foreach ($children as $child) : ?> <?= $slider_item($props, $builder->render($child, ['element' => $props])) ?> <?php endforeach ?> <?= $slider_items->end() ?> <?php if ($slider_container) : ?> <?= $slider_container->end() ?> <?php endif ?> <?php if ($props['slidenav']) : ?> <?= $this->render("{$__dir}/template-slidenav") ?> <?php endif ?> <?php if ($props['nav'] && !$props['nav_below']) : ?> <?= $this->render("{$__dir}/template-nav") ?> <?php endif ?> <?= $container->end() ?> <?php if ($props['nav'] && $props['nav_below']) : ?> <?= $this->render("{$__dir}/template-nav") ?> <?php endif ?> <?= $el->end() ?> builder/elements/overlay-slider/templates/template-nav.php000064400000002131151666572160020067 0ustar00<?php $nav = $this->el('ul', [ 'class' => [ 'el-nav uk-slider-nav', 'uk-{nav}', // Alignment 'uk-flex-{nav_align} {@nav_below}', // Vertical 'uk-{nav}-vertical {@nav_vertical} {@!nav_below}', // Wrapping 'uk-flex-right {@!nav_vertical} {@!nav_below} {@nav_position: .*-right}', 'uk-flex-center {@!nav_vertical} {@!nav_below} {@nav_position: bottom-center}', ], 'uk-margin' => !$props['nav_vertical'], ]); $nav_container = $this->el('div', [ 'class' => [ // Margin 'uk-margin[-{nav_margin}]-top {@nav_below}', // Position 'uk-position-{nav_position} {@!nav_below}', // Margin 'uk-position-{nav_position_margin} {@!nav_below}', // Hover 'uk-hidden-hover uk-hidden-touch {@nav_hover}', // Breakpoint 'uk-visible@{nav_breakpoint}', // Initial text color 'uk-{text_color} {@!nav_below}', ], 'uk-inverse' => true, ]); ?> <?= $nav_container($props) ?> <?= $nav($props, '') ?> <?= $nav_container->end() ?> builder/elements/overlay-slider/templates/template-slidenav.php000064400000004627151666572160021124 0ustar00<?php $slidenav = $this->el('a', [ 'class' => [ 'el-slidenav', 'uk-slidenav-large {@slidenav_large}', ], 'href' => '#', // WordPress Preview reloads if `href` is empty ]); $attrs_slidenav_next = [ 'uk-slidenav-next' => true, 'uk-slider-item' => 'next', ]; $attrs_slidenav_previous = [ 'uk-slidenav-previous' => true, 'uk-slider-item' => 'previous', ]; $slidenav_container = $this->el('div', [ 'class' => [ 'uk-visible@{slidenav_breakpoint}', 'uk-hidden-hover uk-hidden-touch {@slidenav_hover}', // Initial text color 'uk-{text_color} {@!slidenav: outside}', ], 'uk-inverse' => true, ]); if (in_array($props['slidenav'], ['default', 'outside'])) { $slidenav_container->attr([ 'class' => [ 'uk-position-{slidenav_margin}', ], ]); $attrs_slidenav_container_next = [ 'class' => [ 'uk-position-center-right {@slidenav: default}', 'uk-position-center-right-out {@slidenav: outside}', ], 'uk-toggle' => [ 'cls: uk-position-center-right-out uk-position-center-right; mode: media; media: @{slidenav_outside_breakpoint} {@slidenav: outside}', ], ]; $attrs_slidenav_container_previous = [ 'class' => [ 'uk-position-center-left {@slidenav: default}', 'uk-position-center-left-out {@slidenav: outside}', ], 'uk-toggle' => [ 'cls: uk-position-center-left-out uk-position-center-left; mode: media; media: @{slidenav_outside_breakpoint} {@slidenav: outside}', ], ]; } else { $slidenav_container->attr([ 'class' => [ 'uk-slidenav-container uk-position-{slidenav} [uk-position-{slidenav_margin}]', ], ]); } ?> <?php if (!in_array($props['slidenav'], ['default', 'outside'])) : ?> <?= $slidenav_container($props) ?> <?= $slidenav($props, $attrs_slidenav_previous, '') ?> <?= $slidenav($props, $attrs_slidenav_next, '') ?> <?= $slidenav_container->end() ?> <?php else : ?> <?= $slidenav_container($props, $attrs_slidenav_container_previous) ?> <?= $slidenav($props, $attrs_slidenav_previous, '') ?> <?= $slidenav_container->end() ?> <?= $slidenav_container($props, $attrs_slidenav_container_next) ?> <?= $slidenav($props, $attrs_slidenav_next, '') ?> <?= $slidenav_container->end() ?> <?php endif ?>builder/elements/overlay-slider/element.json000064400000147451151666572160015326 0ustar00{ "name": "overlay-slider", "title": "Overlay Slider", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_title": true, "show_meta": true, "show_content": true, "show_link": true, "show_hover_image": true, "show_hover_video": true, "slider_width": "fixed", "slider_width_default": "1-1", "slider_width_medium": "1-3", "slider_gap": "default", "slider_autoplay_pause": true, "nav": "dotnav", "nav_below": true, "nav_position": "bottom-center", "nav_position_margin": "medium", "nav_align": "center", "nav_breakpoint": "s", "slidenav": "default", "slidenav_margin": "medium", "slidenav_breakpoint": "s", "slidenav_outside_breakpoint": "xl", "overlay_mode": "cover", "overlay_position": "center", "overlay_transition": "fade", "title_hover_style": "reset", "title_element": "h3", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "link_text": "Read more", "link_style": "default", "text_align": "center", "margin": "default" }, "placeholder": { "children": [ { "type": "overlay-slider_item", "props": {} }, { "type": "overlay-slider_item", "props": {} }, { "type": "overlay-slider_item", "props": {} }, { "type": "overlay-slider_item", "props": {} }, { "type": "overlay-slider_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "item": "overlay-slider_item", "media": [ { "type": "image", "item": { "title": "title", "image": "src" } }, { "type": "video", "item": { "title": "title", "video": "src" } } ] }, "show_title": { "label": "Display", "type": "checkbox", "text": "Show the title" }, "show_meta": { "type": "checkbox", "text": "Show the meta text" }, "show_content": { "type": "checkbox", "text": "Show the content" }, "show_link": { "type": "checkbox", "text": "Show the link" }, "show_hover_image": { "type": "checkbox", "text": "Show the hover image" }, "show_hover_video": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the hover video" }, "slider_width": { "label": "Item Width Mode", "description": "Define whether the width of the slider items is fixed or automatically expanded by its content widths.", "type": "select", "options": { "Fixed": "fixed", "Auto": "" } }, "slider_height": { "type": "select", "options": { "Auto": "", "Viewport": "viewport", "Viewport (Subtract Next Section)": "section" }, "enable": "slider_width" }, "slider_height_viewport": { "type": "number", "attrs": { "placeholder": "100", "min": 0, "max": 100, "step": 10, "class": "uk-form-width-xsmall" }, "enable": "slider_width && slider_height == 'viewport'" }, "height_expand": { "type": "checkbox", "text": "Fill the available column space", "enable": "slider_width && !slider_height" }, "slider_height_offset_top": { "type": "checkbox", "text": "Subtract height above", "enable": "slider_width && slider_height == 'viewport' && (slider_height_viewport || 0) <= 100 || slider_height == 'section'" }, "slider_min_height": { "label": "Min Height", "description": "Use an optional minimum height to prevent the slider from becoming smaller than its content on small devices.", "type": "range", "attrs": { "min": 200, "max": 800, "step": 50 } }, "slider_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "default", "Large": "large", "None": "" } }, "slider_divider": { "label": "Divider", "description": "Show a divider between grid columns.", "type": "checkbox", "text": "Show dividers", "enable": "slider_gap" }, "slider_width_default": { "label": "Phone Portrait", "description": "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.", "type": "select", "options": { "100%": "1-1", "83%": "5-6", "80%": "4-5", "60%": "3-5", "50%": "1-2", "33%": "1-3", "25%": "1-4", "20%": "1-5", "16%": "1-6" }, "enable": "slider_width" }, "slider_width_small": { "label": "Phone Landscape", "description": "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.", "type": "select", "options": { "Inherit": "", "100%": "1-1", "83%": "5-6", "80%": "4-5", "60%": "3-5", "50%": "1-2", "33%": "1-3", "25%": "1-4", "20%": "1-5", "16%": "1-6" }, "enable": "slider_width" }, "slider_width_medium": { "label": "Tablet Landscape", "description": "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.", "type": "select", "options": { "Inherit": "", "100%": "1-1", "83%": "5-6", "80%": "4-5", "60%": "3-5", "50%": "1-2", "33%": "1-3", "25%": "1-4", "20%": "1-5", "16%": "1-6" }, "enable": "slider_width" }, "slider_width_large": { "label": "Desktop", "description": "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.", "type": "select", "options": { "Inherit": "", "100%": "1-1", "83%": "5-6", "80%": "4-5", "60%": "3-5", "50%": "1-2", "33%": "1-3", "25%": "1-4", "20%": "1-5", "16%": "1-6" }, "enable": "slider_width" }, "slider_width_xlarge": { "label": "Large Screens", "description": "Set the item width for each breakpoint. <i>Inherit</i> refers to the item width of the next smaller screen size.", "type": "select", "options": { "Inherit": "", "100%": "1-1", "83%": "5-6", "80%": "4-5", "60%": "3-5", "50%": "1-2", "33%": "1-3", "25%": "1-4", "20%": "1-5", "16%": "1-6" }, "enable": "slider_width" }, "slider_sets": { "label": "Sets", "description": "Group items into sets. The number of items within a set depends on the defined item width, e.g. <i>33%</i> means that each set contains 3 items.", "type": "checkbox", "text": "Slide all visible items at once", "enable": "!slider_parallax" }, "slider_center": { "label": "Center", "type": "checkbox", "text": "Center the active slide" }, "slider_finite": { "label": "Finite", "type": "checkbox", "text": "Disable infinite scrolling" }, "slider_velocity": { "label": "Velocity", "description": "Set the velocity in pixels per millisecond.", "type": "range", "attrs": { "min": 0.2, "max": 3, "step": 0.1, "placeholder": "1" }, "enable": "!slider_parallax" }, "slider_autoplay": { "label": "Autoplay", "type": "checkbox", "text": "Enable autoplay", "enable": "!slider_parallax" }, "slider_autoplay_pause": { "type": "checkbox", "text": "Pause autoplay on hover", "enable": "!slider_parallax && slider_autoplay" }, "slider_autoplay_interval": { "label": "Autoplay Interval", "description": "Set the autoplay interval in seconds.", "type": "range", "attrs": { "min": 5, "max": 15, "step": 1, "placeholder": "7" }, "enable": "!slider_parallax && slider_autoplay" }, "slider_parallax": { "label": "Parallax", "description": "Add a stepless parallax animation based on the scroll position.", "type": "checkbox", "text": "Enable parallax effect" }, "slider_parallax_easing": { "label": "Parallax Easing", "description": "Set the animation easing. Zero transitions at an even speed, a negative value starts off quickly while a positive value starts off slowly.", "type": "range", "attrs": { "min": -2, "max": 2, "step": 0.1 }, "enable": "slider_parallax" }, "slider_parallax_target": { "label": "Parallax Target", "description": "The animation starts and stops depending on the element position in the viewport. Alternatively, use the position of a parent container.", "type": "select", "options": { "Element": "", "Column": "!.tm-grid-expand>*", "Row": "!.tm-grid-expand", "Section": "!.uk-section", "Next Section": "![class*='uk-section-'] ~ [class*='uk-section-']" }, "enable": "slider_parallax" }, "slider_parallax_start": { "enable": "slider_parallax" }, "slider_parallax_end": { "enable": "slider_parallax" }, "nav": { "label": "Navigation", "description": "Select the navigation type.", "type": "select", "options": { "None": "", "Dotnav": "dotnav" } }, "nav_below": { "type": "checkbox", "text": "Show below slider", "enable": "nav" }, "nav_hover": { "type": "checkbox", "text": "Show on hover only", "enable": "nav && !nav_below" }, "nav_vertical": { "type": "checkbox", "text": "Vertical navigation", "enable": "nav && !nav_below" }, "nav_position": { "label": "Position", "description": "Select the position of the navigation.", "type": "select", "options": { "Top Left": "top-left", "Top Right": "top-right", "Center Left": "center-left", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "show": "nav && !nav_below" }, "nav_align": { "label": "Position", "description": "Align the navigation items.", "type": "select", "options": { "Left": "left", "Center": "center", "Right": "right" }, "show": "nav && nav_below" }, "nav_position_margin": { "label": "Margin", "description": "Apply a margin between the navigation and the slideshow container.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large" }, "show": "nav && !nav_below" }, "nav_margin": { "label": "Margin", "description": "Set the vertical margin.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large" }, "show": "nav && nav_below" }, "nav_breakpoint": { "label": "Breakpoint", "description": "Display the navigation only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "nav" }, "slidenav": { "label": "Position", "description": "Select the position of the slidenav.", "type": "select", "options": { "None": "", "Default": "default", "Outside": "outside", "Top Left": "top-left", "Top Right": "top-right", "Center Left": "center-left", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "enable": "!slider_parallax" }, "slidenav_hover": { "type": "checkbox", "text": "Show on hover only", "enable": "slidenav && !slider_parallax" }, "slidenav_large": { "type": "checkbox", "text": "Larger style", "enable": "slidenav && !slider_parallax" }, "slidenav_margin": { "label": "Margin", "description": "Apply a margin between the slidenav and the slider container.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large" }, "enable": "slidenav && !slider_parallax" }, "slidenav_breakpoint": { "label": "Breakpoint", "description": "Display the slidenav only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "slidenav && !slider_parallax" }, "slidenav_outside_breakpoint": { "label": "Outside Breakpoint", "description": "Display the slidenav outside only on this device width and larger. Otherwise, display it inside.", "type": "select", "options": { "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "slidenav == 'outside' && !slider_parallax" }, "image_expand": { "label": "Height", "description": "Expand the height of the image to fill the available space in the item.", "type": "checkbox", "text": "Expand image" }, "overlay_link": { "label": "Link", "description": "Link the whole overlay if a link exists.", "type": "checkbox", "text": "Link overlay", "enable": "show_link" }, "overlay_mode": { "label": "Mode", "description": "When using cover mode, you need to set the text color manually.", "type": "select", "options": { "Cover": "cover", "Caption": "caption" } }, "overlay_display": { "label": "Display", "description": "Show the overlay only on hover or when the slide becomes active.", "type": "select", "options": { "Always": "", "Hover": "hover", "Active": "active" } }, "overlay_active_first": { "type": "checkbox", "text": "Make only first item active", "enable": "overlay_display == 'active'" }, "overlay_transition_background": { "type": "checkbox", "text": "Animate background only", "enable": "overlay_display && overlay_mode == 'cover' && overlay_style" }, "overlay_style": { "label": "Style", "description": "Select the style for the overlay.", "type": "select", "options": { "None": "", "Overlay Default": "overlay-default", "Overlay Primary": "overlay-primary", "Tile Default": "tile-default", "Tile Muted": "tile-muted", "Tile Primary": "tile-primary", "Tile Secondary": "tile-secondary" } }, "overlay_position": { "label": "Position", "description": "Select the overlay or content position.", "type": "select", "options": { "Top": "top", "Bottom": "bottom", "Left": "left", "Right": "right", "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right", "Center": "center", "Center Left": "center-left", "Center Right": "center-right" } }, "overlay_margin": { "label": "Margin", "description": "Apply a margin between the overlay and the image container.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large" }, "enable": "overlay_style" }, "overlay_padding": { "label": "Padding", "description": "Set the padding between the overlay and its content.", "type": "select", "options": { "Default": "", "Small": "small", "Large": "large", "None": "none" } }, "content_expand": { "label": "Height", "description": "Expand the height of the content to fill the available space in the overlay and push the link to the bottom.", "type": "checkbox", "text": "Expand content" }, "overlay_maxwidth": { "label": "Max Width", "description": "Set the maximum content width.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "!$match(overlay_position, '^(top|bottom)$')" }, "text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" } }, "text_color_hover": { "type": "checkbox", "text": "Inverse on hover or when active", "enable": "!overlay_style && (show_hover_image || show_hover_video) || overlay_style && overlay_mode == 'cover' && overlay_display && overlay_transition_background" }, "text_blend": { "type": "checkbox", "text": "Blend with image", "enable": "!overlay_style" }, "overlay_transition": { "label": "Transition", "description": "Select a transition for the overlay when it appears on hover or when active.", "type": "select", "options": { "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "overlay_display" }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" } }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" } }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly" }, "image_transition": { "label": "Transition", "description": "Select an image transition.", "type": "select", "options": { "None": "", "Scale Up": "scale-up", "Scale Down": "scale-down" } }, "title_transition": { "label": "Transition", "description": "Select a transition for the title when the overlay appears on hover or when active.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "show_title && overlay_display" }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" }, "enable": "show_title" }, "title_link": { "label": "Link", "description": "Link the title if a link exists.", "type": "checkbox", "text": "Link title", "enable": "show_title && show_link" }, "title_hover_style": { "label": "Hover Style", "description": "Set the hover style for a linked title.", "type": "select", "options": { "None": "reset", "Heading Link": "heading", "Default Link": "" }, "enable": "show_title && show_link && (title_link || overlay_link)" }, "title_decoration": { "label": "Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "enable": "show_title" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "show_title" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "show_title" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_title" }, "title_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_title" }, "meta_transition": { "label": "Transition", "description": "Select a transition for the meta text when the overlay appears on hover or when active.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "show_meta && overlay_display" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_meta" }, "meta_align": { "label": "Alignment", "description": "Align the meta text.", "type": "select", "options": { "Above Title": "above-title", "Below Title": "below-title", "Below Content": "below-content" }, "enable": "show_meta" }, "meta_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_meta" }, "meta_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_meta" }, "content_transition": { "label": "Transition", "description": "Select a transition for the content when the overlay appears on hover or when active.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "show_content && overlay_display" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_content" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_content" }, "link_target": { "label": "Target", "type": "checkbox", "text": "Open in a new window", "enable": "show_link" }, "link_text": { "label": "Text", "description": "Enter the text for the link.", "enable": "show_link" }, "link_aria_label": { "label": "ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text.", "enable": "show_link" }, "link_transition": { "label": "Transition", "description": "Select a transition for the link when the overlay appears on hover or when active.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" }, "enable": "show_link && overlay_display" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "show_link" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-nav</code>, <code>.el-item</code>, <code>.el-slidenav</code>, <code>.el-image</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-item", ".el-nav", ".el-slidenav", ".el-image", ".el-title", ".el-meta", ".el-content", ".el-link", ".el-hover-image" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "content", "show_title", "show_meta", "show_content", "show_link", "show_hover_image", "show_hover_video" ] }, { "title": "Settings", "fields": [ { "label": "Slider", "type": "group", "divider": true, "fields": [ "slider_width", { "label": "Height", "description": "The height will adapt automatically based on its content. Alternatively, the height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.", "name": "_slider_height", "type": "grid", "width": "expand,auto", "gap": "small", "fields": ["slider_height", "slider_height_viewport"] }, "height_expand", "slider_height_offset_top", "slider_min_height", "slider_gap", "slider_divider" ] }, { "label": "Item Width", "type": "group", "divider": true, "fields": [ "slider_width_default", "slider_width_small", "slider_width_medium", "slider_width_large", "slider_width_xlarge" ] }, { "label": "Animation", "type": "group", "divider": true, "fields": [ "slider_sets", "slider_center", "slider_finite", "slider_velocity", "slider_autoplay", "slider_autoplay_pause", "slider_autoplay_interval", "slider_parallax", "slider_parallax_easing", "slider_parallax_target", { "label": "Parallax Start/End", "description": "The animation starts when the element enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the target's height.", "type": "grid", "width": "1-2", "fields": ["slider_parallax_start", "slider_parallax_end"] } ] }, { "label": "Navigation", "type": "group", "divider": true, "fields": [ "nav", "nav_below", "nav_hover", "nav_vertical", "nav_position", "nav_align", "nav_position_margin", "nav_margin", "nav_breakpoint" ] }, { "label": "Slidenav", "type": "group", "divider": true, "fields": [ "slidenav", "slidenav_hover", "slidenav_large", "slidenav_margin", "slidenav_breakpoint", "slidenav_outside_breakpoint" ] }, { "label": "Item", "type": "group", "divider": true, "fields": [ "image_expand", "overlay_link" ] }, { "label": "Overlay", "type": "group", "divider": true, "fields": [ "overlay_mode", "overlay_display", "overlay_active_first", "overlay_transition_background", "overlay_style", "overlay_position", "overlay_margin", "overlay_padding", "content_expand", "overlay_maxwidth", "text_color", "text_color_hover", "text_blend", "overlay_transition" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading", "image_transition" ] }, { "label": "Title", "type": "group", "divider": true, "fields": [ "title_transition", "title_style", "title_link", "title_hover_style", "title_decoration", "title_font_family", "title_color", "title_element", "title_margin" ] }, { "label": "Meta", "type": "group", "divider": true, "fields": [ "meta_transition", "meta_style", "meta_color", "meta_align", "meta_element", "meta_margin" ] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_transition", "content_style", "content_margin"] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", "link_text", "link_aria_label", "link_transition", "link_style", "link_size", "link_fullwidth", "link_margin" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } } } builder/elements/overlay-slider/updates.php000064400000017224151666572160015152 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.1' => function ($node) { if (!Arr::get($node->props, 'text_color') && Arr::get($node->props, 'slidenav_color')) { $node->props['text_color'] = Arr::get($node->props, 'slidenav_color'); } unset( $node->props['nav_color'], $node->props['slidenav_color'], $node->props['slidenav_outside_color'], $node->props['overlay_hover'] ); }, '4.3.0-beta.0.5' => function ($node, $params) { if ($height = Arr::get($node->props, 'slider_height')) { if ($height === 'full' || $height === 'percent') { $node->props['slider_height'] = 'viewport'; } if ($height === 'percent') { $node->props['slider_height_viewport'] = 80; } if ( ($params['updateContext']['sectionIndex'] ?? 0) < 2 && empty($params['updateContext']['height']) ) { $node->props['slider_height_offset_top'] = true; } $params['updateContext']['height'] = true; } }, '4.3.0-beta.0.4' => function ($node) { if (Arr::get($node->props, 'overlay_hover')) { $node->props['overlay_display'] = 'hover'; } unset($node->props['overlay_hover']); }, '4.0.0-beta.9' => function ($node) { if (Arr::get($node->props, 'overlay_link') && Arr::get($node->props, 'css')) { $node->props['css'] = str_replace( '.el-item', ':has(> .el-item)', $node->props['css'], ); } }, '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '2.7.0-beta.0.4' => function ($node) { if (empty($node->props['slider_width']) || empty($node->props['slider_height'])) { unset($node->props['slider_min_height']); } }, '2.2.2.1' => function ($node) { Arr::updateKeys($node->props, [ 'link_type' => function ($value) { if ($value === 'content') { return [ 'title_link' => true, 'link_text' => '', ]; } elseif ($value === 'element') { return [ 'overlay_link' => true, 'link_text' => '', ]; } }, ]); }, '2.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'overlay_maxwidth') === 'xxlarge') { $node->props['overlay_maxwidth'] = '2xlarge'; } }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, ['slider_gutter' => 'slider_gap']); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'title_style') === 'heading-hero') { $node->props['title_style'] = 'heading-xlarge'; } if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } if (in_array($style, ['juno', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-medium'; } } if ( in_array($style, [ 'district', 'florence', 'flow', 'nioh-studio', 'summit', 'vision', ]) ) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-large'; } } if ($style == 'lilian') { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-2xlarge'; } } }, '1.19.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { $node->props['meta_align'] = 'above-title'; } if (Arr::get($node->props, 'meta_align') === 'bottom') { $node->props['meta_align'] = 'below-title'; } $node->props['link_type'] = 'element'; }, '1.18.10.3' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { if (!empty($node->props['meta_margin'])) { $node->props['title_margin'] = $node->props['meta_margin']; } $node->props['meta_margin'] = ''; } }, '1.18.0' => function ($node) { if ( !isset($node->props['meta_color']) && Arr::get($node->props, 'meta_style') === 'muted' ) { $node->props['meta_color'] = 'muted'; $node->props['meta_style'] = ''; } }, ]; builder/elements/overlay-slider/images/icon.svg000064400000001253151666572160015705 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="12" height="2" fill="#444" x="9" y="10" /> <rect width="8" height="2" fill="#444" x="11" y="13" /> <rect width="28" height="22" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="20" height="14" fill="none" stroke="#444" stroke-width="2" x="5" y="5" /> <path fill="#444" d="M10.504,27A1.5,1.5,0,1,1,9,28.502,1.50206,1.50206,0,0,1,10.504,27Z" /> <path fill="#444" d="M15.504,27A1.5,1.5,0,1,1,14,28.502,1.50206,1.50206,0,0,1,15.504,27Z" /> <path fill="#444" d="M20.504,27A1.5,1.5,0,1,1,19,28.502,1.50206,1.50206,0,0,1,20.504,27Z" /> </svg> builder/elements/overlay-slider/images/iconSmall.svg000064400000000775151666572160016706 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="#444" cx="7" cy="19" r="1" /> <circle fill="#444" cx="10" cy="19" r="1" /> <circle fill="#444" cx="13" cy="19" r="1" /> <rect width="19" height="15" fill="none" stroke="#444" x="0.5" y="0.5" /> <rect width="15" height="11" fill="none" stroke="#444" x="2.5" y="2.5" /> <rect width="8" height="1" fill="#444" x="6" y="7" /> <rect width="6" height="1" fill="#444" x="7" y="9" /> </svg> builder/elements/switcher_item/element.json000064400000011051151666572160015215 0ustar00{ "@import": "./element.php", "name": "switcher_item", "title": "Item", "width": 500, "placeholder": { "props": { "title": "Title", "meta": "", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", "image": "", "label": "", "thumbnail": "" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "image": "${builder.image}", "image_alt": "${builder.image_alt}", "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "label": { "label": "Navigation Label", "source": true }, "thumbnail": { "label": "Navigation Thumbnail", "description": "This is only used, if the thumbnail navigation is set.", "type": "image", "source": true }, "item_element": "${builder.html_element_item}", "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image" }, "thumbnail_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "thumbnail" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "title", "meta", "content", "image", "image_alt", "link", "link_text", "label", "thumbnail" ] }, { "title": "Settings", "fields": [ { "label": "Item", "type": "group", "divider": true, "fields": [ "item_element" ] }, { "label": "Image", "type": "group", "divider": true, "fields": ["image_focal_point"] }, { "label": "Thumbnail", "type": "group", "fields": ["thumbnail_focal_point"] } ] }, "${builder.advancedItem}" ] } } } builder/elements/switcher_item/element.php000064400000001663151666572160015043 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['meta', 'content', 'image', 'link', 'label', 'thumbnail'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; } } // Don't render element if content fields are empty // First part checks for title, second part checks for content return ($node->props['title'] != '' || $node->props['label'] != '' || $node->props['thumbnail'] || $node->props['image']) && (($node->props['title'] != '' && $params['parent']->props['show_title']) || $node->props['meta'] != '' || $node->props['content'] != '' || $node->props['image']); }, ], ]; builder/elements/switcher_item/templates/template.php000064400000002773151666572160017226 0ustar00<?php // Display if (!$element['show_title']) { $props['title'] = ''; } // Item $el = $props['item_element'] ? $this->el($props['item_element']) : null; // Image $image = $this->render("{$__dir}/template-image", compact('props')); // Image Align $grid = $this->el('div', [ 'class' => [ 'uk-child-width-expand', $element['image_grid_column_gap'] == $element['image_grid_row_gap'] ? 'uk-grid-{image_grid_column_gap}' : '[uk-grid-column-{image_grid_column_gap}] [uk-grid-row-{image_grid_row_gap}]', 'uk-flex-middle {@image_vertical_align}', ], 'uk-grid' => true, ]); $cell_image = $this->el('div', [ 'class' => [ 'uk-width-{image_grid_width}@{image_grid_breakpoint}', 'uk-flex-last@{image_grid_breakpoint} {@image_align: right}', ], ]); $cell_content = $this->el('div', [ 'class' => [ 'uk-margin-remove-first-child', ], ]); ?> <?php if ($el) : ?> <?= $el($element) ?> <?php endif ?> <?php if ($image && in_array($element['image_align'], ['left', 'right'])) : ?> <?= $grid($element) ?> <?= $cell_image($element, $image) ?> <?= $cell_content($element, $this->render("{$__dir}/template-content", compact('props'))) ?> <?= $grid->end() ?> <?php else : ?> <?= $element['image_align'] == 'top' ? $image : '' ?> <?= $this->render("{$__dir}/template-content", compact('props')) ?> <?= $element['image_align'] == 'bottom' ? $image : '' ?> <?php endif ?> <?php if ($el) : ?> <?= $el->end() ?> <?php endif ?> builder/elements/switcher_item/templates/content.php000064400000001101151666572160017045 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $element['title_element'] ?>><?= $props['title'] ?></<?= $element['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a></p> <?php endif ?> builder/elements/switcher_item/templates/template-content.php000064400000011355151666572160020672 0ustar00<?php // Title $title = $this->el($element['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', ], ]); // Meta $meta = $this->el($element['meta_element'], [ 'class' => [ 'el-meta', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($element['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $element['meta_element'] != 'div', ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-{content_style}', 'uk-dropcap {@content_dropcap}', 'uk-column-{content_column}[@{content_column_breakpoint}]', 'uk-column-divider {@content_column} {@content_column_divider}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($element['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), ], ]); // Link $link = $this->el('a', [ 'class' => [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-(muted|text)} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', ], 'href' => $props['link'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]); $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', ], ]); // Title Grid $grid = $this->el('div', [ 'class' => [ 'uk-child-width-expand', $element['title_grid_column_gap'] == $element['title_grid_row_gap'] ? 'uk-grid-{title_grid_column_gap}' : '[uk-grid-column-{title_grid_column_gap}] [uk-grid-row-{title_grid_row_gap}]', 'uk-margin[-{title_margin}]-top {@!title_margin: remove} {@image_align: top}' => !$props['meta'] || $element['meta_align'] != 'above-title', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove} {@image_align: top} {@meta_align: above-title}' => $props['meta'], ], 'uk-grid' => true, ]); $cell_title = $this->el('div', [ 'class' => [ 'uk-width-{!title_grid_width: expand}[@{title_grid_breakpoint}]', 'uk-margin-remove-first-child', ], ]); $cell_content = $this->el('div', [ 'class' => [ 'uk-width-auto[@{title_grid_breakpoint}] {@title_grid_width: expand}', 'uk-margin-remove-first-child', ], ]); ?> <?php if ($props['title'] != '' && $element['title_align'] == 'left') : ?> <?= $grid($element) ?> <?= $cell_title($element) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($element) ?> <?php if ($element['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($element['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '' && $element['title_align'] == 'left') : ?> <?= $cell_title->end() ?> <?= $cell_content($element) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($element, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && ($props['link_text'] || $element['link_text'])) : ?> <?= $link_container($element, $link($element, $props['link_text'] ?: $element['link_text'])) ?> <?php endif ?> <?php if ($props['title'] != '' && $element['title_align'] == 'left') : ?> <?= $cell_content->end() ?> <?= $grid->end() ?> <?php endif ?> builder/elements/switcher_item/templates/template-image.php000064400000003035151666572160020276 0ustar00<?php if (!$props['image']) { return; } $image = $this->el('image', [ 'class' => [ 'el-image', 'uk-border-{image_border}', 'uk-box-shadow-{image_box_shadow}', 'uk-box-shadow-hover-{image_hover_box_shadow} {@link}', 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($props['image']) == 'svg', 'uk-margin[-{image_margin}]-top {@!image_margin: remove} {@!image_box_decoration} {@image_align: bottom}', ], 'src' => $props['image'], 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $props['image_focal_point'], 'uk-svg' => $element['image_svg_inline'], 'thumbnail' => true, ]); $props['image'] = $image($element); // Box decoration if ($element['image_box_decoration']) { $decoration = $this->el('div', [ 'class' => [ 'uk-box-shadow-bottom {@image_box_decoration: shadow}', 'tm-mask-default {@image_box_decoration: mask}', 'tm-box-decoration-{image_box_decoration: default|primary|secondary}', 'tm-box-decoration-inverse {@image_box_decoration_inverse} {@image_box_decoration: default|primary|secondary}', 'uk-inline {@!image_box_decoration: |shadow}', 'uk-margin[-{image_margin}]-top {@!image_margin: remove} {@image_align: bottom}', ], ]); $props['image'] = $decoration($element, $props['image']); } echo $props['image']; builder/elements/description_list_item/element.php000064400000001071151666572160016562 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['title', 'meta', 'content', 'link'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; } } // Don't render element if content fields are empty return $node->props['title'] != '' || $node->props['meta'] != '' || $node->props['content'] != ''; }, ], ]; builder/elements/description_list_item/templates/template-title.php000064400000001465151666572160022070 0ustar00<?php namespace YOOtheme; if ($props['title'] == '') { return; } // Title $title = $this->el($element['title_element'], [ 'class' => [ 'el-title uk-margin-remove', 'uk-{title_style}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', ], ]); // Leader if ($element['title_leader'] && $element['layout'] == 'grid-2-m' && $element['title_grid_width'] == 'expand') { $title->attr('uk-leader', $element['title_grid_breakpoint'] ? ['media: @{title_grid_breakpoint}'] : true); } // Color if ($element['title_color'] == 'background') { $props['title'] = "<span class=\"uk-text-background\">{$props['title']}</span>"; } // Colon if ($element['title_colon']) { $props['title'] .= ':'; } ?> <?= $title($element, $props['title']) ?> builder/elements/description_list_item/templates/template-meta.php000064400000000434151666572160021670 0ustar00<?php if ($props['meta'] == '') { return; } // Meta $meta = $this->el('div', [ 'class' => [ 'el-meta', 'uk-{meta_style} [uk-margin-remove {@meta_style: h1|h2|h3|h4|h5|h6}]', 'uk-text-{meta_color}', ], ]); echo $meta($element, $props['meta']); builder/elements/description_list_item/templates/template-content.php000064400000001200151666572160022404 0ustar00<?php namespace YOOtheme; if ($props['content'] == '') { return; } // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-{content_style} [uk-margin-remove {@content_style: h1|h2|h3|h4|h5|h6}]', ], ]); // Link $link = $this->el('a', [ 'class' => [ 'uk-link-{0}' => $element['link_style'], 'uk-margin-remove-last-child', ], 'href' => ['{link}'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]); echo $content($element, $props['link'] ? $link($props, $props['content']) : $props['content']); builder/elements/description_list_item/templates/content.php000064400000000576151666572160020612 0ustar00<?php if ($props['title'] != '') : ?> <h3><?= $props['title'] ?></h3> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '' && $props['link']) : ?> <a href="<?= $props['link'] ?>"><?= $props['content'] ?></a> <?php elseif ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> builder/elements/description_list_item/templates/template.php000064400000005502151666572160020745 0ustar00<?php // Layout $grid = $this->el('div', [ 'class' => [ 'uk-child-width-{0}[@{title_grid_breakpoint}]' => $element['title_grid_width'] == 'expand' ? 'auto' : 'expand', $element['title_grid_column_gap'] == $element['title_grid_row_gap'] ? 'uk-grid-{title_grid_column_gap}' : '[uk-grid-column-{title_grid_column_gap}] [uk-grid-row-{title_grid_row_gap}]', $element['layout'] == 'grid-2-m' ? $element['title_leader'] && $element['title_grid_width'] == 'expand' ? 'uk-flex-bottom' : 'uk-flex-middle' : '', ], 'uk-grid' => true, ]); $cell = $this->el('div', [ 'class' => [ 'uk-width-{title_grid_width}[@{title_grid_breakpoint}]', 'uk-text-break {@title_grid_width: small|medium}', ], ]); ?> <?php if ($element['layout'] == 'stacked') : ?> <?php if ($element['meta_align'] == 'above-title') : ?> <?= $this->render("{$__dir}/template-meta", compact('props')) ?> <?php endif ?> <?= $this->render("{$__dir}/template-title", compact('props')) ?> <?php if (in_array($element['meta_align'], ['below-title', 'above-content'])) : ?> <?= $this->render("{$__dir}/template-meta", compact('props')) ?> <?php endif ?> <?= $this->render("{$__dir}/template-content", compact('props')) ?> <?php if ($element['meta_align'] == 'below-content') : ?> <?= $this->render("{$__dir}/template-meta", compact('props')) ?> <?php endif ?> <?php elseif ($element['layout'] == 'grid-2') : ?> <?= $grid($element) ?> <?= $cell($element) ?> <?php if ($element['meta_align'] == 'above-title') : ?> <?= $this->render("{$__dir}/template-meta", compact('props')) ?> <?php endif ?> <?= $this->render("{$__dir}/template-title", compact('props')) ?> <?php if ($element['meta_align'] == 'below-title') : ?> <?= $this->render("{$__dir}/template-meta", compact('props')) ?> <?php endif ?> <?= $cell->end() ?> <div> <?php if ($element['meta_align'] == 'above-content') : ?> <?= $this->render("{$__dir}/template-meta", compact('props')) ?> <?php endif ?> <?= $this->render("{$__dir}/template-content", compact('props')) ?> <?php if ($element['meta_align'] == 'below-content') : ?> <?= $this->render("{$__dir}/template-meta", compact('props')) ?> <?php endif ?> </div> <?= $grid->end() ?> <?php else : ?> <?= $grid($element) ?> <?= $cell($element, $this->render("{$__dir}/template-title", compact('props'))) ?> <div> <?= $this->render("{$__dir}/template-meta", compact('props')) ?> </div> <?= $grid->end() ?> <?= $this->render("{$__dir}/template-content", compact('props')) ?> <?php endif ?> builder/elements/description_list_item/element.json000064400000002254151666572160016750 0ustar00{ "@import": "./element.php", "name": "description_list_item", "title": "Item", "width": 500, "placeholder": { "props": { "title": "Title", "meta": "", "content": "Lorem ipsum dolor sit amet." } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "link": "${builder.link}", "link_target": "${builder.link_target}", "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["title", "meta", "content", "link", "link_target"] }, "${builder.advancedItem}" ] } } } builder/elements/video/images/iconSmall.svg000064400000000363151666572160015044 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#444" points="7.5,8 12.2,10.5 7.5,13" /> <rect width="18" height="14" fill="none" stroke="#444" x="0.5" y="3.5" /> </svg> builder/elements/video/images/icon.svg000064400000000422151666572160014047 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#444" stroke-width="2" points="12,10.5 20,15.1 12,19.5" /> <rect width="28" height="22" fill="none" stroke="#444" stroke-width="2" x="1" y="4" /> </svg> builder/elements/video/updates.php000064400000000665151666572160013320 0ustar00<?php namespace YOOtheme; return [ '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.18.0' => function ($node) { if ( !isset($node->props['video_box_decoration']) && Arr::get($node->props, 'video_box_shadow_bottom') === true ) { $node->props['video_box_decoration'] = 'shadow'; } }, ]; builder/elements/video/templates/template.php000064400000007174151666572160015466 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\Uri; /** @var ImageProvider $imageProvider */ $imageProvider = app(ImageProvider::class); $el = $this->el('div', [ 'class' => [ // Expand to column height 'uk-flex-1 uk-flex {@height_expand}', ], ]); // Video if ($iframe = $this->iframeVideo($props['video'], [], false)) { $video = $this->el('iframe', [ 'src' => $iframe, 'allow' => 'autoplay', 'allowfullscreen' => true, 'uk-responsive' => true, 'loading' => ['lazy {@video_lazyload}'], 'title' => $props['video_title'], ]); $ratio = $this->isYouTubeShorts($props['video']) ? 9 / 16 : 16 / 9; if ($props['video_width'] && !$props['video_height']) { $props['video_height'] = round((int) $props['video_width'] / $ratio); } elseif ($props['video_height'] && !$props['video_width']) { $props['video_width'] = round((int) $props['video_height'] * $ratio); } } else { $video = $this->el('video', [ 'src' => $props['video'], 'controls' => $props['video_controls'], 'loop' => $props['video_loop'], 'muted' => $props['video_muted'], 'playsinline' => $props['video_playsinline'], 'preload' => ['none {@video_lazyload}'], $props['video_autoplay'] === 'inview' ? 'uk-video' : 'autoplay' => $props['video_autoplay'], 'class' => [ 'el-image', 'uk-object-cover [uk-object-{image_focal_point}]' => $props['video_viewport_height'] || $props['height_expand'], ], 'style' => [ 'height: 100vh; {@video_viewport_height} {@!height_expand}', ], ]); if ($props['video_poster']) { if ($props['video_width'] || $props['video_height']) { $thumbnail = [$props['video_width'], $props['video_height'], '']; if (!empty($props['video_poster_focal_point'])) { [$y, $x] = explode('-', $props['video_poster_focal_point']); $thumbnail += [3 => $x, 4 => $y]; } $props['video_poster'] = (string) (new Uri($props['video_poster']))->withFragment('thumbnail=' . implode(',', $thumbnail)); } $video->attr([ 'poster' => $imageProvider->getUrl($props['video_poster']), ]); } elseif ($props['video_width'] && $props['video_height']) { if (!$props['height_expand']) { $video->attr(['style' => ["aspect-ratio: {$props['video_width']} / {$props['video_height']};"]]); } else { // Fix bug in Safari not stretching an image beyond its intrinsic height $video->attr(['style' => ["aspect-ratio: auto;"]]); } } } $video->attr([ 'class' => [ 'uk-box-shadow-{video_box_shadow}', 'uk-inverse-{text_color}', ], 'width' => $props['video_width'], 'height' => $props['video_height'], ]); // Box decoration $decoration = $this->el('div', [ 'class' => [ 'uk-box-shadow-bottom {@video_box_decoration: shadow}', 'tm-mask-default {@video_box_decoration: mask}', 'tm-box-decoration-{video_box_decoration: default|primary|secondary}', 'tm-box-decoration-inverse {@video_box_decoration_inverse} {@video_box_decoration: default|primary|secondary}', 'uk-inline {@!video_box_decoration: |shadow}', 'uk-flex {@height_expand}', ], ]); ?> <?= $el($props, $attrs) ?> <?php if ($props['video_box_decoration']) : ?> <?= $decoration($props) ?> <?php endif ?> <?= $video($props, '') ?> <?php if ($props['video_box_decoration']) : ?> <?= $decoration->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/video/templates/content.php000064400000000407151666572160015315 0ustar00<?php if ($props['video'] && $this->iframeVideo($props['video'], [], false)) : ?> <iframe src="<?= $props['video'] ?>"></iframe> <?php elseif($props['video']) : ?> <video src="<?= $props['video'] ?>" poster="<?= $props['video_poster'] ?>"></video> <?php endif ?> builder/elements/video/element.json000064400000025774151666572160013476 0ustar00{ "@import": "./element.php", "name": "video", "title": "Video", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "video_controls": true, "margin": "default" }, "placeholder": { "props": { "video": "${url:~yootheme/theme/assets/images/element-video-placeholder.mp4}" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true }, "video_width": { "type": "number", "label": "Width" }, "video_height": { "type": "number", "label": "Height" }, "video_title": { "label": "Video Title", "source": true, "show": "video && $match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "video_controls": { "label": "Options", "type": "checkbox", "text": "Show controls", "enable": "video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "video_loop": { "type": "checkbox", "text": "Loop video", "enable": "video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "video_muted": { "type": "checkbox", "text": "Mute video", "enable": "video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "video_playsinline": { "type": "checkbox", "text": "Play inline on mobile devices", "enable": "video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "video_lazyload": { "type": "checkbox", "text": "Lazy load video", "enable": "video" }, "video_autoplay": { "label": "Autoplay", "description": "Disable autoplay, start autoplay immediately or as soon as the video enters the viewport.", "type": "select", "options": { "Off": "", "On": true, "On (If inview)": "inview" }, "enable": "video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "video_poster": { "label": "Poster Frame", "description": "Select an optional image which shows up until the video plays. If not selected, the first video frame is shown as the poster frame.", "type": "image", "source": true, "enable": "video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "video_box_shadow": { "label": "Box Shadow", "description": "Select the video box shadow size.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" } }, "video_box_decoration": { "label": "Box Decoration", "description": "Select the video box decoration style.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Floating Shadow": "shadow", "Mask": "mask" } }, "video_box_decoration_inverse": { "type": "checkbox", "text": "Inverse style", "enable": "$match(video_box_decoration, '^(default|primary|secondary)$')" }, "video_poster_focal_point": { "label": "Poster Frame Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "height_expand": { "label": "Height", "description": "Expand the height of the element to fill the available space in the column or force the height to one viewport. The video will cover the element's content box.", "type": "checkbox", "text": "Fill the available column space", "enable": "video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "video_viewport_height": { "type": "checkbox", "text": "Force viewport height", "enable": "!height_expand && video && !$match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "video", { "description": "Set the video dimensions.", "name": "_video_dimension", "type": "grid", "width": "1-2", "fields": ["video_width", "video_height"] }, "video_title", "video_controls", "video_loop", "video_muted", "video_playsinline", "video_lazyload", "video_autoplay", "video_poster" ] }, { "title": "Settings", "fields": [ { "label": "Video", "type": "group", "divider": true, "fields": [ "video_box_shadow", "video_box_decoration", "video_box_decoration_inverse", "video_poster_focal_point", "height_expand", "video_viewport_height", "text_color" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } } } builder/elements/video/element.php000064400000000350151666572160013273 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return (bool) $node->props['video']; }, ], ]; builder/elements/fragment/templates/template.php000064400000001137151666572160016154 0ustar00<?php // Add elements inline css above the content to ensure css is present when rendered if (!empty($props['css'])) { echo $this->el('style', [ 'class' => 'uk-margin-remove-adjacent', 'data-id' => !empty($attrs['data-id']) ? "{$attrs['data-id']}-style" : false, ])([], $props['css']); } $content = $builder->render($children); if (!$props['root']) { $content = $this->el($props['html_element'] ?: 'div', [ 'class' => ['uk-panel'] ])($props, $attrs, $content); } echo $content; if (!empty($props['metadata'])) { echo "\n" . join("\n", $props['metadata']); } builder/elements/fragment/templates/content.php000064400000000051151666572160016005 0ustar00<?php echo $builder->render($children); builder/elements/fragment/element.json000064400000006554151666572160014166 0ustar00{ "@import": "./element.php", "name": "fragment", "title": "Sublayout", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "fragment": true, "width": 500, "defaults": { "margin": "default" }, "placeholder": {}, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "type": "builder-fragment" }, "html_element": "${builder.html_element}", "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element"] } } }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content"] }, { "title": "Settings", "fields": [ { "label": "Sublayout", "type": "group", "fields": [ "html_element" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/fragment/images/iconSmall.svg000064400000000467151666572160015546 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="4" height="14" fill="none" stroke="#444" x="2" y="3" /> <rect width="4" height="14" fill="none" stroke="#444" x="8" y="3" /> <rect width="4" height="14" fill="none" stroke="#444" x="14" y="3" /> </svg> builder/elements/fragment/images/icon.svg000064400000000553151666572160014551 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="6" height="22" fill="none" stroke="#444" stroke-width="2" x="2" y="4" /> <rect width="6" height="22" fill="none" stroke="#444" stroke-width="2" x="12" y="4" /> <rect width="6" height="22" fill="none" stroke="#444" stroke-width="2" x="22" y="4" /> </svg> builder/elements/fragment/element.php000064400000002146151666572160013775 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'prerender' => function ($node, $params) { $node->props['isPartial'] = !$params['parent'] && str_starts_with($params['template'] ?? '', '_'); if ($node->props['isPartial']) { $metadata = app(Metadata::class); $node->props['metadata'] = $metadata->all(); } }, 'render' => function ($node, $params) { $node->props['root'] = !$params['parent']; if ($node->props['isPartial']) { $metadata = app(Metadata::class); $node->props['metadata'] = array_diff($metadata->all(), $node->props['metadata']); array_walk($node->props['metadata'], function ($metadata) { if ($metadata->src) { $metadata->attributes['src'] = Url::to($metadata->src); } if ($metadata->href) { $metadata->attributes['href'] = Url::to($metadata->href); } }); } }, ], ]; builder/elements/social_item/element.json000064400000003531151666572160014643 0ustar00{ "@import": "./element.php", "name": "social_item", "title": "Item", "width": 500, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "link": { "label": "Link", "attrs": { "placeholder": "https://" }, "source": true, "description": "Enter link to your social profile. A corresponding <a href=\"https://getuikit.com/docs/icon\" target=\"_blank\">UIkit brand icon</a> will be displayed automatically, if available. Links to email addresses and phone numbers, like mailto:info@example.com or tel:+491570156, are also supported." }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item.", "source": true }, "icon": { "label": "Icon", "description": "Pick an alternative icon from the icon library.", "type": "icon", "source": true, "enable": "!image" }, "image": { "label": "Image", "description": "Pick an alternative SVG image from the media manager.", "type": "image", "source": true, "enable": "!icon" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "link", "link_aria_label", "icon", "image" ] }, "${builder.advancedItem}" ] } } } builder/elements/social_item/templates/template.php000064400000002057151666572160016643 0ustar00<?php // Image if ($props['image']) { $icon = $this->el('image', [ 'src' => $props['image'], 'alt' => true, 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'uk-svg' => $element['image_svg_inline'], 'thumbnail' => true, ]); // Icon } else { $icon = $this->el('span', [ 'uk-icon' => [ 'icon: {0};' => $props['icon'] ?: $this->e($props['link'], 'social'), 'width: {icon_width};', 'height: {icon_width};', ], ]); } // Link $link = $this->el('a', [ 'class' => [ 'el-link', 'uk-icon-link {@!link_style}', 'uk-icon-button {@link_style: button}', 'uk-link-{link_style: muted|text|reset}', ], 'href' => $props['link'], 'aria-label' => $props['link_aria_label'] ?: $element['link_aria_label'], 'target' => ['_blank {@link_target}'], 'rel' => 'noreferrer', ]); ?> <?= $link($element, $icon($element, '')) ?> builder/elements/social_item/templates/content.php000064400000000116151666572160016474 0ustar00<a href="<?= $props['link'] ?>"><?= $this->e($props['link'], 'social') ?></a> builder/elements/social_item/element.php000064400000000340151666572160014454 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return $node->props['link']; }, ], ]; builder/elements/totop/templates/template.php000064400000002300151666572160015507 0ustar00<?php $el = $this->el('div'); // Link $link = $this->el('a', [ 'href' => '#', // WordPress Preview reloads if `href` is empty 'title' => ['{link_title}'], 'uk-totop' => true, 'uk-scroll' => true, ]); // Title $title = $this->el('div', [ 'class' => [ 'el-title', 'uk-text-{title_style}', ], ]); // Grid $grid = $this->el('div', [ 'class' => [ 'uk-child-width-expand[@{title_grid_breakpoint}]', $props['title_grid_column_gap'] == $props['title_grid_row_gap'] ? 'uk-grid-{title_grid_column_gap}' : '[uk-grid-column-{title_grid_column_gap}] [uk-grid-row-{title_grid_row_gap}]', 'uk-flex-inline uk-flex-middle', ], 'uk-grid' => true, ]); $cell_title = $this->el('div', [ 'class' => [ 'uk-flex-first[@{title_grid_breakpoint}] uk-width-auto[@{title_grid_breakpoint}]', ], ]); ?> <?php if ($props['title'] != '') : ?> <?= $el($props, $attrs) ?> <?= $grid($props) ?> <div> <?= $link($props, '') ?> </div> <?= $cell_title($props, $title($props, $props['title'])) ?> <?= $grid->end() ?> <?= $el->end() ?> <?php else : ?> <?= $el($props, $attrs, $link($props, '')) ?> <?php endif ?> builder/elements/totop/updates.php000064400000000245151666572160013351 0ustar00<?php namespace YOOtheme; return [ '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/totop/element.json000064400000014161151666572160013521 0ustar00{ "name": "totop", "title": "To Top", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "title_grid_column_gap": "small", "title_grid_row_gap": "small", "margin": "default" }, "updates": "./updates.php", "templates": { "render": "./templates/template.php" }, "fields": { "title": { "label": "Title" }, "link_title": "${builder.link_title}", "title_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Small": "small", "Meta": "meta" }, "enable": "title" }, "title_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between the title and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "title" }, "title_grid_row_gap": { "label": "Grid Row Gap", "description": "Set the size of the gap if the grid items stack.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "title" }, "title_grid_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "title" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-title"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["title", "link_title"] }, { "title": "Settings", "fields": [ { "label": "Title", "type": "group", "divider": true, "fields": [ "title_style", "title_grid_column_gap", "title_grid_row_gap", "title_grid_breakpoint" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/totop/images/icon.svg000064400000000477151666572160014120 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="2" points="10,14 15,9 20,14" /> <rect width="2" height="11" fill="#444" x="14" y="10" /> <circle fill="none" stroke="#444" stroke-width="2" cx="15" cy="15" r="13" /> </svg> builder/elements/totop/images/iconSmall.svg000064400000000462151666572160015103 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" points="6.5,9 9.5,6 12.5,9" /> <rect width="1" height="8" fill="#444" x="9" y="6" /> <circle fill="none" stroke="#444" stroke-width="1.1" cx="9.5" cy="9.5" r="8.5" /> </svg> builder/elements/alert/element.php000064400000000410151666572160013271 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return $node->props['title'] != '' || $node->props['content'] != ''; }, ], ]; builder/elements/alert/templates/content.php000064400000001040151666572160015310 0ustar00<?php if ($props['title'] != '' || $props['content'] != '') : ?> <div> <?php if ($props['title'] != '' && $props['link']) : ?> <<?= $props['title_element'] ?>><a href="<?= $props['link'] ?>"><?= $props['title'] ?></a></<?= $props['title_element'] ?>> <?php elseif ($props['title'] != '') : ?> <<?= $props['title_element'] ?>><?= $props['title'] ?></<?= $props['title_element'] ?>> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> </div> <?php endif ?> builder/elements/alert/templates/template.php000064400000002470151666572160015461 0ustar00<?php $el = $this->el('div', [ 'class' => [ 'uk-alert', 'uk-alert-{alert_style}', 'uk-padding {@alert_size}', ], ]); // Title $title = $this->el($props['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-display-inline uk-text-middle {@title_inline}', ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-text-{content_style}', 'uk-display-inline uk-text-middle {@title_inline}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove} {@!title_inline}', ], ]); // Link $link = $props['link'] ? $this->el('a', [ 'class' => [ 'el-link uk-link-reset', ], 'href' => ['{link}'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; ?> <?= $el($props, $attrs) ?> <?php if ($props['link']) : ?> <?= $link($props) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($props, $props['title']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($props, $props['content']) ?> <?php endif ?> <?php if ($props['link']) : ?> <?= $link->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/alert/element.json000064400000020023151666572160013455 0ustar00{ "@import": "./element.php", "name": "alert", "title": "Alert", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "title_element": "h3" }, "placeholder": { "props": { "title": "", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat." } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "title": { "label": "Title", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "link": "${builder.link}", "link_target": "${builder.link_target}", "alert_style": { "label": "Style", "type": "select", "options": { "Default": "", "Primary": "primary", "Success": "success", "Warning": "warning", "Danger": "danger" } }, "alert_size": { "type": "checkbox", "text": "Larger padding" }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Text Bold": "text-bold", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "title" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "title" }, "title_inline": { "label": "Alignment", "description": "Display the title in the same line as the content.", "type": "checkbox", "text": "Inline title", "enable": "title" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Lead": "lead", "Meta": "meta" }, "enable": "content" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "content && !title_inline" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-content</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-title", ".el-content", ".el-link"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["title", "content", "link", "link_target"] }, { "title": "Settings", "fields": [ { "label": "Alert", "type": "group", "divider": true, "fields": ["alert_style", "alert_size"] }, { "label": "Title", "type": "group", "divider": true, "fields": ["title_style", "title_element", "title_inline"] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_style", "content_margin"] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/alert/images/iconSmall.svg000064400000000761151666572160015047 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle cx="10" cy="14" r="1" /> <circle fill="none" stroke="#444" stroke-width="1.1" cx="10" cy="10" r="9" /> <path d="M10.97,7.72 C10.85,9.54 10.56,11.29 10.56,11.29 C10.51,11.87 10.27,12 9.99,12 C9.69,12 9.49,11.87 9.43,11.29 C9.43,11.29 9.16,9.54 9.03,7.72 C8.96,6.54 9.03,6 9.03,6 C9.03,5.45 9.46,5.02 9.99,5 C10.53,5.01 10.97,5.44 10.97,6 C10.97,6 11.04,6.54 10.97,7.72 L10.97,7.72 Z" /> </svg> builder/elements/alert/images/icon.svg000064400000000777151666572160014065 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path fill="#444" d="M15,19.5c0.8,0,1.5,0.7,1.5,1.5s-0.7,1.5-1.5,1.5s-1.5-0.7-1.5-1.5S14.2,19.5,15,19.5z" /> <path fill="#444" d="M16.5,11.6c-0.2,2.7-0.6,5.4-0.6,5.4c-0.1,0.8-0.5,1-0.9,1c-0.5,0-0.8-0.2-0.8-1.1c0,0-0.4-2.6-0.6-5.4 c-0.1-1.8,0-2.6,0-2.6c0-0.8,0.6-1.5,1.4-1.5s1.5,0.7,1.5,1.5C16.5,9,16.6,9.8,16.5,11.6L16.5,11.6z" /> <circle fill="none" stroke="#444" stroke-width="2" cx="15" cy="15" r="13" /> </svg> builder/elements/alert/updates.php000064400000000245151666572160013313 0ustar00<?php namespace YOOtheme; return [ '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/nav/updates.php000064400000000607151666572160012772 0ustar00<?php namespace YOOtheme; return [ // moved from 4.0.0-beta.9 to 4.3.9 (previously missing @import) // moved from 4.3.9 to 4.5.0-beta.0.4 (ensure to unset prop) '4.5.0-beta.0.4' => function ($node) { if (Arr::get($node->props, 'nav_element') === 'nav') { $node->props['html_element'] = 'nav'; } unset($node->props['nav_element']); }, ]; builder/elements/nav/templates/content.php000064400000000512151666572160014770 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <p> <?= $builder->render($children[0], ['element' => $props]) ?> </p> <?php endif ?> builder/elements/nav/templates/template.php000064400000003625151666572160015141 0ustar00<?php use YOOtheme\Arr; $el = $this->el($props['html_element'] ?: 'div'); // Nav $nav = $this->el('ul', [ 'class' => [ 'uk-margin-remove-bottom', 'uk-nav uk-nav-{!nav_style: navbar-dropdown-nav} [uk-nav-divider {@nav_divider}] [uk-nav-{nav_size} {@nav_style: primary}]', 'uk-nav uk-{nav_style: navbar-dropdown-nav}', 'uk-nav-{text_align: center}', ], 'uk-scrollspy-nav' => ['closest: li; scroll: true; {@scrollspy_nav}'] ]); // Image align $grid = $this->el('div', [ 'class' => [ 'uk-child-width-expand[@{grid_breakpoint}]', $props['grid_column_gap'] == $props['grid_row_gap'] ? 'uk-grid-{grid_column_gap}' : '[uk-grid-column-{grid_column_gap}] [uk-grid-row-{grid_row_gap}]', 'uk-grid-divider {@grid_divider} {@!grid_column_gap:collapse} {@!grid_row_gap:collapse}', ], 'uk-grid' => true, ]); ?> <?= $el($props, $attrs) ?> <?php if ($props['grid'] > 1) : ?> <?= $grid($props) ?> <?php endif ?> <?php foreach (Arr::columns($children, $props['grid']) as $items) : ?> <?php if ($props['grid'] > 1) : ?> <div> <?php endif ?> <?= $nav($props) ?> <?php foreach ($items as $child) : ?> <?php if ($child->props['type'] == 'heading') : ?> <li class="uk-nav-header"><?= $child->props['content'] ?></li> <?php elseif ($child->props['type'] == 'divider') : ?> <li class="uk-nav-divider"></li> <?php else : ?> <li class="el-item <?= $child->props['active'] ? 'uk-active' : '' ?>"><?= $builder->render($child, ['element' => $props]) ?></li> <?php endif ?> <?php endforeach ?> <?= $nav->end() ?> <?php if ($props['grid'] > 1) : ?> </div> <?php endif ?> <?php endforeach ?> <?php if ($props['grid'] > 1) : ?> <?= $grid->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/nav/element.php000064400000000767151666572160012765 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { $node->props['scrollspy_nav'] = array_any( $params['path'] ?? [], fn($parent) => $parent->type === 'column' && $parent->props['position_sticky'] ) && array_any( $node->children ?? [], fn($child) => str_contains((string) $child->props['link'], '#') ); }, ], ]; builder/elements/nav/element.json000064400000030422151666572160013136 0ustar00{ "@import": "./element.php", "name": "nav", "title": "Nav", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_meta": true, "show_image": true, "nav_style": "default", "grid": "1", "image_vertical_align": true }, "placeholder": { "children": [ { "type": "nav_item", "props": {} }, { "type": "nav_item", "props": {} }, { "type": "nav_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "title": "content", "item": "nav_item" }, "show_meta": { "label": "Display", "type": "checkbox", "text": "Show the subtitle" }, "show_image": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the image" }, "nav_style": { "label": "Style", "description": "Select the nav style.", "type": "select", "options": { "Default": "default", "Primary": "primary", "Secondary": "secondary", "Navbar Dropdown": "navbar-dropdown-nav" } }, "nav_divider": { "type": "checkbox", "text": "Show dividers", "enable": "nav_style != 'navbar-dropdown-nav'" }, "nav_size": { "label": "Primary Size", "description": "Select the primary nav size.", "type": "select", "options": { "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "nav_style == 'primary'" }, "html_element": { "label": "HTML Element", "description": "Define a navigation menu or give it no semantic meaning.", "type": "select", "options": { "div": "", "nav": "nav" } }, "grid": { "label": "Grid", "description": "Set the number of grid columns.", "type": "select", "options": { "1 Column": "1", "2 Columns": "2", "3 Columns": "3", "4 Columns": "4", "5 Columns": "5", "6 Columns": "6" } }, "grid_divider": { "description": "Show a divider between grid columns.", "type": "checkbox", "text": "Show dividers", "enable": "grid" }, "grid_breakpoint": { "label": "Columns Breakpoint", "description": "Set the device width from which the nav columns should apply.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "grid" }, "grid_column_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "grid_row_gap": { "label": "Row Gap", "description": "Set the size of the gap between the grid rows.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "enable": "show_image" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "show_image" }, "image_margin": { "label": "Margin", "type": "checkbox", "text": "Add margin between", "enable": "show_image" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "show_image" }, "image_svg_animate": { "type": "checkbox", "text": "Animate strokes", "enable": "show_image && image_svg_inline" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image && image_svg_inline" }, "image_vertical_align": { "label": "Vertical Alignment", "description": "Vertically center the image.", "type": "checkbox", "text": "Center" }, "icon_width": { "label": "Icon Width", "description": "Set the icon width.", "enable": "show_image" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-item", ".el-content", ".el-image", ".el-link"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content", "show_meta", "show_image"] }, { "title": "Settings", "fields": [ { "label": "Nav", "type": "group", "divider": true, "fields": [ "nav_style", "nav_divider", "nav_size", "html_element", "grid", "grid_divider", "grid_breakpoint", "grid_column_gap", "grid_row_gap" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading", "icon_width", "image_margin", "image_border", "image_svg_inline", "image_svg_animate", "image_svg_color", "image_vertical_align" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/nav/images/icon.svg000064400000000536151666572160013533 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#444" stroke-width="2" x1="6" y1="15" x2="24" y2="15" /> <line fill="none" stroke="#444" stroke-width="2" x1="6" y1="9" x2="24" y2="9" /> <line fill="none" stroke="#444" stroke-width="2" x1="6" y1="21" x2="24" y2="21" /> </svg> builder/elements/nav/images/iconSmall.svg000064400000000453151666572160014522 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#444" x1="3" y1="10" x2="17" y2="10" /> <line fill="none" stroke="#444" x1="3" y1="6" x2="17" y2="6" /> <line fill="none" stroke="#444" x1="3" y1="14" x2="17" y2="14" /> </svg> builder/elements/popover_item/templates/template-link.php000064400000003135151666572160020014 0ustar00<?php $link = $props['link'] ? $this->el('a', [ 'href' => $props['link'], 'aria-label' => $props['link_aria_label'] ?: $element['link_aria_label'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; if ($link && $element['card_link']) { $link_container->attr($link->attrs + [ 'class' => [ 'uk-display-block uk-link-toggle', ], ]); $props['title'] = $this->striptags($props['title']); $props['meta'] = $this->striptags($props['meta']); $props['content'] = $this->striptags($props['content']); if ($props['title'] != '' && $element['title_hover_style'] != 'reset') { $props['title'] = $this->el('span', [ 'class' => [ 'uk-link-{title_hover_style: heading}', 'uk-link {!title_hover_style}', ], ], $props['title'])->render($element); } } if ($link && $props['title'] != '' && $element['title_link']) { $props['title'] = $link($element, [], $this->striptags($props['title'])); // title_hover_style is set on title } if ($link && $props['image'] && $element['image_link']) { $props['image'] = $link($element, $props['image']); } if ($link && ($props['link_text'] || $element['link_text'])) { if ($element['card_link']) { $link = $this->el('div'); } $link->attr('class', [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-muted|link-text} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', ]); } return $link; builder/elements/popover_item/templates/content.php000064400000001101151666572160016707 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $element['title_element'] ?>><?= $props['title'] ?></<?= $element['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a></p> <?php endif ?> builder/elements/popover_item/templates/template-content.php000064400000005172151666572160020534 0ustar00<?php // Title $title = $this->el($element['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-card-title {@!title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-link-{title_hover_style} {@title_link}', // Set here to style links which already come with dynamic content (WP taxonomy links) 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', ], ]); // Meta $meta = $this->el($element['meta_element'], [ 'class' => [ 'el-meta', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($element['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $element['meta_element'] != 'div', ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-{content_style}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($element['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), ], ]); // Link $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', ], ]); ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-title') : ?> <?= $meta($element, [], $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($element) ?> <?php if ($element['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($element['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($element, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && ($props['link_text'] || $element['link_text'])) : ?> <?= $link_container($element, $link($element, $props['link_text'] ?: $element['link_text'])) ?> <?php endif ?> builder/elements/popover_item/templates/template-image.php000064400000001156151666572160020142 0ustar00<?php if (!$props['image']) { return; } echo $this->el('image', [ 'class' => [ 'el-image', 'uk-margin-auto', 'uk-display-block', 'uk-border-{image_border} {@!image_card_padding}', 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($props['image']) == 'svg', ], 'src' => $props['image'], 'alt' => $props['image_alt'], 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $props['image_focal_point'], 'uk-svg' => $element['image_svg_inline'], 'thumbnail' => true, ])->render($element); builder/elements/popover_item/templates/template.php000064400000003663151666572160017067 0ustar00<?php // Resets if ($element['card_link']) { $element['title_link'] = ''; $element['image_link'] = ''; } // Image $props['image'] = $this->render("{$__dir}/template-image", compact('props')); // New logic shortcuts $element['has_link'] = $props['link'] && $element['card_link']; // Item $el = $this->el($props['item_element'] ?: 'div', [ 'class' => [ 'el-item', // Match link container height 'uk-grid-item-match {@has_link}', ], ]); // Link Container $link_container = $element['has_link'] ? $this->el('a') : null; ($element['has_link'] ? $link_container : $el)->attr([ 'class' => [ 'uk-card uk-card-{card_style}', 'uk-card-{card_size}', 'uk-card-hover {@link_type: element}' => $props['link'], 'uk-card-body' => !($props['image'] && $element['image_card_padding']), 'uk-margin-remove-first-child' => !($props['image'] && $element['image_card_padding']), ], ]); // Content $content = $this->el('div', [ 'class' => [ 'uk-card-body uk-margin-remove-first-child' => $props['image'] && $element['image_card_padding'], ], ]); // Link $link = include "{$__dir}/template-link.php"; // Card media if ($props['image'] && $element['image_card_padding']) { $props['image'] = $this->el('div', ['class' => [ 'uk-card-media-top', ]], $props['image'])->render($element); } ?> <?= $el($element) ?> <?php if ($link_container) : ?> <?= $link_container($element) ?> <?php endif ?> <?= $props['image'] ?> <?php if ($this->expr($content->attrs['class'], $element)) : ?> <?= $content($element, $this->render("{$__dir}/template-content", compact('props', 'link'))) ?> <?php else : ?> <?= $this->render("{$__dir}/template-content", compact('props', 'link')) ?> <?php endif ?> <?php if ($link_container) : ?> <?= $link_container->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/popover_item/element.json000064400000011267151666572160015070 0ustar00{ "@import": "./element.php", "name": "popover_item", "title": "Item", "width": 500, "placeholder": { "props": { "title": "Title", "meta": "", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", "image": "" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "image": "${builder.image}", "image_alt": "${builder.image_alt}", "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item.", "source": true, "enable": "link" }, "position_x": { "label": "Left", "description": "Enter the horizontal position of the marker in percent.", "type": "range", "attrs": { "min": 0, "max": 100, "step": 1 }, "source": true }, "position_y": { "label": "Top", "description": "Enter the vertical position of the marker in percent.", "type": "range", "attrs": { "min": 0, "max": 100, "step": 1 }, "source": true }, "drop_position": { "label": "Position", "description": "Select a different position for this item.", "type": "select", "options": { "None": "", "Top": "top-center", "Bottom": "bottom-center", "Left": "left-center", "Right": "right-center" }, "source": true }, "item_element": "${builder.html_element_item}", "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "title", "meta", "content", "image", "image_alt", "link", "link_text", "link_aria_label" ] }, { "title": "Settings", "fields": [ { "label": "Marker", "type": "group", "divider": true, "fields": ["position_x", "position_y"] }, { "label": "Popover", "type": "group", "divider": true, "fields": ["drop_position", "item_element"] }, { "label": "Image", "type": "group", "fields": ["image_focal_point"] } ] }, "${builder.advancedItem}" ] } } } builder/elements/popover_item/element.php000064400000001153151666572160014677 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['title', 'meta', 'content', 'link', 'image'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; } } // Don't render element if content fields are empty return $node->props['title'] != '' || $node->props['meta'] != '' || $node->props['content'] != '' || $node->props['image']; }, ], ]; builder/elements/gallery_item/updates.php000064400000001077151666572160014665 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'image') && Arr::get($node->props, 'video')) { unset($node->props['video']); } }, '2.5.0-beta.1.3' => function ($node) { if (!empty($node->props['tags'])) { $node->props['tags'] = ucwords($node->props['tags']); } }, '1.18.0' => function ($node) { if (!isset($node->props['hover_image'])) { $node->props['hover_image'] = Arr::get($node->props, 'image2'); } }, ]; builder/elements/gallery_item/element.json000064400000024115151666572160015031 0ustar00{ "@import": "./element.php", "name": "gallery_item", "title": "Item", "width": 500, "placeholder": { "props": { "image": "${url:~yootheme/theme/assets/images/element-image-placeholder.png}", "video": "", "title": "Title", "meta": "", "content": "", "hover_image": "", "hover_video": "" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "image": { "label": "Image", "type": "image", "source": true, "show": "!video", "altRef": "%name%_alt" }, "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true, "show": "!image" }, "_media": { "type": "button-panel", "panel": "builder-gallery-item-media", "text": "Edit Settings", "show": "image || video" }, "video_title": { "label": "Video Title", "source": true, "show": "video && $match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "image_alt": { "label": "Image Alt", "source": true, "show": "image && !video" }, "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item.", "source": true, "enable": "link" }, "hover_image": { "label": "Hover Image", "description": "Select an optional image that appears on hover.", "type": "image", "source": true, "show": "!hover_video" }, "hover_video": { "label": "Hover Video", "description": "Select an optional video that appears on hover.", "type": "video", "source": true, "show": "!hover_image" }, "tags": { "label": "Tags", "description": "Enter a comma-separated list of tags, for example, <code>blue, white, black</code>.", "source": true }, "item_element": "${builder.html_element_item}", "text_color": { "label": "Text Color", "description": "Set a different text color for this item.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true }, "text_color_hover": { "type": "checkbox", "text": "Inverse the text color on hover" }, "lightbox_image_focal_point": { "label": "Image Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "lightbox_text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true }, "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "hover_image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "image", "video", "_media", "video_title", "image_alt", "title", "meta", "content", "link", "link_text", "link_aria_label", "hover_image", "hover_video", "tags" ] }, { "title": "Settings", "fields": [ { "label": "Item", "type": "group", "divider": true, "fields": [ "item_element" ] }, { "label": "Overlay", "type": "group", "divider": true, "fields": ["text_color", "text_color_hover"] }, { "label": "Lightbox", "type": "group", "divider": true, "fields": [ "lightbox_image_focal_point", "lightbox_text_color" ] }, { "label": "Image", "type": "group", "divider": true, "fields": ["image_focal_point"] }, { "label": "Hover Image", "type": "group", "fields": ["hover_image_focal_point"] } ] }, "${builder.advancedItem}" ] } }, "panels": { "builder-gallery-item-media": { "title": "Media", "width": 500, "fields": { "media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes.", "type": "color" }, "media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image or video will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" }, "enable": "media_background" }, "media_overlay": { "label": "Overlay Color", "description": "Set an additional transparent overlay to soften the image or video.", "type": "color" } }, "fieldset": { "default": { "fields": ["media_background", "media_blend_mode", "media_overlay"] } } } } } builder/elements/gallery_item/templates/template-image.php000064400000000601151666572160020101 0ustar00<?php $image = $this->el('image', [ 'src' => $src, 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $focal, 'thumbnail' => [$element['image_width'], $element['image_height'], $element['image_orientation']], ]); return $image; builder/elements/gallery_item/templates/template-content.php000064400000006454151666572160020505 0ustar00<?php // Title $title = $this->el($element['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-link-{title_hover_style} {@title_link}', // Set here to style links which already come with dynamic content (WP taxonomy links) 'uk-transition-{title_transition} {@overlay_hover}', 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', 'uk-flex-1 {@content_expand}' => !$props['content'] && (!$props['meta'] || $element['meta_align'] == 'above-title'), ], ]); // Meta $meta = $this->el($element['meta_element'], [ 'class' => [ 'el-meta', 'uk-transition-{meta_transition} {@overlay_hover}', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($element['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $element['meta_element'] != 'div', 'uk-flex-1 {@content_expand}' => $element['meta_align'] == 'below-content' || (!$props['content'] && ($element['meta_align'] == 'above-content' || ($element['meta_align'] == 'below-title' ))), ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-transition-{content_transition} {@overlay_hover}', 'uk-{content_style}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($element['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), 'uk-flex-1 {@content_expand}' => !($props['meta'] && $element['meta_align'] == 'below-content'), ], ]); // Link $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', 'uk-transition-{link_transition} {@overlay_hover}', // Not on link element to prevent conflicts with link style ], ]); ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($element) ?> <?php if ($element['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($element['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($element, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && ($props['link_text'] || $element['link_text'])) : ?> <?= $link_container($element, $link($element, $props['link_text'] ?: $element['link_text'])) ?> <?php endif ?> builder/elements/gallery_item/templates/template-media.php000064400000005256151666572160020111 0ustar00<?php if ($props['video']) { $src = $props['video']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-video.php"; } elseif ($props['image']) { $src = $props['image']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-image.php"; } elseif ($props['hover_video']) { $src = $props['hover_video']; $focal = $props['hover_image_focal_point']; $media = include "{$__dir}/template-video.php"; } elseif ($props['hover_image']) { $src = $props['hover_image']; $focal = $props['hover_image_focal_point']; $media = include "{$__dir}/template-image.php"; } // Media $media->attr([ 'class' => [ 'el-image', 'uk-blend-{0}' => $props['media_blend_mode'], 'uk-transition-{image_transition}', 'uk-transition-opaque' => $props['image'] || $props['video'], 'uk-transition-fade {@!image_transition}' => ($props['hover_image'] || $props['hover_video']) && !($props['image'] || $props['video']), 'uk-flex-1 {@image_expand}' ], 'style' => [ 'min-height: {image_min_height}px;', ], ]); if ($element['image_expand'] || $element['image_min_height'] || ($media->name == 'video' && $element['image_width'] && $element['image_height'])) { $media->attr([ 'class' => [ 'uk-object-cover', 'uk-object-{0}' => $focal, ], 'style' => [ // Keep video responsiveness but with new proportions (because video isn't cropped like an image) 'aspect-ratio: {image_width} / {image_height};' => $media->name == 'video', ], ]); } // Hover Media $hover_media = ''; if (($props['hover_image'] || $props['hover_video']) && ($props['image'] || $props['video'])) { if ($props['hover_video']) { $src = $props['hover_video']; $hover_media = include "{$__dir}/template-video.php"; } elseif ($props['hover_image']) { $src = $props['hover_image']; $focal = $props['hover_image_focal_point']; $hover_media = include "{$__dir}/template-image.php"; } $hover_media->attr([ 'class' => [ 'el-hover-image', 'uk-transition-{image_transition}', 'uk-transition-fade {@!image_transition}', 'uk-object-{0}' => $props['hover_image_focal_point'], // `uk-cover` already sets object-fit to cover ], 'uk-cover' => true, 'uk-video' => false, // Resets 'alt' => true, // Image 'loading' => false, // Image + Iframe 'preload' => false, // Video ]); } ?> <?= $media($element, '') ?> <?php if ($hover_media) : ?> <?= $hover_media($element, '') ?> <?php endif ?> builder/elements/gallery_item/templates/template-video.php000064400000001422151666572160020127 0ustar00<?php if ($iframe = $this->iframeVideo($src)) { $video = $this->el('iframe', [ 'src' => $iframe, 'uk-responsive' => true, 'loading' => ['lazy {@image_loading}'], 'title' => $props['video_title'], 'class' => [ 'uk-disabled', ], 'uk-video' => [ 'automute: true;', ], ]); } else { $video = $this->el('video', [ 'src' => $src, 'controls' => false, 'loop' => true, 'autoplay' => true, 'muted' => true, 'playsinline' => true, 'preload' => ['none {@image_loading}'], 'uk-video' => true, ]); } $video->attr([ 'width' => $element['image_width'], 'height' => $element['image_height'], ]); return $video; builder/elements/gallery_item/templates/template.php000064400000013127151666572160017030 0ustar00<?php // If link is not set use image/video field for the lightbox if (!$props['link'] && $element['lightbox']) { $props['link'] = $props['video'] ?: $props['image']; } // Override default settings $element['text_color'] = $props['text_color'] ?: $element['text_color']; if ($element['grid_masonry']) { $element['image_expand'] = ''; } // New logic shortcuts $element['has_transition'] = $element['overlay_hover'] || $element['image_transition'] || $element['image_transition_border'] || $props['hover_image'] || $props['hover_video']; $element['text_color_inverse'] = $element['text_color'] === 'light' ? 'dark' : 'light'; $el = $this->el($props['item_element'] ?: 'div', [ 'class' => [ 'el-item', 'uk-margin-auto uk-width-{item_maxwidth}', 'uk-flex uk-flex-column {@image_expand} {@overlay_link}' => $props['link'], // Needs to be parent of `uk-link-toggle` 'uk-{0}' => !$element['overlay_style'] || $element['overlay_cover'] ? $element['text_color'] : false, // Only for transparent navbar 'uk-inverse-{0}' => $element['overlay_style'] && !$element['overlay_cover'] ? $element['text_color'] : false, ], ]); // Link Container $link_container = $props['link'] && $element['overlay_link'] ? $this->el('a', [ 'class' => [ 'uk-flex-1', ], ]) : null; ($link_container ?: $el)->attr([ 'class' => [ 'uk-box-shadow-{image_box_shadow}', 'uk-box-shadow-hover-{image_hover_box_shadow}', 'uk-border-{image_border} {@!image_box_decoration} {@!image_transition_border}', 'uk-box-shadow-bottom {@image_box_decoration: shadow}', 'tm-mask-default {@image_box_decoration: mask}', 'tm-box-decoration-{image_box_decoration: default|primary|secondary}', 'tm-box-decoration-inverse {@image_box_decoration_inverse} {@image_box_decoration: default|primary|secondary}', 'tm-transition-border {@image_transition_border}', 'uk-inline' => $element['image_box_decoration'] || $element['image_transition_border'], 'uk-transition-toggle {@has_transition}', 'uk-flex uk-flex-column {@image_expand}', ], 'style' => [ "background-color: {$props['media_background']};" => $props['media_background'], ], 'tabindex' => $element['has_transition'] && !($props['link'] && $element['overlay_link']) ? 0 : null, // Needs to be on anchor to have just one focusable toggle when using keyboard navigation 'uk-toggle' => ($props['text_color_hover'] || $element['text_color_hover']) && ((!$element['overlay_style'] && ($props['hover_image'] || $props['hover_video'])) || ($element['overlay_cover'] && $element['overlay_hover'] && $element['overlay_transition_background'])) ? [ 'cls: uk-{text_color_inverse} [uk-{text_color}];', 'mode: hover;', 'target: !*; {@overlay_link}' => $props['link'], ] : false, ]); // Box Decoration / Transition Border $image_container = $element['image_box_decoration'] || $element['image_transition_border'] ? $this->el('div', [ 'class' => [ 'uk-flex-1 uk-flex uk-flex-column {@image_expand}', ], ]) : null; ($image_container ?: $link_container ?: $el)->attr('class', [ 'uk-inline-clip', ]); $overlay = $this->el('div', [ 'class' => [ 'uk-{overlay_style}', 'uk-transition-{overlay_transition} {@overlay_hover} {@overlay_cover}', 'uk-position-cover {@overlay_cover}', 'uk-position-{overlay_margin} {@overlay_cover}', ], ]); $position = $this->el('div', [ 'class' => [ 'uk-position-{overlay_position} [uk-position-{overlay_margin} {@overlay_style}]', 'uk-transition-{overlay_transition} {@overlay_hover}' => !$element['overlay_transition_background'] || !$element['overlay_cover'], 'uk-blend-difference {@text_blend} {@!overlay_style}', 'uk-flex {@content_expand}' ], ]); $content = $this->el('div', [ 'class' => [ $element['overlay_style'] ? 'uk-overlay' : 'uk-panel', 'uk-padding {@!overlay_padding} {@!overlay_style}', 'uk-padding-{!overlay_padding: |none}', 'uk-padding-remove {@overlay_padding: none} {@overlay_style}', 'uk-width-{overlay_maxwidth} {@!overlay_position: top|bottom}', 'uk-margin-remove-first-child', 'uk-flex-1 uk-flex uk-flex-column {@content_expand}' ], ]); if (!$element['overlay_cover']) { $position->attr($overlay->attrs); } // Link $link = include "{$__dir}/template-link.php"; ?> <?= $el($element, $attrs) ?> <?php if ($link_container) : ?> <?= $link_container($element) ?> <?php endif ?> <?php if ($image_container) : ?> <?= $image_container($element) ?> <?php endif ?> <?= $this->render("{$__dir}/template-media", compact('props', 'element')) ?> <?php if ($props['media_overlay']) : ?> <div class="uk-position-cover" style="background-color:<?= $props['media_overlay'] ?>"></div> <?php endif ?> <?php if ($element['overlay_cover']) : ?> <?= $overlay($element, '') ?> <?php endif ?> <?php if ($props['title'] != '' || $props['meta'] != '' || $props['content'] != '' || ($props['link'] && ($props['link_text'] || $element['link_text']))) : ?> <?= $position($element, $content($element, $this->render("{$__dir}/template-content", compact('props', 'element', 'link')))) ?> <?php endif ?> <?php if ($image_container) : ?> <?= $image_container->end() ?> <?php endif ?> <?php if ($link_container) : ?> <?= $link_container->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/gallery_item/templates/template-link.php000064400000007440151666572160017764 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\Uri; /** @var ImageProvider $imageProvider */ $imageProvider = app(ImageProvider::class); $link = $props['link'] ? $this->el('a', [ 'href' => $props['link'], 'aria-label' => $props['link_aria_label'] ?: $element['link_aria_label'], ]) : null; // Lightbox if ($link && $element['lightbox']) { if ($type = $this->isImage($props['link'])) { if ($type !== 'svg' && ($element['lightbox_image_width'] || $element['lightbox_image_height'])) { $thumbnail = [$element['lightbox_image_width'], $element['lightbox_image_height'], $element['lightbox_image_orientation']]; if (!empty($props['lightbox_image_focal_point'])) { [$y, $x] = explode('-', $props['lightbox_image_focal_point']); $thumbnail += [3 => $x, 4 => $y]; } $props['link'] = (string) (new Uri($props['link']))->withFragment('thumbnail=' . implode(',', $thumbnail)); } $link->attr([ 'href' => $imageProvider->getUrl($props['link']), 'data-alt' => $props['image_alt'], 'data-type' => 'image', ]); } elseif ($this->isVideo($props['link'])) { $link->attr('data-type', 'video'); } elseif (!$this->iframeVideo($props['link'])) { $link->attr('data-type', 'iframe'); } else { $link->attr('data-type', true); } // Caption $caption = ''; if ($props['title'] != '' && $element['title_display'] != 'item') { $caption .= "<h4 class='uk-margin-remove'>{$props['title']}</h4>"; if ($element['title_display'] == 'lightbox') { $props['title'] = ''; } } if ($props['content'] != '' && $element['content_display'] != 'item') { $caption .= $props['content']; if ($element['content_display'] == 'lightbox') { $props['content'] = ''; } } if ($caption) { $link->attr('data-caption', $caption); } // Text Color $element['lightbox_text_color'] = $props['lightbox_text_color'] ?: $element['lightbox_text_color']; if ($element['lightbox_text_color']) { $link->attr('data-attrs', "class: uk-inverse-{$element['lightbox_text_color']}"); } } elseif ($link) { $link->attr([ 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]); } if ($link && $element['overlay_link']) { $link_container->attr($link->attrs + [ 'class' => [ // Needs to be child of `uk-light` or `uk-dark` 'uk-link-toggle', ], ]); $props['title'] = $this->striptags($props['title']); $props['meta'] = $this->striptags($props['meta']); $props['content'] = $this->striptags($props['content']); if ($props['title'] != '' && $element['title_hover_style'] != 'reset') { $props['title'] = $this->el('span', [ 'class' => [ 'uk-link-{title_hover_style: heading}', 'uk-link {!title_hover_style}', ], ], $props['title'])->render($element); } } if ($link && $props['title'] != '' && $element['title_link']) { $props['title'] = $link($element, [], $this->striptags($props['title'])); // title_hover_style is set on title } if ($link && ($props['link_text'] || $element['link_text'])) { if ($element['overlay_link']) { $link = $this->el('div'); } $link->attr('class', [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-muted|link-text} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', // Keep link style if overlay link 'uk-link {@link_style:} {@overlay_link}', 'uk-text-muted {@link_style: link-muted} {@overlay_link}', ]); } return $link; builder/elements/gallery_item/templates/content.php000064400000002270151666572160016664 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['video']) : ?> <?php if ($this->iframeVideo($props['video'], [], false)) : ?> <iframe src="<?= $props['video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['hover_image']) : ?> <img src="<?= $props['hover_image'] ?>" alt> <?php endif ?> <?php if ($props['hover_video']) : ?> <?php if ($this->iframeVideo($props['hover_video'], [], false)) : ?> <iframe src="<?= $props['hover_video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['hover_video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $element['title_element'] ?>><?= $props['title'] ?></<?= $element['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a></p> <?php endif ?> builder/elements/gallery_item/element.php000064400000002507151666572160014650 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['title', 'meta', 'content', 'link', 'hover_image', 'hover_video'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; } } /** * Auto-correct media rendering for dynamic content * * @var View $view */ $view = app(View::class); foreach (['', 'hover_'] as $prefix) { if ($node->props["{$prefix}image"] && $view->isVideo($node->props["{$prefix}image"])) { $node->props["{$prefix}video"] = $node->props["{$prefix}image"]; $node->props["{$prefix}image"] = null; } elseif ($node->props["{$prefix}video"] && $view->isImage($node->props["{$prefix}video"])) { $node->props["{$prefix}image"] = $node->props["{$prefix}video"]; $node->props["{$prefix}video"] = null; } } // Don't render element if content fields are empty return $node->props['image'] || $node->props['video'] || $node->props['hover_image'] || $node->props['hover_video']; }, ], ]; builder/elements/list_item/element.php000064400000001157151666572160014164 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['image', 'link'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; if ($key === 'image') { $node->props['icon'] = ''; } } } // Don't render element if content fields are empty return $node->props['content'] != '' || $node->props['image'] || $node->props['icon']; }, ], ]; builder/elements/list_item/templates/content.php000064400000000512151666572160016175 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['content'] != '' && $props['link']) : ?> <a href="<?= $props['link'] ?>"><?= $props['content'] ?></a> <?php elseif ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> builder/elements/list_item/templates/template.php000064400000007472151666572160016352 0ustar00<?php // Image Align $grid = $this->el('div', [ 'class' => [ 'uk-grid uk-grid-small uk-child-width-expand uk-flex-nowrap', 'uk-flex-middle {@image_vertical_align}', ], ]); $cell_image = $this->el('div', [ 'class' => [ 'uk-width-auto', 'uk-flex-last {@image_align: right}', ], ]); // Image if ($props['image']) { $image = $this->el('image', [ 'class' => [ 'el-image', 'uk-border-{image_border}', 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($props['image']) == 'svg', ], 'src' => $props['image'], 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $props['image_focal_point'], 'uk-svg' => $element['image_svg_inline'], 'thumbnail' => true, ]); $props['image'] = $image($element); } elseif ($props['icon'] || $element['icon']) { $icon = $this->el('span', [ 'class' => [ 'el-image', 'uk-text-{icon_color}', ], 'uk-icon' => [ 'icon: {icon};', 'width: {icon_width};', 'height: {icon_width};', ], ]); $props['image'] = $icon(array_merge($element, array_filter($props)), ''); } // Content $content = $this->el($element['list_type'] == 'vertical' ? 'div' : 'span', [ 'class' => [ 'el-content', 'uk-panel {@list_type: vertical}', 'uk-{content_style}', ], ]); // Horizontal List: Image is content if ($props['image'] && $element['list_type'] == 'horizontal') { $text = $this->el('span', [ 'class' => [ 'uk-text-middle uk-margin-remove-last-child', ], ]); $props['content'] = $text($element, $props['content'] ?? ''); if ($element['image_align'] == 'left') { $props['content'] = "{$props['image']} {$props['content']}"; } else { $props['content'] = "{$props['content']} {$props['image']}"; } $props['image'] = ''; } // Link $link = $props['link'] ? $this->el('a', [ 'href' => $props['link'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; if ($link && $props['image']) { $link->attr([ 'class' => [ 'uk-link-toggle', ], ]); $props['content'] = $this->striptags($props['content']); if ($element['link_style'] != 'reset') { $props['content'] = $this->el('span', [ 'class' => [ 'uk-link-{link_style: muted|text|heading}', 'uk-link {!link_style}', 'uk-margin-remove-last-child', ], ], $props['content'])->render($element); $cell_image->attr([ 'class' => [ 'uk-link-{link_style: muted|text|heading}', 'uk-link {!link_style}', ], ]); } } if ($link && !$props['image']) { $props['content'] = $link($props, ['class' => [ 'el-link', 'uk-link-{0}' => $element['link_style'], 'uk-margin-remove-last-child', ]], $this->striptags($props['content'])); } // No white space for horizontal lists ?> <?php if ($props['image']) : ?> <?php if ($props['link']) : ?> <?= $link($props) ?> <?php endif ?> <?= $grid($element) ?> <?= $cell_image($element, $props['image']) ?> <div> <?= $content($element, $props['content'] ?: '') ?> </div> <?= $grid->end() ?> <?php if ($props['link']) : ?> <?= $link->end() ?> <?php endif ?> <?php else : // No white space for horizontal lists ?> <?= $content($element, $props['content'] ?: '') ?> <?php endif ?> builder/elements/list_item/element.json000064400000006164151666572160014351 0ustar00{ "@import": "./element.php", "name": "list_item", "title": "Item", "width": 500, "placeholder": { "props": { "content": "Lorem ipsum dolor sit amet.", "image": "", "icon": "" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "type": "editor", "root": true, "source": true }, "image": "${builder.image}", "image_alt": "${builder.image_alt}", "icon": { "label": "Icon", "description": "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.", "type": "icon", "source": true, "enable": "!image" }, "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image" }, "icon_color": { "label": "Icon Color", "description": "Set the icon color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "!image" }, "link": "${builder.link}", "link_target": "${builder.link_target}", "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content", "image", "image_alt", "icon", "link", "link_target"] }, { "title": "Settings", "fields": [ { "label": "Image", "type": "group", "divider": true, "fields": ["image_focal_point"] }, { "label": "Icon", "type": "group", "fields": ["icon_color"] } ] }, "${builder.advancedItem}" ] } } } builder/elements/nav_item/element.json000064400000007276151666572160014167 0ustar00{ "@import": "./element.php", "name": "nav_item", "title": "Item", "width": 500, "placeholder": { "props": { "content": "Item" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "source": true }, "meta": { "label": "Subtitle", "source": true }, "image": "${builder.image}", "image_alt": "${builder.image_alt}", "icon": { "label": "Icon", "description": "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.", "type": "icon", "source": true, "enable": "!image" }, "link": { "label": "Link", "type": "link", "description": "Enter or pick a link, an image or a video file.", "attrs": { "placeholder": "http://" }, "source": true }, "link_target": { "type": "checkbox", "text": "Open the link in a new window" }, "type": { "label": "Type", "description": "Select the item type.", "type": "select", "options": { "Item": "", "Heading": "heading", "Divider": "divider" }, "source": true }, "active": { "label": "Active", "description": "Highlight the item as the active item.", "type": "checkbox", "text": "Enable active state", "source": true, "enable": "!$match(type, 'divider|header')" }, "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "content", "meta", "image", "image_alt", "icon", "link", "link_target" ] }, { "title": "Settings", "fields": [ { "label": "Item", "type": "group", "divider": true, "fields": ["type", "active"] }, { "label": "Image", "type": "group", "fields": ["image_focal_point"] } ] }, "${builder.advancedItem}" ] } } } builder/elements/nav_item/element.php000064400000001076151666572160013775 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['meta', 'image'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; if ($key === 'image') { $node->props['icon'] = ''; } } } // Don't render element if content fields are empty return $node->props['content'] != ''; }, ], ]; builder/elements/nav_item/templates/content.php000064400000000634151666572160016013 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['content'] != '' && $props['link']) : ?> <a href="<?= $props['link'] ?>"><?= $props['content'] ?></a> <?php elseif ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> builder/elements/nav_item/templates/template.php000064400000005250151666572160016153 0ustar00<?php // Link $link = $this->el('a', [ 'class' => [ 'uk-flex-{text_align: left|right}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]]', ], ]); if ($props['link']) { $link->attr([ 'class' => [ 'el-link', 'uk-link-{link_style}', ], 'href' => $props['link'], 'target' => $props['link_target'] ? '_blank' : '', ]); } else { $link->attr([ 'class' => [ 'el-content uk-disabled', ], ]); } // Subtitle $meta = $this->el('div', [ 'class' => [ 'uk-nav-subtitle', ], ]); // Image Align $grid = $this->el('div', [ 'class' => [ 'uk-grid uk-grid-small uk-child-width-expand uk-flex-nowrap', 'uk-flex-middle {@image_vertical_align}', ], ]); $cell_image = $this->el('div', [ 'class' => [ 'uk-width-auto' ], ]); // Image if ($props['image']) { $image = $this->el('image', [ 'class' => [ 'el-image', 'uk-border-{image_border}', 'uk-margin-small-right {@image_margin}' => !$props['meta'], 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($props['image']) == 'svg', ], 'src' => $props['image'], 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $props['image_focal_point'], 'uk-svg' => $element['image_svg_inline'], 'thumbnail' => true, ]); $props['image'] = $image($element); } elseif ($props['icon']) { $icon = $this->el('span', [ 'class' => [ 'el-image', 'uk-margin-small-right {@image_margin}' => !$props['meta'], ], 'uk-icon' => [ 'icon: {0};' => $props['icon'], 'width: {icon_width};', 'height: {icon_width};', ], ]); $props['image'] = $icon($element, ''); } ?> <?= $link($element) ?> <?php if ($props['image'] && $props['meta'] != '') : ?> <?= $grid($element) ?> <?= $cell_image($element, $props['image']) ?> <div> <?= $props['content'] ?> <?= $meta($element, $props['meta']) ?> </div> <?= $grid->end() ?> <?php else : ?> <?= $props['image'] ?> <?php if ($props['meta'] != '') : ?> <div> <?= $props['content'] ?> <?= $meta($element, $props['meta']) ?> </div> <?php else : ?> <?= $props['content'] ?> <?php endif ?> <?php endif ?> <?= $link->end() ?> builder/elements/nav_item/updates.php000064400000000307151666572160014005 0ustar00<?php namespace YOOtheme; return [ '3.0.10.1' => function ($node) { if (Arr::get($node->props, 'type') === 'header') { $node->props['type'] = 'heading'; } }, ]; builder/elements/section/updates.php000064400000016556151666572160013664 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset( $node->props['header_overlay'], $node->props['image_fixed'], $node->props['media'], $node->props['media_advanced'], $node->props['media_size'], ); }, '4.4.0-beta.0.3' => function ($node) { if ( Arr::get($node->props, 'vertical_align') && !( (Arr::get($node->props, 'height') == 'viewport' && Arr::get($node->props, 'height_viewport') <= 100) || in_array(Arr::get($node->props, 'height'), ['section', 'pixels']) ) ) { Arr::set($node->props, 'vertical_align', ''); } }, '4.3.1' => function ($node) { if ( Arr::get($node->props, 'header_transparent_noplaceholder') && Arr::get($node->props, 'header_transparent_text_color') ) { $element = $node->children[0]->children[0]->children[0] ?? null; if ( $element && in_array($element->type ?? '', ['slideshow', 'slider']) && ($element->props->text_color ?? '') !== Arr::get($node->props, 'header_transparent_text_color') ) { $element->props->css = trim( str_replace( "\n\n.el-item { --uk-inverse: dark !important; }", '', $element->props->css ?? '', ), ); } } }, '4.3.0-beta.0.5' => function ($node, $params) { if ($height = Arr::get($node->props, 'height')) { $rename = [ 'full' => 'viewport', 'percent' => 'viewport', 'section' => 'section', 'expand' => 'page', ]; if (isset($rename[$height])) { $node->props['height'] = $rename[$height]; if ( $height !== 'expand' && ($params['i'] ?? 0) < 2 && empty($params['updateContext']['height']) ) { $node->props['height_offset_top'] = true; } if ($height === 'percent') { $node->props['height_viewport'] = 80; } } elseif (preg_match('/viewport-([2-4])/', $height, $match)) { $node->props['height'] = 'viewport'; $node->props['height_viewport'] = ((int) $match[1]) * 100; } $params['updateContext']['height'] = true; } $params['updateContext']['sectionIndex'] = $params['i'] ?? 0; }, '4.3.0-beta.0.3' => function ($node, $params) { if (Arr::get($node->props, 'header_transparent')) { if ( Arr::get($node->props, 'text_color') != Arr::get($node->props, 'header_transparent') || !(Arr::get($node->props, 'image') || Arr::get($node->props, 'video')) ) { $node->props['header_transparent_text_color'] = $node->props['header_transparent']; } $node->props['header_transparent'] = true; } Arr::updateKeys($node->props, ['image_focal_point' => 'media_focal_point']); }, '3.0.5.1' => function ($node) { if ( Arr::get($node->props, 'image_effect') == 'parallax' && !is_numeric(Arr::get($node->props, 'image_parallax_easing')) ) { Arr::set($node->props, 'image_parallax_easing', '1'); } }, '2.8.0-beta.0.12' => function ($node) { if (Arr::get($node->props, 'image_position') === '') { $node->props['image_position'] = 'center-center'; } }, '2.8.0-beta.0.3' => function ($node) { foreach (['bgx', 'bgy'] as $prop) { $key = "image_parallax_{$prop}"; $start = Arr::get($node->props, "{$key}_start", ''); $end = Arr::get($node->props, "{$key}_end", ''); if ($start != '' || $end != '') { Arr::set( $node->props, $key, implode(',', [$start != '' ? $start : 0, $end != '' ? $end : 0]), ); } Arr::del($node->props, "{$key}_start"); Arr::del($node->props, "{$key}_end"); } }, '2.8.0-beta.0.2' => function ($node) { if (isset($node->props['sticky'])) { $node->props['sticky'] = 'cover'; } }, '2.4.12.1' => function ($node) { if (Arr::get($node->props, 'animation_delay') === true) { $node->props['animation_delay'] = '200'; } }, '2.4.0-beta.0.2' => function ($node) { Arr::updateKeys($node->props, ['image_visibility' => 'media_visibility']); }, '2.3.0-beta.1.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ($style == 'fjord') { if (Arr::get($node->props, 'width') === 'default') { $node->props['width'] = 'large'; } } }, '2.1.0-beta.2.1' => function ($node) { if (in_array(Arr::get($node->props, 'style'), ['primary', 'secondary'])) { $node->props['text_color'] = ''; } }, '2.0.0-beta.5.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if (!in_array($style, ['jack-baker', 'morgan-consulting', 'vibe'])) { if (Arr::get($node->props, 'width') === 'large') { $node->props['width'] = 'xlarge'; } } if ( in_array($style, [ 'craft', 'district', 'florence', 'makai', 'matthew-taylor', 'pinewood-lake', 'summit', 'tomsen-brody', 'trek', 'vision', 'yard', ]) ) { if (Arr::get($node->props, 'width') === 'default') { $node->props['width'] = 'large'; } } }, '1.18.10.2' => function ($node) { if (!empty($node->props['image']) && !empty($node->props['video'])) { unset($node->props['video']); } }, '1.18.0' => function ($node) { if (!isset($node->props['image_effect'])) { $node->props['image_effect'] = Arr::get($node->props, 'image_fixed') ? 'fixed' : ''; } if ( !isset($node->props['vertical_align']) && in_array(Arr::get($node->props, 'height'), ['full', 'percent', 'section']) ) { $node->props['vertical_align'] = 'middle'; } if (Arr::get($node->props, 'style') === 'video') { $node->props['style'] = 'default'; } if (Arr::get($node->props, 'width') === 0) { $node->props['width'] = 'default'; } elseif (Arr::get($node->props, 'width') === 2) { $node->props['width'] = 'small'; } elseif (Arr::get($node->props, 'width') === 3) { $node->props['width'] = 'expand'; } }, ]; builder/elements/section/element.json000064400000052640151666572160014024 0ustar00{ "@import": "./element.php", "name": "section", "title": "Section", "container": true, "width": 500, "defaults": { "style": "default", "width": "default", "vertical_align": "middle", "title_position": "top-left", "title_rotation": "left", "title_breakpoint": "xl", "image_position": "center-center" }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "image": { "label": "Image", "type": "image", "source": true, "show": "!video" }, "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true, "show": "!image" }, "_media": { "type": "button-panel", "panel": "builder-section-media", "text": "Edit Settings", "show": "image || video" }, "video_title": { "label": "Video Title", "source": true, "show": "video && $match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "title": { "label": "Title", "description": "Enter a decorative section title which is aligned to the section edge.", "source": true }, "style": { "label": "Style", "type": "select", "options": { "Default": "default", "Muted": "muted", "Primary": "primary", "Secondary": "secondary" } }, "preserve_color": { "type": "checkbox", "text": "Preserve text color", "enable": "style" }, "overlap": { "description": "Preserve the text color, for example when using cards. Section overlap is not supported by all styles and may have no visual effect.", "type": "checkbox", "text": "Overlap the following section", "enable": "style" }, "background_color": { "label": "Background Color", "type": "color", "enable": "!style && !background_parallax_background" }, "_background_parallax_button": { "description": "Define a custom background color or a color parallax animation instead of using a predefined style.", "type": "button-panel", "text": "Edit Parallax", "panel": "background-parallax", "enable": "!style" }, "text_color": { "label": "Text Color", "description": "Force a light or dark color for text, buttons and controls on the image or video background.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true, "enable": "!style || image || video" }, "width": { "label": "Max Width", "type": "select", "options": { "Default": "default", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge", "Expand": "expand", "None": "" } }, "padding_remove_horizontal": { "description": "Set the maximum content width.", "type": "checkbox", "text": "Remove horizontal padding", "enable": "width && width != 'expand'" }, "width_expand": { "label": "Expand One Side", "description": "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.", "type": "select", "options": { "Don't expand": "", "To left": "left", "To right": "right" }, "enable": "width && width != 'expand'" }, "height": { "type": "select", "options": { "None": "", "Pixels": "pixels", "Viewport": "viewport", "Viewport (Subtract Next Section)": "section", "Expand Page to Viewport": "page" } }, "height_viewport": { "type": "number", "attrs": { "placeholder": "100", "min": 0, "step": 10 }, "enable": "height == 'viewport' || height == 'pixels'" }, "height_offset_top": { "description": "Set a fixed height, and optionally subtract the header height to fill the first visible viewport. Alternatively, expand the height so the next section also fits the viewport, or on smaller pages to fill the viewport.", "type": "checkbox", "text": "Subtract height above section", "enable": "height == 'viewport' && (height_viewport || 0) <= 100 || height == 'section'" }, "vertical_align": { "label": "Vertical Alignment", "description": "Align the section content vertically, if the section height is larger than the content itself.", "type": "select", "options": { "Top": "", "Middle": "middle", "Bottom": "bottom" }, "enable": "height" }, "padding": { "label": "Padding", "description": "Set the vertical padding.", "type": "select", "options": { "Default": "", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge", "None": "none" } }, "padding_remove_top": { "type": "checkbox", "text": "Remove top padding", "enable": "padding != 'none'" }, "padding_remove_bottom": { "type": "checkbox", "text": "Remove bottom padding", "enable": "padding != 'none'" }, "html_element": "${builder.html_element}", "sticky": { "label": "Sticky Effect", "description": "Sticky section will be covered by the following section while scrolling. Reveal section by previous section.", "type": "select", "options": { "None": "", "Cover": "cover", "Reveal": "reveal" } }, "header_transparent": { "label": "Transparent Header", "type": "checkbox", "text": "Make header transparent" }, "header_transparent_noplaceholder": { "description": "Make the header transparent and overlay this section if it directly follows the header.", "type": "checkbox", "text": "Pull content behind header", "enable": "header_transparent" }, "header_transparent_text_color": { "label": "Header Text Color", "description": "Force a light or dark color for text, buttons and controls on the image or video background.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true, "enable": "header_transparent" }, "animation": { "label": "Animation", "description": "Apply an animation to elements once they enter the viewport. Slide animations can come into effect with a fixed offset or at 100% of the element size.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" } }, "animation_delay": { "label": "Animation Delay", "description": "Delay the element animations in milliseconds, e.g. <code>200</code>.", "attrs": { "placeholder": "0" }, "enable": "animation", "divider": true }, "title_position": { "label": "Position", "description": "Define the title position within the section.", "type": "select", "options": { "Left Top": "top-left", "Left Center": "center-left", "Left Bottom": "bottom-left", "Right Top": "top-right", "Right Center": "center-right", "Right Bottom": "bottom-right" }, "enable": "title" }, "title_rotation": { "label": "Rotation", "description": "Rotate the title 90 degrees clockwise or counterclockwise.", "type": "select", "options": { "Left": "left", "Right": "right" }, "enable": "title" }, "title_breakpoint": { "label": "Breakpoint", "description": "Display the section title on the defined screen size and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "title" }, "status": { "label": "Status", "description": "Disable the section and publish it later.", "type": "checkbox", "text": "Disable section", "attrs": { "true-value": "disabled", "false-value": "" } }, "source": "${builder.source}", "name": "${builder.name}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-section</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-section"] } } }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "image", "video", "_media", "video_title", "title" ] }, { "title": "Settings", "fields": [ "style", "preserve_color", "overlap", "text_color", "width", "padding_remove_horizontal", "width_expand", { "label": "Height", "name": "_height", "type": "grid", "width": "3-4,1-4", "gap": "small", "fields": ["height", "height_viewport"] }, "height_offset_top", "vertical_align", "padding", "padding_remove_top", "padding_remove_bottom", "html_element", "sticky", "header_transparent", "header_transparent_noplaceholder", "header_transparent_text_color", "animation", "animation_delay", { "label": "Title", "type": "group", "fields": ["title_position", "title_rotation", "title_breakpoint"] } ] }, "${builder.advanced}" ] } }, "panels": { "builder-section-media": { "title": "Image/Video", "width": 500, "fields": { "image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" } }, "image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" } }, "video_width": { "label": "Width", "type": "number" }, "video_height": { "label": "Height", "type": "number" }, "media_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "show": "image && !video" }, "image_size": { "label": "Image Size", "description": "Determine whether the image will fit the section dimensions by clipping it or by filling the empty areas with the background color.", "type": "select", "options": { "Auto": "", "Cover": "cover", "Contain": "contain", "Width 100%": "width-1-1", "Height 100%": "height-1-1" }, "show": "image && !video" }, "image_position": { "label": "Image Position", "description": "Set the initial background position, relative to the section layer.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "center-center", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "show": "image && !video" }, "image_effect": { "label": "Image Effect", "type": "select", "options": { "None": "", "Parallax": "parallax", "Fixed": "fixed" }, "show": "image && !video" }, "_image_parallax_button": { "description": "Add a parallax effect or fix the background with regard to the viewport while scrolling.", "type": "button-panel", "text": "Edit Parallax", "panel": "image-parallax", "show": "image && !video", "enable": "image_effect == 'parallax'" }, "media_visibility": { "label": "Visibility", "description": "Display the image or video only on this device width and larger.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" } }, "media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes, a transparent image or to fill the area, if the image doesn't cover the whole section.", "type": "color" }, "media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image or video will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" } }, "media_overlay": { "label": "Overlay Color", "type": "gradient", "internal": "media_overlay_gradient" }, "_media_overlay_parallax_button": { "description": "Set an additional transparent overlay to soften the image or video.", "type": "button-panel", "text": "Edit Parallax", "panel": "media-overlay-parallax", "enable": "media_overlay" } }, "fieldset": { "default": { "fields": [ { "description": "Set the width and height in pixels. Setting just one value preserves the original proportions. The image will be resized and cropped automatically.", "name": "_image_dimension", "type": "grid", "width": "1-2", "show": "image && !video", "fields": ["image_width", "image_height"] }, { "description": "Set the video dimensions.", "name": "_video_dimension", "type": "grid", "width": "1-2", "show": "video && !image", "fields": ["video_width", "video_height"] }, "media_focal_point", "image_loading", "image_size", "image_position", "image_effect", "_image_parallax_button", "media_visibility", "media_background", "media_blend_mode", "media_overlay", "_media_overlay_parallax_button" ] } } } } } builder/elements/section/templates/template-video.php000064400000001423151666572160017117 0ustar00<?php if ($iframe = $this->iframeVideo($props['video'])) { $video = $this->el('iframe', [ 'class' => [ 'uk-disabled', ], 'src' => $iframe, 'title' => $props['video_title'], ]); } else { $video = $this->el('video', [ 'src' => $props['video'], 'controls' => false, 'loop' => true, 'autoplay' => true, 'muted' => true, 'playsinline' => true, 'class' => [ 'uk-object-{media_focal_point}', ], ]); } $video->attr([ 'width' => $props['video_width'], 'height' => $props['video_height'], 'class' => [ 'uk-blend-{media_blend_mode}', 'uk-visible@{media_visibility}', ], 'uk-cover' => true, ]); return $video; builder/elements/section/templates/template.php000064400000017122151666572160016016 0ustar00<?php // Initialize prop if not set $props += [ 'media_overlay_gradient' => null, 'background_parallax_background' => null, ]; // Resets if (!($props['image'] || $props['video'])) { $props['media_overlay'] = false; $props['media_overlay_gradient'] = false; } if (!($props['height'] == 'viewport' && $props['height_viewport'] <= 100 || $props['height'] == 'section')) { $props['height_offset_top'] = false; } if (!$props['height']) { $props['vertical_align'] = false; } if ($props['image']) { $props['video'] = false; } $el = $this->el($props['html_element'] ?: 'div', $attrs); $el->attr([ 'class' => [ 'uk-section-{style}', 'uk-section-overlap {@overlap}', 'uk-position-z-index-negative {@sticky}', 'uk-preserve-color {@style}' => $props['preserve_color'] || ($props['text_color'] && ($props['image'] || $props['video'])), 'uk-{text_color}' => !$props['style'] || $props['image'] || $props['video'], 'uk-inverse-{header_transparent_text_color}' => $props['header_transparent'] && ($props['text_color'] != $props['header_transparent_text_color'] || !($props['style'] || $props['image'] || $props['video'])), 'uk-position-relative {@!sticky}' => ($props['image'] && ($props['media_overlay'] || $props['media_overlay_gradient'])) || ($props['video'] && !$this->iframeVideo($props['video'])), // uk-sticky already sets a position context 'uk-cover-container {@video}' => $this->iframeVideo($props['video']), ], 'style' => [ 'background-color: {media_background}; {@video}', 'background-color: {background_color}; {@!media_background} {@!video} {@!style}' ], 'tm-header-transparent-noplaceholder' => $props['header_transparent_noplaceholder'], ]); if (!$props['style'] && $bgParallax = $this->parallaxOptions($props, 'background_', ['background'])) { $el->attr('uk-parallax', $bgParallax); } if ($props['sticky']) { $el->attr([ 'uk-sticky' => [ 'overflow-flip: true; end: 100%; {@sticky: cover}', 'position: bottom; overflow-flip: true; start: -100%; end: 0; {@sticky: reveal}', ], 'style' => ['z-index: calc(var(--tm-reveal, 0) - {0}); {@sticky: reveal}' => 1 + ($i ?? 0)], ]); } if ($props['animation']) { $el->attr('uk-scrollspy', [ 'target: [uk-scrollspy-class];', 'cls: uk-animation-{animation};', 'delay: {0};' => $props['animation_delay'] ?: 'false', ]); } // Section $attrs_section = [ 'class' => [ 'uk-section', 'uk-section-{!padding: |none}' , 'uk-padding-remove-vertical {@padding: none}', 'uk-padding-remove-top {@!padding: none} {@padding_remove_top}', 'uk-padding-remove-bottom {@!padding: none} {@padding_remove_bottom}', 'uk-flex [uk-flex-{vertical_align} {@!title}] {@vertical_align}', // Height Viewport 'uk-height-viewport {@height: viewport} {@!height_offset_top} {@height_viewport: |100}', 'uk-height-viewport-{0} {@height: viewport} {@!height_offset_top} {@height_viewport: 200|300|400}' => (int) $props['height_viewport'] / 100, ], 'style' => [ // Height Viewport 'min-height: {!height_viewport: |100|200|300|400}vh {@height: viewport} {@!height_offset_top}', 'min-height: {0}px {@height: pixels}' => $props['height_viewport'] ?: 100, ], // Height Viewport 'uk-height-viewport' => $props['height'] !== 'pixels' ? [ 'offset-top: true; {@height: viewport|section} {@height_offset_top}', 'offset-bottom: {0}; {@height: viewport} {@height_offset_top}' => $props['height_viewport'] && $props['height_viewport'] < 100 ? 100 - (int) $props['height_viewport'] : false, 'offset-bottom: {0}; {@height: section}' => $props['image'] ? '! +' : 'true', 'expand: true; {@height: page}', ] : false, ]; // Image $image = $props['image'] ? $this->el('div', $this->bgImage($props['image'], [ 'width' => $props['image_width'], 'height' => $props['image_height'], 'focal_point' => $props['media_focal_point'], 'loading' => $props['image_loading'] ? 'eager' : null, 'size' => $props['image_size'], 'position' => $props['image_position'], 'visibility' => $props['media_visibility'], 'blend_mode' => $props['media_blend_mode'], 'background' => $props['media_background'], 'effect' => $props['image_effect'] != 'parallax' ? $props['image_effect'] : '', ])) : null; if ($image && $props['image_effect'] == 'parallax' && $imageParallax = $this->parallaxOptions($props, 'image_', ['bgx', 'bgy'])) { $image->attr('uk-parallax', $imageParallax); } // Video $video = $props['video'] ? include "{$__dir}/template-video.php" : null; $overlay = ($props['media_overlay'] || $props['media_overlay_gradient']) && ($props['image'] || $props['video']) ? $this->el('div', [ 'class' => ['uk-position-cover'], 'style' => [ 'background-color: {media_overlay};', // `background-clip` fixes sub-pixel issue 'background-image: {media_overlay_gradient}; background-clip: padding-box;', ], ]) : null; if (($props['media_overlay'] || $props['media_overlay_gradient']) && ($props['image'] || $props['video']) && $mediaOverlayParallax = $this->parallaxOptions($props, 'media_overlay_', ['opacity'])) { $overlay->attr('uk-parallax', $mediaOverlayParallax); } $container = $props['width'] || $props['video'] || $overlay ? $this->el('div', [ 'class' => [ 'uk-container {@width}', 'uk-container-{width: xsmall|small|large|xlarge|expand}', 'uk-padding-remove-horizontal {@padding_remove_horizontal} {@width} {@!width:expand}', 'uk-container-expand-{width_expand} {@width} {@!width:expand}', // Make sure overlay and video is always below content 'uk-position-relative [{@!width} uk-panel]' => $overlay || $props['video'], ], ]) : null; $title = $this->el('div', [ 'class' => [ 'tm-section-title', 'uk-position-{title_position} uk-position-medium', !in_array($props['title_position'], ['center-left', 'center-right']) ? 'uk-margin-remove-vertical' : 'uk-text-nowrap', 'uk-visible@{title_breakpoint}', ], ]); ?> <?= $el($props, !$image ? $attrs_section : []) ?> <?php if ($props['image']) : ?> <?= $image($props, $attrs_section) ?> <?php endif ?> <?php if ($video) : ?> <?= $video($props, '') ?> <?php endif ?> <?php if ($overlay) : ?> <?= $overlay($props, '') ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $this->el('div', ['class' => [ 'uk-position-relative', 'uk-width-1-1 uk-flex uk-flex-{vertical_align}', ]])->render($props) ?> <?php endif ?> <?php if ($props['vertical_align']) : ?> <div class="uk-width-1-1"> <?php endif ?> <?php if ($container) : ?> <?= $container($props) ?> <?php endif ?> <?= $builder->render($children) ?> <?php if ($container) : ?> <?= $container->end() ?> <?php endif ?> <?php if ($props['vertical_align']) : ?> </div> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($props) ?> <div class="<?= $props['title_rotation'] == 'left' ? 'tm-rotate-180' : '' ?>"><?= $props['title'] ?></div> <?= $title->end() ?> </div> <?php endif ?> <?php if ($props['image']) : ?> </div> <?php endif ?> <?= $el->end() ?> builder/elements/section/templates/content.php000064400000000051151666572170015647 0ustar00<?php echo $builder->render($children); builder/elements/section/element.php000064400000000762151666572170013641 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { /** @var Config $config */ $config = app(Config::class); // Set section transparent header if (is_null($config('header.section.transparent'))) { $config->set( 'header.section.transparent', (bool) $node->props['header_transparent'], ); } }, ], ]; builder/elements/social/updates.php000064400000005451151666572170013463 0ustar00<?php namespace YOOtheme; return [ '4.4.6' => function ($node) { // Previous version still had grid_gap as default unset($node->props['grid_gap']); if (!Arr::has($node->props, 'grid_column_gap')) { $node->props['grid_column_gap'] = ''; } if (!Arr::has($node->props, 'grid_row_gap')) { $node->props['grid_row_gap'] = ''; } // Remove deprecated prop unset($node->props['inline_align']); }, '4.4.0-beta.4' => function ($node) { Arr::updateKeys($node->props, [ 'grid_gap' => fn($value) => ['grid_column_gap' => $value, 'grid_row_gap' => $value], ]); }, '4.4.0-beta.0.1' => function ($node) { if (!empty($node->props['icon_width'])) { $node->props['image_width'] = $node->props['icon_width']; $node->props['image_height'] = $node->props['icon_width']; } }, '2.8.0-beta.0.3' => function ($node) { Arr::del($node->props, 'gap'); }, '2.4.14.1' => function ($node) { Arr::updateKeys($node->props, ['gap' => 'grid_gap']); }, '2.2.0-beta.0.1' => function ($node) { $props = (array) ($node->source->props ?? []); for ($i = 1; $i <= 5; $i++) { if (!empty($props["link_{$i}"])) { $node->children[] = (object) [ 'type' => 'social_item', 'props' => (object) ['link' => ''], 'source' => (object) [ 'query' => $node->source->query, 'props' => (object) ['link' => $props["link_{$i}"]], ], ]; } elseif (!empty($node->props["link_{$i}"])) { $node->children[] = (object) [ 'type' => 'social_item', 'props' => (object) ['link' => $node->props["link_{$i}"]], ]; } unset($node->props["link_{$i}"]); } unset($node->source); }, '2.1.0-beta.0.1' => function ($node) { if (!empty($node->props['icon_ratio'])) { $node->props['icon_width'] = round(20 * $node->props['icon_ratio']); unset($node->props['icon_ratio']); } }, '2.0.5.1' => function ($node) { $links = !empty($node->props['links']) ? (array) $node->props['links'] : []; for ($i = 0; $i <= 4; $i++) { if (isset($links[$i])) { $node->props['link_' . ($i + 1)] = $links[$i]; } } unset($node->props['links']); }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, ['gutter' => 'gap']); }, '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/social/templates/content.php000064400000000224151666572170015457 0ustar00<ul> <?php foreach ($children as $child) : ?> <li><?= $builder->render($child, ['element' => $props]) ?></li> <?php endforeach ?> </ul> builder/elements/social/templates/template.php000064400000002620151666572170015622 0ustar00<?php $el = $this->el('div'); // Grid $grid = $this->el('ul', [ 'class' => [ 'uk-{link_style: iconnav|thumbnav} [uk-{link_style: iconnav|thumbnav}-vertical {@grid: vertical}]', 'uk-child-width-auto {@!link_style: iconnav|thumbnav}', 'uk-flex-column {@grid: vertical} {@!link_style: iconnav|thumbnav}', !in_array($props['link_style'], ['iconnav', 'thumbnav']) || (in_array($props['link_style'], ['iconnav', 'thumbnav']) && $props['grid'] == 'horizontal') ? $props['grid_column_gap'] == $props['grid_row_gap'] ? 'uk-grid-{grid_column_gap}' : '[uk-grid-column-{grid_column_gap}] [uk-grid-row-{grid_row_gap}]' : '', 'uk-flex-inline', // allow text alignment 'uk-flex-middle', // center images with different heights ], 'uk-grid' => !in_array($props['link_style'], ['iconnav', 'thumbnav']) || (in_array($props['link_style'], ['iconnav', 'thumbnav']) && $props['grid'] == 'horizontal'), 'uk-toggle' => [ 'cls: uk-flex-column; mode: media; media: @{grid_vertical_breakpoint} {@grid: vertical} {@!link_style: iconnav|thumbnav}', ], ]); ?> <?= $el($props, $attrs) ?> <?= $grid($props) ?> <?php foreach ($children as $child) : ?> <li class="el-item"><?= $builder->render($child, ['element' => $props]) ?></li> <?php endforeach ?> <?= $grid->end() ?> <?= $el->end() ?> builder/elements/social/images/iconSmall.svg000064400000001222151666572170015204 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" d="M17.8,14.8c0,1.2-1,2.2-2.3,2.2c-1.2,0-2.3-1-2.3-2.2 c0-1.2,1-2.3,2.3-2.3C16.7,12.5,17.8,13.5,17.8,14.8z" /> <path fill="none" stroke="#444" d="M17.8,4.8c0,1.2-1,2.2-2.3,2.2c-1.2,0-2.3-1-2.3-2.2 c0-1.2,1-2.3,2.3-2.3C16.7,2.5,17.8,3.5,17.8,4.8z" /> <path fill="none" stroke="#444" d="M6.8,9.8c0,1.2-1,2.2-2.3,2.2s-2.3-1-2.3-2.2c0-1.2,1-2.3,2.3-2.3 S6.8,8.5,6.8,9.8z" /> <line fill="none" stroke="#444" x1="13.4" y1="14" x2="6.3" y2="10.7" /> <line fill="none" stroke="#444" x1="13.5" y1="5.5" x2="6.5" y2="8.8" /> </svg> builder/elements/social/images/icon.svg000064400000001644151666572170014223 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" stroke-width="2" d="M27.371,23.013c0,1.897-1.588,3.486-3.646,3.486 c-1.906,0-3.648-1.589-3.648-3.486c0-1.904,1.588-3.648,3.648-3.648C25.627,19.364,27.371,20.947,27.371,23.013z" /> <path fill="none" stroke="#444" stroke-width="2" d="M27.371,7.148c0,1.906-1.588,3.489-3.646,3.489 c-1.906,0-3.648-1.583-3.648-3.489c0-1.901,1.588-3.647,3.648-3.647C25.627,3.501,27.371,5.09,27.371,7.148z" /> <path fill="none" stroke="#444" stroke-width="2" d="M9.924,15.08c0,1.901-1.589,3.491-3.648,3.491 c-2.059,0-3.647-1.59-3.647-3.491c0-1.905,1.589-3.647,3.647-3.647C8.335,11.433,9.924,13.017,9.924,15.08z" /> <line fill="none" stroke="#444" stroke-width="2" x1="20.393" y1="21.742" x2="9.129" y2="16.507" /> <line fill="none" stroke="#444" stroke-width="2" x1="20.553" y1="8.259" x2="9.446" y2="13.491" /> </svg> builder/elements/social/element.json000064400000023407151666572170013632 0ustar00{ "name": "social", "title": "Social", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "link_style": "button", "grid": "horizontal", "grid_column_gap": "small", "grid_row_gap": "small", "image_svg_inline": true, "margin": "default" }, "placeholder": { "children": [ { "type": "social_item", "props": { "link": "https://twitter.com" } }, { "type": "social_item", "props": { "link": "https://facebook.com" } }, { "type": "social_item", "props": { "link": "https://www.youtube.com" } } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "title": "link", "item": "social_item" }, "link_style": { "label": "Style", "type": "select", "options": { "Icon Link": "", "Icon Button": "button", "Link": "link", "Link Muted": "muted", "Link Text": "text", "Link Reset": "reset", "Iconnav": "iconnav", "Thumbnav": "thumbnav" } }, "grid": { "label": "Grid", "type": "select", "options": { "Horizontal": "horizontal", "Vertical": "vertical" } }, "grid_vertical_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will align side by side.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "grid == 'vertical' && !$match(link_style, 'iconnav|thumbnav')" }, "grid_column_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "!$match(link_style, 'iconnav|thumbnav') || ($match(link_style, 'iconnav|thumbnav') && grid == 'horizontal')" }, "grid_row_gap": { "label": "Row Gap", "description": "Set the size of the gap between the grid rows.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "!$match(link_style, 'iconnav|thumbnav') || ($match(link_style, 'iconnav|thumbnav') && grid == 'horizontal')" }, "icon_width": { "label": "Icon Width", "description": "Set the icon width." }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" } }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" } }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly" }, "link_target": { "label": "Link Target", "type": "checkbox", "text": "Open in a new window" }, "link_aria_label": { "label": "ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text." }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-item", ".el-link"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content"] }, { "title": "Settings", "fields": [ { "label": "Social Icons", "type": "group", "divider": true, "fields": [ "link_style", "grid", "grid_vertical_breakpoint", "grid_column_gap", "grid_row_gap" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ "icon_width", { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading", "image_svg_inline" ] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", "link_aria_label" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/button_item/updates.php000064400000001133151666572170014533 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'lightbox_width' => 'image_width', 'lightbox_height' => 'image_height', 'lightbox_image_focal_point' => 'image_focal_point', ]); }, '1.18.0' => function ($node) { if (Arr::get($node->props, 'link_target') === true) { $node->props['link_target'] = 'blank'; } if (Arr::get($node->props, 'button_style') === 'muted') { $node->props['button_style'] = 'link-muted'; } }, ]; builder/elements/button_item/templates/template-offcanvas.php000064400000001666151666572170020656 0ustar00<?php // Offcanvas $offcanvas = $this->el('div', [ 'id' => ['{id}'], 'uk-offcanvas' => [ 'container: true;', 'flip: {dialog_offcanvas_flip};', 'overlay: {dialog_offcanvas_overlay};', ], ]); $offcanvas_content = $this->el('div', [ 'class' => [ 'uk-offcanvas-bar', 'uk-padding-remove {@link}', ], ]); $offcanvas_close = $this->el('button', [ 'class' => [ 'uk-offcanvas-close', 'uk-close-large {@dialog_close_large}', ], 'uk-close' => true, 'uk-toggle' => $props['dialog_close_large'] ? [ 'cls: uk-close-large {@dialog_close_large};', 'mode: media;', 'media: @s;', ] : false, 'type' => 'button', ]); ?> <?= $offcanvas($props) ?> <?= $offcanvas_content($props) ?> <?= $offcanvas_close($props, '') ?> <?= $props['dialog'] ?> <?= $offcanvas_content->end() ?> <?= $offcanvas->end() ?> builder/elements/button_item/templates/template-image.php000064400000000372151666572170017763 0ustar00<?php $image = $this->el('image', [ 'src' => $src, 'alt' => true, 'width' => $props['image_width'], 'height' => $props['image_height'], 'focal_point' => $props['image_focal_point'], 'thumbnail' => true, ]); return $image; builder/elements/button_item/templates/template.php000064400000004060151666572170016701 0ustar00<?php $props['id'] = "js-{$this->uid()}"; // Button $button = $this->el('a', [ 'class' => $this->expr([ 'el-content', 'uk-width-1-1 {@fullwidth}', 'uk-{button_style: link-\w+}' => ['button_style' => $props['button_style']], 'uk-button uk-button-{!button_style: |link-\w+} [uk-button-{button_size}]' => ['button_style' => $props['button_style']], 'uk-flex-inline uk-flex-center uk-flex-middle' => $props['content'] && $props['icon'], ], $element), 'title' => ['{link_title}'], 'aria-label' => ['{link_aria_label}'], ]); if (($props['link'] && $props['link_target'] == 'modal') || (!$props['link'] && $props['dialog'] && in_array($props['dialog_layout'], ['modal', 'offcanvas']))) { $button->attr([ 'href' => ['#{id}'], 'uk-toggle' => true, ]); } else { $button->attr([ 'href' => ['{link}'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]); } // Icon $icon = $this->el('span', [ 'class' => [ 'uk-margin-small-right' => $props['content'] && $props['icon_align'] == 'left', 'uk-margin-small-left' => $props['content'] && $props['icon_align'] == 'right', ], 'uk-icon' => $props['icon'], ]); ?> <?= $button($props, $attrs) ?> <?php if ($props['icon'] && $props['icon_align'] == 'left') : ?> <?= $icon($props, '') ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $props['content'] ?> <?php endif ?> <?php if ($props['icon'] && $props['icon_align'] == 'right') : ?> <?= $icon($props, '') ?> <?php endif ?> <?= $button->end() ?> <?php if (($props['link'] && $props['link_target'] == 'modal') || (!$props['link'] && $props['dialog'] && $props['dialog_layout'] == 'modal')) : ?> <?= $this->render("{$__dir}/template-modal", compact('props')) ?> <?php endif ?> <?php if (!$props['link'] && $props['dialog'] && $props['dialog_layout'] == 'offcanvas') : ?> <?= $this->render("{$__dir}/template-offcanvas", compact('props')) ?> <?php endif ?> builder/elements/button_item/templates/content.php000064400000000474151666572170016545 0ustar00<?php if ($props['content'] != '') : ?> <p> <?php if ($props['link']) : ?> <a href="<?= $props['link'] ?>"><?= $props['content'] ?></a> <?php else : ?> <?= $props['content'] ?> <?php endif ?> </p> <?php endif ?> <?php if ($props['dialog']) : ?> <div><?= $props['dialog'] ?></div> <?php endif ?> builder/elements/button_item/templates/template-media.php000064400000001601151666572170017754 0ustar00<?php $src = $props['link']; if ($this->isImage($src)) { $media = include "{$__dir}/template-image.php"; } elseif ($this->isVideo($src) || $this->iframeVideo($src)) { $media = include "{$__dir}/template-video.php"; } else { // Open linked page in modal $media = $this->el('iframe', [ 'src' => $src, 'width' => $props['image_width'], 'height' => $props['image_height'], 'allow' => 'autoplay', 'allowfullscreen' => true, 'uk-responsive' => true, 'loading' => 'lazy', ]); } // Media $media->attr([ 'class' => [ 'el-dialog', 'uk-object-cover [uk-object-{image_focal_point}] {@link_target: offcanvas}' => $this->isImage($src), ], 'style' => [ 'width: 100%; height: 100%; {@link_target: offcanvas}', ], ]); ?> <?php if ($media) : ?> <?= $media($props, '') ?> <?php endif ?> builder/elements/button_item/templates/template-modal.php000064400000002563151666572170020001 0ustar00<?php // Modal $modal = $this->el('div', [ 'id' => ['{id}'], 'uk-modal' => true, 'class' => [ 'uk-modal', 'uk-modal-{dialog_modal_width: container} {@!link}', ], ]); $modal_dialog = $this->el('div', [ 'class' => [ 'uk-modal-dialog uk-margin-auto-vertical', 'uk-width-auto {@link}', 'uk-modal-body {@!link}', 'uk-width-1-1 {@dialog_modal_width: expand} {@!link}', ], ]); $modal_close = $this->el('button', [ 'class' => [ 'uk-close-large {@dialog_close_large}', 'uk-modal-close-default {@!dialog_close_outside}', 'uk-modal-close-outside {@dialog_close_outside}', ], 'uk-close' => true, 'uk-toggle' => ($props['dialog_close_large'] || $props['dialog_close_outside']) ? [ 'cls: [uk-close-large {@dialog_close_large}] [uk-modal-close-outside uk-modal-close-default {@dialog_close_outside}];', 'mode: media;', 'media: @s;', ] : false, 'type' => 'button', ]); ?> <?= $modal($props) ?> <?= $modal_dialog($props) ?> <?= $modal_close($props, '') ?> <?php if ($props['link']) : ?> <?= $this->render("{$__dir}/template-media", compact('props', 'element')) ?> <?php elseif ($props['dialog']) : ?> <?= $props['dialog'] ?> <?php endif ?> <?= $modal_dialog->end() ?> <?= $modal->end() ?> builder/elements/button_item/templates/template-video.php000064400000001515151666572170020007 0ustar00<?php if ($iframe = $this->iframeVideo($src)) { $video = $this->el('iframe', [ 'src' => $iframe, 'allowfullscreen' => true, 'uk-responsive' => true, 'loading' => 'lazy', ]); } else { $video = $this->el('video', [ 'src' => $src, 'controls' => true, 'class' => [ // Imitate cropping like an image 'uk-object-cover [uk-object-{image_focal_point}] {@image_width} {@image_height}', ], 'style' => [ // Keep video responsiveness but with new proportions (because video isn't cropped like an image) 'aspect-ratio: {image_width} / {image_height};', ], ]); } $video->attr([ 'width' => $props['image_width'], 'height' => $props['image_height'], 'uk-video' => true, ]); return $video; builder/elements/button_item/element.php000064400000001431151666572170014520 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { $config = app(Config::class); // Force reload, otherwise Modal/Offcanvas might be orphaned in the DOM if ($config('app.isCustomizer') && ( ($node->props['link'] && $node->props['link_target'] == 'modal') || (!$node->props['link'] && $node->props['dialog'] && in_array($node->props['dialog_layout'], ['modal', 'offcanvas'])) )) { $node->attrs['data-preview'] = 'reload'; } // Don't render element if content fields are empty return ($node->props['link'] || $node->props['dialog']) && ($node->props['content'] != '' || $node->props['icon']); }, ], ]; builder/elements/button_item/element.json000064400000016311151666572170014705 0ustar00{ "@import": "./element.php", "name": "button_item", "title": "Item", "width": 500, "defaults": { "button_style": "default", "icon_align": "left", "dialog_layout": "modal", "dialog_offcanvas_flip": true }, "placeholder": { "props": { "content": "Button", "icon": "", "link": "#" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "source": true }, "icon": { "label": "Icon", "description": "Pick an optional icon from the icon library.", "type": "icon", "source": true }, "link": "${builder.link}", "link_title": "${builder.link_title}", "link_aria_label": "${builder.link_aria_label}", "dialog": { "label": "Dialog", "description": "Instead of opening a link, display an alternative content in a modal or an offcanvas sidebar.", "type": "editor", "source": true, "enable": "!link" }, "button_style": { "label": "Style", "description": "Set the button style.", "type": "select", "options": { "Default": "default", "Primary": "primary", "Secondary": "secondary", "Danger": "danger", "Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" } }, "icon_align": { "label": "Alignment", "description": "Choose the icon position.", "type": "select", "options": { "Left": "left", "Right": "right" }, "enable": "icon" }, "link_target": { "label": "Target", "type": "select", "options": { "Same Window": "", "New Window": "blank", "Modal": "modal" }, "enable": "link" }, "image_width": { "attrs": { "placeholder": "auto" }, "enable": "link && link_target == 'modal'" }, "image_height": { "attrs": { "placeholder": "auto" }, "enable": "link && link_target == 'modal'" }, "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "link && link_target == 'modal'" }, "dialog_layout": { "label": "Target", "type": "select", "options": { "Modal": "modal", "Offcanvas": "offcanvas" }, "enable": "dialog && !link" }, "dialog_close_large": { "label": "Close", "type": "checkbox", "text": "Display large icon", "enable": "dialog && !link && dialog_layout" }, "dialog_close_outside": { "type": "checkbox", "text": "Display outside", "enable": "dialog && !link && dialog_layout == 'modal'" }, "dialog_modal_width": { "label": "Modal Width", "type": "select", "options": { "Default": "", "Container": "container", "Expand": "expand" }, "enable": "dialog && !link && dialog_layout == 'modal'" }, "dialog_offcanvas_flip": { "label": "Offcanvas", "type": "checkbox", "text": "Display on the right", "enable": "dialog && !link && dialog_layout == 'offcanvas'" }, "dialog_offcanvas_overlay": { "type": "checkbox", "text": "Overlay the site", "enable": "dialog && !link && dialog_layout == 'offcanvas'" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "content", "icon", "link", "link_title", "link_aria_label", "dialog" ] }, { "title": "Settings", "fields": [ { "label": "Button", "type": "group", "divider": true, "fields": ["button_style"] }, { "label": "Icon", "type": "group", "divider": true, "fields": ["icon_align"] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", { "label": "Width/Height", "description": "Set the width and height for the content the link is linking to, i.e. image, video or iframe.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_focal_point" ] }, { "label": "Dialog", "type": "group", "divider": true, "fields": [ "dialog_layout", "dialog_close_large", "dialog_close_outside", "dialog_modal_width", "dialog_offcanvas_flip", "dialog_offcanvas_overlay" ] } ] }, "${builder.advancedItem}" ] } } } builder/elements/popover/updates.php000064400000011033151666572170013674 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.4' => function ($node) { unset($node->props['icon']); }, '4.0.0-beta.9' => function ($node) { if (Arr::get($node->props, 'panel_link') && Arr::get($node->props, 'css')) { $node->props['css'] = str_replace('.el-item', '.el-item > *', $node->props['css']); } }, '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '2.0.0-beta.5.1' => function ($node) { Arr::updateKeys($node->props, [ 'link_type' => function ($value) { if ($value === 'content') { return [ 'title_link' => true, 'image_link' => true, 'link_text' => '', ]; } elseif ($value === 'element') { return [ 'card_link' => true, 'link_text' => '', ]; } }, ]); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } }, '1.19.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { $node->props['meta_align'] = 'above-title'; } if (Arr::get($node->props, 'meta_align') === 'bottom') { $node->props['meta_align'] = 'below-title'; } if (Arr::get($node->props, 'link_style') === 'card') { $node->props['link_type'] = 'element'; $node->props['link_style'] = 'default'; } Arr::updateKeys($node->props, ['image_card' => 'image_card_padding']); }, '1.18.10.3' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { if (!empty($node->props['meta_margin'])) { $node->props['title_margin'] = $node->props['meta_margin']; } $node->props['meta_margin'] = ''; } }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, [ 'image_inline_svg' => 'image_svg_inline', 'image_animate_svg' => 'image_svg_animate', ]); }, '1.18.0' => function ($node) { if ( !isset($node->props['meta_color']) && Arr::get($node->props, 'meta_style') === 'muted' ) { $node->props['meta_color'] = 'muted'; $node->props['meta_style'] = ''; } }, ]; builder/elements/popover/images/icon.svg000064400000000703151666572170014436 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="2" points="5,13 5,4 28,4 28,25 17,25" /> <rect width="12" height="12" fill="none" stroke="#444" stroke-width="2" x="2" y="16" /> <line fill="none" stroke="#444" stroke-width="2" x1="5" y1="22" x2="11" y2="22" /> <line fill="none" stroke="#444" stroke-width="2" x1="8" y1="19" x2="8" y2="25" /> </svg> builder/elements/popover/images/iconSmall.svg000064400000000627151666572170015434 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" points="2.5,9 2.5,1.5 18.5,1.5 18.5,16.5 10,16.5" /> <rect width="8" height="8" fill="none" stroke="#444" x="0.5" y="10.5" /> <line fill="none" stroke="#444" x1="2" y1="14.5" x2="7" y2="14.5" /> <line fill="none" stroke="#444" x1="4.5" y1="12" x2="4.5" y2="17" /> </svg> builder/elements/popover/element.json000064400000065523151666572170014057 0ustar00{ "@import": "./element.php", "name": "popover", "title": "Popover", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_title": true, "show_meta": true, "show_content": true, "show_image": true, "show_link": true, "drop_mode": "hover", "drop_position": "top-center", "card_style": "default", "title_hover_style": "reset", "title_element": "h3", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "image_card_padding": true, "image_svg_color": "emphasis", "link_text": "Read more", "link_style": "default", "margin": "default" }, "placeholder": { "children": [ { "type": "popover_item", "props": { "position_x": 20, "position_y": 50 } }, { "type": "popover_item", "props": { "position_x": 50, "position_y": 20 } }, { "type": "popover_item", "props": { "position_x": 70, "position_y": 70 } } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "background_image": { "label": "Image", "type": "image", "source": true }, "background_image_width": { "label": "Image Width", "attrs": { "placeholder": "auto" }, "enable": "background_image" }, "background_image_height": { "label": "Image Height", "attrs": { "placeholder": "auto" }, "enable": "background_image" }, "background_image_alt": { "label": "Image Alt", "source": true, "enable": "background_image" }, "content": { "label": "Items", "type": "content-items", "item": "popover_item", "media": { "type": "image", "item": { "title": "title", "image": "src" } } }, "show_title": { "label": "Display", "type": "checkbox", "text": "Show the title" }, "show_meta": { "type": "checkbox", "text": "Show the meta text" }, "show_content": { "type": "checkbox", "text": "Show the content" }, "show_image": { "type": "checkbox", "text": "Show the image" }, "show_link": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the link" }, "background_image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "background_image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly" }, "marker_color": { "label": "Color", "description": "Set light or dark color mode.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" } }, "drop_mode": { "label": "Mode", "description": "Display the popover on click or hover.", "type": "select", "options": { "Click": "click", "Hover": "hover" } }, "drop_position": { "label": "Position", "description": "Select the popover alignment to its marker. If the popover doesn't fit its container, it will flip automatically.", "type": "select", "options": { "Top": "top-center", "Bottom": "bottom-center", "Left": "left-center", "Right": "right-center" } }, "drop_width": { "label": "Width", "type": "number", "description": "Enter a width for the popover in pixels.", "attrs": { "placeholder": "300" } }, "card_style": { "label": "Style", "description": "Select a card style.", "type": "select", "options": { "Default": "default", "Primary": "primary", "Secondary": "secondary" } }, "card_link": { "label": "Link", "description": "Link the whole card if a link exists.", "type": "checkbox", "text": "Link card", "enable": "show_link" }, "card_size": { "label": "Padding", "description": "Set the padding between the card's edge and its content.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" } }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" }, "enable": "show_title" }, "title_link": { "label": "Link", "description": "Link the title if a link exists.", "type": "checkbox", "text": "Link title", "enable": "show_title && show_link" }, "title_hover_style": { "label": "Hover Style", "description": "Set the hover style for a linked title.", "type": "select", "options": { "None": "reset", "Heading Link": "heading", "Default Link": "" }, "enable": "show_title && show_link && (title_link || card_link)" }, "title_decoration": { "label": "Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "enable": "show_title" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "show_title" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "show_title" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_title" }, "title_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_title" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_meta" }, "meta_align": { "label": "Alignment", "description": "Align the meta text.", "type": "select", "options": { "Above Title": "above-title", "Below Title": "below-title", "Below Content": "below-content" }, "enable": "show_meta" }, "meta_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_meta" }, "meta_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_meta" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_content" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_content" }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_card_padding": { "label": "Padding", "description": "Attach the image to the drop's edge.", "type": "checkbox", "text": "Align image without padding", "enable": "show_image" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "show_image && !image_card_padding" }, "image_link": { "label": "Link", "description": "Link the image if a link exists.", "type": "checkbox", "text": "Link image", "enable": "show_image && show_link" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "show_image" }, "image_svg_animate": { "type": "checkbox", "text": "Animate strokes", "enable": "show_image && image_svg_inline" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image && image_svg_inline" }, "link_target": { "label": "Target", "type": "checkbox", "text": "Open in a new window", "enable": "show_link" }, "link_text": { "label": "Text", "description": "Enter the text for the link.", "enable": "show_link" }, "link_aria_label": { "label": "ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text.", "enable": "show_link" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "show_link" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-marker</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-marker", ".el-item", ".el-title", ".el-meta", ".el-content", ".el-image", ".el-link" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "background_image", { "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "name": "_background_image_dimension", "type": "grid", "width": "1-2", "fields": ["background_image_width", "background_image_height"] }, "background_image_alt", "content", "show_title", "show_meta", "show_content", "show_image", "show_link" ] }, { "title": "Settings", "fields": [ { "label": "Background Image", "type": "group", "divider": true, "fields": ["background_image_focal_point", "background_image_loading"] }, { "label": "Marker", "type": "group", "divider": true, "fields": ["marker_color", "drop_mode"] }, { "label": "Popover", "type": "group", "divider": true, "fields": [ "drop_position", "drop_width", "card_style", "card_link", "card_size" ] }, { "label": "Title", "type": "group", "divider": true, "fields": [ "title_style", "title_link", "title_hover_style", "title_decoration", "title_font_family", "title_color", "title_element", "title_margin" ] }, { "label": "Meta", "type": "group", "divider": true, "fields": [ "meta_style", "meta_color", "meta_align", "meta_element", "meta_margin" ] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_style", "content_margin"] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_card_padding", "image_border", "image_link", "image_svg_inline", "image_svg_animate", "image_svg_color" ] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", "link_text", "link_aria_label", "link_style", "link_size", "link_fullwidth", "link_margin" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } } } builder/elements/popover/element.php000064400000000542151666572170013663 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { if (empty($node->props['background_image'])) { $node->props['background_image'] = Url::to( '~yootheme/theme/assets/images/element-image-placeholder.png', ); } }, ], ]; builder/elements/popover/templates/template.php000064400000002417151666572170016046 0ustar00<?php $el = $this->el('div', [ 'class' => [ // Fix stacking context for drops if parallax is enabled 'uk-position-relative uk-position-z-index {@animation: parallax}', ], ]); $inline = $this->el('div', [ 'class' => [ 'uk-inline', 'uk-inverse-{marker_color}', ], ]); // Image $image = $this->el('image', [ 'class' => [ 'uk-text-{image_svg_color}' => $props['image_svg_inline'] && $props['image_svg_color'] && $this->isImage($props['background_image']) == 'svg', ], 'src' => $props['background_image'], 'alt' => $props['background_image_alt'], 'loading' => $props['background_image_loading'] ? false : null, 'width' => $props['background_image_width'], 'height' => $props['background_image_height'], 'focal_point' => $props['background_image_focal_point'], 'uk-svg' => $props['image_svg_inline'], 'thumbnail' => true, ]); ?> <?= $el($props, $attrs) ?> <?= $inline($props) ?> <?= $props['background_image'] ? $image($props) : '' ?> <?php foreach ($children as $child) : ?> <?= $this->render("{$__dir}/template-marker", ['child' => $child, 'props' => $child->props, 'element' => $props]) ?> <?php endforeach ?> <?= $inline->end() ?> <?= $el->end() ?> builder/elements/popover/templates/template-marker.php000064400000002400151666572170017315 0ustar00<?php // Marker $marker = $this->el('a', [ 'class' => [ 'el-marker uk-position-absolute uk-transform-center uk-preserve-width', ], 'style' => [ 'top: {0};' => (is_numeric(rtrim($props['position_y'] ?: '', '%')) ? (float) $props['position_y'] : 50) . '%', 'left: {0};' => (is_numeric(rtrim($props['position_x'] ?: '', '%')) ? (float) $props['position_x'] : 50) . '%', ], 'href' => '#', // WordPress Preview reloads if `href` is empty 'uk-marker' => true, ]); // Marker Container $marker_container = $this->el('div', [ 'class' => [ 'uk-{marker_color}', ], ]); // Drop $drop = $this->el('div', [ 'style' => [ 'width: {0}px;' => rtrim($element['drop_width'] ?: '', 'px') ?: 300, ], 'uk-drop' => [ 'pos: {0};' => $props['drop_position'] ?: $element['drop_position'], 'mode: click;' => $element['drop_mode'] == 'click', 'toggle: - * > *; {@marker_color}', 'auto-update: false;', ], ]); ?> <?php if ($element['marker_color']) : ?> <?= $marker_container($element) ?> <?php endif ?> <?= $marker($element, '') ?> <?php if ($element['marker_color']) : ?> <?= $marker_container->end() ?> <?php endif ?> <?= $drop($element, $builder->render($child)) ?> builder/elements/popover/templates/content.php000064400000000747151666572170015711 0ustar00<?php if ($props['background_image']) : ?> <img src="<?= $props['background_image'] ?>" alt="<?= $props['background_image_alt'] ?>"> <?php endif ?> <?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/slideshow_item/templates/template-link.php000064400000003524151666572170020326 0ustar00<?php $link = $props['link'] ? $this->el('a', [ 'href' => $props['link'], 'aria-label' => $props['link_aria_label'] ?: $element['link_aria_label'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; if ($link && $element['overlay_link']) { $link_container->attr($link->attrs + [ 'class' => [ 'uk-display-block', // Needs to be child of `uk-light` or `uk-dark` 'uk-link-toggle', ], ]); $props['title'] = $this->striptags($props['title']); $props['meta'] = $this->striptags($props['meta']); $props['content'] = $this->striptags($props['content']); if ($props['title'] != '' && $element['title_hover_style'] != 'reset') { $props['title'] = $this->el('span', [ 'class' => [ 'uk-link-{title_hover_style: heading}', 'uk-link {!title_hover_style}', ], ], $props['title'])->render($element); } } if ($link && $props['title'] != '' && $element['title_link']) { $props['title'] = $link($element, [], $this->striptags($props['title'])); // title_hover_style is set on title } if ($link && ($props['link_text'] || $element['link_text'])) { if ($element['overlay_link']) { $link = $this->el('div'); } $link->attr([ 'class' => [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-(muted|text)} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', // Keep link style if overlay link 'uk-link {@link_style:} {@overlay_link}', 'uk-text-muted {@link_style: link-muted} {@overlay_link}', ], 'uk-slideshow-parallax' => $this->parallaxOptions($element, 'link_'), ]); } return $link; builder/elements/slideshow_item/templates/content.php000064400000001477151666572170017237 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['video']) : ?> <?php if ($this->iframeVideo($props['video'], [], false)) : ?> <iframe src="<?= $props['video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $element['title_element'] ?>><?= $props['title'] ?></<?= $element['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a></p> <?php endif ?> builder/elements/slideshow_item/templates/template.php000064400000012534151666572170017374 0ustar00<?php // Override default settings $element['text_color'] = $props['text_color'] ?: $element['text_color']; if ($element['link']) { $props['link'] = ''; } // Item $el = $props['item_element'] ? $this->el($props['item_element']) : null; // Link Container $link_container = $props['link'] && $element['overlay_link'] ? $this->el('a', [ 'class' => [ 'uk-position-cover', ], ]) : null; // Image $props['image'] = $this->render("{$__dir}/template-media", compact('props', 'element')); // Extra effect for pull/push $opacity = $element['text_color'] === 'light' ? '0.5' : '0.2'; $pull_push = $this->el('div', [ 'class' => [ 'uk-position-cover', ], 'uk-slideshow-parallax' => $element['slideshow_animation'] == 'push' ? 'scale: 1.2,1.2,1' : 'scale: 1,1.2,1.2', ]); $pull_push_overlay = $this->el('div', [ 'class' => [ 'uk-position-cover', ], 'uk-slideshow-parallax' => $element['slideshow_animation'] == 'push' ? "opacity: 0,0,{$opacity}; backgroundColor: #000,#000" : "opacity: {$opacity},0,0; backgroundColor: #000,#000", ]); // Kenburns $kenburns_alternate = [ 'center-left', 'top-right', 'bottom-left', 'top-center', '', // center-center 'bottom-right', ]; $kenburns = $this->el('div', [ 'class' => [ 'uk-position-cover uk-animation-kenburns uk-animation-reverse', 'uk-transform-origin-{0}' => $element['slideshow_kenburns'] == 'alternate' ? $kenburns_alternate[$i % count($kenburns_alternate)] : ($element['slideshow_kenburns'] == 'center-center' ? '' : $element['slideshow_kenburns']), ], 'style' => [ '-webkit-animation-duration: {slideshow_kenburns_duration}s;', 'animation-duration: {slideshow_kenburns_duration}s;', ], ]); // Blend mode if ($props['media_blend_mode']) { if (in_array($element['slideshow_animation'], ['push', 'pull'])) { $pull_push->attr('class', ["uk-blend-{$props['media_blend_mode']}"]); } elseif ($element['slideshow_kenburns']) { $kenburns->attr('class', ["uk-blend-{$props['media_blend_mode']}"]); } } // Overlay Position $position = $this->el('div', [ 'class' => [ 'uk-position-cover uk-flex', 'uk-container {@overlay_container}', 'uk-container-{!overlay_container: |default}', 'uk-section[-{overlay_container_padding}] {@overlay_container}', 'uk-padding[-{overlay_margin}] {@!overlay_margin: none} {@!overlay_container}', ], ]); if (!$element['content_expand']) { $position->attr([ 'class' => [ 'uk-flex-top {@overlay_position: .*top.*}', 'uk-flex-bottom {@overlay_position: .*bottom.*}', 'uk-flex-left {@overlay_position: .*left.*}', 'uk-flex-right {@overlay_position: .*right.*}', 'uk-flex-center {@overlay_position: (|.*-)center}', 'uk-flex-middle {@overlay_position: center(|-.*)}', ], ]); } else { $position->attr([ 'class' => [ 'uk-flex-left {@overlay_position: .*left.*}', 'uk-flex-right {@overlay_position: .*right.*}', 'uk-flex-center {@overlay_position: center|(.*-)center}', ], ]); } // Overlay $overlay = $this->el('div', [ 'class' => [ 'el-overlay', 'uk-flex-1 {@overlay_position: top|bottom}', 'uk-panel {@!overlay_style}', 'uk-overlay uk-{overlay_style}', 'uk-padding-{overlay_padding} {@overlay_style}', 'uk-width-{overlay_width} {@!overlay_position: top|bottom}', 'uk-transition-{overlay_animation} {@!overlay_animation: |parallax}', 'uk-{text_color} {@!overlay_style}', 'uk-margin-remove-first-child', 'uk-flex uk-flex-column {@content_expand}' ], 'uk-slideshow-parallax' => $this->parallaxOptions($element, 'overlay_'), ]); // Link $link = include "{$__dir}/template-link.php"; ?> <?php if ($el) : ?> <?= $el($element) ?> <?php endif ?> <?php if ($link_container) : ?> <?= $link_container($element) ?> <?php endif ?> <?php if (in_array($element['slideshow_animation'], ['push', 'pull'])) : ?> <?= $pull_push($element) ?> <?php endif ?> <?php if ($element['slideshow_kenburns']) : ?> <?= $kenburns($element) ?> <?php endif ?> <?= $props['image'] ?> <?php if ($element['slideshow_kenburns']) : ?> <?= $kenburns->end() ?> <?php endif ?> <?php if (in_array($element['slideshow_animation'], ['push', 'pull'])) : ?> <?= $pull_push->end() ?> <?= $pull_push_overlay($element, '') ?> <?php endif ?> <?php if ($props['media_overlay']) : ?> <div class="uk-position-cover" style="background-color:<?= $props['media_overlay'] ?>"></div> <?php endif ?> <?php if ($props['title'] != '' || $props['meta'] != '' || $props['content'] != '' || $props['link']) : ?> <?= $position($element) ?> <?= $overlay($element) ?> <?= $this->render("{$__dir}/template-content", compact('props', 'link')) ?> <?= $overlay->end() ?> <?= $position->end() ?> <?php endif ?> <?php if ($link_container) : ?> <?= $link_container->end() ?> <?php endif ?> <?php if ($el) : ?> <?= $el->end() ?> <?php endif ?> builder/elements/slideshow_item/templates/template-content.php000064400000006336151666572170021047 0ustar00<?php // Title $title = $this->el($element['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-link-{title_hover_style} {@title_link}', // Set here to style links which already come with dynamic content (WP taxonomy links) 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', 'uk-flex-1 {@content_expand}' => !$props['content'] && (!$props['meta'] || $element['meta_align'] == 'above-title'), ], 'uk-slideshow-parallax' => $this->parallaxOptions($element, 'title_'), ]); // Meta $meta = $this->el($element['meta_element'], [ 'class' => [ 'el-meta', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($element['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $element['meta_element'] != 'div', 'uk-flex-1 {@content_expand}' => $element['meta_align'] == 'below-content' || (!$props['content'] && ($element['meta_align'] == 'above-content' || ($element['meta_align'] == 'below-title' ))), ], 'uk-slideshow-parallax' => $this->parallaxOptions($element, 'meta_'), ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-{content_style}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($element['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), 'uk-flex-1 {@content_expand}' => !($props['meta'] && $element['meta_align'] == 'below-content'), ], 'uk-slideshow-parallax' => $this->parallaxOptions($element, 'content_'), ]); // Link $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', ], ]); ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($element) ?> <?php if ($element['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($element['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($element, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && ($props['link_text'] || $element['link_text'])) : ?> <?= $link_container($element, $link($element, $props['link_text'] ?: $element['link_text'])) ?> <?php endif ?> builder/elements/slideshow_item/templates/template-video.php000064400000001562151666572170020477 0ustar00<?php if ($iframe = $this->iframeVideo($src)) { $video = $this->el('iframe', [ 'src' => $iframe, 'loading' => $element['image_loading'] && $i === 0 ? 'lazy' : null, 'title' => $props['video_title'], 'class' => [ 'uk-disabled', ], 'uk-video' => [ 'automute: true;', ], ]); } else { $video = $this->el('video', [ 'src' => $src, 'controls' => false, 'loop' => true, 'autoplay' => true, 'muted' => true, 'playsinline' => true, 'preload' => $element['image_loading'] && $i === 0 ? 'none' : null, 'uk-video' => true, 'class' => [ 'uk-object-{0}' => $focal, ], ]); } $video->attr([ 'width' => $element['image_width'], 'height' => $element['image_height'], ]); return $video; builder/elements/slideshow_item/templates/template-image.php000064400000000477151666572170020457 0ustar00<?php $image = $this->el('image', [ 'src' => $src, 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] && $i === 0 ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $focal, 'thumbnail' => true, ]); return $image; builder/elements/slideshow_item/templates/template-media.php000064400000001125151666572170020443 0ustar00<?php if ($props['video']) { $src = $props['video']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-video.php"; } elseif ($props['image']) { $src = $props['image']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-image.php"; } else { return; } // Media $media->attr([ 'class' => [ 'el-image', 'uk-blend-{0} {@!slideshow_animation: push|pull} {@!slideshow_kenburns}' => $props['media_blend_mode'], ], 'uk-cover' => true, 'uk-video' => false, ]); ?> <?= $media($element, '') ?> builder/elements/slideshow_item/element.php000064400000002102151666572170015202 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['title', 'meta', 'content', 'link', 'thumbnail'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; } } /** * Auto-correct media rendering for dynamic content * * @var View $view */ $view = app(View::class); if ($node->props['image'] && $view->isVideo($node->props['image'])) { $node->props['video'] = $node->props["image"]; $node->props['image'] = null; } elseif ($node->props['video'] && $view->isImage($node->props['video'])) { $node->props['image'] = $node->props['video']; $node->props['video'] = null; } // Don't render element if content fields are empty return $node->props['image'] || $node->props['video']; }, ], ]; builder/elements/slideshow_item/updates.php000064400000000340151666572170015220 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'image') && Arr::get($node->props, 'video')) { unset($node->props['video']); } }, ]; builder/elements/slideshow_item/element.json000064400000017327151666572170015403 0ustar00{ "@import": "./element.php", "name": "slideshow_item", "title": "Item", "width": 500, "placeholder": { "props": { "image": "${url:~yootheme/theme/assets/images/element-image-placeholder.png}", "video": "", "title": "", "meta": "", "content": "", "thumbnail": "" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "image": { "label": "Image", "type": "image", "source": true, "show": "!video", "altRef": "%name%_alt" }, "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true, "show": "!image" }, "_media": { "type": "button-panel", "panel": "builder-slideshow-item-media", "text": "Edit Settings", "show": "image || video" }, "video_title": { "label": "Video Title", "source": true, "show": "video && $match(video, '(youtube\\.com|youtube-nocookie\\.com|youtu\\.be|vimeo\\.com)', 'i')" }, "image_alt": { "label": "Image Alt", "source": true, "show": "image && !video" }, "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item.", "source": true, "enable": "link" }, "thumbnail": { "label": "Navigation Thumbnail", "description": "This option is only used if the thumbnail navigation is set.", "type": "image", "source": true }, "text_color": { "label": "Text Color", "description": "Set a different text color for this item.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true }, "item_element": "${builder.html_element_item}", "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "thumbnail_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "thumbnail" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "image", "video", "_media", "image_alt", "title", "meta", "content", "link", "link_text", "link_aria_label", "thumbnail" ] }, { "title": "Settings", "fields": [ { "label": "Item", "type": "group", "divider": true, "fields": ["text_color", "item_element"] }, { "label": "Image", "type": "group", "divider": true, "fields": ["image_focal_point"] }, { "label": "Thumbnail", "type": "group", "fields": ["thumbnail_focal_point"] } ] }, "${builder.advancedItem}" ] } }, "panels": { "builder-slideshow-item-media": { "title": "Image/Video", "width": 500, "fields": { "media_background": { "label": "Background Color", "description": "Use the background color in combination with blend modes.", "type": "color" }, "media_blend_mode": { "label": "Blend Mode", "description": "Determine how the image or video will blend with the background color.", "type": "select", "options": { "Normal": "", "Multiply": "multiply", "Screen": "screen", "Overlay": "overlay", "Darken": "darken", "Lighten": "lighten", "Color-dodge": "color-dodge", "Color-burn": "color-burn", "Hard-light": "hard-light", "Soft-light": "soft-light", "Difference": "difference", "Exclusion": "exclusion", "Hue": "hue", "Saturation": "saturation", "Color": "color", "Luminosity": "luminosity" }, "enable": "media_background" }, "media_overlay": { "label": "Overlay Color", "description": "Set an additional transparent overlay to soften the image or video.", "type": "color" } }, "fieldset": { "default": { "fields": ["media_background", "media_blend_mode", "media_overlay"] } } } } } builder/elements/map/updates.php000064400000003001151666572170012753 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset($node->props['width_max']); }, '4.3.0-beta.0.5' => function ($node, $params) { if ($height = Arr::get($node->props, 'viewport_height')) { if ($height === 'full' || $height === 'percent') { $node->props['viewport_height'] = 'viewport'; } if ($height === 'percent') { $node->props['viewport_height_viewport'] = 80; } if ( ($params['updateContext']['sectionIndex'] ?? 0) < 2 && empty($params['updateContext']['height']) ) { $node->props['viewport_height_offset_top'] = true; } $params['updateContext']['height'] = true; } }, '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.18.0' => function ($node) { if ( !isset($node->props['width_breakpoint']) && Arr::get($node->props, 'width_max') === false ) { $node->props['width_breakpoint'] = true; } }, ]; builder/elements/map/element.json000064400000106731151666572170013137 0ustar00{ "@import": "./element.php", "name": "map", "title": "Map", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_title": true, "show_meta": true, "show_content": true, "show_image": true, "show_link": true, "type": "roadmap", "zoom": 10, "controls": true, "poi": false, "zooming": false, "dragging": false, "min_zoom": 0, "max_zoom": 18, "title_hover_style": "reset", "title_element": "h3", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "image_svg_color": "emphasis", "link_text": "Read more", "link_style": "default", "margin": "default" }, "placeholder": { "children": [{ "type": "list_item", "props": {} }] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "title": "title", "button": "Add Item", "item": "map_item" }, "show_title": { "label": "Display", "type": "checkbox", "text": "Show the title" }, "show_meta": { "type": "checkbox", "text": "Show the meta text" }, "show_content": { "type": "checkbox", "text": "Show the content" }, "show_image": { "type": "checkbox", "text": "Show the image" }, "show_link": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the link" }, "marker_icon": { "label": "Marker Icon", "type": "image" }, "marker_icon_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "marker_icon" }, "marker_icon_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "marker_icon" }, "cluster_icon_1": { "label": "Cluster Icon (< 10 Markers)", "type": "image" }, "cluster_icon_1_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "cluster_icon_1" }, "cluster_icon_1_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "cluster_icon_1" }, "cluster_icon_1_text_color": { "label": "Text Color", "type": "color", "enable": "cluster_icon_1" }, "cluster_icon_2": { "label": "Cluster Icon (< 100 Markers)", "type": "image" }, "cluster_icon_2_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "cluster_icon_2" }, "cluster_icon_2_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "cluster_icon_2" }, "cluster_icon_2_text_color": { "label": "Text Color", "type": "color", "enable": "cluster_icon_2" }, "cluster_icon_3": { "label": "Cluster Icon (100+ Markers)", "type": "image" }, "cluster_icon_3_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "cluster_icon_3" }, "cluster_icon_3_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "cluster_icon_3" }, "cluster_icon_3_text_color": { "label": "Text Color", "type": "color", "enable": "cluster_icon_3" }, "type": { "label": "Type", "description": "Choose a map type.", "type": "select", "options": { "Roadmap": "roadmap", "Satellite": "satellite" } }, "zoom": { "label": "Zoom", "description": "Set the initial resolution at which to display the map. 0 is fully zoomed out and 18 is at the highest resolution zoomed in. Alternatively, set the viewport to contain the given markers.", "type": "range", "attrs": { "min": 0, "max": 18, "step": 1 }, "enable": "!fit_bounds" }, "fit_bounds": { "type": "checkbox", "text": "Fit markers" }, "controls": { "label": "Controls", "description": "Display the map controls and define whether the map can be zoomed or dragged using the mouse wheel or touch.", "type": "checkbox", "text": "Show map controls" }, "poi": { "type": "checkbox", "text": "Show points of interest", "show": "yootheme.config.google_maps_api_key" }, "zooming": { "type": "checkbox", "text": "Enable map zooming" }, "dragging": { "type": "checkbox", "text": "Enable map dragging" }, "min_zoom": { "label": "Minimum Zoom", "description": "Minimum zoom level of the map.", "type": "range", "attrs": { "min": 0, "max": 18, "step": 1 }, "enable": "zooming" }, "max_zoom": { "label": "Maximum Zoom", "description": "Maximum zoom level of the map.", "type": "range", "attrs": { "min": 0, "max": 18, "step": 1 }, "enable": "zooming" }, "viewport_height": { "type": "select", "options": { "None": "", "Viewport": "viewport", "Viewport (Subtract Next Section)": "section" } }, "viewport_height_viewport": { "type": "number", "attrs": { "placeholder": "100", "min": 0, "max": 100, "step": 10, "class": "uk-form-width-xsmall" }, "enable": "viewport_height == 'viewport'" }, "viewport_height_offset_top": { "type": "checkbox", "text": "Subtract height above", "enable": "viewport_height == 'viewport' && (viewport_height_viewport || 0) <= 100 || viewport_height == 'section'" }, "height": { "label": "Height", "description": "Set the height in pixels.", "type": "number", "enable": "!viewport_height" }, "width": { "label": "Width", "description": "Set the width in pixels. If no width is set, the map takes the full width. If both width and height are set, the map is responsive like an image. Additionally, the width can be used as a breakpoint. The map takes the full width, but below the breakpoint it will start to shrink preserving the aspect ratio.", "type": "number", "enable": "!viewport_height" }, "width_breakpoint": { "type": "checkbox", "text": "Use as breakpoint only", "enable": "width && !viewport_height" }, "text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true }, "styler_hue": { "label": "Hue", "description": "Set the hue, e.g. <i>#ff0000</i>.", "type": "color", "alpha": false, "fields": false, "saturation": false, "enable": "yootheme.config.google_maps_api_key" }, "styler_lightness": { "label": "Lightness", "description": "Set percentage change in lightness (Between -100 and 100).", "type": "range", "attrs": { "min": -100, "max": 100, "step": 1 }, "enable": "yootheme.config.google_maps_api_key" }, "styler_invert_lightness": { "type": "checkbox", "text": "Invert lightness", "enable": "yootheme.config.google_maps_api_key" }, "styler_saturation": { "label": "Saturation", "description": "Set percentage change in saturation (Between -100 and 100).", "type": "range", "attrs": { "min": -100, "max": 100, "step": 1 }, "enable": "yootheme.config.google_maps_api_key" }, "styler_gamma": { "label": "Gamma", "description": "Set percentage change in the amount of gamma correction (Between 0.01 and 10.0, where 1.0 applies no correction).", "type": "range", "attrs": { "min": 0.5, "max": 2, "step": 0.1 }, "enable": "yootheme.config.google_maps_api_key" }, "clustering": { "label": "Clustering", "type": "checkbox", "text": "Enable marker clustering" }, "popup_max_width": { "label": "Max Width", "description": "Set the maximum width.", "type": "number" }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" }, "enable": "show_title" }, "title_link": { "label": "Link", "description": "Link the title if a link exists.", "type": "checkbox", "text": "Link title", "enable": "show_title && show_link" }, "title_hover_style": { "label": "Hover Style", "description": "Set the hover style for a linked title.", "type": "select", "options": { "None": "reset", "Heading Link": "heading", "Default Link": "" }, "enable": "show_title && show_link && title_link" }, "title_decoration": { "label": "Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "enable": "show_title" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "show_title" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "show_title" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_title" }, "title_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_title" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_meta" }, "meta_align": { "label": "Alignment", "description": "Align the meta text.", "type": "select", "options": { "Above Title": "above-title", "Below Title": "below-title", "Below Content": "below-content" }, "enable": "show_meta" }, "meta_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "show_meta" }, "meta_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_meta" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_content" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_content" }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "enable": "show_image" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "show_image" }, "image_link": { "label": "Link", "description": "Link the image if a link exists.", "type": "checkbox", "text": "Link image", "enable": "show_image && show_link" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "show_image" }, "image_svg_animate": { "type": "checkbox", "text": "Animate strokes", "enable": "show_image && image_svg_inline" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image && image_svg_inline" }, "link_target": { "label": "Target", "type": "checkbox", "text": "Open in a new window", "enable": "show_link" }, "link_text": { "label": "Text", "description": "Enter the text for the link.", "enable": "show_link" }, "link_aria_label": { "label": "ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text.", "enable": "show_link" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "show_link" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "show_link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "item_text_align": { "label": "Text Alignment", "description": "Center, left and right alignment may depend on a breakpoint and require a fallback.", "type": "select", "options": { "None": "", "Left": "left", "Center": "center", "Right": "right", "Justify": "justify" } }, "item_text_align_breakpoint": { "label": "Text Alignment Breakpoint", "description": "Define the device width from which the alignment will apply.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "item_text_align && item_text_align != 'justify'" }, "item_text_align_fallback": { "label": "Text Alignment Fallback", "description": "Define an alignment fallback for device widths below the breakpoint.", "type": "select", "options": { "None": "", "Left": "left", "Center": "center", "Right": "right", "Justify": "justify" }, "enable": "item_text_align && item_text_align != 'justify' && item_text_align_breakpoint" }, "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-item", ".el-title", ".el-meta", ".el-content", ".el-image", ".el-link" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "content", "show_title", "show_meta", "show_content", "show_image", "show_link", "marker_icon", { "name": "_marker_icon_dimension", "type": "grid", "width": "1-2", "fields": ["marker_icon_width", "marker_icon_height"] }, "cluster_icon_1", { "name": "_cluster_icon_1_dimensions", "type": "grid", "width": "1-3", "fields": [ "cluster_icon_1_width", "cluster_icon_1_height", "cluster_icon_1_text_color" ] }, "cluster_icon_2", { "name": "_cluster_icon_2_dimensions", "type": "grid", "width": "1-3", "fields": [ "cluster_icon_2_width", "cluster_icon_2_height", "cluster_icon_2_text_color" ] }, "cluster_icon_3", { "name": "_cluster_icon_3_dimensions", "type": "grid", "width": "1-3", "fields": [ "cluster_icon_3_width", "cluster_icon_3_height", "cluster_icon_3_text_color" ] } ] }, { "title": "Settings", "fields": [ { "label": "Map", "type": "group", "divider": true, "fields": [ "type", "zoom", "fit_bounds", "controls", "poi", "zooming", "dragging", "min_zoom", "max_zoom", { "label": "Viewport Height", "description": "The height can adapt to the height of the viewport. <br><br>Note: Make sure no height is set in the section settings when using one of the viewport options.", "name": "_viewport_height", "type": "grid", "width": "expand,auto", "gap": "small", "fields": ["viewport_height", "viewport_height_viewport"] }, "viewport_height_offset_top", "height", "width", "width_breakpoint", "text_color" ] }, { "label": "Style", "description": "Only available for Google Maps.", "type": "group", "divider": true, "fields": [ "styler_hue", "styler_lightness", "styler_invert_lightness", "styler_saturation", "styler_gamma" ] }, { "label": "Marker", "type": "group", "divider": true, "fields": ["clustering"] }, { "label": "Popup", "type": "group", "divider": true, "fields": ["popup_max_width"] }, { "label": "Title", "type": "group", "divider": true, "fields": [ "title_style", "title_link", "title_hover_style", "title_decoration", "title_font_family", "title_color", "title_element", "title_margin" ] }, { "label": "Meta", "type": "group", "divider": true, "fields": [ "meta_style", "meta_color", "meta_align", "meta_element", "meta_margin" ] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_style", "content_margin"] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading", "image_border", "image_link", "image_svg_inline", "image_svg_animate", "image_svg_color" ] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", "link_text", "link_aria_label", "link_style", "link_size", "link_fullwidth", "link_margin" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "item_text_align", "item_text_align_breakpoint", "item_text_align_fallback", "animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } } } builder/elements/map/app/map-google.min.js000064400000010427151666572170014536 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ (function(z,I){"use strict";function W(e,n){e.src=n}const J=e=>{var n,t,i,s="The Google Maps JavaScript API",y="google",w="importLibrary",M="__ib__",l=document,T=window,u=T[y]||(T[y]={}),a=u.maps||(u.maps={}),b=new Set,m=new URLSearchParams,p=()=>n||(n=new Promise(async(f,v)=>{var S;await(t=l.createElement("script")),m.set("libraries",[...b]+"");for(i in e)m.set(i.replace(/[A-Z]/g,L=>"_"+L[0].toLowerCase()),e[i]);m.set("callback",y+".maps."+M),W(t,"https://maps.googleapis.com/maps/api/js?"+m),a[M]=f,t.onerror=()=>n=v(Error(s+" could not load.")),t.nonce=((S=l.querySelector("script[nonce]"))==null?void 0:S.nonce)||"",l.head.append(t)}));a[w]?console.warn(s+" only loads once. Ignoring:",e):a[w]=(f,...v)=>b.add(f)&&p().then(()=>a[w](f,...v))},U=e=>`The setOptions() function should only be called once. The options passed to the additional call (${JSON.stringify(e)}) will be ignored.`,Z=e=>`The google.maps.importLibrary() function is already defined, and @googlemaps/js-api-loader will use the existing function instead of overwriting it. The options passed to setOptions (${JSON.stringify(e)}) will be ignored.`,X=()=>{},j=()=>{};let P=!1;function H(e){if(P){X(U(e));return}Y(e),P=!0}async function K(e){var n,t;if(!((t=(n=window==null?void 0:window.google)==null?void 0:n.maps)!=null&&t.importLibrary))throw new Error("google.maps.importLibrary is not installed.");return await google.maps.importLibrary(e)}function Y(e){var t,i;const n=!!((i=(t=window.google)==null?void 0:t.maps)!=null&&i.importLibrary);n&&j(Z(e)),n||J(e)}async function C(e,{apiKey:n,type:t,center:i,zoom:s,fit_bounds:y,min_zoom:w,max_zoom:M,zooming:l,dragging:T,clustering:u,cluster_icons:a,controls:b,poi:m,markers:p,styler_invert_lightness:f,styler_hue:v,styler_saturation:S,styler_lightness:L,styler_gamma:q,popup_max_width:N,clustererUrl:F}){H({key:n,version:"weekly"});const[{event:Q,LatLng:E,LatLngBounds:V,Size:x,Point:k},{Map:ee,MapTypeId:te,InfoWindow:ne,StyledMapType:ie},{Marker:_},{MarkerClusterer:ae}]=await Promise.all(["core","maps","marker"].map(o=>K(o)).concat(u?import(F).then(o=>o.default):{})),c=new ee(e,{zoom:Number(s),minZoom:Number(l?w:s),maxZoom:Number(l?M:s),zoomControl:l&&b?null:!1,scrollwheel:l?null:!1,center:new E(i.lat,i.lng),mapTypeId:te[t.toUpperCase()],disableDefaultUI:!b,gestureHandling:T||l?"auto":"none",mapTypeControlOptions:{mapTypeIds:["styled_map","satellite"]}});c.getMapCapabilities=()=>({...c.mapCapabilities,isAdvancedMarkersAvailable:!1});let $;const O=new ne({maxWidth:N?parseInt(N,10):300});let A;if(u){const o={map:c};Array.isArray(a)&&(o.renderer={render({count:d,position:h}){let r;return d<10?r=a[0]:d<100?r=a[1]||a[0]:r=a[2]||a[1]||a[0],new _({position:h,icon:{url:r.url,scaledSize:r.size?new x(...r.size):null},label:{text:String(d),color:r.textColor?r.textColor:null,fontSize:"11px",fontWeight:"bold"},zIndex:Number(_.MAX_ZINDEX)+d})}}),A=new ae(o)}p==null||p.forEach(({lat:o,lng:d,content:h,show_popup:r,icon:R,iconSize:D,iconAnchor:B,title:se})=>{const g=new _({map:c,title:se,position:new E(o,d)});if(R&&g.setIcon({url:R,scaledSize:D?new x(...D):null,anchor:B?new k(...B):null}),A&&A.addMarker(g),h){const G=()=>{if(O.getMap()&&$===g){O.close();return}O.setContent(h),O.open(c,g),$=g};Q.addListener(g,"click",G),r&&G()}});const oe=new ie([{featureType:"all",elementType:"all",stylers:[{invert_lightness:f},{hue:v},{saturation:S},{lightness:L},{gamma:q}]},{featureType:"poi",stylers:[{visibility:m?"on":"off"}]}],{name:"Map"});if(c.mapTypes.set("styled_map",oe),t.toUpperCase()==="ROADMAP"&&c.setMapTypeId("styled_map"),y&&(p!=null&&p.length)){const o=new V;for(const{lat:d,lng:h}of p)o.extend(new E(d,h));c.fitBounds(o)}}z.component("Map",{connected(){var e,n,t;this.script||(this.script=I.$("script",this.$el)),this.script&&((e=this.map)!=null||(this.map=JSON.parse(this.script.textContent)),(n=this.templates)!=null||(this.templates=I.$$("template",this.$el)),(t=this.map.markers)==null||t.forEach((i,s)=>{i.content=I.html(this.templates[s]).trim(),!i.icon&&this.map.icon&&(i.icon=this.map.icon,i.iconSize=this.map.iconSize,i.iconAnchor=this.map.iconAnchor)}),this.map.lazyload&&"IntersectionObserver"in window?I.observeIntersection(this.$el,(i,s)=>{C(this.$el,this.map),s.disconnect()},{rootMargin:`${window.innerHeight/2}px 0px`}):C(this.$el,this.map))}})})(UIkit,UIkit.util); builder/elements/map/app/map-google-markerclusterer.min.js000064400000137211151666572170017747 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ var wi=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function hs(V){return V&&V.__esModule&&Object.prototype.hasOwnProperty.call(V,"default")?V.default:V}var nt={exports:{}},ps=nt.exports,bi;function ds(){return bi||(bi=1,(function(V,Ei){(function(O,H){H(Ei)})(ps,function(O){var H,Yt,Xt=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof wi<"u"?wi:typeof self<"u"?self:{},ki={};function A(){if(Yt)return H;Yt=1;var e=function(t){return t&&t.Math===Math&&t};return H=e(typeof globalThis=="object"&&globalThis)||e(typeof window=="object"&&window)||e(typeof self=="object"&&self)||e(typeof Xt=="object"&&Xt)||e(typeof H=="object"&&H)||(function(){return this})()||Function("return this")()}var Jt,Qt,tr,rr,er,nr,mt,or,gt={};function I(){return Qt?Jt:(Qt=1,Jt=function(e){try{return!!e()}catch{return!0}})}function R(){if(rr)return tr;rr=1;var e=I();return tr=!e(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})}function ot(){if(nr)return er;nr=1;var e=I();return er=!e(function(){var t=(function(){}).bind();return typeof t!="function"||t.hasOwnProperty("prototype")})}function Z(){if(or)return mt;or=1;var e=ot(),t=Function.prototype.call;return mt=e?t.bind(t):function(){return t.apply(t,arguments)},mt}var ir,sr,ar,vt,ur,cr,fr,lr,hr,pr,dr,mr,gr,vr,yr,wr,br,Er,kr,yt,xr,Mr,Or,Pr,jr,Cr,Sr,Ar,_r,Ir,Tr,Lr,qr,Rr,Zr,zr,Dr,Fr,Nr,Ur,Br,wt={};function bt(){return ar?sr:(ar=1,sr=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}})}function z(){if(ur)return vt;ur=1;var e=ot(),t=Function.prototype,r=t.call,n=e&&t.bind.bind(r,r);return vt=e?n:function(o){return function(){return r.apply(o,arguments)}},vt}function Et(){if(fr)return cr;fr=1;var e=z(),t=e({}.toString),r=e("".slice);return cr=function(n){return r(t(n),8,-1)}}function kt(){return dr?pr:(dr=1,pr=function(e){return e==null})}function $r(){if(gr)return mr;gr=1;var e=kt(),t=TypeError;return mr=function(r){if(e(r))throw new t("Can't call method on "+r);return r}}function it(){if(yr)return vr;yr=1;var e=(function(){if(hr)return lr;hr=1;var r=z(),n=I(),o=Et(),i=Object,s=r("".split);return lr=n(function(){return!i("z").propertyIsEnumerable(0)})?function(u){return o(u)==="String"?s(u,""):i(u)}:i})(),t=$r();return vr=function(r){return e(t(r))}}function S(){if(br)return wr;br=1;var e=typeof document=="object"&&document.all;return wr=e===void 0&&e!==void 0?function(t){return typeof t=="function"||t===e}:function(t){return typeof t=="function"}}function K(){if(kr)return Er;kr=1;var e=S();return Er=function(t){return typeof t=="object"?t!==null:e(t)}}function xt(){if(xr)return yt;xr=1;var e=A(),t=S();return yt=function(r,n){return arguments.length<2?(o=e[r],t(o)?o:void 0):e[r]&&e[r][n];var o},yt}function Mt(){if(Or)return Mr;Or=1;var e=z();return Mr=e({}.isPrototypeOf)}function xi(){if(Sr)return Cr;Sr=1;var e,t,r=A(),n=(function(){if(jr)return Pr;jr=1;var a=A().navigator,l=a&&a.userAgent;return Pr=l?String(l):""})(),o=r.process,i=r.Deno,s=o&&o.versions||i&&i.version,u=s&&s.v8;return u&&(t=(e=u.split("."))[0]>0&&e[0]<4?1:+(e[0]+e[1])),!t&&n&&(!(e=n.match(/Edge\/(\d+)/))||e[1]>=74)&&(e=n.match(/Chrome\/(\d+)/))&&(t=+e[1]),Cr=t}function Wr(){if(_r)return Ar;_r=1;var e=xi(),t=I(),r=A().String;return Ar=!!Object.getOwnPropertySymbols&&!t(function(){var n=Symbol("symbol detection");return!r(n)||!(Object(n)instanceof Symbol)||!Symbol.sham&&e&&e<41})}function Gr(){if(Tr)return Ir;Tr=1;var e=Wr();return Ir=e&&!Symbol.sham&&typeof Symbol.iterator=="symbol"}function Vr(){if(qr)return Lr;qr=1;var e=xt(),t=S(),r=Mt(),n=Gr(),o=Object;return Lr=n?function(i){return typeof i=="symbol"}:function(i){var s=e("Symbol");return t(s)&&r(s.prototype,o(i))}}function Ot(){if(Zr)return Rr;Zr=1;var e=String;return Rr=function(t){try{return e(t)}catch{return"Object"}}}function W(){if(Dr)return zr;Dr=1;var e=S(),t=Ot(),r=TypeError;return zr=function(n){if(e(n))return n;throw new r(t(n)+" is not a function")}}function st(){if(Nr)return Fr;Nr=1;var e=W(),t=kt();return Fr=function(r,n){var o=r[n];return t(o)?void 0:e(o)}}function Mi(){if(Br)return Ur;Br=1;var e=Z(),t=S(),r=K(),n=TypeError;return Ur=function(o,i){var s,u;if(i==="string"&&t(s=o.toString)&&!r(u=e(s,o))||t(s=o.valueOf)&&!r(u=e(s,o))||i!=="string"&&t(s=o.toString)&&!r(u=e(s,o)))return u;throw new n("Can't convert object to primitive value")}}var Hr,Kr,Yr,Xr,Jr,Qr,te,re,ee,ne,oe,ie,se,ae,ue,ce,fe,le,he,pe,de,me,ge,ve,Pt={exports:{}};function X(){return Kr?Hr:(Kr=1,Hr=!1)}function jt(){if(Xr)return Yr;Xr=1;var e=A(),t=Object.defineProperty;return Yr=function(r,n){try{t(e,r,{value:n,configurable:!0,writable:!0})}catch{e[r]=n}return n}}function Ct(){if(Jr)return Pt.exports;Jr=1;var e=X(),t=A(),r=jt(),n="__core-js_shared__",o=Pt.exports=t[n]||r(n,{});return(o.versions||(o.versions=[])).push({version:"3.44.0",mode:e?"pure":"global",copyright:"\xA9 2014-2025 Denis Pushkarev (zloirock.ru)",license:"https://github.com/zloirock/core-js/blob/v3.44.0/LICENSE",source:"https://github.com/zloirock/core-js"}),Pt.exports}function ye(){if(te)return Qr;te=1;var e=Ct();return Qr=function(t,r){return e[t]||(e[t]=r||{})}}function we(){if(ee)return re;ee=1;var e=$r(),t=Object;return re=function(r){return t(e(r))}}function D(){if(oe)return ne;oe=1;var e=z(),t=we(),r=e({}.hasOwnProperty);return ne=Object.hasOwn||function(n,o){return r(t(n),o)}}function be(){if(se)return ie;se=1;var e=z(),t=0,r=Math.random(),n=e(1.1.toString);return ie=function(o){return"Symbol("+(o===void 0?"":o)+")_"+n(++t+r,36)}}function F(){if(ue)return ae;ue=1;var e=A(),t=ye(),r=D(),n=be(),o=Wr(),i=Gr(),s=e.Symbol,u=t("wks"),a=i?s.for||s:s&&s.withoutSetter||n;return ae=function(l){return r(u,l)||(u[l]=o&&r(s,l)?s[l]:a("Symbol."+l)),u[l]}}function Oi(){if(fe)return ce;fe=1;var e=Z(),t=K(),r=Vr(),n=st(),o=Mi(),i=F(),s=TypeError,u=i("toPrimitive");return ce=function(a,l){if(!t(a)||r(a))return a;var c,f=n(a,u);if(f){if(l===void 0&&(l="default"),c=e(f,a,l),!t(c)||r(c))return c;throw new s("Can't convert object to primitive value")}return l===void 0&&(l="number"),o(a,l)}}function Ee(){if(he)return le;he=1;var e=Oi(),t=Vr();return le=function(r){var n=e(r,"string");return t(n)?n:n+""}}function ke(){if(de)return pe;de=1;var e=A(),t=K(),r=e.document,n=t(r)&&t(r.createElement);return pe=function(o){return n?r.createElement(o):{}}}function xe(){if(ge)return me;ge=1;var e=R(),t=I(),r=ke();return me=!e&&!t(function(){return Object.defineProperty(r("div"),"a",{get:function(){return 7}}).a!==7})}function Me(){if(ve)return gt;ve=1;var e=R(),t=Z(),r=(function(){if(ir)return wt;ir=1;var l={}.propertyIsEnumerable,c=Object.getOwnPropertyDescriptor,f=c&&!l.call({1:2},1);return wt.f=f?function(d){var h=c(this,d);return!!h&&h.enumerable}:l,wt})(),n=bt(),o=it(),i=Ee(),s=D(),u=xe(),a=Object.getOwnPropertyDescriptor;return gt.f=e?a:function(l,c){if(l=o(l),c=i(c),u)try{return a(l,c)}catch{}if(s(l,c))return n(!t(r.f,l,c),l[c])},gt}var Oe,Pe,je,Ce,Se,Ae,_e,St={};function Ie(){if(Pe)return Oe;Pe=1;var e=R(),t=I();return Oe=e&&t(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})}function _(){if(Ce)return je;Ce=1;var e=K(),t=String,r=TypeError;return je=function(n){if(e(n))return n;throw new r(t(n)+" is not an object")}}function Y(){if(Se)return St;Se=1;var e=R(),t=xe(),r=Ie(),n=_(),o=Ee(),i=TypeError,s=Object.defineProperty,u=Object.getOwnPropertyDescriptor,a="enumerable",l="configurable",c="writable";return St.f=e?r?function(f,d,h){if(n(f),d=o(d),n(h),typeof f=="function"&&d==="prototype"&&"value"in h&&c in h&&!h[c]){var g=u(f,d);g&&g[c]&&(f[d]=h.value,h={configurable:l in h?h[l]:g[l],enumerable:a in h?h[a]:g[a],writable:!1})}return s(f,d,h)}:s:function(f,d,h){if(n(f),d=o(d),n(h),t)try{return s(f,d,h)}catch{}if("get"in h||"set"in h)throw new i("Accessors not supported");return"value"in h&&(f[d]=h.value),f},St}function At(){if(_e)return Ae;_e=1;var e=R(),t=Y(),r=bt();return Ae=e?function(n,o,i){return t.f(n,o,r(1,i))}:function(n,o,i){return n[o]=i,n}}var Te,Le,qe,Re,Ze,ze,De,Fe,Ne,Ue,Be,$e,We,Ge,Ve,_t={exports:{}};function Pi(){if(Re)return qe;Re=1;var e=z(),t=S(),r=Ct(),n=e(Function.toString);return t(r.inspectSource)||(r.inspectSource=function(o){return n(o)}),qe=r.inspectSource}function It(){if(Fe)return De;Fe=1;var e=ye(),t=be(),r=e("keys");return De=function(n){return r[n]||(r[n]=t(n))}}function Tt(){return Ue?Ne:(Ue=1,Ne={})}function He(){if($e)return Be;$e=1;var e,t,r,n=(function(){if(ze)return Ze;ze=1;var p=A(),v=S(),y=p.WeakMap;return Ze=v(y)&&/native code/.test(String(y))})(),o=A(),i=K(),s=At(),u=D(),a=Ct(),l=It(),c=Tt(),f="Object already initialized",d=o.TypeError,h=o.WeakMap;if(n||a.state){var g=a.state||(a.state=new h);g.get=g.get,g.has=g.has,g.set=g.set,e=function(p,v){if(g.has(p))throw new d(f);return v.facade=p,g.set(p,v),v},t=function(p){return g.get(p)||{}},r=function(p){return g.has(p)}}else{var m=l("state");c[m]=!0,e=function(p,v){if(u(p,m))throw new d(f);return v.facade=p,s(p,m,v),v},t=function(p){return u(p,m)?p[m]:{}},r=function(p){return u(p,m)}}return Be={set:e,get:t,has:r,enforce:function(p){return r(p)?t(p):e(p,{})},getterFor:function(p){return function(v){var y;if(!i(v)||(y=t(v)).type!==p)throw new d("Incompatible receiver, "+p+" required");return y}}}}function Ke(){if(We)return _t.exports;We=1;var e=z(),t=I(),r=S(),n=D(),o=R(),i=(function(){if(Le)return Te;Le=1;var y=R(),k=D(),b=Function.prototype,P=y&&Object.getOwnPropertyDescriptor,M=k(b,"name"),w=M&&(function(){}).name==="something",E=M&&(!y||y&&P(b,"name").configurable);return Te={EXISTS:M,PROPER:w,CONFIGURABLE:E}})().CONFIGURABLE,s=Pi(),u=He(),a=u.enforce,l=u.get,c=String,f=Object.defineProperty,d=e("".slice),h=e("".replace),g=e([].join),m=o&&!t(function(){return f(function(){},"length",{value:8}).length!==8}),p=String(String).split("String"),v=_t.exports=function(y,k,b){d(c(k),0,7)==="Symbol("&&(k="["+h(c(k),/^Symbol\(([^)]*)\).*$/,"$1")+"]"),b&&b.getter&&(k="get "+k),b&&b.setter&&(k="set "+k),(!n(y,"name")||i&&y.name!==k)&&(o?f(y,"name",{value:k,configurable:!0}):y.name=k),m&&b&&n(b,"arity")&&y.length!==b.arity&&f(y,"length",{value:b.arity});try{b&&n(b,"constructor")&&b.constructor?o&&f(y,"prototype",{writable:!1}):y.prototype&&(y.prototype=void 0)}catch{}var P=a(y);return n(P,"source")||(P.source=g(p,typeof k=="string"?k:"")),y};return Function.prototype.toString=v(function(){return r(this)&&l(this).source||s(this)},"toString"),_t.exports}function Lt(){if(Ve)return Ge;Ve=1;var e=S(),t=Y(),r=Ke(),n=jt();return Ge=function(o,i,s,u){u||(u={});var a=u.enumerable,l=u.name!==void 0?u.name:i;if(e(s)&&r(s,l,u),u.global)a?o[i]=s:n(i,s);else{try{u.unsafe?o[i]&&(a=!0):delete o[i]}catch{}a?o[i]=s:t.f(o,i,{value:s,enumerable:!1,configurable:!u.nonConfigurable,writable:!u.nonWritable})}return o}}var Ye,Xe,Je,Qe,tn,rn,en,nn,on,sn,an,un,cn,fn,ln,hn,pn,qt={};function dn(){if(Qe)return Je;Qe=1;var e=(function(){if(Xe)return Ye;Xe=1;var t=Math.ceil,r=Math.floor;return Ye=Math.trunc||function(n){var o=+n;return(o>0?r:t)(o)}})();return Je=function(t){var r=+t;return r!=r||r===0?0:e(r)}}function ji(){if(rn)return tn;rn=1;var e=dn(),t=Math.max,r=Math.min;return tn=function(n,o){var i=e(n);return i<0?t(i+o,0):r(i,o)}}function Ci(){if(nn)return en;nn=1;var e=dn(),t=Math.min;return en=function(r){var n=e(r);return n>0?t(n,9007199254740991):0}}function mn(){if(sn)return on;sn=1;var e=Ci();return on=function(t){return e(t.length)}}function gn(){if(fn)return cn;fn=1;var e=z(),t=D(),r=it(),n=(function(){if(un)return an;un=1;var s=it(),u=ji(),a=mn(),l=function(c){return function(f,d,h){var g=s(f),m=a(g);if(m===0)return!c&&-1;var p,v=u(h,m);if(c&&d!=d){for(;m>v;)if((p=g[v++])!=p)return!0}else for(;m>v;v++)if((c||v in g)&&g[v]===d)return c||v||0;return!c&&-1}};return an={includes:l(!0),indexOf:l(!1)}})().indexOf,o=Tt(),i=e([].push);return cn=function(s,u){var a,l=r(s),c=0,f=[];for(a in l)!t(o,a)&&t(l,a)&&i(f,a);for(;u.length>c;)t(l,a=u[c++])&&(~n(f,a)||i(f,a));return f}}function Rt(){return hn?ln:(hn=1,ln=["constructor","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","toLocaleString","toString","valueOf"])}var vn,Zt,yn,zt,wn,bn,En,kn,xn,Mn,On,Pn,jn,Cn,Sn,An,_n,In,Tn,Ln={};function Si(){if(yn)return Zt;yn=1;var e=xt(),t=z(),r=(function(){if(pn)return qt;pn=1;var s=gn(),u=Rt().concat("length","prototype");return qt.f=Object.getOwnPropertyNames||function(a){return s(a,u)},qt})(),n=(vn||(vn=1,Ln.f=Object.getOwnPropertySymbols),Ln),o=_(),i=t([].concat);return Zt=e("Reflect","ownKeys")||function(s){var u=r.f(o(s)),a=n.f;return a?i(u,a(s)):u},Zt}function Ai(){if(wn)return zt;wn=1;var e=D(),t=Si(),r=Me(),n=Y();return zt=function(o,i,s){for(var u=t(i),a=n.f,l=r.f,c=0;c<u.length;c++){var f=u[c];e(o,f)||s&&e(s,f)||a(o,f,l(i,f))}},zt}function J(){if(xn)return kn;xn=1;var e=A(),t=Me().f,r=At(),n=Lt(),o=jt(),i=Ai(),s=(function(){if(En)return bn;En=1;var u=I(),a=S(),l=/#|\.prototype\./,c=function(m,p){var v=d[f(m)];return v===g||v!==h&&(a(p)?u(p):!!p)},f=c.normalize=function(m){return String(m).replace(l,".").toLowerCase()},d=c.data={},h=c.NATIVE="N",g=c.POLYFILL="P";return bn=c})();return kn=function(u,a){var l,c,f,d,h,g=u.target,m=u.global,p=u.stat;if(l=m?e:p?e[g]||o(g,{}):e[g]&&e[g].prototype)for(c in a){if(d=a[c],f=u.dontCallGetSet?(h=t(l,c))&&h.value:l[c],!s(m?c:g+(p?".":"#")+c,u.forced)&&f!==void 0){if(typeof d==typeof f)continue;i(d,f)}(u.sham||f&&f.sham)&&r(d,"sham",!0),n(l,c,d,u)}}}function _i(){if(On)return Mn;On=1;var e=Mt(),t=TypeError;return Mn=function(r,n){if(e(n,r))return r;throw new t("Incorrect invocation")}}function qn(){if(Sn)return Cn;Sn=1;var e=D(),t=S(),r=we(),n=It(),o=(function(){if(jn)return Pn;jn=1;var a=I();return Pn=!a(function(){function l(){}return l.prototype.constructor=null,Object.getPrototypeOf(new l)!==l.prototype})})(),i=n("IE_PROTO"),s=Object,u=s.prototype;return Cn=o?s.getPrototypeOf:function(a){var l=r(a);if(e(l,i))return l[i];var c=l.constructor;return t(c)&&l instanceof c?c.prototype:l instanceof s?u:null}}function Ii(){if(_n)return An;_n=1;var e=Ke(),t=Y();return An=function(r,n,o){return o.get&&e(o.get,n,{getter:!0}),o.set&&e(o.set,n,{setter:!0}),t.f(r,n,o)}}function Ti(){if(Tn)return In;Tn=1;var e=R(),t=Y(),r=bt();return In=function(n,o,i){e?t.f(n,o,r(0,i)):n[o]=i}}var Rn,Zn,zn,Dn,Fn,Nn,Un,Bn,$n,Wn,Gn,Dt={};function Li(){if(Zn)return Rn;Zn=1;var e=gn(),t=Rt();return Rn=Object.keys||function(r){return e(r,t)}}function qi(){if(Fn)return Dn;Fn=1;var e=xt();return Dn=e("document","documentElement")}function Vn(){if(Un)return Nn;Un=1;var e,t=_(),r=(function(){if(zn)return Dt;zn=1;var m=R(),p=Ie(),v=Y(),y=_(),k=it(),b=Li();return Dt.f=m&&!p?Object.defineProperties:function(P,M){y(P);for(var w,E=k(M),x=b(M),$=x.length,L=0;$>L;)v.f(P,w=x[L++],E[w]);return P},Dt})(),n=Rt(),o=Tt(),i=qi(),s=ke(),u=It(),a="prototype",l="script",c=u("IE_PROTO"),f=function(){},d=function(m){return"<"+l+">"+m+"</"+l+">"},h=function(m){m.write(d("")),m.close();var p=m.parentWindow.Object;return m=null,p},g=function(){try{e=new ActiveXObject("htmlfile")}catch{}var m,p,v;g=typeof document<"u"?document.domain&&e?h(e):(p=s("iframe"),v="java"+l+":",p.style.display="none",i.appendChild(p),p.src=String(v),(m=p.contentWindow.document).open(),m.write(d("document.F=Object")),m.close(),m.F):h(e);for(var y=n.length;y--;)delete g[a][n[y]];return g()};return o[c]=!0,Nn=Object.create||function(m,p){var v;return m!==null?(f[a]=t(m),v=new f,f[a]=null,v[c]=m):v=g(),p===void 0?v:r.f(v,p)}}function Hn(){if($n)return Bn;$n=1;var e,t,r,n=I(),o=S(),i=K(),s=Vn(),u=qn(),a=Lt(),l=F(),c=X(),f=l("iterator"),d=!1;return[].keys&&("next"in(r=[].keys())?(t=u(u(r)))!==Object.prototype&&(e=t):d=!0),!i(e)||n(function(){var h={};return e[f].call(h)!==h})?e={}:c&&(e=s(e)),o(e[f])||a(e,f,function(){return this}),Bn={IteratorPrototype:e,BUGGY_SAFARI_ITERATORS:d}}Gn||(Gn=1,(function(){if(Wn)return ki;Wn=1;var e=J(),t=A(),r=_i(),n=_(),o=S(),i=qn(),s=Ii(),u=Ti(),a=I(),l=D(),c=F(),f=Hn().IteratorPrototype,d=R(),h=X(),g="constructor",m="Iterator",p=c("toStringTag"),v=TypeError,y=t[m],k=h||!o(y)||y.prototype!==f||!a(function(){y({})}),b=function(){if(r(this,f),i(this)===f)throw new v("Abstract class Iterator not directly constructable")},P=function(M,w){d?s(f,M,{configurable:!0,get:function(){return w},set:function(E){if(n(this),this===f)throw new v("You can't redefine this property");l(this,M)?this[M]=E:u(this,M,E)}}):f[M]=w};l(f,p)||P(p,m),!k&&l(f,g)&&f[g]!==Object||P(g,b),b.prototype=f,e({global:!0,constructor:!0,forced:k},{Iterator:b})})());var Kn,Yn,Xn,Jn,Qn,to,ro,eo,no,oo,io,so,ao,uo,co,fo,lo,ho,po,mo,Ri={};function at(){return Yn?Kn:(Yn=1,Kn=function(e){return{iterator:e,next:e.next,done:!1}})}function Zi(){if(Jn)return Xn;Jn=1;var e=Lt();return Xn=function(t,r,n){for(var o in r)e(t,o,r[o],n);return t}}function zi(){return to?Qn:(to=1,Qn=function(e,t){return{value:e,done:t}})}function N(){if(eo)return ro;eo=1;var e=Z(),t=_(),r=st();return ro=function(n,o,i){var s,u;t(n);try{if(!(s=r(n,"return"))){if(o==="throw")throw i;return i}s=e(s,n)}catch(a){u=!0,s=a}if(o==="throw")throw i;if(u)throw s;return t(s),i}}function Di(){if(oo)return no;oo=1;var e=N();return no=function(t,r,n){for(var o=t.length-1;o>=0;o--)if(t[o]!==void 0)try{n=e(t[o].iterator,r,n)}catch(i){r="throw",n=i}if(r==="throw")throw n;return n}}function go(){if(so)return io;so=1;var e=Z(),t=Vn(),r=At(),n=Zi(),o=F(),i=He(),s=st(),u=Hn().IteratorPrototype,a=zi(),l=N(),c=Di(),f=o("toStringTag"),d="IteratorHelper",h="WrapForValidIterator",g="normal",m="throw",p=i.set,v=function(b){var P=i.getterFor(b?h:d);return n(t(u),{next:function(){var M=P(this);if(b)return M.nextHandler();if(M.done)return a(void 0,!0);try{var w=M.nextHandler();return M.returnHandlerResult?w:a(w,M.done)}catch(E){throw M.done=!0,E}},return:function(){var M=P(this),w=M.iterator;if(M.done=!0,b){var E=s(w,"return");return E?e(E,w):a(void 0,!0)}if(M.inner)try{l(M.inner.iterator,g)}catch(x){return l(w,m,x)}if(M.openIters)try{c(M.openIters,g)}catch(x){return l(w,m,x)}return w&&l(w,g),a(void 0,!0)}})},y=v(!0),k=v(!1);return r(k,f,"Iterator Helper"),io=function(b,P,M){var w=function(E,x){x?(x.iterator=E.iterator,x.next=E.next):x=E,x.type=P?h:d,x.returnHandlerResult=!!M,x.nextHandler=b,x.counter=0,x.done=!1,p(this,x)};return w.prototype=P?y:k,w}}function vo(){if(uo)return ao;uo=1;var e=_(),t=N();return ao=function(r,n,o,i){try{return i?n(e(o)[0],o[1]):n(o)}catch(s){t(r,"throw",s)}}}function yo(){return fo?co:(fo=1,co=function(e,t){var r=typeof Iterator=="function"&&Iterator.prototype[e];if(r)try{r.call({next:null},t).next()}catch{return!0}})}function ut(){if(ho)return lo;ho=1;var e=A();return lo=function(t,r){var n=e.Iterator,o=n&&n.prototype,i=o&&o[t],s=!1;if(i)try{i.call({next:function(){return{done:!0}},return:function(){s=!0}},-1)}catch(u){u instanceof r||(s=!1)}if(!s)return i}}function Q(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function"){var o=0;for(n=Object.getOwnPropertySymbols(e);o<n.length;o++)t.indexOf(n[o])<0&&Object.prototype.propertyIsEnumerable.call(e,n[o])&&(r[n[o]]=e[n[o]])}return r}mo||(mo=1,(function(){if(po)return Ri;po=1;var e=J(),t=Z(),r=W(),n=_(),o=at(),i=go(),s=vo(),u=N(),a=yo(),l=ut(),c=X(),f=!c&&!a("map",function(){}),d=!c&&!f&&l("map",TypeError),h=c||f||d,g=i(function(){var m=this.iterator,p=n(t(this.next,m));if(!(this.done=!!p.done))return s(m,this.mapper,[p.value,this.counter++],!0)});e({target:"Iterator",proto:!0,real:!0,forced:h},{map:function(m){n(this);try{r(m)}catch(p){u(this,"throw",p)}return d?t(d,this,m):new g(o(this),{mapper:m})}})})()),typeof SuppressedError=="function"&&SuppressedError;var wo,bo,Fi={};bo||(bo=1,(function(){if(wo)return Fi;wo=1;var e=J(),t=Z(),r=W(),n=_(),o=at(),i=go(),s=vo(),u=X(),a=N(),l=yo(),c=ut(),f=!u&&!l("filter",function(){}),d=!u&&!f&&c("filter",TypeError),h=u||f||d,g=i(function(){for(var m,p,v=this.iterator,y=this.predicate,k=this.next;;){if(m=n(t(k,v)),this.done=!!m.done)return;if(p=m.value,s(v,y,[p,this.counter++],!0))return p}});e({target:"Iterator",proto:!0,real:!0,forced:h},{filter:function(m){n(this);try{r(m)}catch(p){a(this,"throw",p)}return d?t(d,this,m):new g(o(this),{predicate:m})}})})());class j{static isAdvancedMarkerAvailable(t){return google.maps.marker&&t.getMapCapabilities().isAdvancedMarkersAvailable===!0}static isAdvancedMarker(t){return google.maps.marker&&t instanceof google.maps.marker.AdvancedMarkerElement}static setMap(t,r){this.isAdvancedMarker(t)?t.map=r:t.setMap(r)}static getPosition(t){if(this.isAdvancedMarker(t)){if(t.position){if(t.position instanceof google.maps.LatLng)return t.position;if(Number.isFinite(t.position.lat)&&Number.isFinite(t.position.lng))return new google.maps.LatLng(t.position.lat,t.position.lng)}return new google.maps.LatLng(null)}return t.getPosition()}static getVisible(t){return!!this.isAdvancedMarker(t)||t.getVisible()}}class U{constructor(t){let{markers:r,position:n}=t;this.markers=[],r&&(this.markers=r),n&&(n instanceof google.maps.LatLng?this._position=n:this._position=new google.maps.LatLng(n))}get bounds(){if(this.markers.length===0&&!this._position)return;const t=new google.maps.LatLngBounds(this._position,this._position);for(const r of this.markers)t.extend(j.getPosition(r));return t}get position(){return this._position||this.bounds.getCenter()}get count(){return this.markers.filter(t=>j.getVisible(t)).length}push(t){this.markers.push(t)}delete(){this.marker&&(j.setMap(this.marker,null),this.marker=void 0),this.markers.length=0}}function T(e){if(e==null)throw Error(arguments.length>1&&arguments[1]!==void 0?arguments[1]:"assertion failed")}const Ft=(e,t,r,n)=>{const o=e.getBounds();T(o);const i=ct(o,t,n);return r.filter(s=>i.contains(j.getPosition(s)))},ct=(e,t,r)=>{const{northEast:n,southWest:o}=Ni(e,t),i=xo({northEast:n,southWest:o},r);return Mo(i,t)},Eo=(e,t,r)=>{const n=ct(e,t,r),o=n.getNorthEast(),i=n.getSouthWest();return[i.lng(),i.lat(),o.lng(),o.lat()]},ko=(e,t)=>{const r=(t.lat-e.lat)*Math.PI/180,n=(t.lng-e.lng)*Math.PI/180,o=Math.sin(r/2),i=Math.sin(n/2),s=o*o+Math.cos(e.lat*Math.PI/180)*Math.cos(t.lat*Math.PI/180)*i*i;return 6371*(2*Math.atan2(Math.sqrt(s),Math.sqrt(1-s)))},Ni=(e,t)=>{const r=t.fromLatLngToDivPixel(e.getNorthEast()),n=t.fromLatLngToDivPixel(e.getSouthWest());return T(r),T(n),{northEast:r,southWest:n}},xo=(e,t)=>{let{northEast:r,southWest:n}=e;return r.x+=t,r.y-=t,n.x-=t,n.y+=t,{northEast:r,southWest:n}},Mo=(e,t)=>{let{northEast:r,southWest:n}=e;const o=t.fromDivPixelToLatLng(n),i=t.fromDivPixelToLatLng(r);return new google.maps.LatLngBounds(o,i)};class ft{constructor(t){let{maxZoom:r=16}=t;this.maxZoom=r}noop(t){let{markers:r}=t;return Oo(r)}}class Nt extends ft{constructor(t){var{viewportPadding:r=60}=t;super(Q(t,["viewportPadding"])),this.viewportPadding=60,this.viewportPadding=r}calculate(t){let{markers:r,map:n,mapCanvasProjection:o}=t;const i=n.getZoom();return T(i),i>=this.maxZoom?{clusters:this.noop({markers:r}),changed:!1}:{clusters:this.cluster({markers:Ft(n,o,r,this.viewportPadding),map:n,mapCanvasProjection:o})}}}const Oo=e=>e.map(t=>new U({position:j.getPosition(t),markers:[t]}));var Po,jo,Ut,Co,So,Ao,_o,Io,To,Lo,qo,Ro,Zo,zo,Bt,Do,Fo,No,Uo,Bo,Ui={};function Bi(){if(Co)return Ut;Co=1;var e=(function(){if(jo)return Po;jo=1;var o=Et(),i=z();return Po=function(s){if(o(s)==="Function")return i(s)}})(),t=W(),r=ot(),n=e(e.bind);return Ut=function(o,i){return t(o),i===void 0?o:r?n(o,i):function(){return o.apply(i,arguments)}},Ut}function $o(){return Ao?So:(Ao=1,So={})}function $i(){if(Io)return _o;Io=1;var e=F(),t=$o(),r=e("iterator"),n=Array.prototype;return _o=function(o){return o!==void 0&&(t.Array===o||n[r]===o)}}function Wi(){if(Ro)return qo;Ro=1;var e=(function(){if(Lo)return To;Lo=1;var s={};return s[F()("toStringTag")]="z",To=String(s)==="[object z]"})(),t=S(),r=Et(),n=F()("toStringTag"),o=Object,i=r((function(){return arguments})())==="Arguments";return qo=e?r:function(s){var u,a,l;return s===void 0?"Undefined":s===null?"Null":typeof(a=(function(c,f){try{return c[f]}catch{}})(u=o(s),n))=="string"?a:i?r(u):(l=r(u))==="Object"&&t(u.callee)?"Arguments":l}}function Wo(){if(zo)return Zo;zo=1;var e=Wi(),t=st(),r=kt(),n=$o(),o=F()("iterator");return Zo=function(i){if(!r(i))return t(i,o)||t(i,"@@iterator")||n[e(i)]}}function Gi(){if(Do)return Bt;Do=1;var e=Z(),t=W(),r=_(),n=Ot(),o=Wo(),i=TypeError;return Bt=function(s,u){var a=arguments.length<2?o(s):u;if(t(a))return r(e(a,s));throw new i(n(s)+" is not iterable")},Bt}function Go(){if(No)return Fo;No=1;var e=Bi(),t=Z(),r=_(),n=Ot(),o=$i(),i=mn(),s=Mt(),u=Gi(),a=Wo(),l=N(),c=TypeError,f=function(h,g){this.stopped=h,this.result=g},d=f.prototype;return Fo=function(h,g,m){var p,v,y,k,b,P,M,w=m&&m.that,E=!(!m||!m.AS_ENTRIES),x=!(!m||!m.IS_RECORD),$=!(!m||!m.IS_ITERATOR),L=!(!m||!m.INTERRUPTED),C=e(g,w),vi=function(q){return p&&l(p,"normal"),new f(!0,q)},yi=function(q){return E?(r(q),L?C(q[0],q[1],vi):C(q[0],q[1])):L?C(q,vi):C(q)};if(x)p=h.iterator;else if($)p=h;else{if(!(v=a(h)))throw new c(n(h)+" is not iterable");if(o(v)){for(y=0,k=i(h);k>y;y++)if((b=yi(h[y]))&&s(d,b))return b;return new f(!1)}p=u(h,v)}for(P=x?h.next:p.next;!(M=t(P,p)).done;){try{b=yi(M.value)}catch(q){l(p,"throw",q)}if(typeof b=="object"&&b&&s(d,b))return b}return new f(!1)}}Bo||(Bo=1,(function(){if(Uo)return Ui;Uo=1;var e=J(),t=Z(),r=Go(),n=W(),o=_(),i=at(),s=N(),u=ut()("forEach",TypeError);e({target:"Iterator",proto:!0,real:!0,forced:u},{forEach:function(a){o(this);try{n(a)}catch(f){s(this,"throw",f)}if(u)return t(u,this,a);var l=i(this),c=0;r(l,function(f){a(f,c++)},{IS_RECORD:!0})}})})());var Vi=Object.getOwnPropertyNames,Hi=Object.getOwnPropertySymbols,Ki=Object.prototype.hasOwnProperty;function Vo(e,t){return function(r,n,o){return e(r,n,o)&&t(r,n,o)}}function lt(e){return function(t,r,n){if(!t||!r||typeof t!="object"||typeof r!="object")return e(t,r,n);var o=n.cache,i=o.get(t),s=o.get(r);if(i&&s)return i===r&&s===t;o.set(t,r),o.set(r,t);var u=e(t,r,n);return o.delete(t),o.delete(r),u}}function Ho(e){return Vi(e).concat(Hi(e))}var Yi=Object.hasOwn||function(e,t){return Ki.call(e,t)};function G(e,t){return e===t||!e&&!t&&e!=e&&t!=t}var Ko=Object.getOwnPropertyDescriptor,Yo=Object.keys;function Xi(e,t,r){var n=e.length;if(t.length!==n)return!1;for(;n-- >0;)if(!r.equals(e[n],t[n],n,n,e,t,r))return!1;return!0}function Ji(e,t){return G(e.getTime(),t.getTime())}function Qi(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function ts(e,t){return e===t}function Xo(e,t,r){var n=e.size;if(n!==t.size)return!1;if(!n)return!0;for(var o,i,s=new Array(n),u=e.entries(),a=0;(o=u.next())&&!o.done;){for(var l=t.entries(),c=!1,f=0;(i=l.next())&&!i.done;)if(s[f])f++;else{var d=o.value,h=i.value;if(r.equals(d[0],h[0],a,f,e,t,r)&&r.equals(d[1],h[1],d[0],h[0],e,t,r)){c=s[f]=!0;break}f++}if(!c)return!1;a++}return!0}var rs=G;function es(e,t,r){var n=Yo(e),o=n.length;if(Yo(t).length!==o)return!1;for(;o-- >0;)if(!Qo(e,t,r,n[o]))return!1;return!0}function tt(e,t,r){var n,o,i,s=Ho(e),u=s.length;if(Ho(t).length!==u)return!1;for(;u-- >0;)if(!Qo(e,t,r,n=s[u])||(o=Ko(e,n),i=Ko(t,n),(o||i)&&(!o||!i||o.configurable!==i.configurable||o.enumerable!==i.enumerable||o.writable!==i.writable)))return!1;return!0}function ns(e,t){return G(e.valueOf(),t.valueOf())}function os(e,t){return e.source===t.source&&e.flags===t.flags}function Jo(e,t,r){var n=e.size;if(n!==t.size)return!1;if(!n)return!0;for(var o,i,s=new Array(n),u=e.values();(o=u.next())&&!o.done;){for(var a=t.values(),l=!1,c=0;(i=a.next())&&!i.done;){if(!s[c]&&r.equals(o.value,i.value,o.value,i.value,e,t,r)){l=s[c]=!0;break}c++}if(!l)return!1}return!0}function is(e,t){var r=e.length;if(t.length!==r)return!1;for(;r-- >0;)if(e[r]!==t[r])return!1;return!0}function ss(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function Qo(e,t,r,n){return!(n!=="_owner"&&n!=="__o"&&n!=="__v"||!e.$$typeof&&!t.$$typeof)||Yi(t,n)&&r.equals(e[n],t[n],n,n,e,t,r)}var as=Array.isArray,ti=typeof ArrayBuffer=="function"&&ArrayBuffer.isView?ArrayBuffer.isView:null,ri=Object.assign,us=Object.prototype.toString.call.bind(Object.prototype.toString),rt=B();function B(e){e===void 0&&(e={});var t,r=e.circular,n=r!==void 0&&r,o=e.createInternalComparator,i=e.createState,s=e.strict,u=s!==void 0&&s,a=(function(c){var f=c.circular,d=c.createCustomConfig,h=c.strict,g={areArraysEqual:h?tt:Xi,areDatesEqual:Ji,areErrorsEqual:Qi,areFunctionsEqual:ts,areMapsEqual:h?Vo(Xo,tt):Xo,areNumbersEqual:rs,areObjectsEqual:h?tt:es,arePrimitiveWrappersEqual:ns,areRegExpsEqual:os,areSetsEqual:h?Vo(Jo,tt):Jo,areTypedArraysEqual:h?tt:is,areUrlsEqual:ss};if(d&&(g=ri({},g,d(g))),f){var m=lt(g.areArraysEqual),p=lt(g.areMapsEqual),v=lt(g.areObjectsEqual),y=lt(g.areSetsEqual);g=ri({},g,{areArraysEqual:m,areMapsEqual:p,areObjectsEqual:v,areSetsEqual:y})}return g})(e),l=(function(c){var f=c.areArraysEqual,d=c.areDatesEqual,h=c.areErrorsEqual,g=c.areFunctionsEqual,m=c.areMapsEqual,p=c.areNumbersEqual,v=c.areObjectsEqual,y=c.arePrimitiveWrappersEqual,k=c.areRegExpsEqual,b=c.areSetsEqual,P=c.areTypedArraysEqual,M=c.areUrlsEqual;return function(w,E,x){if(w===E)return!0;if(w==null||E==null)return!1;var $=typeof w;if($!==typeof E)return!1;if($!=="object")return $==="number"?p(w,E,x):$==="function"&&g(w,E,x);var L=w.constructor;if(L!==E.constructor)return!1;if(L===Object)return v(w,E,x);if(as(w))return f(w,E,x);if(ti!=null&&ti(w))return P(w,E,x);if(L===Date)return d(w,E,x);if(L===RegExp)return k(w,E,x);if(L===Map)return m(w,E,x);if(L===Set)return b(w,E,x);var C=us(w);return C==="[object Date]"?d(w,E,x):C==="[object RegExp]"?k(w,E,x):C==="[object Map]"?m(w,E,x):C==="[object Set]"?b(w,E,x):C==="[object Object]"?typeof w.then!="function"&&typeof E.then!="function"&&v(w,E,x):C==="[object URL]"?M(w,E,x):C==="[object Error]"?h(w,E,x):C==="[object Arguments]"?v(w,E,x):(C==="[object Boolean]"||C==="[object Number]"||C==="[object String]")&&y(w,E,x)}})(a);return(function(c){var f=c.circular,d=c.comparator,h=c.createState,g=c.equals,m=c.strict;if(h)return function(v,y){var k=h(),b=k.cache,P=b===void 0?f?new WeakMap:void 0:b,M=k.meta;return d(v,y,{cache:P,equals:g,meta:M,strict:m})};if(f)return function(v,y){return d(v,y,{cache:new WeakMap,equals:g,meta:void 0,strict:m})};var p={cache:void 0,equals:g,meta:void 0,strict:m};return function(v,y){return d(v,y,p)}})({circular:n,comparator:l,createState:i,equals:o?o(l):(t=l,function(c,f,d,h,g,m,p){return t(c,f,p)}),strict:u})}B({strict:!0}),B({circular:!0}),B({circular:!0,strict:!0}),B({createInternalComparator:function(){return G}}),B({strict:!0,createInternalComparator:function(){return G}}),B({circular:!0,createInternalComparator:function(){return G}}),B({circular:!0,createInternalComparator:function(){return G},strict:!0});const ei=[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];class $t{static from(t){if(!(t instanceof ArrayBuffer))throw new Error("Data must be an instance of ArrayBuffer.");const[r,n]=new Uint8Array(t,0,2);if(r!==219)throw new Error("Data does not appear to be in a KDBush format.");const o=n>>4;if(o!==1)throw new Error(`Got v${o} data when expected v1.`);const i=ei[15&n];if(!i)throw new Error("Unrecognized array type.");const[s]=new Uint16Array(t,2,1),[u]=new Uint32Array(t,4,1);return new $t(u,s,i,t)}constructor(t,r=64,n=Float64Array,o){if(isNaN(t)||t<0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems=+t,this.nodeSize=Math.min(Math.max(+r,2),65535),this.ArrayType=n,this.IndexArrayType=t<65536?Uint16Array:Uint32Array;const i=ei.indexOf(this.ArrayType),s=2*t*this.ArrayType.BYTES_PER_ELEMENT,u=t*this.IndexArrayType.BYTES_PER_ELEMENT,a=(8-u%8)%8;if(i<0)throw new Error(`Unexpected typed array class: ${n}.`);o&&o instanceof ArrayBuffer?(this.data=o,this.ids=new this.IndexArrayType(this.data,8,t),this.coords=new this.ArrayType(this.data,8+u+a,2*t),this._pos=2*t,this._finished=!0):(this.data=new ArrayBuffer(8+s+u+a),this.ids=new this.IndexArrayType(this.data,8,t),this.coords=new this.ArrayType(this.data,8+u+a,2*t),this._pos=0,this._finished=!1,new Uint8Array(this.data,0,2).set([219,16+i]),new Uint16Array(this.data,2,1)[0]=r,new Uint32Array(this.data,4,1)[0]=t)}add(t,r){const n=this._pos>>1;return this.ids[n]=n,this.coords[this._pos++]=t,this.coords[this._pos++]=r,n}finish(){const t=this._pos>>1;if(t!==this.numItems)throw new Error(`Added ${t} items when expected ${this.numItems}.`);return Wt(this.ids,this.coords,this.nodeSize,0,this.numItems-1,0),this._finished=!0,this}range(t,r,n,o){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:i,coords:s,nodeSize:u}=this,a=[0,i.length-1,0],l=[];for(;a.length;){const c=a.pop()||0,f=a.pop()||0,d=a.pop()||0;if(f-d<=u){for(let p=d;p<=f;p++){const v=s[2*p],y=s[2*p+1];v>=t&&v<=n&&y>=r&&y<=o&&l.push(i[p])}continue}const h=d+f>>1,g=s[2*h],m=s[2*h+1];g>=t&&g<=n&&m>=r&&m<=o&&l.push(i[h]),(c===0?t<=g:r<=m)&&(a.push(d),a.push(h-1),a.push(1-c)),(c===0?n>=g:o>=m)&&(a.push(h+1),a.push(f),a.push(1-c))}return l}within(t,r,n){if(!this._finished)throw new Error("Data not yet indexed - call index.finish().");const{ids:o,coords:i,nodeSize:s}=this,u=[0,o.length-1,0],a=[],l=n*n;for(;u.length;){const c=u.pop()||0,f=u.pop()||0,d=u.pop()||0;if(f-d<=s){for(let p=d;p<=f;p++)oi(i[2*p],i[2*p+1],t,r)<=l&&a.push(o[p]);continue}const h=d+f>>1,g=i[2*h],m=i[2*h+1];oi(g,m,t,r)<=l&&a.push(o[h]),(c===0?t-n<=g:r-n<=m)&&(u.push(d),u.push(h-1),u.push(1-c)),(c===0?t+n>=g:r+n>=m)&&(u.push(h+1),u.push(f),u.push(1-c))}return a}}function Wt(e,t,r,n,o,i){if(o-n<=r)return;const s=n+o>>1;ni(e,t,s,n,o,i),Wt(e,t,r,n,s-1,1-i),Wt(e,t,r,s+1,o,1-i)}function ni(e,t,r,n,o,i){for(;o>n;){if(o-n>600){const l=o-n+1,c=r-n+1,f=Math.log(l),d=.5*Math.exp(2*f/3),h=.5*Math.sqrt(f*d*(l-d)/l)*(c-l/2<0?-1:1);ni(e,t,r,Math.max(n,Math.floor(r-c*d/l+h)),Math.min(o,Math.floor(r+(l-c)*d/l+h)),i)}const s=t[2*r+i];let u=n,a=o;for(et(e,t,n,r),t[2*o+i]>s&&et(e,t,n,o);u<a;){for(et(e,t,u,a),u++,a--;t[2*u+i]<s;)u++;for(;t[2*a+i]>s;)a--}t[2*n+i]===s?et(e,t,n,a):(a++,et(e,t,a,o)),a<=r&&(n=a+1),r<=a&&(o=a-1)}}function et(e,t,r,n){Gt(e,r,n),Gt(t,2*r,2*n),Gt(t,2*r+1,2*n+1)}function Gt(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function oi(e,t,r,n){const o=e-r,i=t-n;return o*o+i*i}const cs={minZoom:0,maxZoom:16,minPoints:2,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:e=>e},ii=Math.fround||(Vt=new Float32Array(1),e=>(Vt[0]=+e,Vt[0]));var Vt;class si{constructor(t){this.options=Object.assign(Object.create(cs),t),this.trees=new Array(this.options.maxZoom+1),this.stride=this.options.reduce?7:6,this.clusterProps=[]}load(t){const{log:r,minZoom:n,maxZoom:o}=this.options;r&&console.time("total time");const i=`prepare ${t.length} points`;r&&console.time(i),this.points=t;const s=[];for(let a=0;a<t.length;a++){const l=t[a];if(!l.geometry)continue;const[c,f]=l.geometry.coordinates,d=ii(ht(c)),h=ii(pt(f));s.push(d,h,1/0,a,-1,1),this.options.reduce&&s.push(0)}let u=this.trees[o+1]=this._createTree(s);r&&console.timeEnd(i);for(let a=o;a>=n;a--){const l=+Date.now();u=this.trees[a]=this._createTree(this._cluster(u,a)),r&&console.log("z%d: %d clusters in %dms",a,u.numItems,+Date.now()-l)}return r&&console.timeEnd("total time"),this}getClusters(t,r){let n=((t[0]+180)%360+360)%360-180;const o=Math.max(-90,Math.min(90,t[1]));let i=t[2]===180?180:((t[2]+180)%360+360)%360-180;const s=Math.max(-90,Math.min(90,t[3]));if(t[2]-t[0]>=360)n=-180,i=180;else if(n>i){const f=this.getClusters([n,o,180,s],r),d=this.getClusters([-180,o,i,s],r);return f.concat(d)}const u=this.trees[this._limitZoom(r)],a=u.range(ht(n),pt(s),ht(i),pt(o)),l=u.data,c=[];for(const f of a){const d=this.stride*f;c.push(l[d+5]>1?ai(l,d,this.clusterProps):this.points[l[d+3]])}return c}getChildren(t){const r=this._getOriginId(t),n=this._getOriginZoom(t),o="No cluster with the specified id.",i=this.trees[n];if(!i)throw new Error(o);const s=i.data;if(r*this.stride>=s.length)throw new Error(o);const u=this.options.radius/(this.options.extent*Math.pow(2,n-1)),a=s[r*this.stride],l=s[r*this.stride+1],c=i.within(a,l,u),f=[];for(const d of c){const h=d*this.stride;s[h+4]===t&&f.push(s[h+5]>1?ai(s,h,this.clusterProps):this.points[s[h+3]])}if(f.length===0)throw new Error(o);return f}getLeaves(t,r,n){r=r||10,n=n||0;const o=[];return this._appendLeaves(o,t,r,n,0),o}getTile(t,r,n){const o=this.trees[this._limitZoom(t)],i=Math.pow(2,t),{extent:s,radius:u}=this.options,a=u/s,l=(n-a)/i,c=(n+1+a)/i,f={features:[]};return this._addTileFeatures(o.range((r-a)/i,l,(r+1+a)/i,c),o.data,r,n,i,f),r===0&&this._addTileFeatures(o.range(1-a/i,l,1,c),o.data,i,n,i,f),r===i-1&&this._addTileFeatures(o.range(0,l,a/i,c),o.data,-1,n,i,f),f.features.length?f:null}getClusterExpansionZoom(t){let r=this._getOriginZoom(t)-1;for(;r<=this.options.maxZoom;){const n=this.getChildren(t);if(r++,n.length!==1)break;t=n[0].properties.cluster_id}return r}_appendLeaves(t,r,n,o,i){const s=this.getChildren(r);for(const u of s){const a=u.properties;if(a&&a.cluster?i+a.point_count<=o?i+=a.point_count:i=this._appendLeaves(t,a.cluster_id,n,o,i):i<o?i++:t.push(u),t.length===n)break}return i}_createTree(t){const r=new $t(t.length/this.stride|0,this.options.nodeSize,Float32Array);for(let n=0;n<t.length;n+=this.stride)r.add(t[n],t[n+1]);return r.finish(),r.data=t,r}_addTileFeatures(t,r,n,o,i,s){for(const u of t){const a=u*this.stride,l=r[a+5]>1;let c,f,d;if(l)c=ui(r,a,this.clusterProps),f=r[a],d=r[a+1];else{const m=this.points[r[a+3]];c=m.properties;const[p,v]=m.geometry.coordinates;f=ht(p),d=pt(v)}const h={type:1,geometry:[[Math.round(this.options.extent*(f*i-n)),Math.round(this.options.extent*(d*i-o))]],tags:c};let g;g=l||this.options.generateId?r[a+3]:this.points[r[a+3]].id,g!==void 0&&(h.id=g),s.features.push(h)}}_limitZoom(t){return Math.max(this.options.minZoom,Math.min(Math.floor(+t),this.options.maxZoom+1))}_cluster(t,r){const{radius:n,extent:o,reduce:i,minPoints:s}=this.options,u=n/(o*Math.pow(2,r)),a=t.data,l=[],c=this.stride;for(let f=0;f<a.length;f+=c){if(a[f+2]<=r)continue;a[f+2]=r;const d=a[f],h=a[f+1],g=t.within(a[f],a[f+1],u),m=a[f+5];let p=m;for(const v of g){const y=v*c;a[y+2]>r&&(p+=a[y+5])}if(p>m&&p>=s){let v,y=d*m,k=h*m,b=-1;const P=(f/c<<5)+(r+1)+this.points.length;for(const M of g){const w=M*c;if(a[w+2]<=r)continue;a[w+2]=r;const E=a[w+5];y+=a[w]*E,k+=a[w+1]*E,a[w+4]=P,i&&(v||(v=this._map(a,f,!0),b=this.clusterProps.length,this.clusterProps.push(v)),i(v,this._map(a,w)))}a[f+4]=P,l.push(y/p,k/p,1/0,P,-1,p),i&&l.push(b)}else{for(let v=0;v<c;v++)l.push(a[f+v]);if(p>1)for(const v of g){const y=v*c;if(!(a[y+2]<=r)){a[y+2]=r;for(let k=0;k<c;k++)l.push(a[y+k])}}}}return l}_getOriginId(t){return t-this.points.length>>5}_getOriginZoom(t){return(t-this.points.length)%32}_map(t,r,n){if(t[r+5]>1){const s=this.clusterProps[t[r+6]];return n?Object.assign({},s):s}const o=this.points[t[r+3]].properties,i=this.options.map(o);return n&&i===o?Object.assign({},i):i}}function ai(e,t,r){return{type:"Feature",id:e[t+3],properties:ui(e,t,r),geometry:{type:"Point",coordinates:[(n=e[t],360*(n-.5)),fs(e[t+1])]}};var n}function ui(e,t,r){const n=e[t+5],o=n>=1e4?`${Math.round(n/1e3)}k`:n>=1e3?Math.round(n/100)/10+"k":n,i=e[t+6],s=i===-1?{}:Object.assign({},r[i]);return Object.assign(s,{cluster:!0,cluster_id:e[t+3],point_count:n,point_count_abbreviated:o})}function ht(e){return e/360+.5}function pt(e){const t=Math.sin(e*Math.PI/180),r=.5-.25*Math.log((1+t)/(1-t))/Math.PI;return r<0?0:r>1?1:r}function fs(e){const t=(180-360*e)*Math.PI/180;return 360*Math.atan(Math.exp(t))/Math.PI-90}class ci extends ft{constructor(t){var{maxZoom:r,radius:n=60}=t,o=Q(t,["maxZoom","radius"]);super({maxZoom:r}),this.markers=[],this.clusters=[],this.state={zoom:-1},this.superCluster=new si(Object.assign({maxZoom:this.maxZoom,radius:n},o))}calculate(t){let r=!1,n=t.map.getZoom();T(n),n=Math.round(n);const o={zoom:n};if(!rt(t.markers,this.markers)){r=!0,this.markers=[...t.markers];const i=this.markers.map(s=>{const u=j.getPosition(s);return{type:"Feature",geometry:{type:"Point",coordinates:[u.lng(),u.lat()]},properties:{marker:s}}});this.superCluster.load(i)}return r||(this.state.zoom<=this.maxZoom||o.zoom<=this.maxZoom)&&(r=!rt(this.state,o)),this.state=o,t.markers.length===0?(this.clusters=[],{clusters:this.clusters,changed:r}):(r&&(this.clusters=this.cluster(t)),{clusters:this.clusters,changed:r})}cluster(t){let{map:r}=t;const n=r.getZoom();return T(n),this.superCluster.getClusters([-180,-90,180,90],Math.round(n)).map(o=>this.transformCluster(o))}transformCluster(t){let{geometry:{coordinates:[r,n]},properties:o}=t;if(o.cluster)return new U({markers:this.superCluster.getLeaves(o.cluster_id,1/0).map(s=>s.properties.marker),position:{lat:n,lng:r}});const i=o.marker;return new U({markers:[i],position:j.getPosition(i)})}}var Ht,fi,li,hi,dt,pi={};function ls(){if(li)return pi;li=1;var e=J(),t=Go(),r=W(),n=_(),o=at(),i=N(),s=ut(),u=(function(){if(fi)return Ht;fi=1;var d=ot(),h=Function.prototype,g=h.apply,m=h.call;return Ht=typeof Reflect=="object"&&Reflect.apply||(d?m.bind(g):function(){return m.apply(g,arguments)}),Ht})(),a=I(),l=TypeError,c=a(function(){[].keys().reduce(function(){},void 0)}),f=!c&&s("reduce",l);return e({target:"Iterator",proto:!0,real:!0,forced:c||f},{reduce:function(d){n(this);try{r(d)}catch(v){i(this,"throw",v)}var h=arguments.length<2,g=h?void 0:arguments[1];if(f)return u(f,this,h?[d]:[d,g]);var m=o(this),p=0;if(t(m,function(v){h?(h=!1,g=v):g=d(g,v,p),p++},{IS_RECORD:!0}),h)throw new l("Reduce of empty iterator with no initial value");return g}}),pi}hi||(hi=1,ls());class di{constructor(t,r){this.markers={sum:t.length};const n=r.map(i=>i.count),o=n.reduce((i,s)=>i+s,0);this.clusters={count:r.length,markers:{mean:o/r.length,sum:o,min:Math.min(...n),max:Math.max(...n)}}}}class mi{render(t,r,n){let{count:o,position:i}=t;const s=`<svg fill="${o>Math.max(10,r.clusters.markers.mean)?"#ff0000":"#0000ff"}" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 240" width="50" height="50"> <circle cx="120" cy="120" opacity=".6" r="70" /> <circle cx="120" cy="120" opacity=".3" r="90" /> <circle cx="120" cy="120" opacity=".2" r="110" /> <text x="50%" y="50%" style="fill:#fff" text-anchor="middle" font-size="50" dominant-baseline="middle" font-family="roboto,arial,sans-serif">${o}</text> </svg>`,u=`Cluster of ${o} markers`,a=Number(google.maps.Marker.MAX_ZINDEX)+o;if(j.isAdvancedMarkerAvailable(n)){const c=new DOMParser().parseFromString(s,"image/svg+xml").documentElement;c.setAttribute("transform","translate(0 25)");const f={map:n,position:i,zIndex:a,title:u,content:c};return new google.maps.marker.AdvancedMarkerElement(f)}const l={position:i,zIndex:a,title:u,icon:{url:`data:image/svg+xml;base64,${btoa(s)}`,anchor:new google.maps.Point(25,25)}};return new google.maps.Marker(l)}}class Kt{constructor(){(function(t,r){for(let n in r.prototype)t.prototype[n]=r.prototype[n]})(Kt,google.maps.OverlayView)}}O.MarkerClustererEvents=void 0,(dt=O.MarkerClustererEvents||(O.MarkerClustererEvents={})).CLUSTERING_BEGIN="clusteringbegin",dt.CLUSTERING_END="clusteringend",dt.CLUSTER_CLICK="click",dt.GMP_CLICK="gmp-click";const gi=(e,t,r)=>{t.bounds&&r.fitBounds(t.bounds)};O.AbstractAlgorithm=ft,O.AbstractViewportAlgorithm=Nt,O.Cluster=U,O.ClusterStats=di,O.DefaultRenderer=mi,O.GridAlgorithm=class extends Nt{constructor(e){var{maxDistance:t=4e4,gridSize:r=40}=e;super(Q(e,["maxDistance","gridSize"])),this.clusters=[],this.state={zoom:-1},this.maxDistance=t,this.gridSize=r}calculate(e){let{markers:t,map:r,mapCanvasProjection:n}=e;const o=r.getZoom();T(o);const i={zoom:o};let s=!1;return this.state.zoom>=this.maxZoom&&i.zoom>=this.maxZoom||(s=!rt(this.state,i)),this.state=i,o>=this.maxZoom?{clusters:this.noop({markers:t}),changed:s}:{clusters:this.cluster({markers:Ft(r,n,t,this.viewportPadding),map:r,mapCanvasProjection:n})}}cluster(e){let{markers:t,map:r,mapCanvasProjection:n}=e;return this.clusters=[],t.forEach(o=>{this.addToClosestCluster(o,r,n)}),this.clusters}addToClosestCluster(e,t,r){let n=this.maxDistance,o=null;for(let i=0;i<this.clusters.length;i++){const s=this.clusters[i];T(s.bounds);const u=ko(s.bounds.getCenter().toJSON(),j.getPosition(e).toJSON());u<n&&(n=u,o=s)}if(o)if(T(o.bounds),ct(o.bounds,r,this.gridSize).contains(j.getPosition(e)))o.push(e);else{const i=new U({markers:[e]});this.clusters.push(i)}else{const i=new U({markers:[e]});this.clusters.push(i)}}},O.MarkerClusterer=class extends Kt{constructor(e){let{map:t,markers:r=[],algorithmOptions:n={},algorithm:o=new ci(n),renderer:i=new mi,onClusterClick:s=gi}=e;super(),this.map=null,this.idleListener=null,this.markers=[...r],this.clusters=[],this.algorithm=o,this.renderer=i,this.onClusterClick=s,t&&this.setMap(t)}addMarker(e,t){this.markers.includes(e)||(this.markers.push(e),t||this.render())}addMarkers(e,t){e.forEach(r=>{this.addMarker(r,!0)}),t||this.render()}removeMarker(e,t){const r=this.markers.indexOf(e);return r!==-1&&(j.setMap(e,null),this.markers.splice(r,1),t||this.render(),!0)}removeMarkers(e,t){let r=!1;return e.forEach(n=>{r=this.removeMarker(n,!0)||r}),r&&!t&&this.render(),r}clearMarkers(e){this.markers.length=0,e||this.render()}render(){const e=this.getMap();if(e instanceof google.maps.Map&&e.getProjection()){google.maps.event.trigger(this,O.MarkerClustererEvents.CLUSTERING_BEGIN,this);const{clusters:t,changed:r}=this.algorithm.calculate({markers:this.markers,map:e,mapCanvasProjection:this.getProjection()});if(r||r==null){const n=new Set;for(const i of t)i.markers.length==1&&n.add(i.markers[0]);const o=[];for(const i of this.clusters)i.marker!=null&&(i.markers.length==1?n.has(i.marker)||j.setMap(i.marker,null):o.push(i.marker));this.clusters=t,this.renderClusters(),requestAnimationFrame(()=>o.forEach(i=>j.setMap(i,null)))}google.maps.event.trigger(this,O.MarkerClustererEvents.CLUSTERING_END,this)}}onAdd(){const e=this.getMap();T(e),this.idleListener=e.addListener("idle",this.render.bind(this)),this.render()}onRemove(){this.idleListener&&google.maps.event.removeListener(this.idleListener),this.reset()}reset(){this.markers.forEach(e=>j.setMap(e,null)),this.clusters.forEach(e=>e.delete()),this.clusters=[]}renderClusters(){const e=new di(this.markers,this.clusters),t=this.getMap();this.clusters.forEach(r=>{if(r.markers.length===1)r.marker=r.markers[0];else if(r.marker=this.renderer.render(r,e,t),r.markers.forEach(n=>j.setMap(n,null)),this.onClusterClick){const n=j.isAdvancedMarker(r.marker)?O.MarkerClustererEvents.GMP_CLICK:O.MarkerClustererEvents.CLUSTER_CLICK;r.marker.addListener(n,o=>{google.maps.event.trigger(this,O.MarkerClustererEvents.CLUSTER_CLICK,r),this.onClusterClick(o,r,t)})}j.setMap(r.marker,t)})}},O.MarkerUtils=j,O.NoopAlgorithm=class extends ft{constructor(e){super(Q(e,[]))}calculate(e){let{markers:t,map:r,mapCanvasProjection:n}=e;return{clusters:this.cluster({markers:t,map:r,mapCanvasProjection:n}),changed:!1}}cluster(e){return this.noop(e)}},O.SuperClusterAlgorithm=ci,O.SuperClusterViewportAlgorithm=class extends Nt{constructor(e){var{maxZoom:t,radius:r=60,viewportPadding:n=60}=e,o=Q(e,["maxZoom","radius","viewportPadding"]);super({maxZoom:t,viewportPadding:n}),this.markers=[],this.clusters=[],this.superCluster=new si(Object.assign({maxZoom:this.maxZoom,radius:r},o)),this.state={zoom:-1,view:[0,0,0,0]}}calculate(e){const t=this.getViewportState(e);let r=!rt(this.state,t);if(!rt(e.markers,this.markers)){r=!0,this.markers=[...e.markers];const n=this.markers.map(o=>{const i=j.getPosition(o);return{type:"Feature",geometry:{type:"Point",coordinates:[i.lng(),i.lat()]},properties:{marker:o}}});this.superCluster.load(n)}return r&&(this.clusters=this.cluster(e),this.state=t),{clusters:this.clusters,changed:r}}cluster(e){const t=this.getViewportState(e);return this.superCluster.getClusters(t.view,t.zoom).map(r=>this.transformCluster(r))}transformCluster(e){let{geometry:{coordinates:[t,r]},properties:n}=e;if(n.cluster)return new U({markers:this.superCluster.getLeaves(n.cluster_id,1/0).map(i=>i.properties.marker),position:{lat:r,lng:t}});const o=n.marker;return new U({markers:[o],position:j.getPosition(o)})}getViewportState(e){const t=e.map.getZoom(),r=e.map.getBounds();return T(t),T(r),{zoom:Math.round(t),view:Eo(r,e.mapCanvasProjection,this.viewportPadding)}}},O.defaultOnClusterClickHandler=gi,O.distanceBetweenPoints=ko,O.extendBoundsToPaddedViewport=ct,O.extendPixelBounds=xo,O.filterMarkersToPaddedViewport=Ft,O.getPaddedViewport=Eo,O.noop=Oo,O.pixelBoundsToLatLngBounds=Mo})})(nt,nt.exports)),nt.exports}var ms=ds(),gs=hs(ms);export{gs as default}; builder/elements/map/app/map-leaflet.min.js000064400000004610151666572170014673 0ustar00/*! YOOtheme Pro v4.5.33 | https://yootheme.com */ (function(t,b,h){"use strict";async function $(m,{type:d,center:f,zoom:o,fit_bounds:a,min_zoom:x,max_zoom:G,zooming:y,dragging:S,clustering:v,cluster_icons:i,controls:A,markers:n,popup_max_width:I,baseUrl:P}){t.Icon.Default.imagePath=`${P}/images/`;const c=t.map(m,{zoom:o,minZoom:Number(x),maxZoom:Number(G),center:f,dragging:S,zoomControl:A,touchZoom:y,scrollWheelZoom:y,doubleClickZoom:y});d==="satellite"?t.tileLayer("https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}",{attribution:'© <a href="https://www.esri.com">Esri</a> | DigitalGlobe, GeoEye, i-cubed, USDA, USGS, AEX, Getmapping, Aerogrid, IGN, IGP, swisstopo, and the GIS User Community'}).addTo(c):t.tileLayer("https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",{attribution:'© <a href="http://osm.org/copyright">OpenStreetMap</a>'}).addTo(c);let u;if(v){const s={showCoverageOnHover:!1};i&&(s.iconCreateFunction=r=>{const p=r.getChildCount();let e;p<10?e=i[0]:p<100?e=i[1]||i[0]:e=i[2]||i[1]||i[0];const g=e.textColor?`style="color: ${e.textColor}"`:"";return new t.DivIcon({html:`<img src="${e.url}" alt><span class="uk-position-center"${g}>${p}</span>`,iconSize:e.size?new t.Point(...e.size):null})}),u=t.markerClusterGroup(s),c.addLayer(u)}n==null||n.forEach(({lat:s,lng:r,content:p,show_popup:e,icon:g,iconSize:C,iconAnchor:z,title:E})=>{const l=t.marker({lat:s,lng:r},{title:E});if(g&&l.setIcon(t.icon({iconUrl:g,iconSize:C,iconAnchor:z})),u?u.addLayer(l):l.addTo(c),p){const w={maxWidth:I?parseInt(I,10):300};C&&(w.offset=new t.Point(0,-1*C[1]+7));const M=t.popup(w).setContent(p);l.bindPopup(M),e&&l.openPopup()}}),a&&(n!=null&&n.length)&&c.fitBounds(n.map(({lat:s,lng:r})=>[s,r]),{padding:[50,50]})}b.component("Map",{connected(){var m,d,f;this.script||(this.script=h.$("script",this.$el)),this.script&&((m=this.map)!=null||(this.map=JSON.parse(this.script.textContent)),(d=this.templates)!=null||(this.templates=h.$$("template",this.$el)),(f=this.map.markers)==null||f.forEach((o,a)=>{o.content=h.html(this.templates[a]).trim(),!o.icon&&this.map.icon&&(o.icon=this.map.icon,o.iconSize=this.map.iconSize,o.iconAnchor=this.map.iconAnchor)}),this.map.lazyload&&"IntersectionObserver"in window?h.observeIntersection(this.$el,(o,a)=>{$(this.$el,this.map),a.disconnect()},{rootMargin:`${window.innerHeight/2}px 0px`}):$(this.$el,this.map))}})})(L,UIkit,UIkit.util); builder/elements/map/element.php000064400000016323151666572170012752 0ustar00<?php namespace YOOtheme; use YOOtheme\Http\Uri; use YOOtheme\Theme\SvgHelper; return [ 'transforms' => [ 'render' => function ($node) { /** * @var Config $config * @var ImageProvider $image * @var View $view */ [$config, $image, $view] = app(Config::class, ImageProvider::class, View::class); $getIconOptions = function ($node) use ($image, $view) { if (empty($node->props['marker_icon'])) { return []; } $icon = $node->props['marker_icon']; $width = (int) $node->props['marker_icon_width']; $height = (int) $node->props['marker_icon_height']; if ($imageObj = $image->create($icon, false)) { if ($width || $height) { $imageObj = $imageObj->thumbnail($width, $height); } $width = $imageObj->getWidth(); $height = $imageObj->getHeight(); $icon = $image->getUrl( (string) (new Uri($icon))->withFragment("thumbnail={$width},{$height}"), ); } elseif ((!$width || !$height) && $view->isImage($icon) === 'svg') { [$width, $height] = SvgHelper::getDimensions($icon, compact('width', 'height')); } $hasWidthAndHeight = $width && $height; return [ 'icon' => $icon ? Url::to($icon) : false, 'iconSize' => $hasWidthAndHeight ? [$width, $height] : null, 'iconAnchor' => $hasWidthAndHeight ? [$width / 2, $height] : null, ]; }; $center = []; $node->options = []; foreach ($node->children as $child) { if (empty($child->props['location'])) { continue; } @[$lat, $lng] = explode(',', $child->props['location']); if (!is_numeric($lat) || !is_numeric($lng)) { continue; } if (empty($center)) { $center = ['lat' => (float) $lat, 'lng' => (float) $lng]; } if (!empty($child->props['hide'])) { continue; } $options = [ 'lat' => (float) $lat, 'lng' => (float) $lng, 'title' => $child->props['title'], ] + $getIconOptions($child); if (!empty($child->props['show_popup'])) { $options['show_popup'] = true; } $child->props['show'] = true; $node->options['markers'][] = $options; } // map options $node->options += Arr::pick($node->props, [ 'type', 'zoom', 'fit_bounds', 'min_zoom', 'max_zoom', 'zooming', 'dragging', 'clustering', 'controls', 'poi', 'styler_invert_lightness', 'styler_hue', 'styler_saturation', 'styler_lightness', 'styler_gamma', 'popup_max_width', ]); $node->options['center'] = $center ?: ['lat' => 53.5503, 'lng' => 10.0006]; $node->options['lazyload'] = true; $node->options += $getIconOptions($node); if ($node->props['clustering']) { for ($i = 1; $i < 4; $i++) { $icon = $node->props["cluster_icon_{$i}"]; $width = (int) $node->props["cluster_icon_{$i}_width"]; $height = (int) $node->props["cluster_icon_{$i}_height"]; $textColor = $node->props["cluster_icon_{$i}_text_color"]; if ($icon) { if ($imageObj = $image->create($icon, false)) { if ($width || $height) { $imageObj = $imageObj->thumbnail($width, $height); } $width = $imageObj->getWidth(); $height = $imageObj->getHeight(); $icon = $image->getUrl("{$icon}#thumbnail={$width},{$height}"); } $node->options['cluster_icons'][] = [ 'url' => Url::to($icon), 'size' => $width && $height ? [$width, $height] : null, 'textColor' => $textColor, ]; } } } $node->options = array_filter($node->options, fn($value) => isset($value)); $node->props['metadata'] = []; // add scripts, styles if ($key = $config('~theme.google_maps')) { $node->options['library'] = 'google'; $node->options['apiKey'] = $key; $node->props['metadata']['script:builder-map'] = [ 'src' => Path::get('./app/map-google.min.js', __DIR__), 'defer' => true, ]; if ($node->props['clustering']) { $node->options['clustererUrl'] = Url::to( Path::get('./app/map-google-markerclusterer.min.js', __DIR__), ); } } else { $node->options['library'] = 'leaflet'; $baseUrl = '~assets/leaflet/leaflet/dist'; $node->options['baseUrl'] = Url::to($baseUrl); $node->props['metadata']['script:leaflet'] = [ 'src' => "{$baseUrl}/leaflet.js", 'defer' => true, ]; $node->props['metadata']['style:leaflet'] = [ 'href' => "{$baseUrl}/leaflet.css", 'defer' => true, ]; if ($node->props['clustering']) { $baseUrl = '~assets/leaflet/markercluster/dist'; $node->options['clusterBaseUrl'] = $baseUrl; $node->props['metadata'] += [ 'script:leaflet-clusterer' => [ 'src' => "{$baseUrl}/leaflet.markercluster.js", 'defer' => true, ], 'style:leaflet-clusterer' => [ 'href' => "{$baseUrl}/MarkerCluster.css", 'defer' => true, ], 'style:leaflet-clusterer-default' => [ 'href' => "{$baseUrl}/MarkerCluster.Default.css", 'defer' => true, ], ]; } $node->props['metadata']['script:builder-map'] = [ 'src' => Path::get('./app/map-leaflet.min.js', __DIR__), 'defer' => true, ]; } }, ], ]; builder/elements/map/templates/template.php000064400000004421151666572170015126 0ustar00<?php use YOOtheme\Metadata; use function YOOtheme\app; // Resets if ($props['viewport_height'] == 'viewport' && $props['viewport_height_viewport'] > 100) { $props['viewport_height_offset_top'] = false; } /** @var Metadata $metadata */ $metadata = app(Metadata::class); foreach ($props['metadata'] as $name => $attributes) { $metadata->set($name, $attributes); } $el = $this->el('div', [ 'class' => [ 'uk-position-relative', 'uk-position-z-index', 'uk-dark', 'uk-inverse-{text_color}', // Height Viewport 'uk-height-viewport {@viewport_height: viewport} {@!viewport_height_offset_top} {@viewport_height_viewport: |100}', ], 'style' => [ 'width: {width}px; {@!width_breakpoint} {@!viewport_height}', 'height: {height}px; {@!width} {@!viewport_height}', // Height Viewport 'min-height: {!viewport_height_viewport: |100}vh; {@viewport_height: viewport} {@!viewport_height_offset_top}' ], // Height Viewport 'uk-height-viewport' => ($props['viewport_height'] == 'viewport' && $props['viewport_height_offset_top']) || $props['viewport_height'] == 'section' ? [ 'offset-top: true; {@viewport_height_offset_top}', 'offset-bottom: {0}; {@viewport_height: viewport}' => $props['viewport_height_viewport'] && $props['viewport_height_viewport'] < 100 ? 100 - (int) $props['viewport_height_viewport'] : false, 'offset-bottom: !:is(.uk-section-default,.uk-section-muted,.uk-section-primary,.uk-section-secondary) +; {@viewport_height: section}', ] : false, 'uk-responsive' => !$props['viewport_height'] ? [ 'width: {width}; height: {height}', ] : false, 'uk-map' => true, 'data-map-type' => $options['library'] ]); $script = $this->el('script', ['type' => 'application/json'], json_encode($options)); // Width and Height $props['width'] = trim($props['width'] ?: '', 'px'); $props['height'] = trim($props['height'] ?: '300', 'px'); ?> <?= $el($props, $attrs) ?> <?= $script() ?> <?php foreach ($children as $child) : ?> <?php if (!empty($child->props['show'])) : ?> <template> <?= $builder->render($child, ['element' => $props]) ?> </template> <?php endif ?> <?php endforeach ?> <?= $el->end() ?> builder/elements/map/templates/content.php000064400000000522151666572170014763 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/map/images/iconSmall.svg000064400000000535151666572170014515 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" stroke-width="1.1" d="M10,0.5c-3.59,0-6.5,2.89-6.5,6.48C3.5,11.83,10,19,10,19 s6.5-7.17,6.5-12.02C16.5,3.39,13.59,0.5,10,0.5L10,0.5z" /> <circle fill="none" stroke="#444" stroke-width="1.1" cx="10" cy="6.8" r="2.3" /> </svg> builder/elements/map/images/icon.svg000064400000000514151666572170013521 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" stroke-width="2" d="M15,1C9.5,1,5,5.4,5,10.8C5,18.1,15,29,15,29s10-10.9,10-18.2 C25,5.4,20.5,1,15,1L15,1z" /> <ellipse fill="none" stroke="#444" stroke-width="2" cx="15" cy="10.5" rx="3.5" ry="3.5" /> </svg> builder/elements/panel/images/icon.svg000064400000000775151666572170014054 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="1.9" points="7,12.728 11.728,8 17.909,14.182" /> <polyline fill="none" stroke="#444" stroke-width="1.9" points="15.455,11 17.273,9.182 23,14.909" /> <rect width="18" height="2" fill="#444" x="6" y="18" /> <rect width="14" height="2" fill="#444" x="8" y="21" /> <rect width="24" height="24" fill="none" stroke="#444" stroke-width="2" x="3" y="3" /> </svg> builder/elements/panel/images/iconSmall.svg000064400000000720151666572170015033 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="1.1" points="4,9 8,5 12,9" /> <polyline fill="none" stroke="#444" stroke-width="1.1" points="10.5,7.5 12,6 16,10" /> <rect width="12" height="1" fill="#444" x="4" y="12" /> <rect width="10" height="1" fill="#444" x="5" y="14" /> <rect width="17" height="17" fill="none" stroke="#444" x="1.5" y="1.5" /> </svg> builder/elements/panel/element.json000064400000121246151666572170013457 0ustar00{ "@import": "./element.php", "name": "panel", "title": "Panel", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "link_text": "Read more", "title_hover_style": "reset", "title_element": "h3", "title_align": "top", "title_grid_width": "1-2", "title_grid_breakpoint": "m", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "content_column_breakpoint": "m", "icon_width": 80, "image_align": "top", "image_grid_width": "1-2", "image_grid_breakpoint": "m", "image_svg_color": "emphasis", "link_style": "default", "margin": "default" }, "placeholder": { "props": { "title": "Title", "meta": "", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", "image": "", "video": "", "icon": "", "hover_image": "", "hover_video": "" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "image": { "label": "Image", "type": "image", "source": true, "show": "!video", "altRef": "%name%_alt" }, "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true, "show": "!image" }, "image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "image || video" }, "image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "image || video" }, "image_alt": { "label": "Image Alt", "source": true, "show": "image && !video" }, "icon": { "label": "Icon", "description": "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.", "type": "icon", "source": true, "enable": "!image && !video" }, "link": "${builder.link}", "link_target": "${builder.link_target}", "link_text": { "label": "Link Text", "description": "Enter the text for the link.", "source": true, "enable": "link" }, "link_aria_label": { "label": "Link ARIA Label", "description": "Enter a descriptive text label to make it accessible if the link has no visible text.", "source": true, "enable": "link" }, "hover_image": { "label": "Hover Image", "description": "Select an optional image that appears on hover.", "type": "image", "source": true, "show": "!hover_video", "enable": "image || video" }, "hover_video": { "label": "Hover Video", "description": "Select an optional video that appears on hover.", "type": "video", "source": true, "show": "!hover_image", "enable": "image || video" }, "panel_style": { "label": "Style", "description": "Select one of the boxed card or tile styles or a blank panel.", "type": "select", "options": { "None": "", "Card Default": "card-default", "Card Primary": "card-primary", "Card Secondary": "card-secondary", "Card Hover": "card-hover", "Tile Default": "tile-default", "Tile Muted": "tile-muted", "Tile Primary": "tile-primary", "Tile Secondary": "tile-secondary" } }, "panel_link": { "label": "Link", "description": "Link the whole panel if a link exists. Optionally, add a hover style.", "type": "checkbox", "text": "Link panel", "enable": "link" }, "panel_link_hover": { "type": "checkbox", "text": "Add hover style", "enable": "link && panel_link && $match(panel_style, 'card-(default|primary|secondary)|tile-')" }, "panel_padding": { "label": "Padding", "description": "Set the padding.", "type": "select", "options": { "None": "", "Small": "small", "Default": "default", "Large": "large" }, "enable": "panel_style || (!panel_style && (image || video) && image_align != 'between')" }, "panel_image_no_padding": { "description": "Top, bottom, left or right aligned images can be attached to the panel edge. If the image is aligned to the left or right, it will also extend to cover the whole space.", "type": "checkbox", "text": "Align image without padding", "show": "panel_style", "enable": "(image || video) && image_align != 'between'" }, "height_expand": { "label": "Height", "description": "Expand the height of the element to fill the available space in the column.", "type": "checkbox", "text": "Fill the available column space" }, "panel_expand": { "label": "Expand Content", "description": "Expand the height of the content to fill the available space in the panel and push the link to the bottom.", "type": "select", "options": { "None": "", "Image": "image", "Content": "content", "Image and Content": "both" }, "enable": "height_expand" }, "html_element": "${builder.html_element}", "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "title" }, "title_link": { "label": "Link", "description": "Link the title if a link exists.", "type": "checkbox", "text": "Link title", "enable": "title && link" }, "title_hover_style": { "label": "Hover Style", "description": "Set the hover style for a linked title.", "type": "select", "options": { "None": "reset", "Heading Link": "heading", "Default Link": "" }, "enable": "title && link && (title_link || panel_link)" }, "title_decoration": { "label": "Decoration", "description": "Decorate the title with a divider, bullet or a line that is vertically centered to the heading.", "type": "select", "options": { "None": "", "Divider": "divider", "Bullet": "bullet", "Line": "line" }, "enable": "title" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "title" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "title" }, "title_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "title" }, "title_align": { "label": "Alignment", "description": "Align the title to the top or left in regards to the content.", "type": "select", "options": { "Top": "top", "Left": "left" }, "enable": "title" }, "title_grid_width": { "label": "Grid Width", "description": "Define the width of the title within the grid. Choose between percent and fixed widths or expand columns to the width of their content.", "type": "select", "options": { "Auto": "auto", "Expand": "expand", "80%": "4-5", "75%": "3-4", "66%": "2-3", "60%": "3-5", "50%": "1-2", "40%": "2-5", "33%": "1-3", "25%": "1-4", "20%": "1-5", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "title && title_align == 'left'" }, "title_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between the title and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "title && title_align == 'left'" }, "title_grid_row_gap": { "label": "Grid Row Gap", "description": "Set the size of the gap if the grid items stack.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "title && title_align == 'left'" }, "title_grid_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "title && title_align == 'left'" }, "title_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "title" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "meta" }, "meta_align": { "label": "Alignment", "description": "Align the meta text.", "type": "select", "options": { "Above Title": "above-title", "Below Title": "below-title", "Above Content": "above-content", "Below Content": "below-content" }, "enable": "meta" }, "meta_element": { "label": "HTML Element", "description": "Set the level for the section heading or give it no semantic meaning.", "type": "select", "options": { "h1": "h1", "h2": "h2", "h3": "h3", "h4": "h4", "h5": "h5", "h6": "h6", "div": "div" }, "enable": "meta" }, "meta_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "meta" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "content" }, "content_align": { "label": "Alignment", "type": "checkbox", "text": "Force left alignment", "enable": "content" }, "content_dropcap": { "label": "Drop Cap", "description": "Display the first letter of the paragraph as a large initial.", "type": "checkbox", "text": "Enable drop cap", "enable": "content" }, "content_column": { "label": "Columns", "description": "Set the number of text columns.", "type": "select", "options": { "None": "", "Halves": "1-2", "Thirds": "1-3", "Quarters": "1-4", "Fifths": "1-5", "Sixths": "1-6" }, "enable": "content" }, "content_column_divider": { "description": "Show a divider between text columns.", "type": "checkbox", "text": "Show dividers", "enable": "content && content_column" }, "content_column_breakpoint": { "label": "Columns Breakpoint", "description": "Set the device width from which the text columns should apply.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "content && content_column" }, "content_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "content" }, "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image || video" }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "enable": "image || video" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "(image || video) && (!panel_style || (panel_style && (!panel_image_no_padding || image_align == 'between')))" }, "image_box_shadow": { "label": "Box Shadow", "description": "Select the image box shadow size.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "(image || video) && !panel_style" }, "image_box_decoration": { "label": "Box Decoration", "description": "Select the image box decoration style.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Floating Shadow": "shadow", "Mask": "mask" }, "enable": "(image || video) && !panel_style" }, "image_box_decoration_inverse": { "type": "checkbox", "text": "Inverse style", "enable": "(image || video) && !panel_style && $match(image_box_decoration, '^(default|primary|secondary)$')" }, "image_link": { "label": "Link", "description": "Link the image if a link exists.", "type": "checkbox", "text": "Link image", "enable": "(image || video) && link" }, "image_transition": { "label": "Hover Transition", "description": "Set the hover transition for a linked image. If the hover image is set, the transition takes place between the two images. If <i>None</i> is selected, the hover image fades in.", "type": "select", "options": { "None (Fade if hover image)": "", "Scale Up": "scale-up", "Scale Down": "scale-down" }, "enable": "(image || video) && (link && (image_link || panel_link))" }, "image_transition_border": { "type": "checkbox", "text": "Border", "enable": "(image || video) && link && (image_link || panel_link)" }, "image_hover_box_shadow": { "label": "Hover Box Shadow", "description": "Select the image box shadow size on hover.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "(image || video) && link && !panel_style && (image_link || panel_link)" }, "icon_width": "${builder.icon_width}", "icon_color": "${builder.icon_color}", "image_align": { "label": "Alignment", "description": "Align the image to the top, left, right or place it between the title and the content.", "type": "select", "options": { "Top": "top", "Bottom": "bottom", "Left": "left", "Right": "right", "Between": "between" }, "enable": "image || video || icon" }, "image_grid_width": { "label": "Grid Width", "description": "Define the width of the image within the grid. Choose between percent and fixed widths or expand columns to the width of their content.", "type": "select", "options": { "Auto": "auto", "80%": "4-5", "75%": "3-4", "66%": "2-3", "60%": "3-5", "50%": "1-2", "40%": "2-5", "33%": "1-3", "25%": "1-4", "20%": "1-5", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" }, "enable": "(image || video || icon) && $match(image_align, 'left|right')" }, "image_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between the image and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "(image || video || icon) && $match(image_align, 'left|right') && !(panel_image_no_padding && panel_style)" }, "image_grid_row_gap": { "label": "Grid Row Gap", "description": "Set the size of the gap if the grid items stack.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "enable": "(image || video || icon) && $match(image_align, 'left|right') && !(panel_image_no_padding && panel_style)" }, "image_grid_breakpoint": { "label": "Grid Breakpoint", "description": "Set the breakpoint from which grid items will stack.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "(image || video || icon) && $match(image_align, 'left|right')" }, "image_vertical_align": { "label": "Vertical Alignment", "description": "Vertically center grid items.", "type": "checkbox", "text": "Center", "enable": "(image || video || icon) && $match(image_align, 'left|right')" }, "image_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "(image || video || icon) && (image_align == 'between' || (image_align == 'bottom' && !(panel_style && panel_image_no_padding)))" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "image" }, "image_svg_animate": { "type": "checkbox", "text": "Animate strokes", "enable": "image && image_svg_inline" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "image && image_svg_inline" }, "image_text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true, "enable": "image || video" }, "hover_image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "link && link_text" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "link && link_text && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Full width button", "enable": "link && link_text && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_margin": { "label": "Margin Top", "description": "Set the top margin. Note that the margin will only apply if the content field immediately follows another content field.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove" }, "enable": "link && link_text" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>, <code>.el-hover-image</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-title", ".el-meta", ".el-content", ".el-image", ".el-link", ".el-hover-image" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "title", "meta", "content", "image", "video", { "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "name": "_image_dimension", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_alt", "icon", "link", "link_target", "link_text", "link_aria_label", "hover_image", "hover_video" ] }, { "title": "Settings", "fields": [ { "label": "Panel", "type": "group", "divider": true, "fields": [ "panel_style", "panel_link", "panel_link_hover", "panel_padding", "panel_image_no_padding", "height_expand", "panel_expand", "html_element" ] }, { "label": "Title", "type": "group", "divider": true, "fields": [ "title_style", "title_link", "title_hover_style", "title_decoration", "title_font_family", "title_color", "title_element", "title_align", "title_grid_width", "title_grid_column_gap", "title_grid_row_gap", "title_grid_breakpoint", "title_margin" ] }, { "label": "Meta", "type": "group", "divider": true, "fields": [ "meta_style", "meta_color", "meta_align", "meta_element", "meta_margin" ] }, { "label": "Content", "type": "group", "divider": true, "fields": [ "content_style", "content_align", "content_dropcap", "content_column", "content_column_divider", "content_column_breakpoint", "content_margin" ] }, { "label": "Image", "type": "group", "divider": true, "fields": [ "image_focal_point", "image_loading", "image_border", "image_box_shadow", "image_box_decoration", "image_box_decoration_inverse", "image_link", "image_transition", "image_transition_border", "image_hover_box_shadow", "icon_width", "icon_color", "image_align", "image_grid_width", "image_grid_column_gap", "image_grid_row_gap", "image_grid_breakpoint", "image_vertical_align", "image_margin", "image_svg_inline", "image_svg_animate", "image_svg_color", "image_text_color" ] }, { "label": "Hover Image", "type": "group", "divider": true, "fields": [ "hover_image_focal_point" ] }, { "label": "Link", "type": "group", "divider": true, "fields": ["link_style", "link_size", "link_fullwidth", "link_margin"] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/panel/element.php000064400000002276151666572170013276 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { /** * Auto-correct media rendering for dynamic content * * @var View $view */ $view = app(View::class); foreach (['', 'hover_'] as $prefix) { if ($node->props["{$prefix}image"] && $view->isVideo($node->props["{$prefix}image"])) { $node->props["{$prefix}video"] = $node->props["{$prefix}image"]; $node->props["{$prefix}image"] = null; } elseif ($node->props["{$prefix}video"] && $view->isImage($node->props["{$prefix}video"])) { $node->props["{$prefix}image"] = $node->props["{$prefix}video"]; $node->props["{$prefix}video"] = null; } } // Don't render element if content fields are empty return $node->props['title'] != '' || $node->props['meta'] != '' || $node->props['content'] != '' || $node->props['image'] || $node->props['video'] || $node->props['icon']; }, ], ]; builder/elements/panel/updates.php000064400000022517151666572170013312 0ustar00<?php namespace YOOtheme; return [ '4.5.0-beta.0.3' => function ($node) { if (Arr::get($node->props, 'link') && Arr::get($node->props, 'panel_link') && preg_match('/^card-(default|primary|secondary)|tile-/', Arr::get($node->props, 'panel_style', ''))) { $node->props['panel_link_hover'] = 'true'; } // Remove obsolete props unset( $node->props['icon_ratio'], $node->props['panel_card_size'] ); }, '4.4.0-beta.0.2' => function ($node) { if (str_starts_with(Arr::get($node->props, 'panel_style', ''), 'card-') && Arr::get($node->props, 'panel_image_no_padding') && in_array(Arr::get($node->props, 'image_align'), ['left', 'right'])) { $node->props['panel_expand'] = 'image'; } }, '4.0.0-beta.9' => function ($node) { if (Arr::get($node->props, 'panel_link') && Arr::get($node->props, 'css')) { $node->props['css'] = str_replace( '.el-element', '.el-element > *', $node->props['css'], ); } }, '3.0.0-beta.5.1' => function ($node) { if (Arr::get($node->props, 'image_box_decoration') === 'border-hover') { $node->props['image_transition_border'] = true; unset($node->props['image_box_decoration']); } }, '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '2.7.0-beta.0.5' => function ($node) { if (str_starts_with($node->props['panel_style'] ?? '', 'card-')) { if (empty($node->props['panel_card_size'])) { $node->props['panel_card_size'] = 'default'; } $node->props['panel_padding'] = $node->props['panel_card_size']; } unset($node->props['panel_card_size']); }, '2.7.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'panel_content_padding' => 'panel_padding', 'panel_size' => 'panel_card_size', 'panel_card_image' => 'panel_image_no_padding', ]); }, '2.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'title_grid_width') === 'xxlarge') { $node->props['title_grid_width'] = '2xlarge'; } if (Arr::get($node->props, 'image_grid_width') === 'xxlarge') { $node->props['image_grid_width'] = '2xlarge'; } if (!empty($node->props['icon_ratio'])) { $node->props['icon_width'] = round(20 * $node->props['icon_ratio']); unset($node->props['icon_ratio']); } }, '2.0.0-beta.5.1' => function ($node) { Arr::updateKeys($node->props, [ 'link_type' => function ($value) { if ($value === 'content') { return [ 'title_link' => true, 'image_link' => true, 'link_text' => '', ]; } elseif ($value === 'element') { return [ 'panel_link' => true, 'link_text' => '', ]; } }, ]); }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'title_breakpoint' => 'title_grid_breakpoint', 'image_breakpoint' => 'image_grid_breakpoint', 'title_gutter' => fn($value) => [ 'title_grid_column_gap' => $value, 'title_grid_row_gap' => $value, ], 'image_gutter' => fn($value) => [ 'image_grid_column_gap' => $value, 'image_grid_row_gap' => $value, ], ]); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'title_style') === 'heading-hero') { $node->props['title_style'] = 'heading-xlarge'; } if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } if (in_array($style, ['juno', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-medium'; } } if ( in_array($style, [ 'district', 'florence', 'flow', 'nioh-studio', 'summit', 'vision', ]) ) { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-large'; } } if ($style == 'lilian') { if (Arr::get($node->props, 'title_style') === 'heading-xlarge') { $node->props['title_style'] = 'heading-2xlarge'; } } }, '1.19.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { $node->props['meta_align'] = 'above-title'; } if (Arr::get($node->props, 'meta_align') === 'bottom') { $node->props['meta_align'] = 'below-title'; } if (Arr::get($node->props, 'link_style') === 'panel') { if (Arr::get($node->props, 'panel_style')) { $node->props['link_type'] = 'element'; } else { $node->props['link_type'] = 'content'; } $node->props['link_style'] = 'default'; } Arr::updateKeys($node->props, ['image_card' => 'panel_card_image']); }, '1.18.10.3' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { if (!empty($node->props['meta_margin'])) { $node->props['title_margin'] = $node->props['meta_margin']; } $node->props['meta_margin'] = ''; } }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, [ 'image_inline_svg' => 'image_svg_inline', 'image_animate_svg' => 'image_svg_animate', ]); }, '1.18.0' => function ($node) { if ( !isset($node->props['image_box_decoration']) && Arr::get($node->props, 'image_box_shadow_bottom') === true ) { $node->props['image_box_decoration'] = 'shadow'; } if ( !isset($node->props['meta_color']) && Arr::get($node->props, 'meta_style') === 'muted' ) { $node->props['meta_color'] = 'muted'; $node->props['meta_style'] = ''; } }, ]; builder/elements/panel/templates/template-media.php000064400000011176151666572170016532 0ustar00<?php if ($props['video']) { $src = $props['video']; $media = include "{$__dir}/template-video.php"; } elseif ($props['image']) { $src = $props['image']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-image.php"; } elseif ($props['icon']) { $media = include "{$__dir}/template-icon.php"; } else { return; } // Media $media->attr([ 'class' => [ 'el-image', ], ]); $transition = ''; $decoration = ''; if ($props['image'] || $props['video']) { $media->attr([ 'class' => [ 'uk-transition-{image_transition} uk-transition-opaque {@link}' => $props['image_link'] || $props['panel_link'], 'uk-inverse-{image_text_color}', 'uk-flex-1 {@panel_expand: image|both}', ], ]); if (in_array($props['panel_expand'], ['image', 'both']) || ($media->name == 'video' && $props['image_width'] && $props['image_height'])) { $media->attr([ 'class' => [ 'uk-object-cover', 'uk-object-{0}' => $props['image_focal_point'], ], 'style' => [ // Keep video responsiveness but with new proportions (because video isn't cropped like an image) 'aspect-ratio: {image_width} / {image_height};' => $media->name == 'video', ], ]); } // Transition + Hover Image if ($props['image_transition'] || $props['hover_image'] || $props['hover_video']) { $transition = $this->el('div', [ 'class' => [ 'uk-inline-clip', 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: image|both}', ], ]); } ($transition ?: $media)->attr('class', [ 'uk-border-{image_border}' => !$props['panel_style'] || ($props['panel_style'] && (!$props['panel_image_no_padding'] || $props['image_align'] == 'between')), 'uk-box-shadow-{image_box_shadow} {@!panel_style}', 'uk-box-shadow-hover-{image_hover_box_shadow} {@!panel_style} {@link}' => $props['image_link'] || $props['panel_link'], ]); // Decoration if ($props['image_box_decoration'] || $props['image_transition_border']) { $decoration = $this->el('div', [ 'class' => [ 'uk-box-shadow-bottom {@image_box_decoration: shadow}', 'tm-mask-default {@image_box_decoration: mask}', 'tm-box-decoration-{image_box_decoration: default|primary|secondary}', 'tm-box-decoration-inverse {@image_box_decoration_inverse} {@image_box_decoration: default|primary|secondary}', 'tm-transition-border {@image_transition_border}', 'uk-inline', 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: image|both}', ], ]); } } ($decoration ?: $transition ?: $media)->attr('class', [ 'uk-transition-toggle {@image_link}' => $props['image_transition'] || $props['image_transition_border'] || $props['hover_image'] || $props['hover_video'], 'uk-margin[-{image_margin}]-top {@!image_margin: remove}' => $props['image_align'] == 'between' || ($props['image_align'] == 'bottom' && !($props['panel_style'] && $props['panel_image_no_padding'])), ]); // Hover Media $hover_media = ''; if (($props['hover_image'] || $props['hover_video']) && ($props['image'] || $props['video'])) { if ($props['hover_video']) { $src = $props['hover_video']; $hover_media = include "{$__dir}/template-video.php"; } elseif ($props['hover_image']) { $src = $props['hover_image']; $focal = $props['hover_image_focal_point']; $hover_media = include "{$__dir}/template-image.php"; } $hover_media->attr([ 'class' => [ 'el-hover-image', 'uk-transition-{image_transition}', 'uk-transition-fade {@!image_transition}', 'uk-object-{hover_image_focal_point}', // `uk-cover` already sets object-fit to cover ], 'uk-cover' => true, 'uk-video' => false, // Resets 'alt' => true, // Image 'loading' => false, // Image + Iframe 'preload' => false, // Video ]); } ?> <?php if ($decoration) : ?> <?= $decoration($props) ?> <?php endif ?> <?php if ($transition) : ?> <?= $transition($props) ?> <?php endif ?> <?php if ($media) : ?> <?= $media($props, '') ?> <?php endif ?> <?php if ($hover_media) : ?> <?= $hover_media($props, '') ?> <?php endif ?> <?php if ($transition) : ?> <?= $transition->end() ?> <?php endif ?> <?php if ($decoration) : ?> <?= $decoration->end() ?> <?php endif ?> builder/elements/panel/templates/template-link.php000064400000003413151666572170016403 0ustar00<?php $link = $props['link'] ? $this->el('a', [ 'href' => ['{link}'], 'aria-label' => ['{link_aria_label}'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; if ($link && $props['panel_link']) { $link_container->attr($link->attrs + [ 'class' => [ 'uk-link-toggle', ], ]); $props['title'] = $this->striptags($props['title']); $props['meta'] = $this->striptags($props['meta']); $props['content'] = $this->striptags($props['content']); if ($props['title'] != '' && $props['title_hover_style'] != 'reset') { $props['title'] = $this->el('span', [ 'class' => [ 'uk-link-{title_hover_style: heading}', 'uk-link {!title_hover_style}', ], ], $props['title'])->render($props); } } if ($link && $props['title'] != '' && $props['title_link']) { $props['title'] = $link($props, [], $this->striptags($props['title'])); // title_hover_style is set on title } if ($link && $props['image'] && $props['image_link']) { $props['image'] = $link($props, [ 'class' => [ 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: image|both}', ], ], $props['image']); } if ($link && $props['link_text']) { if ($props['panel_link']) { $link = $this->el('div'); } $link->attr('class', [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-muted|link-text} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', // Keep link style if panel link 'uk-link {@link_style:} {@panel_link}', 'uk-text-muted {@link_style: link-muted} {@panel_link}', ]); } return $link; builder/elements/panel/templates/template-image.php000064400000000714151666572170016531 0ustar00<?php $image = $this->el('image', [ 'src' => $src, 'alt' => $props['image_alt'], 'loading' => $props['image_loading'] ? false : null, 'width' => $props['image_width'], 'height' => $props['image_height'], 'focal_point' => $focal, 'uk-svg' => $props['image_svg_inline'], 'thumbnail' => true, 'class' => [ 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($src) == 'svg', ], ]); return $image; builder/elements/panel/templates/template-video.php000064400000001344151666572170016555 0ustar00<?php if ($iframe = $this->iframeVideo($src)) { $video = $this->el('iframe', [ 'src' => $iframe, 'uk-responsive' => true, 'loading' => ['lazy {@image_loading}'], 'class' => [ 'uk-disabled', ], 'uk-video' => [ 'automute: true;', ], ]); } else { $video = $this->el('video', [ 'src' => $src, 'controls' => false, 'loop' => true, 'autoplay' => true, 'muted' => true, 'playsinline' => true, 'preload' => ['none {@image_loading}'], 'uk-video' => true, ]); } $video->attr([ 'width' => $props['image_width'], 'height' => $props['image_height'], ]); return $video; builder/elements/panel/templates/template-icon.php000064400000000345151666572170016377 0ustar00<?php $icon = $this->el('span', [ 'class' => [ 'uk-text-{icon_color}', ], 'uk-icon' => [ 'icon: {icon};', 'width: {icon_width};', 'height: {icon_width};', ], ]); return $icon; builder/elements/panel/templates/content.php000064400000002774151666572170015320 0ustar00<?php if ($props['image'] || $props['video'] || $props['hover_image'] || $props['hover_video'] || $props['title'] != '' || $props['meta'] != '' || $props['content'] != '' || $props['link']) : ?> <div> <?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['video']) : ?> <?php if ($this->iframeVideo($props['video'], [], false)) : ?> <iframe src="<?= $props['video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['hover_image']) : ?> <img src="<?= $props['hover_image'] ?>" alt> <?php endif ?> <?php if ($props['hover_video']) : ?> <?php if ($this->iframeVideo($props['hover_video'], [], false)) : ?> <iframe src="<?= $props['hover_video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['hover_video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $props['title_element'] ?>><?= $props['title'] ?></<?= $props['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?></a></p> <?php endif ?> </div> <?php endif ?> builder/elements/panel/templates/template.php000064400000021522151666572170015451 0ustar00<?php // Resets if ($props['icon'] && !($props['image'] || $props['video'])) { $props['panel_image_no_padding'] = ''; } if ($props['panel_style'] || !($props['image'] || $props['video'])) { $props['image_box_decoration'] = ''; $props['image_transition_border'] = ''; } if ($props['panel_link']) { $props['title_link'] = ''; $props['image_link'] = ''; } if (!$props['height_expand'] && !(($props['image'] || $props['video']) && in_array($props['image_align'], ['left', 'right']))) { $props['panel_expand'] = ''; } if (!($props['panel_style'] || (!$props['panel_style'] && ($props['image'] || $props['video']) && $props['image_align'] != 'between'))) { $props['panel_padding'] = ''; } // New logic shortcuts $props['flex_column_align'] = ''; $props['flex_column_align_fallback'] = ''; if ($props['panel_expand']) { $horizontal = ['left', 'center', 'right']; $vertical = ['top', 'middle', 'bottom']; $props['flex_column_align'] = str_replace($horizontal, $vertical, $props['text_align'] ?? ''); $props['flex_column_align_fallback'] = str_replace($horizontal, $vertical, $props['text_align_fallback'] ?? ''); // `uk-flex-top` prevents child inline elements from taking the whole width, needed for floating shadow + hover image if (!$props['panel_style']) { if ($props['text_align'] && $props['text_align_breakpoint'] && !$props['text_align_fallback']) { $props['flex_column_align_fallback'] = 'top'; } elseif (!$props['text_align']) { $props['flex_column_align'] = 'top'; } } } // Image $props['image'] = $this->render("{$__dir}/template-media", compact('props')); // Panel/Card/Tile $el = $this->el($props['html_element'] ?: 'div', [ 'class' => [ // Expand to column height 'uk-flex-1 {@height_expand}', 'uk-flex uk-flex-column {@height_expand} {@link} {@panel_link}', ], ]); // Link Container $link_container = $props['link'] && $props['panel_link'] ? $this->el('a', [ 'class' => [ 'uk-flex-1 {@height_expand}', 'uk-display-block {@!height_expand}', ], ]) : null; ($link_container ?: $el)->attr([ 'class' => [ 'uk-panel [uk-{panel_style: tile-.*}] {@panel_style: |tile-.*}', 'uk-card uk-{panel_style: card-.*} [uk-card-{!panel_padding: |default}]', 'uk-tile-hover {@panel_style: tile-.*} {@panel_link} {@link} {@panel_link_hover}', 'uk-card-hover {@panel_style: card-(default|primary|secondary)} {@panel_link} {@link} {@panel_link_hover}', 'uk-transition-toggle {@image} {@panel_link}' => $props['image_transition'] || $props['image_transition_border'] || $props['hover_image'] || $props['hover_video'], 'uk-flex uk-flex-column {@panel_expand}', // Image not wrapped in card media container or grid 'uk-flex-{flex_column_align}[@{text_align_breakpoint} [uk-flex-{flex_column_align_fallback}]] {@panel_expand}' => !($props['panel_style'] && str_starts_with($props['panel_style'], 'card-') && $props['image'] && $props['panel_image_no_padding'] && $props['image_align'] != 'between') && !in_array($props['image_align'], ['left', 'right']), ], ]); // Padding $content_container = ''; if ($props['panel_padding'] && $props['image'] && (!$props['panel_style'] || $props['panel_image_no_padding']) && $props['image_align'] != 'between') { $content_container = $this->el('div', [ 'class' => [ 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: content|both}', // Image not wrapped in card media container or grid 'uk-width-1-1 {@flex_column_align} {@panel_expand}' => !($props['panel_style'] && str_starts_with($props['panel_style'], 'card-') && $props['image'] && $props['panel_image_no_padding'] && $props['image_align'] != 'between') && !in_array($props['image_align'], ['left', 'right']), ], ]); } ($content_container ?: $link_container ?: $el)->attr('class', [ 'uk-padding[-{!panel_padding: default}] {@panel_style: |tile-.*} {@panel_padding}', 'uk-card-body {@panel_style: card-.*} {@panel_padding}', ]); // Image align $grid = ''; $cell_image = ''; $cell_content = ''; if ($props['image'] && in_array($props['image_align'], ['left', 'right'])) { $grid = $this->el('div', [ 'class' => [ $props['panel_style'] && $props['panel_image_no_padding'] ? 'uk-grid-collapse' : ($props['image_grid_column_gap'] == $props['image_grid_row_gap'] ? 'uk-grid-{image_grid_column_gap}' : '[uk-grid-column-{image_grid_column_gap}] [uk-grid-row-{image_grid_row_gap}]'), // Center vertically 'uk-flex-middle {@image_vertical_align} {@!panel_expand}', // Expand 'uk-flex-1 {@panel_expand}', 'uk-flex-column {@panel_expand} uk-flex-row@{image_grid_breakpoint}', ], 'uk-grid' => true, ]); $cell_image = $this->el('div', [ 'class' => [ 'uk-width-{image_grid_width}[@{image_grid_breakpoint}]', // Order 'uk-flex-last[@{image_grid_breakpoint}] {@image_align: right}', // Center vertically and keep text align 'uk-flex uk-flex-middle[@{image_grid_breakpoint}] uk-flex-{text_align} {@image_vertical_align} {@panel_expand: content}', 'uk-flex-{text_align}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]] {@panel_expand: content}', // Expand, also when stacking 'uk-flex uk-flex-column {@panel_expand: image|both} [uk-flex-1 uk-flex-initial@{image_grid_breakpoint}]', 'uk-flex-{flex_column_align}[@{text_align_breakpoint} [uk-flex-{flex_column_align_fallback}]] {@panel_expand: image|both}', ], ]); $cell_content = $this->el('div', [ 'class' => [ 'uk-width-expand', // Center vertically 'uk-flex uk-flex-column uk-flex-center[@{image_grid_breakpoint}] {@image_vertical_align} {@panel_expand: image}', // Expand, also when stacking but only for `content` 'uk-flex uk-flex-column {@panel_expand: content|both}', 'uk-flex-1 {@image_grid_breakpoint} {@panel_expand: content}', 'uk-flex-1[@{image_grid_breakpoint} uk-flex-none] {@panel_expand: both}', 'uk-flex-none uk-flex-1@{image_grid_breakpoint} {@panel_expand: image}', ], ]); } ($content_container ?: $cell_content ?: $link_container ?: $el)->attr('class', [ 'uk-margin-remove-first-child', ]); // Link $link = include "{$__dir}/template-link.php"; // Card Media (Needs to be after link) if ($props['panel_style'] && str_starts_with($props['panel_style'], 'card-') && $props['image'] && $props['panel_image_no_padding'] && $props['image_align'] != 'between') { $props['image'] = $this->el('div', [ 'class' => [ 'uk-card-media-{image_align}', 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: image|both}', 'uk-flex-{flex_column_align}[@{text_align_breakpoint} [uk-flex-{flex_column_align_fallback}]] {@panel_expand: image|both} {@!image_align: left|right}', ], 'uk-toggle' => [ 'cls: uk-card-media-{image_align} uk-card-media-top; mode: media; media: @{image_grid_breakpoint} {@image_align: left|right}', ] ], $props['image'])->render($props); } ?> <?= $el($props, $attrs) ?> <?php if ($link_container) : ?> <?= $link_container($props) ?> <?php endif ?> <?php if ($grid) : ?> <?= $grid($props) ?> <?php endif ?> <?php if ($cell_image) : ?> <?= $cell_image($props) ?> <?php endif ?> <?php if (in_array($props['image_align'], ['left', 'right'])) : ?> <?= $props['image'] ?> <?php endif ?> <?php if ($cell_image) : ?> <?= $cell_image->end() ?> <?php endif ?> <?php if ($cell_content) : ?> <?= $cell_content($props) ?> <?php endif ?> <?php if ($props['image_align'] == 'top') : ?> <?= $props['image'] ?> <?php endif ?> <?php if ($content_container) : ?> <?= $content_container($props) ?> <?php endif ?> <?= $this->render("{$__dir}/template-content", compact('props', 'link')) ?> <?php if ($content_container) : ?> <?= $content_container->end() ?> <?php endif ?> <?php if ($props['image_align'] == 'bottom') : ?> <?= $props['image'] ?> <?php endif ?> <?php if ($cell_content) : ?> <?= $cell_content->end() ?> <?php endif ?> <?php if ($grid) : ?> <?= $grid->end() ?> <?php endif ?> <?php if ($link_container) : ?> <?= $link_container->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/panel/templates/template-content.php000064400000012507151666572170017124 0ustar00<?php // Title $title = $this->el($props['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-card-title {@panel_style} {@!title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-link-{title_hover_style} {@title_link}', // Set here to style links which already come with dynamic content (WP taxonomy links) 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', 'uk-flex-1 {@panel_expand: content|both}' => !$props['content'] && (!$props['meta'] || $props['meta_align'] == 'above-title') && (!$props['image'] || $props['image_align'] != 'between'), ], ]); // Meta $meta = $this->el($props['meta_element'], [ 'class' => [ 'el-meta', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($props['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $props['meta_element'] != 'div', 'uk-flex-1 {@panel_expand: content|both}' => $props['meta_align'] == 'below-content' || (!$props['content'] && ($props['meta_align'] == 'above-content' || ($props['meta_align'] == 'below-title' && (!$props['image'] || $props['image_align'] != 'between')))), ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-{content_style}', '[uk-text-left{@content_align}]', 'uk-dropcap {@content_dropcap}', 'uk-column-{content_column}[@{content_column_breakpoint}]', 'uk-column-divider {@content_column} {@content_column_divider}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($props['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), 'uk-flex-1 {@panel_expand: content|both}' => !($props['meta'] && $props['meta_align'] == 'below-content'), ], ]); // Link $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', 'uk-width-1-1 {@link_fullwidth} {@panel_expand}', ], ]); // Title Grid $grid = $this->el('div', [ 'class' => [ 'uk-child-width-expand', $props['title_grid_column_gap'] == $props['title_grid_row_gap'] ? 'uk-grid-{title_grid_column_gap}' : '[uk-grid-column-{title_grid_column_gap}] [uk-grid-row-{title_grid_row_gap}]', 'uk-margin[-{title_margin}]-top {@!title_margin: remove} {@image_align: top}' => !$props['meta'] || $props['meta_align'] != 'above-title', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove} {@image_align: top} {@meta} {@meta_align: above-title}', 'uk-flex-1 {@panel_expand: content|both}', ], 'uk-grid' => true, ]); $cell_title = $this->el('div', [ 'class' => [ 'uk-width-{!title_grid_width: expand}[@{title_grid_breakpoint}]', 'uk-margin-remove-first-child', ], ]); $cell_content = $this->el('div', [ 'class' => [ 'uk-width-auto[@{title_grid_breakpoint}] {@title_grid_width: expand}', 'uk-margin-remove-first-child', 'uk-flex uk-flex-column {@panel_expand: content|both}', ], ]); ?> <?php if ($props['title'] != '' && $props['title_align'] == 'left') : ?> <?= $grid($props) ?> <?= $cell_title($props) ?> <?php endif ?> <?php if ($props['meta'] != '' && $props['meta_align'] == 'above-title') : ?> <?= $meta($props, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($props) ?> <?php if ($props['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($props['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $props['meta_align'] == 'below-title') : ?> <?= $meta($props, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '' && $props['title_align'] == 'left') : ?> <?= $cell_title->end() ?> <?= $cell_content($props) ?> <?php endif ?> <?php if ($props['image_align'] == 'between') : ?> <?= $props['image'] ?> <?php endif ?> <?php if ($props['meta'] != '' && $props['meta_align'] == 'above-content') : ?> <?= $meta($props, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($props, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $props['meta_align'] == 'below-content') : ?> <?= $meta($props, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && $props['link_text']) : ?> <?= $link_container($props, $link($props, $props['link_text'])) ?> <?php endif ?> <?php if ($props['title'] != '' && $props['title_align'] == 'left') : ?> <?= $cell_content->end() ?> <?= $grid->end() ?> <?php endif ?> builder/elements/image/element.php000064400000000350151666572170013250 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return (bool) $node->props['image']; }, ], ]; builder/elements/image/element.json000064400000032156151666572170013443 0ustar00{ "@import": "./element.php", "name": "image", "title": "Image", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "margin": "default", "image_svg_color": "emphasis" }, "placeholder": { "props": { "image": "${url:~yootheme/theme/assets/images/element-image-placeholder.png}" } }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "image": "${builder.image}", "image_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "image" }, "image_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "image" }, "image_alt": { "label": "Image Alt", "description": "Enter the image alt attribute.", "source": true, "enable": "image" }, "link": "${builder.link}", "link_aria_label": "${builder.link_aria_label}", "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" } }, "image_box_shadow": { "label": "Box Shadow", "description": "Select the image box shadow size.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" } }, "image_hover_box_shadow": { "label": "Hover Box Shadow", "description": "Select the image box shadow size on hover.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "link" }, "image_box_decoration": { "label": "Box Decoration", "description": "Select the image box decoration style.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Floating Shadow": "shadow", "Mask": "mask" } }, "image_box_decoration_inverse": { "type": "checkbox", "text": "Inverse style", "enable": "$match(image_box_decoration, '^(default|primary|secondary)$')" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS" }, "image_svg_animate": { "type": "checkbox", "text": "Animate strokes", "enable": "image_svg_inline" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "image_svg_inline" }, "height_expand": { "label": "Height", "description": "Expand the height of the element to fill the available space in the column or force the height to one viewport. The image will cover the element's content box.", "type": "checkbox", "text": "Fill the available column space" }, "image_viewport_height": { "type": "checkbox", "text": "Force viewport height", "enable": "!height_expand" }, "text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true }, "link_target": { "label": "Link Target", "type": "select", "options": { "Same Window": "", "New Window": "blank", "Modal": "modal" } }, "lightbox_width": { "attrs": { "placeholder": "auto" }, "enable": "link_target == 'modal'" }, "lightbox_height": { "attrs": { "placeholder": "auto" }, "enable": "link_target == 'modal'" }, "lightbox_image_focal_point": { "label": "Modal Image Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "link_target == 'modal'" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "container_padding_remove": "${builder.container_padding_remove}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-image</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-image", ".el-link"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "image", { "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "name": "_image_dimension", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_alt", "link", "link_aria_label" ] }, { "title": "Settings", "fields": [ { "label": "Image", "type": "group", "divider": true, "fields": [ "image_focal_point", "image_loading", "image_border", "image_box_shadow", "image_hover_box_shadow", "image_box_decoration", "image_box_decoration_inverse", "image_svg_inline", "image_svg_animate", "image_svg_color", "height_expand", "image_viewport_height", "text_color" ] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_target", { "label": "Modal Width/Height", "description": "Set the width and height for the modal content, i.e. image, video or iframe.", "type": "grid", "width": "1-2", "fields": ["lightbox_width", "lightbox_height"] }, "lightbox_image_focal_point" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility", "container_padding_remove" ] } ] }, "${builder.advanced}" ] } } } builder/elements/image/images/icon.svg000064400000001055151666572170014027 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <polyline fill="none" stroke="#444" stroke-width="2" points="6.161,19.424 12.051,13.525 19.424,20.897" /> <path fill="#444" d="M23.504,8C24.325,8,25,8.672,25,9.502C25,10.328,24.325,11,23.504,11C22.674,11,22,10.329,22,9.502 C22,8.672,22.674,8,23.504,8z" /> <rect width="28" height="22" fill="none" stroke="#444" stroke-width="2" x="1" y="4" /> <polyline fill="none" stroke="#444" stroke-width="2" points="16.475,17.949 18.688,15.736 23.839,20.897" /> </svg> builder/elements/image/images/iconSmall.svg000064400000000624151666572170015021 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <circle fill="#444" cx="16.1" cy="6.1" r="1.1" /> <rect width="19" height="15" fill="none" stroke="#444" x="0.5" y="2.5" /> <polyline fill="none" stroke="#444" stroke-width="1.01" points="4,13 8,9 13,14" /> <polyline fill="none" stroke="#444" stroke-width="1.01" points="11,12 12.5,10.5 16,14" /> </svg> builder/elements/image/templates/content.php000064400000000421151666572170015266 0ustar00<?php if ($props['image'] && $props['link']) : ?> <a href="<?= $props['link'] ?>"><img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"></a> <?php elseif ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> builder/elements/image/templates/template.php000064400000010401151666572170015426 0ustar00<?php $props['image_hover_box_shadow'] = $props['link'] ? $props['image_hover_box_shadow'] : false; $el = $this->el('div', [ 'class' => [ // Expand to column height 'uk-flex-1 uk-flex {@height_expand}', ], ]); // Image $image = $this->el('image', [ 'class' => [ 'el-image', 'uk-border-{image_border}', 'uk-box-shadow-{image_box_shadow}', 'uk-box-shadow-hover-{image_hover_box_shadow}', 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($props['image']) == 'svg', 'uk-object-cover [uk-object-{image_focal_point}]' => $props['image_viewport_height'] || $props['height_expand'], 'uk-inverse-{text_color}', ], 'style' => [ 'height: 100vh; {@image_viewport_height} {@!height_expand}', // Fix bug in Safari not stretching an image beyond its intrinsic height 'aspect-ratio: auto; {@height_expand}', ], 'src' => $props['image'], 'alt' => $props['image_alt'], 'loading' => $props['image_loading'] ? false : null, 'width' => $props['image_width'], 'height' => $props['image_height'], 'focal_point' => $props['image_focal_point'], 'uk-svg' => $props['image_svg_inline'], 'thumbnail' => true, ]); // Box decoration $decoration = $this->el('div', [ 'class' => [ 'uk-box-shadow-bottom {@image_box_decoration: shadow}', 'tm-mask-default {@image_box_decoration: mask}', 'tm-box-decoration-{image_box_decoration: default|primary|secondary}', 'tm-box-decoration-inverse {@image_box_decoration_inverse} {@image_box_decoration: default|primary|secondary}', 'uk-inline {@!image_box_decoration: |shadow}', 'uk-flex {@height_expand}', ], ]); // Link and Lightbox $link = $this->el('a', [ 'class' => [ 'el-link', 'uk-box-shadow-bottom {@image_box_decoration: shadow}', 'tm-mask-default {@image_box_decoration: mask}', 'tm-box-decoration-{image_box_decoration: default|primary|secondary}', 'tm-box-decoration-inverse {@image_box_decoration_inverse} {@image_box_decoration: default|primary|secondary}', 'uk-inline {@!image_box_decoration: |shadow}', 'uk-flex {@height_expand}', ], 'href' => ['{link}'], 'aria-label' => ['{link_aria_label}'], 'target' => ['_blank {@link_target: blank}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), // Target Modal? 'uk-toggle' => $props['link_target'] === 'modal', ]); if ($props['link'] && $props['link_target'] === 'modal') { $target = $this->el('image', [ 'src' => $props['link'], 'width' => $props['lightbox_width'], 'height' => $props['lightbox_height'], ]); if ($this->isImage($props['link'])) { $lightbox = $target($props, [ 'focal_point' => $props['lightbox_image_focal_point'], 'thumbnail' => true, ]); } else { $video = $this->isVideo($props['link']); $iframe = $this->iframeVideo($props['link'], [], false); $lightbox = $video && !$iframe ? $target($props, [ // Video 'controls' => true, 'uk-video' => true, ], '', 'video') : $target($props, [ // Iframe 'src' => $iframe ?: $props['link'], 'allowfullscreen' => true, 'loading' => 'lazy', 'uk-video' => $video || $iframe, 'uk-responsive' => true, ], '', 'iframe'); } $connect_id = "js-{$this->uid()}"; $props['link'] = "#{$connect_id}"; } ?> <?= $el($props, $attrs) ?> <?php if ($props['link']) : ?> <?= $link($props, $image($props)) ?> <?php elseif ($props['image_box_decoration']) : ?> <?= $decoration($props, $image($props)) ?> <?php else : ?> <?= $image($props) ?> <?php endif ?> <?php if ($props['link'] && $props['link_target'] === 'modal') : ?> <?php // uk-flex-top is needed to make vertical margin work for IE11 ?> <div id="<?= $connect_id ?>" class="uk-flex-top uk-modal" uk-modal> <div class="uk-modal-dialog uk-width-auto uk-margin-auto-vertical"> <button class="uk-modal-close-outside" type="button" uk-close></button> <?= $lightbox ?> </div> </div> <?php endif ?> <?= $el->end() ?> builder/elements/image/updates.php000064400000003330151666572170013265 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset($node->props['inline_align']); }, '4.3.0-beta.0.2' => function ($node, $params) { $search = 'uk-height-match="target: !.tm-height-min-1-1, * > img; row: false"'; if (str_contains(Arr::get($node->props, 'attributes', ''), $search)) { $node->props['height_expand'] = true; $node->props['attributes'] = str_replace($search, '', $node->props['attributes']); $pattern = '/.el-image\s*\{\s*width: 100%;\s*object-fit: cover;\s*}/'; if (preg_match($pattern, Arr::get($node->props, 'css', ''), $matches)) { $node->props['css'] = str_replace($matches[0], '', $node->props['css']); } $row = $params['builder']->parent($params['path'], 'row'); if ($row) { $row->props['class'] = trim(($row->props['class'] ?? '') . ' uk-height-1-1'); } } }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, [ 'image_inline_svg' => 'image_svg_inline', 'image_animate_svg' => 'image_svg_animate', ]); }, '1.18.0' => function ($node) { if (Arr::get($node->props, 'link_target') === true) { $node->props['link_target'] = 'blank'; } if ( !isset($node->props['image_box_decoration']) && Arr::get($node->props, 'image_box_shadow_bottom') === true ) { $node->props['image_box_decoration'] = 'shadow'; } }, ]; builder/elements/panel-slider_item/templates/template-image.php000064400000000724151666572170021030 0ustar00<?php $image = $this->el('image', [ 'src' => $src, 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $focal, 'uk-svg' => $element['image_svg_inline'], 'thumbnail' => true, 'class' => [ 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($src) == 'svg', ], ]); return $image; builder/elements/panel-slider_item/templates/template-icon.php000064400000000364151666572170020676 0ustar00<?php $icon = $this->el('span', [ 'class' => [ 'uk-text-{icon_color}', ], 'uk-icon' => [ 'icon: {0};' => $props['icon'], 'width: {icon_width};', 'height: {icon_width};', ], ]); return $icon; builder/elements/panel-slider_item/templates/template-content.php000064400000012716151666572170021424 0ustar00<?php // Title $title = $this->el($element['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-card-title {@panel_style} {@!title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-link-{title_hover_style} {@title_link}', // Set here to style links which already come with dynamic content (WP taxonomy links) 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', 'uk-flex-1 {@panel_expand: content|both}' => !$props['content'] && (!$props['meta'] || $element['meta_align'] == 'above-title') && (!$props['image'] || $element['image_align'] != 'between'), ], ]); // Meta $meta = $this->el($element['meta_element'], [ 'class' => [ 'el-meta', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($element['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $element['meta_element'] != 'div', 'uk-flex-1 {@panel_expand: content|both}' => $element['meta_align'] == 'below-content' || (!$props['content'] && ($element['meta_align'] == 'above-content' || ($element['meta_align'] == 'below-title' && (!$props['image'] || $element['image_align'] != 'between')))), ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-{content_style}', '[uk-text-left{@content_align}]', 'uk-dropcap {@content_dropcap}', 'uk-column-{content_column}[@{content_column_breakpoint}]', 'uk-column-divider {@content_column} {@content_column_divider}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($element['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), 'uk-flex-1 {@panel_expand: content|both}' => !($props['meta'] && $element['meta_align'] == 'below-content'), ], ]); // Link $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', 'uk-width-1-1 {@link_fullwidth} {@panel_expand}', ], ]); // Title Grid $grid = $this->el('div', [ 'class' => [ 'uk-child-width-expand', $element['title_grid_column_gap'] == $element['title_grid_row_gap'] ? 'uk-grid-{title_grid_column_gap}' : '[uk-grid-column-{title_grid_column_gap}] [uk-grid-row-{title_grid_row_gap}]', 'uk-margin[-{title_margin}]-top {@!title_margin: remove} {@image_align: top}' => !$props['meta'] || $element['meta_align'] != 'above-title', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove} {@image_align: top} {@meta_align: above-title}' => $props['meta'], 'uk-flex-1 {@panel_expand: content|both}', ], 'uk-grid' => true, ]); $cell_title = $this->el('div', [ 'class' => [ 'uk-width-{!title_grid_width: expand}[@{title_grid_breakpoint}]', 'uk-margin-remove-first-child', ], ]); $cell_content = $this->el('div', [ 'class' => [ 'uk-width-auto[@{title_grid_breakpoint}] {@title_grid_width: expand}', 'uk-margin-remove-first-child', 'uk-flex uk-flex-column {@panel_expand: content|both}', ], ]); ?> <?php if ($props['title'] != '' && $element['title_align'] == 'left') : ?> <?= $grid($element) ?> <?= $cell_title($element) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($element) ?> <?php if ($element['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($element['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '' && $element['title_align'] == 'left') : ?> <?= $cell_title->end() ?> <?= $cell_content($element) ?> <?php endif ?> <?php if ($element['image_align'] == 'between') : ?> <?= $props['image'] ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($element, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && ($props['link_text'] || $element['link_text'])) : ?> <?= $link_container($element, $link($element, $props['link_text'] ?: $element['link_text'])) ?> <?php endif ?> <?php if ($props['title'] != '' && $element['title_align'] == 'left') : ?> <?= $cell_content->end() ?> <?= $grid->end() ?> <?php endif ?> builder/elements/panel-slider_item/templates/template-media.php000064400000007043151666572170021026 0ustar00<?php if ($props['video']) { $src = $props['video']; $media = include "{$__dir}/template-video.php"; } elseif ($props['image']) { $src = $props['image']; $focal = $props['image_focal_point']; $media = include "{$__dir}/template-image.php"; } elseif ($props['icon']) { $media = include "{$__dir}/template-icon.php"; } else { return; } // Media $media->attr([ 'class' => [ 'el-image', ], ]); $transition = ''; if ($props['image'] || $props['video']) { $media->attr([ 'class' => [ 'uk-transition-{image_transition} uk-transition-opaque' => $props['link'] && ($element['image_link'] || $element['panel_link']), 'uk-inverse-{image_text_color}', 'uk-flex-1 {@panel_expand: image|both}' ], ]); if (in_array($element['panel_expand'], ['image', 'both']) || ($media->name == 'video' && $element['image_width'] && $element['image_height'])) { $media->attr([ 'class' => [ 'uk-object-cover', 'uk-object-{0}' => $props['image_focal_point'], ], 'style' => [ // Keep video responsiveness but with new proportions (because video isn't cropped like an image) 'aspect-ratio: {image_width} / {image_height};' => $media->name == 'video', ], ]); } // Transition + Hover Image if ($element['image_transition'] || $props['hover_image'] || $props['hover_video']) { $transition = $this->el('div', [ 'class' => [ 'uk-inline-clip', 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: image|both}', ], ]); } ($transition ?: $media)->attr('class', [ 'uk-border-{image_border}' => !$element['panel_style'] || ($element['panel_style'] && (!$element['panel_image_no_padding'] || $element['image_align'] == 'between')), ]); } ($transition ?: $media)->attr('class', [ 'uk-transition-toggle {@image_link}' => $element['image_transition'] || $props['hover_image'] || $props['hover_video'], 'uk-margin[-{image_margin}]-top {@!image_margin: remove}' => $element['image_align'] == 'between' || ($element['image_align'] == 'bottom' && !($element['panel_style'] && $element['panel_image_no_padding'])), ]); // Hover Media $hover_media = ''; if (($props['hover_image'] || $props['hover_video']) && ($props['image'] || $props['video'])) { if ($props['hover_video']) { $src = $props['hover_video']; $hover_media = include "{$__dir}/template-video.php"; } elseif ($props['hover_image']) { $src = $props['hover_image']; $focal = $props['hover_image_focal_point']; $hover_media = include "{$__dir}/template-image.php"; } $hover_media->attr([ 'class' => [ 'el-hover-image', 'uk-transition-{image_transition}', 'uk-transition-fade {@!image_transition}', 'uk-object-{0}' => $props['hover_image_focal_point'], // `uk-cover` already sets object-fit to cover ], 'uk-cover' => true, 'uk-video' => false, // Resets 'alt' => true, // Image 'loading' => false, // Image + Iframe 'preload' => false, // Video ]); } ?> <?php if ($transition) : ?> <?= $transition($element) ?> <?php endif ?> <?php if ($media) : ?> <?= $media($element, '') ?> <?php endif ?> <?php if ($hover_media) : ?> <?= $hover_media($element, '') ?> <?php endif ?> <?php if ($transition) : ?> <?= $transition->end() ?> <?php endif ?> builder/elements/panel-slider_item/templates/template-video.php000064400000001350151666572170021050 0ustar00<?php if ($iframe = $this->iframeVideo($src)) { $video = $this->el('iframe', [ 'src' => $iframe, 'uk-responsive' => true, 'loading' => ['lazy {@image_loading}'], 'class' => [ 'uk-disabled', ], 'uk-video' => [ 'automute: true;', ], ]); } else { $video = $this->el('video', [ 'src' => $src, 'controls' => false, 'loop' => true, 'autoplay' => true, 'muted' => true, 'playsinline' => true, 'preload' => ['none {@image_loading}'], 'uk-video' => true, ]); } $video->attr([ 'width' => $element['image_width'], 'height' => $element['image_height'], ]); return $video; builder/elements/panel-slider_item/templates/template-link.php000064400000003535151666572170020706 0ustar00<?php $link = $props['link'] ? $this->el('a', [ 'href' => $props['link'], 'aria-label' => $props['link_aria_label'] ?: $element['link_aria_label'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; if ($link && $element['panel_link']) { $link_container->attr($link->attrs + [ 'class' => [ 'uk-link-toggle', ], ]); $props['title'] = $this->striptags($props['title']); $props['meta'] = $this->striptags($props['meta']); $props['content'] = $this->striptags($props['content']); if ($props['title'] != '' && $element['title_hover_style'] != 'reset') { $props['title'] = $this->el('span', [ 'class' => [ 'uk-link-{title_hover_style: heading}', 'uk-link {!title_hover_style}', ], ], $props['title'])->render($element); } } if ($link && $props['title'] != '' && $element['title_link']) { $props['title'] = $link($element, [], $this->striptags($props['title'])); // title_hover_style is set on title } if ($link && $props['image'] && $element['image_link']) { $props['image'] = $link($element, [ 'class' => [ 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: image|both}', ], ], $props['image']); } if ($link && ($props['link_text'] || $element['link_text'])) { if ($element['panel_link']) { $link = $this->el('div'); } $link->attr('class', [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-muted|link-text} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', // Keep link style if panel link 'uk-link {@link_style:} {@panel_link}', 'uk-text-muted {@link_style: link-muted} {@panel_link}', ]); } return $link; builder/elements/panel-slider_item/templates/content.php000064400000002270151666572170017605 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['video']) : ?> <?php if ($this->iframeVideo($props['video'], [], false)) : ?> <iframe src="<?= $props['video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['hover_image']) : ?> <img src="<?= $props['hover_image'] ?>" alt> <?php endif ?> <?php if ($props['hover_video']) : ?> <?php if ($this->iframeVideo($props['hover_video'], [], false)) : ?> <iframe src="<?= $props['hover_video'] ?>"></iframe> <?php else : ?> <video src="<?= $props['hover_video'] ?>"></video> <?php endif ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $element['title_element'] ?>><?= $props['title'] ?></<?= $element['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a></p> <?php endif ?> builder/elements/panel-slider_item/templates/template.php000064400000022120151666572170017742 0ustar00<?php // Override default settings $element['panel_style'] = $props['panel_style'] ?: $element['panel_style']; // Resets if ($props['icon'] && !($props['image'] || $props['video'])) { $element['panel_image_no_padding'] = ''; } if (!($element['panel_style'] || (!$element['panel_style'] && ($props['image'] || $props['video']) && $element['image_align'] != 'between'))) { $element['panel_padding'] = ''; } // Override default settings if (!$element['panel_match'] && !(($props['image'] || $props['video']) && in_array($element['image_align'], ['left', 'right']))) { $element['panel_expand'] = ''; } $element['image_text_color'] = $props['image_text_color'] ?: $element['image_text_color']; // New logic shortcuts $element['flex_column_align'] = ''; $element['flex_column_align_fallback'] = ''; if ($element['panel_expand']) { $horizontal = ['left', 'center', 'right']; $vertical = ['top', 'middle', 'bottom']; $element['flex_column_align'] = str_replace($horizontal, $vertical, $element['text_align'] ?? ''); $element['flex_column_align_fallback'] = str_replace($horizontal, $vertical, $element['text_align_fallback'] ?? ''); // `uk-flex-top` prevents child inline elements from taking the whole width, needed for floating shadow + hover image if (!$element['panel_style']) { if ($element['text_align'] && $element['text_align_breakpoint'] && !$element['text_align_fallback']) { $element['flex_column_align_fallback'] = 'top'; } elseif (!$element['text_align']) { $element['flex_column_align'] = 'top'; } } } // Image $props['image'] = $this->render("{$__dir}/template-media", compact('props', 'element')); // Panel/Card/Tile $el = $this->el($props['item_element'] ?: 'div', [ 'class' => [ 'el-item', // Can't use `uk-grid-item-match` because `flex-wrap: warp` creates a multi-line flex container which doesn't shrink the child height if its content is larger 'uk-width-1-1 {@panel_match}', 'uk-flex uk-flex-column {@panel_match} {@panel_link}' => $props['link'], ], ]); // Link Container $link_container = $props['link'] && $element['panel_link'] ? $this->el('a', [ 'class' => [ 'uk-flex-1 {@panel_match}', 'uk-display-block {@!panel_match}', ], ]) : null; ($link_container ?: $el)->attr([ 'class' => [ 'uk-panel [uk-{panel_style: tile-.*}] {@panel_style: |tile-.*}', 'uk-card uk-{panel_style: card-.*} [uk-card-{!panel_padding: |default}]', 'uk-tile-hover {@panel_style: tile-.*} {@panel_link} {@panel_link_hover}' => $props['link'], 'uk-card-hover {@panel_style: card-(default|primary|secondary)} {@panel_link} {@panel_link_hover}' => $props['link'], 'uk-transition-toggle {@panel_link}' => $props['image'] && ($element['image_transition'] || $props['hover_image'] || $props['hover_video']), 'uk-flex uk-flex-column {@panel_expand}', // Image not wrapped in card media container or grid 'uk-flex-{flex_column_align}[@{text_align_breakpoint} [uk-flex-{flex_column_align_fallback}]] {@panel_expand}' => !($element['panel_style'] && str_starts_with($element['panel_style'], 'card-') && $props['image'] && $element['panel_image_no_padding'] && $element['image_align'] != 'between') && !in_array($element['image_align'], ['left', 'right']), ], ]); // Padding $content_container = ''; if ($element['panel_padding'] && $props['image'] && (!$element['panel_style'] || $element['panel_image_no_padding']) && $element['image_align'] != 'between') { $content_container = $this->el('div', [ 'class' => [ 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: content|both}', // Image not wrapped in card media container or grid 'uk-width-1-1 {@flex_column_align} {@panel_expand}' => !($element['panel_style'] && str_starts_with($element['panel_style'], 'card-') && $props['image'] && $element['panel_image_no_padding'] && $element['image_align'] != 'between') && !in_array($element['image_align'], ['left', 'right']), ], ]); } ($content_container ?: $link_container ?: $el)->attr('class', [ 'uk-padding[-{!panel_padding: default}] {@panel_style: |tile-.*} {@panel_padding}', 'uk-card-body {@panel_style: card-.*} {@panel_padding}', ]); // Image align $grid = ''; $cell_image = ''; $cell_content = ''; if ($props['image'] && in_array($element['image_align'], ['left', 'right'])) { $grid = $this->el('div', [ 'class' => [ $element['panel_style'] && $element['panel_image_no_padding'] ? 'uk-grid-collapse' : ($element['image_grid_column_gap'] == $element['image_grid_row_gap'] ? 'uk-grid-{image_grid_column_gap}' : '[uk-grid-column-{image_grid_column_gap}] [uk-grid-row-{image_grid_row_gap}]'), // Center vertically 'uk-flex-middle {@image_vertical_align} {@!panel_expand}', // Expand 'uk-flex-1 {@panel_expand}', 'uk-flex-column {@panel_expand} uk-flex-row@{image_grid_breakpoint}', ], 'uk-grid' => true, ]); $cell_image = $this->el('div', [ 'class' => [ 'uk-width-{image_grid_width}[@{image_grid_breakpoint}]', // Order 'uk-flex-last[@{image_grid_breakpoint}] {@image_align: right}', // Center vertically and keep text align 'uk-flex uk-flex-middle[@{image_grid_breakpoint}] uk-flex-{text_align} {@image_vertical_align} {@panel_expand: content}', 'uk-flex-{text_align}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]] {@panel_expand: content}', // Expand, also when stacking 'uk-flex uk-flex-column {@panel_expand: image|both} [uk-flex-1 uk-flex-initial@{image_grid_breakpoint}]', 'uk-flex-{flex_column_align}[@{text_align_breakpoint} [uk-flex-{flex_column_align_fallback}]] {@panel_expand: image|both}', ], ]); $cell_content = $this->el('div', [ 'class' => [ 'uk-width-expand', // Center vertically 'uk-flex uk-flex-column uk-flex-center[@{image_grid_breakpoint}] {@image_vertical_align} {@panel_expand: image}', // Expand, also when stacking but only for `content` 'uk-flex uk-flex-column {@panel_expand: content|both}', 'uk-flex-1 {@image_grid_breakpoint} {@panel_expand: content}', 'uk-flex-1[@{image_grid_breakpoint} uk-flex-none] {@panel_expand: both}', 'uk-flex-none uk-flex-1@{image_grid_breakpoint} {@panel_expand: image}', ], ]); } ($content_container ?: $cell_content ?: $link_container ?: $el)->attr('class', [ 'uk-margin-remove-first-child', ]); // Link $link = include "{$__dir}/template-link.php"; // Card Media (Needs to be after link) if ($element['panel_style'] && str_starts_with($element['panel_style'], 'card-') && $props['image'] && $element['panel_image_no_padding'] && $element['image_align'] != 'between') { $props['image'] = $this->el('div', [ 'class' => [ 'uk-card-media-{image_align}', 'uk-flex-1 uk-flex uk-flex-column {@panel_expand: image|both}', 'uk-flex-{flex_column_align}[@{text_align_breakpoint} [uk-flex-{flex_column_align_fallback}]] {@panel_expand: image|both} {@!image_align: left|right}', ], 'uk-toggle' => [ 'cls: uk-card-media-{image_align} uk-card-media-top; mode: media; media: @{image_grid_breakpoint} {@image_align: left|right}', ] ], $props['image'])->render($element); } ?> <?= $el($element, $attrs) ?> <?php if ($link_container) : ?> <?= $link_container($element) ?> <?php endif ?> <?php if ($grid) : ?> <?= $grid($element) ?> <?php endif ?> <?php if ($cell_image) : ?> <?= $cell_image($element) ?> <?php endif ?> <?php if (in_array($element['image_align'], ['left', 'right'])) : ?> <?= $props['image'] ?> <?php endif ?> <?php if ($cell_image) : ?> <?= $cell_image->end() ?> <?php endif ?> <?php if ($cell_content) : ?> <?= $cell_content($element) ?> <?php endif ?> <?php if ($element['image_align'] == 'top') : ?> <?= $props['image'] ?> <?php endif ?> <?php if ($content_container) : ?> <?= $content_container($element) ?> <?php endif ?> <?= $this->render("{$__dir}/template-content", compact('props', 'link')) ?> <?php if ($content_container) : ?> <?= $content_container->end() ?> <?php endif ?> <?php if ($element['image_align'] == 'bottom') : ?> <?= $props['image'] ?> <?php endif ?> <?php if ($cell_content) : ?> <?= $cell_content->end() ?> <?php endif ?> <?php if ($grid) : ?> <?= $grid->end() ?> <?php endif ?> <?php if ($link_container) : ?> <?= $link_container->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/panel-slider_item/element.json000064400000016210151666572170015747 0ustar00{ "@import": "./element.php", "name": "panel-slider_item", "title": "Item", "width": 500, "placeholder": { "props": { "title": "Title", "meta": "", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", "image": "${url:~yootheme/theme/assets/images/element-image-placeholder.png}", "video": "", "icon": "", "hover_image": "", "hover_video": "" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "image": { "label": "Image", "type": "image", "source": true, "show": "!video", "altRef": "%name%_alt" }, "video": { "label": "Video", "description": "Select a video file or enter a link from <a href=\"https://www.youtube.com\" target=\"_blank\">YouTube</a> or <a href=\"https://vimeo.com\" target=\"_blank\">Vimeo</a>.", "type": "video", "source": true, "show": "!image" }, "image_alt": { "label": "Image Alt", "source": true, "show": "image && !video" }, "icon": { "label": "Icon", "description": "Instead of using a custom image, you can click on the pencil to pick an icon from the icon library.", "type": "icon", "source": true, "enable": "!image && !video" }, "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item.", "source": true, "enable": "link" }, "hover_image": { "label": "Hover Image", "description": "Select an optional image that appears on hover.", "type": "image", "source": true, "show": "!hover_video", "enable": "image || video" }, "hover_video": { "label": "Hover Video", "description": "Select an optional video that appears on hover.", "type": "video", "source": true, "show": "!hover_image", "enable": "image || video" }, "panel_style": { "label": "Style", "description": "Select one of the boxed card or tile styles or a blank panel.", "type": "select", "options": { "None": "", "Card Default": "card-default", "Card Primary": "card-primary", "Card Secondary": "card-secondary", "Card Hover": "card-hover", "Tile Default": "tile-default", "Tile Muted": "tile-muted", "Tile Primary": "tile-primary", "Tile Secondary": "tile-secondary" } }, "item_element": "${builder.html_element_item}", "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image || video" }, "image_text_color": { "label": "Text Color", "description": "Set light or dark color mode for text, buttons and controls if a sticky transparent navbar is displayed above.", "type": "select", "options": { "None": "", "Light": "light", "Dark": "dark" }, "source": true, "enable": "image || video" }, "hover_image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "title", "meta", "content", "image", "video", "image_alt", "icon", "link", "link_text", "link_aria_label", "hover_image", "hover_video" ] }, { "title": "Settings", "fields": [ { "label": "Panel", "type": "group", "divider": true, "fields": ["panel_style", "item_element"] }, { "label": "Image", "type": "group", "fields": [ "image_focal_point", "image_text_color" ] }, { "label": "Hover Image", "type": "group", "fields": ["hover_image_focal_point"] } ] }, "${builder.advancedItem}" ] } } } builder/elements/panel-slider_item/element.php000064400000003126151666572170015567 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['title', 'meta', 'content', 'link', 'image', 'video', 'hover_image', 'hover_image'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; if ($key === 'image') { $node->props['icon'] = ''; } } } /** * Auto-correct media rendering for dynamic content * * @var View $view */ $view = app(View::class); foreach (['', 'hover_'] as $prefix) { if ($node->props["{$prefix}image"] && $view->isVideo($node->props["{$prefix}image"])) { $node->props["{$prefix}video"] = $node->props["{$prefix}image"]; $node->props["{$prefix}image"] = null; } elseif ($node->props["{$prefix}video"] && $view->isImage($node->props["{$prefix}video"])) { $node->props["{$prefix}image"] = $node->props["{$prefix}video"]; $node->props["{$prefix}video"] = null; } } // Don't render element if content fields are empty return $node->props['title'] != '' || $node->props['meta'] != '' || $node->props['content'] != '' || $node->props['image'] || $node->props['video'] || $node->props['icon']; }, ], ]; builder/elements/map_item/element.json000064400000011476151666572170014156 0ustar00{ "@import": "./element.php", "name": "map_item", "title": "Item", "width": 500, "placeholder": { "props": { "location": "53.5503, 10.0006" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "location": { "label": "Location", "type": "location", "source": true }, "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "image": "${builder.image}", "image_alt": "${builder.image_alt}", "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "link_aria_label": { "label": "Link ARIA Label", "description": "Set a different link ARIA label for this item.", "source": true, "enable": "link" }, "marker_icon": { "label": "Marker Icon", "type": "image", "source": true }, "marker_icon_width": { "label": "Width", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "marker_icon" }, "marker_icon_height": { "label": "Height", "type": "number", "attrs": { "placeholder": "auto" }, "enable": "marker_icon" }, "hide": { "label": "Marker", "type": "checkbox", "text": "Hide marker" }, "show_popup": { "label": "Behavior", "type": "checkbox", "text": "Show popup on load" }, "item_element": "${builder.html_element_item}", "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "location", "title", "meta", "content", "image", "image_alt", "link", "link_text", "link_aria_label", "marker_icon", { "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "name": "_marker_dimension", "type": "grid", "width": "1-2", "fields": ["marker_icon_width", "marker_icon_height"] } ] }, { "title": "Settings", "fields": [ { "label": "Marker", "type": "group", "divider": true, "fields": ["hide"] }, { "label": "Popup", "type": "group", "divider": true, "fields": ["show_popup", "item_element"] }, { "label": "Image", "type": "group", "fields": ["image_focal_point"] } ] }, "${builder.advancedItem}" ] } } } builder/elements/map_item/element.php000064400000000253151666572170013763 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { return (bool) $node->props['location']; }, ], ]; builder/elements/map_item/templates/template-image.php000064400000001261151666572170017223 0ustar00<?php if (!$props['image']) { return; } echo $this->el('image', [ 'class' => [ 'el-image', 'uk-responsive-width', 'uk-margin-auto', 'uk-display-block', 'uk-border-{image_border}', 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($props['image']) == 'svg', ], 'src' => $props['image'], 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $props['image_focal_point'], 'uk-svg' => $element['image_svg_inline'], 'thumbnail' => true, ])->render($element); builder/elements/map_item/templates/content.php000064400000001225151666572170016002 0ustar00<?php if ($props['location']) : ?> <p><?= $props['location'] ?></p> <?php endif ?> <?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['title'] != '') : ?> <<?= $element['title_element'] ?>><?= $props['title'] ?></<?= $element['title_element'] ?>> <?php endif ?> <?php if ($props['meta'] != '') : ?> <p><?= $props['meta'] ?></p> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a></p> <?php endif ?> builder/elements/map_item/templates/template-link.php000064400000001565151666572170017105 0ustar00<?php $link = $props['link'] ? $this->el('a', [ 'href' => $props['link'], 'aria-label' => $props['link_aria_label'] ?: $element['link_aria_label'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]) : null; if ($link && $props['title'] != '' && $element['title_link']) { $props['title'] = $link($element, [], $this->striptags($props['title'])); // title_hover_style is set on title } if ($link && $props['image'] && $element['image_link']) { $props['image'] = $link($element, $props['image']); } if ($link && ($props['link_text'] || $element['link_text'])) { $link->attr('class', [ 'el-link', 'uk-{link_style: link-(muted|text)}', 'uk-button uk-button-{!link_style: |link-muted|link-text} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', ]); } return $link; builder/elements/map_item/templates/template.php000064400000002033151666572170016141 0ustar00<?php // Display $hasContent = false; foreach (['title', 'meta', 'content', 'image', 'link'] as $key) { if (!$element["show_{$key}"]) { $props[$key] = ''; } $hasContent = $hasContent || $props[$key]; } if (!$hasContent) { // Do not render the marker content, but the marker itself is still rendered return; } // Image $props['image'] = $this->render("{$__dir}/template-image", compact('props')); // Item $el = $this->el($props['item_element'] ?: 'div', [ 'class' => [ 'el-item', 'uk-text-default uk-font-default', // Reset Google Maps Style 'uk-text-{item_text_align}{@item_text_align: justify}', 'uk-text-{item_text_align}[@{item_text_align_breakpoint} [uk-text-{item_text_align_fallback}]] {@!item_text_align: justify}', 'uk-margin-remove-first-child', ], ]); // Link $link = include "{$__dir}/template-link.php"; ?> <?= $el($element) ?> <?= $props['image'] ?> <?= $this->render("{$__dir}/template-content", compact('props', 'link')) ?> <?= $el->end() ?> builder/elements/map_item/templates/template-content.php000064400000005121151666572170017612 0ustar00<?php // Title $title = $this->el($element['title_element'], [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-heading-{title_decoration}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', 'uk-link-{title_hover_style} {@title_link}', // Set here to style links which already come with dynamic content (WP taxonomy links) 'uk-margin[-{title_margin}]-top {@!title_margin: remove}', 'uk-margin-remove-top {@title_margin: remove}', 'uk-margin-remove-bottom', ], ]); // Meta $meta = $this->el($element['meta_element'], [ 'class' => [ 'el-meta', 'uk-{meta_style}', 'uk-text-{meta_color}', 'uk-margin[-{meta_margin}]-top {@!meta_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{meta_margin: remove}-top]' => !in_array($element['meta_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']) || $element['meta_element'] != 'div', ], ]); // Content $content = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-{content_style}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove}', 'uk-margin-remove-bottom [uk-margin-{content_margin: remove}-top]' => !in_array($element['content_style'], ['', 'text-meta', 'text-lead', 'text-small', 'text-large']), ], ]); // Link $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', ], ]); ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'above-title') : ?> <?= $meta($element, [], $props['meta']) ?> <?php endif ?> <?php if ($props['title'] != '') : ?> <?= $title($element) ?> <?php if ($element['title_color'] == 'background') : ?> <span class="uk-text-background"><?= $props['title'] ?></span> <?php elseif ($element['title_decoration'] == 'line') : ?> <span><?= $props['title'] ?></span> <?php else : ?> <?= $props['title'] ?> <?php endif ?> <?= $title->end() ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-title') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['content'] != '') : ?> <?= $content($element, $props['content']) ?> <?php endif ?> <?php if ($props['meta'] != '' && $element['meta_align'] == 'below-content') : ?> <?= $meta($element, $props['meta']) ?> <?php endif ?> <?php if ($props['link'] && ($props['link_text'] || $element['link_text'])) : ?> <?= $link_container($element, $link($element, $props['link_text'] ?: $element['link_text'])) ?> <?php endif ?> builder/elements/list/images/iconSmall.svg000064400000000676151666572170014721 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <rect width="12" height="1" fill="#444" x="6" y="5" /> <rect width="12" height="1" fill="#444" x="6" y="10" /> <rect width="12" height="1" fill="#444" x="6" y="15" /> <rect width="2" height="1" fill="#444" x="2" y="5" /> <rect width="2" height="1" fill="#444" x="2" y="10" /> <rect width="2" height="1" fill="#444" x="2" y="15" /> </svg> builder/elements/list/images/icon.svg000064400000000676151666572170013730 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <rect width="19" height="2" fill="#444" x="9" y="6" /> <rect width="19" height="2" fill="#444" x="9" y="14" /> <rect width="19" height="2" fill="#444" x="9" y="22" /> <rect width="4" height="2" fill="#444" x="2" y="6" /> <rect width="4" height="2" fill="#444" x="2" y="14" /> <rect width="4" height="2" fill="#444" x="2" y="22" /> </svg> builder/elements/list/templates/template.php000064400000003243151666572170015325 0ustar00<?php $list = null; if ($props['list_type'] == 'horizontal') { $el = $this->el('div'); } elseif ($props['html_element']) { $el = $this->el('nav'); $list = $this->el($props['list_element']); } else { $el = $this->el($props['list_element']); } ($list ?: $el)->attr([ 'class' => [ 'uk-list {@list_type: vertical}', 'uk-list-{list_marker} {@list_type: vertical}', 'uk-list-{list_marker_color} {@list_type: vertical} {@!list_marker: bullet}', 'uk-list-{list_style} {@list_type: vertical}', 'uk-list-{list_size} {@list_type: vertical}', 'uk-column-{column}[@{column_breakpoint}]', 'uk-column-divider {@column} {@column_divider}', 'uk-margin-remove {@list_type: vertical}' => $props['position'] == 'absolute' || $props['html_element'], ], ]); $item = $this->el($props['list_type'] == 'horizontal' ? 'span' : 'li', [ 'class' => [ 'el-item' ], ]); ?> <?= $el($props, $attrs) ?> <?php if ($list) : ?> <?= $list($props) ?> <?php endif ?> <?php if ($props['list_type'] == 'horizontal') : ?> <?php foreach ($children as $i => $child) : echo $item($props) . $builder->render($child, ['element' => $props]) . (($i !== array_key_last($children)) ? $props['list_horizontal_separator'] : '') . $item->end(); endforeach ?> <?php else : ?> <?php foreach ($children as $i => $child) : ?> <?= $item($props) ?> <?= $builder->render($child, ['element' => $props]) ?> <?= $item->end() ?> <?php endforeach ?> <?php endif ?> <?php if ($list) : ?> <?= $list->end() ?> <?php endif ?> <?= $el->end() ?> builder/elements/list/templates/content.php000064400000000522151666572170015161 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/list/updates.php000064400000006270151666572170013164 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset( $node->props['image'], $node->props['icon_ratio'], $node->props['text_style'] ); }, '4.3.2' => function ($node) { $separator = Arr::get($node->props, 'list_horizontal_separator'); if ($separator && !preg_match('/\h$/u', $separator)) { $node->props['list_horizontal_separator'] .= ' '; } }, '4.3.0-beta.0.4' => function ($node) { if ( Arr::get($node->props, 'list_type') === 'horizontal' && !Arr::get($node->props, 'margin') ) { $node->props['margin'] = 'default'; } }, '2.8.0-beta.0.13' => function ($node) { if (in_array(Arr::get($node->props, 'content_style'), ['bold', 'muted'])) { $node->props['content_style'] = 'text-' . Arr::get($node->props, 'content_style'); } }, '2.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'list_style') === 'bullet') { $node->props['list_marker'] = 'bullet'; $node->props['list_style'] = ''; } if (Arr::get($node->props, 'list_size') === true) { $node->props['list_size'] = 'large'; } else { $node->props['list_size'] = ''; } if (!empty($node->props['icon_ratio'])) { $node->props['icon_width'] = round(20 * $node->props['icon_ratio']); unset($node->props['icon_ratio']); } }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if (Arr::get($node->props, 'content_style') === 'h1') { $node->props['content_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'content_style') === 'h2') { $node->props['content_style'] = 'h1'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'content_style') === 'h1') { $node->props['content_style'] = 'h2'; } } }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, [ 'image_inline_svg' => 'image_svg_inline', 'image_animate_svg' => 'image_svg_animate', ]); }, '1.18.0' => function ($node) { if (!isset($node->props['content_style'])) { $node->props['content_style'] = Arr::get($node->props, 'text_style'); } }, ]; builder/elements/list/element.json000064400000037574151666572170013345 0ustar00{ "name": "list", "title": "List", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_image": true, "show_link": true, "list_type": "vertical", "list_element": "ul", "list_horizontal_separator": ", ", "column_breakpoint": "m", "image_svg_color": "emphasis", "image_align": "left", "image_vertical_align": true }, "placeholder": { "children": [ { "type": "list_item", "props": {} }, { "type": "list_item", "props": {} }, { "type": "list_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "title": "content", "item": "list_item", "media": { "type": "image", "item": { "image": "src" } } }, "show_image": { "label": "Display", "type": "checkbox", "text": "Show the image" }, "show_link": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the link" }, "list_type": { "label": "Type", "description": "Choose between a vertical or horizontal list.", "type": "select", "options": { "Vertical": "vertical", "Horizontal": "horizontal" } }, "list_marker": { "label": "Marker", "description": "Select the marker of the list items.", "type": "select", "options": { "None": "", "Disc": "disc", "Circle": "circle", "Square": "square", "Decimal": "decimal", "Hyphen": "hyphen", "Image Bullet": "bullet" }, "enable": "list_type == 'vertical'" }, "list_marker_color": { "label": "Marker Color", "description": "Select the color of the list markers.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary" }, "enable": "list_type == 'vertical' && list_marker != 'bullet'" }, "list_style": { "label": "Style", "description": "Select the list style.", "type": "select", "options": { "None": "", "Divider": "divider", "Striped": "striped" }, "enable": "list_type == 'vertical'" }, "list_size": { "label": "Size", "description": "Define the padding between items.", "type": "select", "options": { "Default": "", "Large": "large", "None": "collapse" }, "enable": "list_type == 'vertical'" }, "list_horizontal_separator": { "label": "Separator", "description": "Set the separator between list items.", "enable": "list_type == 'horizontal'" }, "column": { "label": "Columns", "description": "Set the number of list columns.", "type": "select", "options": { "None": "", "Halves": "1-2", "Thirds": "1-3", "Quarters": "1-4", "Fifths": "1-5", "Sixths": "1-6" } }, "column_divider": { "description": "Show a divider between list columns.", "type": "checkbox", "text": "Show dividers", "enable": "column" }, "column_breakpoint": { "label": "Columns Breakpoint", "description": "Set the device width from which the list columns should apply.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "column" }, "list_element": { "label": "HTML Element", "description": "Set whether it's an ordered or unordered list.", "type": "select", "options": { "ul": "ul", "ol": "ol" }, "enable": "list_type == 'vertical'" }, "html_element": { "type": "checkbox", "text": "Wrap with nav element", "enable": "list_type == 'vertical'" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Bold": "text-bold", "Text Muted": "text-muted", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" } }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "enable": "show_image" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "show_image" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "show_image" }, "image_svg_animate": { "type": "checkbox", "text": "Animate strokes", "enable": "show_image && image_svg_inline" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image && image_svg_inline" }, "icon": { "type": "icon", "label": "Icon", "description": "Click on the pencil to pick an icon from the icon library.", "enable": "show_image" }, "icon_color": { "label": "Icon Color", "description": "Set the icon color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image" }, "icon_width": { "label": "Icon Width", "description": "Set the icon width.", "enable": "show_image" }, "image_align": { "label": "Alignment", "description": "Align the image to the left or right.", "type": "select", "options": { "Left": "left", "Right": "right" }, "enable": "show_image" }, "image_vertical_align": { "label": "Vertical Alignment", "description": "Vertically center the image.", "type": "checkbox", "text": "Center", "enable": "show_image" }, "link_style": { "label": "Style", "description": "This option doesn't apply unless a URL has been added to the item.", "type": "select", "options": { "None": "", "Muted": "muted", "Text": "text", "Heading": "heading", "Reset": "reset" }, "enable": "show_link" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element", ".el-item", ".el-content", ".el-image", ".el-link"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content", "show_image", "show_link"] }, { "title": "Settings", "fields": [ { "label": "List", "type": "group", "divider": true, "fields": [ "list_type", "list_marker", "list_marker_color", "list_style", "list_size", "list_horizontal_separator", "column", "column_divider", "column_breakpoint", "list_element", "html_element" ] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_style"] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading", "image_border", "image_svg_inline", "image_svg_animate", "image_svg_color", "image_align", "image_vertical_align" ] }, { "label": "Icon", "type": "group", "divider": true, "fields": ["icon", "icon_color", "icon_width"] }, { "label": "Link", "type": "group", "divider": true, "fields": ["link_style"] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/table_item/element.json000064400000005167151666572170014470 0ustar00{ "@import": "./element.php", "name": "table_item", "title": "Item", "width": 500, "placeholder": { "props": { "title": "Title", "meta": "", "content": "Lorem ipsum dolor sit amet.", "image": "" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "title": { "label": "Title", "source": true }, "meta": { "label": "Meta", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "image": "${builder.image}", "image_alt": "${builder.image_alt}", "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "title", "meta", "content", "image", "image_alt", "link", "link_text" ] }, { "title": "Settings", "fields": [ { "label": "Image", "type": "group", "fields": ["image_focal_point"] } ] }, "${builder.advancedItem}" ] } } } builder/elements/table_item/templates/content.php000064400000001270151666572170016314 0ustar00<?php if (in_array('image', $filtered)) : ?> <td> <?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> </td> <?php endif ?> <?php if (in_array('title', $filtered)) : ?> <td><?= $props['title'] ?></td> <?php endif ?> <?php if (in_array('meta', $filtered)) : ?> <td><?= $props['meta'] ?></td> <?php endif ?> <?php if (in_array('content', $filtered)) : ?> <td><?= $props['content'] ?></td> <?php endif ?> <?php if (in_array('link', $filtered)) : ?> <td> <?php if ($props['link']) : ?> <a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a> <?php endif ?> </td> <?php endif ?> builder/elements/table_item/templates/template-image.php000064400000001267151666572170017543 0ustar00<?php if (!$props['image']) { return; } // Image $image = $this->el('image', [ 'class' => [ 'el-image', 'uk-preserve-width', 'uk-border-{image_border}', 'uk-box-shadow-{image_box_shadow}', 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($props['image']) == 'svg', ], 'src' => $props['image'], 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $props['image_focal_point'], 'uk-svg' => $element['image_svg_inline'], 'thumbnail' => true, ]); echo $image($element); builder/elements/table_item/templates/template.php000064400000001415151666572170016456 0ustar00<?php foreach ($filtered as $j => $field) { echo $this->el('td', [ 'class' => [ 'uk-text-nowrap' => $field === 'link', "uk-text-nowrap {@table_width_{$field}: shrink}" => in_array($field, $text_fields), // Last column alignment 'uk-text-{table_last_align}[@m {@table_responsive: responsive}]' => array_search($field, $fields) > 1 && !isset($filtered[$j + 1]), // Widths "uk-[table {@table_width_{$field}: shrink}][width {@!table_width_{$field}: shrink}]-{table_width_{$field}}" => $i == 0 && in_array($field, $text_fields), 'uk-table-shrink' => $i == 0 && in_array($field, ['image', 'link']), ], ], $this->render("{$__dir}/template-{$field}"))->render($element); } builder/elements/table_item/templates/template-meta.php000064400000000430151666572170017376 0ustar00<?php if ($props['meta'] == '') { return; } // Meta $el = $this->el('div', [ 'class' => [ 'el-meta', 'uk-{meta_style} [uk-margin-remove {@meta_style: h1|h2|h3|h4|h5|h6}]', 'uk-text-{meta_color}', ], ]); echo $el($element, $props['meta']); builder/elements/table_item/templates/template-content.php000064400000000423151666572170020124 0ustar00<?php if ($props['content'] == '') { return; } // Content $el = $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-{content_style} [uk-margin-remove {@content_style: h1|h2|h3|h4|h5|h6}]', ], ]); echo $el($element, $props['content']); builder/elements/table_item/templates/template-title.php000064400000000665151666572170017603 0ustar00<?php if ($props['title'] == '') { return; } // Title $el = $this->el('div', [ 'class' => [ 'el-title', 'uk-{title_style}', 'uk-font-{title_font_family}', 'uk-text-{title_color} {@!title_color: background}', ], ]); if ($element['title_color'] === 'background') { $props['title'] = "<span class=\"uk-text-background\">{$props['title']}</span>"; } echo $el($element, $props['title']); builder/elements/table_item/templates/template-link.php000064400000001243151666572170017410 0ustar00<?php $props['link_text'] = $props['link_text'] ?: $element['link_text']; if (!$props['link'] || !$props['link_text']) { return; } // Link $el = $this->el('a', [ 'class' => [ 'el-link', 'uk-{link_style: link-\w+}', 'uk-button uk-button-{!link_style: |link-\w+} [uk-button-{link_size}]', '{0} {@!link_style: |text|link-\w+} {@link_fullwidth}' => $element['table_responsive'] == 'responsive' ? 'uk-width-auto uk-width-1-1@m' : 'uk-width-1-1', ], 'href' => $props['link'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]); echo $el($element, $props['link_text']); builder/elements/table_item/element.php000064400000000557151666572170014304 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return $node->props['title'] != '' || $node->props['meta'] != '' || $node->props['content'] != '' || $node->props['image']; }, ], ]; builder/elements/table/templates/content.php000064400000001430151666572170015274 0ustar00<?php $fields = ['image', 'title', 'meta', 'content', 'link']; // Find empty fields $filtered = array_values(array_filter($fields, fn($field) => array_any($children, fn($child) => $child->props[$field] != '') )); ?> <?php if (count($children)) : ?> <table> <?php if (array_any($filtered, fn($field) => $props["table_head_{$field}"])) : ?> <thead> <tr> <?php foreach ($filtered as $field) : ?> <th><?= $props["table_head_{$field}"] ?></th> <?php endforeach ?> </tr> </thead> <?php endif ?> <tbody> <?php foreach ($children as $child) : ?> <tr><?= $builder->render($child, ['element' => $props, 'filtered' => $filtered]) ?></tr> <?php endforeach ?> </tbody> </table> <?php endif ?> builder/elements/table/templates/template.php000064400000006060151666572170015441 0ustar00<?php $text_fields = ['title', 'meta', 'content']; switch ($props['table_order']) { case 1: $fields = ['meta', 'image', 'title', 'content', 'link']; break; case 2: $fields = ['title', 'image', 'meta', 'content', 'link']; break; case 3: $fields = ['image', 'title', 'content', 'meta', 'link']; break; case 4: $fields = ['image', 'title', 'meta', 'content', 'link']; break; case 5: $fields = ['title', 'meta', 'content', 'link', 'image']; break; case 6: $fields = ['meta', 'title', 'content', 'link', 'image']; break; } // Find empty fields $filtered = array_values(array_filter($fields, fn($field) => $props["show_{$field}"] && array_any($children, fn($child) => $child->props[$field] != '' ) )); $el = $this->el('div', [ // Responsive 'class' => [ 'uk-overflow-auto {@table_responsive: overflow}', ], ]); $table = $this->el('table', [ 'class' => [ // Style 'uk-table', 'uk-table-{table_style}', 'uk-table-hover {@table_hover}', 'uk-table-justify {@table_justify}', // Size 'uk-table-{table_size}', // Vertical align 'uk-table-middle {@table_vertical_align}', // Responsive 'uk-table-responsive {@table_responsive: responsive}', ], ]); ?> <?php if ($props['table_responsive'] == 'overflow') : ?> <?= $el($props, $attrs) ?> <?= $table($props) ?> <?php else : ?> <?= $table($props, $attrs) ?> <?php endif ?> <?php if (array_any($filtered, fn($field) => $props["table_head_{$field}"])) : ?> <thead> <tr> <?php foreach ($filtered as $i => $field) { $lastColumn = $i !== 0 && !isset($filtered[$i + 1]); echo $this->el('th', [ 'class' => [ // Last column alignment 'uk-text-{table_last_align}[@m {@table_responsive: responsive}]' => $lastColumn, // Text align need to be set for table heading 'uk-text-{text_align}[@{text_align_breakpoint} [uk-text-{text_align_fallback}] {@!text_align: justify}]' => !$lastColumn || !$props['table_last_align'], // Text nowrap 'uk-text-nowrap' => $field == 'link' || in_array($field, $text_fields) && $props["table_width_{$field}"] == 'shrink', ], ], $props["table_head_{$field}"])->render($props); } ?> </tr> </thead> <?php endif ?> <tbody> <?php foreach ($children as $i => $child) : ?> <tr class="el-item"><?= $builder->render($child, ['i' => $i, 'element' => $props, 'fields' => $fields, 'text_fields' => $text_fields, 'filtered' => $filtered]) ?></tr> <?php endforeach ?> </tbody> <?= $table->end() ?> <?php if ($props['table_responsive'] == 'overflow') : ?> <?= $el->end() ?> <?php endif ?> builder/elements/table/images/iconSmall.svg000064400000000470151666572170015025 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="#444" d="M18,3H2v13h16V3z M7,15H3v-3h4V15z M7,11H3V8h4V11z M7,7H3V4h4V7z M12,15H7.96v-3H12V15z M12,11H7.96V8H12 V11z M12,7H7.96V4H12V7z M17,15h-4.04v-3H17V15z M17,11h-4.04V8H17V11z M17,7h-4.04V4H17V7z" /> </svg> builder/elements/table/images/icon.svg000064400000000507151666572170014035 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path fill="#444" d="M30,4H1v23h29V4z M10,25H3v-5h7V25z M10,18H3v-5h7V18z M10,11H3V6h7V11z M19,25h-7.04v-5H19V25z M19,18 h-7.04v-5H19V18z M19,11h-7.04V6H19V11z M28,25h-7.04v-5H28V25z M28,18h-7.04v-5H28V18z M28,11h-7.04V6H28V11z" /> </svg> builder/elements/table/element.json000064400000053742151666572170013454 0ustar00{ "name": "table", "title": "Table", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_title": true, "show_meta": true, "show_content": true, "show_image": true, "show_link": true, "table_order": "1", "table_responsive": "overflow", "table_width_title": "shrink", "table_width_meta": "shrink", "meta_style": "text-meta", "image_svg_color": "emphasis", "link_text": "Read more", "link_style": "default" }, "placeholder": { "children": [ { "type": "table_item", "props": {} }, { "type": "table_item", "props": {} }, { "type": "table_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "item": "table_item" }, "show_title": { "label": "Display", "type": "checkbox", "text": "Show the title" }, "show_meta": { "type": "checkbox", "text": "Show the meta text" }, "show_content": { "type": "checkbox", "text": "Show the content" }, "show_image": { "type": "checkbox", "text": "Show the image" }, "show_link": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the link" }, "table_style": { "label": "Style", "description": "Select the table style.", "type": "select", "options": { "Default": "", "Divider": "divider", "Striped": "striped" } }, "table_hover": { "type": "checkbox", "text": "Highlight the hovered row" }, "table_justify": { "type": "checkbox", "text": "Remove left and right padding" }, "table_size": { "label": "Size", "description": "Define the padding between table rows.", "type": "select", "options": { "Default": "", "Small": "small", "Large": "large" } }, "table_order": { "label": "Order", "description": "Define the order of the table cells.", "type": "select", "options": { "Meta, Image, Title, Content, Link": "1", "Title, Image, Meta, Content, Link": "2", "Image, Title, Content, Meta, Link": "3", "Image, Title, Meta, Content, Link": "4", "Title, Meta, Content, Link, Image": "5", "Meta, Title, Content, Link, Image": "6" } }, "table_vertical_align": { "label": "Vertical Alignment", "description": "Vertically center table cells.", "type": "checkbox", "text": "Center" }, "table_responsive": { "label": "Responsive", "description": "Stack columns on small devices or enable overflow scroll for the container.", "type": "select", "options": { "Scroll overflow": "overflow", "Stacked": "responsive" } }, "table_last_align": { "label": "Last Column Alignment", "description": "Define the alignment of the last table column.", "type": "select", "options": { "None": "", "Left": "left", "Center": "center", "Right": "right" } }, "table_width_title": { "label": "Title Width", "description": "Define the width of the title cell.", "type": "select", "options": { "Expand": "", "Shrink": "shrink", "Small": "small", "Medium": "medium" }, "enable": "show_title" }, "table_width_meta": { "label": "Meta Width", "description": "Define the width of the meta cell.", "type": "select", "options": { "Expand": "", "Shrink": "shrink", "Small": "small", "Medium": "medium" }, "enable": "show_meta" }, "table_width_content": { "label": "Content Width", "description": "Define the width of the content cell.", "type": "select", "options": { "Expand": "", "Shrink": "shrink", "Small": "small", "Medium": "medium" }, "enable": "show_content" }, "table_head_title": { "label": "Title", "description": "Enter a table header text for the title column.", "attrs": { "placeholder": "Title" }, "enable": "show_title" }, "table_head_meta": { "label": "Meta", "description": "Enter a table header text for the meta column.", "attrs": { "placeholder": "Meta" }, "enable": "show_meta" }, "table_head_content": { "label": "Content", "description": "Enter a table header text for the content column.", "attrs": { "placeholder": "Content" }, "enable": "show_content" }, "table_head_image": { "label": "Image", "description": "Enter a table header text for the image column.", "attrs": { "placeholder": "Image" }, "enable": "show_image" }, "table_head_link": { "label": "Link", "description": "Enter a table header text for the link column.", "attrs": { "placeholder": "Link" }, "enable": "show_link" }, "title_style": { "label": "Style", "description": "Title styles differ in font-size but may also come with a predefined color, size and font.", "type": "select", "options": { "None": "", "Heading 3X-Large": "heading-3xlarge", "Heading 2X-Large": "heading-2xlarge", "Heading X-Large": "heading-xlarge", "Heading Large": "heading-large", "Heading Medium": "heading-medium", "Heading Small": "heading-small", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large" }, "enable": "show_title" }, "title_font_family": { "label": "Font Family", "description": "Select an alternative font family. Mind that not all styles have different font families.", "type": "select", "options": { "None": "", "Default": "default", "Primary": "primary", "Secondary": "secondary", "Tertiary": "tertiary" }, "enable": "show_title" }, "title_color": { "label": "Color", "description": "Select the text color. If the Background option is selected, styles that don't apply a background image use the primary color instead.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger", "Background": "background" }, "enable": "show_title" }, "meta_style": { "label": "Style", "description": "Select a predefined meta text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_meta" }, "meta_color": { "label": "Color", "description": "Select the text color.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_meta" }, "content_style": { "label": "Style", "description": "Select a predefined text style, including color, size and font-family.", "type": "select", "options": { "None": "", "Text Meta": "text-meta", "Text Lead": "text-lead", "Text Small": "text-small", "Text Large": "text-large", "Heading H1": "h1", "Heading H2": "h2", "Heading H3": "h3", "Heading H4": "h4", "Heading H5": "h5", "Heading H6": "h6" }, "enable": "show_content" }, "image_width": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_height": { "type": "number", "attrs": { "placeholder": "auto" }, "enable": "show_image" }, "image_loading": { "label": "Loading", "description": "By default, images are loaded lazy. Enable eager loading for images in the initial viewport.", "type": "checkbox", "text": "Load image eagerly", "enable": "show_image" }, "image_border": { "label": "Border", "description": "Select the image border style.", "type": "select", "options": { "None": "", "Rounded": "rounded", "Circle": "circle", "Pill": "pill" }, "enable": "show_image" }, "image_box_shadow": { "label": "Box Shadow", "description": "Select the image box shadow size.", "type": "select", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "show_image" }, "image_svg_inline": { "label": "Inline SVG", "description": "Inject SVG images into the page markup so that they can easily be styled with CSS.", "type": "checkbox", "text": "Make SVG stylable with CSS", "enable": "show_image" }, "image_svg_animate": { "type": "checkbox", "text": "Animate strokes", "enable": "show_image && image_svg_inline" }, "image_svg_color": { "label": "SVG Color", "description": "Select the SVG color. It will only apply to supported elements defined in the SVG.", "type": "select", "options": { "None": "", "Muted": "muted", "Emphasis": "emphasis", "Primary": "primary", "Secondary": "secondary", "Success": "success", "Warning": "warning", "Danger": "danger" }, "enable": "show_image && image_svg_inline" }, "link_text": { "label": "Text", "description": "Enter the text for the link.", "enable": "show_link" }, "link_target": { "type": "checkbox", "text": "Open in a new window", "enable": "show_link" }, "link_style": { "label": "Style", "description": "Set the link style.", "type": "select", "options": { "Button Default": "default", "Button Primary": "primary", "Button Secondary": "secondary", "Button Danger": "danger", "Button Text": "text", "Link": "", "Link Muted": "link-muted", "Link Text": "link-text" }, "enable": "show_link" }, "link_size": { "label": "Button Size", "description": "Set the button size.", "type": "select", "options": { "Small": "small", "Default": "", "Large": "large" }, "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)')" }, "link_fullwidth": { "type": "checkbox", "text": "Expand width to table cell", "enable": "show_link && link_style && !$match(link_style, 'link-(muted|text)|^text$')" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "text_align": "${builder.text_align_justify}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_justify_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>, <code>.el-item</code>, <code>.el-title</code>, <code>.el-meta</code>, <code>.el-content</code>, <code>.el-image</code>, <code>.el-link</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [ ".el-element", ".el-item", ".el-title", ".el-meta", ".el-content", ".el-image", ".el-link" ] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "content", "show_title", "show_meta", "show_content", "show_image", "show_link" ] }, { "title": "Settings", "fields": [ { "label": "Table", "type": "group", "divider": true, "fields": [ "table_style", "table_hover", "table_justify", "table_size", "table_order", "table_vertical_align", "table_responsive", "table_last_align", "table_width_title", "table_width_meta", "table_width_content" ] }, { "label": "Table Head", "type": "group", "divider": true, "fields": [ "table_head_title", "table_head_meta", "table_head_content", "table_head_image", "table_head_link" ] }, { "label": "Title", "type": "group", "divider": true, "fields": ["title_style", "title_font_family", "title_color"] }, { "label": "Meta", "type": "group", "divider": true, "fields": ["meta_style", "meta_color"] }, { "label": "Content", "type": "group", "divider": true, "fields": ["content_style"] }, { "label": "Image", "type": "group", "divider": true, "fields": [ { "label": "Width/Height", "description": "Setting just one value preserves the original proportions. The image will be resized and cropped automatically, and where possible, high resolution images will be auto-generated.", "type": "grid", "width": "1-2", "fields": ["image_width", "image_height"] }, "image_loading", "image_border", "image_box_shadow", "image_svg_inline", "image_svg_animate", "image_svg_color" ] }, { "label": "Link", "type": "group", "divider": true, "fields": [ "link_text", "link_target", "link_style", "link_size", "link_fullwidth" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/table/updates.php000064400000007174151666572170013304 0ustar00<?php namespace YOOtheme; return [ '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, [ 'image_inline_svg' => 'image_svg_inline', 'image_animate_svg' => 'image_svg_animate', ]); }, '1.18.0' => function ($node) { if ( !isset($node->props['meta_color']) && in_array(Arr::get($node->props, 'meta_style'), ['muted', 'primary'], true) ) { $node->props['meta_color'] = $node->props['meta_style']; $node->props['meta_style'] = ''; } }, ]; builder/elements/accordion_item/element.php000064400000001053151666572170015146 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { // Display foreach (['image', 'link'] as $key) { if (!$params['parent']->props["show_{$key}"]) { $node->props[$key] = ''; } } // Don't render element if content fields are empty return $node->props['title'] != '' && ($node->props['content'] != '' || $node->props['image'] || $node->props['link']); }, ], ]; builder/elements/accordion_item/templates/template.php000064400000003436151666572170017335 0ustar00<?php $el = $this->el($props['item_element'] ?: 'div', [ 'class' => [ 'el-item', ], ]); // Content $content = $this->el('div', [ 'class' => [ 'uk-accordion-content', ], ]); // Image $image = $this->render("{$__dir}/template-image"); // Image align $grid = $this->el('div', [ 'class' => [ 'uk-child-width-expand', $element['image_grid_column_gap'] == $element['image_grid_row_gap'] ? 'uk-grid-{image_grid_column_gap}' : '[uk-grid-column-{image_grid_column_gap}] [uk-grid-row-{image_grid_row_gap}]', 'uk-flex-middle {@image_vertical_align}', ], 'uk-grid' => true, ]); $cell_image = $this->el('div', [ 'class' => [ 'uk-width-{image_grid_width}@{image_grid_breakpoint}', 'uk-flex-last@{image_grid_breakpoint} {@image_align: right}', ], ]); $cell_content = $this->el('div', [ 'class' => [ 'uk-margin-remove-first-child', ], ]); ?> <?= $el($element, $attrs) ?> <a class="el-title uk-accordion-title" href><?= $props['title'] ?></a> <?= $content($element) ?> <?php if ($image && in_array($element['image_align'], ['left', 'right'])) : ?> <?= $grid($element) ?> <?= $cell_image($element, $image) ?> <?= $cell_content($element) ?> <?= $this->render("{$__dir}/template-content") ?> <?= $this->render("{$__dir}/template-link") ?> <?= $cell_content->end() ?> <?= $grid->end() ?> <?php else : ?> <?= $element['image_align'] == 'top' ? $image : '' ?> <?= $this->render("{$__dir}/template-content") ?> <?= $this->render("{$__dir}/template-link") ?> <?= $element['image_align'] == 'bottom' ? $image : '' ?> <?php endif ?> <?= $content->end() ?> <?= $el->end() ?> builder/elements/accordion_item/templates/template-image.php000064400000001346151666572170020413 0ustar00<?php // Display if (!$props['image']) { return; } // Image echo $this->el('image', [ 'class' => [ 'el-image', 'uk-border-{image_border}', 'uk-text-{image_svg_color} {@image_svg_inline}' => $this->isImage($props['image']) == 'svg', 'uk-margin[-{image_margin}]-top {@!image_margin: remove} {@image_align: bottom}' => $props['content'], ], 'src' => $props['image'], 'alt' => $props['image_alt'], 'loading' => $element['image_loading'] ? false : null, 'width' => $element['image_width'], 'height' => $element['image_height'], 'focal_point' => $props['image_focal_point'], 'uk-svg' => (bool) $element['image_svg_inline'], 'thumbnail' => true, ])->render($element); builder/elements/accordion_item/templates/template-content.php000064400000001026151666572170020776 0ustar00<?php namespace YOOtheme; if ($props['content'] == '') { return; } // Content echo $this->el('div', [ 'class' => [ 'el-content uk-panel', 'uk-text-{content_style}', 'uk-dropcap {@content_dropcap}', 'uk-column-{content_column}[@{content_column_breakpoint}]', 'uk-column-divider {@content_column} {@content_column_divider}', 'uk-margin[-{content_margin}]-top {@!content_margin: remove} {@image_align: top}' => $props['image'], ], ])->render($element, $props['content']); builder/elements/accordion_item/templates/content.php000064400000000663151666572170017173 0ustar00<?php if ($props['image']) : ?> <img src="<?= $props['image'] ?>" alt="<?= $props['image_alt'] ?>"> <?php endif ?> <?php if ($props['title'] != '') : ?> <h3><?= $props['title'] ?></h3> <?php endif ?> <?php if ($props['content'] != '') : ?> <div><?= $props['content'] ?></div> <?php endif ?> <?php if ($props['link']) : ?> <p><a href="<?= $props['link'] ?>"><?= $props['link_text'] ?: $element['link_text'] ?></a></p> <?php endif ?> builder/elements/accordion_item/templates/template-link.php000064400000001272151666572170020264 0ustar00<?php if (!$props['link'] || !($props['link_text'] || $element['link_text'])) { return; } // Link $link = $this->el('a', [ 'class' => [ 'el-link', 'uk-{link_style: link-\w+}', 'uk-button uk-button-{!link_style: |link-\w+} [uk-button-{link_size}] [uk-width-1-1 {@link_fullwidth}]', ], 'href' => $props['link'], 'target' => ['_blank {@link_target}'], 'uk-scroll' => str_contains((string) $props['link'], '#'), ]); $link_container = $this->el('div', [ 'class' => [ 'uk-margin[-{link_margin}]-top {@!link_margin: remove}', ], ]); ?> <?= $link_container($element, $link($element, $props['link_text'] ?: $element['link_text'])) ?> builder/elements/accordion_item/element.json000064400000005575151666572170015345 0ustar00{ "@import": "./element.php", "name": "accordion_item", "title": "Item", "width": 500, "placeholder": { "props": { "title": "Title", "content": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.", "image": "" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "title": { "label": "Title", "source": true }, "content": { "label": "Content", "type": "editor", "source": true }, "image": "${builder.image}", "image_alt": "${builder.image_alt}", "link": "${builder.link}", "link_text": { "label": "Link Text", "description": "Set a different link text for this item.", "source": true, "enable": "link" }, "item_element": "${builder.html_element_item}", "image_focal_point": { "label": "Focal Point", "description": "Set a focal point to adjust the image focus when cropping.", "type": "select", "options": { "Top Left": "top-left", "Top Center": "top-center", "Top Right": "top-right", "Center Left": "center-left", "Center Center": "", "Center Right": "center-right", "Bottom Left": "bottom-left", "Bottom Center": "bottom-center", "Bottom Right": "bottom-right" }, "source": true, "enable": "image" }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["title", "content", "image", "image_alt", "link", "link_text"] }, { "title": "Settings", "fields": [ { "label": "Item", "type": "group", "divider": true, "fields": [ "item_element" ] }, { "label": "Image", "type": "group", "fields": ["image_focal_point"] } ] }, "${builder.advancedItem}" ] } } } builder/elements/divider/templates/template.php000064400000000631151666572170015776 0ustar00<?php $el = $this->el($props['divider_element'], [ 'class' => [ 'uk-divider-{divider_style}', 'uk-hr {!divider_style} {@divider_element: div}', 'uk-text-{divider_align}[@{divider_align_breakpoint} [uk-text-{divider_align_fallback}] {@!divider_align: justify}] {@divider_style: small}', 'uk-margin-remove {@position: absolute}', ], ]); echo $el($props, $attrs, ''); builder/elements/divider/templates/content.php000064400000000106151666572170015632 0ustar00<?php if ($props['divider_element'] == 'hr') : ?> <hr> <?php endif ?> builder/elements/divider/element.json000064400000013670151666572170014007 0ustar00{ "name": "divider", "title": "Divider", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "divider_element": "hr" }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "divider_style": { "label": "Style", "description": "Choose a divider style.", "type": "select", "options": { "None": "", "Icon": "icon", "Small": "small", "Vertical": "vertical" } }, "divider_element": { "label": "HTML Element", "description": "Set a thematic break between paragraphs or give it no semantic meaning.", "type": "select", "options": { "hr": "hr", "div": "div" } }, "divider_align": { "label": "Alignment", "description": "Center, left and right alignment may depend on a breakpoint and require a fallback.", "type": "select", "options": { "None": "", "Left": "left", "Center": "center", "Right": "right" }, "enable": "divider_style == 'small'" }, "divider_align_breakpoint": { "label": "Alignment Breakpoint", "description": "Define the device width from which the alignment will apply.", "type": "select", "options": { "Always": "", "Small (Phone Landscape)": "s", "Medium (Tablet Landscape)": "m", "Large (Desktop)": "l", "X-Large (Large Screens)": "xl" }, "enable": "divider_style == 'small' && divider_align" }, "divider_align_fallback": { "label": "Alignment Fallback", "description": "Define an alignment fallback for device widths below the breakpoint.", "type": "select", "options": { "None": "", "Left": "left", "Center": "center", "Right": "right" }, "enable": "divider_style == 'small' && divider_align && divider_align_breakpoint" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "maxwidth": "${builder.maxwidth}", "maxwidth_breakpoint": "${builder.maxwidth_breakpoint}", "block_align": "${builder.block_align}", "block_align_breakpoint": "${builder.block_align_breakpoint}", "block_align_fallback": "${builder.block_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Settings", "fields": [ { "label": "Divider", "type": "group", "divider": true, "fields": [ "divider_style", "divider_element", "divider_align", "divider_align_breakpoint", "divider_align_fallback" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "maxwidth", "maxwidth_breakpoint", "block_align", "block_align_breakpoint", "block_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/divider/updates.php000064400000000245151666572170013633 0ustar00<?php namespace YOOtheme; return [ '1.20.0-beta.4' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, ]; builder/elements/divider/images/iconSmall.svg000064400000000643151666572170015366 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#444" stroke-width="1.1" x1="7.5" y1="7" x2="12.5" y2="12" /> <line fill="none" stroke="#444" stroke-width="1.1" x1="12.5" y1="7" x2="7.5" y2="12" /> <line fill="none" stroke="#444" x1="14" y1="9.5" x2="20" y2="9.5" /> <line fill="none" stroke="#444" x1="0" y1="9.5" x2="6" y2="9.5" /> </svg> builder/elements/divider/images/icon.svg000064400000000671151666572170014376 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <line fill="none" stroke="#444" stroke-width="2" x1="11" y1="11" x2="19" y2="19" /> <line fill="none" stroke="#444" stroke-width="2" x1="19" y1="11" x2="11" y2="19" /> <line fill="none" stroke="#444" stroke-width="2" x1="21" y1="15" x2="30" y2="15" /> <line fill="none" stroke="#444" stroke-width="2" x1="0" y1="15" x2="9" y2="15" /> </svg> builder/elements/subnav_item/element.json000064400000002040151666572170014662 0ustar00{ "@import": "./element.php", "name": "subnav_item", "title": "Item", "width": 500, "placeholder": { "props": { "content": "Item" } }, "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Content", "source": true }, "link": "${builder.link}", "link_target": "${builder.link_target}", "active": { "label": "Active", "type": "checkbox", "text": "Active item", "source": true }, "status": "${builder.statusItem}", "source": "${builder.source}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": ["content", "link", "link_target", "active"] }, "${builder.advancedItem}" ] } } } builder/elements/subnav_item/templates/template.php000064400000000726151666572170016671 0ustar00<?php // Link $link = $this->el('a', [ 'class' => [ 'el-link', 'uk-link-{link_style}', ], ]); ?> <?php if ($props['link']) : ?> <?= $link($element, [ 'href' => $props['link'], 'uk-scroll' => str_contains((string) $props['link'], '#'), 'target' => $props['link_target'] ? '_blank' : '', ], $props['content']) ?> <?php else : ?> <a class="el-content uk-disabled"><?= $props['content'] ?></a> <?php endif ?> builder/elements/subnav_item/templates/content.php000064400000000206151666572170016521 0ustar00<?php if ($props['content'] != '' || $props['link']) : ?> <a href="<?= $props['link'] ?>"><?= $props['content'] ?></a> <?php endif ?> builder/elements/subnav_item/element.php000064400000000351151666572170014503 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return $node->props['content'] != ''; }, ], ]; builder/elements/countdown/templates/template.php000064400000002136151666572170016372 0ustar00<?php $el = $this->el('div', [ 'class' => [ 'uk-child-width-auto', $props['grid_column_gap'] == $props['grid_row_gap'] ? 'uk-grid-{grid_column_gap}' : '[uk-grid-column-{grid_column_gap}] [uk-grid-row-{grid_row_gap}]', 'uk-flex-{text_align}[@{text_align_breakpoint} [uk-flex-{text_align_fallback}]]', ], 'uk-countdown' => [ 'date: {date}', ], 'uk-grid' => true, ]); // Label $label = $this->el('div', [ 'class' => [ 'uk-countdown-label', 'uk-text-center', 'uk-margin[-{label_margin}]', ], ]); ?> <?= $el($props, $attrs) ?> <?php foreach (['days', 'hours', 'minutes', 'seconds'] as $unit) : ?> <div> <div class="uk-countdown-number uk-countdown-<?= $unit ?>"></div> <?php if ($props['show_label']) : ?> <?= $label($props, $props["label_{$unit}"] ?: ucfirst($unit)) ?> <?php endif ?> </div> <?php if ($props['show_separator'] && $unit !== 'seconds') : ?> <div class="uk-countdown-separator">:</div> <?php endif ?> <?php endforeach ?> <?= $el->end() ?> builder/elements/countdown/templates/content.php000064400000000162151666572170016226 0ustar00<?php if ($props['date']) : ?> <time datetime="<?= $props['date'] ?>"><?= $props['date'] ?></time> <?php endif ?> builder/elements/countdown/images/iconSmall.svg000064400000001123151666572170015752 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" stroke-width="1.1" d="M10,4.375V1c4.971,0,9,4.028,9,9c0,4.971-4.029,9-9,9 c-4.971,0-9-4.029-9-9c0-2.492,1.018-4.749,2.652-6.375" /> <path fill="#444" d="M11.407,10.734c0,0.705-0.566,1.279-1.272,1.279c-0.396,0-0.749-0.18-0.978-0.455 c0,0-0.052-0.076-0.142-0.207c-0.719-1.055-3.943-5.775-3.943-5.775s5.829,4.14,5.858,4.168 C11.221,9.972,11.407,10.333,11.407,10.734z" /> <path fill="#444" d="M10.609,9.766l-0.006,0.006C10.578,9.748,10.609,9.766,10.609,9.766z" /> </svg> builder/elements/countdown/images/icon.svg000064400000001057151666572170014767 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <path fill="none" stroke="#444" stroke-width="2" d="M15,8V2c7.18,0,13,5.82,13,13c0,7.18-5.82,13-13,13 S2,22.18,2,15c0-3.6,1.47-6.86,3.83-9.21" /> <path fill="#444" d="M17.033,16.06c0,1.021-0.82,1.851-1.84,1.851c-0.57,0-1.08-0.26-1.41-0.66c0,0-0.074-0.107-0.204-0.298 C12.541,15.431,7.883,8.61,7.883,8.61s8.421,5.98,8.461,6.02C16.764,14.96,17.033,15.48,17.033,16.06z" /> <path fill="#444" d="M15.99,14.62l-0.01,0.01C15.94,14.59,15.99,14.62,15.99,14.62z" /> </svg> builder/elements/countdown/element.json000064400000014537151666572170014404 0ustar00{ "@import": "./element.php", "name": "countdown", "title": "Countdown", "group": "basic", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "width": 500, "defaults": { "show_separator": true, "show_label": true, "grid_column_gap": "small", "grid_row_gap": "small", "label_margin": "small", "margin": "default" }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "date": { "label": "Date", "type": "datetime", "description": "Enter a date for the countdown to expire.", "source": true }, "label_days": { "label": "Labels", "attrs": { "placeholder": "Days" } }, "label_hours": { "attrs": { "placeholder": "Hours" } }, "label_minutes": { "attrs": { "placeholder": "Minutes" } }, "label_seconds": { "attrs": { "placeholder": "Seconds" } }, "show_label": { "description": "Enter labels for the countdown time.", "type": "checkbox", "text": "Show Labels" }, "grid_column_gap": { "label": "Column Gap", "description": "Set the size of the column gap between the numbers.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "grid_row_gap": { "label": "Row Gap", "description": "Set the size of the row gap between the numbers.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "show_separator": { "label": "Separator", "description": "Show a separator between the numbers.", "type": "checkbox", "text": "Show Separators" }, "label_margin": { "label": "Label Margin", "description": "Set the margin between the countdown and the label text.", "type": "select", "options": { "Default": "", "Small": "small", "Medium": "medium", "None": "remove" }, "enable": "show_label" }, "position": "${builder.position}", "position_left": "${builder.position_left}", "position_right": "${builder.position_right}", "position_top": "${builder.position_top}", "position_bottom": "${builder.position_bottom}", "position_z_index": "${builder.position_z_index}", "blend": "${builder.blend}", "margin": "${builder.margin}", "margin_remove_top": "${builder.margin_remove_top}", "margin_remove_bottom": "${builder.margin_remove_bottom}", "text_align": "${builder.text_align}", "text_align_breakpoint": "${builder.text_align_breakpoint}", "text_align_fallback": "${builder.text_align_fallback}", "animation": "${builder.animation}", "_parallax_button": "${builder._parallax_button}", "visibility": "${builder.visibility}", "name": "${builder.name}", "status": "${builder.status}", "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-element</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-element"] } }, "transform": "${builder.transform}" }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Content", "fields": [ "date", "label_days", "label_hours", "label_minutes", "label_seconds", "show_label" ] }, { "title": "Settings", "fields": [ { "label": "Countdown", "type": "group", "divider": true, "fields": [ "grid_column_gap", "grid_row_gap", "show_separator", "label_margin" ] }, { "label": "General", "type": "group", "fields": [ "position", "position_left", "position_right", "position_top", "position_bottom", "position_z_index", "blend", "margin", "margin_remove_top", "margin_remove_bottom", "text_align", "text_align_breakpoint", "text_align_fallback", "animation", "_parallax_button", "visibility" ] } ] }, "${builder.advanced}" ] } } } builder/elements/countdown/element.php000064400000000541151666572170014210 0ustar00<?php namespace YOOtheme; return [ 'placeholder' => [ 'props' => [ 'date' => date('Y-m-d', strtotime('+1 week')), ], ], 'transforms' => [ 'render' => function ($node) { // Don't render element if content fields are empty return (bool) $node->props['date']; }, ], ]; builder/elements/countdown/updates.php000064400000000356151666572170014230 0ustar00<?php namespace YOOtheme; return [ '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'gutter' => fn($value) => ['grid_column_gap' => $value, 'grid_row_gap' => $value], ]); }, ]; builder/elements/row/element.php000064400000000276151666572170013004 0ustar00<?php namespace YOOtheme; return [ 'transforms' => [ 'render' => function ($node, $params) { $node->props['parent'] = $params['parent']->type; }, ], ]; builder/elements/row/element.json000064400000121075151666572170013167 0ustar00{ "@import": "./element.php", "name": "row", "title": "Row", "container": true, "width": 500, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "layout": { "label": "Layout", "type": "select-img", "title": "Select a grid layout", "options": { "": { "label": "Whole", "src": "${url:images/whole.svg}" }, "1-2,1-2": { "label": "Halves", "src": "${url:images/halves.svg}" }, "1-3,1-3,1-3": { "label": "Thirds", "src": "${url:images/thirds.svg}" }, "1-4,1-4,1-4,1-4|1-2,1-2,1-2,1-2": { "label": "Quarters", "src": "${url:images/quarters.svg}" }, "1-5,1-5,1-5,1-5,1-5|1-2,1-2,1-3,1-3,1-3": { "label": "Fifths", "src": "${url:images/fifths.svg}" }, "1-6,1-6,1-6,1-6,1-6,1-6|1-3,1-3,1-3,1-3,1-3,1-3": { "label": "Sixths", "src": "${url:images/sixths.svg}" }, "2-3,1-3": { "label": "Thirds 2-1", "src": "${url:images/thirds-2-1.svg}" }, "1-3,2-3": { "label": "Thirds 1-2", "src": "${url:images/thirds-1-2.svg}" }, "3-4,1-4": { "label": "Quarters 3-1", "src": "${url:images/quarters-3-1.svg}" }, "1-4,3-4": { "label": "Quarters 1-3", "src": "${url:images/quarters-1-3.svg}" }, "1-2,1-4,1-4|1-1,1-2,1-2": { "label": "Quarters 2-1-1", "src": "${url:images/quarters-2-1-1.svg}" }, "1-4,1-4,1-2|1-2,1-2,1-1": { "label": "Quarters 1-1-2", "src": "${url:images/quarters-1-1-2.svg}" }, "1-4,1-2,1-4": { "label": "Quarters 1-2-1", "src": "${url:images/quarters-1-2-1.svg}" }, "2-5,3-5": { "label": "Fifths 2-3", "src": "${url:images/fifths-2-3.svg}" }, "3-5,2-5": { "label": "Fifths 3-2", "src": "${url:images/fifths-3-2.svg}" }, "1-5,4-5": { "label": "Fifths 1-4", "src": "${url:images/fifths-1-4.svg}" }, "4-5,1-5": { "label": "Fifths 4-1", "src": "${url:images/fifths-4-1.svg}" }, "3-5,1-5,1-5|1-1,1-2,1-2": { "label": "Fifths 3-1-1", "src": "${url:images/fifths-3-1-1.svg}" }, "1-5,1-5,3-5|1-2,1-2,1-1": { "label": "Fifths 1-1-3", "src": "${url:images/fifths-1-1-3.svg}" }, "1-5,3-5,1-5": { "label": "Fifths 1-3-1", "src": "${url:images/fifths-1-3-1.svg}" }, "2-5,1-5,1-5,1-5|1-1,1-3,1-3,1-3": { "label": "Fifths 2-1-1-1", "src": "${url:images/fifths-2-1-1-1.svg}" }, "1-5,1-5,1-5,2-5|1-3,1-3,1-3,1-1": { "label": "Fifths 1-1-1-2", "src": "${url:images/fifths-1-1-1-2.svg}" }, "1-6,5-6|1-5,4-5": { "label": "Sixths 1-5", "src": "${url:images/sixths-1-5.svg}" }, "5-6,1-6|4-5,1-5": { "label": "Sixths 5-1", "src": "${url:images/sixths-5-1.svg}" }, "large,expand": { "label": "Fixed-Left", "src": "${url:images/fixed-left.svg}" }, "expand,large": { "label": "Fixed-Right", "src": "${url:images/fixed-right.svg}" }, "expand,large,expand": { "label": "Fixed-Inner", "src": "${url:images/fixed-inner.svg}" }, "large,expand,large": { "label": "Fixed-Outer", "src": "${url:images/fixed-outer.svg}" } } }, "_layout": { "text": "Edit Layout", "description": "Customize the column widths of the selected layout and set the column order. Changing the layout will reset all customizations.", "type": "button-panel", "panel": "builder-row-layout" }, "columns": { "label": "Columns", "description": "Define a background style or an image of a column and set the vertical alignment for its content.", "type": "children" }, "column_gap": { "label": "Column Gap", "description": "Set the size of the gap between the grid columns.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "row_gap": { "label": "Row Gap", "description": "Set the size of the gap between the grid rows.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" } }, "divider": { "label": "Divider", "description": "Show a divider between grid columns.", "type": "checkbox", "text": "Show dividers", "enable": "column_gap != 'collapse' && row_gap != 'collapse'" }, "alignment": { "label": "Alignment", "description": "Expand columns equally to always fill remaining space within the row, center them or align them to the left.", "type": "select", "options": { "Justify": "", "Left": "left", "Center": "center" } }, "width": { "label": "Max Width", "type": "select", "options": { "Default": "default", "X-Small": "xsmall", "Small": "small", "Large": "large", "X-Large": "xlarge", "Expand": "expand", "None": "" } }, "padding_remove_horizontal": { "description": "Set the maximum content width. Note: The section may already have a maximum width, which you cannot exceed.", "type": "checkbox", "text": "Remove horizontal padding", "enable": "width && width != 'expand'" }, "width_expand": { "label": "Expand One Side", "description": "Expand the width of one side to the left or right while the other side keeps within the constraints of the max width.", "type": "select", "options": { "Don't expand": "", "To left": "left", "To right": "right" }, "enable": "width && width != 'expand'" }, "height": { "type": "select", "options": { "None": "", "Pixels": "pixels", "Viewport": "viewport" } }, "height_viewport": { "type": "number", "attrs": { "placeholder": "100", "min": 0, "step": 10 }, "enable": "height" }, "height_offset_top": { "description": "Set a fixed height for all columns. They will keep their height when stacking. Optionally, subtract the header height to fill the first visible viewport.", "type": "checkbox", "text": "Subtract height above row", "enable": "height == 'viewport' && (height_viewport || 0) <= 100" }, "margin": { "label": "Margin", "type": "select", "options": { "Keep existing": "", "Small": "small", "Default": "default", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "None": "remove-vertical" } }, "margin_remove_top": { "type": "checkbox", "text": "Remove top margin", "enable": "margin != 'remove-vertical'" }, "margin_remove_bottom": { "description": "Set the vertical margin. Note: The first grid's top margin and the last grid's bottom margin are always removed. Define those in the section settings instead.", "type": "checkbox", "text": "Remove bottom margin", "enable": "margin != 'remove-vertical'" }, "html_element": "${builder.html_element}", "parallax": { "label": "Column Parallax", "description": "Set a parallax animation to move columns with different heights until they justify at the bottom. Mind that this disables the vertical alignment of elements in the columns.", "type": "checkbox", "text": "Justify columns at the bottom" }, "parallax_start": { "label": "Start", "enable": "parallax" }, "parallax_end": { "label": "End", "enable": "parallax" }, "status": { "label": "Status", "description": "Disable the row and publish it later.", "type": "checkbox", "text": "Disable row", "attrs": { "true-value": "disabled", "false-value": "" } }, "source": "${builder.source}", "id": "${builder.id}", "class": "${builder.cls}", "attributes": "${builder.attrs}", "css": { "label": "CSS", "description": "Enter your own custom CSS. The following selectors will be prefixed automatically for this element: <code>.el-row</code>", "type": "editor", "editor": "code", "mode": "css", "attrs": { "debounce": 500, "hints": [".el-row"] } } }, "fieldset": { "default": { "type": "tabs", "fields": [ { "title": "Settings", "fields": [ "layout", "_layout", "columns", "column_gap", "row_gap", "divider", "alignment", "width", "padding_remove_horizontal", "width_expand", { "label": "Column Height", "name": "_height", "type": "grid", "width": "3-4,1-4", "gap": "small", "fields": ["height", "height_viewport"] }, "height_offset_top", "margin", "margin_remove_top", "margin_remove_bottom", "html_element", "parallax", { "description": "The animation starts when the row enters the viewport and ends when it leaves the viewport. Optionally, set a start and end offset, e.g. <code>100px</code>, <code>50vh</code> or <code>50vh + 50%</code>. Percent relates to the row's height.", "name": "_parallax", "type": "grid", "width": "1-2", "fields": ["parallax_start", "parallax_end"] } ] }, { "title": "Advanced", "fields": ["status", "source", "id", "class", "attributes", "css"] } ] } }, "panels": { "builder-row-layout": { "title": "Column Layout", "width": 500, "fields": [ { "label": "Column 1", "type": "group", "divider": true, "fields": [ { "label": "Phone Portrait", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 0, "field": { "name": "width_default", "type": "select", "options": "${builder.column_width_options_default}" } }, { "label": "Phone Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 0, "field": { "name": "width_small", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Tablet Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 0, "field": { "name": "width_medium", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Desktop", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 0, "field": { "name": "width_large", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Large Screen", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 0, "field": { "name": "width_xlarge", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Order First", "type": "child-prop", "description": "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.", "index": 0, "field": { "name": "order_first", "type": "select", "options": "${builder.column_order_first_options}" } } ] }, { "label": "Column 2", "type": "group", "divider": true, "fields": [ { "label": "Phone Portrait", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 1, "field": { "name": "width_default", "type": "select", "options": "${builder.column_width_options_default}" } }, { "label": "Phone Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 1, "field": { "name": "width_small", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Tablet Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 1, "field": { "name": "width_medium", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Desktop", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 1, "field": { "name": "width_large", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Large Screen", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 1, "field": { "name": "width_xlarge", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Order First", "description": "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.", "type": "child-prop", "index": 1, "field": { "name": "order_first", "type": "select", "options": "${builder.column_order_first_options}" } } ], "show": "this.node.children.length > 1" }, { "label": "Column 3", "type": "group", "divider": true, "fields": [ { "label": "Phone Portrait", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 2, "field": { "name": "width_default", "type": "select", "options": "${builder.column_width_options_default}" } }, { "label": "Phone Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 2, "field": { "name": "width_small", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Tablet Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 2, "field": { "name": "width_medium", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Desktop", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 2, "field": { "name": "width_large", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Large Screen", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 2, "field": { "name": "width_xlarge", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Order First", "description": "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.", "type": "child-prop", "index": 2, "field": { "name": "order_first", "type": "select", "options": "${builder.column_order_first_options}" } } ], "show": "this.node.children.length > 2" }, { "label": "Column 4", "type": "group", "divider": true, "fields": [ { "label": "Phone Portrait", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 3, "field": { "name": "width_default", "type": "select", "options": "${builder.column_width_options_default}" } }, { "label": "Phone Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 3, "field": { "name": "width_small", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Tablet Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 3, "field": { "name": "width_medium", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Desktop", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 3, "field": { "name": "width_large", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Large Screen", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 3, "field": { "name": "width_xlarge", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Order First", "description": "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.", "type": "child-prop", "index": 3, "field": { "name": "order_first", "type": "select", "options": "${builder.column_order_first_options}" } } ], "show": "this.node.children.length > 3" }, { "label": "Column 5", "type": "group", "divider": true, "fields": [ { "label": "Phone Portrait", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 4, "field": { "name": "width_default", "type": "select", "options": "${builder.column_width_options_default}" } }, { "label": "Phone Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 4, "field": { "name": "width_small", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Tablet Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 4, "field": { "name": "width_medium", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Desktop", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 4, "field": { "name": "width_large", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Large Screen", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 4, "field": { "name": "width_xlarge", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Order First", "description": "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.", "type": "child-prop", "index": 4, "field": { "name": "order_first", "type": "select", "options": "${builder.column_order_first_options}" } } ], "show": "this.node.children.length > 4" }, { "label": "Column 6", "type": "group", "fields": [ { "label": "Phone Portrait", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 5, "field": { "name": "width_default", "type": "select", "options": "${builder.column_width_options_default}" } }, { "label": "Phone Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 5, "field": { "name": "width_small", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Tablet Landscape", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 5, "field": { "name": "width_medium", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Desktop", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 5, "field": { "name": "width_large", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Large Screen", "description": "Set the column width for each breakpoint. Mix fraction widths or combine fixed widths with the <i>Expand</i> value. If no value is selected, the column width of the next smaller screen size is applied. The combination of widths should always take the full width.", "type": "child-prop", "index": 5, "field": { "name": "width_xlarge", "type": "select", "options": "${builder.column_width_options}" } }, { "label": "Order First", "description": "Select the breakpoint from which the column will start to appear before other columns. On smaller screen sizes, the column will appear in the natural order.", "type": "child-prop", "index": 5, "field": { "name": "order_first", "type": "select", "options": "${builder.column_order_first_options}" } } ], "show": "this.node.children.length > 5" } ] } } } builder/elements/row/updates.php000064400000016762151666572170013027 0ustar00<?php namespace YOOtheme; return [ // Remove obsolete props '4.5.0-beta.0.4' => function ($node) { unset( $node->props['match'], $node->props['vertical_align'] ); }, '4.3.0-beta.0.5' => function ($node, $params) { if ($height = Arr::get($node->props, 'height')) { $node->props['height'] = 'viewport'; if ( ($params['updateContext']['sectionIndex'] ?? 0) < 2 && empty($params['updateContext']['height']) ) { $node->props['height_offset_top'] = true; } if ($height === 'percent') { $node->props['height_viewport'] = 80; } $params['updateContext']['height'] = true; } }, '4.3.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'match')) { $panels = []; $columns = []; foreach ($node->children as $column) { foreach ($column->children ?? [] as $element) { if ( $element->type === 'panel' && str_starts_with($element->props->panel_style ?? '', 'card-') ) { if (!in_array($column, $columns, true)) { $columns[] = $column; } $panels[] = $element; } } } if (count($columns) > 1) { foreach ($columns as $column) { unset($column->props->vertical_align); } foreach ($panels as $panel) { $panel->props->height_expand = true; } } } unset($node->props['match']); }, '2.3.0-beta.1.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if ($style == 'fjord') { if (Arr::get($node->props, 'width') === 'default') { $node->props['width'] = 'large'; } } }, '2.1.0-beta.1.1' => function ($node) { if (($node->props['layout'] ?? '') === '1-1') { unset($node->props['layout']); } }, '2.1.0-beta.0.1' => function ($node) { if (empty($node->props['layout'])) { $node->props['layout'] = '1-1'; } switch ($node->props['layout']) { case ',': $node->props['layout'] = '1-2,1-2'; break; case ',,': $node->props['layout'] = '1-3,1-3,1-3'; break; case 'fixed,': $node->props['layout'] = 'large,expand'; break; case ',fixed': $node->props['layout'] = 'expand,large'; break; case ',fixed,': $node->props['layout'] = 'expand,large,expand'; break; case 'fixed,,fixed': $node->props['layout'] = 'large,expand,large'; break; } if (empty($node->props['breakpoint'])) { $node->props['breakpoint'] = 'm'; } $breakpoint = $node->props['breakpoint']; $breakpoints = array_slice( ['xlarge', 'large', 'medium', 'small', 'default'], array_search($breakpoint, ['xl', 'l', 'm', 's', '']), ); if (!empty($node->props['layout'])) { $layouts = explode('|', $node->props['layout']); while ( count($layouts) + 1 > count($breakpoints) && isset($layouts[count($layouts) - 1]) ) { unset($layouts[count($layouts) - 1]); } foreach ($layouts as $widths) { $breakpoint = array_shift($breakpoints); $prop = "width_{$breakpoint}"; foreach (explode(',', $widths) as $index => $width) { if (!isset($node->children[$index]->props)) { continue; } if (empty($node->props['fixed_width'])) { $node->props['fixed_width'] = 'large'; } if ($node->props['fixed_width'] === 'xxlarge') { $node->props['fixed_width'] = '2xlarge'; } if (is_array($node->children[$index]->props)) { $node->children[$index]->props = (object) $node->children[$index]->props; } $node->children[$index]->props->$prop = $width === 'large' ? $node->props['fixed_width'] : $width; } } } $count = count($node->children); if (!empty($node->props['order_last']) && $count > 1) { if (is_array($node->children[$count - 1]->props)) { $node->children[$count - 1]->props = (object) $node->children[$count - 1]->props; } $node->children[$count - 1]->props->order_first = $node->props['breakpoint'] ?: 'xs'; } unset( $node->props['breakpoint'], $node->props['fixed_width'], $node->props['order_last'], ); }, '2.0.0-beta.5.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if (!in_array($style, ['jack-baker', 'morgan-consulting', 'vibe'])) { if (Arr::get($node->props, 'width') === 'large') { $node->props['width'] = 'xlarge'; } } if ( in_array($style, [ 'craft', 'district', 'florence', 'makai', 'matthew-taylor', 'pinewood-lake', 'summit', 'tomsen-brody', 'trek', 'vision', 'yard', ]) ) { if (Arr::get($node->props, 'width') === 'default') { $node->props['width'] = 'large'; } } }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'gutter' => fn($value) => ['column_gap' => $value, 'row_gap' => $value], ]); if (empty($node->props['layout'])) { return; } switch ($node->props['layout']) { case '2-3,': $node->props['layout'] = '2-3,1-3'; break; case ',2-3': $node->props['layout'] = '1-3,2-3'; break; case '3-4,': $node->props['layout'] = '3-4,1-4'; break; case ',3-4': $node->props['layout'] = '1-4,3-4'; break; case '1-2,,|1-1,1-2,1-2': $node->props['layout'] = '1-2,1-4,1-4|1-1,1-2,1-2'; break; case ',,1-2|1-2,1-2,1-1': $node->props['layout'] = '1-4,1-4,1-2|1-2,1-2,1-1'; break; case ',1-2,': case ',1-2,|1-2,1-1,1-2': $node->props['layout'] = '1-4,1-2,1-4'; break; case ',,,|1-2,1-2,1-2,1-2': $node->props['layout'] = '1-4,1-4,1-4,1-4|1-2,1-2,1-2,1-2'; break; } }, ]; builder/elements/row/templates/content.php000064400000000051151666572170015012 0ustar00<?php echo $builder->render($children); builder/elements/row/templates/template.php000064400000003251151666572170015160 0ustar00<?php $el = $this->el(!$props['width'] && $props['html_element'] ? $props['html_element'] : 'div', $attrs); $el->attr([ 'class' => [ 'uk-grid', 'tm-grid-expand {!alignment}', 'uk-flex-center {@alignment:center}', $props['column_gap'] == $props['row_gap'] ? 'uk-grid-{column_gap}' : '[uk-grid-column-{column_gap}] [uk-grid-row-{row_gap}]', 'uk-grid-divider {@divider} {@!column_gap:collapse} {@!row_gap:collapse}' => count($children) > 1, 'uk-child-width-1-1 {@!layout}', 'uk-flex-top {@parallax}', ], 'uk-grid' => $props['parallax'] ? [ 'parallax: 0;', 'parallax-justify: true;', 'parallax-start: {parallax_start};', 'parallax-end: {parallax_end};', ] : count($children) > 1, ]); // Margin $margin = $this->el($props['html_element'] ?: 'div', [ 'class' => [ 'uk-grid-margin[-{row_gap}] {@!margin} {@row_gap: |small|medium|large}', 'uk-margin {@margin: default}', 'uk-margin-{!margin: |default}', 'uk-margin-remove-top {@margin_remove_top}{@!margin: remove-vertical}', 'uk-margin-remove-bottom {@margin_remove_bottom}{@!margin: remove-vertical}', 'uk-container {@width}', 'uk-container-{width}{@width: xsmall|small|large|xlarge|expand}', 'uk-padding-remove-horizontal' => ($props['padding_remove_horizontal'] && $props['width'] && $props['width'] != 'expand') || $props['parent'] == 'layout', 'uk-container-expand-{width_expand} {@width} {@!width:expand}', ], ]); echo $props['width'] ? $margin($props, $el($props, $builder->render($children))) : $el($props, $margin->attrs, $builder->render($children)); builder/elements/row/images/fifths-2-1-1-1.svg000064400000000715151666572170014702 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="46" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="55" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="82" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="109" y="1" /> </svg> builder/elements/row/images/whole.svg000064400000000271151666572170013741 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="128" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> </svg> builder/elements/row/images/quarters-1-3.svg000064400000000424151666572170014767 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="94" height="66" fill="none" stroke="#444" stroke-width="2" x="35" y="1" /> </svg> builder/elements/row/images/quarters.svg000064400000000715151666572170014474 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="35" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="69" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="103" y="1" /> </svg> builder/elements/row/images/fifths-3-1-1.svg000064400000000561151666572170014544 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="73" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="82" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="109" y="1" /> </svg> builder/elements/row/images/sixths.svg000064400000001205151666572170014143 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="13" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="13" height="66" fill="none" stroke="#444" stroke-width="2" x="24" y="1" /> <rect width="13" height="66" fill="none" stroke="#444" stroke-width="2" x="47" y="1" /> <rect width="13" height="66" fill="none" stroke="#444" stroke-width="2" x="70" y="1" /> <rect width="13" height="66" fill="none" stroke="#444" stroke-width="2" x="93" y="1" /> <rect width="13" height="66" fill="none" stroke="#444" stroke-width="2" x="116" y="1" /> </svg> builder/elements/row/images/thirds-2-1.svg000064400000000424151666572170014415 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="83" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="35" height="66" fill="none" stroke="#444" stroke-width="2" x="94" y="1" /> </svg> builder/elements/row/images/fixed-outer.svg000064400000001227151666572170015060 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="103" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="56" height="66" fill="none" stroke="#444" stroke-width="2" x="37" y="1" /> <polyline fill="none" stroke="#444" points="78,30 83,35.5 78,41" /> <polyline fill="none" stroke="#444" points="52,41 47,35.5 52,30" /> <line fill="none" stroke="#444" x1="72" y1="35.5" x2="83" y2="35.5" /> <line fill="none" stroke="#444" x1="58" y1="35.5" x2="47" y2="35.5" /> </svg> builder/elements/row/images/quarters-1-2-1.svg000064400000000561151666572170015126 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="103" y="1" /> <rect width="60" height="66" fill="none" stroke="#444" stroke-width="2" x="35" y="1" /> </svg> builder/elements/row/images/halves.svg000064400000000424151666572170014105 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="59" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="59" height="66" fill="none" stroke="#444" stroke-width="2" x="70" y="1" /> </svg> builder/elements/row/images/fixed-inner.svg000064400000001700151666572170015031 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="52" y="1" /> <rect width="43" height="66" fill="none" stroke="#444" stroke-width="2" x="86" y="1" /> <rect width="43" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <polyline fill="none" stroke="#444" points="32,30 37,35.5 32,41" /> <polyline fill="none" stroke="#444" points="13,41 8,35.5 13,30" /> <polyline fill="none" stroke="#444" points="117,30 122,35.5 117,41" /> <polyline fill="none" stroke="#444" points="98,41 93,35.5 98,30" /> <line fill="none" stroke="#444" x1="26" y1="35.5" x2="37" y2="35.5" /> <line fill="none" stroke="#444" x1="19" y1="35.5" x2="8" y2="35.5" /> <line fill="none" stroke="#444" x1="111" y1="35.5" x2="122" y2="35.5" /> <line fill="none" stroke="#444" x1="104" y1="35.5" x2="93" y2="35.5" /> </svg> builder/elements/row/images/fifths-1-1-3.svg000064400000000560151666572170014543 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="28" y="1" /> <rect width="73" height="66" fill="none" stroke="#444" stroke-width="2" x="55" y="1" /> </svg> builder/elements/row/images/sixths-1-5.svg000064400000000425151666572170014446 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="13" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="107" height="66" fill="none" stroke="#444" stroke-width="2" x="22" y="1" /> </svg> builder/elements/row/images/quarters-2-1-1.svg000064400000000561151666572170015126 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="60" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="69" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="103" y="1" /> </svg> builder/elements/row/images/fifths-1-3-1.svg000064400000000561151666572170014544 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="73" height="66" fill="none" stroke="#444" stroke-width="2" x="28" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="109" y="1" /> </svg> builder/elements/row/images/fifths-3-2.svg000064400000000424151666572170014405 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="73" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="46" height="66" fill="none" stroke="#444" stroke-width="2" x="82" y="1" /> </svg> builder/elements/row/images/fifths-4-1.svg000064400000000426151666572170014407 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="101" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="109" y="1" /> </svg> builder/elements/row/images/fifths.svg000064400000001051151666572170014103 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="28" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="55" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="82" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="109" y="1" /> </svg> builder/elements/row/images/thirds-1-2.svg000064400000000424151666572170014415 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="35" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="83" height="66" fill="none" stroke="#444" stroke-width="2" x="46" y="1" /> </svg> builder/elements/row/images/fifths-1-4.svg000064400000000425151666572170014406 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="101" height="66" fill="none" stroke="#444" stroke-width="2" x="28" y="1" /> </svg> builder/elements/row/images/quarters-1-1-2.svg000064400000000560151666572170015125 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="35" y="1" /> <rect width="60" height="66" fill="none" stroke="#444" stroke-width="2" x="69" y="1" /> </svg> builder/elements/row/images/fixed-right.svg000064400000001116151666572170015034 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="35" height="66" fill="none" stroke="#444" stroke-width="2" x="94" y="1" /> <rect width="83" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <polyline fill="none" stroke="#444" points="69.3,30 74.3,35.5 69.3,41" /> <polyline fill="none" stroke="#444" points="15.7,41 10.7,35.5 15.7,30" /> <line fill="none" stroke="#444" x1="63.3" y1="35.5" x2="74.3" y2="35.5" /> <line fill="none" stroke="#444" x1="21.7" y1="35.5" x2="10.7" y2="35.5" /> </svg> builder/elements/row/images/fifths-2-3.svg000064400000000424151666572170014405 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="46" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="73" height="66" fill="none" stroke="#444" stroke-width="2" x="55" y="1" /> </svg> builder/elements/row/images/thirds.svg000064400000000560151666572170014121 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="36" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="36" height="66" fill="none" stroke="#444" stroke-width="2" x="47" y="1" /> <rect width="36" height="66" fill="none" stroke="#444" stroke-width="2" x="93" y="1" /> </svg> builder/elements/row/images/quarters-3-1.svg000064400000000425151666572170014770 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="94" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="26" height="66" fill="none" stroke="#444" stroke-width="2" x="103" y="1" /> </svg> builder/elements/row/images/fifths-1-1-1-2.svg000064400000000714151666572170014701 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="28" y="1" /> <rect width="19" height="66" fill="none" stroke="#444" stroke-width="2" x="55" y="1" /> <rect width="46" height="66" fill="none" stroke="#444" stroke-width="2" x="82" y="1" /> </svg> builder/elements/row/images/sixths-5-1.svg000064400000000426151666572170014447 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="107" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="13" height="66" fill="none" stroke="#444" stroke-width="2" x="115" y="1" /> </svg> builder/elements/row/images/fixed-left.svg000064400000001123151666572170014647 0ustar00<svg width="130" height="68" viewBox="0 0 130 68" xmlns="http://www.w3.org/2000/svg"> <rect width="35" height="66" fill="none" stroke="#444" stroke-width="2" x="1" y="1" /> <rect width="83" height="66" fill="none" stroke="#444" stroke-width="2" x="46" y="1" /> <polyline fill="none" stroke="#444" points="114.3,29 119.3,34.5 114.3,40" /> <polyline fill="none" stroke="#444" points="60.6,40 55.6,34.5 60.6,29" /> <line fill="none" stroke="#444" x1="108.3" y1="34.5" x2="119.3" y2="34.5" /> <line fill="none" stroke="#444" x1="66.6" y1="34.5" x2="55.6" y2="34.5" /> </svg> builder/elements/switcher/templates/template.php000064400000005327151666572170016207 0ustar00<?php $props['connect'] = "js-{$this->uid()}"; $props['item_nav'] = "js-{$this->uid()}"; $el = $this->el('div'); // Nav Alignment $grid = $this->el('div', [ 'class' => [ 'uk-child-width-expand', $props['nav_grid_column_gap'] == $props['nav_grid_row_gap'] ? 'uk-grid-{nav_grid_column_gap}' : '[uk-grid-column-{nav_grid_column_gap}] [uk-grid-row-{nav_grid_row_gap}]', 'uk-flex-middle {@nav_vertical_align}', ], 'uk-grid' => true, ]); $cell = $this->el('div', [ 'class' => [ 'uk-width-{nav_grid_width}@{nav_grid_breakpoint}', 'uk-flex-last@{nav_grid_breakpoint} {@nav_position: right}', ], ]); // Content $content = $this->el('div', [ 'id' => ['{connect}'], 'class' => [ 'uk-switcher', 'uk-margin-auto uk-width-{item_maxwidth}', ], 'uk-height-match' => ['row: false {@switcher_height}'], ]); ?> <?= $el($props, $attrs) ?> <?php if ($props['nav'] && in_array($props['nav_position'], ['left', 'right'])) : ?> <?= $grid($props) ?> <?= $cell($props, $this->render("{$__dir}/template-nav", compact('props'))) ?> <div> <?= $content($props) ?> <?php foreach ($children as $child) : $content_item = $this->el('div', [ 'class' => [ 'el-item', 'uk-margin-remove-first-child' => !$child->props['image'] || !in_array($props['image_align'], ['left', 'right']), ], ]); ?> <?= $content_item($props, $builder->render($child, ['element' => $props])) ?> <?php endforeach ?> <?= $content->end() ?> </div> <?= $grid->end() ?> <?php else : ?> <?php if ($props['nav_position'] == 'top') : ?> <?= $this->render("{$__dir}/template-nav", compact('props')) ?> <?php endif ?> <?= $content($props) ?> <?php foreach ($children as $child) : $content_item = $this->el('div', [ 'class' => [ 'el-item', 'uk-margin-remove-first-child' => !$child->props['image'] || !in_array($props['image_align'], ['left', 'right']), ], ]); ?> <?= $content_item($props, $builder->render($child, ['element' => $props])) ?> <?php endforeach ?> <?= $content->end() ?> <?php if ($props['nav_position'] == 'bottom') : ?> <?= $this->render("{$__dir}/template-nav", compact('props')) ?> <?php endif ?> <?php endif ?> <?= $el->end() ?> builder/elements/switcher/templates/template-nav.php000064400000005064151666572170016767 0ustar00<?php $nav = $this->el('ul', [ 'class' => [ 'el-nav', 'uk-margin[-{nav_margin}] {@nav_position: top|bottom}', 'uk-{nav: thumbnav} [uk-flex-nowrap {@thumbnav_nowrap}]', ], 'hidden' => !$props['nav'], $props['nav'] == 'tab' ? 'uk-tab' : 'uk-switcher' => [ 'connect: #{connect};', 'itemNav: #{item_nav};', 'animation: uk-animation-{switcher_animation};', 'media: @{nav_grid_breakpoint} {@nav_position: left|right} {@nav: tab};', ], 'uk-margin' => $props['nav'] === 'thumbnav' && !$props['thumbnav_nowrap'], ]); $nav_horizontal = [ 'uk-subnav {@nav: subnav-.*}', 'uk-{nav: subnav.*}', 'uk-tab-{nav_position: bottom} {@nav: tab}', 'uk-flex-{nav_align: right|center}', 'uk-child-width-expand {@nav_align: justify}', ]; $nav_vertical = [ 'uk-nav uk-nav-[primary {@nav_style_primary}][default {@!nav_style_primary}] [uk-text-left {@text_align}] {@nav: subnav.*}', 'uk-tab-{nav_position} {@nav: tab}', 'uk-thumbnav-vertical {@nav: thumbnav}', ]; $nav_switcher = in_array($props['nav_position'], ['top', 'bottom']) ? ['class' => $nav_horizontal] : ['class' => $nav_vertical, 'uk-toggle' => $props['nav'] != 'tab' ? [ "cls: {$this->expr(array_merge($nav_vertical, $nav_horizontal), $props)};", 'mode: media;', 'media: @{nav_grid_breakpoint};', ] : false, ]; ?> <?= $nav($props, $nav_switcher) ?> <?php foreach ($children as $child) : // Image $image = $this->el('image', [ 'class' => [ 'uk-text-{thumbnav_svg_color}' => $props['thumbnav_svg_inline'] && $props['thumbnav_svg_color'] && $this->isImage($child->props['thumbnail'] ?: $child->props['image']) == 'svg', ], 'src' => $child->props['thumbnail'] ?: $child->props['image'], 'alt' => $child->props['label'] ?: $child->props['title'], 'loading' => $props['image_loading'] ? false : null, 'width' => $props['thumbnav_width'], 'height' => $props['thumbnav_height'], 'focal_point' => $child->props['thumbnail'] ? $child->props['thumbnail_focal_point'] : $child->props['image_focal_point'], 'uk-svg' => (bool) $props['thumbnav_svg_inline'], 'thumbnail' => true, ]); $thumbnail = $image->attrs['src'] && $props['nav'] == 'thumbnav' ? $image($props) : ''; ?> <li> <a href><?= $thumbnail ?: $child->props['label'] ?: $child->props['title'] ?></a> </li> <?php endforeach ?> <?= $nav->end() ?> builder/elements/switcher/templates/content.php000064400000000522151666572170016036 0ustar00<?php if (count($children) > 1) : ?> <ul> <?php foreach ($children as $child) : ?> <li> <?= $builder->render($child, ['element' => $props]) ?> </li> <?php endforeach ?> </ul> <?php elseif (count($children) == 1) : ?> <div> <?= $builder->render($children[0], ['element' => $props]) ?> </div> <?php endif ?> builder/elements/switcher/updates.php000064400000016736151666572170014051 0ustar00<?php namespace YOOtheme; return [ '2.8.0-beta.0.13' => function ($node) { foreach (['title_style', 'meta_style', 'content_style'] as $prop) { if (in_array(Arr::get($node->props, $prop), ['meta', 'lead'])) { $node->props[$prop] = 'text-' . Arr::get($node->props, $prop); } } }, '2.7.0-beta.0.6' => function ($node) { if (empty($node->props['nav'])) { $node->props['nav'] = 'tab'; } unset( $node->props['slidenav'], $node->props['slidenav_hover'], $node->props['slidenav_large'], $node->props['slidenav_margin'], $node->props['slidenav_breakpoint'], $node->props['slidenav_color'], $node->props['slidenav_outside_breakpoint'], $node->props['slidenav_outside_color'], $node->props['slidenav_outside_color'], $node->props['slidenav_outside_color'], $node->props['slidenav_outside_color'], ); }, '2.7.0-beta.0.3' => function ($node) { Arr::updateKeys($node->props, ['switcher_thumbnail_height' => 'thumbnav_height']); }, '2.7.0-beta.0.2' => function ($node) { Arr::updateKeys($node->props, [ 'switcher_style' => 'nav', 'switcher_thumbnail_nowrap' => 'thumbnav_nowrap', 'switcher_thumbnail_width' => 'thumbnav_width', 'switcher_thumbnail_height' => 'thumbnav_height', 'switcher_thumbnail_svg_inline' => 'thumbnav_svg_inline', 'switcher_thumbnail_svg_color' => 'thumbnav_svg_color', 'switcher_position' => 'nav_position', 'nav_primary' => 'nav_style_primary', 'switcher_align' => 'nav_align', 'switcher_margin' => 'nav_margin', 'switcher_grid_width' => 'nav_grid_width', 'switcher_grid_column_gap' => 'nav_grid_column_gap', 'switcher_grid_row_gap' => 'nav_grid_row_gap', 'switcher_grid_breakpoint' => 'nav_grid_breakpoint', 'switcher_vertical_align' => 'nav_vertical_align', ]); }, '2.1.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'title_grid_width') === 'xxlarge') { $node->props['title_grid_width'] = '2xlarge'; } if (Arr::get($node->props, 'image_grid_width') === 'xxlarge') { $node->props['image_grid_width'] = '2xlarge'; } }, '1.22.0-beta.0.1' => function ($node) { Arr::updateKeys($node->props, [ 'switcher_breakpoint' => 'switcher_grid_breakpoint', 'title_breakpoint' => 'title_grid_breakpoint', 'image_breakpoint' => 'image_grid_breakpoint', 'switcher_gutter' => fn($value) => [ 'switcher_grid_column_gap' => $value, 'switcher_grid_row_gap' => $value, ], 'title_gutter' => fn($value) => [ 'title_grid_column_gap' => $value, 'title_grid_row_gap' => $value, ], 'image_gutter' => fn($value) => [ 'image_grid_column_gap' => $value, 'image_grid_row_gap' => $value, ], ]); }, '1.20.0-beta.1.1' => function ($node) { Arr::updateKeys($node->props, ['maxwidth_align' => 'block_align']); }, '1.20.0-beta.0.1' => function ($node) { /** @var Config $config */ $config = app(Config::class); [$style] = explode(':', $config('~theme.style')); if (Arr::get($node->props, 'title_style') === 'heading-primary') { $node->props['title_style'] = 'heading-medium'; } if ( in_array($style, [ 'craft', 'district', 'jack-backer', 'tomsen-brody', 'vision', 'florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek', ]) ) { if ( Arr::get($node->props, 'title_style') === 'h1' || (empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1') ) { $node->props['title_style'] = 'heading-small'; } } if (in_array($style, ['florence', 'max', 'nioh-studio', 'sonic', 'summit', 'trek'])) { if (Arr::get($node->props, 'title_style') === 'h2') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h2' ) { $node->props['title_style'] = 'h1'; } } if (in_array($style, ['fuse', 'horizon', 'joline', 'juno', 'lilian', 'vibe', 'yard'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-small'; } } if ($style == 'copper-hill') { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h1' ? '' : 'h1'; } elseif (Arr::get($node->props, 'title_style') === 'h1') { $node->props['title_style'] = Arr::get($node->props, 'title_element') === 'h2' ? '' : 'h2'; } elseif ( empty($node->props['title_style']) && Arr::get($node->props, 'title_element') === 'h1' ) { $node->props['title_style'] = 'h2'; } } if (in_array($style, ['trek', 'fjord'])) { if (Arr::get($node->props, 'title_style') === 'heading-medium') { $node->props['title_style'] = 'heading-large'; } } }, '1.19.0-beta.0.1' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { $node->props['meta_align'] = 'above-title'; } if (Arr::get($node->props, 'meta_align') === 'bottom') { $node->props['meta_align'] = 'below-title'; } }, '1.18.10.3' => function ($node) { if (Arr::get($node->props, 'meta_align') === 'top') { if (!empty($node->props['meta_margin'])) { $node->props['title_margin'] = $node->props['meta_margin']; } $node->props['meta_margin'] = ''; } }, '1.18.10.1' => function ($node) { Arr::updateKeys($node->props, [ 'image_inline_svg' => 'image_svg_inline', 'image_animate_svg' => 'image_svg_animate', 'switcher_thumbnail_inline_svg' => 'switcher_thumbnail_svg_inline', ]); }, '1.18.0' => function ($node) { if (Arr::get($node->props, 'switcher_style') === 'thumbnail') { $node->props['switcher_style'] = 'thumbnav'; } if ( !isset($node->props['image_box_decoration']) && Arr::get($node->props, 'image_box_shadow_bottom') === true ) { $node->props['image_box_decoration'] = 'shadow'; } if ( !isset($node->props['meta_color']) && Arr::get($node->props, 'meta_style') === 'muted' ) { $node->props['meta_color'] = 'muted'; $node->props['meta_style'] = ''; } }, ]; builder/elements/switcher/images/iconSmall.svg000064400000000655151666572170015573 0ustar00<svg width="20" height="20" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#444" points="9.5,5.5 8.5,3.5 1.5,3.5 1.5,16.5 18.5,16.5 18.5,5.5" /> <rect width="4" height="1" fill="#444" x="11" y="3" /> <rect width="6" height="1" fill="#444" x="4" y="9" /> <rect width="8" height="1" fill="#444" x="4" y="11" /> <rect width="3" height="1" fill="#444" x="16" y="3" /> </svg> builder/elements/switcher/images/icon.svg000064400000000653151666572170014600 0ustar00<svg width="30" height="30" viewBox="0 0 30 30" xmlns="http://www.w3.org/2000/svg"> <polygon fill="none" stroke="#444" stroke-width="2" points="14,9 11,5 1,5 1,26 29,26 29,9" /> <rect width="6" height="2" fill="#444" x="16" y="4" /> <rect width="10" height="2" fill="#444" x="5" y="14" /> <rect width="13" height="2" fill="#444" x="5" y="18" /> <rect width="6" height="2" fill="#444" x="24" y="4" /> </svg> builder/elements/switcher/element.json000064400000121402151666572170014202 0ustar00{ "name": "switcher", "title": "Switcher", "group": "multiple items", "icon": "${url:images/icon.svg}", "iconSmall": "${url:images/iconSmall.svg}", "element": true, "container": true, "width": 500, "defaults": { "show_title": true, "show_meta": true, "show_content": true, "show_image": true, "show_link": true, "show_label": true, "show_thumbnail": true, "switcher_animation": "fade", "switcher_height": true, "nav": "tab", "nav_position": "top", "nav_align": "left", "nav_grid_width": "auto", "nav_grid_breakpoint": "m", "thumbnav_svg_color": "emphasis", "title_element": "h3", "title_align": "top", "title_grid_width": "1-2", "title_grid_breakpoint": "m", "meta_style": "text-meta", "meta_align": "below-title", "meta_element": "div", "content_column_breakpoint": "m", "image_svg_color": "emphasis", "image_align": "top", "image_grid_width": "1-2", "image_grid_breakpoint": "m", "thumbnav_width": "100", "thumbnav_height": "75", "link_text": "Read more", "link_style": "default", "margin": "default" }, "placeholder": { "children": [ { "type": "switcher_item", "props": {} }, { "type": "switcher_item", "props": {} }, { "type": "switcher_item", "props": {} } ] }, "updates": "./updates.php", "templates": { "render": "./templates/template.php", "content": "./templates/content.php" }, "fields": { "content": { "label": "Items", "type": "content-items", "item": "switcher_item", "media": { "type": "image", "item": { "title": "title", "image": "src" } } }, "show_title": { "label": "Display", "type": "checkbox", "text": "Show the title" }, "show_meta": { "type": "checkbox", "text": "Show the meta text" }, "show_content": { "type": "checkbox", "text": "Show the content" }, "show_image": { "type": "checkbox", "text": "Show the image" }, "show_link": { "type": "checkbox", "text": "Show the link" }, "show_label": { "type": "checkbox", "text": "Show the navigation label instead of title" }, "show_thumbnail": { "description": "Show or hide content fields without the need to delete the content itself.", "type": "checkbox", "text": "Show the navigation thumbnail instead of the image" }, "switcher_animation": { "label": "Animation", "description": "Select an animation that will be applied to the content items when toggling between them.", "type": "select", "options": { "None": "", "Fade": "fade", "Scale Up": "scale-up", "Scale Down": "scale-down", "Slide Top Small": "slide-top-small", "Slide Bottom Small": "slide-bottom-small", "Slide Left Small": "slide-left-small", "Slide Right Small": "slide-right-small", "Slide Top Medium": "slide-top-medium", "Slide Bottom Medium": "slide-bottom-medium", "Slide Left Medium": "slide-left-medium", "Slide Right Medium": "slide-right-medium", "Slide Top 100%": "slide-top", "Slide Bottom 100%": "slide-bottom", "Slide Left 100%": "slide-left", "Slide Right 100%": "slide-right" } }, "switcher_height": { "label": "Match Height", "description": "Extend all content items to the same height.", "type": "checkbox", "text": "Match content height" }, "item_maxwidth": { "type": "select", "label": "Item Max Width", "description": "Set the maximum width.", "options": { "None": "", "Small": "small", "Medium": "medium", "Large": "large", "X-Large": "xlarge", "2X-Large": "2xlarge" } }, "nav": { "label": "Navigation", "description": "Select the navigation type. The pill and divider styles are only available for horizontal Subnavs.", "type": "select", "options": { "Tabs": "tab", "Subnav Pill (Nav)": "subnav-pill", "Subnav Divider (Nav)": "subnav-divider", "Subnav (Nav)": "subnav", "Thumbnav": "thumbnav" } }, "nav_position": { "label": "Position", "description": "Position the navigation at the top, bottom, left or right. A larger style can be applied to left and right navigations.", "type": "select", "options": { "Top": "top", "Bottom": "bottom", "Left": "left", "Right": "right" } }, "nav_style_primary": { "type": "checkbox", "text": "Primary navigation", "enable": "$match(nav_position, 'left|right') && $match(nav, '^subnav')" }, "nav_align": { "label": "Alignment", "description": "Align the navigation items.", "type": "select", "options": { "Left": "left", "Right": "right", "Center": "center", "Justify": "justify" }, "enable": "$match(nav_position, 'top|bottom')" }, "nav_margin": { "label": "Margin", "description": "Set the vertical margin.", "type": "select", "options": { "Small": "small", "Default": "", "Medium": "medium", "Large": "large", "X-Large": "xlarge" }, "enable": "$match(nav_position, 'top|bottom')" }, "nav_grid_width": { "label": "Grid Width", "description": "Define the width of the navigation. Choose between percent and fixed widths or expand columns to the width of their content.", "type": "select", "options": { "Auto": "auto", "50%": "1-2", "33%": "1-3", "25%": "1-4", "20%": "1-5", "Small": "small", "Medium": "medium", "Large": "large" }, "enable": "$match(nav_position, 'left|right')" }, "nav_grid_column_gap": { "label": "Grid Column Gap", "description": "Set the size of the gap between the navigation and the content.", "type": "select", "options": { "Small": "small", "Medium": "medium", "Default": "", "Large": "large", "None": "collapse" }, "